范智翰
(四川大學(xué)視覺合成圖形圖像技術(shù)國防重點(diǎn)學(xué)科實驗室,成都610065)
在圖像處理工作中,目標(biāo)檢測作為科研人員研究的熱門領(lǐng)域,主要采用識別圖像中目標(biāo)位置的技術(shù),用于解決“是什么?在哪里”的問題。自2012 年AlexNet的誕生后,目標(biāo)檢測領(lǐng)域科研人員的研究方向從傳統(tǒng)向深度學(xué)習(xí)轉(zhuǎn)變,因為基于深度學(xué)習(xí)的目標(biāo)檢測不僅具有較低的誤檢率和漏檢率,并且隨著顯卡性能高速增長準(zhǔn)確率也逐漸接近理想值。近年來目標(biāo)檢測最熱門的應(yīng)用領(lǐng)域是道路目標(biāo)檢測,無論是近年來各大科技公司投入巨資的無人駕駛汽車領(lǐng)域,還是有著不錯前景的車載攝像頭測距,都迫切的需要一個準(zhǔn)確率與實時性俱佳的目標(biāo)檢測算法。
傳統(tǒng)目標(biāo)檢測方法一般是在給定的圖像上選出一些候選區(qū)域,之后對這些區(qū)域提取特征,這個過程一般需要人工來獲取原始輸入中與目標(biāo)有關(guān)的表達(dá)信息,最后在提取出的與目標(biāo)相關(guān)的特征信息上進(jìn)行分類器學(xué)習(xí),例如經(jīng)典的SIFT[1]、HoG[2]等方法。然而這些方法都有一個明顯缺陷,就是特征的選取會受限于算法設(shè)計者的經(jīng)驗與復(fù)雜的實際情況,這會導(dǎo)致設(shè)計者在特征選取上較為困難,并且可能出現(xiàn)選取特征不足以較為完整地描述該目標(biāo)導(dǎo)致信息丟失的情況。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)結(jié)合了人工神經(jīng)網(wǎng)絡(luò)和卷積運(yùn)算,對不同類型的目標(biāo)及諸如形變、截斷以及扭曲等特殊情況也具有良好的魯棒性;除此之外它通過稀疏連接和權(quán)值共享大大減少了傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量,很多基于卷積神經(jīng)網(wǎng)絡(luò)的檢測方法或模型在各種目標(biāo)識別場景中都獲得了令人較為滿意的結(jié)果。2014 年Girshick 等人在提出了R-CNN 算法[3],在目標(biāo)檢測這一領(lǐng)域引入CNN,檢測結(jié)果明顯優(yōu)于傳統(tǒng)目標(biāo)檢測算法,之后又誕生了Fast R-CNN[4]、Faster R-CNN[5]等改進(jìn)算法。這類算法是先由候選區(qū)域算法生成一些樣本候選框,之后通過卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行樣本分類。這類算法主要通過一個卷積神經(jīng)網(wǎng)絡(luò)來完成目標(biāo)檢測過程,要提取CNN 卷積特征,在訓(xùn)練網(wǎng)絡(luò)時首先是訓(xùn)練RPN 網(wǎng)絡(luò),然后訓(xùn)練目標(biāo)區(qū)域檢測的網(wǎng)絡(luò),可以看作是兩步操作,所以這類算法也被稱為two-stage 類的目標(biāo)檢測算法。這類算法準(zhǔn)確度不錯,但是在檢測時間上很難滿足道路目標(biāo)檢測實時性的要求。
但實時目標(biāo)檢測模型應(yīng)該能夠在極短時間內(nèi)檢測并解析目標(biāo),為了提高檢測速率,此領(lǐng)域相關(guān)科研人員提出了一類直接回歸計算物體的類別概率和位置坐標(biāo)的算法,這類算法主要通過主干網(wǎng)絡(luò)給出類別和位置信息,不使用RPN 網(wǎng)絡(luò)所以只有一步操作,也被稱為one-stage 類目標(biāo)檢測算法,YOLO 便是這類算法中的一個佼佼者。
YOLO(You Only Look Once)網(wǎng)絡(luò)在2015 年 由Joseph Redmon 團(tuán)隊提出,是最早的one-stage 類目標(biāo)檢測算法。YOLO 網(wǎng)絡(luò)將縮放后的圖像劃分成S×S 個區(qū)域,每個區(qū)域負(fù)責(zé)檢測中心點(diǎn)位于本網(wǎng)格內(nèi)的物體。每個區(qū)域會預(yù)測N 個不同的邊界框,即對每幅圖像一共生成S×S×N 個邊界候選框[6]。最后采用置信度來評估每個預(yù)測目標(biāo)是否準(zhǔn)確,置信度由兩個指標(biāo)綜合判斷,分別是存在目標(biāo)物體的概率以及邊界框的準(zhǔn)確度,其中邊界框的準(zhǔn)確度用交并比IOU 來表示:
公式中分子代表有效區(qū)域面積,即圖1 中的灰色部分,分母代表兩個邊界框一共所占面積(重疊部分只算一次)。
圖1
YOLO 自誕生起就引起了廣泛的關(guān)注,它使實時檢測變?yōu)榱丝赡?。遺憾的是,雖然速度大幅提升,但犧牲了準(zhǔn)確率。官方團(tuán)隊為了兼顧速度與效率,相繼推出了YOLOv2 與YOLOv3,還有適用于簡單場景的YOLO-Tiny 版本。
YOLO 的官方實現(xiàn)框架是DarkNet,DarkNet 是一種比較小眾的框架,也有相關(guān)研究人員用TensorFlow與Keras 實現(xiàn),但截至2019 年底,YOLO 的歷代版本更迭都采用DarkNet 框架,本實驗也是基于DarkNet 實現(xiàn)的YOLOv3-Tiny 進(jìn)行改動。
機(jī)器學(xué)習(xí)訓(xùn)練過程中,每次會從訓(xùn)練集中選取設(shè)定批次大小的訓(xùn)練數(shù)據(jù),但每批數(shù)據(jù)的特征表現(xiàn)并不一致,隨著網(wǎng)絡(luò)不斷深入,每批數(shù)據(jù)的特征差距會對收斂速度產(chǎn)生明顯影響。針對這個問題可采用BN(Batch Normalization)來規(guī)范化某些層或所有層的輸入,從而可以固定每層輸入信號的均值與方差。這樣一來,即使網(wǎng)絡(luò)模型較深層的響應(yīng)或梯度很小,也可通過BN 的規(guī)范化作用將其的尺度變大,以此便可減少深層網(wǎng)絡(luò)訓(xùn)練很可能帶來的梯度起伏變化的相關(guān)問題[7]。
批量規(guī)范化處理不僅加快了模型收斂速度,而且更重要的是能有效抑制在不斷深入的神經(jīng)網(wǎng)絡(luò)中可能發(fā)生的“梯度彌散”、“梯度爆炸”等問題,從而使得訓(xùn)練深層網(wǎng)絡(luò)模型更加穩(wěn)定,所以BN 層成為了幾乎所有卷積神經(jīng)網(wǎng)絡(luò)的標(biāo)配。
YOLO 從v2 版本起也加入了BN 來改進(jìn)訓(xùn)練和mAP,之后的版本也都采用了BN 層對數(shù)據(jù)進(jìn)行處理。但加入BN 層本身是需要計算資源的,對于檢測目標(biāo)類別少,且網(wǎng)絡(luò)層數(shù)不多的YOLOv3-Tiny,是否真的需要BN 層是一個值得思考的問題。如前文所述加入BN層是為了解決每一層特征分布不均衡的問題,而在淺層網(wǎng)絡(luò)中,特征不均引起的梯度問題并不明顯,而加入BN 層讓計算量明顯增大,會大大影響YOLO 的實時性,所以本實驗去掉了BN 層來增加YOLO 的檢測速度。
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)CNN 為了更好、更高效、更準(zhǔn)確地去挖掘深層特征,會將網(wǎng)絡(luò)加深或者將網(wǎng)絡(luò)結(jié)構(gòu)變寬使得模型能更好地去描述輸入數(shù)據(jù)內(nèi)容。
CVPR 2017 獲獎?wù)撐淖髡吆芴岢隽艘环N新的方式來獲取更多的特征,他表示隨著網(wǎng)絡(luò)深度的加深,梯度消失問題會愈加明顯,在保證網(wǎng)絡(luò)中每層特征信息都能盡可能傳輸?shù)那疤嵯?,直接讓?dāng)前層連接前面所有層。為了能夠保證前面網(wǎng)絡(luò)層的特性,每一層將之前所有層的輸入進(jìn)行整合,之后將輸出的特征圖傳遞給之后的所有層。這種連接方式使得特征和梯度的傳遞更加有效,網(wǎng)絡(luò)收斂速度就會加快,更容易得到理想的訓(xùn)練結(jié)果。每一層都可以直接利用損失函數(shù)的梯度以及最開始的輸入信息,相當(dāng)于是一種無形的深度監(jiān)督(implicit deep supervision)[8]。將每層輸入都接收之前層的輸出,每層的輸出特征都是之后所有層的輸入,這種稠密連接模塊(dense block)的會比傳統(tǒng)的卷積網(wǎng)絡(luò)擁有更少的參數(shù),因為它不需要再重新學(xué)習(xí)多余的特征圖,特征收斂更快。傳統(tǒng)的網(wǎng)絡(luò)層間特征傳遞可以被看成一種層與層之間依次傳遞的算法。每一層接收前一層的輸出,然后將新的特征傳遞給下一層。它改變了本來的特征圖,但也保留了需要的特征,讓其依舊能提供給后面的網(wǎng)絡(luò)。但當(dāng)網(wǎng)絡(luò)很深的時候,每一層接收到之前網(wǎng)絡(luò)層的特征信息會非常龐大,處理巨量的信息會使訓(xùn)練和收斂都明顯變慢,并且對特征的提取也變得更加困難,所以dense block 更適合在淺層網(wǎng)絡(luò)中使用,而本試驗改進(jìn)的YOLOv3-Tiny 本身是一個淺層網(wǎng)絡(luò),所以實驗在去掉BN 層的同時加入密集連接層,既能加快收斂,也能更好提高準(zhǔn)確率與檢測速度。
本實驗改動后的網(wǎng)絡(luò)如圖2。
圖2 網(wǎng)絡(luò)示意圖
本實驗改動后的網(wǎng)絡(luò)命名為YOLO-DWB(YOLODenseNetWithoutBN)。
如前文所訴,前考慮網(wǎng)絡(luò)前段信息本身較少,收斂速度較快,基本特征較為明顯。在網(wǎng)絡(luò)收斂明顯變慢的后段加入一層密集連接層,接收更多的信息來減少后面網(wǎng)絡(luò)的計算量。
本實驗采用個人標(biāo)注的道路實況數(shù)據(jù)集,實驗基于YOLO 的DarkNet 框架實現(xiàn),采用一種配置訓(xùn)練,兩種配置測試:一種CPU 是Intel Core i7-8700,顯卡為NVIDIA GTX-1080Ti,也是本試驗的訓(xùn)練機(jī);另一種CPU 是Intel Core i5-6400,顯卡為NVIDIA GT-730,采用本組配置進(jìn)行測試是考慮到在車載環(huán)境下,移動端微型計算機(jī)顯卡性能有限,但一般會好于NVIDIA GT730,故采用此配置作為移動端能否實時快速的衡量標(biāo)準(zhǔn)。
為了更好地模擬車載攝像頭檢測環(huán)境,本實驗采用的數(shù)據(jù)集為由行車記錄儀保存的實際行車錄像截取的道路實況圖片。數(shù)據(jù)集包括鄉(xiāng)村道路,城市道路,高速公路等常見道路行車,存在各種程度的遮擋和截斷,選取的圖片均為白天或光線較好的情況下的道路實況。本實驗一共有三個類別的標(biāo)簽,分別為:person、car、motor,其中motor 類是如電瓶車、自行車這類物體的,因為其特征相似,區(qū)分度較小,故歸為一類。本實驗一共選取2800 張不同路況的道路圖片,選取其中2300 張作為訓(xùn)練集,500 張作為測試集。數(shù)據(jù)集樣例圖及識別樣例圖如圖3 與圖4 所示。
圖3
圖4
YOLO 官方的DarkNet 框架實現(xiàn)中提供了數(shù)據(jù)增廣,對圖片進(jìn)行翻轉(zhuǎn)、旋轉(zhuǎn)、截取等操作來提升準(zhǔn)確率與泛化能力。本文網(wǎng)絡(luò)YOLO-DWB 將訓(xùn)練圖像縮放至416×416 像素,按前文的網(wǎng)絡(luò)示意圖過程進(jìn)行訓(xùn)練。批次大?。˙atchSize)設(shè)置為128,學(xué)習(xí)率初始為10-3,后依次下降至10-4,迭代10 萬次后為10-5,每25000 次迭代測試一次數(shù)據(jù),一共迭代150000 次。
本實驗以檢測率和檢測速率兩項指標(biāo)對YOLO 與YOLO-DWB 進(jìn)行評估,其中,檢測率為成功檢測的物體個數(shù)除以該類別物體總個數(shù),成功檢測的目標(biāo)是指物體類別正確且置信度大于0.5 的檢出目標(biāo),公式如下:
檢測速率即檢測一張圖片的時間,本實驗換算為FPS 表示,即每秒檢測的圖片數(shù)量。本實驗繪圖表示了兩種網(wǎng)絡(luò)在迭代過程中的收斂速度,橫軸為迭代次數(shù),縱軸為檢測率。
圖5 迭代次數(shù)檢測率變化折線圖
從圖中可以看到,YOLO-DWB(虛線)的收斂速度要略優(yōu)于YOLO,但差距不大,在迭代次數(shù)巨大時有一定優(yōu)勢,最終檢測率基本一樣,YOLO-DWB 在準(zhǔn)確率方面沒有明顯優(yōu)勢。
檢測率及檢測速度如表1、表2 所示。
表1 (檢測率)
表2 (檢測速率)
從表1 中可以看到,去掉BN 層后再加入密集連接模塊,YOLO 的識別率變化不大,只有一點(diǎn)很小的提升,考慮到訓(xùn)練誤差可以忽略。其中汽車和摩托類檢測率比較理想,行人類檢測率較低,這是因為小目標(biāo)物體的漏檢問題一貫是目標(biāo)檢測算法中一個比較難解決的問題。不過從表2 中看,檢測速率提升明顯,特別是在圖形性較弱的NVIDIA GT-730 上,速度提升了54.43%。在NVIDIA 1080Ti 上提升僅為16.61%,考慮這張顯卡本身性能強(qiáng)勁,原網(wǎng)絡(luò)已經(jīng)擁有很高的幀率,提升幅度會更多地受其他因素影響。YOLO-DWB 能在NVIDIA GT-730 上跑出24.4 幀/秒的速度,那么對于目前移動端性能較強(qiáng)的GPU 來說能夠輕松達(dá)到30幀以上的幀率,行車記錄儀中視頻默認(rèn)為30 幀,故達(dá)到30 幀以上便能夠?qū)崿F(xiàn)實時目標(biāo)檢測。
本文實驗將以DarkNet 為實現(xiàn)框架YOLO 去掉BN 層,并在網(wǎng)絡(luò)中段加入一層密集連接層,從結(jié)果來總結(jié)實驗中的兩個改動可以得到如下結(jié)論:
(1)通過對訓(xùn)練曲線的觀察,密集連接在YOLO 網(wǎng)絡(luò)中對收斂速度有較為明顯的影響,能更快地達(dá)到理想的效率。
(2)在YOLO 網(wǎng)絡(luò)中去掉批規(guī)范化處理BN 層后,加入密集連接層,對網(wǎng)絡(luò)最終模型的識別速度有較大影響,特別是GPU 能力偏弱的顯卡提升尤為明顯,對于在移動端需要實時的目標(biāo)檢測識別等任務(wù)具有參考意義。