謝 巖,劉廣聰
(廣東工業(yè)大學(xué) 計算機(jī)學(xué)院,廣東 廣州 510006)
近年來,隨著計算機(jī)視覺的發(fā)展和電腦算力的增強(qiáng),前沿的科學(xué)家開始關(guān)注和研究自動駕駛這門新興科技,通過自動駕駛系統(tǒng)的發(fā)展改善惡劣的交通環(huán)境,提高車輛行駛的安全性和可靠性,減少人為因素造成的交通事故和交通意外. 基于視覺的智能車輛導(dǎo)航的研究可以追溯到1870年代早期, 但由于當(dāng)時的硬件水平還比較低, 而圖像處理是需要大量計算, 研究人員將花費太多精力在硬件平臺的設(shè)計、實現(xiàn)和測試上. 然而,隨著計算機(jī)硬件的飛速發(fā)展,這個問題已經(jīng)得到了很好的解決. 在智能車輛導(dǎo)航的復(fù)雜和挑戰(zhàn)任務(wù)中,最重要的問題之一是視覺道路檢測.
自動駕駛?cè)纛惐瘸扇笋{駛,人是通過眼睛來獲取周圍環(huán)境的信息,然后通過大腦處理后做出相應(yīng)的轉(zhuǎn)向和加減速. 那么自動駕駛就是通過利用車輛上的各種傳感器,比如毫米波雷達(dá)、攝像頭、激光雷達(dá)等來獲取環(huán)境信息,然后通過中心處理器來判斷下一步應(yīng)該執(zhí)行的操作. 其中,攝像頭在環(huán)境感知中起著非常大的作用,提供了豐富的信息,有著獨一無二的優(yōu)勢. 在2012年,Hinton等[1]將卷積神經(jīng)網(wǎng)絡(luò)AlexNet很好地應(yīng)用在Image Net數(shù)據(jù)集上,從此,神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)、圖像識別開始進(jìn)入了高速發(fā)展的階段.
Wu等[2]設(shè)計了一種新的淺層殘差神經(jīng)網(wǎng)絡(luò),來執(zhí)行諸如分類、檢測或語義分割等任務(wù). 在這種方法中,每個任務(wù)都要學(xué)習(xí)一組不同的參數(shù). 因此,聯(lián)合推理在這種模型中是不可能的,難以滿足實時性的要求.
Hariharan等[3]設(shè)計了一個同時檢測和分割的神經(jīng)網(wǎng)絡(luò)模型(SDS),與傳統(tǒng)的語義分割不同,這個網(wǎng)絡(luò)模型需要單獨的對象實例. 然后,使用分類特定的自上而下的圖形基礎(chǔ)預(yù)測來完善自下而上的區(qū)域建議. 然而該系統(tǒng)依賴目標(biāo)檢測器,并且沒有充分利用在分割過程中獲得的豐富圖像特性.
郭繼舜等[4]提出的面向自動駕駛的語義分割和目標(biāo)檢測技術(shù),提出了一種混合增強(qiáng)網(wǎng)絡(luò)Mix Net,通過共用前端網(wǎng)絡(luò)提取底層語義信息,有效減少了總模型體積以及運行時的算力要求. 但其模型性能耗時達(dá)到208 ms,慢于本文模型,并且無法達(dá)到實時性要求.
在這樣的背景下,模型以提高算法的實時性為首要目的. 首先,對圖像進(jìn)行預(yù)處理,然后通過編碼器對圖像進(jìn)行特征提取,所提取的特征會用來同時處理三類任務(wù),即分裂、目標(biāo)檢測和語義分割. 通過共享編碼區(qū)的方式來提升算法的實時性. 同時在語義分割模塊中加入帶孔空間金字塔池化層,從而提升其性能.
本文貢獻(xiàn)點:(1) 提出通過共享編碼區(qū)提取圖像特征,從而實現(xiàn)語義分割、目標(biāo)檢測和分類任務(wù),降低模型檢測實時性;(2) 在語義分割任務(wù)模塊中,加入了帶孔空間金字塔池化層,在不太影響實時性要求的情況下,提高語義分割任務(wù)的精度.
本編碼器結(jié)構(gòu)使用了一種高效率的前饋結(jié)構(gòu),用于目標(biāo)檢測、圖像分類和語義分割的聯(lián)合預(yù)處理.這3個任務(wù)共享一個編碼器,并且有3個分支,分別對應(yīng)著3個不同的任務(wù),每個分支都為給定的任務(wù)實現(xiàn)一個對應(yīng)的解碼器. 此結(jié)構(gòu)可以實現(xiàn)端對端神經(jīng)網(wǎng)絡(luò)訓(xùn)練[5].
編碼器的任務(wù)是對圖像進(jìn)行預(yù)處理,提取包含所有圖像信息的豐富抽樣特征,以實現(xiàn)精準(zhǔn)的檢測、語義分割和圖像分類任務(wù). 編碼器由神經(jīng)網(wǎng)絡(luò)的卷積層和池化層組成. 本實驗中使用了VGG16[6]和ResNet網(wǎng)絡(luò)[7]結(jié)構(gòu)作為預(yù)訓(xùn)練權(quán)重. 其中VGG16編碼器使用了它全部的卷積層和池化層,但是沒有使用它的全連接層. 還有一種版本是使用了全部的VGG網(wǎng)絡(luò)層,只拋棄了最后的一個softmax層,對于這種方法,使用了1x1卷積來替換掉原來的全連接層,這種方法使得編碼器可以處理任意大小的輸入圖像. 而對于ResNet網(wǎng)絡(luò),實驗中實現(xiàn)了ResNet101版本,使用了所有層除了最后的softmax層. 在實驗階段將對比兩種網(wǎng)絡(luò)的精確度和實時性.
在AlexNet[1]發(fā)展之后,目前大多數(shù)的圖像分類方法都利用了深度學(xué)習(xí). 殘差網(wǎng)絡(luò)[8]可解決訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)出現(xiàn)的梯度消失和梯度爆炸問題,是目前最好的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu). 在道路環(huán)境內(nèi)容的分類中,深層神經(jīng)網(wǎng)絡(luò)也得到了廣泛的應(yīng)用[9]. 在本文中,使用分類來完成語義分割和車輛檢測,基于編解碼器模型的車道識別與車輛檢測算法如圖1所示.
圖1 基于編解碼器模型的車道識別與車輛檢測算法圖Fig.1 Algorithm diagram of lane recognition and vehicle detection based on code-model
在典型的圖像分類任務(wù)中,輸入以一個對象為特征,通常集中在圖像的顯著位置. 對于這種任務(wù),使用非常小的輸入大小是合理的. 另一方面,街景包含大量的小尺度物體. 為了利用這些物體提供的特征,使用高分辨率輸入至關(guān)重要. 若輸入圖像的大小為1248×348, 有效地應(yīng)用了特征生成器對于每個圖像的空間位置. 最后生成39×12的像素特征,每個特征對應(yīng)的空間區(qū)域的大小為32×32像素. 為了利用這個特性, 首先應(yīng)用1×1卷積與30個濾波器. 這一層充當(dāng)瓶頸層,其主要目的是降低維數(shù).
由于深度學(xué)習(xí)在分類任務(wù)中取得了極大的成功,卷積神經(jīng)網(wǎng)絡(luò)的分類器也可以很好地應(yīng)用在語義分割任務(wù)上. 早期的方法是利用卷積神經(jīng)網(wǎng)絡(luò)去實現(xiàn)滑動窗口搜索[10-11]. FCN(Fully Convolutional Networks)[12]提出了一種基于卷積網(wǎng)絡(luò)的端對端語義分割模型. 轉(zhuǎn)置卷積[13]被用來實現(xiàn)進(jìn)行上采樣以提高低分辨率的特征樣本. 有許多基于FCN的語義分割模型被提出. 這里將使用基于VGG16和Resnet101網(wǎng)絡(luò)的語義分割模型,并在此基礎(chǔ)上加入帶孔卷積,在不降低分辨率的情況下增加接受域的范圍.
2.2.1 全卷積網(wǎng)絡(luò)
一個典型的卷積神經(jīng)網(wǎng)絡(luò)可能由一系列卷積層組成,隨后是全連接層,最終運行softmax激活函數(shù),對一個與分類任務(wù)相似的任務(wù)來說這是一個很好的體系結(jié)構(gòu). 但是如果提出目標(biāo)在這張照片中的位置是在哪里時,上述的卷積神經(jīng)網(wǎng)絡(luò)就很難解決這個問題,因為全連接層是無法保留空間信息的,但隨著FCN網(wǎng)絡(luò)提出,如果用1×1卷積層來替換全連接層就可以解決這個問題,因為這樣可以保留圖像中的空間信息. 另外,由于卷積運算、全卷積網(wǎng)絡(luò)可以處理任何大小的圖像,在具有全連接層的經(jīng)典卷積網(wǎng)絡(luò)中,輸入的大小受到全連接層的限制,通過相同的卷積層序列傳播大小不同的圖像,使最終的輸入扁平化,對于不同的圖像大小將有不同的輸出.
全卷積網(wǎng)絡(luò)實現(xiàn)了計算機(jī)視覺應(yīng)用領(lǐng)域的最新成果,如語義級別的圖像分割. 全卷積網(wǎng)絡(luò)利用3種特殊技術(shù):(1) 以1×1的卷積層替代全連接層;(2) 利用轉(zhuǎn)置卷積層進(jìn)行上采樣;(3) 跳躍連接,跳躍連接使網(wǎng)絡(luò)可以使用來自多分辨率尺度的信息,因此網(wǎng)絡(luò)能夠做出更精確的分割決策.
全卷積網(wǎng)絡(luò)中的1×1卷積層是通過以逐層卷積層替換一個全連接層來實現(xiàn)的,這將產(chǎn)生輸出值,張量將繼續(xù)維持四維的狀態(tài)而不是二維的,因此空間信息將被保留. 可以使用轉(zhuǎn)置卷積來創(chuàng)建全卷積網(wǎng)絡(luò)的解碼器,轉(zhuǎn)置卷積本質(zhì)上是一個反向卷積,其中前向和反向傳播被調(diào)換,因此稱它為轉(zhuǎn)置卷積,由于所做的只是調(diào)換前向傳播和反向傳播的順序,其數(shù)學(xué)計算實際上和之前做的完全一樣,因此可微性質(zhì)保留下來,而訓(xùn)練與之前的神經(jīng)網(wǎng)絡(luò)完全相同. 如果將編碼器的輸出解碼回原始圖像尺寸,一些信息卻已丟失,跳躍連接是輕松保留信息的一種方式,跳躍連接工作的方式是使一層的輸出與一個非相鄰層連接,將來自編碼器的池化層的輸出與當(dāng)前層的輸出相結(jié)合,最終的結(jié)果彎曲傳遞到下一層,這些跳躍連接使網(wǎng)絡(luò)可以使用來自多分辨率的信息,因此網(wǎng)絡(luò)能夠做出精確的分割決策,見圖2所示.
圖2 跳躍連接Fig.2 Skip Architecture
2.2.2 帶孔卷積
在傳統(tǒng)的語義分割中,圖像輸入到神經(jīng)網(wǎng)絡(luò)中經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)的特征提取,再經(jīng)過池化層來降低圖像尺度的同時增大感受野. 但由于語義分割任務(wù)是對圖像逐像素級的分類,所以輸出大小要和輸入大小相同,所以還需要通過上采樣來將經(jīng)過特征提取縮小了的圖像恢復(fù)原大小. 全卷積網(wǎng)絡(luò)就是應(yīng)用了轉(zhuǎn)置卷積來完成的,因此傳統(tǒng)的語義分割大多數(shù)是先通過池化層縮小圖像以增大感受野,再通過上采樣恢復(fù)圖像大小. 但圖像在經(jīng)過縮小到放大的過程中難免有圖像細(xì)節(jié)信息的丟失,尤其是池化層操作. 所以有了帶孔卷積的發(fā)明.
如圖3所示,帶孔卷積中有個重要的參數(shù)叫做rate,這個參數(shù)表示帶孔的數(shù)量. 如圖3(a)所示,其rate=1. 其含義是原圖不丟失任何信息進(jìn)行卷積,就是傳統(tǒng)的的卷積核進(jìn)行卷積操作. 如圖3(b)~(c)所示,可以看到其紅點代表原來的卷積核,淺藍(lán)色的網(wǎng)格用0來填充,從而進(jìn)行卷積. 采用帶孔卷積的好處是可以在不縮小圖片尺寸的情況下來提取圖像特征,變相地增加了圖像的感受野. 帶孔卷積主要是解決圖像分辨率和感受野之間的矛盾.
但其缺點是無法很好地對小物體進(jìn)行分割,因為在其卷積核中填充0還是會丟失部分圖像特征信息. 因此提出多尺度圖像特征提取.
圖3 帶孔卷積Fig.3 Atrous Convolution
2.2.3 帶孔空間金字塔池化層
在目標(biāo)檢測任務(wù)中,一般卷積層后面接著就是全連接層,而全連接層都是有固定特征值的,所以在檢測任務(wù)的輸入端通常是固定大小的. 但是檢測的物體尺寸通常是變化的,傳統(tǒng)的手段是通過改變輸入圖像的尺寸,但是這樣會改變檢測物體的橫縱比例,使檢測精度降低. 所以有人提出空間金字塔池化層[14]. 其作用就是將任意尺寸的輸入圖都能夠轉(zhuǎn)化為固定大小的輸出特征,一般用在最后一層池化層.空間金字塔池化層如圖4所示.
圖4 空間金字塔池化層Fig.4 Spatial Pyramid Pooling
這里提出的帶孔空間金字塔池化層是在上述的基礎(chǔ)上加入了帶孔卷積的思想,在對不同尺度上的圖像特征進(jìn)行采樣時可以有效提高精度. 通過不同rate的帶孔卷積可以有效地提取到多尺度圖像空間信息. 如圖5所示,其帶孔空間金字塔層是包含了一個1x1的卷積核和3個3×3的rate分別為6、12、18的帶孔卷積核,通過這樣的方式可以更好地提取出并行多尺度圖像特征.
圖5 帶孔空間金字塔池化層Fig.5 Atrous Spatial Pyramid Pooling
傳統(tǒng)的利用深度學(xué)習(xí)進(jìn)行目標(biāo)檢測的方法分為兩步,首先生成區(qū)域建議[15],然后使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行評分[16]. 在對區(qū)域建議生成的圖片使用卷積神經(jīng)網(wǎng)絡(luò),可以提升準(zhǔn)確率[17],最近端對端神經(jīng)網(wǎng)絡(luò)也被提出用來進(jìn)行物體檢測[18-19]. 端對端神經(jīng)網(wǎng)絡(luò)的優(yōu)勢是在于它的訓(xùn)練時間和預(yù)測時間都要短,所以端對端神經(jīng)網(wǎng)絡(luò)更加適合用在那些實時性要求高的地方. 實驗中將采用端對端神經(jīng)網(wǎng)絡(luò)來實現(xiàn)車輛檢測功能.
解碼器的第一步是生成邊界框的初略估計. 然后通過1×1卷積層和400個過濾器來產(chǎn)生39×12×400的張量. 這個張量在繼續(xù)和1×1的卷積層進(jìn)行卷積操作,最后生成39×12×6的輸出,這就是最后的預(yù)測結(jié)果. 其中前兩個通道構(gòu)成圖像的檢測結(jié)果,它們的值表示的是包圍框的置信度,剩余的4個通道是表示檢測物體的包圍框的坐標(biāo).
為驗證方法的有效性,對車道道路和車輛目標(biāo)進(jìn)行檢測. 實驗中的訓(xùn)練和測試數(shù)據(jù)利用KITTI數(shù)據(jù)集. 實驗平臺為銳龍1700處理器,內(nèi)存16 G,顯卡為NVIDIA GTX1080TI,軟件為cuda7.0,Tensorflow1.4.
其中KITTI數(shù)據(jù)集包括了289張訓(xùn)練圖案和290張測試圖像. 分辨率為1248×384,它包含了3種不同類別的道路場景. 訓(xùn)練圖像如圖6所示.
在測試階段,使用KITTI視覺基準(zhǔn)[20]進(jìn)行測試,對于語義分割模塊使用KITTI道路基準(zhǔn)[21]來評測其性能, 其中使用到MaxF1和平均精度進(jìn)行評分. 對于分類我們使用KITTI目標(biāo)檢測基準(zhǔn)[22]去評測分類解碼器,采用平均精度和召回率進(jìn)行評分.
關(guān)于參數(shù)設(shè)定,使用了Adam優(yōu)化函數(shù)[23]和學(xué)習(xí)率設(shè)置為1×10-5. 權(quán)值衰弱為1×10-4,Dropout為0.5,用于目標(biāo)檢測和分類中.
圖6 訓(xùn)練集原始圖像和標(biāo)注圖像Fig.6 Training original image and label image
語義分割結(jié)果如表1所示,使用了3種不同的預(yù)訓(xùn)練權(quán)重來比較. 可以看出Resnet網(wǎng)絡(luò)的精度最好,但是由于其網(wǎng)絡(luò)結(jié)構(gòu)較深,其時間和VGG16網(wǎng)絡(luò)相比并不占優(yōu)勢,VGG16網(wǎng)絡(luò)的精度時間比最佳. 語義分割顯示如圖7~8,綠色部分預(yù)測為車道,閾值超過0.5的標(biāo)記為綠色.
圖7 城市標(biāo)記車道結(jié)果Fig.7 Result map of urban lane marking
圖8 城市非標(biāo)準(zhǔn)車道結(jié)果圖Fig.8 Results of urban non-standard lanes
表1 語義分割檢測結(jié)果Tab.1 Semantic segmentation detection results
分類檢測結(jié)果如表2所示,這里比較了VGG16和Resnet101這2種方法,可以看出在平均精度上2種方法相差不大,在速度上VGG16網(wǎng)絡(luò)因其較淺的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)有一定的優(yōu)勢.
表2 分類檢測結(jié)果Tab.2 Classification test results
表3 聯(lián)合檢測速度結(jié)果Tab.3 Results of joint detection speed
本文提出一種基于編解碼器模型的車道識別和車輛檢測的聯(lián)合算法,能夠通過相同的編碼器提取公共圖像特征來完成3種不同任務(wù),從而提高運行速度. 同時可以進(jìn)行端對端的任務(wù)訓(xùn)練,在KITTI數(shù)據(jù)集上運行良好. 從最終檢測結(jié)果來看,VGG16作為預(yù)訓(xùn)練網(wǎng)絡(luò)的速度精度均優(yōu)于Resnet101網(wǎng)絡(luò). 下一步的研究目標(biāo)分為兩個方面,一是通過采用不同的空間金字塔池化層來進(jìn)一步提高語義分割的精度,二是繼續(xù)提高任務(wù)的實時性.