郭昕剛, 紀(jì)超群
(長春工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院, 吉林 長春 130012)
目標(biāo)檢測在無人駕駛領(lǐng)域是必不可少的環(huán)節(jié)[1],通過對(duì)道路場景中的目標(biāo)進(jìn)行精準(zhǔn)檢測,可為系統(tǒng)提供更加準(zhǔn)確的環(huán)境信息,使系統(tǒng)對(duì)當(dāng)前的場景做出更加準(zhǔn)確的判斷與處理。
目前較好的目標(biāo)檢測算法大多數(shù)使用深度卷積神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)[2]。基于深度學(xué)習(xí)的主流目標(biāo)檢測算法可以分為兩類,即檢測精確度較高的基于區(qū)域的檢測算法(R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5]等)和偏向于檢測速度的基于回歸的檢測算法(YOLO[6]、YOLOv2[7]、YOLOv3[8]、SSD[9]等)。隨著兩類算法的不斷完善,不僅算法的網(wǎng)絡(luò)結(jié)構(gòu)與模型參數(shù)在不斷增加,而且模型運(yùn)行對(duì)硬件設(shè)施的要求也越來越高。在現(xiàn)實(shí)應(yīng)用場景中使用的移動(dòng)終端與嵌入式設(shè)備往往不能滿足模型的運(yùn)行條件,導(dǎo)致算法不能很好地向移動(dòng)端或嵌入式設(shè)備上進(jìn)行部署。通常對(duì)較大模型進(jìn)行壓縮,進(jìn)而減小模型中不必要的計(jì)算參量,使其能夠進(jìn)行移植,但模型壓縮往往會(huì)減少模型內(nèi)部的連接結(jié)構(gòu),對(duì)模型產(chǎn)生一些影響;另一種方法是重新設(shè)計(jì)算法的網(wǎng)絡(luò)結(jié)構(gòu),通過對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化,從而減少網(wǎng)絡(luò)模型的參量。輕量級(jí)網(wǎng)絡(luò)Mobilenets[10]是Google在2017年提出適用于移動(dòng)端部署的神經(jīng)網(wǎng)絡(luò),在減少網(wǎng)絡(luò)層數(shù)的同時(shí),使用深度可分離卷積替代標(biāo)準(zhǔn)卷積,減少卷積的計(jì)算開銷,增強(qiáng)網(wǎng)絡(luò)計(jì)算效率,使模型變小。
在目標(biāo)檢測算法中,SSD算法兼顧速度與精度[11]。SSD相對(duì)于two-stage算法在速度上有了極大的提升,雖然在速度上與YOLO依舊存在差距,但在精度方面比YOLO算法提高了很多。SSD使用特征提取網(wǎng)絡(luò)VGG16淺層輸出的特征圖對(duì)較小的目標(biāo)進(jìn)行檢測,由于淺層網(wǎng)絡(luò)對(duì)特征提取不充分,導(dǎo)致算法存在對(duì)小目標(biāo)檢測不精確的問題。基于SSD的輕量級(jí)檢測算法,Mobilenet-ssd使用特征提取網(wǎng)絡(luò)Mobilenet替代VGG16,雖然解決了網(wǎng)絡(luò)模型較大的問題,但依舊存在算法檢測精確度低,特別是對(duì)小目標(biāo)檢測精確度較低的問題。文中對(duì)Mobilenet-ssd算法進(jìn)行改進(jìn),用Mobilenetv3網(wǎng)絡(luò)作為算法的特征提取部分,進(jìn)一步減少網(wǎng)絡(luò)參量與計(jì)算參數(shù),并對(duì)Mobilenet網(wǎng)絡(luò)與SSD算法檢測器連接的部分引入特征金字塔(Feature Pyramid Networks)結(jié)構(gòu)[12],增加特征圖之間的聯(lián)系[13],使檢測器能夠更好地利用特征信息,從而提高算法的檢測精確度。
在研究人員意識(shí)到深度神經(jīng)網(wǎng)絡(luò)對(duì)圖像的特征提取有較好的效果后,不斷加深網(wǎng)絡(luò)深度,而隨著網(wǎng)絡(luò)深度的增加,也逐漸出現(xiàn)過擬合現(xiàn)象、梯度爆炸等問題。為了使神經(jīng)網(wǎng)絡(luò)能夠真正的更加深入,微軟在2015年推出了使用多個(gè)殘差模塊堆疊組成的殘差網(wǎng)絡(luò)(ResNet)[14]。ResNet中的殘差模塊與常見模型不同的是在輸入端與輸出端增加恒等映射關(guān)系,當(dāng)算法中某一層網(wǎng)絡(luò)的輸出已足夠成熟或出現(xiàn)退化現(xiàn)象時(shí),網(wǎng)絡(luò)通過映射關(guān)系把上層網(wǎng)絡(luò)的輸出直接送入下層網(wǎng)絡(luò),進(jìn)而避免出現(xiàn)網(wǎng)絡(luò)退化與過擬合現(xiàn)象,同時(shí)殘差結(jié)構(gòu)有效地減少了網(wǎng)絡(luò)的計(jì)算參量。
Mobilenet[10]網(wǎng)絡(luò)是一種輕量級(jí)卷積神經(jīng)網(wǎng)絡(luò),通過優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu),使模型的計(jì)算量與參數(shù)減少,使其在移動(dòng)終端更適合部署。在Mobilenet網(wǎng)絡(luò)中,將標(biāo)準(zhǔn)卷積替換為深度可分離卷積,即將一個(gè)標(biāo)準(zhǔn)卷積運(yùn)算通過深度卷積(Depthwise Convolution, DW)和逐點(diǎn)卷積(Pointwise Convolution, PW)兩部分來完成。
深度可分離卷積看似增加了卷積計(jì)算的復(fù)雜度,但有效減少了卷積的計(jì)算量。深度卷積部分與標(biāo)準(zhǔn)卷積不同,輸入圖像的通道數(shù)與卷積核為一對(duì)一關(guān)系,即一個(gè)通道只對(duì)應(yīng)一個(gè)卷積核。其卷積核可表示為M個(gè)Dk×Dk×1(Dk為卷積核的維度,M為通道數(shù));逐點(diǎn)卷積使用N個(gè)1×1的卷積將特征圖進(jìn)行連接,從而實(shí)現(xiàn)對(duì)通道數(shù)目的變化。其卷積核可表示為N個(gè)Dk×Dk×M(M為輸入通道數(shù),N為輸出通道數(shù))。
標(biāo)準(zhǔn)卷積與深度可分離卷積計(jì)算參數(shù)數(shù)量對(duì)比為

(1)
式中:Dk----卷積核尺寸;
M----輸入通道個(gè)數(shù);
N----輸出通道個(gè)數(shù);
Df----輸入圖片大小。

Mobilenetv2[15]在Mobilenetv1的基礎(chǔ)上向網(wǎng)絡(luò)中加入了倒殘差結(jié)構(gòu),在能夠?qū)⒕W(wǎng)絡(luò)變得更深的同時(shí),提高了網(wǎng)絡(luò)的運(yùn)行速度。之后的Mobilenetv3[16]網(wǎng)絡(luò)在Mobilenetv2的基礎(chǔ)上加入互補(bǔ)搜索技術(shù),同時(shí)將平均池化前的層移除,并用1×1卷積來計(jì)算特征圖,同時(shí)使用H-swish函數(shù)替代Relu6作為網(wǎng)絡(luò)的激活函數(shù),有效提高了網(wǎng)絡(luò)精度。
在早期的目標(biāo)檢測算法中,檢測器僅根據(jù)特征提取網(wǎng)絡(luò)輸出的特征圖進(jìn)行預(yù)測,通常使用網(wǎng)絡(luò)淺層輸出的特征圖檢測小目標(biāo),使用深層網(wǎng)絡(luò)輸出的特征圖度檢測大目標(biāo)。圖像經(jīng)過特征提取網(wǎng)絡(luò)后,在深層輸出特征圖上較大目標(biāo)的位置信息比較清晰,但語義信息缺失了很多;而淺層輸出的特征圖恰恰相反。這也就導(dǎo)致檢測器在對(duì)不同尺寸目標(biāo)進(jìn)行檢測的時(shí)候出現(xiàn)信息缺失或定位不準(zhǔn)確的現(xiàn)象,尤其是在淺層對(duì)小目標(biāo)的檢測過程中。
為了能夠充分利用特征圖上的信息特征金字塔結(jié)構(gòu)(FPN)[13],把特征提取網(wǎng)絡(luò)各層輸出的特征圖進(jìn)行融合,對(duì)淺層網(wǎng)絡(luò)輸出的特征圖添加深層網(wǎng)絡(luò)特征圖上的位置信息,使不同維度的特征圖都具有詳盡的語義信息,通過不同維度特征圖之間的語義信息互補(bǔ),使特征金字塔結(jié)構(gòu)增加了網(wǎng)絡(luò)的檢測精確度。
特征金字塔結(jié)構(gòu)雖然豐富了特征圖的語義信息,但卻增加了網(wǎng)絡(luò)的計(jì)算量,文中通過FPN思想對(duì)Mobilenet的特征輸出層進(jìn)行處理,對(duì)Mobilenet網(wǎng)絡(luò)輸出的6層特征圖抽取其中3層進(jìn)行自上而下的單級(jí)融合,在減少計(jì)算開銷的前提下為檢測器提供語義信息更加豐富的特征圖。
Mobilenet-ssd網(wǎng)絡(luò)把SSD算法的特征提取網(wǎng)絡(luò)VGG16替換為Mobilenet,在保留算法兼顧速度與精確度的同時(shí),極大地縮小了網(wǎng)絡(luò)模型,在此基礎(chǔ)上,文中通過對(duì)特征提取網(wǎng)絡(luò)輸出的特征圖利用特征金字塔結(jié)構(gòu)進(jìn)行融合,進(jìn)一步提高算法的檢測精確度。
SSD算法雖然兼顧速度與精確度,但其使用的VGG16特征提取網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)較為復(fù)雜,訓(xùn)練得到模型較大,并不適合在移動(dòng)設(shè)備或嵌入式設(shè)備上使用。VGG16-SSD算法網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。

圖1 VGG16-SSD算法網(wǎng)絡(luò)結(jié)構(gòu)
Mobilenet-ssd網(wǎng)絡(luò)使用Mobilenetv3特征提取網(wǎng)絡(luò)替代SSD算法中的VGG16網(wǎng)絡(luò),文中對(duì)算法網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行修改,增加網(wǎng)絡(luò)層數(shù),并對(duì)特征提取網(wǎng)絡(luò)輸出的不同分辨率的特征圖進(jìn)行融合,同時(shí)將SSD中所有常規(guī)卷積和最后一個(gè)盒類預(yù)測層替換為深度逐點(diǎn)可分離卷積,進(jìn)而減少模型的計(jì)算參量,使改進(jìn)后的算法在保留SSD算法兼顧速度與精確度優(yōu)點(diǎn)的同時(shí),極大地優(yōu)化了網(wǎng)絡(luò)結(jié)構(gòu),最終訓(xùn)練得到的模型可以在移動(dòng)設(shè)備或嵌入式終端上運(yùn)行。改進(jìn)后Mobilenet-ssd算法網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。

圖2 改進(jìn)算法的網(wǎng)絡(luò)結(jié)構(gòu)
在VGG16-SSD算法結(jié)構(gòu)中,為了獲得更大的視野,改變特征提取網(wǎng)絡(luò)VGG16的FC6和FC7層,用標(biāo)準(zhǔn)卷積替代。同時(shí),網(wǎng)絡(luò)分別從不同層輸出6種不同大小的特征圖送入SSD算法檢測器進(jìn)行邊框與分類預(yù)測。改進(jìn)的Mobilenetv3-ssd算法網(wǎng)路結(jié)構(gòu)共包含29層網(wǎng)絡(luò),其中前17層為Mobilenetv3的特征提取網(wǎng)絡(luò),去掉了原Mobilenetv3網(wǎng)絡(luò)的最后平均池化、全連接與Softmax層;網(wǎng)絡(luò)后面的12層是由第17層網(wǎng)絡(luò)通過卷積變換生成,其作用是為SSD檢測器提供不同尺度的特征圖。
VGG16網(wǎng)絡(luò)輸入大小為300×300×3的圖像,經(jīng)過特征提取后輸出6層分別為38×38、19×19、10×10、5×5、3×3與1×1大小特征圖。相比較于VGG16網(wǎng)絡(luò),Mobilenet的特征提取層并沒有很深入,網(wǎng)絡(luò)輸出40×40大小的特征圖最深層是在網(wǎng)絡(luò)的第7層,由于淺層網(wǎng)絡(luò)對(duì)圖像的特征提取不夠充分,輸出的特征圖不能提供足夠有用的特征信息使用,所以文中采用特征提取網(wǎng)絡(luò)Mobilenetv3在第14層輸出的10×10大小的特征圖作為網(wǎng)絡(luò)輸出的第一個(gè)特征圖。之后Mobilenet特征提取網(wǎng)絡(luò)在第17、20、23、26、29層分別輸出10×10、3×3、2×2與1×1大小5種特征圖。
Mobilenet輸出6層特征圖的分辨率大小只有VGG16輸出的特征圖分辨率的一半左右。其原因是與VGG16相比,Mobilenet的網(wǎng)絡(luò)結(jié)構(gòu)沒有VGG16深入,淺層輸出的特征圖提供的特征信息不夠充分,只能選取更深入的部分網(wǎng)絡(luò)提供特征圖,雖然可以使用較高分辨率的輸入圖像在深層得到維度較高的特征圖,但會(huì)極大地增加網(wǎng)絡(luò)的計(jì)算量。
在Mobilenetv3的基礎(chǔ)上增加類似特征金字塔的結(jié)構(gòu),再對(duì)網(wǎng)絡(luò)的第17、23、29層輸出的特征圖進(jìn)行融合。對(duì)第29層輸出的特征圖進(jìn)行1×1卷積操作后與原特征圖進(jìn)行融合;并對(duì)其進(jìn)行上采樣處理,以增大特征圖的分辨率,使其與第23層輸出的特征圖處于同一維度,使用PW卷積處理經(jīng)過上采樣的特征圖,進(jìn)而改變通道數(shù)目,使其與第23層輸出特征圖的通道數(shù)目相同,對(duì)第23層輸出的特征圖與第29層處理過后的特征圖進(jìn)行融合。同理,將第23層輸出的特征圖與第17層輸出的特征圖進(jìn)行融合,之后再把融合后的特征圖與第14、20、26層輸出的特征圖一起輸入到SSD檢測器中,對(duì)特征圖進(jìn)行分類與邊框預(yù)測,從而增加檢測器使用特征圖的語義信息,提高對(duì)目標(biāo)的檢測精確度,特別是對(duì)小目標(biāo)的檢測。
Mobilenet-ssd網(wǎng)絡(luò)中SSD檢測器對(duì)第14層輸出10×10大小的特征圖共有3個(gè)長寬比為1、2、1/2的預(yù)測框;在其它5層輸出的特征圖上檢測器共有6個(gè)長寬比為1、2、3、1/2、1/3、1(與第一個(gè)大小不同)的預(yù)測框。在訓(xùn)練過程中,每個(gè)目標(biāo)都由與其對(duì)應(yīng)的6個(gè)預(yù)測框進(jìn)行預(yù)測,最后通過計(jì)算預(yù)測框與真實(shí)框的交并比來選取預(yù)測框計(jì)算坐標(biāo)偏差。
在網(wǎng)絡(luò)中使用與swish相近的H-swish函數(shù),非線性函數(shù)在硬件設(shè)備上運(yùn)行時(shí)能夠避免數(shù)值精度的損失已經(jīng)通過Relu函數(shù)得到了證明,而且非線性函數(shù)運(yùn)行速度快,在保持精度的同時(shí)帶來了很多的方便。H-swith的表達(dá)式為

(2)
SSD算法的損失函數(shù)為位置誤差(locatization loss, loc)與置信度誤差(confidence loss, conf)的加權(quán)和,其公式為

(3)
式中:Lconf(x,c)----置信度誤差,主要包含正樣本誤差與負(fù)樣本誤差兩項(xiàng);
Lloc(x,l,g)----位置誤差;
α----權(quán)重系數(shù),通過交叉驗(yàn)證設(shè)置為1。
實(shí)驗(yàn)使用的訓(xùn)練數(shù)據(jù)為公開的PASCAL VOC數(shù)據(jù)集與補(bǔ)充的道路場景的數(shù)據(jù)集,補(bǔ)充的數(shù)據(jù)集為從網(wǎng)絡(luò)上獲取的交通場景圖片與視頻中有關(guān)交通場景的截圖;測試數(shù)據(jù)集使用PASCAL VOC2007test。在PASCAL VOC2007與2012共包含20個(gè)類,對(duì)道路場景下的bicycle、bus、car、motorbike、person主要5類目標(biāo)進(jìn)行檢測,通過對(duì)PASCAL VOC數(shù)據(jù)集進(jìn)行篩選,滿足條件的圖片為8 110張;通過制作2 000張道路場景下的數(shù)據(jù)集來彌補(bǔ)數(shù)據(jù)圖片的數(shù)量,對(duì)獲取的圖片進(jìn)行前期篩選,使圖片中包含的目標(biāo)類別盡量平衡,每個(gè)類出現(xiàn)的頻率接近一致,使訓(xùn)練效果更好。
文中實(shí)驗(yàn)平臺(tái)為Intel Core i7處理器與NVIDIA 2070 super顯卡,顯存為8 G;軟件平臺(tái)為Ubuntu18.04操作系統(tǒng)與CUDA10.0+cudnn7.6.5。
網(wǎng)絡(luò)訓(xùn)練在VOC數(shù)據(jù)集與補(bǔ)充的數(shù)據(jù)集上進(jìn)行,使用labellmg圖像標(biāo)注工具制作VOC格式的數(shù)據(jù)集。在對(duì)網(wǎng)絡(luò)訓(xùn)練過程中設(shè)置600個(gè)epoch(訓(xùn)練次數(shù)),lr(初始學(xué)習(xí)率)設(shè)置為0.01,權(quán)重衰減系數(shù)在第200個(gè)epoch之后進(jìn)行0.000 5的衰減,batch size(批量處理參數(shù))設(shè)置為16,使訓(xùn)練數(shù)據(jù)能夠快速的收斂。模型在訓(xùn)練過程中的損失如圖3所示。

圖3 損失函數(shù)圖
由圖3可知,訓(xùn)練模型在前10 000次迭代過程中損失下降比較明顯,在迭代45 000次后逐漸趨于平穩(wěn),最終損失值在2.3左右趨于平穩(wěn)。
在VOC2007test測試數(shù)據(jù)集下對(duì)文中算法進(jìn)行測試,檢測精確度結(jié)果如圖4所示。

圖4 算法檢測結(jié)果
文中算法在VOC2007test上的mAP(平均檢測精確度)達(dá)到78.8%,算法的檢測速度達(dá)到43.25 fps,在達(dá)到了實(shí)時(shí)性要求的前提下,網(wǎng)絡(luò)的檢測精確度有了較大提高。在對(duì)各個(gè)單類的測試中,bus與motorbike都取得了較好的檢測精確度。為了更好地對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比,在實(shí)驗(yàn)室環(huán)境下對(duì)同類的不同算法在VOC2007test數(shù)據(jù)集下進(jìn)行測試。其比較結(jié)果見表1。

表1 不同模型檢測精確度對(duì)比
由表1數(shù)據(jù)可知,文中提出改進(jìn)后的Mobilenetv3-ssd算法相比較于原有的Mobilenetv3-ssd算法提升了2.9個(gè)百分點(diǎn)。通過增加Mobilenet-ssd算法特征提取網(wǎng)絡(luò)輸出層之間的聯(lián)系,使檢測網(wǎng)絡(luò)輸出的特征圖具有更多的語義信息,進(jìn)而提升算法對(duì)目標(biāo)的檢測精確度,尤其是對(duì)一些小目標(biāo)的檢測精確度。模型對(duì)bicycle、bus、car、motorbike、person這5類目標(biāo)每一小類的AP見表2。

表2 VOC數(shù)據(jù)集下各類AP對(duì)比 %
由表2可得改進(jìn)后的算法在每一小類上都比原算法有所提高,特別是在對(duì)交通場景中行人與自行車的檢測上有了很大提高。檢測效果對(duì)比如圖5所示。

圖5 檢測效果對(duì)比
由圖5可知,改進(jìn)后的算法與原算法對(duì)比,在檢測精確度與檢測效果上都有所提高,對(duì)一些復(fù)雜場景下的目標(biāo)進(jìn)行檢測時(shí)也有較為良好的表現(xiàn)。
為解決輕量級(jí)目標(biāo)檢測模型在交通場景下檢測精確度不高的問題,提出一種基于Mobilenet-ssd網(wǎng)絡(luò)改進(jìn)算法,對(duì)Mobilenet特征提取網(wǎng)第17、23、29層輸出的特征圖進(jìn)行特征融合,為檢測器接通更多的語義信息,從而達(dá)到提高目標(biāo)檢測的精度。在VOC與擴(kuò)充的數(shù)據(jù)集上對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,并對(duì)得到的模型進(jìn)行測試。實(shí)驗(yàn)結(jié)果表明,改進(jìn)算法在對(duì)特定類進(jìn)行檢測時(shí),與同類型其他算法相比具有一定優(yōu)勢,在模型大小可接受的情況下,提高了目標(biāo)的檢測精確度。