祁世風 蔣 勇 高 琳 廖小華
(西南科技大學計算機科學與技術學院 四川綿陽 621010)
目標檢測在輸入圖像中找出感興趣目標,并確定其位置和類別。目前,目標檢測廣泛應用于自動駕駛、智能視頻監控、醫療輔助診斷等領域中,已經成為計算機視覺領域的一個研究熱點[1-3]。
目標尺度變化問題是目標檢測亟待解決的關鍵問題之一[4-5]。為檢測不同尺度的目標,目前存在兩種基本方法:(1)使用圖像金字塔[6]。首先對原圖像進行不同尺度的縮放以構成圖像金字塔,然后將這些圖像輸入網絡進行檢測。這種方法雖然能取得不錯的檢測效果,但需要多次縮放圖像,繁瑣耗時,不利于實際應用。(2)利用卷積神經網絡構建圖像特征金字塔。Hong等[7]首先在圖像上提取不同尺度的特征構成特征金字塔,然后將提取到的特征進行組合以完成對目標的預測。這種方法雖然能夠充分提取到目標的位置信息,但由于搭建特征金字塔的過程中頻繁使用下采樣運算,使得細節信息丟失比較嚴重,影響檢測結果。Liu等[8]在不同層次的特征圖上預測不同尺度的目標,然后綜合不同尺度上的檢測結果得到最終檢測結果。Lin等[9]從目標的上下文信息角度考慮,加強淺層特征和深層特征之間的信息融合,通過將高級語義特征與低級語義特征相結合,在不同尺度特征上生成了更多的語義特征,從而更好地完成目標檢測任務。He等[10]提出了空間金字塔池化(spatial pyramid pooling),利用膨脹卷積有效地解決了卷積神經網絡對圖像重復提取特征的問題。Liu等[11]受Szegedy等[12]的啟發,提出了多分支卷積層,將SSD算法的基礎網絡改進為三分支結構,而每個分支又由普通卷積和相同膨脹率的膨脹卷積串聯構成,以此實現多尺度目標檢測。
在SSD算法中,雖然淺層特征有助于檢測小目標,但與深層特征相比,淺層特征存在語義信息少、感受野小等問題,導致小目標的檢測效果并不理想,并且在網絡訓練過程中經過多層池化操作容易出現小目標特征消失的現象。此外,SSD算法只是在不同的特征圖上進行預測,沒有充分考慮到上下文信息。針對上述問題,文中提出了一種改進的SSD算法,該算法首先使用膨脹卷積對卷積層進行二次特征提取,然后引入密集連接以獲得目標上下文信息,通過與多種主流算法在UA-DETRAC[13]數據集上的對比實驗,驗證了改進算法的有效性。
為了提取有效的目標特征以及捕捉充足的目標上下文信息,本文對SSD算法主要進行了以下3點改進:(1)去掉conv7_2之后的所有卷積層,并選取conv4_3,conv7,conv6_2和conv7_2等層作為輸入層;(2)在4層輸入層上分別添加3層不同膨脹率的膨脹卷積,各膨脹卷積層之間采用級聯的方式從而進一步增大卷積層的感受野;(3)在輸入層與膨脹卷積層之間使用密集連接,使得中間特征的神經元可以編碼不同尺度的上下文信息,充分捕捉目標的多級特征。在輸入層和膨脹卷積層中通過密集連接的方式(dense connection dilated convolution,DCD)構成了DCD模塊,網絡結構如圖1所示。數據集輸入網絡后,首先對數據集進行預處理,然后將處理后的圖像輸送到DCD模塊實現多尺度特征提取,最后送入檢測器進行目標定位和目標分類。

圖1 本文目標檢測算法網絡結構圖Fig.1 Framework model of object detection algorithm
針對SSD算法中存在淺層特征感受野小、特征提取不夠充分的問題,本文在4層卷積層上分別級聯3層不同膨脹率的膨脹卷積實現二次特征提取,提高目標的檢測精度。
膨脹卷積可以在保持圖像分辨率的前提下增大感受野,感受野越大,表明包含了更多的全局信息和豐富的語義信息。當膨脹率為d,卷積核大小為k×k時,膨脹卷積感受野r可以由下式計算:

使用膨脹卷積可以獲得較大的感受野,而級聯多個膨脹卷積層可以產生更大的感受野。假設兩個膨脹卷積的感受野尺寸分別為r1,r2,則通過級聯后,其感受野的大小可以由以下公式計算:

在本文中使用3×3大小的卷積核,膨脹率分別為3,6,12,采用級聯方式之后膨脹卷積層感受野擴大至43×43。通過級聯膨脹卷積,有效利用不同的感受野提取不同尺度的特征。
在一般情況下,卷積神經網絡為了更高效地捕捉深層特征,采取加深網絡或者加寬網絡來使得模型能夠很好地學習輸入圖像特征。但隨著網絡的加深和加寬,網絡學習到的特征也會變得越來越抽象,忽略圖像中的細節信息。DenseNet[14]從特征信息的角度考慮,通過密集連接實現了網絡中層與層之間最大程度的信息傳輸,有效利用了特征并取得了較好的實驗結果。
為了最大化獲取目標的上下文信息,采用密集連接向后傳遞信息,具體連接方式如圖1下半部分所示:(1)每一層膨脹卷積層(最后一層除外)的輸出傳送到其后面的所有膨脹卷積層;(2)DCD的輸入層(conv4_3,fc7,conv6_2,conv7_2)也按同樣方式往后傳遞信息;(3)增加連接層(concat),將本層特征與前層特征進行融合。
密集連接能夠有效獲取目標上下文信息,在減輕計算量的同時避免了信息丟失,這種方法對于遮擋、光照不均等情況具有顯著的檢測效果。
在搭建網絡模型時,在每一層膨脹卷積層以及連接層之前添加了1×1卷積進行降維。同時使用Relu層和Batch_norm層進行歸一化,在減少網絡訓練時長的同時有助于提高網絡的檢測精度。
此外,為了減少網絡訓練過程中由于參數過量導致過擬合問題的發生,不同輸入層連接的DCD模塊使用相同的結構,實現權重共享。通過權重共享,減少了網絡參數量,同時使得不同尺度的目標經歷了具有相同表達能力的網絡,充分利用了每一個特征。
最后,使用多任務損失函數對網絡進行優化學習。損失函數由類別置信度損失Lconf和定位損失Lloc組成,其定義如下:

其中,x是輸入的圖像數據,c是置信度預測值,l是定位預測值,g是真實值,N是匹配的預測框的個數,經過交叉驗證后,權重系數α設置為1。定位損失采用smoothL1函數對正樣本進行誤差計算,置信度誤差采用softmax loss函數進行計算。
在UA-DETRAC數據集(簡稱UA數據集)上進行了實驗。UA-DETRAC數據集是在中國北京和天津兩座城市共24個不同的位置錄制而成,一共包含了82 085張不同角度、不同天氣及不同遮擋情況的圖像,數據集包含四類目標,分別是汽車(car)、公交車(bus)、貨車(van)和其他車型(others)。在實驗中,從該數據集中選取65 668張作為訓練數據,16 417張作為測試數據,并參照Pascal VOC 2007的數據格式制作成了對應的數據集。
軟硬件平臺為:操作系統Ubuntu 16.04,Intel Xeon E5-1630V3@3.7 GHz四核處理器,16 GB內存,Nvidia GTX 1080Ti 11 GB顯卡,在Caffe框架下使用Python編程語言實現。
通過大量實驗發現:當膨脹率大于12時,特征會大幅度弱化并造成檢測精度急劇下降的現象,因此本文使用膨脹率分別為3,6,12的3×3卷積核。
訓練過程中,采用隨機梯度下降法迭代更新權重參數,同時使用L2正則化減少過擬合,初始學習率為0.001,權重衰減系數為0.000 5,迭代次數設置為120 000次。
在實驗中,以平均精度(average precision,AP)以及平均精度均值(mean average precision,mAP)作為評價指標,其計算公式如下:

其中,PrecisionC是指類別為C的目標檢測精度,TP表示正確檢測出來的目標總數,FP表示被錯誤檢測出來的目標總數,NC是指包含C類目標的圖像總數,APC是用來分析C類目標檢測效果的C類目標的平均檢測精度,S表示類別數量,mAP為所有類別目標的平均精度之和的平均值,其值越高表示模型的檢測效果越好。
為了驗證DCD模塊的有效性,本文分別做了含有DCD模塊(+DCD)和沒有DCD(-DCD)模塊的實驗,實驗結果如表1所示。

表1 DCD模塊有效性驗證Table 1 DCD module validation
從表1的實驗結果可知,添加DCD模塊之后的算法,各類目標AP值以及mAP值均高于不含DCD模塊的算法,表明DCD模塊中的級聯膨脹卷積可以利用逐漸遞增的感受野提取目標多尺度特征,提高了特征的表達能力,使得網絡提取的特征更為全面。
為了驗證本文算法的有效性和保證實驗的公平性,將UA數據集調整成320×320和512×512大小的圖像進行實驗,并分別與當前目標檢測領域內的主流算法進行了對比。對比算法包括Faster RCNN[15],RefineDet[16],SSD及YOLOv3[17],實驗結果如表2、表3所示。

表2 不同算法在320×320圖像上的檢測精度Table 2 Detection accuracy of different algorithms on 320×320 images
從表2、表3的對比數據可得,本文算法的mAP值均高于其他算法。在320×320大小的數據集上mAP值達到了88.6%,超越了其他四類算法。提高圖像分辨率能夠明顯提升檢測精度,高分辨率圖像中的目標在一定程度上被放大,所以更容易被網絡學習到。對比表1和表2的數據可以看出,Faster R-CNN算法的mAP值出現了變化,從28.7%提高到72.5%;RefineDet算法和SSD算法的mAP值也提高了7%~12%。反觀本文算法檢測精度保持平穩,表明本文算法在多尺度檢測問題上具有更強的魯棒性且對于輸入圖像尺度的變化不敏感。圖2展示了各類算法在320×320模型上的測試結果。

表3 不同算法在512×512圖像上的檢測精度Table 3 Detection accuracy of different algorithms on 512×512 images
圖2 中,SSD算法和YOLOv3算法在檢測過程中沒有準確地檢測到目標,RefineDet算法存在重復檢測和誤檢的現象。本文算法利用級聯膨脹卷積層的方式獲取了目標的多尺度特征,從而能更準確地檢測到目標。

圖2 多尺度測試結果對比圖Fig.2 Comparison of the detection results of the multi-scale object
此外,本文還做了在遮擋、光照等情況下的對比實驗。由于道路周邊的綠色植被和建筑物容易對目標造成遮擋現象,這種現象會使目標信息部分丟失,從而影響檢測的準確性。
圖3 所示為在遮擋情況下的檢測結果,Faster R-CNN算法、RefineDet算法和YOLOv3算法均出現了誤檢現象,本文算法使用密集連接的方法為目標增加了上下文信息,在遮擋情況下依然能檢測到目標。圖3展示的是各類算法在512×512模型上的測試結果。

圖3 遮擋情況下的測試結果對比圖Fig.3 Comparison of test results under occlusion
在復雜環境下,光照不均勻使場景圖像出現光照過強和光照過暗的現象而無法辨認圖像細節信息,導致目標檢測難度劇增。圖4中,Faster R-CNN算法出現了漏檢和誤檢的現象,公交站牌被檢測為others;SSD算法同樣出現了漏檢問題。本文算法通過密集連接膨脹卷積為目標添加了上下文信息,在光照不均勻的影響下仍然可以檢測到目標。

圖4 光照不均勻條件下的測試結果對比圖Fig.4 Comparison of test results under uneven illumination conditions
本文利用膨脹卷積和密集連接對SSD目標檢測算法進行改進,實現了一種用于目標檢測的深度學習算法。在UA數據集上與當前主流算法的對比測試表明,本文的改進算法能更好地適應目標的尺度變化,對遮擋及光照不均勻等復雜情況也具有一定的適應性。但是,文中搭建的卷積神經網絡對于輕量級要求還有一定的差距,如何在保證檢測精度的前提下優化網絡模型、減少網絡參數是今后研究的方向。