一、基本信息
標題:Unsupervised Learning of Depth and Ego-Motion from Video
時間:2017
論文領域:深度預測、深度學習
引用格式:Zhou T, Brown M, Snavely N, et al. Unsupervised learning of depth and ego-motion from video[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 1851-1858.
二、研究背景
SfM: 對於低紋理,複雜的幾何/光度學,薄的結構,和遮擋,存在問題。最近使用深度學習方法解決。
Warping-based view synthesis:和視差不太一樣,基於扭曲的方法被迫學習幾何和/或對應的中間預測
三、創新點
本文在之前系列加入了位置估計網絡。
有2個網絡,聯合訓練,單獨使用。假設場景是剛性的(事實上KITTI中車是會動的,使用這篇 方法有所解決),場景外觀變換主要是因爲相機動了。
把合成視圖作爲監督(無監督)
CNN產生新的合成視圖作爲關鍵的監督信息。給定一個場景的一個輸入視圖,合成一個新的場景圖像從不同的相機姿勢。合成過程使用CNN,損失完全可微。
L v s = ∑ s ∑ p ∣ I t ( p ) − I ^ s ( p ) ∣ \mathcal{L}_{v s}=\sum_{s} \sum_{p}\left|I_{t}(p)-\hat{I}_{s}(p)\right| L v s = s ∑ p ∑ ∣ ∣ ∣ I t ( p ) − I ^ s ( p ) ∣ ∣ ∣
p是像素索引,I t I_{t} I t 是目標圖,I s I_{s} I s 是源圖,I ^ s \hat{I}_{s} I ^ s 是I s I_{s} I s 使用深度D ^ t \hat{D}_{t} D ^ t 和位置矩陣T ^ t → s \hat{T}_{t \rightarrow s} T ^ t → s 計算出來的。個人理解:I s I_{s} I s 通過CNN參數產生I ^ s \hat{I}_{s} I ^ s ,I ^ s \hat{I}_{s} I ^ s 其實就是爲了表示I t I_{t} I t ,損失算之間差異。
那麼就說道,先前工作使用此方法需要位姿信息,而本文直接再用一個網絡估計位置。
解釋上圖:
深度預測只需要一張圖I t I_t I t (訓練時需要幾張?什麼方法),通過DepthCNN,得到預測深度圖D ^ t ( p ) \hat{D}_{t}(p) D ^ t ( p ) ,輸入3幀I t I_{t} I t 、I t − 1 I_{t-1} I t − 1 、I t + 1 I_{t+1} I t + 1 ,通過PoseCNN,可以得到2個位置預測T ^ t → t − 1 \hat{T}_{t \rightarrow t-1} T ^ t → t − 1 、T ^ t → t + 1 \hat{T}_{t \rightarrow t+1} T ^ t → t + 1 。那麼重點就是深度+位置希望重建目標targe view損失最小。
比如I t − 1 I_{t-1} I t − 1 結合 D ^ t ( p ) \hat{D}_{t}(p) D ^ t ( p ) 和T ^ t → t − 1 \hat{T}_{t \rightarrow t-1} T ^ t → t − 1 生成I ^ t − 1 ( p ) \hat{I}_{t-1}(p) I ^ t − 1 ( p ) ,希望和I t I_t I t 的光度重建誤差最小,也就是∣ I t ( p ) − I ^ t − 1 ( p ) ∣ \left|I_{t}(p)-\hat{I}_{t-1}(p)\right| ∣ ∣ ∣ I t ( p ) − I ^ t − 1 ( p ) ∣ ∣ ∣ 要小。
深度預測和之前使用視差方法不太一樣,但是深度 D ^ t ( p ) \hat{D}_{t}(p) D ^ t ( p ) 作用在另一張上算損失,思想是一樣的。
上述具體關聯,比如說s和t(上面是I t I_t I t 和I t − 1 I_{t-1} I t − 1 、I t + 1 I_{t+1} I t + 1 ):
p s ∼ K T ^ t → s D ^ t ( p t ) K − 1 p t p_{s} \sim K \hat{T}_{t \rightarrow s} \hat{D}_{t}\left(p_{t}\right) K^{-1} p_{t} p s ∼ K T ^ t → s D ^ t ( p t ) K − 1 p t
上面計算出p s p_s p s 是連續的,就是帶小數,所以又使用雙線性插值 了,這種方法可以微分,求梯度:
I ^ s ( p t ) = I s ( p s ) = ∑ i ∈ { t , b } , j ∈ { l , r } w i j I s ( p s i j ) \hat{I}_{s}\left(p_{t}\right)=I_{s}\left(p_{s}\right)=\sum_{i \in\{t, b\}, j \in\{l, r\}} w^{i j} I_{s}\left(p_{s}^{i j}\right) I ^ s ( p t ) = I s ( p s ) = i ∈ { t , b } , j ∈ { l , r } ∑ w i j I s ( p s i j )
模型限制
有3個限制:
沒有移動的物體(-_-)
沒有遮擋
表面Lambertian
如果條件不滿足,梯度就會被破壞,並可能抑制訓練。爲了提高魯棒性:
L v s = ∑ ⟨ I 1 , … , I N ⟩ ∈ S ∑ p E ^ s ( p ) ∣ I t ( p ) − I ^ s ( p ) ∣ \mathcal{L}_{v s}=\sum_{\left\langle I_{1}, \ldots, I_{N}\right\rangle \in \mathcal{S}} \sum_{p} \hat{E}_{s}(p)\left|I_{t}(p)-\hat{I}_{s}(p)\right| L v s = ⟨ I 1 , … , I N ⟩ ∈ S ∑ p ∑ E ^ s ( p ) ∣ ∣ ∣ I t ( p ) − I ^ s ( p ) ∣ ∣ ∣
又爲了防止E ^ s \hat{E}_{s} E ^ s 總是0,加了正則化項L r e g ( E ^ s ) \mathcal{L}_{r e g}\left(\hat{E}_{s}\right) L r e g ( E ^ s )
,也就是說,鼓勵網絡將視圖綜合目標最小化,但對模型未考慮的因素給予一定的鬆弛。
克服梯度局部性2種方法:
使用帶有深度網絡小瓶頸的卷積編碼器-解碼器架構,隱式限制輸出全局平滑,促進梯度從有意義的區域傳播到附近的區域??
多層和平滑損失
本文使用第2種方法,所以最終損失:
L final = ∑ L v s l + λ s L smooth l + λ e ∑ L reg ( E ^ s l ) \mathcal{L}_{\text {final}}=\sum \mathcal{L}_{v s}^{l}+\lambda_{s} \mathcal{L}_{\text {smooth}}^{l}+\lambda_{e} \sum \mathcal{L}_{\text {reg}}\left(\hat{E}_{s}^{l}\right) L final = ∑ L v s l + λ s L smooth l + λ e ∑ L reg ( E ^ s l )
網絡結構
對於單視圖深度,使用DispNet(a),輸出多尺度深度圖。b是位姿估計和可解釋性網絡,在反捲積之前,輸出6自由度的位姿,只有再反捲積得到E ^ s \hat{E}_{s} E ^ s
四、實驗結果
最後2行處理的不好,大場景和靠近鏡頭。
位姿誤差和SLAM對比:
可解釋高亮部分說明不能計算運動:
五、結論與思考
作者結論
作者也提到了還未能解決的問題:
場景在動,比如行人,路上行駛的車,還有遮擋問題
相機內參固定了
沒有轉成3D點雲。。
總結
提出位置網絡,訓練時不是單獨訓練的,而是結合深度,來重建目標圖。但是在使用時是各種的2個網絡。
思考
參考