CNN是靠什麼線索學習到深度信息的?——一個經驗性探索

今天給大家帶來一篇我很喜歡的風格的paper,詳細分析了基於深度學習的單目深度估計算法的侷限性。雖然這文章沒有提出新的方法,但是對於我們理解CNN是如何學習到一些appearance cue來處理需要幾何模型的視覺問題大有裨益。

首先,我們知道單目相機是沒有辦法恢復出來絕對尺度的,但是如果我們有實際的場景先驗,這個問題是可以部分被解決的,在自動駕駛的場景中體現最爲明顯。簡化的原理如下圖:

在上面這個圖中,對實際場景做了一些簡化。所有的大寫字母代表的都是在3D世界中的實際座標,小寫字母代表的都是在相機成像平面上的像素座標。f爲相機的實際焦距,假設通過標定已知。那麼我們其實可以在圖中找到兩個和Z相關的相似三角形來恢復實際尺度:

  1. 第一個是h/H = f/Z,整理下可得到Z=Hf/h。從上面公式可知,我們需要知道實際世界中的車寬(或車高),然後通過物體在圖像中的像素高度即可換算出來實際物體的距離。直觀上來理解,物體應該是近大遠小的。
  2. 第二個是y/Y = f/Z,同理可得Z=Yf/y。在這種方法中,我們需要知道的是相機距離地面的安裝高度以及在圖像中車輪與地面接觸點的縱座標。直觀上理解,如果我們在一條平直的路上,那麼離我們越近的物體它的縱座標應該越靠圖像下方,越遠的物體越靠圖像上方。

(思考題:以上兩種測距方式分別使用了什麼樣的先驗知識?這些先驗如果不成立的時候能有什麼手段來放寬限制?回答得在點子上的同學可以獲得我司最核心的Perception Fusion崗位的直接面試~ 歡迎私信我來~)

那這些CNN深度估計的方法是靠什麼樣的線索來估計的呢?文中第一部分便是研究這個問題。作者使用了一個假的車通過變換大小和位置貼在一張真實的圖片中來驗證各個猜想。

第一行中,是按照正常的邏輯同時變換高度和大小,可見整體的預測是符合常理的。在第二行中,貼圖的時候只變化垂直方向上的位置,物體的大小沒有進行縮放,可見隨着放置縱座標的變化物體的距離也有相應的變化。但是在第三行中,保持物體的縱座標不變,只是縮放大小,整個神經網絡的輸出其實相當一致,並沒有劇烈變化。(都注意預測中白框內的結果即可,也就是車尾的距離)下面是一個定量的結果:

 

可見,scale only完全喪失了預測的能力,但是剩下的兩種方式趨勢仍然正確。所以,本文的第一個結論便是,CNN其實是通過物體在圖像中的縱座標而不是物體的長寬來對物體測距的。這個結論說實話還挺反直覺的,文末談了一些我個人的想法。

在第二部分中,作者探究了camera pose對於CNN深度估計算法的影響。理論上講,一個魯棒的算法應該對於camera pose的變化具有不變性。但是實際上並非如此。作者分別對pitch和roll角的擾動進行了分析。

首先對於pitch而言,作者可以通過robust fitting的辦法通過預測出的深度圖來得到地平線的位置,這個算法就不再詳述。然後作者通過center crop的方式來模擬相機pitch角度的變化,第一點,可以看到CNN預測出的深度圖是能夠部分反映出地平線位置的變化的,但是和理想狀況仍有差距。第二點,基於前面分析出CNN其實是通過物體接地點的縱座標來計算深度的,所以毫不意外,在這樣center crop的setting下,深度完全隨着crop的位置而變化,但實際上場景並沒有變化。

對於roll角也可以類似地做敏感度分析,最終結論是,CNN預測出深度圖的roll角確實和GT有一定相關性,但是相對於pitch來說弱了很多。

第三部分,也是最有意思的部分,就是去驗證CNN對於顏色和材質的不變性。

可以看到,去掉顏色保留灰度,或者用一個假的顏色預測結果都還算合理。但是如果使用類平均的顏色或者是指定顏色,整個預測結果會受到非常大的影響。這其實表明,雖然不需要顯式地model語義信息,但是紋理對於深度預測仍然非常關鍵。

文中也進行了其他諸多實驗去驗證CNN對於未知物體以及輪廓的敏感性,這裏就不再展開。只舉一個我覺得很有趣的例子。如果我們在圖上加入一些訓練集中沒有出現過的未知物體,不出意外,模型是完全無法感知到它們的存在。但是如果我們在這些物體下面加入一些陰影,那麼模型突然就可以找出整個的物體。從這個小小的實驗中,我們可以管窺CNN究竟是通過什麼樣的信息來識別物體,以及CNN是多麼喜歡去找數據中的“捷徑”來fit數據的。

說了這麼多,這個文章也有幾點我覺得可以繼續深挖下去,包括:

  1. 在室內場景,如NYU Depth這樣的數據集中,沒有這樣大面積的ground plane,CNN是如何估計出深度的?
  2. 在第一個分析實驗中,既然CNN是通過車輪地面接觸點的縱座標來測距的,那麼這個信息又是從哪裏來的?網絡結構基本是一個FCN,具有translation invariant的特點,那麼理應不包括座標信息。那是padding泄露了位置信息?還是通過車道線或者是其他的一些cue泄露了這個信息,這也是很有意思的一點。直觀上來講,物體的scale是CNN更容易捕捉的信息,但實際上並沒有,這也就說明其實有一些CNN更直接可以利用的cue我們沒有發現到。
  3. 既然CNN對於crop和rotation很敏感,那如果我們訓練的時候使用了random crop和random rotation這樣的data augmentation,那麼CNN依賴的深度線索是否會有變化?

總結一下,現有基於CNN做深度估計的算法本質上還都是通過overfit場景中的某種信息來進行深度估計,整體來說這些方法其實並沒有考慮到任何幾何的限制,所以在不同場景下的泛化能力也比較弱。如何能結合geometry方法和learning方法的優勢是一個老生常談的話題。一方面這個問題可以被拆分成兩部分,一部分通過幾何的辦法來完成不同位置相對深度的估計,另一部分通過一些場景先驗或者數據驅動的辦法來預測出絕對尺度,然後再融合這兩者得到一個可靠魯棒的深度估計。另一方面,也許可以通過預測一些不變的物理量再結合上幾何信息來得到最終的深度信息,例如某些特定車型的尺寸,車道線等信息。這個領域中仍然有大量open的問題有待解決。

[1] Dijk, Tom van, and Guido de Croon. "How Do Neural Networks See Depth in Single Images?." Proceedings of the IEEE International Conference on Computer Vision. 2019.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章