何鵬元 馬 中 戴新發(fā) 夏 靜
(中國船舶集團有限公司第七○九研究所 武漢 430205)
近年來,由于當今國際環(huán)境復雜,國家對于社會安防的建設不斷加強,對安防的系統(tǒng)化、全面化要求越來越高,而其中視頻監(jiān)控[1]是安防工作中最重要的方法,發(fā)揮著不可取代的作用。正當深度學習[2]等計算機視覺和圖像處理技術(shù)的發(fā)展,推動各個行業(yè)的迅速向智能化的方向演進,為視頻監(jiān)控的發(fā)展提供了新的思路,使得視頻監(jiān)控系統(tǒng)在安防環(huán)境應用中進入全新的階段,深度學習的應用對于邊防監(jiān)控視頻系統(tǒng)的檢測算法研究具有重要的價值。
早期的網(wǎng)絡結(jié)構(gòu)主要是通過卷積層的不斷堆疊以取得相對較好的結(jié)果,從AlexNet到VGG再到GooleNet[3],網(wǎng)絡模型的結(jié)構(gòu)層數(shù)不斷加深變寬,導致模型訓練的速度相對降低,如殘差網(wǎng)絡[4]add In?ception系列中的concat操作,多分支復雜結(jié)構(gòu)無疑增加了深度學習的速度,增加了顯存的消耗。還有一些輕量級的網(wǎng)絡,如DeepwiseConv和shuffleNet中的channel shuffle,這些固然能提升模型的速度,但是相對的也降低了模型的精度,還會提高訪存消耗。因此類似VGG的框架RepVGG[5]應運而生,該模型架構(gòu)簡單強大,完全可以理解為是為精度和速度之間最好的平衡,通過將訓練過程和推理時間進行解耦來實現(xiàn)精度和速度的完美兼得,即在模型進行前向推理時采用參數(shù)融合的方案來實現(xiàn)對于模型速度的提升,采用的技術(shù)簡稱為結(jié)構(gòu)重新參數(shù)化。
綜上所述,本文采用現(xiàn)階段主流的單階段目標檢測模型 YOLOv3[6],但是由于 YOLOv3 在對行人檢測時精度和速度有所欠缺,又由于RepVGG模型是VGG式的模型,并且單路結(jié)構(gòu)較為靈活,因此替換YOLOv3中的主干網(wǎng)絡Darknet-53,并且采用4個尺度的融合,根據(jù)樣本不平衡的問題采用聚焦損失函數(shù)提供模型的泛化能力,使得改進模型RV-YOLOv3在檢測的速度和精度上都優(yōu)于YO?LOv3。
改進模型中選擇RepVGG作為主干網(wǎng)絡,選擇VGG式的網(wǎng)絡原因一是網(wǎng)絡模型計算速度快,現(xiàn)有的計算庫cudnn、Inter MKL等和硬件這對3*3卷積有深度的優(yōu)化,相比其他卷積核,3*3卷積計算密度更高,更加有效,而且在FLOP相同的條件下,具有高并行度的模型可能會比低并行的模型快的多;原因二是節(jié)省內(nèi)存,我們知道多分支的結(jié)構(gòu)很消耗內(nèi)存,因為各個分支的結(jié)果需要保存,直到最后一步才能把各分支顯存釋放掉,RepVGG的Plain結(jié)構(gòu)只有一個分支,所以其顯存占用的一直是一份;原因三是靈活,多支結(jié)構(gòu)的引入會約束網(wǎng)絡結(jié)構(gòu),這種網(wǎng)絡不易擴展,而對應的RepVGG單路結(jié)構(gòu)就比較靈活,就算裁剪后也能得到較好的加速比。
具體改進模型如圖1所示。
圖1 RV-YOLOv3模型結(jié)構(gòu)
整個RepVGG網(wǎng)絡包含5個stage,stage1有1個殘差塊,輸出特征為112*112,通道個數(shù)為(64,64a);stage2有2個殘差塊,輸出特征56*56,通道數(shù)位64a個;stage3有4個殘差塊,輸出特征為28*28,通道數(shù)為128a;stage4有14個殘差塊,輸出特征為14*14,通道數(shù)為256a;stage5包含1個殘差塊,輸出特征圖大小為7*7,通道數(shù)為512b個。參數(shù)a和b用于控制殘差塊的通道個數(shù),本實驗中令a=0.75,b=2.5。
使用了RepVGG替代DarkNet-53,并且在原始模型的3個尺度融合擴展為4個尺度融合,提高模型的魯棒性,所以需要自下而上融合,進行四次上采樣用轉(zhuǎn)置卷積完成,最后得到4種尺度的特征(7*7/14*14/28*28/56*56)。
根據(jù)RepVGG模型的第一階段第一層可知數(shù)據(jù)圖像進行了步長為2,feature map大小為3*3的卷積操作,卷積神經(jīng)網(wǎng)絡[7]關(guān)鍵技術(shù)是對參數(shù)共享卷積及池化壓縮,由于數(shù)據(jù)降維提取抽象特征是卷積重點,為了降維使用stride為2的卷積操作,必定會丟失某些特征信息,影響識別精度。而池化雖說也會丟失,但是保留了主要特征,因此使用stride為1的卷積操作加最大池化代替strude為2的一步卷積,實現(xiàn)降維提高模型性能。池化說明效果如圖2所示。
圖2 池化層的作用
使用步長為1的卷積操作和池化,會得到圖像特征最為顯著的信息,若采用步長為2的卷積,會受到圖像中數(shù)字位置的影響進而影響檢測的效果。
單階段目標檢測方法的性能通常不如兩階段目標檢測方法的原因就是單階段目標檢測會面臨極端不平衡的目標-背景數(shù)據(jù)分布。使用聚焦損失函數(shù)通過該進經(jīng)典的交叉熵損失函數(shù)[8],降低了網(wǎng)絡訓練過程中的簡單背景的學習權(quán)重,提高模型的性能。原本使用softmax分類損失函數(shù)相當于標準的交叉熵損失函數(shù),各個樣本的權(quán)重是一樣的,那么對每個訓練樣本交叉熵直接求和,如下式所示:
CE表示交叉熵,p表示預測樣本屬于1的概率,y表示樣本的標簽,在二類交叉熵損失函數(shù)中,y的取值為1或-1,用 pt表示樣本屬于正例的概率:
那么式(1)可以化簡為
基于為了改進單階段目標檢測模型[9]在訓練時面臨的正負樣本數(shù)量不平衡的問題,在損失中給正負樣本加上權(quán)重,負樣本數(shù)量越多,權(quán)重越小,正樣本數(shù)量越少,權(quán)重越大的原則,設置權(quán)重來調(diào)整交叉熵損失函數(shù),使其能夠聚焦于難樣本,聚焦函數(shù)定義為
在式上 (1-pt)γ是權(quán)重表達式,γ是一個大于0的聚焦參數(shù)。
聚焦損失函數(shù)[10]相當于給各樣本分別加上了權(quán)重,這個權(quán)重與模型預測高樣本屬于正式類別的概率有關(guān)。如果模型預測某樣本屬于真實類別的概率很大,那么這個樣本對于模型來說就是簡單樣本,此時 pt接近1,權(quán)重就會趨于0,這樣就降低了簡單樣本的損失權(quán)重;如果模型預測樣本真實類別的概率很小,那么這個樣本對模型來說就是難樣本,此時 pt很小,權(quán)重就會接近1,使得難樣本的損失得以最大程度的保留。聚焦損失函數(shù)區(qū)分了簡單樣本和難樣本對模型訓練的影響,而損失函數(shù)更關(guān)注難樣本。
聚焦參數(shù)γ能夠平滑低調(diào)整簡單樣本所降低權(quán)重的比例,當γ=0時,F(xiàn)L表達式就是普通的交叉熵損失函數(shù),γ的值越大,權(quán)重表達式產(chǎn)生的影響就越大,實驗證明,γ=2時的檢測效果最好。
本章的實驗主要是為了證明目標檢測算法的一種改進思路,使用改進后的模型RV-YOLOv3進行訓練推理,使得行人檢測的精度和速度提升最優(yōu),最后對比改進模型和原始模型的檢測結(jié)果,分析并得出結(jié)論。
針對行人數(shù)據(jù)集,選定行人檢測數(shù)據(jù)集中部分行人圖片作為測試集,由于本文檢測使用的數(shù)據(jù)集為 COCO[11]數(shù)據(jù)集,因此對比 YOLOv3 和其他網(wǎng)絡模型,然后將網(wǎng)絡訓練好的權(quán)重文件導入到推理模型中做出檢測對比,本文跟蹤所用的數(shù)據(jù)集為MOT16[12],所以在模型推理過程中使用其中的一部分圖像作為測試集來對比各個模型的性能,目的就是為了增加模型的魯棒性。
本實驗的環(huán)境為英特爾i5-9600k CPU,英偉達GTX2060 8G GPU,16G內(nèi)存。Windows10的操作系統(tǒng)下完成,Python3.6.6,Pytorch1.2,Opencv4.2,CU?DA11.0。
訓練的參數(shù)設置為:Batch size大小為26,初始的學習率選擇為0.01,學習率的衰減量為0.0003,動量為0.9,每次模型訓練共迭代500次,共訓練5次,針對上述改進的算法模型,訓練過程RV-VGG的loss曲線和mAP曲線如圖3、圖4所示。
圖3 Loss曲線
圖4 mAP曲線
通過loss曲線可以看出,訓練過程整體的loss是不斷下降的,在迭代1000次開始趨于穩(wěn)定,證明了整個訓練過程是穩(wěn)定的,確保了模型的質(zhì)量,可以看出迭代5次是效果最為優(yōu)異的,當大于6次,可能出現(xiàn)過擬合現(xiàn)象產(chǎn)生導準確率幾乎為1,導致后續(xù)模型的泛化能力有所下降。
為了對比文中的創(chuàng)新點組合起來結(jié)構(gòu)性能的對比,這里分別單獨做出實驗說明改進型組合得幾個創(chuàng)新點,其中A表示YOLOv3;B表示RV-YO?LOv3;C表示只將網(wǎng)絡的主干部分替換為RepVGG;D表示主干網(wǎng)絡替換和聚焦損失函數(shù)的使用;E表示網(wǎng)絡中池化層和聚焦損失函數(shù)使用。
表1 各改進模型訓練的mAP值對比
根據(jù)上述結(jié)果可以發(fā)現(xiàn),在訓練過程中使用改進的RV-YOLOv3模型的結(jié)果較好,在行人檢測中的精度有所增加,實現(xiàn)性能上的初步提升。
訓練完成后,針對本文中使用的測試集MOT16中的部分圖像進行模型的測試,對比檢測的效果,具體結(jié)果如表2所示。
表2 模型測試對比結(jié)果
測試集MOT16中的部分圖像進行模型的測試,對比檢測圖像如圖5所示。
圖5 改進的YOLOv3與原始YOLOv3測試集結(jié)果對比
本文目標檢測采用了改進的YOLOv3算法,在傳統(tǒng)的YOLOv3模型的基礎(chǔ)上,對主干網(wǎng)絡Dark?Net-53做了改進,將RepVGG模型替換主干網(wǎng)絡,改進之后網(wǎng)絡命名為RV-YOLOv3,并且重新設置損失函數(shù),用池化層來代替通過卷積操作丟失更多信息的操作,從而提高了目標框和算法識別的精度和速度,改進的YOLOv3算法的mAP對于原始的YOLOv3有明顯提升,對行人檢測也是更加精準,減少了漏檢和誤檢的問題,證明了RV-YOLOv3模型結(jié)構(gòu)的有效性,實現(xiàn)了更好的目標檢測算法。