楊 瑞, 朱 明
(中國科學(xué)技術(shù)大學(xué) 信息科學(xué)技術(shù)學(xué)院, 合肥 230027)
場景的深度信息廣泛應(yīng)用于SLAM[1], 3D目標(biāo)檢測[2]等算法中, 這些算法是導(dǎo)航任務(wù)中的關(guān)鍵算法, 因此深度估計任務(wù)在導(dǎo)航中至關(guān)重要. 本文工作聚焦于室內(nèi)導(dǎo)航場景下的單目深度估計算法. 在室內(nèi)簡單場景下, 常用的深度傳感器: 激光雷達(dá)、深度相機、雙目相機等, 因造價昂貴應(yīng)用并不廣泛, 而造價低廉的單目相機和2D激光雷達(dá)成為室內(nèi)導(dǎo)航機器人的基本配置.但2D激光雷達(dá)提供的深度信息有限, 僅有2D平面的局部深度信息, 而導(dǎo)航中, 全局的稠密深度信息才更具有價值. 近期很多研究聚焦于單目深度估計, 即僅通過單目圖像估計深度. 但是, 單目深度估計精度低, 對于導(dǎo)航場景并不適用. 因此, 本文提出一種融合2D激光雷達(dá)的單目深度估計算法, 來提高單目深度估計精度,使其能夠應(yīng)用于室內(nèi)導(dǎo)航任務(wù)中. 該算法融合2D激光雷達(dá)的尺度信息和單目圖像的紋理結(jié)構(gòu)信息, 使得深度估計的精度得到較高的提升.
近年來, 深度學(xué)習(xí)方法廣泛應(yīng)用于單目深度估計任務(wù)中. Eigen等人[3]首先將深度學(xué)習(xí)應(yīng)用于深度估計任務(wù)中, 其后續(xù)的工作[4]對上述工作進(jìn)行了拓展, 在預(yù)測深度的同時完成表面法向預(yù)測和語義分割. Fu等人[5]將連續(xù)值回歸問題轉(zhuǎn)化為量化的序數(shù)回歸問題. Hao等人[6]使用空洞卷積來提取多尺度信息, 并使用注意力機制來融合多尺度信息. Yin等人[7]從重建的三維場景中隨機抽取3個點, 以3個點確定的虛擬法向作為幾何約束來更精確恢復(fù)三維結(jié)構(gòu). Lee等人[8]在解碼階段使用局部平面引導(dǎo)層來得到原分辨率的深度圖, 而不是標(biāo)準(zhǔn)的上采樣層. Huynh等人[9]將非局部共面性約束與深度注意力體(DAV)合并到網(wǎng)絡(luò)中, 通過平面結(jié)構(gòu)引導(dǎo)深度估計. Bhat等人[10]提出了一種基于Transformer的結(jié)構(gòu)塊, 將深度范圍劃分為多個單元, 每個單元的中心值自適應(yīng)估計每幅圖像, 并將單元中心線性組合得到深度值估計. 該方法達(dá)到目前單目深度估計的最好效果.
從單幅圖像估計深度缺乏絕對的尺度信息, 且精度較低, 因此, 通過稀疏的深度數(shù)據(jù)和單目圖像融合來估計密集深度成為熱門. Liao等人[11]首先提出使用2D激光雷達(dá)作為額外的深度輸入, 比只使用RGB圖像獲得更高的精度. 與文獻(xiàn)[11]不同的是, 文獻(xiàn) [12-14]中使用的稀疏深度信息不具有方向性和局部性, 其使用的深度是從深度圖全局隨機采樣的深度點或者是多線激光雷達(dá)的深度數(shù)據(jù), 這類問題更準(zhǔn)確地說是深度補全問題. Ma等人[12]使用全局隨機采樣的深度點和RGB圖像作為輸入, 通過簡單的編解碼結(jié)構(gòu)得到了更高的精度. Cheng等人[13]提出了卷積空間傳播網(wǎng)絡(luò), 為深度估計學(xué)習(xí)關(guān)聯(lián)矩陣, 采用一個線性傳播模型以循環(huán)卷積的形式傳播, 并通過深度卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)鄰近像素間的關(guān)聯(lián)關(guān)系. Park等人[14]提出了一種端到端的非局部空間傳播網(wǎng)絡(luò), 估計每個像素的非局部鄰域及其關(guān)聯(lián)矩陣.
本文主要工作如下: (1) 提出了一種融合2D激光雷達(dá)數(shù)據(jù)的單目深度估計網(wǎng)絡(luò); (2) 提出了一種運用通道注意力機制融合2D激光雷達(dá)特征和RGB圖像特征的方法; (3) 使用跳躍連接來獲得更多的細(xì)節(jié)信息; (4) 制作了帶有2D激光雷達(dá)數(shù)據(jù)的深度數(shù)據(jù)集. 實驗表明,本文算法對比單目深度估計和深度補全任務(wù)均取得更好的效果.
本文基于上述研究提出了一種端到端的融合2D激光雷達(dá)(以下簡稱雷達(dá))數(shù)據(jù)的單目深度估計網(wǎng)絡(luò).輸入為一張RGB圖像以及一張映射到二維圖像的雷達(dá)數(shù)據(jù)(如圖1所示). 輸出為深度圖(RGB圖像中每個像素位置對應(yīng)的深度值).
本文的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示. 首先輸入的RGB圖像和雷達(dá)數(shù)據(jù)分別通過特征提取網(wǎng)絡(luò)提取出多尺度特征,, 其中i =1,2,3,4, 分別表示4次下采樣后的特征. 設(shè)輸入的圖像尺寸為 W ×H, 則每一層特征對應(yīng)的尺寸為[ W/2i,H/2i]. 接著將特征和特征通過通道注意力特征融合模塊(CAM)融合. 得到的融合特征經(jīng)過ASPP[15]增大感受野, 輸出的特征通道數(shù)較大, 需要加入一層1 ×1卷積來改變特征通道數(shù). 接著通過3層CAM模塊以及跳躍連接上采樣層將特征恢復(fù)到[W/2,H/2]. 最后對該特征上采樣, 并經(jīng)過一層3 ×3卷積得到W ×H的深度圖.
本文為了融合RGB圖像和雷達(dá)的特征, 根據(jù)文獻(xiàn)[16]提出的通道注意力機制, 提出了一種通道注意力特征融合模塊, 如圖1所示. 對于提取的多尺度特征并不是每個通道都具有相同的作用, 因此, 針對特征的每個通道引入一個權(quán)重, 通過損失函數(shù)學(xué)習(xí)每個通道的權(quán)重, 使重要的特征強化, 不重要的特征減弱, 使特征指向性更強. 而RGB和雷達(dá)的特征是有關(guān)聯(lián)性的,因此, 本文將RGB與雷達(dá)的特征相互融合, 即雷達(dá)特征的權(quán)重由RGB特征產(chǎn)生, RGB特征的權(quán)重由雷達(dá)特征產(chǎn)生. 以下詳細(xì)介紹該模塊.
圖1 網(wǎng)絡(luò)結(jié)構(gòu)圖
首先, 分別對RGB和雷達(dá)特征進(jìn)行 3×3卷積,記得到的特征分別為 Ur, Ul, 尺寸分別為Cr×W′×H′,Cl×W′×H′. 這里Cr, Cl為 通道數(shù), W′, H′表示每個通道的長和寬. 再分別對Ur, Ul進(jìn)行全局池化:
其中, 下標(biāo)c 表示第c 個通道, zr, zl為對應(yīng)的輸出, 尺寸分別為Cr×1×1, Cl×1×1.
全局池化屏蔽了特征圖的空間分布信息, 同時獲取全局信息, 能夠更加準(zhǔn)確的計算通道的權(quán)重. 接下來通過兩層全連接層, 即1 ×1卷積以及非線性層(Sigmoid)學(xué)習(xí)每個通道的系數(shù):
卷積神經(jīng)網(wǎng)絡(luò)中, 下采樣是為了擴大感受野, 使每個卷積輸出都包含較大范圍的信息, 但在這個過程中圖像的分辨率不斷下降, 導(dǎo)致細(xì)節(jié)信息會逐漸丟失, 這對于要恢復(fù)和原圖像相同尺寸的深度估計任務(wù)來說并無益. 因此本文引入ASPP[15]. ASPP可以在擴大感受野的同時, 而不進(jìn)行下采樣, 減少下采樣帶來的信息丟失.
對于深度估計任務(wù), 空間域的信息非常重要. 而網(wǎng)絡(luò)下采樣中的池化操作丟失了部分空間域信息. 因此本文借鑒文獻(xiàn)[10,13]等的方法, 將特征提取網(wǎng)絡(luò)提取的特征通過跳躍連接的方式融入上采樣過程中,來豐富空間域的信息, 提升結(jié)果的細(xì)節(jié)信息. 如圖1所示, CAM模塊將融合得到融合特征, 并通過圖1中的跳躍連接上采樣結(jié)構(gòu)將融合特征通過張量拼接的方式, 融入上采樣過程中.
不同的損失函數(shù)對于最終的預(yù)測結(jié)果影響很大.深度估計任務(wù)中常用的損失函數(shù)是計算預(yù)測深度和真實深度y 的絕對值誤差. 而單純使用絕對值誤差缺乏深度圖結(jié)構(gòu)信息. 因此本文為了平衡結(jié)構(gòu)損失, 引入了以下?lián)p失函數(shù):
Ldepth為預(yù)測深度y ? 和實際深度y 之間的L1損失:
Lgrad表示深度圖梯度的L1損失:
其中, gx表 示深度圖的 x 方 向梯度, gy表示深度圖的y 方向梯度.
Lnormal為 實際深度圖的表面法向n 與預(yù)測深度圖表面法向n ?的L1損失, 表面法向可以通過Sobel算子估計得到n =(-?x(y),-?y(y),1). 則表面法向的損失表示為:
LSSIM使用了結(jié)構(gòu)相似性SSIM[17], 用于衡量兩幅圖片的相似度指標(biāo), 因SSIM的范圍是[0, 1]且為1時兩幅圖像一樣, 所以這里損失函數(shù)定義為式(11)形式:
SSIM為計算兩幅圖像的結(jié)構(gòu)相似性操作, 在計算時需將兩幅圖片歸一化操作.
這里的系數(shù)λ ,α,β,γ用于平衡各項損失, 本文在后續(xù)實驗中取λ =0.3, α =0.4, β=1.8, γ =2.0.
本文分別在公開數(shù)據(jù)集NYUDv2[18]和自制數(shù)據(jù)集上進(jìn)行了算法的驗證實驗.
NYUDv2數(shù)據(jù)集是使用Kinect V1深度相機采集的室內(nèi)場景數(shù)據(jù)集. 數(shù)據(jù)集包含120k對RGB圖和深度圖樣本, 654對測試樣本. 原始數(shù)據(jù)的RGB圖和深度圖的分辨率為 6 40×480. 本文訓(xùn)練數(shù)據(jù)選取50k的訓(xùn)練樣本, 使用文獻(xiàn)[18]提供的方法填充缺失的深度值.因本文算法需要2D激光雷達(dá)數(shù)據(jù), 而公開數(shù)據(jù)集中沒有提供, 所以本文從已有深度圖中模擬雷達(dá)數(shù)據(jù). 分為以下幾個步驟: (1) 使用文獻(xiàn)[18]提供的方法對齊深度圖和RGB圖并補全缺失的深度; (2) 使用文獻(xiàn)[18]中的算法估計每張圖片的重力方向; (3) 將深度圖轉(zhuǎn)化為3D點云圖; (4) 以深度圖正中心位置對應(yīng)的點云為基準(zhǔn), 垂直重力方向作平面, 將平面截取的所有點云作為模擬的雷達(dá)數(shù)據(jù); (5) 將模擬的雷達(dá)數(shù)據(jù)重新映射回2D圖像.
為了驗證本文算法的有效性, 本文制作了帶有2D激光雷達(dá)數(shù)據(jù)的數(shù)據(jù)集. 數(shù)據(jù)采集使用如圖2所示的小車, 配備Kinect V1以及2D激光雷達(dá). 采集數(shù)據(jù)前首先對深度相機進(jìn)行標(biāo)定, 并測量雷達(dá)和深度相機之間的相對位置. 為避免相機和雷達(dá)位姿校準(zhǔn), 在安裝時使用水平儀進(jìn)行調(diào)校, 使相機和雷達(dá)之間保持水平以及相對位姿一致.
圖2 數(shù)據(jù)集采集平臺
采集完數(shù)據(jù)后需對原始數(shù)據(jù)做預(yù)處理, 處理過程如圖3所示. (1) 通過時間戳同步采集的原始RGB圖,深度圖和雷達(dá)數(shù)據(jù); (2) 使用文獻(xiàn)[18]的算法對齊深度圖和RGB圖并補全深度圖; (3) 將深度圖轉(zhuǎn)化為3D點云圖; (4) 使用式(12)將雷達(dá)數(shù)據(jù)與深度圖對齊并映射到2D圖像, 映射到圖像時需要去除超出圖像范圍的點, 以及深度值小于0的點(2D激光雷達(dá)可測量360°,所以會出現(xiàn)小于0的值).
圖3 自制數(shù)據(jù)集制作流程
其中, r, θ 是雷達(dá)數(shù)據(jù)極坐標(biāo)形式的距離和夾角. u為映射后二維圖像 x 軸 坐標(biāo), u ∈[0,640),u∈N, v為映射后二維圖像y 軸坐標(biāo), v ∈[0,480),v∈N . fx, fy, cx, cy為相機內(nèi)參. dx, dy, dz為相機與雷達(dá)的相對位置, 如圖2所示.
最終, 共采集24k組數(shù)據(jù). 選取其中的16k組數(shù)據(jù)作為訓(xùn)練集, 800組作為測試集. 對比圖4和圖5中的雷達(dá)數(shù)據(jù), 可以看出, 實際雷達(dá)數(shù)據(jù)比模擬的雷達(dá)數(shù)據(jù)更加稀疏.
本文算法使用深度學(xué)習(xí)框架PyTorch 1.7實現(xiàn). 訓(xùn)練和測試使用11 GB顯存的NVIDIA GeForce GTX 1 080 Ti GPU. 本文做了多組特征提取網(wǎng)絡(luò)的對比實驗, 最終, RGB圖像的特征提取網(wǎng)絡(luò)選擇ResNet50[19], 雷達(dá)數(shù)據(jù)的特征提取網(wǎng)絡(luò)選擇ResNet18達(dá)到最好的效果.特征提取網(wǎng)絡(luò)的參數(shù)使用ImageNet數(shù)據(jù)集上的預(yù)訓(xùn)練模型初始化. 采用的訓(xùn)練優(yōu)化器是SGD, 起始的學(xué)習(xí)率設(shè)置為0.01, 并且當(dāng)連續(xù)5個epoch, rel指標(biāo)(見下文)沒有降低, 則將學(xué)習(xí)率調(diào)整為原學(xué)習(xí)率10%. 在大約40個epoch達(dá)到穩(wěn)定.
對于NYUDv2和本文自制數(shù)據(jù)集, 深度圖和RGB圖分辨率均為6 40×480. 為了與文獻(xiàn)[3]保持一致, 首先對深度圖和RGB圖均下采樣到3 20×240, 再以中心為基準(zhǔn)裁剪圖像, 得到 3 04×228的輸入數(shù)據(jù). 網(wǎng)絡(luò)輸出的深度圖大小也為3 04×228.
本文采用以下幾種方法對訓(xùn)練數(shù)據(jù)進(jìn)行增強: (1) 對RGB圖和深度圖隨機旋轉(zhuǎn), 旋轉(zhuǎn)角度為[ -5°,5°]; (2) 對RGB圖和深度圖隨機水平翻轉(zhuǎn), 概率為0.5; (3) 對RGB圖的亮度、對比度、飽和度分別隨機調(diào)整, 三者的范圍均為[0.6, 1.4]; (4) 將RGB圖標(biāo)準(zhǔn)化, 使用的均值為[0.485, 0.456, 0.406], 標(biāo)準(zhǔn)差為[0.229, 0.224, 0.225].
本文使用以下幾個評價指標(biāo)來評價深度估計算法的性能:
為了比較已有的單目深度估計算法, 本文在公開數(shù)據(jù)集NYUDv2上測試了算法的效果. 與本文相關(guān)的深度估計算法主要有純單目深度估計算法(僅使用RGB圖像)和深度補全算法. 對于深度補全算法[12-14],因其原文的稀疏深度信息是全局的, 本文不與其原始效果比較. 本文將文獻(xiàn)[12-14]的輸入換成本文處理后的NYUDv2數(shù)據(jù)集訓(xùn)練測試. 表1為本文算法與現(xiàn)有算法的比較結(jié)果. 其中, *表示使用雷達(dá)數(shù)據(jù), 其余僅使用RGB圖, ↑表示數(shù)值越大越好, ↓表示數(shù)值越小越好從表1中可以看到, 本文提出的算法多項指標(biāo)超過了目前最好的純單目深度估計算法[10], 并且相較于深度補全算法也有一定的提升. 相較于同樣使用2D激光雷達(dá)數(shù)據(jù)的[11], 本文在各個指標(biāo)上均有較大的提升. 圖4展示了部分預(yù)測結(jié)果, 從結(jié)果中看出, 本文算法能夠較準(zhǔn)確的預(yù)測圖像的深度.
圖4 NYUDv2數(shù)據(jù)集預(yù)測結(jié)果
表1 NYUDv2數(shù)據(jù)集效果對比
為了驗證算法的有效性, 本文制作了帶有2D激光雷達(dá)數(shù)據(jù)的深度數(shù)據(jù)集, 并對比了其他算法在本文自制數(shù)據(jù)集上的表現(xiàn). 本文自制數(shù)據(jù)集主要為室內(nèi)導(dǎo)航場景, 存在很多墻面等低紋理場景, 以及不同光照的場景, 并且雷達(dá)數(shù)據(jù)與深度數(shù)據(jù)也存在噪聲誤差, 所以整體難度比較大. 表2展示了不同方法在本文數(shù)據(jù)集上表現(xiàn). 其中, 文獻(xiàn)[10]不使用雷達(dá)數(shù)據(jù). 從表中的數(shù)據(jù)可以看到, 本文的算法依舊取得了較好的效果, 并且對噪聲具有魯棒性. 圖5為部分預(yù)測結(jié)果.
圖5 自制數(shù)據(jù)集預(yù)測結(jié)果
表2 自制數(shù)據(jù)集效果對比
為了驗證雷達(dá)數(shù)據(jù)的加入帶來的效果, 以及不同結(jié)構(gòu)和特征提取網(wǎng)絡(luò)帶來的影響, 本文針對NYUDv2數(shù)據(jù)集做了一系列消融實驗.
為了比較加入雷達(dá)數(shù)據(jù)的影響, 本文去掉了雷達(dá)特征提取部分和相關(guān)聯(lián)的CAM模塊, 其余保持不變,做了對比試驗, 結(jié)果如表3. 從表中可以看出, 雷達(dá)數(shù)據(jù)使rel, rms分別降低55.4%, 46.1% (越低越好), δ1, δ2,δ3分別提高了18.9%, 3.60%, 0.91% (越高越好).
表3 2D激光雷達(dá)數(shù)據(jù)的影響
另外, 為比較CAM模塊作用, 本文將CAM模塊替換為普通的張量拼接, 實驗結(jié)果如表4. CAM模塊使rel, rms分別降低12.7%, 7.28% (越低越好), 而 δ1,δ2, δ3三個指標(biāo)因本來就比較高, 提升不明顯.
表4 注意力特征融合模塊(CAM)的影響
針對不同的特征提取網(wǎng)絡(luò), 本文也做了幾組對照實驗, 如表5所示. 這里分別對比了ResNet[19], Dense-Net[20], MobileNetv2[21]的影響, 其中, R表示ResNet,D表示DenseNet, M表示MobileNet, 前者表示RGB特征提取網(wǎng)絡(luò)后者為雷達(dá)特征提取網(wǎng)絡(luò). 從數(shù)據(jù)中可以看到, DenseNet與ResNet結(jié)果差距不大, 且參數(shù)量較大. 而在輕量級網(wǎng)絡(luò)MobileNetv2中, 本文的方法在大量減少參數(shù)量的同時, 精度降低較小, 且超越了已有的單目深度估計算法. 在實際運用中, 可以考慮更輕量的MobileNetv2. 后續(xù)工作將基于輕量級網(wǎng)絡(luò), 并結(jié)合知識蒸餾等方法壓縮加速模型, 以達(dá)到導(dǎo)航場景的實時性要求.
表5 特征提取網(wǎng)絡(luò)的影響
本文提出了一種融合2D激光雷達(dá)的單目深度估計網(wǎng)絡(luò), 使用跳躍連接提高了上采樣的效果, 并提出一種通過通道注意力機制融合RGB特征和雷達(dá)特征的方法. 相較于現(xiàn)有的單目深度估計以及深度補全方法,均取得了更好的效果. 另外, 針對不同的結(jié)構(gòu)和特征提取網(wǎng)絡(luò), 本文也做了一系列對照試驗. 下一步研究工作將著重于將本文深度估計算法應(yīng)用到SLAM以及3D目標(biāo)檢測中, 構(gòu)建單目視覺導(dǎo)航系統(tǒng).