【論文筆記】DSAC:Learning deep structured active contours end-to-end

論文:Learning deep structured active contours end-to-end,CVPR 2018
代碼:https://github.com/dmarcosg/DSAC


概覽

主要工作:

  • 將 ACM 能量函數的計算看作是結構化的預測問題
  • 構造能量的函數裏包含了 ACM 的 ballon term
  • 將 CNNs 的表現性和 ACMs 的活動性結合到統一的框架中,叫做 Deep Structured Active Contours(DSAC)
  • 提出 end-to-end 解決方案,可以學習 guiding features 和 local priors

語義分割問題的套路是 dense prediction,即對每一個像素點都預測其標籤類別,最後得出分割結果。這種分割方法優點是可以提供全局數據信息,比如分割目標的面積(只要看有多少像素點屬於該目標);缺點是缺少實例級的預測。

CNN 做建築物分割任務時,通常有較高的檢測率,但在空間覆蓋和幾何正確性方面表現不好。

爲什麼?

Q:ACM(snakes)能解決分割的什麼問題?

ACM 提出具有 高級幾何約束 和 先驗知識 的 自下而上 的 boundary detector

Q高級幾何約束是什麼?

Q先驗知識?

ACM 原理:將可能的輸出曲線約束爲一組曲線(比如一個閉合的曲線,曲線上有固定數量的點),然後通過最小化能量函數優化這條曲線,最小化能量函數的依據就是圖像特徵和分割目標的形狀先驗知識,比如說邊界的連續性和平滑性

提出一些術語

balloon term:提出論文:On Active Contour Models and Balloons
模仿氣球,能夠持續將曲線的頂點向外推,阻止曲線坍縮成一個點

將物體檢測問題看作是帶有先驗知識的 polygon fitting 問題,可以精確預測物體邊界,而不需要後處理

原始的公式缺少靈活性,因爲其依賴於低級圖像特徵和先驗的全局參數

一種解決方法是增大對直線/光滑部分曲率的懲罰,減少在更可能成爲拐角處的曲率的懲罰

balloon term 作爲一種 post-energy global minimization force,並不參與 snake 的能量最小化

本文提出將 CNNs 的表現性和 ACMs 的活動性結合到統一的框架中,叫做 Deep Structured Active Contours(DSAC),使用 CNN 學習能量函數,

能量函數讓 ACM 能夠產生一個和 ground truth 很接近的曲線

DSAC 通過學習高級圖像特徵和先驗知識參數(包括 balloon term),改變初始的 ACM 公式
比如:在圖像中的每個像素位置上,給予不同的懲罰

將 ACM 的優化問題看作是一個結構預測問題,利用 SSVM(Structured Support Vector Machine)Loss 找到最優特徵和參數

因此,DSAC 可以進行端到端的培訓,並且能夠學習和適應特定的對象實例系列。

DSAC 使用高級別的幾何信息作爲 CNN 的輸入,來彌補上面的不足(???)

像素級的 CNN,不像 polygonal output model 那樣容易直接集成輸出形狀優先級

DSAC 通過加入局部先驗信息(加權 snake 基於每個像素點的能量函數項),改進原始公式。

雖然這項工作的重點是曲率優先用於分割多邊形形狀的物體,其他的先驗可以用ACMs來實現,例如生物醫學成像的凸性[23]。

使用結構化損失作爲 CNN 的學習信號,使它學會協調不同的 ACM 能量項,這些項是高度相互依賴的。

概念:
ACM(Snakes):Snakes: Active Contour Models

balloon term:On Active Contour Models and Balloons

SSVM(Structured Support Vector Machine):Support Vector Machine Learning for Interdependent and Structured Output Spaces

Large margin methods for structured and interdependent output variables

humans in the loop:《Semiautomated building footprint extraction from orthophotos》

polygonal shape prior:
已證明多角形先驗能夠提升基於彩色圖像和低級特徵的分割效果


5. 方法細節

給出了一種改進的,基於圖像的局部懲罰項 的 ACM 推理算法,以及用於訓練 CNN 生成這些懲罰映射的 結構化損失
在這裏插入圖片描述

DSAC 訓練思想:CNN 預測能量項的值(包括 α\alphaβ\betakkDD),然後 ACM 使用 CNN 預測的這些值來生成一個預測的 polygon,計算它的結構化損失並輸入回 CNN,這樣就實現了參數能夠通過反向傳播進行更新。

CNN 用於預測 ACM 能量項的值,包括:

  • length penalization:全局的長度懲罰項 α\alpha,控制 polygons 的長度
  • data term:數據項 DD,也可以說是局部映射
  • curvature penalization:曲率懲罰 β\beta,控制 polygons 的曲率
  • ballon term kk

DSAC 訓練算法:

在每一次迭代過程中,CNN forward pass 後跟着 ACM inference,ACM inference 會預測一個 countour,用於計算 structured loss,然後 loss 送回 CNN 進行反向傳播更新參數,再進行下一次迭代。
在這裏插入圖片描述

  • XXYY 是訓練集的原圖和其對應的 mask 的集合,xix_iyiy_i 就是這兩個集合中的某一對兒訓練數據
  • Y0Y^0 是每張訓練圖像對應的初始的輪廓線

第一次迭代時,初始化參數 DDα\alphaβ\betakk,將這些參數和初始的輪廓線 yi0y^0_i 送入 ACM,ACM 得出計算結果 y^i\hat y_i,即新的輪廓線【對應循環內 1、2 步】

然後根據 ACM 得出的輪廓線 y^i\hat y^i 和訓練集中對應的 mask yiy_i 計算微分【對應循環內第 3 步】

最後通過反向傳播更新 CNN 的權重參數 ω\omega【對應循環內 4、5 步】

從第二次迭代開始,參數 DDα\alphaβ\betakk 由上一輪迭代更新後的 CNN 計算而來。

結構性損失(structured loss)由 ACM 計算出的輪廓線計算得來。

5.1 Locally penalized active contours

active contour 表示爲一條輪廓曲線:polygon y=(u,v)y = (u,v),進一步,當在這條輪廓曲線上取 LL 個離散的點時,又可以表示爲有 LL 個節點的 polygon ys=(us,vs)R2y_s = (u_s, v_s) \in R^2,其中 s1...Ls \in 1...L,每個 ss 就表示離散輪廓上的節點。

經過變形,使能量函數最小化:
在這裏插入圖片描述
最小化能量函數其實就是在一個 “給定的 countour 狀態” 下,最小化各個參數。

其中:

  • D(x)RU×VD(x) \in R^{U \times V} 是數據項,取決於尺寸爲 U×VU \times V 的輸入圖像,xRU×V×dx \in R^{U \times V \times d}
  • α(x)\alpha(x)β(x)\beta(x) 分別鼓勵 polygon 趨於 short 和 smooth,且 α(x),β(x)RU×V\alpha(x),\beta(x) \in R^{U \times V}
  • k(x)k(x) 爲 balloon term
  • Ω(y)\Omega(y) 是由 polygon yy 圍成的區域
  • D(x,(ys))D(x,(y_s)) 表示在曲線 ys=(us,vs)y_s = (u_s,v_s) 位置處的 D(x)D(x)

考慮到局部性,DDβ\betakk 均爲 U×VU \times V 大小的矩陣,α\alpha 爲一個標量

1.1 Data term

數據項定義了 polygon nodes “應該” 在的區域

通常數據項 D(x)D(x) 是預定義的函數,一般和圖像的梯度有關

理想的狀況下,CNN 得出的 D(x)D(x) 應該爲分割目標的邊界提供相對較低的數值,而爲其他區域提供相對較高的數值。

在 ACM inference 過程中,最陡的方向作爲 data force term,讓 contour 向着 D 比較低的方向移動。

data force term:在這裏插入圖片描述

1.2 Internal terms

通常來說 α\alphaβ\beta 都是單個標量,意思就是對所有地方的懲罰強度都是一樣的。(但這篇文章不是這樣!這裏對懲罰曲率的參數 β\beta 進行了改進)

直觀想一下,如果各個點對曲率的懲罰都使用同一個參數,假如有一點是 over-smoothing 的,參數會傾向於減小,來降低 smoothing 的程度;但若同時又有一個點是 under-smoothing 的,參數又傾向於增大,來加強 smoothing 的程度。
那麼這時,參數左右爲難,就會進行 trade-off,即 “折中處理“,因爲大家都很難滿足,所有乾脆既不 smooth,也不 sharp 了,這樣其實誰也滿足不了。

而懲罰長度的參數 α\alpha 就不像懲罰曲率的參數 β\beta 那麼重要,所以 α\alpha 仍然延用了通常的標量。

DSAC 對 β\beta 的改進是避免 trade-off,對每個 pixel 都分配不同的 β\beta 懲罰
後面這句話不太理解:
depending on which part of the object lies underneath

(下面不是很理解 ???)
內能 EintE_{int} 定義:
Eint=α(x,(ys))y2+β(x,(ys))y2 E_{int} = \alpha(x,(y_s))|y'|^2 + \beta(x,(y_s))|y''|^2
內能也是能量的一種,目標是最小化內能,

內能 EintE_{int} 懲罰 polygon 的長度和曲率,爲了獲得梯度下降最快的方向,可以將內能表示爲有限差分函數:
在這裏插入圖片描述
計算內能 EintE_{int} 的導數,
在這裏插入圖片描述
Jacobian 矩陣可以表示爲矩陣乘法:
在這裏插入圖片描述
A(α)A(\alpha) 爲三對角矩陣,B(β)B(\beta) 爲五對角矩陣

1.3 Balloon term

初始的 balloon term 在 contour 節點的法線方向上添加相等的力,從而使 contour 擴張。

效仿 β\beta,爲了增加靈活性,故在不同節點上設置不同大小的力,這樣就能針對性地處理不同節點。

在之前的工作中(《On active contour models and balloons》),將 balloon term 看作是固定的力,也就是計算其他能量項最陡的下降方向後,直接把 balloon term 加在後面。而在 DSAC 裏,SSVM 將 balloon term 也作爲能量項之一。

contour 上 ysy_s 處的法線方向:
在這裏插入圖片描述
整組法線向量表示爲:
在這裏插入圖片描述
其中 CC 爲三對角矩陣,主對角線上是 0,對角線上方爲 1,下方爲 -1

將這個表達式與 uuvv 相結合,得到了對應於輪廓內部面積的標量 EbE_b
在這裏插入圖片描述

提出最大化由 Ω(y)\Omega(y) 所圍成的面積

在滿足 kk 的條件下,離散化 ? 到每個像素值上
在這裏插入圖片描述

修改之後,需要找到 L×2L \times 2 大小的 Jacobian matrix ,對 force form 進行重新計算。

對應了 usu_svsv_s 會如何影響 EkE_k

當影響很小時,就假定 k(u,v)k(u,v)[ys,ys+1][y_s,y_{s+1}][ys1,ys][y_{s-1}, y_s] 方向上的分佈分別與 [ys+Δy,ys+1][y_s + \Delta y, y_{s+1}][ys1,ys+Δy][y_{s-1}, y_s + \Delta y] 相同

這可以歸結爲對一系列梯形區域的求和,形成了兩個所描繪的三角形,每個三角形都是按其賦值加權的。
在這裏插入圖片描述
ysy_suuvv 方向的擾動會導致兩個陰影區域的改變

在圖 a)中,上下兩個三角形有相同的長度 Δus\Delta u_s,而高度分別爲 vs1vsv_{s-1} - v_svs+1vsv_{s+1} - v_s

在圖 b)中,上下兩個三角形有相同的長度 Δvs\Delta v_s,而高度分別爲 us1usu_{s-1} - u_sus+1usu_{s+1} - u_s

獲得 a)中 kk 的加權區域:
在這裏插入圖片描述
需要推出的 force term 爲:
在這裏插入圖片描述

要獲得 b)中 kk 的加權區域,只需要將 a)中的 uuvv 互換一下即可。

These derivatives point in the normal direction when the values of k are equal in all locations.

3.2 Active contour

在 active contour 問題裏,能量函數 E(y,x)E(y,x) 包含四個部分:在這裏插入圖片描述
這四個部分是 external terms EextE_{ext}、data (D)(D)、balloon energies (Ek)(E_k) 以及 internal terms EintE_{int}

其中 EintE_{int} 是關於 length (α)(\alpha) 和 curvature (β)(\beta) 的能量

由於 EintE_{int} 僅僅與輪廓 yy 有關,定義新的更新規則:
在這裏插入圖片描述
在每個新的時間步最小化 EintE_{int}

yt+1y^{t+1} 解上面的表達式,得到:
在這裏插入圖片描述
其中,II 爲單位矩陣

論文中使用 TensorFlow Graph 實現了描述的局部懲罰 ACM。對於本文所使用的設置,在單個CPU上,推理時間小於50 ms。

3.3 Structured SVM loss

由於懲罰項沒有 ground truth,所以將這個問題看作結構化預測問題

損失增強推理用於生成負實例,來補充 ground truth polygons 的正實例

修改能量項的權重,使 ground truth 對應的能量很小,而使得損失函數增加的被認爲是錯誤的

ground truth pairs Δ(yi,xi)Y×X\Delta(y^i, x^i) \in Y \times Xi=1...Ni = 1 ... N

loss function δ(y,y^)\delta(y, \hat y)

通過優化 Eq.1,找到 CNN 參數 ω\omega,然後就能得到 inference result:
在這裏插入圖片描述
希望得到的是預測結果 y^i\hat y^i 和真實結果 yiy^i 很小的差異 Δ(yi,y^i)\Delta(y^i, \hat y^i)

所以問題就變成了找到使能量函數 E 最小的 ω\omega
在這裏插入圖片描述
由於預測值和 ground truth 的差異肯定不是連續的函數,所以用一個連續的曲線來代替,比如 hinge loss

通過對所有訓練樣本添加 l2l_2 正則並求和,就可以得到一個 max-margin formulation:
在這裏插入圖片描述
其中 L(Y,X,ω)L(Y, X, \omega) 是凸函數但不可微,所以計算 subgradient,這就需要找到當前 ω\omega 值得最大懲罰約束:
在這裏插入圖片描述
第一次運行 ACM 時,使用當前的 ω\omega 和與 loss Δ(y,yi)\Delta(y, y^i) 對應的 term

首次獲得了預測值 y^i\hat y^i 後,就可以計算 subgradient:
在這裏插入圖片描述
四個參數的梯度計算如下:
1)數據項
在這裏插入圖片描述
2)長度懲罰
在這裏插入圖片描述
3)曲率懲罰
在這裏插入圖片描述
4)balloon term 懲罰
在這裏插入圖片描述
其中,[][] 表示 Iverson bracket

最後,我們可以通過鏈式法則獲得 ω\omega 的梯度:在這裏插入圖片描述
更新 CNN 的參數 ω\omega
在這裏插入圖片描述
這將同時降低 E(yi,xi,ω)E(y^i, x^i, \omega),升高 E(y^i,xi,ω)E(\hat y^i, x^i, \omega),使下一次 inference 時獲得更好的結果。

LOSS:

採用 IoU 度量預測結果 yy 和 ground truth yiy^i,對 IoU 的優化可以分爲 ”最大化交集“ 和 ”最小化並集“,

實驗部分

使用兩種初始化方案:
1)手動初始化:人工在建築物附近提供一些 clicks
數據集:Vaihingen 和 Bing Huts

2)自動初始化:使用實例分割算法生成一些初始的 polygons
數據集:Toronto City dataset

4.1 CNN結構

CNN 結構模仿《Hypercolumns for object segmentation and fine-grained localization》中的網絡結構

網絡輸入尺寸固定

第一層 7*7 卷積
第二層 5 5
其餘層均爲 3 3
所有卷積層後接 ReLU、Batch normalization 和 2 2 max-pooling

每一層的卷積核個數:32, 64, 128 ,128, 256,256

每一層的輸出都上採樣到輸出尺寸,並進行 cat

CNN 預測結束後,兩層的 MLP(分別由 256 和 64 個隱藏單元)用於預測四個 output map:D(x),α(x),β(x),k(x)D(x), \alpha(x), \beta(x), k(x)

這一結構使用於所有的數據集,唯一例外是 Bing Huts 數據集去掉了最後兩個卷積層

優化器:Adam optimizer
學習率:10410^{-4}
數據增強:隨機旋轉

迭代次數均設置爲 50

節點數量:
Vaihingen 和 TorontoCity 設置爲 60
Bing Huts 設置爲 20

4.2 Manual Initialization

Vaihingen buildings:
訓練:100
測試:68

Bing huts:80*80 的圖片
訓練:335 張
測試:270 張

4.3 Automatic initialization

使用 DWT(Deep Watershed Transform)實例分割算法初始化 active contour,DWT 雖然有不錯的 recall,但傾向於欠分割,且靠近目標邊緣的地方會丟失細節。

實驗結果

在這裏插入圖片描述

經過消融實驗證明,使 balloon term kk 和 曲率懲罰 β\beta 從單個值變爲各個局部都不等,效果有明顯提升

而將長度懲罰 α\alpha 看作單個標量沒有性能的損失

另外,還強調了 balloon term 對於輪廓收斂的重要性

在這裏插入圖片描述
綠色爲 ground truth
藍色爲 初始化分割結果
黃色爲 DSAC 得到的分割結果

data term D(x)D(x) 在輪廓上的能量很低,其餘區域能量較高

balloon term k(x)k(x) 在目標內部產生正值,尤其是接近拐角處

thin plate term β(x)\beta(x) 在拐角處的懲罰較小

作者自己說,主要侷限性是初始化分割結果是通過某種外部方法進行的,因此不包括在學習過程中。

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