馬成齊,李學(xué)華,張?zhí)m杰,向 維,2
1.北京信息科技大學(xué) 信息與通信工程學(xué)院,北京100101
2.詹姆斯庫克大學(xué) 工程學(xué)院,昆士蘭 凱恩斯4878
近年來,隨著深度學(xué)習(xí)技術(shù)的迅速發(fā)展,產(chǎn)生了越來越多的智能化技術(shù)。例如與深度估計有著密切聯(lián)系的圖像編輯、VR(Virtual Reality)、AR(Augmented Reality)、3D場景解析和自動駕駛技術(shù)等。在深度學(xué)習(xí)技術(shù)問世之前,利用普通相機(jī)只能捕獲場景的二維平面信息,無法獲取到場景中的深度值。雖然通過使用多個攝像頭以及激光和雷達(dá)設(shè)備,能夠獲取到深度信息,但激光和雷達(dá)不能完美地與相機(jī)對準(zhǔn),會導(dǎo)致測量的深度值產(chǎn)生誤差。因此,有學(xué)者開始采用深度學(xué)習(xí)技術(shù)替代傳統(tǒng)的激光雷達(dá),在獲取深度信息的同時節(jié)約了成本。
使用深度學(xué)習(xí)技術(shù)進(jìn)行單目深度估計可分為監(jiān)督型和自監(jiān)督型。在監(jiān)督型單目深度估計中,較為經(jīng)典的是Eigen 和Fergus[1]設(shè)計的一個包含粗糙網(wǎng)絡(luò)和細(xì)化網(wǎng)絡(luò)的系統(tǒng)。該系統(tǒng)中的粗糙網(wǎng)絡(luò)用于對圖像做全局預(yù)測,細(xì)化網(wǎng)絡(luò)用于對全局預(yù)測的結(jié)果進(jìn)行局部優(yōu)化,整個網(wǎng)絡(luò)采用了較早的AlexNet 架構(gòu)。2015 年,Eigen 和Fergus[2]改進(jìn)了上述系統(tǒng),在原有的兩個網(wǎng)絡(luò)中增加了一個采樣網(wǎng)絡(luò),加深了網(wǎng)絡(luò)結(jié)構(gòu),同時將AlexNet架構(gòu)更換為層數(shù)更深的VGG 架構(gòu),使得輸出的深度圖與使用AlexNet架構(gòu)相比更為清晰。2018年,F(xiàn)u等人[3]提出了編碼解碼深度估計網(wǎng)絡(luò),采用洞卷積型網(wǎng)絡(luò)來更好地提取圖像的多尺度特征,相比以往的監(jiān)督型方法,輸出的深度圖分辨率更高。以上監(jiān)督型方法在訓(xùn)練過程中都需要地面真實深度,即需要大量密集標(biāo)注后的數(shù)據(jù)集。但在實際中,數(shù)據(jù)集的深度信息標(biāo)簽普遍是稀疏的,采用監(jiān)督型單目深度估計不能較好地對場景進(jìn)行密集估計。
不同于監(jiān)督型方法,自監(jiān)督方法在網(wǎng)絡(luò)輸入部分使用的是左右兩個相機(jī)在同一水平位置上拍攝出的圖像[4](即同步立體對),或者單目視頻[5]中相鄰幀組合的一組圖像。采用自監(jiān)督方法進(jìn)行單目深度估計,較為經(jīng)典的是Zhou等人[6]設(shè)計的系統(tǒng),該系統(tǒng)把未作任何標(biāo)記的單目視頻中的每一幀圖像都作為訓(xùn)練集,使用深度估計網(wǎng)絡(luò)和相機(jī)位姿網(wǎng)絡(luò)對上述訓(xùn)練集進(jìn)行訓(xùn)練。之后采用視圖合成方法,將深度網(wǎng)絡(luò)估計出的深度信息與相機(jī)位姿網(wǎng)絡(luò)結(jié)合,恢復(fù)出與目標(biāo)圖像相鄰的另一幅圖像。最后將恢復(fù)出的圖像與目標(biāo)圖像做差,通過最小化損失函數(shù)使網(wǎng)絡(luò)收斂。Godard[4]則采用同步立體對圖像作為訓(xùn)練集,利用圖像重建損失對深度網(wǎng)絡(luò)進(jìn)行訓(xùn)練,輸出視差圖,之后與目標(biāo)圖像相結(jié)合,得到估計的深度圖,進(jìn)一步提升了準(zhǔn)確率。Mahjourian等人[7]提出了一種將場景中的三維損失與單目視頻中的二維損失結(jié)合的方法,同時結(jié)合掩碼將無用的信息去除,最終得到了較好的深度圖。但由于現(xiàn)有數(shù)據(jù)集存在物體間遮擋以及物體運(yùn)動問題,采用自監(jiān)督方法估計出的深度圖都會存在偽影。
為了解決以上問題,本文提出了一種抗遮擋的自監(jiān)督單目深度估計方法。主要貢獻(xiàn)如下:(1)提出了一種新穎的網(wǎng)絡(luò)架構(gòu),將U-Net[8]架構(gòu)與殘差網(wǎng)絡(luò)(Residual Network,ResNet)[9]融合,并且保證了輸入和輸出的圖像分辨率一致。(2)使用最小化光度重投影損失函數(shù)與自動掩蔽損失來處理物體被遮擋的問題,使估計出的深度圖更加清晰,減少了邊界偽影。(3)基于KITTI數(shù)據(jù)集[10],驗證了本文方法的有效性,相比于文獻(xiàn)[4,11-13]中提到的四種方法,本文方法呈現(xiàn)了較好的估計結(jié)果。
本章將從深度網(wǎng)絡(luò)模型的構(gòu)造及損失函數(shù)的選擇來介紹本文提出的自監(jiān)督單目深度估計方法。
本文的網(wǎng)絡(luò)架構(gòu)采用了深度網(wǎng)絡(luò)和相機(jī)位姿網(wǎng)絡(luò)協(xié)同工作的架構(gòu)。其中,深度網(wǎng)絡(luò)使用U-Net 和ResNet34 相融合的編碼、解碼架構(gòu),輸入為某時刻的單幀圖像;位姿網(wǎng)絡(luò)的編碼器和深度網(wǎng)絡(luò)相同,輸入為三幀相鄰時刻的圖像。網(wǎng)絡(luò)的損失函數(shù)由光度重投影和邊緣感知平滑函數(shù)兩部分構(gòu)成。其中,最小化光度重投影函數(shù)結(jié)合了自動掩蔽損失,用于解決物體遮擋和運(yùn)動帶來的影響。本文網(wǎng)絡(luò)架構(gòu)如圖1所示。
1.1.1 U-Net架構(gòu)
U-Net 網(wǎng)絡(luò)架構(gòu)是一種輕量級的全卷積神經(jīng)網(wǎng)絡(luò),可以分為兩個部分:收縮路徑對應(yīng)的是編碼器部分,而擴(kuò)展路徑對應(yīng)的是解碼器部分。在收縮路徑中,通過池化層將特征通道的數(shù)量加倍,同時考慮到卷積會導(dǎo)致邊界像素的損失,該網(wǎng)絡(luò)進(jìn)行了適當(dāng)?shù)募舨谩O喾?,在擴(kuò)展路徑中,通過上采樣將特征通道數(shù)量減半,最后與收縮路徑中經(jīng)過剪裁后的特征圖進(jìn)行連接。圖2 給出了U-Net架構(gòu)示意圖。
圖2 U-Net結(jié)構(gòu)圖
本文使用的KITTI數(shù)據(jù)集涉及市區(qū)、鄉(xiāng)村和高速公路等場景采集的真實圖像,包含內(nèi)容較多。每張圖像中的車輛最多可達(dá)15輛,行人最多可達(dá)30個,且會出現(xiàn)不同程度的遮擋與截斷問題。如果采用普通深度網(wǎng)絡(luò)對KITTI 數(shù)據(jù)集進(jìn)行訓(xùn)練,隨著網(wǎng)絡(luò)層數(shù)的加深,預(yù)測的準(zhǔn)確率將呈現(xiàn)先上升,后飽和再下降的趨勢。因此,為了更加準(zhǔn)確地提取圖像中的深度信息,將ResNet34 與U-Net 網(wǎng)絡(luò)融合,使用ResNet34 網(wǎng)絡(luò)參數(shù)作為U-Net 架構(gòu)中的編碼器部分,解決了隨著網(wǎng)絡(luò)層數(shù)的加深,出現(xiàn)預(yù)測準(zhǔn)確率下降以及梯度消失和爆炸的問題。
1.1.2 ResNet34結(jié)構(gòu)
ResNet34的結(jié)構(gòu)圖如圖3所示,每兩個卷積塊組成一個building block,結(jié)構(gòu)為:Conv(3×3)-BN-ReLUConv(3×3)-BN,其中BN(Batch Normalization)層為批量歸一化層。在整個模型中,每個卷積核卷積步長皆為2,卷積核的輸出部分統(tǒng)一采用了ReLU激活函數(shù)。
圖3 ResNet34結(jié)構(gòu)圖
與編碼器對應(yīng),深度網(wǎng)絡(luò)的解碼器部分采用了步長為1,大小為3×3的卷積核,具體信息如表1所示。為了更好地減少深度圖中的偽影,本文將解碼器中采用的補(bǔ)零填充方式更換為了反射填充。該方法在樣本處于圖像邊界之外時,能夠返回原圖像中與邊界像素相似的值。
表1 解碼器信息
整個深度網(wǎng)絡(luò)的設(shè)計可以防止在對目標(biāo)進(jìn)行深度估計和圖像重建時,訓(xùn)練目標(biāo)陷入局部最小值。同時,編解碼的結(jié)構(gòu)能夠保證輸入圖像和輸出圖像分辨率一致。但采用單目視頻中的幀序列進(jìn)行深度估計時,無法保證拍攝每幀圖像時的相機(jī)位姿是一致的,因此本文加入了相機(jī)位姿網(wǎng)絡(luò)。
Godard[4]設(shè)計的自監(jiān)督方法,采用同步立體對進(jìn)行訓(xùn)練,會導(dǎo)致相機(jī)位姿估計只能進(jìn)行一次離線矯正,無法考慮每個時刻相機(jī)位姿以及物體間的遮擋所帶來的影響。因此,本文在訓(xùn)練網(wǎng)絡(luò)時采用了單目視頻中的連續(xù)幀作為輸入,在對圖像深度進(jìn)行估計的同時,還需要估計單目視頻中幀與幀之間的攝像機(jī)姿態(tài)。通過姿態(tài)估計約束深度網(wǎng)絡(luò),實現(xiàn)從幀序列中的某一幅圖像預(yù)測出與其相鄰的另一幀圖像,同時采用最小化光度重投影來處理遮擋問題,采用自動掩蔽損失處理運(yùn)動帶來的偽影問題。
位姿網(wǎng)絡(luò)采用了與深度網(wǎng)絡(luò)相同的結(jié)構(gòu)設(shè)計,編碼器部分仍然采用標(biāo)準(zhǔn)的ResNet34,解碼器部分的所有卷積核以及輸出部分統(tǒng)一采用了ReLU函數(shù)。
本文使用的損失函數(shù)是兩個部分的加權(quán),即結(jié)合了自動掩蔽損失的光度重投影誤差函數(shù)和邊緣感知平滑函數(shù)。其中,最小化光度重投影用來處理物體遮擋問題,而自動掩蔽損失用來處理運(yùn)動帶來的偽影問題。
1.3.1 最小化光度重投影函數(shù)
自監(jiān)督單目深度估計通過訓(xùn)練網(wǎng)絡(luò)從一幅圖像的視覺角度預(yù)測目標(biāo)圖像的出現(xiàn),通過深度網(wǎng)絡(luò)和相機(jī)位姿網(wǎng)絡(luò)以及損失函數(shù)來執(zhí)行目標(biāo)圖像的合成。但在新建視圖時存在一個問題,即每個像素可能存在多個不正確的深度,會導(dǎo)致最終的深度圖出現(xiàn)模糊以及偽影。本文將這一問題轉(zhuǎn)化為訓(xùn)練時光度重投影誤差的最小化。其中光度重投影誤差Lp表達(dá)式為:
式中,It為目標(biāo)圖像,It′為源視圖,pe 為光度重投影誤差,由L1和SSIM組成,表達(dá)式為:
其中,損失函數(shù)L1 用于將目標(biāo)圖像中的像素值與估計圖像中的像素值做差,并取絕對值。損失函數(shù)SSIM(Structural Similarity index)用于衡量目標(biāo)圖像與估計圖像的相似度。Tt→t′表示每個源視圖相對于目標(biāo)圖像的相機(jī)姿態(tài)。在單目訓(xùn)練中,通常采用與目標(biāo)圖像相鄰的兩幀圖像作為輸入,該輸入方式可能會使目標(biāo)圖像的前一幀和后一幀像素之間存在遮擋和去遮擋問題。當(dāng)損失函數(shù)迫使網(wǎng)絡(luò)去匹配這些像素時,將會包含被遮擋的像素,導(dǎo)致最終的深度圖出現(xiàn)偽影,估計效果較差。
本文采用最小化光度重投影誤差替代原有的光度重投影誤差,表達(dá)式為:
即在每個進(jìn)行匹配的像素處,取光度重投影誤差的最小值作為投影誤差,而不是原有的對光度重投影誤差取平均值,有效降低了投影誤差,從而減少了深度圖中的偽影,具體實現(xiàn)方式如圖4所示。
1.3.2 自動掩蔽損失
自監(jiān)督單目深度估計采用的KITTI 數(shù)據(jù)集是假定場景為靜態(tài)情況下,運(yùn)動的攝像機(jī)拍攝的街道物體圖像。因此,如果場景中存在移動物體,或者有物體與攝像機(jī)保持了相對靜止,都會對預(yù)測的深度圖產(chǎn)生很大影響。該問題可以理解為對于運(yùn)動的物體,自監(jiān)督單目深度估計方法預(yù)測出的深度圖將存在無限深度的洞[11]。本文采用自動掩蔽損失[14]來處理該問題,函數(shù)表達(dá)式為:
圖4 外觀損失圖
自動掩蔽損失函數(shù)會過濾掉從當(dāng)前某一個幀序列到下一個幀序列中不改變外觀的物體,進(jìn)而使深度網(wǎng)絡(luò)過濾掉和攝像機(jī)具有相同速度的物體。[]為艾弗森括號,當(dāng)括號內(nèi)的條件滿足時,μ 的值為1,不滿足則μ 為0。由于未經(jīng)過形變的源圖像It′ 的重投影誤差要低于經(jīng)過形變的圖像It′→t的誤差,因此使用μ 來忽略原始的光度重投影誤差像素?fù)p失。
1.3.3 邊緣感知平滑函數(shù)
最后,結(jié)合使用邊緣感知平滑函數(shù)Ls,表達(dá)式為:
由于深度不連續(xù)的問題一般會發(fā)生在圖像的梯度上,因此對視差梯度增加了L1懲罰項,用于預(yù)測出較為平滑的視差。
最終,本文提出的深度估計網(wǎng)絡(luò)模型的損失函數(shù)為:
其中,λ 為常數(shù),取值為0.001,光度重投影誤差中的?取值為0.85。其中?和λ 的取值參考了Godard[4]的設(shè)置,該取值是目前最常用的最佳參數(shù)設(shè)置,Lp為SSIM與L1的組合。
本章采用本文的深度估計網(wǎng)絡(luò)模型對KITTI 數(shù)據(jù)集進(jìn)行深度估計,并對結(jié)果進(jìn)行分析,同時與目前四種單目深度估計模型算法在同一個場景下進(jìn)行了對比。
本次實驗選用的KITTI數(shù)據(jù)集,是當(dāng)前最大的自動駕駛場景下的計算機(jī)視覺算法測評數(shù)據(jù)集,包含了城市、住宅、道路、校園和行人。使用整個raw data的數(shù)據(jù)對網(wǎng)絡(luò)進(jìn)行訓(xùn)練以及測試,其中每張圖像的分辨率為1 242×375。
本文在單目深度訓(xùn)練中使用了相鄰三幀圖像的序列長度,以50%的幾率對輸入圖像進(jìn)行了水平翻轉(zhuǎn)以及范圍統(tǒng)一為±0.1 的隨機(jī)亮度、對比度、飽和度和色調(diào)的抖動,相機(jī)位姿網(wǎng)絡(luò)也采用上述操作。在對輸入數(shù)據(jù)進(jìn)行訓(xùn)練時,本模型使用Adam 算法[15]替代傳統(tǒng)的隨機(jī)梯度下降(Stochastic Gradient Descent,SGD)算法,可以更高效地更新深度網(wǎng)絡(luò)中的權(quán)重。訓(xùn)練周期為20 個,每個周期的批處理數(shù)量為12。由于采用了U-Net 對稱性網(wǎng)絡(luò)架構(gòu),輸入及輸出的圖像分辨率均為1 242×375。在訓(xùn)練的前15 個周期使用了1×10-4的學(xué)習(xí)率,在后面的5 個周期中將學(xué)習(xí)率降低為1×10-5。訓(xùn)練使用的服務(wù)器CPU為E5-2650 v4,GPU為NVIDIA TITAN V,系統(tǒng)為Ubuntu16.04.6。整個輸入輸出網(wǎng)絡(luò)采用Pytorch搭建,訓(xùn)練時間為30個小時。
與以往單目深度估計算法類似,本文也使用Eigen[2]的數(shù)據(jù)拆分方法對KITTI數(shù)據(jù)集進(jìn)行了拆分,拆分后的39 810張圖像用于訓(xùn)練,4 424張圖像用于驗證,同時將相機(jī)的中心點設(shè)置為圖像的中心點,相機(jī)的焦距設(shè)置為KITTI 數(shù)據(jù)集中所有焦距的平均值。為了便于和以往方法進(jìn)行對比,在測試結(jié)果中,按照標(biāo)準(zhǔn)的對比方法將深度限制在80 m范圍。
本節(jié)重點對比了本文的單目深度估計算法與其他作者的單目深度估計算法的估計結(jié)果。為了更加清晰準(zhǔn)確地對結(jié)果進(jìn)行比較,測試時采用了相同的道路場景。
2.3.1 算法結(jié)果
圖5給出了本文結(jié)果與Godard[4]、Luo等人[11]、Ranjan等人[12]以及Yin等人[13]的方法對比效果圖。從圖5 可以看出,相比其他四種方法,本文的單目深度估計算法在場景圖a中可以清晰地顯示出行人和遠(yuǎn)處車輛的輪廓,而其他方法所估計出的行人較為模糊,或者存在深度值不統(tǒng)一及顏色不一致。在場景圖b中,對于街道中被立柱遮擋的汽車,本文算法也可以顯示出其輪廓,且立柱的顯示效果好于其他四種算法。從場景圖c中可以看出,和其他四種算法相比,只有本文算法可以清晰地顯示被行人遮擋的立柱。
圖5 實驗結(jié)果對比圖
圖6給出了未加入任何優(yōu)化組件、加入自動掩蔽損失單獨組件、加入最小化光度重投影誤差單獨組件,以及同時加入自動掩蔽損失和最小化光度重投影誤差兩個組件的效果圖。從圖中可以看出,當(dāng)未加入最小化光度重投影和自動掩蔽損失時,估計的深度圖效果較為模糊,存在偽影,同時遠(yuǎn)方的無限深度出現(xiàn)洞,而且運(yùn)動物體較為模糊。例如場景圖a 中,行人在一個固定位置時,估計出的整個行人的深度圖像素值不統(tǒng)一,存在一定誤差,同時遠(yuǎn)處行駛的汽車也未顯示出來。場景圖b中,正前方有大面積無限深度的洞,同時左側(cè)的立柱由于遮擋也沒有清晰顯示出來。場景圖c中,被行人遮擋的立柱顯示較為模糊,存在偽影。
圖6 組件對比實驗圖
當(dāng)單獨加入自動掩蔽損失后,場景圖a中遠(yuǎn)方運(yùn)動的汽車可以估計出清晰的效果,同時右側(cè)運(yùn)動的行人深度值統(tǒng)一,顏色一致。場景圖b 中,正前方無限深度的洞明顯減弱,畫面有了分割。場景圖c和場景圖b相似,洞的效果也明顯減弱。
當(dāng)單獨加入最小化光度重投影組件后,在場景圖a中,左側(cè)的樹木枝干可以估計出清晰效果。在場景圖b中,前方被遮擋的立柱也可以估計出較為清晰的效果。在場景圖c 中,效果更加明顯,被行人遮擋的立柱也可以清晰看出估計結(jié)果。
最終將自動掩蔽損失和最小化光度重投影誤差兩個組件同時加入到網(wǎng)絡(luò)模型中后,估計出的效果得到了進(jìn)一步提升,被遮擋的立柱以及運(yùn)動的車輛及行人整體同時都呈現(xiàn)出較為清晰的估計結(jié)果,正前方無限深度畫面邊界分割更加細(xì)致。
為了對比本文算法在不同遮擋下的效果,圖7給出了KITTI 數(shù)據(jù)集(場景a)以及數(shù)據(jù)集之外的兩組場景(場景b和c)的效果圖。從圖中可知,對于場景a中的單一物體車輛、樹木以及低紋理區(qū)域,并且遮擋物體和被遮擋物體之間存在一定距離時,本文算法的估計效果較好。對于在場景b 中,樹木上方的枝干繁多,分布較為密集,本文方法的估計效果有所下降,但對于距離較遠(yuǎn)的低紋理區(qū)域,如下方枝干,依然可以估計出清晰的效果圖。在場景c 中,由于房屋右側(cè)被密集的樹葉遮擋,估計效果也有所下降。因此,本文方法對于所拍攝的街道和公路中的行人、車輛等這種運(yùn)動物體間造成的單一遮擋有較好效果。
圖7 遮擋對比實驗圖
2.3.2 算法性能分析
與標(biāo)準(zhǔn)差(Standard Deviation)和平均絕對誤差(Mean Absolute Error,MAE)相比,均方根誤差(Root Mean Square Error,RMSE)對深度圖中的異常值更加敏感。因此,本實驗選取了RMSE函數(shù)和平方絕對誤差(Square Relative error,Sq Rel)函數(shù)作為網(wǎng)絡(luò)模型算法的評估指標(biāo),表達(dá)式分別為:
其中,ypred表示估計出的深度圖,而ygt表示地面真實深度圖。RMSE 函數(shù)用來衡量觀測值同真值之間的誤差。表2和表3所示分別給出了本文單目深度估計算法和其他四種算法的RMSE 和Sq Rel 的對比結(jié)果。從表中可以看出,相比其他四種方法,使用本文方法獲得的深度圖的RMSE和Sq Rel都是最小的。
表2 RMSE指標(biāo)結(jié)果對比
表3 Sq Rel指標(biāo)結(jié)果對比
針對單目深度估計中由于物體遮擋導(dǎo)致的圖像估計準(zhǔn)確度較低的問題,本文提出了一種優(yōu)化方法。在網(wǎng)絡(luò)結(jié)構(gòu)中,將U-Net 和ResNet 相結(jié)合,通過使用最小化光度重投影損失函數(shù),來處理單目視頻中相鄰幀間的遮擋問題,同時結(jié)合了自動掩蔽損失,解決了運(yùn)動物體帶來的干擾,使深度估計的結(jié)果更加清晰,減少了偽影問題。最后,使用KITTI數(shù)據(jù)集驗證了本文優(yōu)化方法的可行性,相比于目前四種單目深度估計模型算法,本文方法估計出深度圖的RMSE誤差和Sq Rel誤差都是較優(yōu)的。