Context Encoding for Semantic Segmentation

擬解決問題:

  1. 傳統的語義分割模型均使用完全卷積,通過堆疊卷積層來捕獲具有全局感受野的信息表示,但是會造成空間解析度的損失問題。之後的相關工作通過引入擴張卷積來克服該問題,但是這種方法也會將像素與全局場景上下文分割開來,從而導致像素分類錯誤。
  2. 之後研究人員引入了空間金字塔池,將不同尺度下的特徵圖在上採樣後連接起來,這種方法確實提高了語義分割性能,但是其上下文表示並不明確,從而不知道捕獲的上下文信息與增加的感受野大小是否相同。
  3. 傳統的方法僅僅計算每個像素的分割損失,這種方法並沒有全面的利用全局場景,會使得圖像中大小物品的貢獻度不同(使得小物品不被重視)

為瞭解決上面的三個問題作者提出了一種新的上下文編碼模塊,通過引入先驗信息來提高模型的效果,其主要過程是通過首先預測圖像中存在的類別信息,最後根據上下文編碼與特徵注意力機制來實現語義分割的任務。其整體流程如下圖:

首先作者利用預訓練的CNN網路得到每個圖像的高級特徵,其維度為W*H*C,下面作者採用了一個Encoding Layer(之前作者在Texture encoding network提出)其過程如下:

首先根據提取到的高級特徵我們得到了W*H個C維向量特徵集合其中N=W*H。之後具有兩個待學習的參數集合,一個是固有codebook集合和一個平滑因子集合。最後編碼器要輸出的是k個殘差編碼

這樣做的目的是:

通過將圖像的H*W個C維特徵,每一個都與語義詞做差,然後和所有語義詞做差的結果相加進行歸一化,獲得一個像素位置相對於某個語義詞的信息,然後將這N個結果求和加在一塊獲得最終的,獲得整張圖像相對於第k個語義詞的信息。

其中的,最後將每個像素對於某個語義信息累加得到了最終的殘差編碼。也是C維的,最後將K個融合到一起,這裡沒有用拼接操作,一方面拼接操作需要考慮順序信息,另一方面用加的方法節省了顯存。這裡加起來的含義是獲得整張圖像相對於K個語義詞的全部信息e

其中的是帶有ReLU激活函數的批量正則化方法。得到的信息在圖中的表示如下圖:

下面採用了特徵注意力機制,模型來預測一組影響因子(也可以叫特徵縮放因子)目的是為了突出需要強調的類別,在本文中,作者採用FC層將e特徵映射為c*1*1大小,來作為影響因子,最後讓該影響因子與原始圖像抽取出來的高級特徵相乘得到突出強調之後的特徵表示,最後將該特徵進行上採樣之後得到最終的語義分割圖。

****下面作者為了引入先驗知識,設計了一種SE-loss損失,在編碼層之上添加了一個帶Sigmoid激活的FC層用於單獨預測場景中出現的目標類別,並學習二進位交叉熵損失。不同於逐像素損失,SE loss 對於大小不同的目標有相同的貢獻,這能夠提升小目標的檢測性能。

SE-loss將已編碼的語義作為輸入來預測圖像中對象類別的存在,具體的過程如下所示:

因為上下文模塊和SE-loss是輕量級的,論文在stage3上端添加另一個上下文編碼模塊用於最小化SE-loss作為額外的正則化,這類比於PSPNet的輔助分支但比那個輕量了許多。SE-loss的ground truth是從真實的ground-truth分割mask上直接生成的。

Experimental

作者使用了三個數據集,分別是PASCAL VOC 2012、PASCAL Context、ADE20K.

首先作者在PASCAL Context數據集上進行了消融實驗和對比實驗,結果如下:

其次作者在在PASCAL VOC 2012數據集上提議的EncNet的性能,這是語義分割的金標準基準之一,其結果如下:

最後作者在ADE20K數據集上進行了對比實驗,結果如下:

推薦閱讀:

相關文章