Contour Knowledge Transfer for Salient Object Detection
Contour Knowledge Transfer for Salient Object Detection
- 摘要
- 1 Introduction
- 2 Related Work
- 3 Approach
- 3.1 Overview
- 3.2 Contour-to-Saliency Network
- 3.3 Contour-to-Saliency Transfer
- 3.4 Alternating Training
- 4 Experiments
論文地址
code
摘要
本文是一篇無監督顯著性監測方法,C2S-Net。本文用訓練好的輪廓監測網絡,嫁接一個顯著性監測網絡,這樣的C2S-Net有兩個分支,分別完成預測輪廓和預測顯著性區域的任務。為了連接這兩個任務,作者設計了contour-to-saliency transferring方法,即通過輪廓生成顯著性mask,作為真值來監督顯著性預測分支。同樣,作者也提出了新的交替訓練方式來完成無監督訓練。
1 Introduction
SOD任務應用廣泛,但其訓練數據的標注貧乏,且耗費大量精力,因此我們提出無監督方法。
我們的目標是把一個訓練過的contour detection model(CEDN)轉換成顯著性監測模型,且不使用手動標注的數據。我們首先在現有的CEDN上嫁接了一個新分支(顯著性檢測分支)以形成一個多任務網絡框架。然后我們用訓練好的輪廓分支生成contour maps,然后用contour-to-saliency transferring method生成相應的saliency masks。這些masks用于監督新添加的分支。這樣一來新分支生成的saliency maps,轉換成contour又可以反過來監督contour分支只生成顯著性區域的contour。
contributions如下:
- 提出了新的SOD方法,可自動把well-trained輪廓檢測模型轉換成顯著性檢測模型,且不用任何手動標注。
- 提出Contour-to-Saliency Network (C2S-Net),在這個網絡中有兩個分支,兩個分支互相學習。
- 提出有效的contour-to-saliency transferring方法;也提出了交替的訓練過程。
2 Related Work
3 Approach
3.1 Overview
本算法給定一個現有的輪廓檢測網絡(CEDN),我們把這個CEDN模型轉換成深度顯著性檢測模型。
首先,把顯著性檢測網絡分支嫁接到已有的輪廓檢測上,兩個分支共用一個特征提取器,結構如下:
訓練過程就是先用一個輪廓檢測網絡先生成目標輪廓,然后用另外一個算法把輪廓轉換成saliency map,然后用這個map去監督顯著性網絡的學習。
3.2 Contour-to-Saliency Network
Architecture. Fig. 3展示了Contour-to-Saliency Network (C2S-Net)的具體配置。
網絡可以分成三部分:encoder(fencf_{enc}fenc?), contour decoder(fcontf_{cont}fcont?), saliency decoder(fsalf_{sal}fsal?)。
Encoder. 輸入圖像Ii\mathcal I_iIi?,輸出feature map Fi\mathcal F_iFi?。
Contour Decoder. 輸入feature map Fi\mathcal F_iFi?,輸出saliency-aware contour map C(Fi,θc)C(\mathcal F_i,\theta_c)C(Fi?,θc?),θc\theta_cθc?表示輪廓檢測分支的模型參數。Contour Decoder的訓練可以看做per-pixel regression problem:
min?θc∑iecont(Lcont(Ii),C(Fi;θc))\min_{\theta_c}\sum_ie_{cont}(\mathcal L_{cont}(\mathcal I_i),C(\mathcal F_i;\theta_c)) θc?min?i∑?econt?(Lcont?(Ii?),C(Fi?;θc?))
其中Lcont(Ii)\mathcal L_{cont}(\mathcal I_i)Lcont?(Ii?)表示第i個樣本的gt contour labels,econt(Lcont(Ii),C(Fi;θc))e_{cont}(\mathcal L_{cont}(\mathcal I_i),C(\mathcal F_i;\theta_c))econt?(Lcont?(Ii?),C(Fi?;θc?))是per-pixel loss function。
Saliency Decoder. 輸入feature map Fi\mathcal F_iFi?,輸出saliency map S(Fi,θs)S(\mathcal F_i, \theta_s)S(Fi?,θs?),其中θs\theta_sθs?表示saliency decoder的模型參數。這個分支通過gt和預測的saliency maps求loss,訓練可寫成以下:
min?θs∑iesal(Lsal(Ii),S(Fi;θs))\min_{\theta_s}\sum_ie_{sal}(\mathcal L_{sal}(\mathcal I_i),S(\mathcal F_i;\theta_s)) θs?min?i∑?esal?(Lsal?(Ii?),S(Fi?;θs?))
其中Lsal(Ii)\mathcal L_{sal}(\mathcal I_i)Lsal?(Ii?)是第i個圖像的gt mask,esal(Lsal(Ii),S(Fi;θs))e_{sal}(\mathcal L_{sal}(\mathcal I_i),S(\mathcal F_i;\theta_s))esal?(Lsal?(Ii?),S(Fi?;θs?))是Lsal(Ii)\mathcal L_{sal}(\mathcal I_i)Lsal?(Ii?)對應的S(Fi,θs)S(\mathcal F_i, \theta_s)S(Fi?,θs?)的per-pixel loss。
Cross-Domain Connections. 作者用下面這樣的方式去結合輪廓檢測分支提取的特征fsicontf_{s_i}^{cont}fsi?cont?和saliency分支提取的特征fsisalf_{s_i}^{sal}fsi?sal?:
f~sisal=σ(cat(fsicont,fsisal)?wsisal+bsisal)\tilde{f}_{s_i}^{sal}=\sigma(cat(f_{s_i}^{cont},f_{s_i}^{sal})\otimes w_{s_i}^{sal}+b_{s_i}^{sal}) f~?si?sal?=σ(cat(fsi?cont?,fsi?sal?)?wsi?sal?+bsi?sal?)
其實也就是concat到一起再卷積。
3.3 Contour-to-Saliency Transfer
這個部分是比較難理解的地方,主要是公式不太好理解。我們如何通過預測的輪廓生成saliency map呢?這個過程分成兩步:首先用Multiscale Combinatorial Grouping (MCG)方法生成很多候選proposal masks C\mathcal CC。然后用下面這個公式從C\mathcal CC中提取出B\mathcal BB:
max?B{S(B)?α?O(B)?κ?N(B)}s.t.B?C\max_{\mathcal B}\{S(\mathcal B)-\alpha\cdot O(\mathcal B)-\kappa\cdot N(\mathcal B)\}\\ s.t. \mathcal B\subseteq\mathcal C Bmax?{S(B)?α?O(B)?κ?N(B)}s.t. B?C
其中S(?)S(\cdot)S(?)是激勵選擇更顯著區域proposals的數據項,O(?)\mathcal O(\cdot)O(?)是懲罰被選擇的proposals重疊的overlap項,N(?)N(\cdot)N(?)是被選擇的proposals的數量項。通過最大化上式,可以得到我們用于監督的Lsal\mathcal L_{sal}Lsal?。
下面就是比較難理解的了,跟其他人交流之后我對此的理解也只是猜測,首先看看上面這個式子的展開:
max{∑bi?CSici?α?∑bi,bj∈C(i≠j)K(bi,bj)cicj?κ∑bi?Cci}s.t.ci,cj=0or1max\{\sum_{b_i\subseteq C}S_ic_i-\alpha\cdot\sum_{b_i, b_j\in C(i\neq j)}K(b_i,b_j)c_ic_j-\kappa\sum_{b_i\subseteq C}c_i\} \\ s.t. c_i, c_j=0 or 1 max{bi??C∑?Si?ci??α?bi?,bj?∈C(i?=j)∑?K(bi?,bj?)ci?cj??κbi??C∑?ci?}s.t. ci?,cj?=0 or 1
這里面cic_ici?的意思是,我們在C\mathcal CC中選擇了很多組的proposals,每組proposals中包含很多bib_ibi?,如果當前組中,這個bib_ibi?被選擇了,那么對應的ci=1c_i=1ci?=1。最后哪組算出的上面這個式子的值最大,那么我們就認為當前這組proposals組成的mask更有可能是顯著性區域。第二項是overlap懲罰項,K(bi,bj)K(b_i,b_j)K(bi?,bj?)就是求兩個proposals的IoU。最后一項是當前組proposals的數量。這個式子的含義就是:最有可能是saliency的一組,且這些proposals重疊不嚴重,且proposals的數量不是很多(或者說proposals不是很細碎)。
上面提到的最有可能是saliency這一點,就是靠式子的第一項的SiS_iSi?展現的:
Si=K(cnt(bi),Cer)+γ?K(bi,Ser)S_i=K(cnt(b_i),C^{e_r})+\gamma\cdot K(b_i, S^{e_r}) Si?=K(cnt(bi?),Cer?)+γ?K(bi?,Ser?)
其中cnt(bi)cnt(b_i)cnt(bi?)表示從給定的region mask bib_ibi?提取出輪廓,Cer,SerC^{e_r},S^{e_r}Cer?,Ser?分別是第r個epoch后檢測到的contour和saliency map。在第一個epoch,γ=0\gamma=0γ=0,之后γ=1\gamma=1γ=1。
上面的解讀也只是我個人的理解,大家有其他的想法可以與我聯系。
3.4 Alternating Training
這部分講的是交替訓練的方法,為了避免局部最優問題,作者把訓練集分成兩部分。一個訓練集去訓練contour-to-saliency網絡,多次epoch迭代之后,網絡已經可以輸出saliency map了,然后用這個網絡的學習出來的參數去訓練saliency-to-contour網絡,這樣就使網絡更加趨于只生成顯著性區域的contour。如此不斷循環,網絡越來越穩定。其中,也有過濾掉生成的不靠譜的監督信息,也就是計算生成的contour map的置信度:C(Fi,θc)≥0.9C(Fi,θc)≥0.1\frac{C(\mathcal F_i,\theta_c)\geq0.9}{C(\mathcal F_i,\theta_c)\geq0.1}C(Fi?,θc?)≥0.1C(Fi?,θc?)≥0.9?,即只選擇這個置信度大于閾值(?=0.15\vartheta=0.15?=0.15)的maps作為監督。
4 Experiments
精度非常之強悍。。。然而只給了測試代碼,沒給訓練代碼,GitHub的star也很少。
總結
以上是生活随笔為你收集整理的Contour Knowledge Transfer for Salient Object Detection的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不在以下合法域名列表中,请参考文档:ht
- 下一篇: LOL不用下载就能玩了?