Holistically-Nested Edge Detection 論文總結


主要工作

提出了一種整體嵌套邊緣檢測網絡(Holistically-Nested Edge Detection,HED),用於自然圖像的邊緣以及物體邊界的檢測。首先將 VGG 網絡的第五層卷積以后的池化層以及所有全連接層全部刪除,剩下的部分作為基礎網絡。然后將五個卷積層輸出的特征圖分別上采樣至輸入圖像大小,從側邊輸出邊緣預測圖像,與標簽圖像進行誤差計算和反向傳播,形成深度監督。再將以上五個輸出邊緣預測圖進行特征融合,得到更精確的邊緣預測圖像,也進行誤差計算和反向傳播。最后在 BSD500 以及 NYUD 數據集上進行了測試。結果表明該方法在 BSD500 和 NYUD 上分別取得了 0.782 和 0.746 的 ODS F-score ,性能表現上遠超過現有最先進的方法;同時在運行速度上也快其他 CNN 方法幾個數量級,平均每幅圖預測只需要 0.4s。

網絡結構

HED 的網絡結構設計時,主要考慮了以下幾個方面的問題:

  • 根據經驗,對於邊緣和物體邊界檢測,通常需要從不同層級、不同尺度進行視覺感知,因此網絡設計時需要兼顧這兩個關鍵點;

  • 當網絡層數較深時,會給訓練帶來困難。

綜合以上問題和現有的 VGG 網絡以及深度監督方法,作者設計出了 HED 的主體架構。

  • VGG 結構改造。VGG 在圖像分類任務上已經被證明了具有強大學習能力,因此在 VGG16 網絡上進行改進。對於五個卷積層,分別將 Conv1-2Conv2-2Conv3-3Conv4-3Conv5-3 這五個階段的特征圖通道數壓縮到 1 ,並上采樣到輸入圖像尺寸大小,激活后輸出邊緣預測圖。對於 Conv5-3 之后的池化層以及全連接層,將他們全部刪除,以減少參數量,加快訓練;並且卷積次數太多,導致最終的特征圖很小,如果再進行上采樣的話,會使得圖像的邊緣變得十分模糊,所以索性將他們全部刪除掉。這樣下來,得到了多尺度和多層級的邊緣預測圖。

  • 深度監督。但是,如何確保側邊輸出的預測圖一定是我們想要的邊緣圖像?為了解決這個問題,將標簽圖分別與各側邊輸出圖計算誤差和反向傳播,這樣形成一種深度監督。網絡只有讓側邊輸出的圖像盡可能的像標簽圖像,才會逐漸收斂,否則就懲罰它。

  • 特征融合。五個側邊輸出圖像來自於五個卷積層,這些卷積層是具有層級關系的,層數越深,網絡的分類特征越豐富,所以五個輸出邊緣預測圖邊緣特征逐漸精細。為了更進一步的充分發揮這五個側邊輸出的作用,將他們做一個特征融合,即首先將輸出預測圖堆疊到一起,做一個卷積,讓網絡去學習合適的權重,對這幾個特征圖進行加權融合,從而輸出一個更精細的邊緣預測圖。

損失函數

根據前面所設計的網絡結構,網絡進行了側邊輸出以及融合輸出,因此對應的損失值計算也來自這兩部分。

對於五個側邊輸出,類似於圖像分割,因此考慮使用二進制交叉熵(Binary Cross Entropy,BCE)進行計算。但邊緣檢測的圖像與圖像分割圖像有很大差異,圖像中作為邊緣的像素數目非常少,而絕大多數的其他像素都是非邊緣的,這就存在一個類不平衡問題。不可以直接使用 BCE ,否則網絡得不到足夠的訓練,更傾向於將像素預測為非邊緣的,以獲得更低的損失值,但這是我們不想要的,我們希望網絡對邊緣像素預測的更准一點。因此作者引入一個權重 \(\beta\) ,來平衡損失值。分別統計數據集中邊緣像素和非邊緣像素的總數,對於預測為邊緣像素的,其損失值乘以一個非邊緣像素占總像素的比值,同理,預測為非邊緣像素的,也乘以一個邊緣像素占總像素的比值。這樣實現類平衡調整。即

\[\ell _{{\text{side}}}^{\left( m \right)}\left( {{\mathbf{W}},{{\mathbf{w}}^{\left( m \right)}}} \right) = - \beta \sum\limits_{j \in {Y_ + }} {\log \Pr \left( {{y_j} = 1\left| {X;{\mathbf{W}},{{\mathbf{w}}^{\left( m \right)}}} \right.} \right)} - \left( {1 - \beta } \right)\sum\limits_{j \in {Y_ - }} {\log \Pr \left( {{y_j} = 0\left| {X;{\mathbf{W}},{{\mathbf{w}}^{\left( m \right)}}} \right.} \right)} \]

\[\beta = \left| {{Y_ - }} \right|/\left| Y \right| \]

\[1-\beta = \left| {{Y_ + }} \right|/\left| Y \right| \]

對於融合后的輸出,直接使用交叉熵計算損失值。

\[\mathcal{L}_{\text{fuse}}(\boldsymbol{\rm{W}},\boldsymbol{\rm{w}},\boldsymbol{\rm{h}}) = \text{Dist}\left(Y,\hat Y_{\text{fuse}}\right) \]

最后,將五個側邊輸出的損失值分別乘以一個權重 \(\alpha_m=1\),和融合后的輸出損失值相加,得到最終的損失值。

\[\mathcal{L}_{\text{side}}(\boldsymbol{\rm{W}},\boldsymbol{\rm{w}})=\sum_{m=1}^{M}\alpha_{m}\ell_{\text{side}}^{(m)}(\boldsymbol{\rm{W}},\boldsymbol{\rm{w}}^{(m)}) \]

\[(\boldsymbol{\rm{W}},\boldsymbol{\rm{w}},\boldsymbol{\rm{h}}) ^* = \text{argmin}(\mathcal{L}_{\text{side}}(\boldsymbol{\rm{W}},\boldsymbol{\rm{w}}) + \mathcal{L}_{\text{fuse}}(\boldsymbol{\rm{W}},\boldsymbol{\rm{w}},\boldsymbol{\rm{h}})) \]

對上面這個目標損失函數作最小值優化,即可訓練得到所需的網絡模型。

數據集

使用了兩個常用的邊緣檢測數據集進行測試。

BSD500

下載地址:https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/resources.html

訓練集 驗證集 測試集
200 100 200

NYUD

下載地址:https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html

訓練集 驗證集 測試集
381 414 654

訓練與測試

訓練時,使用 VGG16 預訓練權重進行初始化。各超參數選取如下:

  • 優化器:隨機梯度下降優化器(SGD)

  • 批大小(batch size):10

  • 學習率(learning rate):1e-6

  • 側邊輸出損失值求和時的權重 \(\alpha_m\) :1

  • 動量(momentum):0.9

  • 卷積層權重初始化為0,融合層的卷積權重初始化為1/5

  • 權重衰減系數(weight decay ):0.0002

  • 訓練輪數(epoch):10000

  • 學習率更新策略:當迭代輪數達到5000后,學習率除以10

  • 輸入圖像的大小統一重新調整為 400 × 400 大小,以加快 GPU 處理速度

對比實驗

體系結構替代

為了驗證所提的網絡模型是否具有明顯的優勢,即該網絡結構能否被替換。對比了四種網絡: FCN-8S(損失函數改為交叉熵)、FCN-2S(在網絡中添加來自 pool1 和 pool2 層的其他鏈接)、HED在不對側邊層輸出進行深度監督情況下的融合層輸出(Fusion-output (w/o deep supervision))以及HED在對側邊層輸出進行深度監督情況下的融合層輸出(Fusion-output (with deep supervision))

對比結果發現,FCN 效果不如所提出的HED 模型;然后HED加深度監督比不加深監督要好。

當不加深監督時,預測的邊緣更粗糙,加了深監督后,各層的側邊輸出具有明顯的漸進特點,輸出變得越來越粗,越來越全局化,保留了關鍵的邊界信息。

其他結論

  • 作者對原始數據集進行了擴張,使用16個不同角度旋轉+翻轉操作,可擴大32倍,這里旋轉后需要裁剪最大矩形,去除黑色背景帶來的影響。
  • 如果將所有池化層全部換為平均池化,會使性能降低到 ODS = .741
  • 上采樣可以使用插值也可以使用轉置卷積,但作者發現轉置卷積效果並不明顯,因此選擇了插值方法進行上采樣。
  • 網絡在 單個 NVIDIA K40 GPU 上訓練大概需要 7 個小時。

BSDS500數據集上的多模型對比實驗

可以看到 HED 效果最好,F = 0.782,最接近人類水平 0.800。

作者還發現,加權融合的輸出能夠獲得更高的 F-score,而對五個層進行平均則可獲得更高的 AP,而將這二者在做一個平均則效果得到進一步提升。

剩下的就是與其他模型對比了:

作者還探討了數據集的容量帶來的影響,將測試集中隨機采樣100張圖像擴充到訓練集中進行訓練,剩下的100張做測試,結果發現ODS 從0.782 提升到了 0.797(±.003),這說明數據集的擴增可以提升模型性能,未來通過更大的數據集可以將模型性能訓練到接近人類水平。

NYUD數據集上的多模型對比實驗

這里的數據集是深度圖像,因此與前面的有所區別。

img

作者使用三個通道對深度圖像進行HHA編碼,得到 HHA 特征圖像作為輸入圖像數據,此外還有RGB圖像。結果如下:

論文代碼

作者原始論文的代碼是使用 caffe 實現的,項目地址為 https://github.com/s9xie/hed

基於 Pytorch 實現的 HED 項目如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM