# Background-Aware Pooling and Noise-Aware Loss for Weakly-Supervised Semantic Segmentation ###### tags: `paper` https://arxiv.org/pdf/2104.00905v1.pdf Accepted to CVPR 2021 ![](https://i.imgur.com/iTKg1UC.png) 這篇方法超級繞,我盡量用簡單的話來解釋,希望能幫助各位了解 # ![](https://i.imgur.com/mTKE3js.png) 今天我有Bounding Box的label,我想要產生semantic segmentation的偽標籤 # ![](https://i.imgur.com/8PjM45G.png) 他的步驟簡單來說就是 1. 訓練一個 分類器(CNN_A) 2. 用這個分類器產生兩個偽標籤 (Ycrf, Yret) 3. 用這兩個偽標籤,訓練一個新的 分割器(CNN_B) 紅色的部分就是這篇的貢獻 ## 講一下 How? 的部分 發想: 我的bounding box裡面也會有一些feature是屬於背景吧,那我就拿 **確定是背景的feature** (BBox外的) 和 BBox 內的feature算similarity,很像背景的我就在Attention Map上把他當成背景 產生偽標籤是用分類器(CNN_A)網路,為了讓這個Model的CAM好一點(少框到一點背景),作者做了BAP (background aware pooling) ![](https://i.imgur.com/AFqkQJ8.png) 下面拆解來講 ## ![](https://i.imgur.com/ARvoIIg.png) 我把feature map切成 N^2 格(grid) `M` 會把在bounding box內的pixel乘上0, bounding box外(背景)的pixel乘上1 換句話說,他只想考慮背景的pixel 這一步產生的 `qj` 可以說是「背景的feature的平均」 ## ![](https://i.imgur.com/zndqAQf.png) 把bounding box內的feature `f( p )` 和背景的feature `qj` 分別算Cosine Similarity,即可知道此feature是否為背景 => 拿到 j 個背景的attention map `Aj` 要分別和每個 `qj` 做是因為每個grid中的背景可能feature都有點差異 ReLU 為了把 `Aj` 的值壓在0~1之間 ## ![](https://i.imgur.com/FK58j0y.png) 把 `Aj` 平均起來就拿到一個背景的attention map了 ## ![](https://i.imgur.com/mMi2Wmv.png) 回到分類器,一般最後一層會用Global Average Pooling,那這裡他用前面算的`Aj`加權,pooling時想辦法留下前景的資訊(前景的資訊權重比較大)。 後面就是接分類,他也有分背景這一類(這有事為什麼 `qj` 那邊連了一條線到 `w` ) ## 再來就到怎麼產 偽標籤 了 產偽標籤的部分有用到DenseCRF ,詳細可以看 Nips 2011 的 Efficient inference in fully connected CRFs with gaussian edge potentials 這邊簡單講一下什麼是CRF (conditional random field ![](https://i.imgur.com/1o3Ums5.png) 一般使用 Naive Bayes 的 Model , 每個 output y 都假設是獨立事件 但現實中很有可能不是這樣的 舉例來說 ![](https://i.imgur.com/vqiN1dB.png) source: https://darshita1405.medium.com/superpixels-and-slic-6b2d8a6e4f08 狗的眼睛周邊的pixel也很有可能是眼睛這個類別 回到這張圖 ![](https://i.imgur.com/1o3Ums5.png) CRF會把每個predict y都做連結(詳細數學推倒有空再說) 那 DenseCRF 很簡單來說,就是y的連結是全連接 ![](https://i.imgur.com/t5JWg44.png) 在 Semantic Segmentation 蠻常用到 DenseCRF的 ![](https://i.imgur.com/RTXZrn6.png) 因為影像中,通樣類別的東西,通常pixel間會有一些關係,可能是histogram也可能是顏色等等 ## 說了這麼多 所以到底怎麼產 偽標籤 ![](https://i.imgur.com/tRp0Hkv.png) 他把前面訓練的分類器(CNN_A)的CAM和背景的Attention Map一起丟給Densecrf,讓他產出第一個偽標籤 Ycrf ## Ycrf 不夠好嗎 作者有提到,有時候只根據 low level (顏色、材質) 的特徵抓出來的 Label 會不太準 ![](https://i.imgur.com/mv9Ebc0.png) 因此他們想到,我就拿我的分類器的 high level 特徵阿 (就feature map啦) ![](https://i.imgur.com/4eIT87Z.png) 他根據 Ycrf 的位置, 去把 feature map 上的相應位置的 feature 平均起來做成根據每個class做成 `qc` ![](https://i.imgur.com/4i8qDVB.png) 再拿這個 `qc` 和 feature map的pixel算similarity,看每個feature到底最像是哪個類別 就開心的拿到了 Yret 了 ## 好了 拿到兩個 偽標籤 了, 然後呢? ![](https://i.imgur.com/hCFKVZz.png) 他把這兩個偽標前重疊,完全重疊(聯集)的部分他就覺得是很信心的 所以直接算 CE Loss 就好 ![](https://i.imgur.com/Xc25vvK.png) 那沒有完全重疊的呢 (上圖米白色部分) 作者覺得他可能是Noise Label,所以他想給這部分的Loss權重 ## 怎麼給 Noise Label 權重的 還記得 CAM 嗎 ![](https://i.imgur.com/mHUX3ay.png) 做者認為,CAM中越信心的地方(heatmap中的紅色),他的feature越能代表這個類別 所以,他就把米白色的部分拿去和heatmap紅色的部分的feature算cosine similarity啦~(還來呀!) 得到的結果就是sigma,gamma是個超參數 > > P.S. 這裡論文說的很繞,說classifier的weight越高越能代表這個feature可以代表這個class,所以上圖公式中的` Dc` 就是在講這件事,至於+1只是為了讓值大於1 > 但其實他想表達的事情和CAM的原理是一樣的,所以我就簡化成看CAM了~ 總結一下,sigma就是這個label是這個class(即非Noise)的機率啦~ ## 所以說那個Loss呢 ![](https://i.imgur.com/Tzh04W6.png) 就是把很確定的部分 (Ycrf ^ Yret) 用CE Loss算 可能是Noise的部分 ~(Ycrf ^ Yret) 用 WCE Loss 算,weight就是sigma ## 方法講完啦~~~~