【ICCV2015】Holistically-Nested Edge Detection論文閱讀筆記

一、作者

 

二、方法概括

    本文提出一種新的邊緣檢測算法HED(holistically-nested edge detection),有兩個特點:

1整圖進行訓練和預測;

2多尺度多層次特徵學習。

    利用全卷積網絡(FCN)和deeply-supervised nets(DSN),自動學習豐富的層次化表達。在BSD500(0.782)和NYU Depth(0.746)數據集達到state-of-the-art,速度達到每幅圖400ms。

    github源碼:https://github.com/s9xie/hed,公開訓練好的模型,已經train/test code,可在caffe上使用。  

 

三、創新點和貢獻

    holistic表示邊緣預測的結果是基於image-to-image(端到端)的過程,neted表示在生成的輸出過程中不斷地繼承和學習,從而得到邊緣預測圖(edge maps)的過程,這裏使用多尺度的方法學習特徵。(其意義是能夠產生不同scale的輪廓線。該網絡基於VGG,有五層不同level的輪廓線輸出。)

    因爲希望顯示每個預測的路徑對於每個edge maps是通用的,可使連續邊緣maps更加簡潔,不像canny有很多不連續邊緣。

本算法有兩個貢獻:

1.整體圖像的訓練和預測,使用FCN網絡,輸入原圖,直接輸出edge map圖像;

2.嵌套多尺度特徵學習,通過deeply-supervised nets[34],執行深層監督去指引早期分類結果;                                                                                                                

四、相關方法

邊緣檢測關鍵點:

  1. 提取的特徵;
  2. 多尺度融合;
  3. 不同level視覺感知的運用;
  4. 合併結構信息(輸入與輸出的內在聯繫)和內容;
  5. 實現整體圖像的預測;
  6. 開拓3D幾何學;
  7. 尋找封閉的邊界;

    一些基於CNN的方法,掌握1-3的關鍵點,但是缺乏deep supervision,隱藏層產生多尺度響應,缺少有意義的語義信息。而且patch-to-pixel或者patch-to-path策略導致準確性下降。

    本系統是端到端的,使用FCN網絡,還在修正的VGG網絡頂端中增加deep supervision。如果缺少deep supervisionside outputsFCN輸出結果不佳。因爲邊緣檢測要求非常準確的像素級定位。本系統的高準確度得益於:

  1. 基於FCN的image-to-image訓練允許同時訓練大量樣本[table4];
  2. deep supervision指導學習更多易懂的特徵[table2];
  3. 端到端學習的side outputs的插值鼓勵每層進行相互耦合的貢獻[table3];

 

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

  1. Multi-stream learning:不同的參數個數和感受野尺寸,輸入同時進入多流,然後concatenate特徵,進入全局輸出層。
  2. Skip-layer network learning:以基本流爲中心,不同level去incorporate特徵,結合進入共享輸出層。

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

  1. Single model on multiple inputs:單一網絡,多尺度輸入,圖像resize得到多尺度輸入,該方法在train和test過程均可加入。
  2. Training independent networks:從a)演化而來,通過多個獨立網絡分別對不同深度和輸出loss進行多尺度預測,不同輸出loss層。訓練需很多資源,訓練樣本量很大。
  3. Holistically-nested networks:本文提出的算法結構,從d)演化而來,類似一個相互獨立的多網絡多尺度預測系統,但是將multiple side outputs組合成一個單一深度網絡。包含單一流網絡,多面輸出。集成deeply-supervised net工作,其隱藏層監督可以改善圖像分類性能和魯棒性。多面輸出使增加額外融合層更加靈活。

 

五、公式說明

  1. 訓練階段:

    groundtruth是輸入圖像的二值邊緣圖,取值0或1。X是輸入圖像,Y是gt。定義所有標準網絡層參數集合爲W,假設網絡有M個side-output層,每個side-output層關聯一個分類器,對應權重:目標函數爲:

定義ℓside爲圖像層級的side-output層的loss方程。在我們的圖像端到端的訓練中,使用訓練圖像X的所有像素和二值圖gt計算loss方程。

    對於一個標準的場景圖像,一般90%都是非邊緣像素。【19】提出一個對cost敏感的loss方程。本文使用一個簡單的策略自動平衡正負樣本之間的loss,在逐像素上引入類間平衡權重β。索引j是圖像X的空間維度,然後使用類間平衡權重去簡單的抵消邊緣/非邊緣之間的不平衡。特別地,定義如下類間平衡的cross-entropy loss方程:

(參考https://blog.csdn.net/majinlei121/article/details/78884531進行理解)

其中,β = |Y−|/|Y | , 1 − β = |Y+|/|Y |。|Y−|和|Y+|表示邊緣和非邊緣的gt標註集合。

是像素j的sigmoid響應值。在每個side output層,然後獲取邊緣預測圖edge map預測是m層side-output的響應。

    爲了直接利用side-output預測,我們在網絡中添加權重融合層,同時在訓練時學習融合權重。我們的融合層Lfuse的loss方程爲:

其中,其中是融合權重。Dist(·, ·)是融合預測值和gt label map的距離,我們將這個設爲cross-entropy的loss。

通過以上計算,我們可以通過標準(反饋傳播)隨機梯度下降方法來最小化目標方程:

實驗部分有超參數和實驗設置的細節說明。

  1. 測試階段:

    通過測試,制定X圖像,我們可以通過side output layers和weighted-fusion layer獲得邊緣預測圖edge map predictions:

CNN(·)表示我們的網絡生成的edge maps。最終標準輸出集合了這些edge maps。詳細細節在實驗結果章節說明。

 

六、網絡結構

    本文的網絡結構如上圖所示,誤差反向傳播路徑高亮顯示。Side-output層跟在卷積層後。Deep supervision應用在每個side-output層,指導side-outputs獲取特徵進行邊緣預測。HED的輸出是多尺度和多層次的,side-output平面尺寸逐漸變小,感受野尺寸逐漸變大。並加入了一個權重融合層去自動學習多尺度輸出的結合,即訓練一個權重融合函數得到最終的邊緣輸出。整個網絡在訓練時用多種誤差反饋路徑(點線)。

    這個圖非常形象,在卷積層後面側邊插入一個輸出層 side-output 層,在side-output層上進行deep supervision,使得結果向着邊緣檢測方向進行。同時隨着side-output層越向後大小的變小,將receptive field變大,最後通過一個weighted-fusion layer得到多尺度下的輸出。

    本文目標是創建深度網絡去高效的獲得多level的特徵,並在不同步長的各階段獲取edge map的內在尺度。VGGNet在ImageNet獲得state-of-the-art性能,有16卷積層,較大密度(步長1的卷積核)。[2]也證明在通用圖像分類任務上fine-tuning預訓練的DNN有益於low-level的邊緣檢測任務。因此我們使用VGGNet結構,並做了改進:

  1. 在每個階段最後的卷積層連接我們的side output層,分別爲conv1_2, conv2_2, conv3_3, conv4_3,conv5_3,每個卷積層的感受野與對應的side output層相同;
  2. 切去了VGGNet的最後一個階段,包括第5個pooling層和所有全連接層。因爲第5個pooling層後輸出尺寸太小,而全連接層計算量太大,太耗時。

    HED網絡有5個階段,stride分別爲1,2,4,8,16,具有不同感受野尺寸,所有都內嵌在VGGNet。

       

    使用weighted-fusion輸出層連接每個side-output層,輸出層參數可以通過   weighted-fusion層error傳播路徑的反向傳播來更新。deep supervision對於獲取期望的edge maps非常重要。本文網絡的典型關鍵點在於,每個網絡層都作爲一個單獨的網絡在特定尺度生產edge map本文觀察到,配合deep supervision,nested side-outputs能夠使edge map預測逐漸coarse-to-fine,local-to-global。

 

七、實現細節

    使用caffe庫,建立在公開平臺FCN[26]DSN[23]基礎上,因此工程量較小。整個網絡在預訓練的VGG-16模型上fine-tune。

  1. 模型參數:

    相比將CNN用於圖像分類或語義分割,低層次的邊緣檢測需要更加留意。數據分佈、gt分佈,loss方程均造成網絡收斂的困難,即使模型是有預訓練的。

    首先,使用驗證集和[6]的評價策略來微調該深度模型的超參數。超參數包括:

  1. mini-batch size:10
  2. learning rate:1e-6
  3. 每個side-output層的loss-weight :1
  4. momentum:0.9
  5. nested filters的初始化:0
  6. 融合層權重的初始化:1/5
  7. weight decay:0.0002
  8. 訓練迭代數:10000(divide learning rate by 10 after 5,000)

    我們觀察到不論訓練是否收斂,驗證集的F值偏差都很小。爲了調查是否包含額外非線性的幫助,我們也考慮到在每個side-output層前添加一個額外的層,包含50個濾波器和一個ReLU,但這使性能變差。另外,發現nested多尺度框架對輸入圖像尺度不敏感在訓練過程,我們將所有圖像縮放到400*400,以便降低GPU的內存和高效並行處理。

  1. 共識抽樣:

    本方法在每個side-output層複製gt,並resize side output到原始尺度。因此,high-level的side-output有mismatch,預測的邊緣是粗略的和全局的,同時gt仍然包含很多弱邊緣,甚至可被看做噪聲。即使模型經過預訓練,這也會造成不收斂和梯度爆炸。因此,在BSDS數據集,我們將ground truth的弱邊緣移除(少於三人標記)。

  1. 數據擴增:

    data augmentation在深度網絡中被證明非常關鍵。我們旋轉圖像到16個不同角度,切割最大矩形,並進行左右翻轉,得到增大32倍的訓練集。測試時,原圖保持原有尺寸,因爲實驗顯示將test image進行旋轉和翻轉,並將預測值取平均,並不能改善性能。

  1. 不同的池化方程:

發現替換成average pooling會降低性能到ODS=.741。

  1. 反向網絡雙線性插值:

    side-output預測上採樣使用in-network反捲積層,類似於文獻[26]。我們將所有反捲積層改爲運行線性插值。雖然文獻[26]說能夠學會任意插值方程,但我們發現學習的反捲積並不能明顯改善性能。

  1. 運行時間:

    在單卡K40GPU上訓練需要7小時對於320*480圖像,耗費400ms。明顯快於基於CNN的方法。

    BSDS500數據集包括200訓練集、100驗證集、200測試集。評價三準則:fixed contour threshold (ODS), per-image best threshold(OIS), and average precision (AP)。

 

八、BSDS500數據庫實驗結果

    BSDS500:the Berkeley Segmentation Dataset and Benchmark (BSDS 500) [1]。

    訓練集200幅圖像,驗證集100幅圖像,測試集200幅圖像。每幅都手動標註了gt輪廓。

    準確性評價使用三個標準:fixed contour threshold (ODS), per-image best threshold

(OIS), and average precision (AP)。

    爲了優化評價結果,我們使用在edge maps上使用標準的非極大值抑制方法來獲取thinned edges。實驗結果見Figure5和table4。如Figure5所示,本方法獲得最佳結果,ODS=.782。

 

  1. Side outputs

    爲了更明確的驗證side outputs,table 3顯示不同尺度上每個side outputs的結果,包括多尺度edge maps的不同結合。融合輸出得到最佳F值,5層平均得到最佳平均準確性,合併二者得到最佳性能。注意所有side-output預測值都是one pass得到的。

    HED比其他深度學習方法有更高的召回率是因爲deep supervision能考慮到low level predictions。

根據作者提供的開源代碼,out = (out1 + out2 + out3 + out4 + out5 + fuse) / 6,根據測試,fuse最乾淨,out次之,ave細小噪聲最多。

  1. Late merging to boost average precision

融合層的權重學習更關注global物體邊緣。因此將融合層輸出和平均輸出進行結合。

  1. 更多訓練數據:

    從測試集採樣100張圖作爲訓練集,在剩下的100張測試圖進行測試,性能更高,從0.782漲到0.797,接近人類水平。

 

九、NYUDv2 數據庫實驗結果

    NYU Depth (NYUD) 數據庫(文獻[35])有1449幅RGB-D深度圖像。381幅訓練集,414幅驗證集,654幅測試集。所有圖像是相同尺寸,我們訓練時不縮放。(深度圖像忽略)

 

十、總結與收穫

GPU上400ms,CPU上12秒。

受FCN和DSN的啓發,使用VGG進行預訓練。

訓練使用端到端,提取multi-scale和multi-level特徵。

 

十一、深入理解

  1. 與FCN-網絡對比:

網絡類型類似於FCN-2S。

直接替換FCN-8S中的loss爲交叉熵的性能不好,FCN-2s network that adds additional links from the pool1 and pool2 layers)

 

  1. 什麼是deep supervision:

在這裏指的是來自side-output 的結果

The “fusion-output without deep supervision” result is learned w.r.t Eqn. 3. The “fusion-output with deep supervision” result is learned w.r.t. to Eqn. 4

 

關於The role of deep supervision: 
deep supervision terms (specifically, ℓside(W,w(m)): 
每一層都看做是一個獨立的network的輸出(在不同的尺度上) 
實驗表明,僅僅用weighted-fusion supervision訓練,在高層的side output上很多關鍵的邊緣信息都丟失了。

 

  1. Loss:

對輪廓的輸出其實可以類比成FCN像素級分割對於輪廓線與非輪廓線兩種分類。所以非輪廓線的像素點會遠遠大於輪廓線的像素點。如果使用正常的loss進行訓練很容易會訓練不出來,因爲網絡在計算的過程中會認爲全都不是輪廓線會產生更小更穩定的loss。所以我們放大輪廓線部分的Loss。

在訓練中對不同層的結果進行綜合的過程中,作者提出了另一種結合每一層的輸出計算Loss的辦法。

 

  1. 利用HED進行文檔定位:

1)知乎專欄

閱讀騰訊《基於 TensorFlow 在手機端實現文檔檢測》

https://zhuanlan.zhihu.com/p/27191354

 

2)博文《基於 TensorFlow 和 OpenCV 實現文檔檢測功能》

http://fengjian0106.github.io/2017/05/08/Document-Scanning-With-TensorFlow-And-OpenCV/

代碼已開源在github

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