[讀論文]用多尺度卷積網路預測深度、表面法向量和語義標籤

論文:Predicting Depth, Surface Normals and Semantic Labels with a Common Multi-Scale Convolutional Architecture

還是David Eigen發的。

1.簡介

這篇文章用一個多尺度的卷積網路結構解決了三個不同的計算機視覺問題。深度估計、表面法向量估計和語義分割。網路結構從輸出圖像直接回歸輸出圖像,只需要做簡單的修正就可以自然地應用到這幾個任務中。作者的方法用序列化的尺度優化估計,可以獲得很多圖像細節,不需要超解析度或者低層分割。在上述三個問題的benchmark上作者都達到了state-of-the-art。

場景理解對於有很多方面視覺的中心問題。包括表達不同場景部分特點的語義標籤、表面法向量或者描述物理幾何的深度估計,每個物體的樣例標籤、獲取人與環境的可能交互捕捉。這些的很多都是經常表達為像素圖(包含每個像素的值或者標籤),舉例來說,一張圖在每個像素包含可視物體的語義標籤,或者表面法向量的向量坐標。

這篇文章用一個網路結構解決三個問題:深度預測、表面法向量估計、語義分割。在測試的時候可以實時生成(30Hz)。這種做法有好多優點:

  1. 可以快速應用於新任務:通過定義新的訓練集和損失函數。作者的工作比現有的回歸模型要多走了一步。
  2. 用一個網路結構可以幫助簡化系統的使用(對於多模問題),比如說機器人、增強現實。可以幫助在這些領域的研究進展。
  3. 在深度和法向量上,很多計算可以多模共享,讓系統更加高效。

作者的方法與用卷積網路分割的其他方法有幾點重要的不同:

  1. 作者的模型在幾個最粗糙的尺度有一個大的、全圖的視野。這一點對於深度和法向量的至關重要的點。
  2. 作者不用超解析度或者後處理平滑操作。作者的網路結構可以輸出比較平滑的結果,允許我們獲得一個簡單像素級的最大值。

作者的方法與用循環神經網路嵌入更多內容、結合更多粗糙採樣圖像到最後預測的方法不同的是在不同的尺度使用了相同的網路參數。作者用了具有分辨力的網路能夠在不同的尺度編輯。

作者的方法與用Vgg分割,用1×1卷積標籤在不同層的feature map分類,平均這些分類的方法不同,作者採用了序列化的不同尺度使用網路,使之能夠做更加複雜的編輯和優化(從全圖視野開始)。這樣可以應對多個問題,通過考慮相對更小的內容、累加預測,這些對於語義標籤是有針對性的。


2.網路

作者的網路首先基於整個圖像區域預測粗糙的全局輸出,之後用更加精細尺度的局部網路優化。這個網路結構主要基於之前的Eigen的兩個尺度的網路結構。

  1. 用之前的網路參數初始化
  2. 作者在更更高的解析度加入了第三個尺度,讓輸出結果解析度提高到輸入圖像的一半,147×109對於NYUDepth。
  3. 作者在這裡不用把scale1的輸出傳到scale2中,而是把傳了多通道的feature map。

通過這樣做,作者發現也可以從頭聯合訓練前兩個尺度,可以簡化訓練過程提高性能增益。

Scale1:全圖視角

基於一個大的全圖視野,第一個尺度預測粗糙但空間變化的全圖區域的特徵集合。作者通過兩層全連接層實現。最後一個層的輸出在空間上是輸入尺度的1/16,有64個feature map。然後通過上採樣到輸入尺度的1/4。因為上採樣是線性的,所以這相當於從1.6層分解一個大的全連接層到更大的74×55 map。因為這樣的矩陣可能是很大,給定更多限制的輸入特徵只能產生模糊的輸出,這樣可以限制解析度和上採樣。其實1/16尺度的輸出是足夠獲得空間變化的,實際上1/32尺度的最後粗糙卷積特徵的兩倍了。

因為頂層是全連接的,在輸出中每個空間位置與所有的圖像特徵連接,加入了很大的視野。這與多尺度的方法相反。多尺度方法產生的圖中每個輸出位置更具有局部區域中心性質。這種全視野全連接對於深度和法向量任務很重要。

在圖中可以看出,作者訓練了不同形狀的模型,其中一個是基於在ImageNet上訓練的AlexNet,另一個是用Oxford 初始化的Vgg網路。

Scale2:預測

第二個尺度的工作是在中間解析度產生預測,結合一個更有細節並且更小的圖像的視角和之前粗糙網路產生的全圖信息。作者通過疊粗糙網路輸出的feature map和在更精細的stride上的一個卷積池化結果。第二個尺度的輸出是55×74(對於NYUDepth),通道數根據任務確定。作者一起訓練Scale1和2,用SGD。

Scale3:更高解析度

作者模型的最後尺度網路優化預測到更高的解析度。把scale2的輸出與更加精細的stride的卷積池化結果疊起來,這樣就能結合更多的圖像更細緻的視角。這種優化能夠完成輸出對齊到更高解析度細節,產生具有空間連續性和有細節的輸出。最終的解析度是輸入的一半。

對於深度預測,作者用了比較預測和ground-truth的log差作為損失函數。這個損失與之前的有點相似,用了L2範數和尺度不變差分項。這篇文章多了一些一階的匹配誤差項。這讓預測不僅具有數值上面接近,也在局部結構上相似。作者發現這樣確實可以產生更好的輸出。因為有深度梯度引導,在L2範數誤差中它不會有性能衰退。

3.訓練

訓練步驟:作者在兩個階段用SGD分訓練網路:

1. 一起訓練scale1和scale2。

2. 固定1和2,訓練scale3。

因為3的像素數目是2的4倍,所以用整張圖訓練非常耗資源。為了加速訓練,作者用了隨機裁剪,形狀是74×55。作者先前向傳播整張圖通過scale1和2,上採樣,然後裁剪scale3的輸入,對應位置的RGB輸入也這樣操作。裁剪的圖像和scale2通過在scale3中前向反向傳播完成權值更新。這樣能大概加快3倍訓練速度。並且性能基本不受影響。


4.任務

作者用不同的損失函數和目標數據訓練相同結構完成三個任務。

Depth

對於深度預測,作者用了預測和ground-truth之間log深度圖, DD^* ,讓 d = D - D^* 作為兩者的差分,那麼損失就表達為:

L_{depth}(D,D^*) = frac{1}{n}sum_id_i^2-frac{1}{n^2}(sum_id_i)^2+frac{1}{n}sum_i|(Delta_xd_i)^2+(Delta_yd_i)^2|

之前的一半就是論文閱讀:Depth Map Prediction from a Single Image using a Multi-Scale Deep Network裡面講過的尺度不變誤差。後面就是梯度的差分項目,其實是smooth項。讓深度圖變得平滑。也就是讓預測更加有局部形狀相似。原文中寫到:This encourages predictions to have not only close-by values, but also similar local structure. We found it indeed produces outputs that better follow depth gradients, with no degradation in measured l2 performance.

Surface Normals

為了預測表面法向量,作者把輸出通道由1通道變成3通道,分別預測在圖中每個像素點法向量的x,y,z。作者也用L2norm來歸一化法向量,方向傳播也通過這個歸一化。至於損失函數則是很簡單的逐像素的點乘。

L_{normals}(N,N^*)=-frac{1}{n}sum_iN_icdot N_i^*=-frac{1}{n}Ncdot N^*

對於ground truth目標,作者計算了normal map法向量圖,方法是

N. Silberman, D. Hoiem, P. Kohli, and R. Fergus. Indoor segmentation and support inference from rgbd images. In ECCV, 2012. 2, 4, 5

Semantic Labels

對於語義標籤,作者用了像素的softmax分類器來預測每個點的類標籤。最後輸出跟類別數一樣的通道數。作者用了簡單的像素級交叉熵損失。

L_{segmantic}(C,C^*)=-frac{1}{n}sum_iC_i^*log(C_i)

其中 C_i=e^{z_i}/sum_ce^{z_{i,c}} 是在像素i的類預測,z是最後的卷積層。


5.結果

推薦閱讀:

1.4【OpenCV圖像處理】Mat對象
《Conditional Generative Adversarial Nets》閱讀筆記
詳解:智能醫學影像分析的前沿與挑戰 | 硬創公開課

TAG:深度学习DeepLearning | 计算机视觉 | 图像处理 |