推薦一個不錯的邊緣檢測網路:HED

重磅乾貨,第一時間送達

01 邊緣檢測運算元

要得到一張圖片的邊緣,我們可以透過邊緣運算元,下面著重介紹Sobel運算元。

Sobel運算元是典型的基於一階導數的邊緣檢測運算元,由於該運算元中引入了類似區域性平均的運算,因此對噪聲具有平滑作用,能很好的消除噪聲的影響。Sobel運算元對於象素的位置的影響做了加權。

Sobel運算元包含兩組3x3的矩陣,分別為橫向及縱向模板,將之與影象作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。實際使用中,常用如下兩個模板來檢測影象邊緣。

檢測水平邊沿 橫向模板:

檢測垂直平邊沿 縱向模板:

影象的每一個畫素的橫向及縱向梯度近似值可用以下的公式結合,來計算梯度的大小。

最後用以下公式計算梯度方向:

最後程式碼如下:

02 Holistically-Nested Edge Detection

這篇文章使用深度學習的方法,其中Holistically表示該演算法試圖訓練一個image-to-image的網路;Nested則強調在生成的輸出過程中透過不斷的整合和學習得到更精確的邊緣預測圖的過程。文章把HED和傳統Canny演算法進行邊緣檢測的效果對比,如下圖我們可以看到HED的效果要明顯優於Canny運算元的。

推薦一個不錯的邊緣檢測網路:HED

03 網路具體實現

使用VGG-16作為骨幹網路,並且使用遷移學習初始化網路權重。

文章中列舉了幾種multi scale的deeplearning方法,具體如下圖

(a) Multi-stream learning: 使用不同結構,不同引數的網路訓練同一副圖片,類似的結構有Inception;

(b) Skip-layer network learning:該結構有一個主幹網路,在主幹網路中新增若干條到輸出層的skip-layer,類似的結構有FPN;

(c) Single model on multiple inputs: 該方法使用同一個網路,不同尺寸的輸入影象得到不同尺度分Feature Map,YOLOv2採用了該方法;

(d) Training independent network: 使用完全獨立的網路訓練同一張圖片,得到多個尺度的結果,該方法類似於整合模型;

(e) Holistically-Nested networks: HED採用的方法。

Holistically-Nested networks的具體結構如圖:

推薦一個不錯的邊緣檢測網路:HED

VGG-16作為backbone。在VGG-16的5個block的Max Pooling降取樣之前,HED透過side_branch函式產生了5個分支,最後這5個side_branch的輸出透過Concatenate操作合併在一起。網路的5個side_branch和一個fuse branch透過sigmoid啟用函式後共同作為網路的輸出,每個輸出的尺寸均和輸入影象相同。

04 損失函式

損失函式主要涉及關於side branch的目標函式和fuse層的損失函式。

網路最後的目標就是最小化這個兩個損失之和:

END

好訊息,小白學視覺團隊的知識星球開通啦,為了感謝大家的支援與厚愛,團隊決定將價值149元的知識星球現時免費加入。各位小夥伴們要抓住機會哦!

下載1:OpenCV-Contrib擴充套件模組中文版教程

下載2:Python視覺實戰專案52講

下載3:OpenCV實戰專案20講

交流群