ICCV'23開源 | 兼具泛化性與絕對尺度的單目深度估計!
作者:?泡椒味的口香糖 | 來源:計算機視覺工坊
在公眾號「計算機視覺工坊」后臺,回復「原論文」可獲取論文pdf和代碼鏈接
這里給大家推薦下深度估計微信群,掃碼入群,方便大家溝通交流:

0. 筆者個人體會
目前的單目深度估計有兩個問題,一個是自監(jiān)督方法無法估計絕對尺度,另一個是在某個數(shù)據(jù)集上訓練好的模型很難直接泛化到其他數(shù)據(jù)集。
筆者最近閱讀了ICCV 2023的一篇文章ZeroDepth,同時解決了絕對尺度和泛化性兩個問題,可以用一個模型直接在室內(nèi)室外多個數(shù)據(jù)集上預測絕對深度,感覺在實際應(yīng)用上有很大價值。因此筆者今天將為大家分享這項工作,當然筆者水平有限,如果有理解不當?shù)牡胤綒g迎大家一起討論~
1. 效果展示
先看一下ZeroDepth預測的深度圖,上方是將RGB和深度值投影的結(jié)果,里面還有雷達點云真值做對比,驗證深度估計的準確性和絕對尺度。注意ZeroDepth沒有在這四個數(shù)據(jù)集上做過任何微調(diào)。這里也推薦工坊推出的新課程《單目深度估計方法:算法梳理與代碼實現(xiàn)》。

代碼已經(jīng)開源了,感興趣的讀者可以運行代碼測試一下。
2. 摘要
單目深度估計是尺度模糊的,因此需要尺度監(jiān)督來產(chǎn)生度量預測。即便如此,生成的模型將是特定于幾何圖形的,所學的尺度不能直接跨域轉(zhuǎn)移。正因為如此,最近的工作反而集中在相對深度,避開尺度有利于up-to-scale的zero-shot轉(zhuǎn)移。在這項工作中,我們介紹了ZeroDepth,一種新的單目深度估計框架,能夠預測來自不同域和相機參數(shù)的任意測試圖像的度量尺度。這是通過(I)使用輸入級幾何嵌入來實現(xiàn)的,該幾何嵌入使得網(wǎng)絡(luò)能夠?qū)W習對象上的先驗比例;以及(ii)通過以單幀信息為條件的變分潛在表示來解耦編碼器和解碼器級。我們評估了針對室外(KITTI、DDAD、nuScenes)和室內(nèi)(NYUv2)基準的ZeroDepth,并使用相同的預訓練模型在兩種設(shè)置中實現(xiàn)了新的最先進水平,優(yōu)于基于域內(nèi)數(shù)據(jù)訓練并需要測試時間縮放來產(chǎn)生度量估計的方法。
3. 算法解析
現(xiàn)有單目深度估計方法的問題是什么?
要么用自監(jiān)督方法學習相對深度,要么學習絕對尺度但無法泛化到其他數(shù)據(jù)集上。
解決問題的思路是什么?
1、在網(wǎng)絡(luò)輸入中編碼相機內(nèi)參;
2、引入變分潛在表征,將逐點的深度預測改為概率分布;
3、在大規(guī)模數(shù)據(jù)集上訓練。
ZeroDepth具體是怎么做的?
ZeroDepth架構(gòu)是基于Perceiver IO的,所以先簡單說一下Perceiver IO的原理。
Perceiver IO (ICLR 2022)建立在Perceiver (ICML 2021) 的基礎(chǔ)上,將任意格式的輸入轉(zhuǎn)換為2D embedding,來實現(xiàn)跨域通用性。然后將2D embedding映射到潛在表征,由于潛在表征是固定的,所以哪怕輸入非常長也不會復雜度爆炸。最重要的是,Perceiver IO可以使用另一個注意模塊,使用所需輸出元素唯一的Query來預測輸出維度。也就是說,最后的解碼器接受輸出查詢數(shù)組,并將其與輸入的潛在表征相結(jié)合,以產(chǎn)生所需的維數(shù)。所以Perceiver IO最大的優(yōu)點是可以面向任意輸入輸出的任務(wù),并且是線性復雜度。

ZeroDepth的框架就和Perceiver IO很像。輸入是圖像和相機內(nèi)參的embedding,首先和潛在表征(Latent representation)做交叉注意力,產(chǎn)生條件潛在表征,經(jīng)過采樣之后由相機embedding做Query輸出深度預測。

所以ZeroDepth是在Perceiver IO的基礎(chǔ)上,針對單目深度估計任務(wù)做出了兩個修改:
1、在圖像embedding的基礎(chǔ)上加入相機參數(shù)embedding,這樣網(wǎng)絡(luò)就能夠隱式地推理物體的大小形狀等物理屬性,實現(xiàn)不同數(shù)據(jù)集和相機參數(shù)的泛化。這一點和CoRL 2020的工作TartanVO很像,都是去編碼相機內(nèi)參。
2、引入一個變分的潛在表示,在conditioning之后產(chǎn)生一個分布,這個分布在解碼階段被采樣以概率方式產(chǎn)生估計。作者任務(wù),不同數(shù)據(jù)集在外觀和幾何形狀上差異較大,直接預測所有像素的深度值產(chǎn)生的損失太大,所以要將深度估計任務(wù)建模為概率分布。
作者還做了一系列解碼器階段的數(shù)據(jù)增強,來學習不同數(shù)據(jù)集之間幾何和外觀的差異。注意,用來做輸出查詢的相機embedding不需要做增強。
1、分辨率調(diào)整
也就是針對內(nèi)參變化,去對應(yīng)修改圖像的分辨率。

2、ray調(diào)整
作者認為,相同的內(nèi)參和分辨率會產(chǎn)生相同的embedding,而且因為圖像分辨率是離散的,所以不能產(chǎn)生整個操作空間內(nèi)的連續(xù)視角分布。具體增強策略就是加入了[-0.5,0.5]的隨機噪聲。
3、embedding dropout
對輸入embedding隨機的產(chǎn)生一個[0,0.5]的縮小比例,可以產(chǎn)生更好的潛在表征。
損失函數(shù)就是深度監(jiān)督+表面法線正則化+KL散度的加權(quán)和:

4. 實驗結(jié)果
ZeroDepth的訓練集非常大,包括Parallel Domain(92500張圖像,6個相機)、TartanAir(306637張圖像,2個相機)、Waymo(198068張圖像,5個相機)、Large-Scale Driving(176320張圖像,6個相機)、OmniData(Taskonomy,HM3D, Replica, Replica-GSO的組合, 14340580張圖像)。評估使用KITTI Eigen(697張圖像,限制最大深度80m)、DDAD驗證集(3950張圖像,限制最大深度200m)、nuScenes驗證集(6019張圖像,限制最大深度200m)、NYUv2驗證集(室內(nèi),654張圖像)。訓練使用了8塊A100,每塊GPU的bs為16,訓練了10個epoch(訓練了整整7天?。?。
可以看看4個數(shù)據(jù)集上的定性效果,彩色點云是用RGB+深度圖恢復的,然后對比激光雷達點云,可以發(fā)現(xiàn)兩個點云的重合效果很好。一方面證明了ZeroDepth的跨數(shù)據(jù)集深度估計效果優(yōu)秀,另一方面也證明了它可以很好的預測度量深度,不需要再做尺度對齊。

然后在沒有微調(diào)的情況下,在KITTI、DDAD、nuScenes和NYUv2數(shù)據(jù)集上進行定量評估,還對比了一些自監(jiān)督方法??梢园l(fā)現(xiàn)ZeroDepth的zero-shot泛化能力非常強,各方面指標都取得最優(yōu)。


KITTI數(shù)據(jù)集上網(wǎng)絡(luò)復雜性的消融實驗,測試的是潛在表征的尺寸對模型的影響。結(jié)果顯示潛在表征的尺寸越大越好,而且維度的影響比數(shù)量更大。這里也推薦工坊推出的新課程《單目深度估計方法:算法梳理與代碼實現(xiàn)》。

數(shù)據(jù)集的消融實驗,訓練次數(shù)相同的情況下對比誤差。去掉真實數(shù)據(jù)集Waymo和LSD的影響最大,一方面是因為這兩個數(shù)據(jù)集很大,一方面是因為這兩個數(shù)據(jù)集和測試集在視覺上很相似。

ZeroDepth本身是一個zero-shot方案,但作者也測試了4個測試數(shù)據(jù)集上微調(diào)的結(jié)果,各項指標都有明顯提升。

5. 總結(jié)
本文為大家介紹了一種能夠直接預測絕對深度,并且在各個數(shù)據(jù)集泛化性都特別好的單目深度估計方法。但不是太建議在這個模型的基礎(chǔ)上做修改,因為訓練太貴了??梢钥紤]直接用這個模型來生成深度圖,或者用這個模型去做引導。