歡迎關注知乎專欄 雙目立體匹配
深度學習的蓬勃發展得益於大規模有標註的數據驅動,有監督學習(supervised learning)推動深度模型向着性能越來越高的方向發展。但是,大量的標註數據往往需要付出巨大的人力成本,越來越多的研究開始關注如何在不獲取數據標籤的條件下提升模型的性能,也就是自監督學習(self-supervised learning)/無監督學習(unsupervised learning)。
對於立體匹配(stereo matching),或者雙目深度估計,像LiDAR這樣的設備是極其笨重且昂貴的,它所能收集的只是稀疏的深度信息,而我們需要的是密集的深度圖(dense depth map);而基於結構光的設備往往只能在室內場景下進行深度信息標註,在室外場景下難以做到較高的標註質量。因此,自監督學習在立體匹配中得到越來越多的關注。本文主要梳理了近年來自監督學習在立體匹配中的應用方法,希望和大家一起探討學習。
Stereo Matching
立體匹配也稱作視差估計(disparity estimation),或者雙目深度估計。其輸入是一對在同一時刻捕捉到的,經過極線校正的左右圖像 和 。而它的輸出是參考圖像(一般以左圖作爲參考圖像)中每個像素所對應的視差值所構成的視差圖 。視差定義爲三維場景中某一點在左右圖像中對應點位置的像素級差距。當給定攝像機的基線距離 和焦距 之後,我們就可以從視差圖中自動計算出深度 ,.
立體匹配算法分爲四個步驟:
- 匹配代價計算(matching cost computation);
- 代價聚合(cost aggregation);
- 視差計算(disparity computation);
- 視差精修(disparity refinement)
傳統的視差估計算法主要分爲兩類:
- 局部算法:主要基於滑動窗口來計算局部窗口內的匹配代價;
- 全局算法:通過優化包括局部數據項和平滑項的能量函數來計算立體視圖之間的相關性;
傳統的視差估計算法對於各種應用場景都具有等價的視差估計能力,不會因爲場景變化而產生較大的差異,因此有論文將傳統方法估計的視差圖作爲帶有噪聲的標籤來提升無監督視差估計的性能,本文後面會提到。隨着深度學習的發展以及大規模合成數據的推動,CNN將上述四個步驟統一成一個端到端的網絡,進一步提升了視差估計的性能。本文主要探討的是自監督學習在基於卷積神經網絡的視差估計算法中的應用情況。
Self-Supervied Learning
在基於卷積神經網絡的立體匹配算法中,有監督學習基本上是迴歸的方法,即採用smooth L1 loss計算預測的視差值和真實視差值之間的誤差來監督網絡的學習。自監督學習算法則主要從圖像自身的特徵結構,視差圖自身的特點或者藉助傳統算法來構造噪聲標籤來推動網絡的學習。
Image Reconstruction Loss
和自編碼器類似,我們最容易想到的就是通過重建圖像來作loss。假設原來的左圖(參考圖像)爲 (i,j 表示像素點的位置座標),根據其預測的視差 以及原有的右圖 , 我們可以通過warping操作得到重構後的左圖 。這裏的warping操作是根據左圖每個像素點對應的視差值,在右圖中尋找對應的像素點再差值得到的。在PyTorch中以grid_sample函數來實現,採樣器的原理是基於 Spatial Transformer Network(STN) 得到的,對同一行中的兩個像素進行雙線性採樣,是一個可微的過程。設N爲像素點的個數,那麼最簡單的圖像重構損失函數定義如下:
通常,經過重構的圖像可能具有很大的失真情況,僅僅採用重構圖像和原圖的比較還不夠,我們會引入圖像質量評價中的圖像相似度指標SSIM來綜合的計算重構圖像和原始圖像在光度上的誤差,
這裏 是基本重構誤差和相似度誤差的權重。一般採取單尺度的SSIM以及簡化的3×3濾波,一般取0.85,相似度誤差佔據更大的比重。
Disparity Smoothness Loss
由於我們需要密集的視差圖,爲了使得視差在局部上保持平滑,我們可以對視差梯度 進行L1懲罰。由於深度不連續性通常出現在圖像的梯度上,因此圖像的梯度 也被考慮進來,
left-Right Disparity Consistency Loss
以上兩種損失函數是自監督學習中最基本,最常用的損失函數。下面這篇論文提出了左右一致性損失,雖然是基於單目圖像的,但是也可以用在雙目圖像視差估計上。
- 論文標題:Unsupervised Monocular Depth Estimation with Left-Right Consistency
- 論文來源:CVPR 2017 Oral
- 論文地址:https://arxiv.org/abs/1609.03677v3
- 開源代碼:https://github.com/mrharicot/monodepth
論文提出的框架如下:
和原有方法不同,輸入是左圖(雙目是左右圖),輸出不僅是以左圖爲參考圖像的視差圖 , 還有以右圖爲參考圖像的視差圖 。除了應用上述兩種損失函數外,還提出了一種左右視差一致性的損失。我們可以將以右圖爲參考圖像的 作爲warping操作的輸入圖像,再以左圖爲參考圖像的 作爲輸入的視差圖,經過warping操作就會得到 的重構視差圖。注意,這裏得到的是重構的視差圖,而非重構的左圖。因此,左右視差一致性損失可以寫作:
這裏N是像素的個數, 就是重構出來的 。
這篇論文中由於預測了兩種不同的視差(以左圖爲參考圖像的視差和以右圖爲參考圖像的視差),因此上面提到的三種損失都可以有鏡像損失。比如,以原始左圖 ,以及以右圖爲參考圖像的視差圖 作爲warping操作的輸入,那麼得到就是重構出來的右圖 。
Weighted Local Contrast Normalization
下面這篇論文通過分析重構誤差的缺點,提出了一種新的加權局部對比度歸一化操作,從而優化了重構誤差損失函數。
- 論文標題:ActiveStereoNet: End-to-End Self-Supervised Learning for Active Stereo Systems
- 論文來源:ECCV 2018 Oral
- 論文地址:https://arxiv.org/abs/1807.06009v1
- 復現代碼:https://github.com/meteorshowers/StereoNet-ActiveStereoNet
論文提出了一個針對主動視覺的端到端的深度學習方法,我們主要來看其對於重構誤差的分析和改進。作者認爲光度重構誤差具有以下兩點不足:
- 在視覺設備感知外部環境時,接收到的信號強度與距離的平方成反比,這導致光度對距離具有明顯的依賴。
- 明亮的像素點往往比暗的像素點更容易產生較大的殘差。
基於以上兩個觀察,深度網絡在訓練時傾向於在容易學習的地方學習(比如,明亮的區域),然後對其他區域進行平滑處理(比如,較暗的區域)。因此,對於較暗的像素點,它需要更準確的深度信息來監督才能學得比較好。但是在自監督學習中,我們缺少的正是這種準確的深度信息(真實的視差標籤),這樣就會導致較暗的區域學得很差。並且當前景和背景差異較大時,這種損失會在被遮擋的區域產生更大的誤差,導致網絡無法再繼續學習下去。
論文提出的加權局部對比度歸一化(WLCN)就是用來移除亮度差異與視差的相關性。具體來說,對每一個像素點,計算以其爲中心的9*9區域內的所有像素點的局部均值 和標準差 ,這些局部的統計量用來歸一化當前的像素點,
其中 是一個小常量。下圖展示了LCN歸一化後的結果。
由上圖可以看出,對於僅使用重構誤差(左圖),在紅色框中較亮的部位對應的重構誤差較大。而採用LCN對輸入圖像歸一化處理後(中間圖),這些重構誤差不會過渡的偏向明亮的區域。這表明LCN不僅消除了光度和視差之間的聯繫,而且在遮擋區域能夠提供較好的殘差。
但是另一個問題是,在弱紋理區域局部標準差 可能會趨近於0,從而導致這部分的損失偏大。爲了解決這個問題,作者提出使用參考圖像在9*9局部區域的標準差 來作一個重新加權。因此,重構誤差可以重寫爲:
從上面圖中的右邊可以看出,經過重加權之後弱紋理區域的誤差也變小了,這是因爲這部分對應的權值 也趨近於0了。
Guided Confidence Loss
除了挖掘圖像和視差本身的特性,我們還可以從外部藉助一些帶有噪聲的標籤作爲監督信息。在本文開頭介紹過,傳統方法雖然沒有基於深度學習的方法性能高,但是對各種場景具有較好的泛化能力。下面這篇論文就是藉助傳統方法先對圖像估計一次視差,再通過置信度的學習來自動的鑑別帶有噪聲的標籤,從而實現在沒有標籤的條件下的學習。
- 論文標題:Unsupervised Domain Adaptation for Depth Prediction from Images
- 論文來源:PAMI 2019
- 論文地址:https://arxiv.org/abs/1909.03943v1
- 開源代碼:https://github.com/CVLAB-Unibo/Unsupervised_Depth_Adaptation
假設由傳統算法(比如SGM或者AD-CENSUS)估計的視差值爲 ,這裏p指的是圖像中的像素點。那麼以視差圖作爲輸入,幾層卷積層構建置信度估計網絡,就可以得到該視差圖中每一個像素點的置信度,由此構成置信圖(confidence map),。置信圖中每一點的範圍在 [0, 1],用來表示生成的視差值的可信程度。如果某點的置信度越高,那麼該點處估計的視差值就越準,就越能夠作爲真實標籤來指導深度模型的訓練。反之,亦然。
我們可以通過超參數 來控制用來指導深度模型訓練的參數值。比如 用來表示只有置信度大於0.8的視差值才能成爲真正的監督信息。由此看出實際的監督信息是稀疏的,這與KITTI數據標註是一致的,因爲它的標註信息也是稀疏的深度值。但是實踐證明即使只需要有稀疏的深度信息,已經能夠訓練出性能很好的模型。
假設由深度模型估計的視差表示爲 ,那麼論文提出的引導置信損失可以寫作:
這裏 表示的就是由超參數 控制的由傳統方法估計的稀疏標籤,它具有較高的置信度。而深度模型估計的視差和傳統方法估計的視差以L1迴歸的形式監督,包含在loss計算中的像素點由置信度來控制。這種引導置信損失相當於是給深度模型提供了值得信賴的監督信息,但是卻是在沒有真實標籤情況下實現的。
下圖給出了不同 控制的情況。
從 (e) 到 (h) 我們可以看出, 越小,監督信息越多,但是相應的噪聲也越多; 越大,雖然噪聲較少了,但是準確的監督信息也變少了。因此,超參數 也可以納入到損失函數中一起優化。由於在優化過程中, 容易收斂到1,作者提出了下面的改進版損失函數:
新加的項有兩個優勢,一是將超參數 納入最終的損失函數計算中一起優化,避免了認爲調參,可以自動學習出最佳的值;二是以可以約束 不收斂到1。
關於超參數 的生成,作者提出了兩種行之有效的方法:
- 將 看做是一個可學習的變量,即上面的描述方式;
- 將 看做是一個簡單網絡的輸出,該網絡可以採用3個3*3的卷積層,後面接一個全局平均池化得到。
下圖是關於超參數 的消融實驗。
從上圖可以看出,無論是將 看作學習的變量還是網絡的輸出,都不如人工交叉驗證效果好。
總結
從上面的分析中我們可以歸納出,近年來自監督學習在立體匹配中主要從下面三個方面來考慮:
- 從圖像自身的特性出發:如圖像重構損失,圖像相似度計算,加權局部對比度歸一化;
- 從視差圖的特點出發:視差平滑損失;
- 從傳統方法中借鑑:引導置信損失;
未來的自監督學習我認爲可以兩方面着手,一是探索如何將圖像本身的特性和視差的關係構建起來,因爲圖像的RGB信息本身和視差信息是沒有關係的,圖像重構誤差本身並不等價於視差迴歸損失。二是如何獲取更加準確的稀疏監督信息,畢竟只需要稀疏的監督信息就能學出很好的視差估計網絡,但是前提是監督信息必須準確,也就是少而精。
歡迎關注知乎專欄 雙目立體匹配