《Self-Supervised Difference Detection for Weakly-Supervised Semantic Segmentation》筆記

Intorduction

該論文講述如何用弱監督的方法訓練語義分割器。弱監督方法沒有強監督信息,比如ground truth。在這篇論文裏,語義分割的樣本標籤只有圖片的分類類別。已經有許多方法能夠從分類信息中生成語義分割的mask。論文在這些工作的基礎上,對生成的語義分割的mask調整成更加準確的mask。

輸入的是粗糙的mask,輸出是精細的mask的函數叫做mapping function。有研究表明,不斷地把輸出的mask重新輸入到mapping function中,可以得到更好的結果。但是迭代的過程不能保證輸出的mask一定比輸入的mask要好。作者的方法針對這個問題,提出了能夠保證mask不斷變好的方法。作者的解釋也有道理。

Method

定義輸入到mapping function的信息定義爲knowledge,輸出信息爲advice。假設advice提供監督信息,這個監督信息包含了noise,論文的方法是從advice中獲取有用的信息。定義knowledge和advice不同的區域稱爲difference(如圖1的a所示),論文用一個網絡DD-Net(self-supervised difference detection module)來預測這個difference。DD-Net會用到knowledge或advice的其中一個。在訓練時可以通過knowledge和advice來計算得到。DD-Net的監督信息(gt)通過數據自己產生,所以DD-Net時自監督學習的。

the concept of the proposed approach

在實際的advice中,有的advice可以預測,有的不可以預測。一些advice可以容易地推斷,因爲在訓練的時候包含許多相似的樣本。作者假設advice包含足夠多的好的信息,可以預測的信息可以當作是有用的信息。因此,作者提出的一個方法來選擇信息。這些信息是advice真實信息,可以在difference檢測中推斷出來的信息。如圖1的bc所示,knowledge是輸入的mask,advice是輸出的mask,advice和knowledge不同的部分說明knowledge在這些部分的分類結果可能有錯。用DD-Net來檢測knowledge的有錯的地方(difference),能夠預測出來的地方稱爲predictable difference。因爲DD-Net是根據數據集的樣本訓練得到的,DD-Net能夠預測出來的difference確實是knowledge中分類出錯的地方。advice包含noise,可以分爲true advice和false advice,true advice對應的是對的建議,這個true advice有用的信息,這些有用的信息存在於數據的樣本中,DD-Net可以學習得到,true advice就等同於predictable difference。簡單說就是DD-Net通過訓練得到的信息是有用信息,可以用來更正已有mask的錯誤。

difference detection network

先來說說怎麼預測difference。knowledge是通過其他弱監督的方法生成的語義分割的mask或者是mapping function的輸出mask。不少論文也提出了多種mapping function,常用的是CRF方法。advice是mapping function的輸出。有了knowledge和advice,可以計算他們的difference。定義knowledge爲mKm^K,advice爲mAm^A,difference爲MK,ARH×WM^{K,A} \in \Bbb{R}^{H \times W}
MuK,A={1if(muK=muA)0if(muKmuA)(1) M^{K,A}_u = \begin{cases} 1 & \text{if} (m^K_u = m^A_u) \\ 0 & \text{if} (m^K_u \neq m^A_u) \end{cases} \tag{1}

接着看看DD-Net的網絡結構
DD-Net
DD-Net輸入的有backbone network的high-level features eh(x;θe)e^h(x;\theta_e)和low-level featuresel(x;θe)e^l(x;\theta_e),還有一個mask m^\hat{m},輸出的是difference mask的置信度map d。訓練的損失函數是
Ldiff=1SuS(J(MK,A,dK,u;θd)J(MK,A,dA,u;θd))(2) \begin{aligned} \mathcal{L}_{\text{diff}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{K,A}, d^K, u; \theta_d) \\ & J(M^{K,A}, d^A, u; \theta_d)) \end{aligned} \tag{2}
其中
J(M,d,u)=Mulogdu+(1Mu)log(1du) J(M,d,u) = M_u \log d_u + (1 - M_u) \log (1 - d_u)

在我的理解中,DD-Net的作用可以認爲是判斷輸入的mask各個pixel的label是否分類錯誤。置信度map d的值越大,說明對應的pxiel分類錯的概率越大。

Self-supervised difference detection module (SSDD)

論文同時對knowledge和advice的mask進行錯誤預測。然後根據這兩者的預測結果更新mask。

overview of SSDD
knowledge和advice通過DD-Net後分別得到置信度map dKd^KdAd^A。然後考慮把knowldege、advice、dKd^KdAd^A結合起來,生成更加準確的mask。

如果knowledge的錯誤率比advice更高(高出某個閾值),則更新mask對應位置的值爲advice的值,否則,保留knowledge的值。
wu=duKduA+biasu(3) w_u = d^K_u - d^A_u + \text{bias}_u \tag{3}
更新mask
MuD={muAif(wu0)muKif(wu<0)(4) M^{D}_u = \begin{cases} m^A_u & \text{if} (w_u \ge 0) \\ m^K_u & \text{if} (w_u \lt 0) \end{cases} \tag{4}
SSDD的公式如下
mD=SSDD(e(x),mK,mA;θd)(5) m^D = SSDD(e(x), m^K, m^A; \theta_d) \tag{5}
其中e(x)=(el(x),eh(x))e(x)=(e^l(x), e^h(x))

weakly-supervised semantic segmentation

接下來看如何把SSDD應用到語義分割的弱監督訓練的過程。

訓練過程分成兩部分。

Seed mask generation stage with static region refinement

該過程使用PSA方法生成語義分割的初始mask mK0m^{K0},用mK0m^{K0}訓練一個分割網絡,用CRF方法微調mK0m^{K0}得到mA0m^{A0},然後把mK0m^{K0}mA0m^{A0}輸入到一個SSDD中得到比較正確的mD0m^{D0}

static region refinement

DD-Net的訓練損失函數如下
Ldiff0=1SuS(J(MK0,A0,dK0,u;θd0)J(MK0,A0,dA0,u;θd0))(6) \begin{aligned} \mathcal{L}_{\text{diff0}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{K0,A0}, d^{K0}, u; \theta_{d0}) \\ & J(M^{K0,A0}, d^{A0}, u; \theta_{d0})) \end{aligned} \tag{6}

如果mK0m^{K0}mA0m^{A0}的mask都不對,用他們來訓練是沒有意義了,論文中這種樣本去掉。論文沒有具體說怎麼去掉這些壞樣本,可能人工篩選排除?

訓練分割網絡SegNet的損失函數如下
Lbase=Lseg(x,mK0;θe0,θbase)(7) \mathcal{L}_{\text{base}} = \mathcal{L}_{\text{seg}}(x, m^{K0}; \theta_{e0}, \theta_{\text{base}}) \tag{7}
Lseg(x,m;θ)=1kKSkmkKuSkmlog(huk(θ))(8) \mathcal{L}_{\text{seg}}(x, m; \theta) = - \frac{1}{\sum_{k \in K} |S_k^m|} \sum_{k \in K} \sum_{u \in |S_k^m|} \log (h_u^k(\theta)) \tag{8}
總的來說,該階段的損失函數是
Lstatic=Lbase+Ldiff0(9) \mathcal{L}_{\text{static}} = \mathcal{L}_{\text{base}} + \mathcal{L}_{\text{diff0}} \tag{9}
該階段的作用是
mD0=SSDD(e(x),mK0,mA0;θd0)(10) m^{D0} = SSDD(e(x), m^{K0}, m^{A0}; \theta_{d0}) \tag{10}

Training stage of a fully supervised segmentation model with a dynamic region refinement

該階段,首先SegNet生成分割結果mK1m^{K1},通過CRF微調得到mA1m^{A1}mK1m^{K1}mA1m^{A1}輸入到一個SSDD module1 中得到mD1m^{D1}。接着,mD1m^{D1}和上個階段得到的mD0m^{D0}輸入到另一個SSDD module2中得到mD2m^{D2}mD2m^{D2}用來重新訓練分割網絡。這個過程是循環過程,不斷地改進mask的結果,同時提高分割網絡的表現。

dynamic region refinement

分割網絡的訓練損失
Lmain=Lseg(x,mD2;θe1,θmain)(11) \mathcal{L}_{\text{main}} = \mathcal{L}_{\text{seg}}(x, m^{D2}; \theta_{e1}, \theta_{\text{main}}) \tag{11}
SSDD module1 的損失函數
Ldiff1=1SuS(J(MK1,A1,dK1,u;θd1)J(MK1,A1,dA1,u;θd1))(12) \begin{aligned} \mathcal{L}_{\text{diff1}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{K1,A1}, d^{K1}, u; \theta_{d1}) \\ & J(M^{K1,A1}, d^{A1}, u; \theta_{d1})) \end{aligned} \tag{12}
SSDD module2 的訓練過程和SSDD module1不同。因爲mK1,mA1,mD1m^{K1},m^{A1},m^{D1}依賴分割網絡的分割結果,如果分割網絡的分割結果太極端,比如mask全爲0或全爲1,這些mask就沒意義。爲了防止分割網絡出現這種情況,作者在分割網絡中引出一條分支,用來預測mD0m^{D0}mD1m^{D1}的difference,預測結果記爲msubm^{sub}
SSDD module2的訓練損失爲
Ldiff2=1SuS(J(MD0,sub,dD0,u;θd2)J(Msub,D1,dD1,u;θd2))(13) \begin{aligned} \mathcal{L}_{\text{diff2}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{D0,sub}, d^{D0}, u; \theta_{d2}) \\ & J(M^{sub,D1}, d^{D1}, u; \theta_{d2})) \end{aligned} \tag{13}
分支的訓練損失爲
Lsub=αLseg(x,mD0;θe1,θsub)+(1α)Lseg(x,mD1;θe1,θbase)(14) \mathcal{L}_{sub} = \alpha \mathcal{L}_{seg}(x, m^{D0}; \theta_{e1}, \theta_{sub}) + (1 - \alpha) \mathcal{L}_{seg} (x, m^{D1}; \theta_{e1}, \theta_{base}) \tag{14}
最終總結該階段的損失
Ldynamic=Lmain+Lsub+Ldiff1+Ldiff2(15) \mathcal{L}_{\text{dynamic}} = \mathcal{L}_{\text{main}} + \mathcal{L}_{\text{sub}} + \mathcal{L}_{\text{diff1}} + \mathcal{L}_{\text{diff2}} \tag{15}

Experiment

看看該方法得到的mask的結果
mask

分割的結果,與其他方法比較
comparision with the WSS methods without additional supervision
comparision with the WSS methods with additional supervision

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