Holistically-Nested Edge Detection讀書筆記

這是一篇邊緣檢測的文章,邊緣檢測跟semantic segmentation有點類似,邊緣檢測就是把邊緣設置爲1,其他的爲0;而semantic segmentation只是把邊緣內部爲1,而外部爲0。如果我們把邊緣檢測出來,只要把內部設置爲1,外面設置爲0就可以得到semantic segmentation的結果。因而,瞭解邊緣檢測對語義分割還是有所幫助的。並且,這兩個任務存在一定程度的不同之處,那麼可以使用一個任務進行預訓練模型,再用預訓練好的模型去訓練另外一個模型,或者將把另外一個任務作爲側監督,上述兩種方法在某些醫療圖像中已經驗證了具有一定的效果。

1. Holistically-Nested Edge Detection

作者的貢獻點集中在兩個方面:(1)採用deep supervision指導後半部分的層,(2)將後半部分的不同層的結果(shape不一樣)分別進行上採樣,並將各個層的結果進行融合(一種方法是將各個層的上採樣輸出值求average,另外一個將各個層上採樣的輸出值concatenate在一起然後再經過卷積得到最後的輸出)

1.1 Existing multi-scale and multi-level NN


(a)將同一個輸入進過不同個數的卷積層,然後將輸出合併再經過一個卷積得到最後的輸出。

(b)將一個輸入經過多個卷積核,並將每個卷積核的輸出結果concatenate在一起,在經過一個卷積得到輸出。(a)和(b)差別在於(a)是橫向的,而(b)是縱向的。

(c)將輸入先resize成不同大小的shape然後再放進去卷積層。

(d)將一個輸入經過多個不同個數的卷積,然後將對結果進行ensemble。

(e)作者提出來的方法,對於一個輸入,經過連續的卷積層,將每一層的結果保存下來進行ensemble得到第一個輸出,同時將每一層的結果concatenate在一起再過一個卷積核得到第二個輸出,最後將兩個輸出在ensemble在一起得到最後的結果。

ps:這裏的ensemble用的都是average。

1.2formulation

考慮到邊緣的pixel個數很少,所以數據的類別不平衡十分嚴重,作者採用了加權的cross-entropy作爲損失函數。


這裏beta作爲損失函數的權重,其利用正負樣本在總樣本的權重來作爲損失函數的權重。optimize過程爲:


這裏W代表主幹網絡的參數,w則是將不同層的結果進行upsample對應的網絡參數,b則是將不同層的結果concatenate在一起然後經過一個卷積得到最後的輸出時候的卷積網絡的參數。

2.實驗


可以看出將不同層的結果進行融合可以取得明顯的提升,同時對於不同層的輸出結果加上側監督也有幫助。


從上表可以看出,雖然第一層輸出結果與Groud Truth差別很大,但是在求avg的時候,如果僅僅統計中間三層的output,會比統計所有輸出層的結果更差,這一點值得我們警惕。

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