1. 程式人生 > >利用語意關聯和關注驅動損失函式進行單目深度估計

利用語意關聯和關注驅動損失函式進行單目深度估計

這是一個臨時材料,整理後的內容在這裡

這篇文章把深度估計和語義分割聯絡起來。之前有些工作把深度用於語義分割,大都使用RGBD資料集,本文則使用單張靜態影象。

長尾分佈:

作者發現畫素個數在畫素深度和語義標籤上呈現長尾分佈,如下圖1。深度值呈現長尾分佈主要由獲取深度時的透視效應(the perspective-effect during the depth acquisition process)造成。把所有區域等同看待的損失函式更多地受深度值較小的區域影響,而對深度值較大的區域(長長的尾部)不敏感。忽略這個分佈會影響模型精確度,尤其在深度值較大的區域(長長的尾部)。
 圖1

為了應對以上兩個挑戰(長尾分佈、深度估計和語義標註共享資訊),作者設計的網路同時估計一個靜態影象的深度和語義標籤。

創新工作:

  1. 深入研究深度值較大的區域,提出關注驅動(attention-driven)的損失作為監督:這樣的損失緩解資料偏差問題(大部分畫素深度值較小)使模型"看"得更深。
  2. 為了更好地利用語義資訊,提出一個協同網路自動學習兩個任務(深度估計和語義標註)之間的資訊共享策略,資訊在網路內和網路間傳遞:語義標籤有助於深度估計(如果天空是遠的,牆是豎直的),深度估計也有助於語義標註(尤其是外觀相似的不同物體)。在協同網路架構中提出一個資訊傳播策略,用一個動態路由方法把語義整合到深度估計中,該策略由一個橫向共享單元和一個半稠密上跳躍(skip-up)連線實現。

深度感知目標函式:

  1. 關注驅動損失:L_{DA}=\frac{1}{N}\sum_{i=1}^{N}(\alpha _{D}+\lambda _{D})\cdot l \left ( d_{i},d_{i}^{GT}\right )。其中i是畫素索引,N是深度影象素數量,d_{i}d_{i}^{GT}分別是預測的深度值和實際的深度值,l\left ( \cdot \right )是距離度量如l_{1}l_{2}正規化等,\alpha _{D}是一個深度感知關注項(depth-aware attention term)使網路更關注深度值較大的區域。這樣,反向傳播時梯度更偏重少數遠距離區域。因此\alpha _{D}和深度相關,可以定義為真實深度值的一個線性函式。
  2. 為了避免訓練剛開始時出現梯度消失,學習近距離區域時出現中斷,引入正則化項\lambda _{D}=1-\frac{min\left ( log\left ( d_{i} \right ) , log\left ( d_{i}^{GT} \right )\right )}{max\left ( log\left ( d_{i} \right ) , log\left ( d_{i}^{GT} \right ) \right )}描述訓練過程中的學習狀態。如果網路預測的深度值接近實際值,\lambda _{D}接近0,否則接近1。這樣,即使對近距離區域(\alpha _{D}接近0),梯度仍然能通過原始l損失函式反向傳播。\lambda _{D}增加了訓練穩定性。總之,L_{DA}使網路關注近距離區域的同時,還使網路更關注遠距離區域。

網路架構:

協同網路是一個多工DCNN,主要包含4部分:深度預測子網路、語義標註子網路、知識共享單元/連線、關注驅動損失,如下圖2。一個主幹(backbone)編碼器(如VGG、ResNet)把輸入的RGB影象從顏色空間轉換到高維特徵空間,得到的高維特徵空間分別被兩個子網路用於重建深度和語義標籤。兩個任務間的知識共享通過橫向共享單元(LSU)實現,LSU在訓練階段自動學習傳播流,在測試時形成一個最佳結構。此外,知識共享還以半稠密向上跳躍連線(SUC)的形式存在於每個子網路內部。最終整個網路被基於深度和關注的損失監督。

圖2

橫向共享單元LSU:

在協同網路中,提出一個雙向橫向共享單元(LSU)以一個動態路由的方式學習共享策略。資訊傳遞通過正向傳遞和反向傳播實現。每隔兩個反捲積層,新增LSU共享另一個任務的殘差知識/表示。不同於手工調優的結構,LSU能夠從任務間層和任務內層獲得額外細微的共享資訊。LSU的結構如圖3左部,它在兩個任務中提供全分享(fully-sharing)路由。假設當前的反捲積層產生的特徵圖是D1S1,分享的特徵表示可以表示為:\left\{\begin{matrix} LSU_{D2}=D1+\left ( \varphi _{D} \cdot D1 + \varphi _{S}\cdot S1\right ) \\ LSU_{S2}=S1+\left ( \gamma _{D} \cdot D1 + \gamma _{S}\cdot S1\right ) \end{matrix}\right.,其中\varphi _{D}\gamma _{D}是特徵圖D1的權重引數,\varphi _{S}\gamma _{S}是特徵圖S1的權重引數。共享表示LSU_{D2}LSU_{S2}傳播到下層反捲積層。所有的引數都是學習來的。雖然所有LSU有相同的內部結構,但它們有各自的引數,這樣可以更靈活地共享。

圖3

還加入了恆等對映保證任務內的資訊傳播,避免傳播中斷或特徵汙染。這種類殘差結構(恆等連線+殘差共享)有利於梯度反向傳播。圖4說明了LSU的效果。

半稠密向上跳躍連線SUC:

SUC在解碼器中進行上取樣和跳躍連線。過程中的我們用h代替作者的那個上部帶'/'的h符號。

作者提出的網路框架在編碼器後分為深度估計、語義標註兩路,稱為兩個任務。在任務內新增SUC是為了任務內(相對於任務間)的知識共享和儲存長期記憶(前一層反捲積層傳過來的反捲積結果稱為短期記憶)。這其實就是跳躍連線。SUC可以表示為:f_{out}=h\left ( f_{in} \right ) +\sum_{i=1}^{n} h\left ( f_{i} \right ),其中f_{in}f_{out}分別是解碼器的輸入輸出,f_{i}是第i層反捲積的輸出,如圖3,作者的實驗中n=4h是一個上取樣操作,和其他跳躍連線一樣,如果不用上取樣,特徵圖尺寸不同,不能合併(如tf.concat)。

其它損失項:

  1. 梯度損失:L_{g}\left ( d,d^{GT} \right )=\frac{1}{N}\sum_{i=1}^{N}\left | \bigtriangledown _{h}d_{i}-\bigtriangledown _{h}d_{i}^{GT} \right |+\left | \bigtriangledown _{v}d_{i}-\bigtriangledown _{v}d_{i}^{GT} \right |,核(兩個帶絕對值符號的項)來自Sobel特徵檢測器,\bigtriangledown _{h}\bigtriangledown _{v}分別代表水平方向和豎直方向。語義資訊L_{g}\left ( d,s \right )也考慮進來。所以總的梯度損失是:L_{JG}=L_{g}\left ( d,d^{GT} \right )+L_{g}\left ( d,s \right )
  2. 語義焦點損失:焦點損失起源於目標檢測。為了讓網路更關注長尾,使用損失項L_{semF}\left ( l,l^{GT} \right )=-\frac{1}{N}\sum_{i=1}^{N}\sum_{k=1}^{K} l_{i,k}^{GT}\alpha _{k}\left ( 1-l_{i,k} \right )^{\gamma } log\left ( l_{i,k} \right ),其中l_{i}是畫素i的預測標籤,k是類別索引。\alpha _{k}\gamma是調節關注的平衡權重和焦點引數。

總的關注損失:L_{attention}=L_{DA}+L_{JG}+L_{semF}

關注視覺化:

使用空間關注圖表示網路的關注部分。如圖5。

圖5