天天看點

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

一、作者

【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],執行深層監督去指引早期分類結果;                                                                                                                

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

四、相關方法

邊緣檢測關鍵點:

  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 supervision和side outputs,FCN輸出結果不佳。因為邊緣檢測要求非常準确的像素級定位。本系統的高準确度得益于:

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

    作者通過幾種不同的多尺度深度學習下的結構進行對比說明。在多尺度方面,有内部網絡形成的多尺度,和外部網絡形成的多尺度。前者是神經網絡裡不同層由于降采樣的不同得到的不同尺度特征,結合形成多尺度,後者是通過對輸入圖像的尺度處理時的多尺度,獲得不同尺度資訊。作者将具體多尺度下的深度學習分為四種,如下圖。

【ICCV2015】Holistically-Nested Edge Detection論文閱讀筆記
  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層關聯一個分類器,對應權重:

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

目标函數為:

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

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

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

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

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

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

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

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

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

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

是m層side-output的響應。

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

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

其中

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

,其中

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

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

通過以上計算,我們可以通過标準(回報傳播)随機梯度下降方法來最小化目标方程:

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

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

  1. 測試階段:

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

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

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

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

六、網絡結構

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

    本文的網絡結構如上圖所示,誤差反向傳播路徑高亮顯示。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。

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

    使用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
    【ICCV2015】Holistically-Nested Edge Detection論文閱讀筆記
    :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. 運作時間:

    在單卡K40的GPU上訓練需要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。

【ICCV2015】Holistically-Nested Edge Detection論文閱讀筆記
【ICCV2015】Holistically-Nested Edge Detection論文閱讀筆記
  1. Side outputs:

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

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

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

根據作者提供的開源代碼,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

繼續閱讀