胡云卿,潘文波,侯志超,金偉正,于 歡
(1.中車株洲電力機(jī)車研究所有限公司,湖南 株洲 412001; 2.武漢大學(xué) 電子信息學(xué)院,湖北 武漢 430079)
圖像語義分割是自動(dòng)駕駛中一個(gè)基本的街景理解任務(wù),高分辨率圖像中的每個(gè)像素都被劃分為一組語義標(biāo)簽。與其他場景不同,自動(dòng)駕駛場景中的對(duì)象呈現(xiàn)出非常大的尺度變化,這對(duì)高層次的特征表示提出了很大的挑戰(zhàn)。
隨著大數(shù)據(jù)時(shí)代的興起以及深度學(xué)習(xí)技術(shù)的飛速發(fā)展,圖像語義分割的主流技術(shù)已經(jīng)變?yōu)橐陨疃葘W(xué)習(xí)[1]為基礎(chǔ),但目前的各種算法在自動(dòng)駕駛實(shí)際應(yīng)用中仍存在泛化能力、精確程度及運(yùn)行時(shí)間等方面的問題,無法滿足自動(dòng)駕駛的要求。
本文提出一種面向城市自動(dòng)駕駛、輕量級(jí)、可實(shí)時(shí)運(yùn)行的語義分割模型,其可用于自動(dòng)駕駛高精度、實(shí)時(shí)的圖像語義分割,能提供詳細(xì)的車輛周圍可行使區(qū)域、障礙物目標(biāo)及車道等信息,為單純視覺感知的自動(dòng)駕駛提供技術(shù)支持與保障。
自從AlexNet[2]在ImageNet[3]比賽中以絕對(duì)優(yōu)勢領(lǐng)先普通算法奪冠之后,以卷積神經(jīng)網(wǎng)絡(luò)為基礎(chǔ)的深度學(xué)習(xí)技術(shù)成為圖像語義分割的主流方法。
文獻(xiàn)[4]首次使用全卷積神經(jīng)網(wǎng)絡(luò)(FCN)進(jìn)行圖像語義分割,該網(wǎng)絡(luò)架構(gòu)成為之后多種改進(jìn)型圖像分割網(wǎng)絡(luò)的基礎(chǔ)架構(gòu)。首先,F(xiàn)CN 使得整個(gè)網(wǎng)絡(luò)全部由卷積層組成,通過雙線性插值的方法對(duì)特征圖進(jìn)行上采樣(Upsampling),將其恢復(fù)到輸入分辨率大小,再逐像素通過分類器實(shí)現(xiàn)語義分割。此外,為了獲得更精確的分割效果,F(xiàn)CN將淺層特征與深層特征進(jìn)行深層次融合,使得網(wǎng)絡(luò)最后分類的特征層包含更多的語義與形狀位置信息。FCN 是第一個(gè)將深度學(xué)習(xí)與卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到圖像語義分割領(lǐng)域的端到端算法。
文獻(xiàn)[5]提出采用編碼-解碼結(jié)構(gòu)的U-Net 網(wǎng)絡(luò),其中編碼網(wǎng)絡(luò)對(duì)圖像進(jìn)行特征提取,得到圖片的高層語義特征圖;而解碼網(wǎng)絡(luò)則采用轉(zhuǎn)置卷積來逐步恢復(fù)圖像信息,最終可以輸出與輸入同分辨率的語義分割效果圖。U-Net 還采用了跳躍連接的方式,即將編碼網(wǎng)絡(luò)中間層的特征圖與解碼網(wǎng)絡(luò)中同等大小的特征圖進(jìn)行融合,以保證解碼網(wǎng)絡(luò)擁有更多的信息來恢復(fù)圖像。U-Net 被提出后,在多種場景的圖像分割中取得了良好的應(yīng)用成果;針對(duì)U-Net 的改進(jìn)算法也層出不窮,如U-Net++[6]等。U-Net 在醫(yī)療圖像分割中表現(xiàn)良好,但對(duì)于高分辨率自動(dòng)駕駛場景的圖像分割,效果卻不盡如人意;同時(shí),U-Net 難以做到實(shí)時(shí)運(yùn)行。
谷歌公司提出了圖像語義分割網(wǎng)絡(luò)Deeplab[7-9]系列。在Deeplab v1 中,將深度卷積神經(jīng)網(wǎng)絡(luò)與概率圖模型(CRF)相結(jié)合,由于CRF 可以被簡單地理解為在決定一個(gè)位置像素值時(shí)會(huì)考慮周圍位置的像素值,因此通過全連接的CRF 可獲得圖像的全局信息,從而提升了分割的精度。Deeplab v2 采用空洞卷積,擴(kuò)大了卷積核的感受野。之后的Deeplab v3 與Deeplab v3+拋棄了概率圖模型而采用ASPP 模塊,實(shí)現(xiàn)了完全的深度學(xué)習(xí)的端到端訓(xùn)練與測試。Deeplab v3+針對(duì)ASPP 模塊進(jìn)行了許多算法的創(chuàng)新,如采用PSPNet[10]。PSPNet 將經(jīng)過特征提取網(wǎng)絡(luò)提取的特征圖利用不同大小的池化核進(jìn)行池化,將不同池化結(jié)果特征圖與原特征圖進(jìn)行融合,使得最后的特征圖中具有大量不同尺度的全局信息。這種通過融合多尺度全局池化特征的方法可以有效提升圖像語義分割的精度。Deeplab v3+是目前公開的圖像語義分割算法中精確度最高的算法,但其最大的缺點(diǎn)是消耗時(shí)間長、難以實(shí)時(shí)運(yùn)行,所以盡管精度最高,但難以投入到自動(dòng)駕駛應(yīng)用中。
文獻(xiàn)[11]中提出的ICNet 網(wǎng)絡(luò)雖然很好地解決了高分辨率圖像實(shí)時(shí)語義分割問題,但沒有解決城市自動(dòng)駕駛中各種類樣本嚴(yán)重不均衡的問題,因此無法滿足自動(dòng)駕駛的要求。
針對(duì)以上各算法的不足,本文提出一種深度可分離卷積、多分支、金字塔池化尺度融合結(jié)構(gòu)(DSCMB-PSPNet),其在保證模型具有良好表征能力的同時(shí)可以做到實(shí)時(shí)運(yùn)行。文中提出抑制性交叉熵?fù)p失函數(shù)(inhibitory cross entropy loss,ICE Loss)以降低樣本不平衡的影響,消除城市自動(dòng)駕駛中各種類樣本嚴(yán)重不均衡的問題;同時(shí)加入了多級(jí)損失函數(shù)計(jì)算方式,提升了訓(xùn)練的效率,使得模型更容易收斂。
自動(dòng)駕駛所需要的圖像語義分割與傳統(tǒng)學(xué)術(shù)界的語義分割研究有很大不同。首先,自動(dòng)駕駛中場景更加復(fù)雜。由于交通環(huán)境的特殊性,所以任何數(shù)據(jù)集都不可能包括所有的交通場景,這就需要自動(dòng)駕駛中的圖像語義分割算法具有良好的泛化性,不僅能在常見場景中表現(xiàn)良好,而且在陌生場景中特別是環(huán)境比較惡劣的情況下也能保持較高的精度,從而保障自動(dòng)駕駛的安全性需求。其次,自動(dòng)駕駛中對(duì)于類別的側(cè)重點(diǎn)不同。目前基于CNN 的圖像語義分割算法都是在公開數(shù)據(jù)集上評(píng)測性能,每個(gè)數(shù)據(jù)集都有其相應(yīng)的類別;然而在自動(dòng)駕駛中只關(guān)注少數(shù)的類別,如路面、車道線、車輛行人等,因此自動(dòng)駕駛中將樹木、天空這類目標(biāo)看作背景,致使背景中包含的像素明顯增多,這會(huì)導(dǎo)致嚴(yán)重的數(shù)據(jù)種類不均衡問題;同樣,在已劃分出的類別之間也存在嚴(yán)重的不均衡問題,如一般情況下的交通場景圖片中行人的像素?cái)?shù)量顯然大幅少于路面行人的像素?cái)?shù)量,這些不均衡問題將會(huì)導(dǎo)致模型本身訓(xùn)練難度的增加,進(jìn)而影響精度。再者,模型的速度難以被保證。自動(dòng)駕駛由于安全性的需要,所以所有算法的實(shí)時(shí)性永遠(yuǎn)是第一要求,而目前許多圖像語義分割算法在實(shí)驗(yàn)室內(nèi)裝有大型計(jì)算顯卡的PC 機(jī)上尚且難以實(shí)時(shí)運(yùn)行,更何況在自動(dòng)駕駛的嵌入式平臺(tái)之上。因此,圖像語義分割算法模型的高效性與輕量性是目前圖像語義分割算法在自動(dòng)駕駛中應(yīng)用所面臨的最大困難。
目前絕大多數(shù)圖像語義分割算法采用樹形結(jié)構(gòu)網(wǎng)絡(luò),即在網(wǎng)絡(luò)初始時(shí)只有一個(gè)分支,在幾層提取之后再采用特征圖融合的方式提取中間過程中的特征層,將其與最后的特征層相融合,其好處是前面的特征提取網(wǎng)絡(luò)可以使用性能優(yōu)異的分類網(wǎng)絡(luò),且預(yù)訓(xùn)練模型可以被初始化,能保證模型快速收斂。但這些模型存在兩個(gè)突出問題,會(huì)導(dǎo)致網(wǎng)絡(luò)運(yùn)行時(shí)間的增加:一是分類網(wǎng)絡(luò)為了具有良好的提取特征能力,其卷積層的通道數(shù)一般較多;二是圖像語義分割為了達(dá)到高精度,需要大分辨率的輸入,而這會(huì)造成經(jīng)過基礎(chǔ)分類網(wǎng)絡(luò)計(jì)算量的顯著增加。
本文所提出的DSC-MB-PSPNet 模型如圖1 所示,其采用多分支網(wǎng)絡(luò)結(jié)構(gòu)來進(jìn)行不同層次提取,在降低計(jì)算量、保證分類使用特征圖的同時(shí),還具有豐富的語義信息與位置信息。網(wǎng)絡(luò)可被分為3 路分支,即下、中、上分支;3 路分支的輸入為同一張圖像,只是各自的分辨率不同而已。
圖1 DSC-MB-PSPNet 網(wǎng)絡(luò)結(jié)構(gòu)Fig. 1 Structure of DSC-MB-PSPNet
下分支輸入原始分辨率圖像,圖像經(jīng)過3 個(gè)下采樣層(Downsampling)后,特征圖變?yōu)?/8 原始圖像分辨率的大小??梢园l(fā)現(xiàn),最下路的分支作用是用很少的卷積層得到圖像的低維特征。下路分支輸入圖像的分辨率高,且只經(jīng)過了少數(shù)幾個(gè)卷積層的計(jì)算,因此計(jì)算量并不會(huì)顯著增加。中分支輸入1/2 原始分辨率的圖像,圖像經(jīng)過多個(gè)卷積層模塊后,特征圖變?yōu)?/16 原始分辨率的圖像。中分支的作用主要是得到圖像中間層的特征,為最終的特征圖提供更多可供選擇使用的特征信息。上分支輸入1/4 原始分辨率的圖像,經(jīng)過多個(gè)卷積層模塊與空洞卷積處理后,特征圖變?yōu)?/32原始分辨率的圖像。上分支主要用于提取圖像的高維語義特征。雖然上路分支經(jīng)歷了大量的卷積提特征操作,但由于輸入分辨率較低,總的計(jì)算量也沒有明顯增多。
3 路分支之間最終的特征圖需要進(jìn)行逐級(jí)融合[12],即上層分支的特征圖先與中間層的特征圖相融合,之后再與下層的特征圖進(jìn)行融合。融合中采用全新設(shè)計(jì)的Add模塊。為了使模型輕量化,網(wǎng)絡(luò)中采用可分離卷積來代替普通的卷積;在上層分支中,為了提取高維特征時(shí)具有良好的感受野,在該分支網(wǎng)絡(luò)的后半部分采用了空洞卷積。
2.1.1 Downsampling 模塊及PSPNet 模塊
Downsampling 結(jié)構(gòu)(圖2)將輸入分為兩路,一路分支經(jīng)過步長為2 的卷積層進(jìn)行下采樣,另一路經(jīng)過池化(pool)來下采樣,兩種輸出結(jié)果經(jīng)拼接后再經(jīng)過1×1 卷積實(shí)現(xiàn)融合。這樣設(shè)計(jì)的好處是可以讓網(wǎng)絡(luò)自身去學(xué)習(xí)并判斷兩種方式中哪種效果更好,最終網(wǎng)絡(luò)本身在更新過程中使兩者之間達(dá)到一個(gè)平衡。為使模型更加輕量級(jí)且運(yùn)行速度更快,圖2 中的卷積(Conv)以及網(wǎng)絡(luò)中其他3×3 Conv 均使用深度可分離卷積,其具體結(jié)構(gòu)如圖3 所示,其中Depthwise Conv[13]為深度可分離卷積中的通道內(nèi)卷積,BN[14]與AF 分別代表批規(guī)范化層與激活函數(shù)層。
圖2 Downsampling 模塊Fig. 2 Downsampling module
圖3 Conv 的具體結(jié)構(gòu)Fig. 3 Specific structure of Conv
在經(jīng)典的圖像語義分割算法PSPNet 中,采用金字塔池化尺度融合的結(jié)構(gòu)來解決全局信息缺失的問題,很好地處理了圖像語義分割中場景之間的上下文關(guān)系和全局信息。本文采用這種結(jié)構(gòu)并在3 路分支上分別采用金字塔池化尺度融合以得到每一路分支的最后特征圖。金字塔池化尺度融合結(jié)構(gòu)如圖4 所示,在得到某一特征圖后,首先對(duì)特征圖進(jìn)行不同尺度的池化操作(圖中分別采用了1×1, 2×2, 3×3, 6×6 的池化核大小來進(jìn)行池化),接著通過1×1 卷積層將通道數(shù)降為原來的1/4;之后將所有池化之后的特征圖上采樣到輸入前的尺寸并與輸入的特征圖進(jìn)行連接,就可以得到通道數(shù)為原來2倍的特征圖;最后利用1×1 Conv 進(jìn)行多尺度信息的融合與降維。金字塔池化尺度融合的結(jié)構(gòu)在多種尺度上進(jìn)行了池化,提升了最后特征圖的各尺度特征信息,使得網(wǎng)絡(luò)更容易捕捉到圖像中的全局信息。
圖4 金字塔池化尺度融合結(jié)構(gòu)Fig. 4 Structure of PSPNet
金字塔池化尺度融合方式實(shí)現(xiàn)了圖像不同尺度的感受野,主要有兩層作用:一是將圖像局部區(qū)域的上下文信息與全局的上下文信息相結(jié)合,使得特征信息更加豐富;二是將整體的輪廓信息與圖像細(xì)節(jié)紋理信息相結(jié)合,提升了分割物體邊緣的效果。金字塔池化尺度融合的結(jié)構(gòu)在一定程度上提升了圖像語義分割的多尺度精度。
2.1.2 Add 模塊及殘差結(jié)構(gòu)
在網(wǎng)絡(luò)輸出端僅需要一個(gè)維度的特征圖來進(jìn)行分類輸入,在3 個(gè)分支之間設(shè)定相應(yīng)的Add 模塊(圖5)以對(duì)不同維度的特征圖進(jìn)行融合。Add 模塊的輸入包括一個(gè)高維特征圖Fh與一個(gè)低維特征圖Fl。另外,Add 模塊中也包括了損失函數(shù)的部分(圖5 中的Label 輸入)。
圖5 Add 模塊結(jié)構(gòu)Fig. 5 Structure of add module
對(duì)于高維特征圖Fh,首先需要將其上采樣到與低維特征圖同等大小,之后再利用空洞卷積進(jìn)一步擴(kuò)大感受野的范圍;對(duì)于低維特征圖Fl,經(jīng)過1×1 Conv 處理降維之后,與處理后的高維特征圖進(jìn)行SUM 操作,輸出結(jié)果Fout即為融合后的特征圖。如圖1 所示3 分支結(jié)構(gòu)中上支路和中支路之間的Add 模塊,上支路輸出特征圖作為Fh的輸入,中間支路輸出特征圖作為Fl的輸入,經(jīng)過該Add 模塊融合之后的特征圖再與下支路輸出特征圖一起輸入到另一個(gè)Add 模塊中,最終的輸出結(jié)果即為所有分支特征融合之后的特征圖。
Add 模塊的主要作用是融合不同維度、不同分辨率的特征圖,其中最主要的操作為SUM,其本質(zhì)上是對(duì)兩個(gè)矩陣之間相同位置的元素進(jìn)行相加,得到新的矩陣。一般來說,特征圖之間的融合操作還有Concat 和MUL等,但經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn)SUM 的效果最好,因此本文選用SUM 操作作為Add 模塊中的融合手段。
2.1.3 殘差結(jié)構(gòu)及激活函數(shù)
在多分支結(jié)構(gòu)中的上支路中,為了使網(wǎng)絡(luò)更深且提取的特征更加精細(xì),使用了殘差結(jié)構(gòu)。圖6 示出兩種不同的殘差結(jié)構(gòu),二者左邊結(jié)構(gòu)相同,均參考了Mobilenet v2 的設(shè)計(jì),第一和第三個(gè)卷積為1×1 Conv,中間為3×3 Conv。第一個(gè)卷積被稱為降維卷積,其目的是減少輸出特征圖的通道數(shù)量,以有效減少后續(xù)3×3 Conv 的計(jì)算量,但降維卷積對(duì)特征提取能力的影響有限;第二個(gè)卷積為可分離卷積;第三個(gè)卷積為升維卷積,其目的是增加輸出特征圖的通道數(shù)量,以保證特征的豐富性。特別需要指出的是,第三個(gè)卷積之后沒有激活函數(shù),因?yàn)閷?duì)于高維特征,激活函數(shù)會(huì)破壞特征信息,因此在卷積之后高維特征被直接線性輸出到下一層。圖6(a)中,右分支中存在一個(gè)卷積層,其將卷積之后的輸出與左分支相融合,得到輸出;而圖6(b)中,直接將左分支的輸出與輸入進(jìn)行融合,這樣既保證了深層網(wǎng)絡(luò)的信息流通,又保證了計(jì)算量的穩(wěn)定。
圖6 殘差結(jié)構(gòu)Fig. 6 Residual structure
在卷積神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)[15]一般采用修正線性單元ReLU 函數(shù)。當(dāng)輸入大于0 時(shí),ReLU 函數(shù)進(jìn)行線性輸出;輸入小于0 時(shí),直接輸出0,如圖7(a)所示。ReLU 函數(shù)由于只有線性關(guān)系,所以比其他激活函數(shù)速度更快;同時(shí)梯度保持穩(wěn)定,不會(huì)存在梯度消失的問題。但該函數(shù)輸入為負(fù)時(shí),梯度為0,會(huì)導(dǎo)致神經(jīng)元壞死,一旦某一位置輸入為負(fù),有可能導(dǎo)致后續(xù)該位置永遠(yuǎn)不會(huì)更新,使得網(wǎng)絡(luò)失效。為了解決這一問題,可采用Leaky ReLU 函數(shù),其在ReLU 函數(shù)的基礎(chǔ)上,當(dāng)輸入為負(fù)時(shí)不再置0,而是乘以某一系數(shù)α 進(jìn)行線性輸出,如圖7(b)所示。本文選用Leaky ReLU 函數(shù)作為激活函數(shù),以使得網(wǎng)絡(luò)具有更強(qiáng)的表征能力且更易被訓(xùn)練和收斂。
圖7 激活函數(shù)圖像Fig. 7 Activating function
2.1.4 上采樣方法
圖像語義分割若要得到與輸入圖像同等分辨率的分割結(jié)果,必然需要上采樣操作。目前在語義分割中常用兩種上采樣方法。第一種是利用線性插值或雙線性插值方法來填充圖像分辨率放大時(shí)產(chǎn)生的空余像素,如圖8所示。在圖像放大過程中,Q11, Q12, Q21, Q22為原始的4個(gè)已知像素點(diǎn),若要求得到中間未知點(diǎn)P 的像素值,首先需對(duì)X, Y 方向進(jìn)行插值,分別得到R1與R2處的像素值,如式(1)和式(2)所示;其次,可以通過R1與R2處的像素值插值得到P 點(diǎn)的像素值,如式(3)所示。
圖8 雙線性插值 Fig. 8 Bi-linear interpolation
第二種是利用轉(zhuǎn)置卷積的方法。轉(zhuǎn)置卷積即卷積的反過程,其首先將普通卷積操作中的卷積核做一個(gè)轉(zhuǎn)置,然后將普通卷積的輸出作為轉(zhuǎn)置卷積的輸入,而轉(zhuǎn)置卷積的輸出就是普通卷積的輸入。轉(zhuǎn)置卷積同樣利用網(wǎng)絡(luò)自學(xué)習(xí)方法去學(xué)習(xí)最優(yōu)的轉(zhuǎn)置卷積參數(shù),使得圖像上采樣效果最好。
雙線性插值的方法計(jì)算簡單、耗時(shí)少且效果較好;而轉(zhuǎn)置卷積通過網(wǎng)絡(luò)自學(xué)習(xí)方式得到參數(shù),因此計(jì)算量較大,同時(shí)也會(huì)增加模型的復(fù)雜度,因此本文在對(duì)速度和精度進(jìn)行均衡考慮后,選用雙線性插值作為上采樣方法。
在圖5 的Add 模塊中加入監(jiān)督損失計(jì)算(即將標(biāo)簽圖縮放到與每一路特征圖同等維度,利用1×1 Conv分類之后再與標(biāo)簽圖像進(jìn)行交叉熵?fù)p失函數(shù)的計(jì)算),對(duì)每一個(gè)維度的特征形成一個(gè)有效的監(jiān)督,這樣整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中會(huì)產(chǎn)生3 個(gè)損失值(L1, L2和L3),因此總損失計(jì)算函數(shù)公式為
多級(jí)輔助監(jiān)督損失不僅對(duì)最終輸出結(jié)果進(jìn)行損失誤差的計(jì)算,同時(shí)對(duì)中間層的特征圖也進(jìn)行損失誤差的計(jì)算。這樣設(shè)計(jì)的好處是,在本文模型的反向傳播更新中對(duì)3 路分支進(jìn)行同步的參數(shù)更新,相比于一般的損失函數(shù)計(jì)算方式,其可以顯著提升網(wǎng)絡(luò)的收斂速度并在一定程度上提升了模型的精度。
在訓(xùn)練樣本種類不均衡時(shí),原始的交叉熵?fù)p失函數(shù)會(huì)由于簡單像素以及大量存在的種類像素其分類損失誤差的大量累積而導(dǎo)致網(wǎng)絡(luò)傾向于易學(xué)習(xí)的樣本,最終導(dǎo)致網(wǎng)絡(luò)對(duì)簡單種類且數(shù)量多的樣本學(xué)習(xí)越來越好,對(duì)于種類復(fù)雜且數(shù)量少的樣本學(xué)習(xí)越來越差,造成訓(xùn)練的惡性循環(huán),不符合模型訓(xùn)練的初衷。為了解決這一問題,可對(duì)不平衡的種類進(jìn)行權(quán)重控制,分級(jí)損失計(jì)算如式(5)所示。
式中:Si——Softmax 函數(shù)值;ui——可調(diào)參數(shù);i—訓(xùn)練次數(shù)。
通過改變?chǔ)蘨值來控制不同種類像素?fù)p失誤差在總誤差中的比重。但這種做法只控制了類別不均衡樣本之間的占比平衡,從根本上還是無法區(qū)分出困難樣本;在訓(xùn)練中后期,梯度還是向著更易學(xué)習(xí)的樣本種類方向進(jìn)行更新,因此不能促進(jìn)神經(jīng)網(wǎng)絡(luò)對(duì)困難樣本的學(xué)習(xí)。
Softmax 函數(shù)的輸出概率值越大,說明其為某一類別的可能性就越大,網(wǎng)絡(luò)此時(shí)對(duì)該像素判斷的可信度比較高,也就是此時(shí)的輸入為簡單樣本;反過來說,當(dāng)Softmax 函數(shù)輸出概率較小,說明網(wǎng)絡(luò)難以區(qū)分出輸入的準(zhǔn)確類別,即此時(shí)的輸入為困難樣本。所以,區(qū)分簡單與困難樣本可以依據(jù)Softmax 函數(shù)的輸出概率來確定。參考Focal Loss 函數(shù),本文采用融合多級(jí)損失的形式并取其平均,提出抑制性交叉熵?fù)p失函數(shù)來解決自動(dòng)駕駛中樣本的不平衡性問題。該函數(shù)被定義為
式中:γ——可調(diào)參數(shù)。
當(dāng)一個(gè)樣本越容易被區(qū)分時(shí),Si值就越大,那么(1-Si)γ值就越小,兩者的乘積相當(dāng)于對(duì)該樣本的損失進(jìn)行了抑制,則在總的損失誤差之中的比重也就越??;相對(duì)而言,對(duì)困難樣本的損失誤差值進(jìn)行了一定程度的放大,其在總損失誤差中的比重就會(huì)加大,模型也就會(huì)更傾向于學(xué)習(xí)困難樣本。
卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)與訓(xùn)練測試等都在深度學(xué)習(xí)框架Tensorflow 下進(jìn)行。算法使用的系統(tǒng)為Ubuntu 16.04版本、CUDA 版本8.0 和CUDNN 版本6.0;算法實(shí)現(xiàn)的硬件環(huán)境見表1。
表1 算法使用硬件平臺(tái)Tab. 1 Hardware environment for the algorithm
本文主要在兩種數(shù)據(jù)集上進(jìn)行了相關(guān)算法模型的實(shí)驗(yàn)與測試,包括Cityscapes[16]數(shù)據(jù)集及自搭建的城市交通場景數(shù)據(jù)集。Cityscapes 評(píng)測數(shù)據(jù)集是目前自動(dòng)駕駛感知領(lǐng)域內(nèi)公認(rèn)的最具代表性的圖像語義分割數(shù)據(jù)集之一,該數(shù)據(jù)集重點(diǎn)關(guān)注對(duì)真實(shí)城區(qū)道路場景的理解,其共包含50 個(gè)不同城市、不同背景、不同季節(jié)的街景,提供了5 000 張經(jīng)過精細(xì)人工標(biāo)注的圖像以及20 000 張粗略標(biāo)注的圖像,共包含30 類標(biāo)注物體。我們主要使用了其中3 500 張精細(xì)標(biāo)注的圖像以及其中常見的20 類標(biāo)注類別、訓(xùn)練數(shù)據(jù)圖像3 300 張,測試數(shù)據(jù)圖像200 張。圖9 所示分別為Cityscapes 中的真實(shí)圖像、標(biāo)簽圖像以及顏色標(biāo)注實(shí)例。
圖9 Cityscapes 數(shù)據(jù)集Fig. 9 Cityscapes dataset
為了測試在國內(nèi)真實(shí)城市道路交通場景中的效果,我們通過自動(dòng)駕駛平臺(tái)的車載攝像頭采集了武漢市道路場景的圖片并利用圖像語義分割標(biāo)注工具Lableme 進(jìn)行了標(biāo)注,制作完成了圖像語義分割數(shù)據(jù)集,包括訓(xùn)練集4 000 張、測試集400 張,共分為道路、車道線、車輛、行人及背景5 種類別。圖10 所示為自制數(shù)據(jù)集中的樣本數(shù)據(jù)實(shí)例。
圖10 自制城市交通場景數(shù)據(jù)集Fig. 10 Self-produced scene dataset for urban traffic
首先,對(duì)數(shù)據(jù)集中的圖像進(jìn)行裁剪處理。Cityscapes數(shù)據(jù)集中的圖片分辨率為2 048×1 024,經(jīng)過中心線剪裁,可以將一張圖片分為2 張1 024×1 024 圖片,這樣不僅降低了訓(xùn)練的難度,同時(shí)也擴(kuò)充了數(shù)據(jù)集;自制作的數(shù)據(jù)集采集圖片分辨率為1 280×720,將上方裁去16 個(gè)像素,使得圖片變?yōu)? 280×704 分辨率。
其次,對(duì)數(shù)據(jù)進(jìn)行減均值操作。在深度學(xué)習(xí)中,由于反向傳播中遵循求導(dǎo)的鏈?zhǔn)椒▌t,若圖像中的像素值都為正值,那么權(quán)重在更新迭代過程中會(huì)同時(shí)增大或同時(shí)減小,致使權(quán)重更新效率低,因此在輸入中減去整體數(shù)據(jù)集的均值之后,輸入就會(huì)有正有負(fù),在一定程度上消除這種不利影響。Cityscapes 數(shù)據(jù)集中,RGB 三通道的均值分別為123.68, 116.78 和103.94;自制數(shù)據(jù)集的均值分別為122.54, 117.32 和104.78。
最后,對(duì)輸入數(shù)據(jù)進(jìn)行歸一化處理。訓(xùn)練所用彩色圖像的像素值均分布在[0, 255],進(jìn)行歸一化就是將像素值都?jí)嚎s到0 到1 之間,使得各個(gè)特征尺度都控制在相同范圍內(nèi),以保證梯度更新時(shí)更加平穩(wěn),加速網(wǎng)絡(luò)的收斂,盡快找到網(wǎng)絡(luò)的最優(yōu)解。同時(shí),對(duì)標(biāo)簽圖像進(jìn)行編碼,將不同類別所代表的顏色編碼成唯一的標(biāo)簽向量。如對(duì)Cityscapes 數(shù)據(jù)集的20 個(gè)類別,編碼標(biāo)簽向量的長度為20,其中每一位都代表一種類別。經(jīng)過編碼的標(biāo)簽圖像更易于訓(xùn)練計(jì)算,在網(wǎng)絡(luò)輸出之后同樣需要進(jìn)行反向的解碼輸出。
另外,雖然卷積神經(jīng)網(wǎng)絡(luò)具有強(qiáng)大的特征表征能力,但由于存在巨大的網(wǎng)絡(luò)參數(shù),模型需要大量的數(shù)據(jù)作為支撐,因?yàn)閿?shù)據(jù)樣本過少會(huì)導(dǎo)致網(wǎng)絡(luò)模型學(xué)習(xí)不到位、泛化性能差、容易陷入過擬合等問題。為了盡可能在有限的數(shù)據(jù)集上擴(kuò)充訓(xùn)練樣本,對(duì)數(shù)據(jù)在訓(xùn)練中進(jìn)行了隨機(jī)的數(shù)據(jù)增強(qiáng)處理,具體包括:(1)水平翻轉(zhuǎn)。訓(xùn)練過程中,每一次迭代時(shí)圖像都有50%的概率進(jìn)行水平翻轉(zhuǎn)。(2)旋轉(zhuǎn)。訓(xùn)練過程中,每一次迭代時(shí)圖像都有20%的概率旋轉(zhuǎn)一定角度,范圍在-30°~ 30°之間。(3)垂直翻轉(zhuǎn)。訓(xùn)練過程中,每一次迭代時(shí)圖像都有20%的概率進(jìn)行上下翻轉(zhuǎn)。
網(wǎng)絡(luò)搭建完畢后,在Tensorflow 平臺(tái)上分別在Cityscapes 數(shù)據(jù)集與自制數(shù)據(jù)集上進(jìn)行訓(xùn)練。由于網(wǎng)絡(luò)不存在預(yù)訓(xùn)練模型,所以對(duì)于網(wǎng)絡(luò)中的卷積層采取Xavier 方法進(jìn)行初始化:
式中:nj——第j 次訓(xùn)練。
對(duì)于偏置,則直接初始化為0。梯度更新采用Adam 優(yōu)化器。模型的其他訓(xùn)練參數(shù)設(shè)置還包括:訓(xùn)練的初始學(xué)習(xí)率為0.000 2;Batchsize 為5;網(wǎng)絡(luò)結(jié)構(gòu)中自上而下3 個(gè)損失誤差的比重因子分別為α1=0.25, α2=0.4, α3=1.0。在Cityscapes 上訓(xùn)練的Epoch 為150 次,在自制作數(shù)據(jù)集上訓(xùn)練的Epoch 為80 次。
由于網(wǎng)絡(luò)結(jié)構(gòu)較為復(fù)雜,若直接進(jìn)行全部網(wǎng)絡(luò)的訓(xùn)練,難度比較大且不易于收斂,所以采用了分級(jí)訓(xùn)練的方法。具體過程是,在圖2 的網(wǎng)絡(luò)中,首先只激活下路分支的網(wǎng)絡(luò),即只對(duì)下路分支的參數(shù)進(jìn)行更新;在損失誤差基本保持不變時(shí),固定下路分支的參數(shù),將中路分支接入網(wǎng)絡(luò)繼續(xù)訓(xùn)練;同樣,在損失誤差基本保持不變時(shí),固定下路與中路分支的參數(shù);之后,將上路分支再接入網(wǎng)絡(luò),實(shí)現(xiàn)整個(gè)網(wǎng)絡(luò)的訓(xùn)練,得到整個(gè)模型最終的參數(shù)。結(jié)果表明,相比于直接進(jìn)行全網(wǎng)絡(luò)訓(xùn)練,分級(jí)訓(xùn)練可以縮短模型收斂的時(shí)間,并且最后的模型誤差也降得更低,因此其是一種非常適應(yīng)于本文算法的訓(xùn)練方法。
為了測試本文算法的效果以及抑制性交叉熵?fù)p失函數(shù)對(duì)網(wǎng)絡(luò)的提升,在Cityscapes 數(shù)據(jù)集及自制作數(shù)據(jù)集上做了多種對(duì)比實(shí)驗(yàn)。
首先,網(wǎng)絡(luò)中分別使用普通交叉熵?fù)p失函數(shù)與本文提出的抑制性交叉熵?fù)p失函數(shù)進(jìn)行了兩組對(duì)比實(shí)驗(yàn),損失誤差如圖11 所示。圖中,CE Loss 表示普通交叉熵?fù)p失,ICE Loss 表示抑制性交叉熵?fù)p失,1 個(gè)Epoch表示一個(gè)完整的學(xué)習(xí)過程。損失誤差均從3 路分支同時(shí)開始訓(xùn)練算起,可以看出,使用抑制性交叉熵?fù)p失函數(shù)比使用普通交叉熵?fù)p失函數(shù)更早收斂,抑制性交叉熵?fù)p失誤差在40 次Epoch 之后就保持平穩(wěn),而普通交叉熵?fù)p失在100 次Epoch 之后才開始保持平穩(wěn),證明抑制性交叉熵?fù)p失函數(shù)可以加快模型的訓(xùn)練速度,保證模型的快速收斂;同時(shí)由于抑制性交叉熵?fù)p失中每一個(gè)像素?fù)p失誤差均會(huì)與小于1 的因子相乘,所以抑制性交叉熵?fù)p失誤差始終小于普通交叉熵?fù)p失誤差。
圖11 不同損失函數(shù)訓(xùn)練誤差對(duì)比Fig. 11 Comparison of training errors of different loss functions
最終每種類別的精度如表2 所示。可以發(fā)現(xiàn),在road 和car 這類數(shù)量較多且簡單的類別中,兩組實(shí)驗(yàn)的平均交并比(mIoU)值相差不大;但對(duì)于traffic sign, pole 等數(shù)量較少且困難的類別,使用抑制性交叉熵?fù)p失函數(shù)的實(shí)驗(yàn)mIoU 值均高于普通交叉熵?fù)p失函數(shù)的,其中wall 類別高3.2%,fence 類別高3.3%,truck 類別高4.5%,motorcycle 類別高3.4%。最終兩組實(shí)驗(yàn)的整體mIoU 值比使用抑制性交叉熵?fù)p失函數(shù)的實(shí)驗(yàn)高出了1.4%。這組對(duì)比實(shí)驗(yàn)結(jié)果說明,本文加入的抑制性交叉熵?fù)p失函數(shù)可以提升數(shù)據(jù)集中數(shù)量較少的類別分割精度,一定程度上解決了數(shù)據(jù)集樣本種類不均衡的問題。
表2 Cityscapes 上不同損失函數(shù)各類別平均交并比Tab. 2 mIoU of different loss functions on Cityscapes
其次,本文對(duì)比了在Cityscapes 數(shù)據(jù)集上與各主流語義分割算法的結(jié)果,主要比較了最終的mIoU 值及運(yùn)行時(shí)間(表3),其中Cityscapes 圖像分辨率為2 048×1 024。表3 中的DR 參數(shù)代表輸入圖像的縮放倍數(shù),如DR=2,則輸入分辨率為1 024×512。其他算法[17-19]的數(shù)據(jù)來源于Cityscapes 官網(wǎng),其中運(yùn)行時(shí)間與mIoU 均為NVIDIA TITAN XP 測得,而本文算法在NVIDIA 1080Ti 上測得,結(jié)果之間具有一定差異性,但影響有限。本文只收錄了Cityscaps 官網(wǎng)中明確給出運(yùn)行時(shí)間的一些方法。
表3 本文算法與其他語義分割算法的對(duì)比Tab. 3 Comparison between our algorithm and other semantic segmentation algorithms
由表3 可以看出,其中mIoU 最高的為PSPNet,達(dá)到了81.2%,但運(yùn)行時(shí)間很慢,需要1 s 多才能得到結(jié)果;而速度最快的為Enet,只需要13 ms 就可以處理完一張圖像,但其mIoU 僅有58.3%,無法滿足精度要求。因此,通過對(duì)比各種算法的效果可以發(fā)現(xiàn),本文的算法在下采樣2 倍之后,取得了68.2% 的mIoU 值,同時(shí)處理一張圖像僅需要26 ms,在所有算法中做到了精度與速度的平衡,可以滿足自動(dòng)駕駛語義分割任務(wù)的需要。
最后,為了驗(yàn)證本文添加的金字塔尺度融合結(jié)構(gòu)對(duì)于模型精度的影響,本文做了相應(yīng)的對(duì)比實(shí)驗(yàn),如表4所示,表4 表示了在每路分支后添加金字塔尺度融合結(jié)構(gòu)的mIoU 變化。由表4 可以發(fā)現(xiàn),在全網(wǎng)絡(luò)中不添加任何金字塔尺度融合模塊,mIoU 僅有60.2%;而在添加金字塔尺度融合模塊之后,模型的測試精度有了大幅度的提升,并且當(dāng)只有上路分支和中路分支添加后,模型的精度達(dá)到最高。下路分支添加金字塔尺度融合模塊后mIoU 值下降的原因可能是下路分支僅經(jīng)過了3 個(gè)下采樣結(jié)構(gòu),提取的特征中主要以紋理特征為主,多尺度融合容易破壞其中的特征信息,進(jìn)而影響了最終的模型質(zhì)量。
表4 金字塔尺度融合結(jié)構(gòu)對(duì)模型精度的影響Tab. 4 Impact of pyramid scale fusion structure on model accuracy
圖12 展示了部分訓(xùn)練完成后的測試圖像,其中左側(cè)為輸入的真實(shí)城市交通場景圖像,中間為對(duì)應(yīng)的真實(shí)標(biāo)簽圖像,右側(cè)為算法輸出圖像。
圖12 部分?jǐn)?shù)據(jù)算法結(jié)果Fig. 12 Partial data algorithm results
以上實(shí)驗(yàn)測試均在裝有NVIDIA 1080Ti 顯卡的PC機(jī)上完成,運(yùn)行功率達(dá)到400 W,顯然在自動(dòng)駕駛平臺(tái)中無法持續(xù)提供如此高的功率以供計(jì)算,且放置大型PC 機(jī)也不符合車規(guī)級(jí)標(biāo)準(zhǔn)要求。因此,自動(dòng)駕駛平臺(tái)中只能放置體積較小、功率很低的嵌入式平臺(tái)設(shè)備,且嵌入式平臺(tái)中用于計(jì)算的硬件資源有限,無法提供如NVIDIA 1080Ti 顯卡那樣強(qiáng)大的計(jì)算能力,所以模型在移植到嵌入式平臺(tái)時(shí)運(yùn)行速度會(huì)大幅降低[23-24],難以實(shí)時(shí)化。為了解決這一問題,采用NVIDIA 的開源加速庫TensorRT 4.0 版本對(duì)本文的訓(xùn)練模型進(jìn)行加速,并對(duì)加速前后效果及運(yùn)行時(shí)間進(jìn)行了對(duì)比。實(shí)驗(yàn)平臺(tái)為NVIDIA Jetson TX2 嵌入式平臺(tái),在測試時(shí)使用Cityscapes 數(shù)據(jù)集,采用1 024×512 分辨率,即將原測試集圖像分辨率整體縮小一半(原因是TX2的顯存有限,不能容納更大的分辨率圖像),并采用了FP16 的存儲(chǔ)方式,對(duì)比結(jié)果如表5 所示。
表5 采用TensorRT 加速前后模型在TX2 上的精度與運(yùn)行時(shí)間Tab. 5 Accuracy and running time of the model on TX2 before and after TensorRT acceleration
對(duì)比實(shí)驗(yàn)結(jié)果可以發(fā)現(xiàn),使用TensorRT 之后,模型的精度會(huì)略微下降,這是因?yàn)槟P椭袇?shù)由32 位浮點(diǎn)數(shù)轉(zhuǎn)化為16 位浮點(diǎn)數(shù),造成了一定的計(jì)算誤差,但損失的精度仍在可以接受的范圍內(nèi);相比于原始的模型,加速后的模型運(yùn)行時(shí)間有了顯著的減少,整個(gè)模型的速度有了近1 倍的提升。
本文提出一種DSC-MB-PSPNet 模型,其采用3 分支結(jié)構(gòu)的網(wǎng)絡(luò),通過不同分辨率的輸入在計(jì)算量比較小的情況下同時(shí)得到了低維與高維特征,同時(shí)網(wǎng)絡(luò)中采用PSPNet, Add 和深度可分離卷積等模塊。在Cityscapes數(shù)據(jù)集上的測試結(jié)果表明,該算法能夠在精度與運(yùn)行時(shí)間之間達(dá)到有效的平衡。針對(duì)自動(dòng)駕駛場景中數(shù)據(jù)樣本種類之間嚴(yán)重不均衡的問題,本文提出抑制性交叉熵?fù)p失函數(shù),對(duì)于容易區(qū)分的樣本,降低其在總損失誤差中的比重;對(duì)于難以區(qū)分的樣本,提高其在總損失誤差中的比重,使得網(wǎng)絡(luò)在反向梯度更新時(shí)能夠朝著難以分割的樣本目標(biāo)的方向前進(jìn)。在自制作的城市交通場景數(shù)據(jù)集中進(jìn)行了訓(xùn)練測試,為了使模型能夠在自動(dòng)駕駛嵌入式平臺(tái)上運(yùn)行,利用TensorRT 對(duì)模型進(jìn)行加速,實(shí)車測試結(jié)果表明,模型可以在自動(dòng)駕駛平臺(tái)上做到實(shí)時(shí)運(yùn)行,并且分割結(jié)果在大多數(shù)場景中具有較好效果。