王燕妮,劉 祥,劉 江
(1.西安建筑科技大學信息與控制工程學院,陜西 西安 710055;2.西安現代控制技術研究所,陜西 西安 710065)
目標檢測作為計算機視覺領域中重要的研究方向和研究熱點[1],其任務可以分為“識別”和“定位”兩部分。它是進行場景內容理解等高級視覺任務的前提[2],并廣泛應用于紅外探測技術、智能視頻監控、遙感影像目標檢測和醫療診斷等任務中[3-6]。目標檢測算法可以分為傳統目標檢測算法和基于深度學習的目標檢測算法。
傳統目標檢測算法有尺度不變特征變換算法[7](scale invariant feature transform)和傳統人臉檢測算法等[8](Viola-Jones),但該類方法時間復雜度高且魯棒性較差。
基于深度學習的目標檢測算法,可分為兩階段目標檢測算法和單階段目標檢測算法。前者具有代表性的算法有R-CNN[9]算法、Fast R-CNN[10]算法和Faster R-CNN[11]算法。R-CNN利用選擇性搜索算法提取候選區域,通過卷積神經網絡提取區域特征,最后通過支持向量機(SVM)[12]進行分類;Fast R-CNN在R-CNN的基礎上,加入了感興趣區域,通過多任務損失函數,實現端到端的訓練;Faster R-CNN采用候選區域生成網絡(regional proposal networks,RPN)代替了選擇性搜索算法,提高了算法的速度和準確率。單階段目標檢測算法通過回歸直接在輸入圖像上輸出目標的類別及邊框,典型的單階段目標檢測算法有快速目標檢測算法(you only look once,YOLO)[13]和單階段多框目標檢測算法(single shot multibox detector,SSD)[14],YOLO采用全圖信息進行預測,極大地提高了檢測速率;SSD采用多尺度特征圖進行檢測,在提高檢測速度的同時也提高了檢測精度。
現階段目標檢測算法中普遍存在檢測精度不夠高,誤檢和漏檢等問題。本文針對此問題,提出一種基于單階段網絡模型的目標檢測改進算法。
原始SSD目標檢測算法采用VGG-16[15]作為基礎網絡,并在其基礎上有進一步的改進,網絡結構如圖1所示。將VGG16的全連接層fc6和fc7轉換成conv6和conv7兩個卷積層;移除原本的dropout層和分類層;同時新增了4組卷積層來獲取更多的特征圖以用于檢測;SSD目標檢測算法采用卷積對不同尺度的特征圖進行檢測,分別對輸入圖像中目標邊界框的位置和類別的置信度進行預測;最后通過非極大值抑制(non-maximum suppression,NMS)算法[16],得到最終的檢測結果。SSD采用多尺度的特征圖用于檢測,大尺度特征圖用于小目標檢測,小尺度特征圖用于大目標檢測,通過這種策略,提高了對物體尺度變化的泛化能力。
SSD目標檢測算法采用多尺度特征圖進行檢測,分別為conv4_3,conv7,conv8_2,conv9_2,conv10_2,conv11_2共6個特征圖,其大小分別是(38,38),(19,19),(10,10),(5,5),(3,3),(1,1);同時SSD借鑒了Faster R-CNN中錨點框的概念,通過在各個特征圖上設置不同尺度和長寬比的候選框,來簡化訓練的過程。對于候選框的尺度,按如下公式進行計算:
(1)
式(1)中,m代表特征圖的個數,sk表示候選框與圖片的比例,smax和smin代表比例的最大值和最小值,分別取值為0.9和0.2。利用式(1)可以得到各個候選框的尺度。

圖1 SSD網絡結構圖Fig.1 SSD network structure diagram
(2)
(3)
SSD目標檢測算法中損失函數定義為位置損失(localization loss,loc)和置信度損失(confidence loss,conf)的加權和,計算公式如下:
(4)
式(4)中,N為匹配的候選框的數量;x∈{1,0}表示候選框是否與真實框匹配,若匹配,則x=1,反之x=0;c為類別置信度預測值;g為真實框的位置參數;l為預測框的位置預測值;α權重系數一般設置為1。
對于SSD中的位置損失函數,采用smooth L1 loss[17]損失函數,對候選框的中心(cx,cy)及寬度(w)、高度(h)的偏移量進行回歸。公式如下:
(5)
(6)
(7)
對于SSD中的置信度損失函數,使用的是典型的softmax loss,其公式為:
(8)
為了對SSD算法的不足進行改進,本文借鑒了深度殘差網絡[18]、特征融合[19]以及反卷積[20]的思想,對原始SSD算法進行了修改,提出了改進后的SSD算法。算法首先對原始SSD算法中的基礎網絡進行修改,采用深度殘差網絡Resnet-50對原始算法中的VGG-16網絡進行替換,并且新增了一個用于檢測的卷積層;結合反卷積與特征融合的思想,對修改后網絡所提取出的不同尺度的特征圖進行融合;同時利用了在網絡中每個卷積層之后添加批規范化操作(batch normalization,BN)[21]的網絡搭建策略,以達到提高檢測能力的效果。
深度殘差網絡(resnet)克服了隨著網絡層數加深而出現的退化問題,極快地加深了深度神經網絡的訓練,模型的準確率也有了非常大的提升。
相比傳統的卷積神經網絡,深度殘差網絡新增了殘差學習單元以解決退化問題,殘差學習單元與傳統單元的對比如圖2所示。

圖2 傳統單元和殘差學習單元對比Fig.2 Comparison between traditional units and residual learning units
圖2中,殘差學習單元在傳統單元的基礎上新疊加了y=x的恒等映射層,改變了網絡的學習目標,將原始所需要學習的函數H(x)轉換為殘差F(x)=H(x)-x。曲線表示短路連接(shortcut connection),繞過了權重層,即使當殘差F(x)=0時,網絡也只是做了恒等映射,網絡的性能并不會下降,且在實際中殘差并不會為0,網絡在輸入特征的基礎上仍能學習到新的特征,從而擁有更好的性能;同時殘差學習單元中的疊加算法并不會給網絡增加額外的參數和計算量,且可以增加網絡的訓練速度,提高網絡的訓練效果。
在傳統神經網絡的基礎上重復使用殘差學習單元,即可構成深度殘差網絡。圖3為Resnet-50的網絡結構圖,網絡大致由5個階段構成,其中階段2、3、4、5中每個殘差學習單元都由三次卷積操作和短路連接構成。

圖3 Resnet-50網絡結構圖Fig.3 Resnet-50 network structure diagram
反卷積,也稱為轉置卷積,是卷積操作的逆運算,用于還原特征圖的尺寸大小,解決經過一系列卷積運算后特征圖分辨率變小的問題,擴大感受野,卷積與反卷積的過程如圖4所示。

圖4 卷積和反卷積操作示意圖Fig.4 Convolution and Deconvolution operation diagram
圖4左側表示卷積過程,表示4×4的特征圖在3×3的卷積核作用下,得到的2×2特征圖;圖4右側表示反卷積過程,輸入特征圖大小為2×2,經過填充補零操作,與大小為3×3的卷積核執行反卷積操作,得到大小為4×4的特征圖。反卷積操作公式如下:
d=s(i-1)+k-2p
(9)
式(9)中,d為反卷積輸出特征圖,s為步長,i為輸入特征圖,k為卷積核尺寸,p為填充。通過反卷積操作,可以將高層特征圖中豐富的語音信息映射到底層特征圖中,使底層特征圖在擁有大量細節信息同時擁有足夠的語義信息,增強了網絡的辨識度。
在SSD算法中,采用VGG-16作為算法的基礎網絡,結合新增的卷積層用于獲得輸入圖像的特征圖。前端基礎網絡所提取出的不同尺度的特征圖,其底層特征對應細節信息,高層特征對應抽象的語義信息[22]。若保存在底層特征圖上的目標較小,那么底層特征圖在經過一系列復雜的卷積操作后,得到的高層特征圖上保留的該目標信息將會變得更少,對其的檢測也更加不敏感[23];因此,在SSD算法中,底層特征圖用于對小目標進行檢測,高層特征圖用于對中、大型目標進行檢測。
如2.1節中所述,SSD算法分別采用conv4_3,conv7,conv8_2,conv9_2,conv10_2,conv11_2共6個特征圖對目標進行檢測,但其中用于檢測小目標的底層特征圖只有conv4_3一個,所包含的細節信息不足,并且沒有充分利用高層語義信息;雖然還有5個高層特征圖輔助檢測,但對小目標特征的提取仍不夠充分,故導致對中、大型目標的檢測效果比對小目標檢測效果更好。
基礎網絡部分提取出的特征圖好壞,對整個算法有至關重要的作用,基礎網絡應提取出更優秀的特征,且要具有足夠高的分辨率;同時網絡要有足夠的深度,網絡的深度足夠深,網絡容量更大,非線性表達能力也越強。因此,采用深度殘差網絡Resnet-50來代替原本的VGG-16網絡。修改后的網絡輸入圖像尺寸為224×224,同時移除了Resnet-50的全連接層,在其基礎上新增一系列卷積層以獲得更多的特征圖用于進行檢測;其中在基礎網絡Resnet-50結構中選取4個卷積層conv1_x,conv2_x,conv3_x,conv4_x,新增卷積層中選取3個卷積層conv5_x,conv6_x,conv7_x,共提取7個特征圖用于檢測;相比原始SSD算法中的6個特征圖,本算法新增了一個底層特征圖,用于增強對圖像中小目標物體檢測的能力。
同時,結合反卷積與特征融合的思想,首先對Resnet-50基礎網絡部分提取出的尺寸為7×7的conv4_x特征圖進行反卷積操作,再利用卷積操作進行特征提取,與尺寸為56×56的conv1_x特征圖進行融合,通過對具有豐富語義信息的高層特征圖與具有豐富細節信息的底層特征圖的融合操作,使形成的新特征圖同時具備原本兩個特征層的優點,并與其他特征圖一起用于檢測。本文使用的特征融合方式為element sum融合方式,直接對兩個的特征圖相加,沒有改變特征圖的通道數,融合后的新特征圖在同一維度下的信息量增多;由于基礎網絡的替換以及特征融合操作本身就引入了大量額外參數和計算量,為了盡量減少計算量,選取該融合方式進行融合。融合操作示意圖如圖5所示。

圖5 element sum融合示意圖Fig.5 element sum fusion diagram
網絡還利用了在每個卷積層后添加批規范化操作的網絡搭建策略,加快了模型訓練的收斂速度;通過對網絡輸入的均值和方差進行縮放,使其調整到一個合適的范圍,防止產生梯度爆炸和梯度消失;在一定程度上防止了過擬合的現象。
在得到特征圖之后,參照本文1.2節中候選框的生成規則,提取出的7個特征圖中每個單元分別設置4、4、6、6、6、4、4個不同的候選框,其中設置個數為4的候選框長寬比選{1,1,2,1/2},個數為6的候選框長寬比選{1,1,2,1/2,3,1/3},共17 340個框用于進行檢測,在增加用于檢測的特征層的基礎上,設置更多、更密集的檢測框以增強算法的檢測能力;分別通過使用3×3的卷積核對特征圖進行卷積操作,得到檢測類別置信度和檢測框的位置。算法修改后的網絡各參數表和網絡結構圖分別如表1和圖6所示。

表1 修改后網絡各參數值Tab.1 Modified basic network parameter values

圖6 改進算法網絡結構圖Fig.6 Improved algorithm network structure diagram
本文的實驗平臺為i7-8700處理器,NVIDIA GeForce TX1070Ti顯卡,基于深度學習框架Tensorflow實現。實驗所用的數據集為PASCAL VOC數據集,是一套用于圖像識別和分類的標準化的數據集,該數據集中包含20個類別,分別為人、鳥、貓、牛、狗、馬、羊、飛機、自行車、船、巴士、汽車、摩托車、火車、瓶子、椅子、餐桌、盆栽植物、沙發、電視。其中VOC2007包含9 963張標注過的圖片,共有標注出的物體24 640個;VOC2012包含11 540張標注過的圖片,共有標注出的物體27 450個。本文使用VOC2007和VOC2012數據集進行訓練,使用VOC2007進行測試。訓練時采用隨機梯度下降法(SGD),批量batchsize設置為32,初始學習率設置為0.001,動量參數monmentum設置為0.9,學習率在迭代次數為180 000和230 000時調小90%,共訓練280 000次。
目標檢測算法中,通常使用mAP(mean average precision)來作為評價指標,mAP由查準率和查全率構成,公式如下:
Pprecision=TP/TP+FP
(5)
Precall=TP/TP+FN
(6)
式(5)、式(6)中,TP代表正樣本被正確識別的樣本,FP代表負樣本被錯誤識別為正樣本的樣本,FN代表正樣本被錯誤識別為負樣本的樣本。
目標檢測算法中,檢測的每一個類別都會得到由查準率和查全率構成的曲線(P-R曲線),曲線下的面積就是平均精度值(AP值),即衡量模型在單獨一個類別上的評價指標。對檢測的所有類別的AP值再求平均,即可得到mAP值,用以衡量模型在所有類別上的好壞,mAP值計算公式如下所示:
(5)
式(5)中,Q代表檢測中總類別數目,AP(q)代表檢測中第q類的AP值。
文中以VOC2007和VOC2012為訓練集進行訓練,并在VOC2007上進行測試,實驗結果與其他主流模型對比如表2所示。
通過對表中數據分析,改進后的算法在VOC2007數據集上的檢測精度達到78.5%,相較原始SSD算法提升了1.3%;但在檢測速度上,由于基礎網絡部分更加復雜,采用了更多更密集的檢測框,且引入了其他額外計算量,導致算法在檢測速度方面相較原始SSD算法有所下降,實時性較差。與其他模型對比,檢測精度均有較大提升,檢測精度相較基礎網絡為更復雜的Resnet-101的DSSD算法下降了0.1%,但檢測速度卻比DSSD算法更快。
為了更直觀地感受改進后算法檢測精度的提升,在VOC2007測試集中選取圖片分別使用SSD算法和改進后的算法進行檢測,限于篇幅限制,本節選取了6張測試集圖片進行檢測精度的對比,對比圖如圖7—圖12所示。
圖7—圖12為原始SSD算法和改進后算法檢測結果對比圖,圖中左側圖(a)均代表原始SSD算法檢測結果,圖中右側圖(b)代表改進后算法的檢測結果。對比圖7可以看到在兩種算法均可以檢測出圖中目標時,改進后的算法中檢測框的位置更加準確,檢測出目標的置信度值更高,檢測結果相比原始SSD算法更加準確;對比圖8和圖9,改進后的算法相較原始SSD算法可以檢測出更多目標,檢測效果更加準確,有效改善了漏檢的現象;對比圖10,改進后算法在可以檢測出更加微小目標的情況下,對待檢測目標的分類也更加準確,改善了誤檢的現象;對比圖11,在待檢測目標出現重疊覆蓋等現象時,改進后算法仍可以檢測出更多的目標;對比圖12,當檢測圖片背景復雜度較高時,原始SSD算法中待檢測目標與背景很難分離,導致出現難以檢測到目標的情況,改進后的算法雖然仍存在一定漏檢現象,但還是可以檢測出圖中的目標物體,較原始算法檢測能力上有了一定程度的提升。

表2 VOC2007測試集結果對比Tab.2 Comparison of VOC2007

圖7 兩種算法檢測結果對比圖1Fig.7 Comparison of the detection results of the two algorithms 1

圖8 兩種算法檢測結果對比圖2Fig.8 Comparison of the detection results of the two algorithms 2

圖9 兩種算法檢測結果對比圖3Fig.9 Comparison of the detection results of the two algorithms 3

圖10 兩種算法檢測結果對比圖4Fig.10 Comparison of the detection results of the two algorithms 4

圖11 兩種算法檢測結果對比圖5Fig.11 Comparison of the detection results of the two algorithms 5

圖12 兩種算法檢測結果對比圖6Fig.12 Comparison of the detection results of the two algorithms 6
本文提出一種基于單階段網絡模型的目標檢測改進算法。該算法首先采用Resnet-50網絡代替了原始基礎網絡VGG-16網絡,增加一層用于檢測小目標的底層特征圖;然后對高層特征圖和底層特征圖進行特征融合,在同一特征圖中引入了豐富的上下文信息;設置更密集的檢測框,網絡搭建策略上,在每層卷積層后添加批規范化操作,使算法訓練時收斂更快,防止產生過擬合。仿真實驗結果表明,改進后的算法相較原始算法在檢測精度提升了1.3%,并且改善了原始算法中存在的漏檢、誤檢等問題;但由于改進后的算法網絡復雜度較高,且引入了其他額外計算量,導致算法在檢測速度上有所下降。針對該問題,在后期研究中,擬采用更加優秀,更加輕量化的網絡進行改進,同時擬引入注意力機制,在提升檢測能力時優化提高檢測速度。