鄒承明,薛榕剛
1.交通物聯網湖北省重點實驗室,武漢430070
2.武漢理工大學 計算機科學與技術學院,武漢430070
3.鵬程實驗室,廣東 深圳518000
在生產生活中,需要機器能夠對圖像中的物體進行分類并定位,這就需要用到目標檢測技術。目標檢測技術在工業、安防、軍事、人臉識別[1]、自動駕駛[2-3]等領域有著極大的應用前景及研究價值,也吸引了越來越多學者們的關注。當前,目標檢測方法研究已取得較大進展,檢測精度及速度在不斷提高。但是,由于觀測角度、遮擋、光照以及目標外觀形狀、尺度的不同等因素影響,目標檢測的精度仍有很大的提升空間。
目標檢測通常包括目標分類和目標定位兩個任務,傳統的目標檢測模型分為三個步驟:選取特征區域、特征提取和目標分類[4]。Felzenszwalb 等人[5]提出的多尺度形變部件模型(Deformable Part Model,DPM)充分利用HOG[6](Histogram of Orientation Gradient)和支持向量機(Support Vector Machine,SVM)的優勢,在圖像處理、人臉識別等任務上取得了重要突破。但是其基于滑動窗口的區域選擇策略會導致大量的冗余計算,且使用手工特征無法表征所有情況下的物體特征,魯棒性較差[7]。隨著深度學習的發展,R-CNN系列算法[8-11]在目標檢測領域取得極大的成功。R-CNN系列算法采用RPN(Region Proposal Network)的方法來得到特征區域,這種方法在很大程度上克服了采用滑動窗口所帶來的計算冗余。同時,使用深度學習的方法對目標區域提取特征,避免了使用人工特征帶來的一些缺陷,最后使用分類器進行分類,識別出檢測框中物體的類別。雖然RCNN 系列算法以及R-FCN[12]、SSP-net[13]等方法識別精度有了很大提高,但檢測速度較慢,難以達到實時性的要求。
近年來,實時目標檢測方法的研究有了較大突破并在工業領域及實際應用場景中發揮了很好的檢測效果[14]。以YOLO[15-17]、SSD[18]為代表的單階段檢測方法,采用基于深度學習的回歸方法進行目標檢測,從圖像中直接獲得邊界框及目標種類。SSD算法在VOC2007數據集上的mAP 可以達到74.3%,檢測速度達到46 幀/s。YOLOv2 算法在VOC2007 數據集上,保持檢測速度為40 幀/s 的情況下mAP 能夠達到78.6%。YOLOv3 算法在COCO數據集上mAP達到57.9%(IoU=0.5)的情況下能夠夠保持20 幀/s的檢測速度。
當前,目標檢測的優化方向包括網絡結構、IoU(Intersection over Union)、損失函數、非極大抑制(Non-Maximum Suppression,NMS)、先驗框及學習率等。文獻[14,19-23]在YOLO的基礎上對模型的網絡結構進行改進,使原有模型在不同數據集上的檢測精度或速度有所提升。Shen 等人[24]結合SSD 和DenseNet[25]提出了不需要進行預訓練的Dsod模型。文獻[26-27]基于SSD模型進行改進,提升了SSD 模型對中、小目標的檢測能力。梁延禹等人[28]提出了多尺度非局部注意力的小目標檢測算法,在PASCAL VOC、MS COCO 數據集上的實驗結果表明該算法能有效提高小目標的檢測準確率。Lin 等人[29]根據低層特征與高層特征所含信息不同,提出了金字塔結構的多尺度目標檢測算法,該算法融合圖像的低層特征高分辨率和高層特征高語意信息,對小物體的檢測效果明顯。2017 年,Lin 等人[30]再次提出RetinaNet模型,模型中采用的Focal loss成功解決了目標檢測中正負樣本區域極不平衡導致目標檢測損失易被大量負樣本左右的問題。Rezatofighi等人[31]提出了一種通用的優化邊界框的方式——GIoU(Generalized Intersection over Union),GIoU解決了目標檢測領域最重要的評價尺度IoU 在兩個框不重合時不能反映兩者的距離及無法精確反映兩者重合度大小的缺點。Wang等人[32]提出一種新的生成先驗框的方法GA-RPN(Guided Anchoring),通過CNN 預測先驗框的位置和形狀,生成稀疏而且形狀任意的先驗框,并設計Feature Adaption模塊來修正特征圖使之與先驗框精確匹配。GA-RPN相比RPN減少90%的先驗框,并提高9.1%的召回率。
本文在YOLOv3 的基礎上,結合DenseNet 的思想,在YOLOv3網絡中加入了長連接,最終使網絡的參數量增加了4.2%,在不影響模型檢測實時性的前提下加強了模型特征重用,同時加快了模型的收斂速度;在損失函數中使用GIoU loss,克服了YOLOv3 損失函數中邊界框損失的不足。另外,在損失函數中引入了Focal loss 以解決正負樣本分布不平衡及簡單樣本與困難樣本不平衡所造成的誤差。實驗結果表明,在不影響算法實時性能的情況下,改進的YOLOv3算法比YOLOv3算法有一定的性能提升。
在YOLO模型提出之前,對一張圖像進行目標檢測一般分為兩個階段,如主流的R-CNN 檢測方式。第一階段通過各種方法產生候選區域,第二階段通過CNN提取特征并進行分類。故R-CNN系列方法雖然精度較高,但檢測速度慢,無法滿足實時性檢測的要求。YOLO方法將檢測任務表述成一個統一的、端到端的回歸問題,只需要一次處理就能得到目標位置和分類,檢測速度較之前的算法有了大幅度的提升。
YOLO算法將圖像分為S×S的單元格,如圖1所示(S=7)。如果一個物體的中心(圖1中紅色點)落在某個單元格上,那么這個單元格負責預測這個物體。在檢測過程中,每個單元格需要預測B個邊界框(包括目標的位置信息、置信度和每個邊界框所包含目標的C個類別信息),并將置信度小于閾值的邊界框置為0,最后采用非極大值抑制算法去掉重復的邊界框從而檢測出各類目標。

圖1 YOLO網格示意圖
為克服YOLO 模型對小目標預測效果差的缺點以進一步提高模型的預測準確度,YOLOv3在YOLOv1和YOLOv2的基礎上做了進一步的改進,在網絡中引入了基于多尺度預測的特征金字塔結構(FPN),如圖2所示,小的物體會在淺層的特征圖中被檢測出來,大的物體會在較深的特征圖中被檢測出來。首先,使用k-means聚類算法得到9 個先驗框,每種尺度下各三個,每種尺度下的一個網格負責預測三個邊界框。然后,使用darknet-53網絡對圖像進行特征提取,當提取到最深層特征時,進行輸出,同時進行上采樣,與另一尺度下的特征進行融合。這樣,每層特征圖中都會包含淺層的低級特征(如物體的邊緣、顏色、初級位置信息等)和深層的高級特征(如物體的語義信息等),預測的準確度也會有所提高。另外,由于darknet-53中加入了殘差塊,使網絡的結構可以設置得更深,因而具有更強的特征提取能力。

圖2 YOLOv3中的特征金字塔結構
YOLOv3網絡模型的損失函數分為邊界框損失,置信度損失和分類損失,損失函數如下式所示:

其中,表示第i個網格的第j個先驗框是否負責預測目標邊界框的位置,若負責預測則其值為1,若不負責預測,則其值為0。表示第i個邊界框不負責預測目標位置。由于YOLOv3在三種不同尺度下進行預測,所以最終的損失函數為三種尺度下loss的和。
YOLOv3 目標檢測算法為了獲得深層次的特征信息以提高檢測精度,需要加深網絡的深度。為解決梯度消失和模型退化的問題,YOLOv3網絡中引入了殘差網絡的思想,網絡中加入大量的殘差塊,YOLOv3 中的殘差塊如圖3 所示。殘差塊通過在每兩層網絡之間設置旁路連接,在進行特征重用的同時,在網絡間增加了特征傳遞的捷徑,將特征信息直接傳到神經網絡的深層。這樣,在前向傳播過程中,當淺層的輸出已經達到較好效果時,深層網絡后面的網絡層能夠實現恒等映射的效果。在反向傳播過程中,殘差塊會明顯減少模塊中參數的值從而讓網絡中的參數對反向傳導的損失值有更敏感的響應能力。雖然沒有從根本解決回傳損失小的問題,但卻讓參數減小,相應而言增加了回傳損失的效果,也產生了一定的正則化作用。

圖3 YOLOv3中的殘差模塊示意圖
Huang等人[25]在DenseNet一文中指出,與其多次學習冗余的特征,特征復用是一種更好的特征提取方式。根據DenseNet 思想,本文對YOLOv3 網絡darknet-53 進行了一些改進,在darknet-53 中的殘差塊間加入了旁路連接。Darknet-53網絡中的旁路連接位于殘差塊內,其連接步長相對較短,僅對網絡中相鄰層之間進行連接。在網絡的殘差塊間加入旁路連接后,進一步加強了網絡的特征重用,同時由于旁路連接的步長變大,使信息流更容易傳遞到網絡的深層。圖像的顏色、邊緣輪廓等淺層特征也能夠通過旁路直接傳遞到網絡深層,與圖像深層特征融合起來。這樣,網絡深層的特征圖不僅包含淺層的位置信息等,又包含深層的語意信息。使用網絡深層特征圖進行目標檢測就會獲得更好的精度。同時,由于網絡之間存在捷徑,模型的收斂速度也會更快。
加入旁路連接后的YOLOv3網絡結構如圖4所示。在darknet-53中依次選取輸入特征圖尺寸相同的兩個殘差塊,將前一個殘差塊的輸入與其后一個殘差塊的輸出進行連接,并將連接后特征圖尺寸調整到與下一個殘差塊的輸入保持一致。為完整保留網絡中的信息流,這里借鑒Densenet的方法,對融合的特征取并集后再調整尺寸。這樣,在每四層網絡之間就會有一個長連接。

圖4 改進的YOLOv3算法網絡結構中的長連接
IoU可用來衡量兩個邊界框的相似性,是目標檢測領域用來評價目標檢測器性能的一個重要指標,預測框與真實框的重疊度越高,IoU值也越大,IoU的計算如公式(2)所示,其中A、B分別代表預測框和真實框。

當前很多目標檢測算法在計算邊界框損失函數時普遍采用預測框與真實框的L1 范數或L2 范數來計算位置回歸損失。但在評測時卻使用IoU 去判斷是否檢測到目標,而這兩者并非完全等價。如圖5所示[31],其中綠色框為真實框,黑色框為預測框,圖5(a)、(b)分別為預測框與真實框角點坐標距離的L1 和L2 范數相同時的IoU 對比。從圖中可看出,當L1 范數或L2 范數相等時,IoU的值有很大的差異。而從公式(1)可知YOLOv3的邊界框損失函數是根據L2 范數來計算的,因而存在一定誤差。

圖5 預測框與真實框L1范數、L2范數與IoU
若直接使用IoU作為邊界框損失,當預測框與真實框之間沒有重合時,IoU 無法衡量兩邊界框距離的遠近,且IoU為0,導致優化損失函數時梯度為0,無法優化。如圖6所示,(a)、(b)中IoU都為0,但是(a)中預測框與真實框的距離明顯更近一些,其預測效果也更佳。基于此,Rezatofighi等[31]提出的GIoU充分利用了IoU具有尺度不變性及可作為兩個框距離的優點,同時,克服了IoU在預測框與真實框不重合時的不足之處,能夠更好地反映預測框與真實框的重合情況。GIoU的計算如公式(3)所示。其中,A、B為預測框與真實框,C為包含兩者的最小閉合框。如圖7所示,黑色框范圍即為C的表示區域。


圖6 IoU為0時的不同場景

圖7 GIoU中C 的表示區域
由公式(2)、(3)可知,GIoU 的變化范圍為(-1,1],且當預測框與真實框完全重合時,GIoU=1。當預測框與真實框不重合,即IoU=0 時,GIoU的計算公式可轉化為公式(4):

預測框與真實框距離越遠,越接近0,GIoU越接近-1,預測框與真實框距離越近越接近1,GIoU越接近0。因此,相比于IoU,GIoU能夠更好評價兩邊界框的重合度。
以GIoU 作為衡量邊界框距離的指標,其損失函數如下:

兩邊界框的GIoU 越大,GIoU loss 越小,網絡會朝著預測框與真實框重疊度較高的方向去優化。根據GIoU loss 對YOLOv3 模型邊界框損失函數進行改進,改進后的邊界框損失函數如式(6)所示:

在單階段目標檢測中,由于正負樣本區域分布極不平衡,導致目標檢測損失易被大量負樣本所左右。這樣,少量正樣本所提供的關鍵信息不能在損失函數中發揮正常作用,從而無法得到一個能對模型訓練提供正確指導的損失函數。Lin 等人[30]提出的Focal loss 通過對交叉熵損失(cross-entropy loss)增加權重,解決了正負樣本分布不衡以及簡單樣本與困難樣本不平衡的問題。
典型的交叉熵損失廣泛用于當下的圖像分類、檢測CNN 網絡當中,如公式(7)所示。其中,p∈[0,1],代表模型輸出類別概率,y為類別標簽,其取值為0或1。

考慮到數據集中正負樣本不平衡問題,可通過在交叉熵損失中使用與目標存在概率成反比的系數進行校正。這樣,數量較少的正樣本權重系數較大,對模型的貢獻也會加大,數量較大的負樣本權重系數較小,其對模型的貢獻會相對削弱,因而,模型會學習到更多的有用信息。加入權重系數α后的交叉熵損失如下:

另外,樣本中有些類別比較明確,有些類別則較難區分。Focal loss 在交叉熵損失的基礎上,增加了一個動態縮放因子,自動降低簡單樣本的損失,幫助模型集中于訓練更加困難的樣本。在Focal loss 計算中,引入了一個新的超參數γ,Focal loss的計算如公式(9)所示:

將Focal loss與權重α結合起來,則Focal loss最終計算公式為:

在YOLOv3模型中,若輸入圖像的大小為416×416,則將會產生10 647個先驗框,而對于MS COCO2014數據集,訓練樣本中每張圖像約包含7.3個目標,絕大多預測框均不包含目標,這就造成樣本中存在正負樣本不平衡的問題。YOLOv3 模型中使用Ignore_thread 及對不存在目標的樣本框使用較小的置信度等措施在一定程度上能夠解決正負樣本不平衡問題。但正負樣本不平衡問題仍然存在,在引入Focal loss后,模型能夠更好地解決正負樣本不平衡問題,且由于對困難樣本的檢測效果更好,因而能夠提高模型檢測效果。引入Focal loss后,YOLOv3模型的損失函數如公式(11)所示:

實驗的數據集采用PASCAL VOC 2007+2012 和MS COCO(Microsoft COCO:Common Objects in Context)2014數據集。兩種數據集的具體數量如表1。

表1 實驗數據集詳情
PASCAL VOC 2007+2012。PASCAL VOC 2007和2012數據集共分四個大類:vehicle、household、animal、person,20 個小類。VOC 2007 和VOC 2012 訓練集共包含16 551 張圖像,40 058 個樣本框。VOC 2007 測試集包含4 952 張圖像,12 032 個樣本框,VOC 2012 測試集未公開。使用VOC 2007 和VOC 2012 的訓練集進行訓練,然后使用VOC 2007 測試集進行測試,最后計算IoU=0.5 時的mAP對模型進行評價。
MS COCO 2014。COCO2014 數據集中包含80 個類別的目標,其訓練集共有82 783張圖像,604 907個樣本框。從驗證集中選取10 000 張圖像作為測試集對模型進行評價。相比于VOC 數據集,COCO 數據集的評價標準更嚴格。COCO 的主要評價標準是IOU 在[0.5,0.95]區間內,步長為0.05時的10次AP的平均值。
本文設計了四個模型,分別為增加了長連接的YOLOv3(以下稱為YOLOv3-A),使用GIoUloss作為邊界框損失函數的YOLOv3(以下稱為YOLOv3-B),引入Focal loss后的YOLOv3(以下稱為YOLOv3-C)以及對YOLOv3同時進行以上幾種改進后的模型(以下稱為YOLOv3-D)。對四種模型在PASCAL VOC2007數據集和COCO2014數據集上進行訓練及模型評估。目前,針對目標檢測訓練的主流做法是基于Imagenet 數據集預訓練的模型來提取特征,然后在PASCAL VOC 數據集或COCO 數據集上進行微調。考慮到預訓練過程需要耗費大量時間,直接加載YOLOv3在VOC數據集上以及COCO數據集上的模型,并采取分段訓練的方法進行訓練。訓練的第一階段僅對加載模型中沒有預訓練權重的那部分參數進行訓練,第二階段對所有權重進行訓練。在訓練的初始階段,為使模型能夠穩定,設置了一個熱身階段。熱身階段為兩輪循環,學習率逐漸增大到0.000 1,之后采用文獻[33]中的consin 衰減方式讓學習率逐漸降低以減小網絡的損失,模型訓練學習率示意圖如圖8所示。在實驗中,網絡的輸入大小為416×416,損失函數中α值為0.75,γ值為2。PASCAL VOC 數據集上,YOLOv3-A和YOLOv3-D的迭代次數為80輪,YOLOv3-B和YOLOv3-C 的迭代次數為50 輪。在COCO 2014 數據集,YOLOv3-A 和YOLOv3-D 的迭代次數為100 輪,YOLOv3-B和YOLOv3-C的迭代次數為50輪。

圖8 實驗學習率設置示意圖
YOLOv3-A、YOLOv3-B、YOLOv3-C、YOLOv3-D四種模型首先在PASCAL VOC 2007+2012訓練集上進行訓練,并在PASCAL VOC 2007測試集上進行模型評估。PASCAL VOC 2007 測試集各類別目標及其數量如圖9 所示。PASCAL VOC 2007 測試集mAP 的計算方法采用PASCAL VOC CHALLENGE 的計算方法。假設N個樣本有M個正例,就會得到M個召回率的值R(1/M,2/M,…,M/M),對每個召回率取最大的準確率P,然后對這M個P值取平均值最后得到AP值。

圖9 VOC 2007測試集目標類別及樣本框數量分布
在IoU=0.5 時,四種模型在PASCAL VOC 2007測試集上的mAP 及各類別目標預測結果如圖10 所示。由圖10 可以看出,四種模型在測試集上的mAP 都達到80%以上,其中YOLOv3-D 模型的效果最好,其最高mAP為83.7%。圖11(a)為YOLOv3-A模型與YOLOv3模型在PASCAL VOC 數據集上的訓練loss 對比,在加入長連接后,網絡有了淺層與深層之間信息傳遞的捷徑,模型的收斂速度也更快。
YOLOv3模型的參數量為62.80×106,在網絡中加入長連接后,模型的參數量為65.44×106,參數量增加2.64×106,增加量為4.2%。由于YOLOv3-A 與YOLOv3-D 模型中都加入了長連接,因而參數量有所增加,故檢測速率有所下降,在GPU(NVIDIA Tesla PH402 SKU 200)上的實驗結果顯示,YOLOv3-A和YOLOv3-D模型的檢測速度為27.2 幀/s,仍能達到實時檢測的要求(檢測速率大于25 幀/s)。YOLOv3-B和YOLOv3-C模型沒有引入多余的參數量,其檢測速度為28.6 幀/s。
四種模型在COCO 數據集上訓練次數達到預先設定輪數時停止訓練,并從驗證集隨機選取10 000張圖像作為測試集對模型進行評估。模型評估標準采用COCO數據集的通用測試標準,測試結果如表2所示。
實驗結果表明,在COCO 2014 數據集上,四種模型比YOLOv3 模型的檢測效果均有所提高。其中,YOLOv3-A 模型的mAP 提高了0.64 個百分點,得益于在網絡殘差塊間加入旁路連接后,網絡的特征復用能力得到提高,圖像淺層特征能夠直接傳入網絡的更深層與深層特征合并,使網絡中深層特征圖中的特征信息更完整,進而使網絡對目標的定位及分類能力有所高。YOLOv3-B 模型的mAP 相比于YOLOv3 模型提高幅度較大,達到2.03 個百分點,且參數規模沒有發生變化,模型檢測速度不會受到影響。由圖11(b)可以看出,使用GIoU loss 作為模型邊界框損失后,模型的loss 相比于YOLOv3 的loss 有所降低,模型的檢測效果也更好。YOLOv3-C 模型加入Focal loss 后,其mAP 提升了1.21 個百分點。在模型中,降低了ignore_thread 值并加入Focal loss 后,模型的正負樣本不平衡問題得到進一步的解決,同時由于Focal loss 對難檢測目標的檢測效果有提升作用,因而模型檢測效果得到提升。融合了多種改進的YOLOv3-D模型的mAP最高,達到了33.27%,相比于YOLOv3模型其mAP提高了2.27個百分點。但必須指出,由于相比于YOLOv3 模型,YOLOv3-D 模型的參數增加了4.2 個百分點,會對模型的速度產生一定影響,但仍能達到實時檢測的要求。

圖10 三種模型PASCAL VOC 2007測試集預測結果

表2 模型在COCO 2014驗證集測試結果 %

圖11 模型loss對比圖
四種模型在PASCAL VOC 2007 測試集上與其他具有代表性的目標檢測算法進行對比,結果如表3 所示。與其他同類算法相比,YOLOv3-A、YOLOv3-B、YOLOv3-C、YOLOv3-D四種模型的mAP均高于其他算法,其中,YOLOv3-D 在取得最高mAP 的同時,仍能達到實時檢測的要求。圖12是在COCO數據集上的測試結果,由于COCO 數據集評價標準更嚴格,且數據集中大多數圖像來源于生活,背景更復雜,小目標更多等因素,各目標檢測算法在COCO 數據集上的mAP 普遍不高。從圖中可看出,四種改進模型在保持實時檢測的情況下,其mAP 均高于YOLOv3 模型。且在mAP 接近的情況下,四種改進模型的檢測速度比SSD、RetinalNet等模型檢測速度都快。

表3 PASCAL VOC 2007測試集上算法性能比較

圖12 不同模型在COCO測試集上性能對比圖
本文提出了一種融合GIoU和Focal loss的YOLOv3目標檢測算法,該算法通過在YOLOv3網絡的殘差塊間引入旁路連接、使用GIoU loss 代替YOLOv3 模型的邊界框損失及在置信度損失函數中加入Focal loss這三個措施對YOLOv3 目標檢測算法進行改進。在PASCAL VOC 和MS COCO 數據集上的實驗結果表明,改進的YOLOv3算法在保障實時檢測的前提下,提高了YOLOv3模型檢測精度。下一步的工作將研究YOLOv3 模型在一些實際場景中的應用,并繼續對模型進行改進以提高模型的檢測速度及精度。