基本思想
輸入一段影片,我們把第
幀作為Depth CNN的輸入,得到估計的深度影象
。再把相鄰的幾幀
(比如
和
)輸入到Pose CNN中,得到估計的相機的移動軌跡
。假設我麼已知相機的內參
,那麼我們便可以做如下對映:
我們從右到左來理解這個公式:
是
中一點的齊次形式。 左乘
,將
對映到三維空間,這裡齊次座標的座標系原點是
時刻的相機位置;左乘
,將齊次座標系的原點移至
時刻的相機位置;最後再左乘
,將三維座標對映到2D的影象上。
這樣我們就得到了
和
的對應關係,也就是說
上
位置的數值,應該跟
上
位置上的數值相同。
是指
透過座標變化而生成的類似於
的影象。我們可以用最簡單的損失函式來衡量這種一致性:
從而進行backpropagation,最佳化Depth CNN 和 Pose CNN 中的引數。
不過這裡還有個問題:我們得到的
是連續值,我們必須把它對映到對應的畫素點上才能得到
。於是,作者採用經典論文
spatial transformer networks
的 bilinear sampling 方法來解決這個問題。即
的畫素值為
周圍四個點的雙線性插值的結果。
對移動物體的處理
以上方法成立有一下三個前提/問題:
場景必須是靜止的。如果從
到
的過程中,場景發生了變化,那麼(1)將不再成立。而在實際應用場景中,特別是自動駕駛過程中,場景必然會有運動物體,比如迎面而來的汽車。
和
中的每個畫素點都要一一對應。這在現實中顯然也是不可能的,因為隨著相機的運動,必然有一部分畫素點被遮住,而且會有新的畫素點移動到視野之外。
場景中的平面是滿足 Lambertian Assumption的,只有這樣,photo-consistency才有意義。
為了解決上述三個問題,作者提出了一個explainability prediction network。這個網路的輸入為
和
,輸出為一個遮罩層
。這樣,我們的Loss function就變成了:
相當於賦予了網路對誤差“視而不見”的能力。如果按這個loss function 訓練,網路很自然地會把
的每一個值都賦值為0,這樣loss也為0。當然這麼做是沒有意義的,我們必須限制
:
理想情況下,
和
中的每個畫素點都一一對應,此時遮罩層不需要起作用,也就是
的每一個值都是1。我們希望網路儘可能地接近這種情況,也就是說希望
的每個元素儘可能接近1。為了到達這個目的,我們用
和1之間的cross entropy來衡量誤差,希望cross entropy 越小越好。
大位移情況
網路是透過對 loss function 求導來實現最佳化的。可是當估計的
處的紋理單一,或者距離真實的
比較大的時候,求導會產生問題。這是以為雙線性插值之和
周圍4個點的畫素值有關。
為了解決這個問題,作者引入了multi-scale 和 smoothness loss。multi-scale 是指先把
和
的尺寸都壓縮,然後在計算
。這樣儘管 bilinear 還是從周圍4個畫素取樣,但是這4個畫素卻對應著原圖較大的一片區域。Smoothness Loss 則用來抑制 Depth 的突變:
總的Loss function:
這裡的
是代表不同的圖片尺度。