圖像分割 | Context Prior CPNet | CVPR2020

  • 文章轉自微信公衆號:「機器學習煉丹術」
  • 文章做者:煉丹兄(已受權)
  • 做者聯繫方式:cyx645016617
  • 論文名稱:「Context Prior for Scene Segmentation」

0 綜述

先上效果圖,CPNet彷佛對一些難樣本有着更好的效果:
微信

文中提到了下面關鍵字:
構建了corresponding prior map(CPmap),而後經過Context Prior Layer(CPLayer)來把這個CPmap融合到網絡中,與此同時,使用Affinity Loss來對應這個CPLayer。網絡

關於上面這句話如何解讀,我先留着疑問。機器學習

1 Context Prior

做者提出兩個概念:ide

  • intra-context:同一類別的像素之間的關係;
  • inter-context:不一樣類別的像素之間的關係。

做者說,在圖像分割任務中,每個圖片都有對應的ground truth,可是ground truth中是每個像素所屬於的類別,說模型很難從獨立的像素中學習到contextual(上下文)信息,所以須要explicitly regularize network(顯式的規範網絡)學習

在論文中,做者使用Affinity Loss來顯式的規範網絡.this

For each pixel in the image, this loss forces the network to consider the pixels of the same category (intra-context) and the pixels among the different categories (inter-context).idea

這個損失可讓模型考慮同一類別的其餘像素和不一樣類別的其餘像素。spa

2 構建Ideal Affinity Map

在使用Affinity Loss以前,須要先構建Ideal Affinity Map。code

  • 如今咱們有一個圖片,Image,這個圖片的ground truth GT.
  • Image通過全卷積網絡,獲得尺寸HxW的特徵圖;
  • GT下采樣到HxW大小,寫做\(\widetilde{GT}\),而後對\(\widetilde{GT}\)作one hot encoding,這樣獲得一個HxWxC的張量,其中C爲分割的類別數量,對這個張量記作\(\widehat{GT}\)
  • 經過reshape的方法,把\(\widehat{GT}\)的shape變成NxC,其中N=HxW,而後經過計算\(\widehat{GT}\widehat{GT}^{\mathrm{T}}\)獲得一個NxN的矩陣,這個記作A;
  • A就是咱們所要的Ideal Affinity Map。

A is our desired Ideal Affinity Map with size N × N , which encodes which pixels belong to the same category. We employ the Ideal Affinity Map to supervise the learning of Context Prior Map.orm

這個A中每個1表示這一個像素和其餘同一類別的像素,經過這個Ideal Affinity Map來訓練CPMap

3 Affinity Loss

咱們用全卷積網絡對Image進行特徵提取,獲得一個HxW的尺寸的特徵圖,這裏咱們在上文已經說到了,可是沒有說這個特徵圖的通道數是多少,看下圖:

通道數是HxW,也就是上面提到的N,這樣對於每個像素來講,他的特徵正好是1xN,這樣和咱們獲得的Ideal Affinity Map是否是恰好對應上了?

因此這裏咱們就能夠用簡單的二值交叉熵來計算Predicted Prior Map和Ideal Affinity Map的損失:

這就完事了嗎?並非:

However, such a unary loss only considers the isolated pixel in the prior map ignoring the semantic correlation with other pixels.

直觀上感受,上面的其實只考慮了兩個像素之間的關係,其實忽視了更多的語義關係。因此還須要另一部分損失。

a表示Idea Affinity Map中的元素,P表示從X獲得的NxN的矩陣。
公式(2)表示,這裏有點目標檢測的味道了。

舉個例子,假設總共有5個像素把:

  • a = [0,0,1,0,1],表示與同類的像素有第三個和第五個兩個像素;
  • p = [0.1,0.2,0.8,0.2,0.9],表示預測出來的像素中,第一個像素有0.1的機率是同類的,第三個像素有0.8的機率是同類的;
  • \(\frac{ap}{a}\),恰好就是 真陽/樣本爲真的個數,爲召回率
  • \(\frac{ap}{p}\),恰好就是 真陽/預測爲真的個數,爲精準率
    這一塊講解的比較粗糙,由於混淆矩陣,PR曲線,召回率精準率應該是你們瞭解的內容啦,若是不瞭解可的話能夠閱讀我以前寫過的筆記。(已經記錄了107篇筆記了。。我也懶得找文章連接了,抱歉哈哈)

做者原文:

對於公式(4),1-a恰好就是把0和1反過來了,這樣1-a中的1表示的是不一樣的兩個像素,所以體現的是inter-class 不一樣類的聯繫。

最後的最後,Affinity Loss爲:

4 Context Prior Layer

CPLayer的結構以下,忽然一看還挺複雜的:

  • CPLayer的輸入認爲是X,就是\(shape=H\times W \times C_0\);
  • X通過一個aggregation module變成了\(shape=H\times W \times C_1的\widetilde{X}\);

這裏來看一下aggregation module是如何整合了spatial information:

看起來就是用了兩個並行的1xk和kx1的卷積,OK,這個地方不難。

  • \(\widetilde{X}\)通過一個1x1的卷積層和Sigmoid層,變成咱們的prior Map (P),這個P的shape=HxWxN;
  • 這裏的P通過Affinity Loss的監督訓練下,在理想狀況下,P體現的就是像素之間的關係
  • 以前獲得了\(\widetilde{X}\),reshape成\(N\times C_1\)的形狀,(這裏的\(C_1\)其實就是最終要分類的類別數)
  • 這裏能夠獲得intra-class的信息\(Y=P\widetilde{X}\)
  • 也能夠獲得inter-class的信息\(\bar{Y}=(1-P)\widetilde{X}\)

這裏我提示一下,怎麼理解這個intra-class呢?從P中,能夠找到一個像素和其餘同類別的像素,從\(\widetilde{X}\)中,能夠找到全部像素預測機率。所以Y中的每個像素的預測的機率值,實際上是考慮了同類別的其餘像素的預測值綜合起來的結果。所以這是一個類內上下文的綜合考慮。

  • \(F = concat(X,Y,\bar{Y})\)

5 細節

以前計算的affinity Loss在論文中是寫做\(L_p\),

  • 其中\(L_u\)是unary loss一元損失,也就是二值交叉熵;
  • \(L_g\)是global loss,也就是總體的一個損失;

而後整個模型的損失:

  • 除了咱們提到的\(L_p\),affinity loss,權重爲1;
  • \(L_a\)是auxiliary loss ,權重爲0.4
  • \(L_s\)是主要的main segmentation loss,權重爲1.
相關文章
相關標籤/搜索