朱 杰 辛月蘭 孫可心
(青海師范大學計算機學院 西寧 810000)
傳統(tǒng)的目標檢測算法[1~2]經過優(yōu)化,取得了一定的目標檢測效果。但是近年來,隨著卷積神經網絡在圖像方面的廣泛應用,基于卷積神經網絡的目標檢測算法逐漸代替了傳統(tǒng)的目標檢測算法。例如:預先從圖中找出候選區(qū)域的R-CNN[3](Regions with CNN feature,R-CNN)算法;結合了空間金子塔[4](Spatial Pyramid Pooling Network,SPP NET)結構的Fast R-CNN算法;使用區(qū)域提案網絡[5](Re?gion Proposal Network,RPN)代替窮舉搜索的Faster R-CNN[6]算法。這些算法都是基于卷積神經網絡的成熟的目標檢測算法,同時有學者指出,將成熟的目標檢測算法做改進會得到更高的檢測精度[7~9]。
上述的目標檢測算法是一種兩階段的目標檢測算法。兩階段的目標檢測算法的檢測速度很低,達不到實時監(jiān)測的目的。基于這種問題,Redmon[10]提出了單階段目標檢測算法YOLO(You only see once),該算法模型簡單,極大地提高了檢測的速度,但YOLO的候選框是通過K-MEANS[11]聚類算法得到,檢測的精度不如兩階段目標檢測算法。YOLOv3使用了DarkNet53主干特征提取網絡,并對輸出的特征層進行融合,在保證檢測速度的基礎上提高了檢測的精度,并廣泛應用于實時目標檢測領域。
為了平衡檢測速度和檢測精度,本文提出了二次特征融合的目標檢測算法。首先使用改進的可分離卷積模塊來代替YOLOv3主干網絡的卷積模塊;其次,將原網絡模型的殘差連接改進為密集連接,極大地提高了感受野;最后,通過一次自上而下的特征融合[12]充分結合了上下層語義信息,提高了特征提取的能力。通過在PASCAL VOC 2007和WiderFace數據集上測試發(fā)現(xiàn),該改進后的算法可以在保證檢測速度的基礎上,提高了目標檢測的精度。
YOLOv3將進行測試的N張圖像調節(jié)成416×416大小并輸入到Darknet-53特征提取網絡中,主干網絡提取得到13×13、26×26、52×52大小的三個特征層,分別位于主干特征提取網絡的底層、中層、上層。每一個網格會有三個先驗框,目標物體落在哪個網格則該網格負責物體種類的檢測和邊框的預測。通過每個網格的預測后得到所有預測框的位置和分類,再對預測框進行非極大抑制[13]并回歸得到最終的框。其檢測的流程如圖1所示。
圖1 YOLOv3算法流程
對于YOLOv3的網絡結構,首先,主干特征提取網絡采用了自上而下的單級網絡模型,特征提取的網絡模型簡單,不能很好地提取圖像特征。其次,底層特征層直接將主干網絡提取的特征輸出,從而導致檢測的精度低。
針對上述問題,本文提出了一種改進的二次特征融合的YOLOv3目標檢測算法,通過優(yōu)化主干網絡的連接結構和引入二次特征融合來改進YO?LOv3。這種方法比YOLOv3精度更高,同時保持檢測速度接近YOLOv3。
為減小網絡訓練的難度,本文考慮使用可分離的輕量化卷積模塊對原卷積模塊進行改進。對輸入N個通道的殘差旁路先通過一次1×1、步長為2的卷積塊,將通道數變?yōu)镹/2,再通過一次1×1、步長為2的卷積塊,將通道數變?yōu)镹/4。通過先減小通道數再卷積的方法大大減小了網絡規(guī)模。將原來的3×3卷積塊改進為3×1卷積塊和1×3卷積塊的可分離卷積模塊,在不降低網絡提取特征的能力下,進一步減小了網絡的訓練難度。通過這種方法可以解決卷積核參數冗余的問題,減少神經網絡權值參數。改進后的卷積模塊如圖2所示。
圖2 可分離卷積模塊
對于主干網絡提取特征的能力低的問題,本文提出了使用密集連接[14]的思想將主干網絡中的殘差塊連接起來,從而可以充分融合上下文的信息,增強了特征提取的能力。
密集連接結構的每一層得到的特征層都傳遞給下一層,使得每一層都接收網絡上層的所有信息,每一層節(jié)點的計算如式(1)所示,x0~xn-1表示輸入的n個向量,wn表示第N個向量的權值,bn為第N層向量的偏置。
對于第n層的輸入就是x0、x1…xn-1,xn輸出也會再次結合x0、x1…xn-1傳遞給xn+1,所以經過密集連接后每一層都有上層的信息,對于最后一個卷積層其包含了整個主干網絡的特征融合??紤]到密集連接的卷積層過多會導致網絡模型變大、檢測速度變慢,所以本文考慮在YOLOv3主干網絡中部分使用密集連接塊。將第三個殘差卷積塊以及最后一個殘差塊使用密集連接,連接方式如圖3所示。Sepa?rableBlock為上述的可分離卷積模塊。
圖3 改進后的第三個和最后一個殘差塊
通過密集連接可以增大52×52特征層的感受野。如圖3(b)所示,本文將其進行密集連接可以大幅度的繼續(xù)增強其特征提取的能力。
對于原始特征融合模型,其通過底層信息的卷積和上采樣再與上層信息進行融合,最終得到三個大小不同的特征層。在原本的特征融合結構上進行了改進,本文對于第一次自下而上特征融合的底層特征層是上文提到的經過密集連接得到的特征層,通過該方法可以提高特征融合的性能。如圖4所示,虛線框內則是本文提出的二次特征融合模塊。該模塊將得到的三個特征層進行二次處理,52×52的卷積層再次與沒有經過密集連接的13×13特征層進行融合,進一步解決大尺度特征層特征提取能力的不足;再對52×52大小的特征層進行下采樣與26×26大小的特征層進行融合,同時對26×26的特征層進行通道調整并輸出最終的特征層;再將26×26大小的特征層進行卷積和下采樣與13×13的特征層進行融合,得到最終的13×13大小的特征層。通過二次特征融合會得到最終輸出的特征層,添加了二次特征融合的主干網絡結構如圖4所示。
圖4 改進后的網絡結構
以原始的YOLO算法為基礎,訓練改進后得到目標檢測模型。在訓練時,初始化學習率設置為0.001,加速最初的網絡收斂,在訓練至45000步時,將學習率設置為0.0005,權值衰減系數設置為0.0005對網絡進行精修。
本章實驗的硬件使用了Intel COREi5-8400處理器、11GB顯存的NVIDIA GeForce GTX 1080Ti顯卡,并使用了Windows 10 1902操作系統(tǒng)、CU?DA8.0、Python3.6、Keras2.2.5、TensorFlow1.14的軟件環(huán)境。
本文改進的算法在PASCAL VOC 2007測試數據集上的目標檢測結果如表1和表2所示。表1顯示了改進的算法在PASCAL VOC 2007測試數據集上的詳細實驗結果,表2比較了改進的算法與最新方法使用的網絡及平均檢測精度(mean Average Precision,mAP)和檢測速度。本實驗采用每秒檢測圖片的數量即fps作為檢測速度的衡量標準。當輸入圖像的大小為416×416像素時,YOLOv3方法表示為YOLOv3 416,并且其他方法也如上所述表示。
表1 本文改進的算法在PASCAL VOC2007、2012測試數據集上的檢測結果
表2 性能對比
本文在同一環(huán)境下對改進后的算法進行測試,對比了其他模型在PASCAL VOC 2007數據集上的性能表現(xiàn)。由表1可以看出本文改進的算法對于VOC數據集的檢測精度明顯要好于YOLOv3。從表2可以看出,本文提出的算法在39.5fps時的平均精度為79.8%,在損失了0.5%的檢測速度的基礎上,精確度比YOLOv3 416高2.2%。改進后的算法的檢測精度的提升是可觀的。相比于兩階段的目標檢測算法,在檢測速度上遠遠高于兩階段目標檢測算法,并且在準確度上也在逼近兩階段算法。
YOLOv3 416與改進后的算法的測試結果如圖5所示,圖5左邊是YOLOv3 416檢測結果圖,右邊是本文的檢測結果圖。經過比較發(fā)現(xiàn),本文改進的算法在框的得分和精確度上會略高于YOLOv3算法,體現(xiàn)了該算法在精度方面的優(yōu)勢。
人臉檢測是基于計算機視覺的目標檢測方法的重要應用之一[15~16]。本文利用WiderFace數據集來對本文提出的算法進行訓練和測試。表3總結了各種算法對于該數據集的檢測結果。本文采用每張照片的檢測時間來代表檢測速度,使得數據更直觀。
圖5 YOLOv3 416檢測結果(左)和本文方法檢測結果(右)
表3 性能對比
與表3中其他方法相比,本文改進的算法在檢測速度與YOLOv3 416持平的情況下,平均精度比YOLOv3 416高1.6%;比YOLOv2檢測精度高5.6%。相比于兩階段目標算法,本文提出的算法的檢測速度要遠快于RCNN、Faster RCNN算法,并且在此基礎上檢測精度逼近Faster RCNN。通過分析可得,本文提出的算法在WiderFace數據集上也有很優(yōu)秀的表現(xiàn)。
YOLOv3 416與改進后的算法在WiderFace數據集的測試結果如圖6所示,圖6左邊是YOLOv3 416檢測結果圖,右邊是本文的檢測結果圖。通過對比可以看出,本文提出的算法會對于人臉的框定更加的精細,該算法的檢測結果要明顯好于YO?LOv3 416。
圖6 YOLOv3 416檢測結果(左)和本文方法檢測結果(右)
針對YOLO目標檢測算法主干網絡特征提取能力不足,不能充分融合多尺度特征的問題,本文提出了一種二次特征融合的YOLO目標檢測算法。在該算法中,利用可分離卷積代替了原有的卷積模塊從而減小了網絡的規(guī)模;并對第三個和最后一個卷積塊進行密集連接;最后,設計并引入了二次特征融合來連接多尺度特征,以保證每個輸出特征層都包含有上下文語義信息。在PASCAL VOC數據集上的實驗表明,本文改進后的算法在檢測速度略有降低的情況下,比YOLOv3的檢測精度高2.2%;在WiderFace數據集上的實驗表明,對于人臉檢測也有著較好的測試結果,從而使得改進后的算法能適用更多領域[17~20]。