先上效果圖,CPNet彷佛對一些難樣本有着更好的效果:
微信
文中提到了下面關鍵字:
構建了corresponding prior map(CPmap),而後經過Context Prior Layer(CPLayer)來把這個CPmap融合到網絡中,與此同時,使用Affinity Loss來對應這個CPLayer。網絡
關於上面這句話如何解讀,我先留着疑問。機器學習
做者提出兩個概念:ide
做者說,在圖像分割任務中,每個圖片都有對應的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
在使用Affinity Loss以前,須要先構建Ideal Affinity Map。code
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
咱們用全卷積網絡對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個像素把:
做者原文:
對於公式(4),1-a恰好就是把0和1反過來了,這樣1-a中的1表示的是不一樣的兩個像素,所以體現的是inter-class 不一樣類的聯繫。
最後的最後,Affinity Loss爲:
CPLayer的結構以下,忽然一看還挺複雜的:
這裏來看一下aggregation module是如何整合了spatial information:
看起來就是用了兩個並行的1xk和kx1的卷積,OK,這個地方不難。
這裏我提示一下,怎麼理解這個intra-class呢?從P中,能夠找到一個像素和其餘同類別的像素,從\(\widetilde{X}\)中,能夠找到全部像素預測機率。所以Y中的每個像素的預測的機率值,實際上是考慮了同類別的其餘像素的預測值綜合起來的結果。所以這是一個類內上下文的綜合考慮。
以前計算的affinity Loss在論文中是寫做\(L_p\),
而後整個模型的損失: