0. 筆者個人體會
因為項目原因需要用到無監督單目深度估計網絡,目前SC-Depth系列是非常經典的框架,因此寫下這篇文章記錄自己的學習經歷。 深度估計其實是一個非常早的問題,早期方法主要是Structure from Motion (SfM)和Multi View Stereo (MVS)這兩種。
SfM算法輸入是一系列無序照片,兩兩照片通過特征點建立匹配關系,利用三角化方法獲得稀疏點云,之后使用BA進行聯合優化,輸出是整個模型是三維點云和相機位姿。但此類方法獲得的是稀疏點云,就是說深度圖也是稀疏的。MVS與SfM原理類似,但它是對每個像素都去提取特征并進行匹配,最終可以獲得稠密的深度圖。
相較雙目/多目深度估計而言,單目深度估計更具挑戰性,這是因為單目視覺天生就存在致命缺陷:尺度模糊。近年來深度學習技術的發展,引發了一系列單目深度估計網絡的問世。近期SC-DepthV3發表在了新一期的TPAMI上,對單目深度估計問題又提出了一個新的解決思路。本文將分別介紹牛津大學提出的SC-Depth系列的三個網絡,探討它們都解決了什么問題,以及實現了什么效果。
1. 為什么是無監督?
先說答案:
因為有監督太貴了!
目前單目深度估計網絡在KITTI、NYU等數據集上的性能其實已經非常好了,各項定量指標也好,定性估計深度圖也好,看起來已經非常完美。但任何網絡、任何模型歸根結底都是要落地的,只在數據集上跑一跑沒辦法創造實際的產能。可是深度學習本身就是依賴數據集的,如果想把一個訓練好的模型拓展到實際場景中,往往需要在實際場景進行finetune。
如果是有監督網絡的話,實際場景的微調就需要激光雷達、高精相機等昂貴傳感器提供的ground truth。這在很大程度上就限制了有監督單目深度估計網絡的實際落地。我們更想實現的目標是拿著一個相機(甚至手機)拍一組視頻,就可獲得每幀的深度!
那么怎么辦呢?
無監督單目深度估計網絡就可以很好得解決這一問題!無監督單目深度估計網絡不需要提供深度真值就可以進行訓練,可以在任何場景通過一組單目視頻進行finetune,這就意味著網絡具備極強的泛化能力! 最早的無監督單目深度估計網絡來源于2016年ECCV論文“Unsupervised CNN for single view depth estimation: Geometry to the rescue.”。
網絡輸入是雙目相機中的左右目圖像,但是只估計左目圖像的深度。由于左右目位姿是已知的,那么我們就可以通過左目深度圖和左右目位姿去重建左圖,之后去計算重建左圖和真實左圖之間的差異,回傳損失進行訓練。除這個損失外,這個網絡還提出了深度值的平滑損失。
這個網絡名義上確實是單目深度估計網絡,因為只估計了左圖的深度。但我們更希望的是網絡輸入是真正的單目圖像。 最早的真正只使用單目圖像的無監督單目深度估計網絡是2017年CVPR論文“Unsupervised Learning of Depth and Ego-Motion from Video”。
這個網絡與上一篇論文的原理類似,它的輸入是單目視頻序列中的前后兩幀。首先給第一幀圖像估計深度圖,同時估計兩幀圖像中的位姿,之后利用深度圖和位姿重建第一幀圖像,同樣去計算與真實圖像之間的差異。
之后的SOTA方法就是大家所熟知的Monodepth2,來源于2019年ICCV論文“Digging Into Self-Supervised Monocular Depth Estimation”。其原理還是利用SfM同時估計深度網絡和位姿網絡。網絡輸入為單目視頻的連續多幀圖片,根據深度網絡和位姿網絡構建重投影圖像,計算重投影誤差并引入至損失函數。
雖然近些年也出現了非常多的單目深度估計網絡,但大多都是基于Monodepth2和SC-Depth框架進行的。因此,本文對其他網絡結構不再贅述。
2. SC-DepthV1做了什么?
至此,開始引入本文真正的主角:SC-Depth系列。
之前的單目深度估計網絡的重投影損失,更多的是利用前后幀的顏色誤差進行約束,得到了比較精確的結果。但它們基本上都有一個共性問題:深度值不連續!連續幾張圖像之間的深度值不連續!也就是說,在不同的幀上產生尺度不一致的預測,因為它們承受了每幀圖像的尺度不確定性。
這種問題這不會影響基于單個圖像的任務,但對于基于視頻的應用至關重要,例如不能用于VSLAM系統中的初始化。 因此,SC-DepthV1為解決此問題提出了尺度一致性約束。具體來說,就是給前后兩幀圖像都預測深度,利用兩張圖像的深度和位姿投影到3D空間中,進而去計算尺度一致性損失。
這種方法確保了相鄰幀之間尺度的一致性,如果每連續兩幀圖像的尺度都是一致的,那么整個視頻序列的深度序列也就是連續的。
此外,SC-DepthV1還使用了一種Mask,對應視頻上出現不連續的區域。作者認為這就是動態物體,通過去除這種Mask可以使得網絡具備一定的動態環境魯棒性。
定量結果顯示,SC-DepthV1取得了與Monodepth2相持平的結果。但SC-DepthV1估計出的深度圖具有連續性,因此還是SC-DepthV1更勝一籌。
值得一提的是,SC-DepthV1在論文里除了介紹自己的定量結果外,還將單目深度估計結果引入到了ORB-SLAM2中,構建了一個偽RGB-D SLAM系統。在一些序列中,Monodepth2+ORB-SLAM2的系統由于深度不連續問題,很快跟丟。而SC-DepthV1+ORB-SLAM2的組合可以獲得較好的跟蹤結果。
一句話總結:SC-DepthV1解決了深度連續性問題。
3. SC-DepthV2做了什么?
之前的SC-DepthV1和MonoDepth2等網絡主要針對KITTI等室外場景,取得了非常不錯的效果。但SC-Depth系列的作者發現,這些網絡很難泛化到室內場景中,室內估計出的深度圖很差。這就很奇怪了,按理說只要經過足夠的訓練,室內和室外場景應該是可以取得相似的精度的。
這是為什么呢?
有一些學者認為,這是因為室內場景中有大量的弱紋理區域,比如白墻。這些區域很難去提取特征,就更不用說去做特征匹配,是這些弱紋理區域導致深度估計不準。看似有一定道理,但要知道室外場景中的天空也是弱紋理區域啊,并且也占了圖像中的很大一部分。
為什么同樣是存在大量弱紋理場景,性能卻差了那么多呢? SC-Depth系列的作者認為,室外場景中的相機運動主要是平移,旋轉所占的比重很小,而室內場景正好相反。那么是不是室內場景中的旋轉分量,對單目深度估計結果造成了影響呢? SC-Depth系列的作者對此進行了嚴密的數學推導:
這個數學推導很有意思。SC-Depth系列作者發現旋轉運動和深度估計結果完全無關!但平移運動和深度估計結果卻是相關的!
這個結論是什么意思呢?
也就是說,對于旋轉運動來說,就算估計的很準也不會幫助單目深度估計結果,但如果估計的不準就會給深度估計帶來大量噪聲。而對于平移運動來說,如果估計的位姿準確是可以輔助單目深度估計結果的。 因此,SC-depthV2提出了位姿自修正網絡,這個網絡只估計旋轉運動,并借此剔除場景中的旋轉運動。
之后將第二幀圖像旋轉到第一張圖,這樣兩幀圖像之間的位姿就只剩下的平移運動。自此,自監督深度估計網絡就可以得到很好的訓練。
此外,SC-depthV2還提出了兩個新的損失約束。這里具體解釋一下:前面我們知道,Ia和Ib通過ARN生成了去除旋轉運動的圖像,理論上此時Ia和Ib’之間應該是不包含任何旋轉的。
也就是說Ia和Ib’再進行一次ARN得到的Rot2應該為0。此外,Ib’和Ib再進行一次ARN得到的Rot3應該和第一次得到的Rot1是相等的。通過這兩個約束可以完全剔除兩幀之間的旋轉運動,得到更好的位姿估計結果。
至于定量結果,由于作者主要思路就是針對室內場景中的旋轉運動,因此主要評估的數據集是室內NYU。
結果顯示,SC-depthV2相較于之前的方法實現了大幅提升,這也驗證了作者的想法。
一句話總結:SC-DepthV2解決了旋轉位姿對深度估計的影響問題。
4. SC-DepthV3做了什么?
至此,其實SC-Depth系列已經做的很好了。SC-DepthV1面向室外場景,SC-DepthV2面向室內場景,可以說實現了很好的通用性和泛化能力。但SC-DepthV1和SC-DepthV2都是基于靜態環境假設的,雖然作者也利用Mask剔除了一些動態物體的影響,但當應用場景是高動態環境時,算法很容易崩潰。
為了解決動態物體和遮擋問題,現有網絡通常是檢測動態物體,然后在訓練時剔除這些區域。這些方法在訓練時效果比較好,但是在推理時往往很難得到高精度。也有一些方法對每個動態對象進行建模,但網絡會變得非常笨重。 因此,SC-Depth系列作者又在近日提出了SC-DepthV3,面向高動態場景的單目深度估計網絡!
在各種動態場景中都可以魯棒的運行! 具體來說,SC-DepthV3首先引入了一個在大規模數據集上有監督預訓練的單目深度估計模型LeReS,并通過零樣本泛化提供單圖像深度先驗,也就是偽深度,同時引入了一個新損失來約束網絡的訓練。
注意,LeReS只需要訓練一次,在新場景中不需要進行finetune,因此這一網絡的引入并不會加入額外的成本。
LeReS顯示了很好的定性結果,但偽深度的精度很低,偽深度的誤差圖也說明了這一問題。不過SC-DepthV3認為經過合適的模塊設計,偽深度可以很好得促進無監督單目深度估計的結果。
解決動態區域問題的關鍵是作者提出的動態區域細化(DRR)模塊,該方法的來源是,作者發現偽深度在任意兩個物體或像素之間保持極好的深度有序度。
因此,SC-DepthV3提取動態和靜態區域之間的真值深度序信息,并使用它來規范動態區域的自監督深度估計。
為了從靜態背景中分割動態區域,SC-DepthV3使用了SC-DepthV1中提出的Mask,并通過計算自監督訓練中的前后向深度不一致性來生成,因此不需要外部分割網絡。
此外,偽深度顯示了光滑的局部結構和物體邊界。因此SC-DepthV3提出一個局部結構優化(LSR)模塊來改進深度細節的自監督深度估計。該模塊包含兩個部分:一方面從偽深度和網絡預測深度中提取表面法線,并通過應用法線匹配損失來約束;另一方面應用相對法向角度損失來約束物體邊界區域的深度估計。
在損失函數的設置上,除了之前的幾何一致性損失、光度損失外,SC-DepthV3還提出了邊緣感知平滑損失來正則化預測的深度圖。
在具體的評估上,SC-DepthV3在DDAD、BONN、TUM、KITTI、NYUv2和IBims-1這六個數據集進行了大量實驗,定性結果顯示SC-DepthV3在動態環境中具有極強的魯棒性。
定量結果也說明了SC-DepthV3在動態環境中的性能遠超Monodepth2和SC-Depth。
一句話總結:SC-DepthV3解決了動態環境問題。
5. 總結
SC-Depth系列是非常經典且先進的無監督單目深度估計網絡,現在已經有了V1、V2、V3三個版本。其中SC-DepthV1主要解決深度圖不連續的問題,SC-DepthV2主要解決室內環境中旋轉位姿對深度估計產生噪聲的問題,SC-DepthV3主要解決動態環境中的單目深度估計問題。可以說這三個網絡已經可以應用于大多數的場景,這樣在一個方向不斷深耕的團隊并不多見。研究單目深度估計網絡的讀者一定不要錯過。
審核編輯:劉清
-
傳感器
+關注
關注
2550文章
51071瀏覽量
753307 -
激光雷達
+關注
關注
968文章
3971瀏覽量
189876 -
VSLAM
+關注
關注
0文章
23瀏覽量
4325
原文標題:SC-DepthV3來了!深度解析無監督單目深度估計V1到V3的主要變化
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論