劉 斌,李港慶*,安澄全,王水根,王建生
(1.哈爾濱工程大學(xué)信息與通信工程學(xué)院,哈爾濱 150001;2.艾睿光電科技有限公司,山東煙臺 264000)
從單個圖像中獲取深度信息是一件令人興奮的事情,近幾年來,人們對可見光領(lǐng)域的單目測距[1-2]有了諸多探索。通過從單眼視頻序列進行圖像重建從而估計場景深度和相機姿態(tài)逐漸成為單目無監(jiān)督測距的主流。其中最具代表性之一的便是MonoDepth2[3],該算法的提出解決了一直困擾人們的遮擋、低紋理等問題,使得單目測距在可見光領(lǐng)域趨于成熟。然而在低能見度的場景,可見光圖像提供的信息很有限,無法為測距提供有效的場景信息。紅外圖像[4-5]在低能見度場景下也能提供豐富的場景信息,因而從紅外圖像中獲得距離信息變得必要。然而雖然紅外圖像在低能見度的情況下相對于可見光有一定的優(yōu)勢,但是紅外圖像缺乏紋理、色彩單一,因而在圖像重建的過程中難以尋找到目標(biāo)圖像上對應(yīng)的像素點。本文根據(jù)紅外圖像的特性,將邊緣信息應(yīng)用于圖像重建,降低圖像重建時像素點的誤匹配。另外本文在網(wǎng)絡(luò)結(jié)構(gòu)上的改進也顯著改善了預(yù)測深度的邊緣模糊問題并且提升了運行速度。
基于深度學(xué)習(xí)的單目測距可以應(yīng)用于諸多領(lǐng)域,因而越來越受到人們的關(guān)注。然而,將深度預(yù)測視為監(jiān)督回歸問題,需要大量的相應(yīng)地面真實深度數(shù)據(jù)進行訓(xùn)練,僅在一系列環(huán)境中記錄真實深度數(shù)據(jù)是一個非常困難的問題。Godard 等[6]以更容易獲得的雙目立體素材代替了訓(xùn)練期間真實深度數(shù)據(jù)的使用,使卷積神經(jīng)網(wǎng)絡(luò)[7]能夠?qū)W習(xí)執(zhí)行單個圖像深度估計,利用極線幾何約束,通過訓(xùn)練圖像重建損失的網(wǎng)絡(luò)來生成視差圖像,并且提出了一種訓(xùn)練損失,該損失增強了相對于左右圖像產(chǎn)生的視差之間的一致性,可以提高性能和魯棒性。Zhou 等[8]通過訓(xùn)練一個觀察圖像序列的模型來獲得場景深度,該模型旨在通過預(yù)測可能的相機運動和場景結(jié)構(gòu)來解釋其觀察結(jié)果,采用端到端方法,允許模型直接從輸入像素映射到自我運動的估計值(參數(shù)化為6 自由度轉(zhuǎn)換矩陣)和基礎(chǔ)場景結(jié)構(gòu)(參數(shù)化為參考視圖下的每像素深度圖)。Godard 等[3]隨后又在Zhou 的網(wǎng)絡(luò)架構(gòu)上,提出了三種損失創(chuàng)新,這些創(chuàng)新相結(jié)合,在使用單眼視頻、雙目素材[9]或兩者同時進行訓(xùn)練時,可極大地改善單眼深度估計:一種外觀匹配損耗,可解決使用單眼時出現(xiàn)的像素被遮擋的問題監(jiān)督;一種簡單的自動遮罩方法,可以忽略在單眼訓(xùn)練中未觀察到相對攝像機運動的像素;多尺度外觀匹配損失,以輸入分辨率執(zhí)行所有圖像采樣,從而減少了深度偽影。
由于紅外圖像反映的是物體的熱輻射[10],并沒有提供場景深度信息,然而在汽車輔助駕駛[11]和某些軍事領(lǐng)域[12],紅外圖像的深度數(shù)據(jù)顯得十分重要?,F(xiàn)有的無監(jiān)督單目測距方法在可見光領(lǐng)域取得了比較好的效果,然而在紅外領(lǐng)域卻不適用。本文提出一種基于紅外圖像的測距模型,主要工作如下:1)針對紅外圖像的特性提出了新穎的邊緣損失函數(shù);2)采用雙向特征金字塔網(wǎng)絡(luò)(Bi-directional Feature Pyramid Network,BiFPN)[13]融合多尺度深度特征,解決深度圖像邊緣模糊問題;3)用CSPNet[14]降低網(wǎng)絡(luò)復(fù)雜度,提高運行速度。
本文模型使用連續(xù)的視頻幀圖片作為數(shù)據(jù)集輸入網(wǎng)絡(luò)進行訓(xùn)練,利用單目視頻訓(xùn)練的一大難點在于相機在獲取每一幀圖片時相機的位姿是在不斷變化的。本文模型使用兩個網(wǎng)絡(luò):一個網(wǎng)絡(luò)估計每幀圖片的深度,另一個網(wǎng)絡(luò)估計兩幀圖片之間相機的位姿變化。網(wǎng)絡(luò)整體框架如圖1 所示。
圖1 本文模型的網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Network structure of the proposed model
取相機連續(xù)拍攝的圖像分別為It、Is,其中It是目標(biāo)圖像,Is是It的上下幀圖像。將It送入深度估計網(wǎng)絡(luò)得到其深度圖Dt,將It和Is送入姿勢網(wǎng)絡(luò)得到兩幀之間相機的位姿變化T。在這個過程中,取It圖像上固定一點pt,It轉(zhuǎn)化為深度圖Dt之后該點變?yōu)镈t(p),同時該點在Is上的投影點表示為ps。由于之前的兩個網(wǎng)絡(luò)分別得到了pt點的深度信息以及該點與上下幀該點投影點的位姿矩陣,根據(jù)幾何約束,pt與ps有以下的約束關(guān)系:
式中:K是相機內(nèi)參,可以通過自己標(biāo)定獲取,T是姿態(tài)網(wǎng)絡(luò)所得到的連續(xù)幀之間的位姿矩陣,Dt(p)是深度網(wǎng)絡(luò)所估計的pt點的深度。如果t時刻圖片每一點的深度Dt和t時刻與s時刻之間的位姿變化T都能獲取,那就建立起了t時刻圖片與其上下幀圖片每一像素點之間的對應(yīng)關(guān)系。將一點的關(guān)系推廣到整幅圖像,得到It上的每一點的深度和Tt→s,就能重構(gòu)出一幅圖像。
重構(gòu)出的圖像與真實圖像It之間的差異就構(gòu)成了訓(xùn)練過程的監(jiān)督信號,通過訓(xùn)練將不斷逼近于It,就能得到越接近于真實值的Dt。在該過程中并沒有用到真實的深度信息,因此本文方法是完全無監(jiān)督的。
損失函數(shù)主要由四部分構(gòu)成,分別是重投影損失、邊緣平滑損失、自動掩膜損失和一種新穎的邊緣損失。
1)重投影損失:為了同時從整體和細節(jié)來更好地衡量重投影誤差,重投影損失也由兩個部分組成,分別是結(jié)構(gòu)相似性度量函數(shù)和L1 范數(shù)損失函數(shù)。表達式如下:
其中結(jié)構(gòu)相似性(Structural SIMilarity,SSIM)[15]的表達式為:
其中:μ是平均值,在損失函數(shù)中就是圖像像素點的平均值;σ是方差,在損失函數(shù)中也就代表像素點的方差;C1和C2是用來維持穩(wěn)定的常數(shù)。SSIM 的取值范圍是0~1,兩幅圖像越是相似,SSIM的值就越接近1。這里的超參數(shù)α的取值為0.85。
在兩個連續(xù)圖像計算重投影誤差時,現(xiàn)有的自我監(jiān)督深度估計方法會將重投影誤差平均到兩個圖像中,這可能會導(dǎo)致較高的光度誤差。這種有問題的像素主要來自兩類:由于圖像邊界處的自運動而導(dǎo)致的視線外的像素,以及被遮擋的像素??梢酝ㄟ^在重投影損失中掩蓋此類像素來減少視線外像素的影響,但這不能解決遮擋問題,因為平均重投影會導(dǎo)致模糊的深度不連續(xù)性。
本文借鑒MonoDepth2 的方法,在每個像素上使用上下幀光度誤差的最小值進行損失計算而不是對其進行平均。本文最終的每像素光度損失為:
2)邊緣平滑損失:邊緣平滑損失用于消除深度圖中的噪聲,深度梯度感知項使輸出深度圖更平滑,同時邊緣感知項則鼓勵模型更好地學(xué)習(xí)物體邊緣信息。表達式如下:
3)自動掩膜損失:本文還參考了MonoDepth2 的方法,添加了一個自動掩膜損失μ,其表達式如下:
其中[ ]是艾弗森(Iverson)括號。在照相機和另一個物體都以相似的速度移動的情況下,μ可防止圖像中保持靜止的像素損失很小而不利于梯度下降;同樣,當(dāng)相機靜止時,該損失可以濾除圖像中的所有像素。這種對損失的簡單修改帶來了顯著的改進。
4)針對紅外圖像的邊緣損失函數(shù):
其中Trans=KTt→t+1Dt(p)K-1。
由于紅外圖像與可見光圖像特性的不同,灰度損失和SSIM 構(gòu)成的光度損失函數(shù)已經(jīng)不能滿足紅外圖像單目測距的需要。將圖像重建作為監(jiān)督信號的原理是通過從源圖像的像素點根據(jù)預(yù)測深度和相機姿態(tài)來尋找目標(biāo)圖像的像素點計算損失,從而更新深度和相機姿態(tài)以獲得準(zhǔn)確的深度和相機姿態(tài)。可見光圖像擁有RGB 三個通道的像素值,有豐富的細節(jié)紋理,因而可以比較容易地在目標(biāo)圖像尋找到源圖像的像素點。然而紅外圖像缺乏紋理,當(dāng)程序讀取紅外圖像時,它的RGB 三個通道為相同的像素值,因而在目標(biāo)圖像中尋找源圖像的相同的像素點時,很容易將附近相同的像素值的像素點當(dāng)成源圖像的同一個像素點,這樣會導(dǎo)致錯誤的深度和姿態(tài)估計。因此,根據(jù)紅外低紋理造成像素點對之間無法精準(zhǔn)配對的問題,本文提出了一種新的損失——圖像邊緣損失。本文先提取紅外圖像的邊緣,然后將源圖像和目標(biāo)圖像的邊緣進行匹配,由于邊緣的像素點易于區(qū)分,可以比較精準(zhǔn)地定位,從而較為準(zhǔn)確地更新圖像預(yù)測深度和相機估計姿態(tài)。本文使用Laplacian 算子(該算子相對于其他算子而言,能對任何走向的界線和線條進行銳化,更利于重投影損失計算)實現(xiàn)圖像邊緣的提取如圖2。
圖2 圖片邊緣提取Fig.2 Image edge extraction
最終的損失函數(shù)為:
其中:μ是自動掩膜損失,λ和β是超參數(shù),在實驗中都設(shè)置為0.001,該數(shù)值通過多次調(diào)整訓(xùn)練確定。
本文所用的網(wǎng)絡(luò)模型中的兩個網(wǎng)絡(luò)最初都是使用標(biāo)準(zhǔn)的ResNet18 網(wǎng)絡(luò)為基礎(chǔ)來搭建的,ResNet18 的一個基本模塊如圖3 所示。
圖3 ResNet基本模塊結(jié)構(gòu)Fig.3 Basic module structure of ResNet
本文不再單純地使用ResNet18 作為深度以及姿勢估計網(wǎng)絡(luò),而是使用CSPNet 對原先的ResNet18 進行改進。改進之后的ResNet18 基本模塊如圖4 所示。
圖4 CSPNet改進后基本模塊結(jié)構(gòu)Fig.4 Basic module structure of improved CSPNet
CSPNet 的主要工作思想是將特征圖拆成兩個部分,一部分進行卷積操作,另一部分和上一部分卷積操作的結(jié)果直接進行拼接。該操作可以很大程度上減少計算量同時降低內(nèi)存成本,并且使用該結(jié)構(gòu)可以增強CNN 的學(xué)習(xí)能力,能夠在輕量化的同時保持準(zhǔn)確性。
增加BiFPN 層,如圖5 所示,可以更好地利用不同尺度深度圖之間的關(guān)聯(lián)性,以解決深度圖像邊緣模糊的問題。以往的方法是在4 個不同尺度的深度圖都上采樣到原圖像分辨率上計算損失,忽略了不同尺度之間的關(guān)聯(lián)性。BiFPN 層通過下采樣、上采樣和跨越鏈接來加強不同尺度之間特征融合的效果。
圖5 BiFPN結(jié)構(gòu)Fig.5 Structure of BiFPN
BiFPN 是在PANet[16]的基礎(chǔ)上改進得來的,PANet 的結(jié)構(gòu)如圖6 所示。首先,刪除那些只有一個輸入邊的節(jié)點。如果一個節(jié)點只有一個輸入邊且沒有特征融合,那么它將對旨在融合不同特征的特征網(wǎng)絡(luò)貢獻較小,這導(dǎo)致簡化的雙向網(wǎng)絡(luò)。其次,如果原始輸入與輸出節(jié)點處于同一級別,則在原始輸入和輸出節(jié)點之間添加一條額外的邊,以便在不增加成本的情況下融合更多功能。第三,與PANet 僅具有一個自上而下和一個自下而上的路徑不同,BiFPN 將每個雙向(自上而下和自下而上)路徑視為一個要素網(wǎng)絡(luò)層,并重復(fù)相同的層多次以啟用更多高級功能融合。
圖6 PANet結(jié)構(gòu)Fig.6 Structure of PANet
當(dāng)融合具有不同分辨率的特征時,一種常見的方法是先將它們的大小調(diào)整為相同的分辨率,然后對其進行匯總。金字塔注意力網(wǎng)絡(luò)引入了全局自注意力上采樣以恢復(fù)像素定位。以前的所有方法均等地對待所有輸入特征,沒有區(qū)別。但是,由于不同的輸入特征圖的分辨率不同,因此它們通常對輸出特征圖的貢獻不均。為了解決這個問題,本文為每個輸入增加一個額外的權(quán)重,并讓網(wǎng)絡(luò)學(xué)習(xí)每個輸入功能的重要性?;诖怂枷耄疚奶岢隽艘环N加權(quán)融合方法:
快速歸一化融合方法:
其中wi≥0 是通過在每個wi之后應(yīng)用ReLU(Rectified Linear Unit)來確保的,而ε=10-4是一個小數(shù)值,以避免數(shù)值不穩(wěn)定。同樣,每個歸一化權(quán)重的值也介于0~1。如圖5 所示BiFPN 第3 層的輸出如下:
其中:是自頂向下路徑上第3 級的中間特征,而是自下而上路徑上第3 級的輸出特征。所有其他特征均以類似方式構(gòu)造。值得注意的是,為了進一步提高效率,本文使用深度可分離卷積進行特征融合,并在每次卷積后添加批處理規(guī)范化和激活。
實驗平臺所使用的操作系統(tǒng)為Ubuntu 18.04,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和測試模型在Pytorch1.4 架構(gòu)下搭建,所使用的服務(wù)器為RTX 6000。數(shù)據(jù)集使用HD1280 紅外相機采集,供訓(xùn)練的數(shù)據(jù)集一共有19 000 幅,另外1 000 幅作驗證集。用Eigen等[17]所提出的數(shù)據(jù)拆分法對數(shù)據(jù)進行拆分。
模型使用自適應(yīng)矩估計(Adam)梯度下降法訓(xùn)練了20輪,批處理大小為12,輸入/輸出分辨率為800×600。對于前15 輪,學(xué)習(xí)率大小為10-4,剩下的5 輪,將學(xué)習(xí)率降至10-5。最終推理的結(jié)果如圖7 所示。
圖7 推理結(jié)果Fig.7 Inference result
與直接用MonoDepth2 可見光模型推理紅外圖像比較,如圖8 所示。結(jié)果顯示本文模型相較于MonoDepth2 模型在紅外圖像上有更好的效果。
圖8 本文模型與MonoDepth2模型推理效果對比Fig.8 Comparison of inference effects between proposed model and MonoDepth2 model
采用BiFPN 結(jié)構(gòu)前后推理圖比較如圖9 所示。可以看出,在加入BiFPN 多尺度特征融合之后,圖像的細節(jié)更加明顯,邊緣更加清晰,比如圖中電線桿和自行車,加入BiFPN 結(jié)構(gòu)之后,邊緣模糊問題有了明顯的改善。
圖9 加入BIFPN結(jié)構(gòu)前后模型推理效果對比Fig.9 Comparison of model inference effects before and after adding BIFPN structure
加入邊緣損失函數(shù)與未加入邊緣損失函數(shù)推理圖如圖10 所示。
圖10 加入邊緣損失函數(shù)前后模型推理效果對比Fig.10 Comparison of model inference effects before and after adding edge loss function
本文比較了采用ResNet 和CSPNet 訓(xùn)練出來的權(quán)重對圖片深度推理的速度,詳情見表1。結(jié)果顯示,采用CSPNet 替代ResNet 將推理速度提升了20 個百分點左右并且精度幾乎不會下降。
表1 兩種網(wǎng)絡(luò)結(jié)構(gòu)推理速度對比Tab.1 Comparison of inference speed between two network structures
兩種網(wǎng)絡(luò)的精度對比如表2 所示,abs rel 表示絕對值相對誤差(Absolute relative error),sq rel 表示平方根相對誤差(Square root relative error),δ定義為圖像中深度誤差小于某閾值。結(jié)果顯示,采用CSPNet 替代ResNet 推理精度沒有顯著下降。
表2 兩種網(wǎng)絡(luò)結(jié)構(gòu)推理精度對比Tab.2 Comparison of inference precision between two network structures
自我監(jiān)督的單眼訓(xùn)練通常在移動攝像機和靜態(tài)場景的假設(shè)下進行。當(dāng)這些假設(shè)失敗時,例如當(dāng)相機靜止不動或場景中有物體運動時,性能可能會受到很大影響。對于在訓(xùn)練期間通常觀察到運動的物體,此問題可能會在預(yù)測的測試時間深度圖中顯示為“無限深度”的“洞”。如圖11 所示。
圖11 兩個數(shù)據(jù)集訓(xùn)練權(quán)重推理效果對比Fig.11 Comparison of training weight inference effects between two datasets
為了解決此問題,可以通過語音分割等方法先將動的物體,例如車、人先分割出來不參與損失計算;但是此方法又需要一個神經(jīng)網(wǎng)絡(luò)來做語義分割的工作,使得本文模型更加龐大。因此本文從數(shù)據(jù)集入手,將數(shù)據(jù)集中所有含有動態(tài)場景的數(shù)據(jù)剔除出去形成新的數(shù)據(jù)集,訓(xùn)練新數(shù)據(jù)集很好地解決深度估計為無窮遠的問題。當(dāng)然該方法對數(shù)據(jù)集比較嚴格,不過也不失為解決無窮遠問題的一個好辦法。
針對夜間場景深度感知的需求,本文將單目測距應(yīng)用到紅外領(lǐng)域,并提出了一系列改進使得單目測距更加適用于紅外圖像。首先提出了針對紅外圖像的特性提出了新穎的邊緣損失函數(shù),解決了紅外圖像低紋理難以計算損失的特性;其次采取了BiFPN 融合多尺度深度特征,解決了深度圖邊緣模糊問題;最后用CSPNet 網(wǎng)絡(luò)結(jié)構(gòu)改進原本的網(wǎng)絡(luò)結(jié)構(gòu),降低網(wǎng)絡(luò)復(fù)雜度,提高運行速度。但是本文方法在一些方面仍然存在困難。正如上文所說的動態(tài)場景問題,本文只是通過修改數(shù)據(jù)集規(guī)避了這一問題,并未從根本上解決這個問題,這也是以后需要進一步深入研究并改進的地方。