1. 程式人生 > >SFMLearner:Unsupervised Learning of Depth and Ego-Motion from Video論文筆記

SFMLearner:Unsupervised Learning of Depth and Ego-Motion from Video論文筆記

1. Abstract


  • 提出了一種無監督單目深度估計和相機運動估計的框架
  • 利用視覺合成作為監督資訊,使用端到端的方式學習
  • 網路分為兩部分(嚴格意義上是三個)
    • 單目深度估計
    • 多檢視姿態估計
    • 解釋性網路(論文後面提到訓練了第三個網路)

2. Introduction


  • 計算機幾何視覺難以重建真實的場景模型
    • 由於非剛性、遮擋、紋理缺失等情況的存在
  • 人類在很短的時刻可以推斷自我運動以及三維場景的結構,為什麼?
    • 一個假設就是人類在移動中通過觀察大量的場景,已經進化出一個對真實世界豐富的、具有結構層次的理解力。通過這些上百萬次的觀察,人們已經認識到了世界的規律性—路是平的,大樓是直立的等,於是在進入一個新的場景,即使通過一個單目影象。我們也可以運用這些先驗知識來識別場景。
  • 很自然地,我們就想到通過訓練一個觀察影象序列的網路來模擬這種能力,這個網路的目的在於通過預測相機運動和場景結構來解釋觀察到的內容。
    • 端到端的方式。直接從輸入的畫素來估計相機運動(6個自由度的變化矩陣)和場景結構(每個畫素的深度)
    • 視覺合成作為度量。
    • 無監督的方法。直接使用影象序列進行訓練,不需要人工標記甚至相機運動資訊。
  • 本文方法建立一個觀點的基礎上:只有當場景的中間預測與相機姿態與真實場景一致的時候,幾何視覺合成系統才會表現的很好。
    • 但是對於某些場景(例如紋理缺失),幾何和姿態估計的不好會導致視覺合成的錯誤,由此相同模型在面對另一類場景(佈局和場景結構更多樣)時,會非常失敗。
    • 本文的目標是構建整個視覺合成的流程,作為CNN的推理過程,通過學習深度和相機姿態的中間估計,以達到網路解釋內容與真實世界一致的效果。

3. Related Work


3.1 SFM
3.2 Warping-based view synthesis
3.3 Learning single-view 3D from registered 2D views
3.4 Unsupervised/Self-supervised learning from video

4. 方法


4.1 視覺合成作為監督

圖1:基於視覺合成的有監督訓練流程

本文深度和姿態預測的監督資訊來自於視覺合成:給定一個場景的輸入圖片,合成該場景在另一個相機姿態下的新的視角。給定輸入圖片中每一個畫素的深度,再加上該圖片某個相鄰視角下相機的姿態以及可見性,我們可以合成同一場景新的視角圖片。可見性由本文的explaination網路完成,視角合成可以由CNN完成。

假設\(<I_1,\cdots,I_N>\)表示一個訓練影象序列,序列中的一幀作為目標視角\(I_t\),其餘的作為源視角\(I_s(1 \leq s \leq N, s \neq t)\).視覺合成的目標函式可以表示為:
\[\mathcal{L}_{vs} = \sum_{s} \sum_{p} |I_t(p)-\hat{I}_s(p)| \tag{1}\]
這裡\(p\)表示一個畫素座標,\(\hat{I}_s\)是基於深度影象及render方式將輸入視角\(I_s\)翹曲(warp)到目標視角座標系的影象

注:
可見性(visibility):指兩個不同的目標檢視在生成新檢視的過程中,warp到新視角的同一點。當新視角的一個3D點被另一個3D點遮擋的時候,就會出現這種情況。

4.2 基於影象渲染的可微分深度


圖2:可微分影象翹曲描述。對於target view的每個畫素點\(p_t\),首先基於預測的深度和姿態將其投影至source view,然後利用雙線性差值獲得點\(p_t\)在翹曲後圖像\(\hat{I}_s\)的畫素值

考慮兩個相機和一個三維點\(P\),\(P\)在第一、第二個視角的投影座標分別為\(p_s\),\(p_t\)。假設世界座標系是第一個相機的相機座標系,透視投影變換公式如下:
\[ Z_t p_t = \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}_{t} = KP \tag{2}\]
\[Z_s p_s = \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}_{s} = K \hat{T}_{t \to s} P \tag{3}\]
其中\(Z_t\)、\(Z_s\)分別是點\(p_t\)、\(p_s\)的深度,\(K\)是相機的內參矩陣(假設內參一致),\(\hat{T}_{t \to s}\)表示相機1到2的相對位姿。基於\(p_t\)的深度值(所以該方法稱為DBIR,又稱為3D image warping),變換公式(2)得到:
\[P=Z_t K^{-1} p_t \tag{4}\]
將公式(4)代入公式(3),得到:
\[Z_s p_s =Z_t K \hat{T}_{t \to s} K^{-1} p_t \tag{5}\]
公式(5)可以看成:我們只需要知道新視角(虛擬的,3D image warping得到的)相對於參考幀所在相機的姿態變換\(\hat{T}_{t \to s}\),相機的內參,以及參考幀每個畫素的深度值,就可以通過公式(5)合成一個新的虛擬視角。這裡的原理詳見參考[1]。所以得到論文中的公式,見公式(6),\(\hat{D_t}\)表示\(p_t\)的深度值。
\[p_s \sim K \hat{T}_{t \to s} \hat{D_t} (p_t) K^{-1} p_t \tag{6}\]
因為透視變換得到的影象座標\(p_s\)是連續的(小數),因此無法獲得\(p_s\)的灰度值。本文根據雙線性插值獲得\(p_s\)處的灰度值\(I_s(p_s)\),
\[\hat I_s=I_s(p_s)=\sum_{i \in \{t,b \}, j \in \{ l,r\}} w^{ij} I_s(p_s^{ij}) \tag{7}\]

4.3 克服模型侷限性建模

  • 建模基於三個假設
    • 場景是靜態的,沒有動態的物體;
    • 目標視角和源視角之間沒有遮擋和離合的物體;
    • 物體表明是朗伯表面(漫反射)以保證影象一致性誤差有意義。
  • 解釋性預測網路(explainability prediction network)
    • 由於以上三個假設並不完全滿足,因此為了提高系統的魯棒性,增加一個訓練網路
    • 與深度、姿態網路聯合訓練
    • 輸出:每對目標視角-源視角每個畫素的soft mask$ \hat{E_S}$,表示
    • 對公式加一個置信引數(有點類似直接法SLAM的優化方程)
      \[\mathcal{L}_{vs}=\sum_{<I_1,\cdots,I_N> \in \mathcal{S}} \sum_{p} \hat{E_s}(p) |I_t(p) - \hat{I_s}(p)| \tag{8}\]
    • 最小化loss函式時候,很可能會讓\(\mathcal{L}_{reg}(\hat{E}_{s})\)為0,那麼整個loss函式就沒有意義了;
    • 為了避免這種情況,需要對公式(8)新增一個正則項\(\mathcal{L}_{reg}(\hat{E}_{s})\),通過最小化每個畫素點處與1之間的交叉熵損失,來避免\(\hat{E}_{s}\)為0;
    • 換句話說,鼓勵網路最小化視覺合成的目標函式,但允許一定程度的鬆弛度以磨合網路未考慮的因素。

4.4 克服梯度侷限性

  • 梯度來源於\(I(p_{t})\)與相鄰四個點\(I(p_s)\)的畫素差
    • 如果利用ground-truth深度和姿態得到的投影畫素\(p_s\)(這是一個精確值)位於低紋理區域,或當前估計不夠準確時,網路會一直訓練。
  • 兩種典型的處理這種問題的方法
    • 使用帶有bottleneck層的encoder-decoder網路架構,從而約束深度網路的輸出平滑,並且促使有意義的梯度區域傳給周圍畫素;
    • 明確多尺度和平滑損失:允許梯度能從更大的區域得到;
    • 本文使用了第二種方法。
  • 為了平滑損失,在預測深度圖時,最小化二階梯度的\(L_1\)正規化
  • 最終的目標函式變為:
    \[\mathcal{L}_{final}=\sum_{l} \mathcal{L}_{vs}^{l}+\lambda_{s} \mathcal{L}_{smooth}^{l} + \lambda_{e} \sum_{s} \mathcal{L}_{reg}(\hat{E}_{s}^{l}), \tag{9}\]
    • \(l\)表示不同的影象尺度,\(s\)表示源影象,\(\lambda_{s}\)和\(\lambda_{e}\)分別是深度平滑loss和解釋性網路正則化的權值。

4.5 網路架構


圖3:網路架構

  • 單目深度估計
    • 輸入:目標視角(target view)
    • 採用DispNet結構;
    • 採用帶有跳躍連線(skip connections)的Encoder-Decoder架構,multi-scale端預測深度;
    • 除了深度預測層,所有層都採用ReLU函式啟用;
    • 深度預測層採用\(\frac{1}{\alpha * sigmoid(x)+ \beta}\),這裡的\(\alpha = 10\),\(\beta = 0.1\),以保證預測深度為正值,且在一個合理範圍內。
    • 除了前四層分別採用7*7, 7*7, 5*5, 5*5的卷積核,其餘都採用3*3的卷積核
  • 姿態估計
    • 輸入:目標視角(target view)和所有源視角(source view)
    • 輸出:目標視角與每一個源視角的相對姿態
    • 7個卷積層,步長為2,除了前兩個卷積層和最後兩個反捲積(預測)層的卷積核分別是7*7, 5*5, 5*5, 7*7之外,其餘都採用3*3的卷積核
    • \(6*(N-1)\)個1*1的卷積層(對應於6個自由度:3個尤拉角和3個平移量)
    • 第一個卷積層的輸出通道為16
  • 解釋性網路
    • 與pose網路共享前五個econding層
    • 5個反捲積層的多尺度預測
    • 除了預測層沒有啟用函式,所有卷積層/反捲積層都使用ReLU啟用函式
    • 每個預測層的輸出通道為\(2 * (N-1)\),每兩個通道都使用softmax歸一化,以獲得每個source-target對的解釋性預測(第二個通道歸一化為\(\hat{E}_{s}\),用於計算公式5的loss)

5. 實驗


主要使用了KITTI作衡量基準,同時使用了Make3D資料集以評估模型的泛化能力。
訓練:

  • Tensorflow架構(github也有PyTorch實現)
  • \(\lambda_{s}\)設為\(0.5 / l\)(\(l\)是下采樣因子),同時\(\lambda_{e}=0.2\)
  • 每層都使用Batch Normalization和ReLU
  • 優化器使用Adam,\(\beta_{1}=0.9\),\(\beta_2=0.999\)
  • 學習率:0.002,mini-batch的size為4,迭代次數150K
  • 單目相機拍攝的影象序列,訓練時將圖片設為128$\times$416

    5.1 單目深度估計
  • 使用KITTI資料集訓練
    • 排除所有幀中平均光流小於1個畫素的靜態場景作訓練
    • 固定影象序列長度為3幀,將中間幀作為target view,中間幀的\(\pm 1\)幀作為source view
    • 一共44540個序列,40109用於訓練,4431用於測試。

6. 討論


考慮了三個未來工作:

  • 本文目前的框架沒有明確估計動態場景和遮擋(儘管explainability已經將其考慮在內),這兩者都是三維場景理解的關鍵因素。通過motion segmentation建模或許是解決方法之一
  • 目前的框架假設內參已知,這限制了對網上視訊的應用,未來考慮解決這一問題
  • 深度圖是三維場景的一種簡單表示方法,考慮應用更好的表示,例如體素。

另一個有趣的方向是探究由本文學習得到的系統更詳細的細節,尤其是姿態估計時使用某種影象對應,深度估計時識別場景和物件的共同特徵,即探究語義分割、物件檢測等對本文框架的影響。

參考

[1] Christoph Fehn. Depth-image-based rendering (DIBR), compression, and transmission for a new approach on 3D-TV
[2] https://blog.csdn.net/wangshuailpp/article/details/80098