朱茂桃,邢 浩,方瑞華
(1.江蘇大學,江蘇 鎮江 212013;2.上海干巷車鏡實業有限公司,上海 201518)
近年來,隨著人工智能的飛速發展,基于計算機視覺的目標檢測技術在精度和實時性方面都取得了極大的進步,這對高級輔助駕駛系統(advanced driving assistant system)技術的研究和發展具有重要意義。
傳統的目標檢測方法需要人工設計如SIFT、ORB、HOG等特征算子[1-3],再通過SVM以及Adaboost這些分類器實現目標檢測[4-5],泛化能力差,難以同時保證精確度和實時性要求。
2012年,在ImageNet圖像識別競賽上,Hinton及其學生 Alex Krizhevsky提出了 AlexNet[6]卷積神經網絡(convolutional neural networks,CNNs),并以巨大的優勢獲得了競賽冠軍,基于深度學習的目標分類和檢測方法也隨之成為主流。目前,基于深度學習的目標檢測方法大體分為兩種:一步法(one-stage)和兩步法(two-stage)。一步法即通過一個神經網絡結構完成目標檢測任務。Redmon等提出了 YOLO系列算法[7-9],將 GoogLeNet[10]作為骨干網絡直接對圖片進行特征提取和目標預測。YOLO算法的檢測速度非常快,可以達到實時性要求,同時具有較好的泛化能力,但是其精度相對較低,有時會導致定位不準確,在檢測一些小目標時難以獲得令人滿意的效果。兩步法主要包括R-CNN系列算法,R-CNN[11]使用 CNN網絡進行特征提取,再通過SVM分類器完成檢測任務;Fast R-CNN[12]使用了softmax層對目標進行分類,提高了檢測速度;Faster R-CNN[13]使用了 RPN網絡代替了選擇性搜索(selective search),進一步提高了檢測性能。相比一步法,兩步法能夠獲得較高的精度,定位更加準確,但總體檢測速度較慢,無法應用于一些對實時性要求很高的場景。
綜上所述,為滿足車輛檢測算法在實時性和準確性上的較高要求,基于YOLOv3[9]和 Trident-Net[14]網絡,設計了一種 YOLO-TridentNet網絡結構,并對網絡層的參數進行調優。然后采用KITTI[15]車輛數據集,分別訓練了 YOLOv3和YOLO-TridentNet車輛檢測模型,實現了車輛檢測任務,同時與原來的YOLOv3算法進行對比,結果表明:在能夠保證實時性的前提下,基于YOLOTridentNet的車輛檢測方法在檢測遠處車輛以及小尺度目標時能夠得到更高的檢測精度。
YOLOv3算法在 YOLO9000[8]算法的基礎上加以改進,具有更深的網絡結構,通過聚類的方法獲得了錨框(anchor box)尺寸,在預測邊界框內目標置信度得分時則使用了邏輯回歸(logistic regression)方法。YOLOv3對損失函數做了修改,主要是在預測置信度和類別損失時,使用了二元交叉熵函數,從而可以進行多標簽分類。
相比傳統的目標檢測方法,YOLOv3算法更簡潔、迅速,總體來說只需3步即可完成檢測任務:①調整圖片分辨率大小;②CNN網絡提取圖像特征,輸出預測結果;③ 使用非極大值抑制(nonmaximum suppression,NMS)[16]的方法過濾掉冗余的預測框,輸出最終檢測結果。
通過對文獻[9]總結,給出如圖1所示的具體YOLOv3網絡結構,其在Darknet-19的基礎上重新規劃了網絡層布局。與之前不同,YOLOv3類似于一個全卷積網絡,網絡層中并沒有加入池化層而是使用了步長為2的卷積層實現了降采樣過程,同時在一系列連續的1×1和3×3卷積層中加入了類似 ResNet[17]的跨層連接方式(shortcut connection),防止網絡逐漸加深時發生梯度消失或梯度爆炸的現象。
YOLOv3運用了類似特征金字塔(feature pyramid networks)的方法[18],進行了多尺度預測,最后輸出了3種不同大小的特征張量。輸入圖像經過5次下采樣及一系列卷積處理后,通過路由(route)層,將淺層網絡的特征圖與經過上采樣后所輸出的特征圖相結合再輸入至下一層網絡,從而獲得更加豐富的特征信息,改善了小目標的檢測效果。
2.1.1 YOLO-TridentNet網絡結構
文獻[14]提出的TridentNet網絡結構反映了不同的感受野(receptive field)對不同尺度目標的檢測效果,研究表明較大的感受野在檢測大尺度的目標時能獲得更好的效果,對小尺度目標的檢測則無法得到令人滿意的效果;感受野較小時,檢測效果則與之相反。TridentNet網絡具有3個平行分支網絡,除了擴張率(dilation rate)[19]不同外,每一個分支的網絡層參數都進行了共享,減少了計算量的同時也改善了最終的檢測效果。
本文中將 Darknet-53作為骨干網絡(backbone),前53個卷積層布局與之相同,只修改了一些參數,之后借用了TridentNet網絡權重共享的想法,設計了如圖2所示的YOLO-TridentNet網絡層結構。與圖1所示結構不同,3個Yolo層與骨干網絡之間設計了3個平行分支網絡,各個分支都由一定數量的1×1卷積層、3×3卷積層、BN層、shortcut層以及激活函數組成。每個分支的擴張率不同,Yolo1至Yolo3層所在分支卷積層的擴張率大小分別為3、2、1。Yolo1層的擴張率最大,感受野也最大,適合檢測尺度較大或者距離較近的目標;Yolo2層的擴張率最小,感受野也最小,適合檢測尺度較小或者距離較遠的目標。當輸入圖片的分辨率大小為416×416時,圖像經過網絡層處理,最終輸出了3種尺度的特征圖分別為:13×13(dilation rate=3)、26×26(dilation rate=2)、52×52(dilation rate=1)。
2.1.2 損失函數的定義
本文中的損失主要由3部分組成:邊界框坐標坐標的預測損失,目標置信度得分損失和目標所屬類別的預測損失。如果某個邊界框沒有分配給待檢測的目標,則不會產生邊界框的坐標損失和分類損失,只會計算目標置信度損失。具體的損失函數式如下:
式(2)是目標的分類損失,同樣使用了二元交叉熵函數,這有利于多標簽的分類,在同一個網格中可以檢測出屬于不同類別的目標,比如可以識別出是轎車還是卡車等。y∈{1,0},y代表待檢測的目標是否為汽車,是則為1,否則為0;pi(c)表示當前目標屬于汽車類或者其他類別的概率。
式(3)是目標置信度的損失,分為兩部分:含有待檢測目標的置信度損失和不含待檢測目標的置信度損失。定義這兩部分損失時使用了二元交叉熵函數,當目標物落在第i個網格中,從B個邊界框中選擇與標注框交并比即IOU值最高的一個作為有目標物的置信度損失,剩下的邊界框的置信度作為第2部分不含待檢測目標的置信度損失。若舍去的某個邊界框的IOU值大于設定的閾值,卻又不是最大值,則該邊界框置信度得分不參加任何部分損失的計算,直接忽略。
由于不含目標的網格一般占整張圖片的大部分區域,往往使得置信度的得分趨向于0,無法保證模型的穩定性,從而在訓練初期就發生離散現象。因此,人為定義參數λcoord=5,增加邊界框坐標的損失,定義λnoobj=0.5,減少不含目標的網格帶來的置信度損失。
2.1.3 訓練參數
訓練一個單類檢測模型,設定最大迭代次數為4 000次,基本可以保證模型達到收斂。受限于筆記本顯卡性能和內存大小,一次只加載32個樣本,分32次完成前向傳播。使用數據增強的方法,改變待訓練圖片的曝光度、色調以及飽和度,從而生成更多的訓練樣本。設置初始的學習率為0.001,訓練到3 500次后,學習率衰減10倍,繼續訓練至結束。部分訓練參數如表1所示。

表1 部分訓練參數
2.1.4 數據集構建和處理
利用KITTI車輛數據集進行實驗,共選取了7 480張圖片,按照7∶2∶1的比例,分為訓練集:5 240個樣本,測試集:1 500個樣本和驗證集:740個樣本。訓練集用于訓練 YOLO-TridentNet和YOLOv3網絡模型,測試集用于測試訓練得到的模型的精度,驗證集主要用于評估訓練得到的模型的泛化能力。
數據集構建完成后,為獲得錨框的尺寸,使用K-means聚類的方法,得到了9種錨框尺寸,尺寸選取較大的3個錨框分配給Yolo1層,尺寸較小的3個錨框分配給Yolo3層,剩下的3個錨框分配給Yolo2層,具體實現步驟如下:
步驟1 根據數據集中標注框坐標信息分布情況,選擇 9個聚類中心(Wi,Hi),i∈{1,2,…,9},其中,Wi和Hi為錨框的寬和高;
步驟2 計算每個標注框和每個聚類中心的距離d,計算公式如下:
其中:IOU表示交并比;anchor表示錨框;truth表示標注框,計算公式如下:
其中:分子表示錨框和標注框相交的面積大小;分母表示錨框和標注框相并的面積大小。當IOU值最大時,即標注框和錨框匹配得最好,此時d最小,將標注框分配給該聚類中心;
步驟3 將所有標注框分配完畢后,分別計算每個聚類中心所屬的標注框寬和高的平均值,作為新的聚類中心;
步驟4 重復步驟2和步驟3n次,直到dndn-1趨于0時,輸出聚類結果。
2.1.5 模型訓練步驟
步驟1 采用在ImageNet數據集上預先訓練好的Darknet模型參數作為初始化權重進行訓練,以減少訓練時間;
步驟2 將訓練集中的圖片輸入YOLO-TridentNet網絡中,自動調整圖像分辨率為416×416,卷積層對圖像特征進行學習,Yolo層對邊界框坐標、目標置信度和類別進行預測;
步驟3 輸入參數經過Yolo層時,特征圖被劃分成13×13個網格,根據標注框的坐標信息對錨框位置進行回歸,得到錨框相對于標注框的偏移值:tx,ty,tw,th,具體計算公式如下:
其中:Gx和Gy表示特征圖中標注框的中心點坐標;Gw和Gh表示特征圖中標注框的寬和高;Cx和Cy表示特征圖中grid cell的左上角坐標;Pw和Ph是錨框映射到特征圖上的寬和高;
步驟4 訓練集中的圖片經過步驟2)和3)處理后,最終學習到的參數包括:卷積層參數、BN層γ和β參數、錨框的偏移值、目標置信度和類別標簽。
基于Darknet深度學習框架,通過訓練得到的YOLO-TridentNet車輛檢測模型,實現了一種端到端(end-to-end)的目標檢測,具體檢測流程如下:
步驟1 將測試集中的圖片大小調整為416×416,輸入YOLO-TridentNet車輛檢測模型中;
步驟2 車輛檢測模型直接給出目標的置信度得分,同時對輸入的圖片進行特征提取,然后輸出錨框相對于標注框的偏移值,經過計算再得到輸出的邊界框的位置信息,具體表達式如下:
其中:W和H是輸入Yolo層中特征圖的大小;bx,by,bw,bh即輸出的邊界框。
步驟3 預測時,類似于模型訓練的處理過程,輸入Yolo層中的特征圖同樣會被劃分為13×13個網格,每個網格都分配了3個錨框。通過非極大值抑制的方法,過濾掉冗余的窗口,得到最優的邊界框。
實驗采用查準率(precision)、查全率(recall)和平均精度(average precision,AP)對最終的檢測結果進行評價。計算式如下:
其中:TP為真正類(True Positives),即汽車類被正確地識別為汽車;FP為假正類(false positives),即目標不是汽車卻被錯誤地識別為汽車;FN(false negative)為假負類,即目標是汽車卻被錯誤地識別為非汽車類。平均精度的值相當于求查準率和查全率關系曲線與坐標軸圍成的面積,它近似于不同閾值下求得的查準率再乘以查全率的變化率,最后進行累加所得到的結果。式(16)中N為所收集的樣本的數量,P(k)表示識別出k張圖片時的查準率,Δr(k)表示識別出的圖片數量從k-1變化到k時,查全率的變化值。
實驗硬件配置為:英特爾i5-7300HQ處理器;NVIDIA GTX1050Ti 4GB顯卡;8 GB內存。在Ubuntu 16.0.4系統下,使用Darknet深度學習框架,實現了整個算法流程,并利用CUDA加速模型的訓練。
將訓練集中的5 240張圖片輸入YOLOv3網絡和YOLO-TridentNet網絡中,經過訓練后,學習到了各卷積層、BN層以及Yolo檢測層的權重參數,最終得到了2個不同的車輛檢測模型。
在測試集中隨機選取幾張圖片進行檢測。圖3為測試集中選取的待檢測的4張圖片,將待檢測的圖片分別輸入YOLOv3和YOLO-TridentNet模型中,獲得了如圖4、5的檢測結果。
如圖 4(a)所示,待檢測樣本圖 3(a)經過YOLOv3模型處理后,最終只檢測到了一個目標;如圖5(a)所示,待檢測樣本圖3(a)經過 YOLOTridentNet模型處理后,還能夠檢測到另一個較遠處的小尺度目標。同樣的,待檢測樣本圖3(b)、(c)、(d)經過 YOLOv3模型處理后,都漏檢了一些尺度較小或者距離較遠的目標,而圖5中的漏檢現象明顯少于圖4所示的YOLOv3模型的檢測結果,說明 YOLO-TridentNet模型具有更高的查全率,在檢測小尺度以及較遠處的車輛時,能夠獲得更好的檢測效果。
圖6 中的實線和虛線分別是YOLO-TridentNet和YOLOv3模型的損失曲線,橫坐標為訓練次數。模型損失隨著訓練次數的增加,總體呈下降趨勢,當訓練次數達1 000次左右時,模型的損失變化趨于平緩,基本達到收斂;當訓練次數達到4 000次時,YOLOv3車輛檢測模型的損失為0.76,YOLOTridentNet車輛檢測模型的損失為0.74,兩種模型的損失不再變化,此時停止訓練即可獲得穩定的模型權重。
圖7為YOLOv3和YOLO-TridentNet車輛檢測模型的P-R曲線圖,即查準率和查全率關系曲線,分別由虛線和實線表示。由圖可知:模型的檢測精度會隨著查全率的增加而降低,當查全率為75%左右時,查準率約為98%,此時模型既能保證較高的檢測精度,又具有良好的查全率。當查準率相同時,相對于YOLOv3模型,YOLO-TridentNet模型能夠獲得更高的查全率,即在給定的測試集中能夠檢測到更多的車輛。圖4和圖5所示的模型的檢測結果也是圖7兩種模型曲線關系的一種直觀體現。
表2是兩種網絡結構在Darknet深度學習框架下,基于KITTI車輛檢測數據集訓練了4 000次后,所得到的模型的查準率、查全率、平均精度和每秒幀數。由表2可知:YOLO-TridentNet模型的查全率為76.5%,比YOLOv3提高了2.2%,漏檢情況得到改善,雖然每秒識別幀數相對于YOLOv3降低了2幀,但仍能基本實現實時檢測的效果。在IOU≥0.5時,YOLO-TridentNet車輛檢測模型能夠獲得92.35%的平均精度,比YOLOv3提高了1.06%。

表2 實驗結果
上述結果表明:本文中所提出的YOLO-TridentNet網絡在準確率和實時性方面得到了更好的平衡,該網絡訓練得到的模型不僅能夠滿足實時檢測的需求,而且能夠獲得更好的檢測效果,尤其是在檢測遠處小目標時,漏檢率更低。
基于YOLO-TridentNet的車輛檢測方法獲得了76.5%的查全率和92.35%的平均精度,在相同的交通場景中,能夠檢測到更多的車輛目標,特別是較遠處和小尺度的目標,進一步提高了駕駛的安全性。為了能夠在嵌入式設備上實現高精度的實時檢測,下一步可以考慮使用模型剪枝算法對YOLO-TridentNet模型進行壓縮,減少計算量,同時與行車預警機制相結合,從而減少交通事故的發生,保障生命財產安全。