作者:Gus
來源:微信公眾號|3D視覺工坊(系投稿)
3D視覺精品文章匯總:https://github.com/qxiaofan/awesome-3D-Vision-Papers/
單目深度估計模型Monodepth2對應的論文為Digging Into Self-Supervised Monocular Depth Estimation,由倫敦大學學院提出,這篇論文的研究目標是從單目RGB圖像中恢復出對應的深度,由圖1所示:該網絡可以從單目圖像中恢復對應的深度,圖中不同顏色代表不同的深度。
論文地址:在公眾號「計算機視覺工坊」,后台回復「Monodepth2」,即可直接下載。
圖1 Monodepth深度估計圖
目前單目深度估計的難點,同時也是本論文着重解決的方向:
1、圖像序列中存在遮擋。
2、當場景中發生物體運動的情況,如場景中運動的車輛,此時圖像序列不僅存在因相機位姿而產生的圖像改變,還存在因運動物體而產生的圖像亮度的改變
從理論上說:在未給定第二幀圖像的情況下估計圖像對應的絕對或相對深度值是一個病態問題,因為無法通過構建三角化求解對應深度。然而,從直覺上說:人類通過在現實場景中生活、學習,獲得了單眼估計深度的能力。因此,類比人類的學習能力,利用深度學習技術,從單目圖像中獲取對應的深度是可行的。該篇論文聯合相機位姿估計與單目深度估計兩項任務,使單目深度估計成為了可能。具體來說便是:首先利用單目深度估計網絡進行逆深度估計,需要注意的是:該逆深度被限定在0與1之間,也就是說,該網絡估計的為相對逆深度。然后進行相機位姿估計。最后利用相機位姿與視差計算亮度投影誤差,作為網絡模型的損失函數,利用梯度下降進行參數更新。接下來,本文將分三部分對Monodepth2模型進行介紹,分別是Monodepth2中的逆深度估計模塊,相機位姿Pose估計模塊,以及訓練中使用的損失函數。
一、逆深度估計模塊
該模塊的作用是從單目圖像中估計圖像每個像素點的逆深度,在求解出逆深度之后,只需要對其取倒數便可獲取對應的深度。這里需要說明,估計出來的逆深度被限定在0到1之間,與以真實深度存在一個比例因子,因此只可表示相機與場景的相對距離。該深度估計模塊又可分為兩個子模塊,分別為特征編碼子模塊與特征解碼子模塊。特征編碼子模塊采用Res18模型結構,對輸入圖像進行32倍下采樣,共生成5級特征,級數越高,特征空間分辨率越低(表示能力越強),但特征個數越多(對應通道部分)。特征解碼子模塊與U-Net解碼模塊部分一致,從第5級開始,聯合特征編碼子模塊中相同分辨率的特征進行深度估計,該模塊輸出4級逆深度map(第五級因空間分辨率過低而不求解對應的逆深度),級數越低,空間分辨率越大,最大的空間分辨率與輸入圖像保持一致。
二、相機位姿Pose估計模塊
該模塊的作用為:由連續幀之間圖像的變化情況,估計出相機之間的位姿(相機的運動情況)。該模塊有兩種處理情況,以下將對這兩種情況分別介紹。
2.1 連續幀情況
首先進行符號的說明,用-1代表進行逆深度估計圖像的前一幀圖像,1代表進行逆深度估計圖像的后一幀圖像,0代表進行逆深度估計的當前圖像。在該情況下利用相機位姿估計模塊分別估計:從前一幀圖像-1到當前圖像0之間的位姿,與從當前圖像0到后一幀圖像1之間的位姿。
2.2 雙目情況
同樣進行符號說明,用0代表進行逆深度估計的當前圖像(左目圖像),"s"代表當前0圖像對應的右目圖像。在該情況下,因雙目相機的位姿已固定,因此位姿也已固定(不需要利用pose估計模塊進行估計)。
2.3 相機位姿模塊結構
該模塊同樣分為特征編碼子模塊與特征解碼子模塊,其中該模塊中的特征編碼子模塊與深度估計模塊中的特征編碼子模塊結構一致,但參數獨立,同樣為Res18模型結構。因相機位姿求取的是圖像連續幀之間的剛性運動,因此在該論文中,利用空間分辨率最低的第5級特征(抽象能力最強)輸入進對應該模塊的特征解碼子模塊來進行位姿估計。位姿解碼子模塊為3層卷積結構,對輸入的第5級特征進行解碼,並回歸出對應每個像素點的運動信息。例如,位姿估計網絡的輸入為(256,6,20),那么經過解碼回歸之后輸出的特征為(12,6,20)。對維度1(對應長),維度2(對應寬)求取均值可得連續幀之間的軸角與平移向量。在求得軸角后可通過羅德里格旋轉公式求取旋轉矩陣,如下圖2所示。
圖2 羅德里格旋轉公式
三、訓練中使用的損失函數
本論文的創新點集中在對損失函數的改進。分別提出了:1.一種適用於單目遮擋情況下的匹配損失函數。2.一種在單目情況下檢測相機間有無運動的標記方法。3.一種多尺度的匹配損失函數。以下將對這三種情況分別進行探討。
3.1 一種適用於單目遮擋情況下的匹配損失函數
絕大多數單目深度(也包括光流與立體匹配)無監督方法都采用亮度投影誤差(photometric reprojection error)作為訓練的損失函數,亮度投影誤差被定義為:利用深度與相機位姿對源圖像進行采樣,並與目標圖像進行比對之后得到的誤差,如下圖3所示
具體來說便是:利用相機位姿與深度獲得采樣坐標,利用采樣坐標對源圖像(-1或1號圖像)進行采樣,在未發生遮擋的情況下,采樣后的圖像應與目標圖像(0號圖像)在同位置的像素點亮度保持一致,這樣在訓練過程中,學習到使得采樣圖像與目標圖像亮度值趨於一致的深度與相機位姿,計算該深度與相機位姿的模型參數即為最優參數。然而現實場景復雜多變,存在大量遮擋情況,在遮擋情況下,亮度投影誤差會失效,因為采樣之后的圖像像素點發生了遮擋,對亮度投影誤差進行簡單的求取平均操作無法有效衡量該區域的匹配情況,如圖5所示。
圖5 遮擋情況示意圖
因此,本論文對此種情況做出了改進,用取最小值操作取代取平均操作,如此做法可使亮度投影誤差函數忽略遮擋處不正確的亮度值,進而使模型專注非遮擋區域的計算,整個計算過程如下圖5所示:
圖5 論文中提出的最小化亮度守恆損失函數
3.2 一種在單目情況下檢測相機間有無運動的標記方法
單目深度估計需要進行如下假設:場景靜止、相機運動。如訓練集中存在使此假設不成立的圖像序列,會嚴重影響網絡的精度。因此,本文利用一種檢測相機間有無運動的標記方法,剔除圖像序列中未發生運動的像素點。過程如下圖6所示:
圖7 圖像序列中靜止點可視化圖
圖中黑色像素點為靜止點,需要從整個損失函數中剔除。
3.3 一種多尺度的匹配損失函數
此方法過程比較簡單,即對逆深度估計模塊估計出的4級逆深度map進行上采樣到與輸入同尺寸,並對上采樣之后的4級逆深度map求取損失函數。
四、 總結
本文對單目深度估計模型Monodepth2的主要計算過程進行了介紹,通過以上三個步驟的改進,該模型達到state-of-the-art,因此可作為一般深度估計模型的baseline方法。
備注:作者也是我們「3D視覺從入門到精通」特邀嘉賓:一個超干貨的3D視覺學習社區
本文僅做學術分享,如有侵權,請聯系刪文。
