包成耀 丁霄霏 戴立奇 吳宗霖 楊艷紅
(蘇州大學應用技術學院,江蘇 蘇州 215300)
目標檢測算法的原理是通過算法模型將輸入圖像的目標物體識別并圈出其位置同時歸屬它所在的類別。近年來,得益于深度學習浪潮的來臨,目標檢測算法的發(fā)展十分迅速,從早期依靠手工特征的傳統(tǒng)目標檢測方法快速過渡到以深度學習為基礎的目標檢測方法。期間涌現了各種不同的目標檢測技術,可將其大致分為兩類:先生成預選框再分類的“two-stage”算法和直接分類給出位置信息的“one-stage”算法。two-stage算法的代表有R-CNN[1],Fast R-CNN[2],Faster R-CNN[3]網絡等;one-stage算法的代表有yolo系列[4-6]和SSD[7]等。
最早推出的R-CNN由于本身技術上的局限性,有著步驟繁瑣、識別效率低下等問題。隨后SPP-net、Fast R-CNN和Faster R-CNN等被相繼提出,SPP-net在CNN后加入了空間金字塔池化層極大提升了計算速度,Fast R-CNN則是借鑒了前者的方法在R-CNN的基礎上用ROI池化層替代了空間金字塔池化層大幅提高了檢測速度,Faster R-CNN針對CNN網絡對信息獲取的不足,提出了RPN(Region Proposal Networks)網絡,拋棄傳統(tǒng)的滑動窗口改用RPN生成,提升了檢測框生成速度。
而one-stage中的代表YOLO(You Only Look Once)算法相比Faster R-CNN算法結構更加簡潔,極大提升了檢測速度。其實現過程如圖1所示,輸入一張448*448*3的圖片,用一個7*7的網格將其分割并輸入到卷積神經網絡(CNN)中,經由中間層多次卷積與池化提取圖片的抽象特征,再經過兩個全連接層預測目標的位置和類別,最終輸出7*7*30的結果。
圖1 YOLO網絡結構
隨后推出的YOLO v2,v3也在此基礎上不斷精進,v2將v1網絡中的dropout層移除,取消全連接層,同時采用錨盒(Anchor Box)機制使YOLO更加準確和快速,YOLO v3則是引入了FPN(Feature Pyramid Networks)架構實現多尺度檢測,訓練了新的網絡結構DarkNet53進行特征提取以更好地利用GPU達到更高的檢測效率。
將以上幾種深度學習目標檢測算法以相同數據集訓練結果見表1。
表1 深度學習目標檢測算法對比[4-8]
從表中數據可以看出,在VOC2007數據集上R-CNN系列和YOLO系列檢測時間隨著算法不斷更新迭代,兩者的檢測精度在不斷提升,所用的檢測時間也在不斷縮短。將RCNN系列與YOLO系列進行比較,不論是在VOC2007或COCO數據集中,YOLO的檢測精度都要略高于R-CNN,而在檢測所需時間上YOLO要遠低于R-CNN,將Faster R-CNN與YOLO v3相比較,YOLO v3所耗時間僅前者的1/20。而到了YOLO V4,準確率更是在MSCOCO數據集上達到了43.5%的AP,速度在Tesla V100顯卡上達到了65FPS,實現了速度和精度的絕佳平衡。
YOLOv3是由Joseph Redmon等在2018年4月正式提出,也是該作者隱退前最后一篇關于該算法的文章。此后,Alexey Bochkovskiy于2020年4月23日正發(fā)布了YOLOv4,憑借著對YOLO算法的不斷探索研究獲得了原作者的肯定。而YOLO v4表現出的強大性能也沒有讓人失望,相比YOLOv3它更加準確、快速,其AP和FPS分別提高了10%和12%[8]。從結構上來說,YOLOv4棄用Darknet53轉為使用了CSPDarknet53,使用了SPP+PAN的組合,除此之外還運用了CutMix和Mosaic數據增強、DropBlock正則化、類標簽平滑等技巧。
如圖2所示,YOLOv4的網絡結構主要由4部分組成,分別為輸入層(Input),主干網絡(BackBone),頸部(Neck)和輸出層(Prediction)。
(1)輸入層大小一般采用608*608*3或416*416*3的大小,這里以416舉例。
(2)BackBone層選取了CSPDarknet53作為特征提取網絡,相比原有的Darknet53增加了CSP(Cross-stage partial connections)模塊,如圖2所示,CSP模塊借鑒了CSPNet的網絡結構,由三個卷積層和X個Resunit模塊Concat組成,在降低計算成本的同時保證了卷積神經網絡的準確性。同時在CBM模塊中使用Mish激活函數,有效防止了梯度消失的問題。整個BackBone有5個CSP模塊,以416*416的圖像為例,特征圖在經過CSP和其之前的卷積后,按照416*416*3->104*104*64->52*52*128->26*26*256->13*13*512的規(guī)律變化,最終得到13*13大小的特征圖。
圖2 YOLOv4網絡結構
(3)在Neck層中,SPP模塊采用了4種不同的最大池化方式將不同尺寸的特征圖進行整合,相比于BackBone中使用Mish函數的CBM模塊,在Neck中改為使用由Leaky relu激活函數組成的CBL模塊。在經過了CSPDarknet53網絡的下采樣操作后得到了52*52,26*26以及13*13的特征圖,以傳統(tǒng)的FPN特征金字塔所采用自上而下的上采樣方式進行的特征融合為基礎結合PAN結構再形成一個自下而上的特征金字塔,使網絡的特征提取能力得到加強。
(4)在Prediction層中使用了CIOU_Loss損失函數,將預測框篩選方式改為了DIOU_nms非極值抑制方法。在得到3個分支的輸出結構后,經過CBL和Conv兩層卷積后輸出預測3個尺寸。
YOLO v4-tiny作為YOLO v4的簡化版本,它在后者的基礎上去掉了一部分特征層,主干特征提取網絡CSPdarknet53精簡為CSPdarknet53-tiny,為提升速度將CBM模塊替換為CBL模塊,僅保留2個分支進行分類和回歸預測,在保證算法的主要框架下其結構得到了大幅精簡。
實驗所用數據集采用了網上公開的WiderPerson數據集,該數據集是較擁擠場景下的行人檢測基準數據集,其選擇的圖像場景較為多樣化,使訓練出的模型擁有更廣泛的適用性。從其中挑選7000張圖片作為訓練集,1000張為驗證集對模型進行訓練。由于標注文件的格式并非YOLO模型的標注格式,需要對其標注文件進行轉換。使用python對數據進行處理,生成對應的YOLO標注文件。
平均準確率(AP)是一個能夠反應全局性能的指標,準確率召回率曲線下的面積即為AP值。mAP值為所有不同類AP值的平均值,mAP值越大,檢測效果越好。其計算公式如下:
其中Pavg為不同類AP值的平均值,Nclass為總類別數。
損失函數(loss)表示了模型的預測值與實際值之間的差距,該數據有助于反映模型的性能,從而確定模型改進的方向,讓模型優(yōu)化更有效率,loss值越低,誤差越小,檢測效果越好。其計算公式如下:
其中coordErr,iouErr,clsErr分別代表坐標誤差,IOU誤差與分類誤差,λcoord則是坐標誤差在公式中所占的權重。
每秒幀率(FPS)是評估目標檢測算法的重要指標,代表每秒模型識別的圖象數,反映了目標檢測模型的速度,其數值越大越好。
本次實驗硬件環(huán)境為Windows 10,Intel i7-9750H 2.6GHz,GTX 1660Ti(6G顯存),16G內存,軟件環(huán)境為Visual Studio 2015,opencv 3.4.1,cuda 10.1,cudnn 7.6.5和darknet框架,具體模型參數如表2所示。使用YOLO v4作者Alexey Bochkovskiy在Github上提供的預訓練權重文件yolov4-tiny.conv.29開始訓練。網絡訓練過程如圖3所示。損失函數(loss)隨著迭代次數的不斷增加而逐漸收斂,最終維持在一個較低的水平,而mAP值也隨著迭代次數的增加而增加,最終達到了75.1%。
圖3 YOLOv4-tiny訓練過程
表2 模型配置參數
測試文件為網上下載的一段行人檢測用視頻,分辨率為1280*720,實驗結果如圖4。
圖4 測試截圖
從圖中可以看出絕大部分行人模型都能夠準確預測出,但仍有將部分商店中的假人誤標的情況,出現該情況的原因可能有以下幾點:(1)數據集本身存在一些錯標漏標的情況,對模型的準確率也產生了一定影響;(2)圖中標錯的假人在數據集中也被統(tǒng)一標注為person,在訓練過程中同樣產生了影響。在測試過程中的平均FPS達到了45。
為了比較YOLO v3,YOLO v4與YOLO v4-tiny的性能差異,在盡可能相同環(huán)境下(由于實驗設備性能限制,將batch值改為了16使訓練能夠正常進行)將三者以同樣的數據集與測試視頻進行測試對比,對比結果如表3所示。
表3 YOLOv3,v4和v4-tiny性能對比
從三者的對比中可以看出,YOLO v4相比之前的版本雖然提高了精度,但仍舊難以滿足目標檢測的實時性和輕量化的需求。而YOLOv4-tiny在有著近似YOLOv3精度的情況下實現了YOLO v4近5倍的速度。由此可以得出YOLO v4-tiny系列雖然精度上略遜于YOLOv4算法,但該算法的低延遲性使其能夠滿足高實時場景下擁有足夠的檢測精度,而其極低的性能占用與精簡的結構使其能夠被應用于更廣泛的場景中。
隨著模型訓練效率的不斷提高,神經網絡層級的不斷加深,信息抽象能力的不斷增強,未來的目標檢測算法的性能將會不斷提升。而隨著時代的不斷發(fā)展,實時檢測的需求將會越來越大,同時模型小型化也將成為目標檢測領域的一個重要分支,在部分場景中發(fā)揮巨大的作用,如監(jiān)控、無人機、服務型機器人等,在這些設備中無法使用具備強大算力的GPU,那么能夠部署于嵌入式設備如FPGA和輕量級CPU中的類似于tiny-YOLO的輕量級模型的分支也將受到更多的關注。