【邊緣檢測】HED論文筆記

論文全稱:Holistically-Nested Edge Detection

亮點

1、基於整個圖像的訓練和預測

2、多尺度和多水平的特徵學習

3、基於FCN和VGG 改進

4、通過多個side output輸出不同scale的邊緣,然後通過一個訓練的權重融合函數得到最終的邊緣輸出。可以solve edge 和物體boundaries的ambiguity

檢測效果

算法結構 

作者提出的holistically-nested方法,主要通過幾種不同的多尺度深度學習下的結構進行對比說明。在多尺度方面,有更加內部網絡形成的多尺度,和外部網絡形成的多尺度。前者是學習神經網絡裏不同層由於降採樣的不同得到的不同尺度特徵,結合形成多尺度,後者是通過對輸入圖像的尺度處理時的多尺度,獲得不同尺度信息。作者將具體多尺度下的深度學習分爲四種,如下圖。

(a)Multi-stream learning 示意圖,可以看到圖中的平行的網絡下,輸入是同時輸進去,經過不同路的network之後,再連接到一個global out layer得到輸出。

(b)Skip-layer network learning 示意圖,該方法主要連接各個單的初始網絡流得到特徵圖,並將圖結合在一起輸出。

這裏(a)和(b)都是使用一個輸出的loss函數進行單一的迴歸預測,而邊緣檢測可能通過多個迴歸預測得到結合的邊緣圖效果更好。

(c)Single model on multiple inputs 示意圖,單一網絡,圖像resize方法得到多尺度進行輸入。

(d)Training independent networks ,通過多個獨立網絡分別對不同深度和輸出loss進行多尺度預測,該方法下訓練樣本量較大。

(e)Holistically-nested networks,本文提出的算法結構,從(d)演化來,類似地是一個相互獨立多網絡多尺度預測系統,但是將multiple side outputs組合成一個單一深度網絡。

 

網絡架構

作者在conv1_2, conv2_2, conv3_3, conv4_3,conv5_3後面分別引出側輸出,然後接入sigmoid_cross_entropy_loss,並且在最後一層,對上面的5層的輸出做了concat,同時也接入sigmoid_cross_entropy_loss,這樣所有的Loss都等概率的同時訓練,從而使得最終得到比較好的模型。

在預測階段,可以直接取最後一層的輸出結果最爲最終結果。也可以將所有的層的輸出結果都得到,然後求一個平均作爲最終結果。這樣做的優勢就是會使得精度進一步提高,缺點就是加入額外操作,時間會增加。

具體改動:

基於VGG網絡,

1)將side output layer 與每個stage(理解爲每一組卷積池化)的最後一層卷積層相連,也就是conv1_2, conv2_2, conv3_3, conv4_3,conv5_3,這些卷積層的卷積核尺寸與對應的side-output layer完全相同。

2)去掉了VGG的最後一個stage,也就是最後一個池化和後面所有的全連接層。

畫圖理解

把 VGG16 變成下面這種示意圖:

去掉不需要的部分後,就得到上圖這樣的網絡結構,因爲有池化層的作用,從第二組開始,每一組的輸入 image 的長寬值,都是前一組的輸入 image 的長寬值的一半。

 HED 網絡是一種多尺度多融合(multi-scale and multi-level feature learning)的網絡結構,所謂的多尺度,就是如上圖所示,把 VGG16 的每一組的最後一個卷積層(綠色部分)的輸出取出來,因爲每一組得到的 image 的長寬尺寸是不一樣的,所以這裏還需要用轉置卷積(transposed convolution)/反捲積(deconv)對每一組得到的 image 再做一遍運算,從效果上看,相當於把第二至五組得到的 image 的長寬尺寸分別擴大 2 至 16 倍,這樣在每個尺度(VGG16 的每一組就是一個尺度)上得到的 image,都是相同的大小了。

參考:https://blog.csdn.net/sinat_26917383/article/details/73087831