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時自監督學習的。
在實際的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爲mK,advice爲mA,difference爲MK,A∈RH×W
MuK,A={10if(muK=muA)if(muK=muA)(1)
接着看看DD-Net的網絡結構
DD-Net輸入的有backbone network的high-level features eh(x;θe)和low-level featuresel(x;θe),還有一個mask m^,輸出的是difference mask的置信度map d。訓練的損失函數是
Ldiff=∣S∣1u∈S∑(J(MK,A,dK,u;θd)J(MK,A,dA,u;θd))(2)
其中
J(M,d,u)=Mulogdu+(1−Mu)log(1−du)
在我的理解中,DD-Net的作用可以認爲是判斷輸入的mask各個pixel的label是否分類錯誤。置信度map d的值越大,說明對應的pxiel分類錯的概率越大。
Self-supervised difference detection module (SSDD)
論文同時對knowledge和advice的mask進行錯誤預測。然後根據這兩者的預測結果更新mask。
knowledge和advice通過DD-Net後分別得到置信度map dK和dA。然後考慮把knowldege、advice、dK和dA結合起來,生成更加準確的mask。
如果knowledge的錯誤率比advice更高(高出某個閾值),則更新mask對應位置的值爲advice的值,否則,保留knowledge的值。
wu=duK−duA+biasu(3)
更新mask
MuD={muAmuKif(wu≥0)if(wu<0)(4)
SSDD的公式如下
mD=SSDD(e(x),mK,mA;θd)(5)
其中e(x)=(el(x),eh(x))。
weakly-supervised semantic segmentation
接下來看如何把SSDD應用到語義分割的弱監督訓練的過程。
訓練過程分成兩部分。
Seed mask generation stage with static region refinement
該過程使用PSA方法生成語義分割的初始mask mK0,用mK0訓練一個分割網絡,用CRF方法微調mK0得到mA0,然後把mK0和mA0輸入到一個SSDD中得到比較正確的mD0。
DD-Net的訓練損失函數如下
Ldiff0=∣S∣1u∈S∑(J(MK0,A0,dK0,u;θd0)J(MK0,A0,dA0,u;θd0))(6)
如果mK0和mA0的mask都不對,用他們來訓練是沒有意義了,論文中這種樣本去掉。論文沒有具體說怎麼去掉這些壞樣本,可能人工篩選排除?
訓練分割網絡SegNet的損失函數如下
Lbase=Lseg(x,mK0;θe0,θbase)(7)
Lseg(x,m;θ)=−∑k∈K∣Skm∣1k∈K∑u∈∣Skm∣∑log(huk(θ))(8)
總的來說,該階段的損失函數是
Lstatic=Lbase+Ldiff0(9)
該階段的作用是
mD0=SSDD(e(x),mK0,mA0;θd0)(10)
Training stage of a fully supervised segmentation model with a dynamic region refinement
該階段,首先SegNet生成分割結果mK1,通過CRF微調得到mA1,mK1和mA1輸入到一個SSDD module1 中得到mD1。接着,mD1和上個階段得到的mD0輸入到另一個SSDD module2中得到mD2。mD2用來重新訓練分割網絡。這個過程是循環過程,不斷地改進mask的結果,同時提高分割網絡的表現。
分割網絡的訓練損失
Lmain=Lseg(x,mD2;θe1,θmain)(11)
SSDD module1 的損失函數
Ldiff1=∣S∣1u∈S∑(J(MK1,A1,dK1,u;θd1)J(MK1,A1,dA1,u;θd1))(12)
SSDD module2 的訓練過程和SSDD module1不同。因爲mK1,mA1,mD1依賴分割網絡的分割結果,如果分割網絡的分割結果太極端,比如mask全爲0或全爲1,這些mask就沒意義。爲了防止分割網絡出現這種情況,作者在分割網絡中引出一條分支,用來預測mD0和mD1的difference,預測結果記爲msub。
SSDD module2的訓練損失爲
Ldiff2=∣S∣1u∈S∑(J(MD0,sub,dD0,u;θd2)J(Msub,D1,dD1,u;θd2))(13)
分支的訓練損失爲
Lsub=αLseg(x,mD0;θe1,θsub)+(1−α)Lseg(x,mD1;θe1,θbase)(14)
最終總結該階段的損失
Ldynamic=Lmain+Lsub+Ldiff1+Ldiff2(15)
Experiment
看看該方法得到的mask的結果
分割的結果,與其他方法比較