論文: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 預測能量項的值(包括 ,,,),然後 ACM 使用 CNN 預測的這些值來生成一個預測的 polygon,計算它的結構化損失並輸入回 CNN,這樣就實現了參數能夠通過反向傳播進行更新。
CNN 用於預測 ACM 能量項的值,包括:
- length penalization:全局的長度懲罰項 ,控制 polygons 的長度
- data term:數據項 ,也可以說是局部映射
- curvature penalization:曲率懲罰 ,控制 polygons 的曲率
- ballon term
DSAC 訓練算法:
在每一次迭代過程中,CNN forward pass 後跟着 ACM inference,ACM inference 會預測一個 countour,用於計算 structured loss,然後 loss 送回 CNN 進行反向傳播更新參數,再進行下一次迭代。
- 和 是訓練集的原圖和其對應的 mask 的集合, 和 就是這兩個集合中的某一對兒訓練數據
- 是每張訓練圖像對應的初始的輪廓線
第一次迭代時,初始化參數 ,, 和 ,將這些參數和初始的輪廓線 送入 ACM,ACM 得出計算結果 ,即新的輪廓線【對應循環內 1、2 步】
然後根據 ACM 得出的輪廓線 和訓練集中對應的 mask 計算微分【對應循環內第 3 步】
最後通過反向傳播更新 CNN 的權重參數 【對應循環內 4、5 步】
從第二次迭代開始,參數 ,, 和 由上一輪迭代更新後的 CNN 計算而來。
結構性損失(structured loss)由 ACM 計算出的輪廓線計算得來。
5.1 Locally penalized active contours
active contour 表示爲一條輪廓曲線:polygon ,進一步,當在這條輪廓曲線上取 個離散的點時,又可以表示爲有 個節點的 polygon ,其中 ,每個 就表示離散輪廓上的節點。
經過變形,使能量函數最小化:
最小化能量函數其實就是在一個 “給定的 countour 狀態” 下,最小化各個參數。
其中:
- 是數據項,取決於尺寸爲 的輸入圖像,
- 和 分別鼓勵 polygon 趨於 short 和 smooth,且
- 爲 balloon term
- 是由 polygon 圍成的區域
- 表示在曲線 位置處的 值
考慮到局部性,、、 均爲 大小的矩陣, 爲一個標量
1.1 Data term
數據項定義了 polygon nodes “應該” 在的區域
通常數據項 是預定義的函數,一般和圖像的梯度有關
理想的狀況下,CNN 得出的 應該爲分割目標的邊界提供相對較低的數值,而爲其他區域提供相對較高的數值。
在 ACM inference 過程中,最陡的方向作爲 data force term,讓 contour 向着 D 比較低的方向移動。
data force term:
1.2 Internal terms
通常來說 和 都是單個標量,意思就是對所有地方的懲罰強度都是一樣的。(但這篇文章不是這樣!這裏對懲罰曲率的參數 進行了改進)
直觀想一下,如果各個點對曲率的懲罰都使用同一個參數,假如有一點是 over-smoothing 的,參數會傾向於減小,來降低 smoothing 的程度;但若同時又有一個點是 under-smoothing 的,參數又傾向於增大,來加強 smoothing 的程度。
那麼這時,參數左右爲難,就會進行 trade-off,即 “折中處理“,因爲大家都很難滿足,所有乾脆既不 smooth,也不 sharp 了,這樣其實誰也滿足不了。
而懲罰長度的參數 就不像懲罰曲率的參數 那麼重要,所以 仍然延用了通常的標量。
DSAC 對 的改進是避免 trade-off,對每個 pixel 都分配不同的 懲罰
後面這句話不太理解:
depending on which part of the object lies underneath
(下面不是很理解 ???)
內能 定義:
內能也是能量的一種,目標是最小化內能,
內能 懲罰 polygon 的長度和曲率,爲了獲得梯度下降最快的方向,可以將內能表示爲有限差分函數:
計算內能 的導數,
Jacobian 矩陣可以表示爲矩陣乘法:
爲三對角矩陣, 爲五對角矩陣
1.3 Balloon term
初始的 balloon term 在 contour 節點的法線方向上添加相等的力,從而使 contour 擴張。
效仿 ,爲了增加靈活性,故在不同節點上設置不同大小的力,這樣就能針對性地處理不同節點。
在之前的工作中(《On active contour models and balloons》),將 balloon term 看作是固定的力,也就是計算其他能量項最陡的下降方向後,直接把 balloon term 加在後面。而在 DSAC 裏,SSVM 將 balloon term 也作爲能量項之一。
contour 上 處的法線方向:
整組法線向量表示爲:
其中 爲三對角矩陣,主對角線上是 0,對角線上方爲 1,下方爲 -1
將這個表達式與 和 相結合,得到了對應於輪廓內部面積的標量 :
提出最大化由 所圍成的面積
在滿足 的條件下,離散化 ? 到每個像素值上
修改之後,需要找到 大小的 Jacobian matrix ,對 force form 進行重新計算。
對應了 和 會如何影響 。
當影響很小時,就假定 在 和 方向上的分佈分別與 和 相同
這可以歸結爲對一系列梯形區域的求和,形成了兩個所描繪的三角形,每個三角形都是按其賦值加權的。
對 或 方向的擾動會導致兩個陰影區域的改變
在圖 a)中,上下兩個三角形有相同的長度 ,而高度分別爲 和
在圖 b)中,上下兩個三角形有相同的長度 ,而高度分別爲 和
獲得 a)中 的加權區域:
需要推出的 force term 爲:
要獲得 b)中 的加權區域,只需要將 a)中的 和 互換一下即可。
These derivatives point in the normal direction when the values of k are equal in all locations.
3.2 Active contour
在 active contour 問題裏,能量函數 包含四個部分:
這四個部分是 external terms 、data 、balloon energies 以及 internal terms
其中 是關於 length 和 curvature 的能量
由於 僅僅與輪廓 有關,定義新的更新規則:
在每個新的時間步最小化
爲 解上面的表達式,得到:
其中, 爲單位矩陣
論文中使用 TensorFlow Graph 實現了描述的局部懲罰 ACM。對於本文所使用的設置,在單個CPU上,推理時間小於50 ms。
3.3 Structured SVM loss
由於懲罰項沒有 ground truth,所以將這個問題看作結構化預測問題
損失增強推理用於生成負實例,來補充 ground truth polygons 的正實例
修改能量項的權重,使 ground truth 對應的能量很小,而使得損失函數增加的被認爲是錯誤的
ground truth pairs ,
loss function
通過優化 Eq.1,找到 CNN 參數 ,然後就能得到 inference result:
希望得到的是預測結果 和真實結果 很小的差異
所以問題就變成了找到使能量函數 E 最小的
由於預測值和 ground truth 的差異肯定不是連續的函數,所以用一個連續的曲線來代替,比如 hinge loss
通過對所有訓練樣本添加 正則並求和,就可以得到一個 max-margin formulation:
其中 是凸函數但不可微,所以計算 subgradient,這就需要找到當前 值得最大懲罰約束:
第一次運行 ACM 時,使用當前的 和與 loss 對應的 term
首次獲得了預測值 後,就可以計算 subgradient:
四個參數的梯度計算如下:
1)數據項
2)長度懲罰
3)曲率懲罰
4)balloon term 懲罰
其中, 表示 Iverson bracket
最後,我們可以通過鏈式法則獲得 的梯度:
更新 CNN 的參數 :
這將同時降低 ,升高 ,使下一次 inference 時獲得更好的結果。
LOSS:
採用 IoU 度量預測結果 和 ground truth ,對 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:
這一結構使用於所有的數據集,唯一例外是 Bing Huts 數據集去掉了最後兩個卷積層
優化器:Adam optimizer
學習率:
數據增強:隨機旋轉
迭代次數均設置爲 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 和 曲率懲罰 從單個值變爲各個局部都不等,效果有明顯提升
而將長度懲罰 看作單個標量沒有性能的損失
另外,還強調了 balloon term 對於輪廓收斂的重要性
綠色爲 ground truth
藍色爲 初始化分割結果
黃色爲 DSAC 得到的分割結果
data term 在輪廓上的能量很低,其餘區域能量較高
balloon term 在目標內部產生正值,尤其是接近拐角處
thin plate term 在拐角處的懲罰較小
作者自己說,主要侷限性是初始化分割結果是通過某種外部方法進行的,因此不包括在學習過程中。