近年來,語義分割的模型幾乎都是基於FCN框架,利用Dilated Conv、Up sample、skip connection等各種組件來變化。 但是這種模型有很大的問題:無法對不同的像素之間的關係進行顯式的建模,像素之間的唯一聯繫就是「感受野」的重疊。所以從本質上來說,這種語義分割框架是一種Dense prediction, 是分立的對每個像素進行預測。
這顯然不符合人類對事物的認知方式,人腦中的分割類似於:把一個場景中相似的像素聚成一團,然後宏觀的判斷這一團像素是什麼,在判斷類別時,還會利用類別之間的依賴關係聯合推理。肯定不會一個點一個點的看這是什麼。
由此,對語義分割中的不同像素/上下文之間的關係建模就非常重要,近期的研究中,很多論文著眼於「context」和「relation」,於是結合之前的方法,對於這些建模idea做一個總結。每篇文章只說核心思想,不詳細介紹。
1. 近期比較火的利用self-attention建立spatial-wise關係
2. 利用self-attention或者context encoding建立channel之間的關係
3. 利用圖卷積建模不同區域/類別之間的依賴關係
4. 利用Metric learning, 建立像素之間的關係
5. 基於CRF思想的各種變種
1.利用self-attention建立spatial-wise關係《OCNet: Object Context Network for Scene Parsing》這幾篇的本質思想是一樣的,前三篇很像是對最後一篇的發展和應用。以第一篇為例。
之前對神經網絡的研究表明,大的感受野對於各種視覺問題都是很重要的,但是後來研究發現,由於感受野會有退化的問題,即使使用Global pooling也不能帶來全圖的感受野。於是建立長距離的context關係成為了一個要點。
1.1 《OCNet: Object Context Network for Scene Parsing》
OCNet依據像素間的特徵相似性,為每一個像素建立了一個Object context map,即把 「 對一個像素點決策」 變成 「所有相似的像素點放在一起決策」,利用像素之間依賴關係不僅僅是像ensemble一樣使得結果更加魯棒, 並且可以再訓練中利用各個像素的特徵相互提升。
如圖第一行第一列,判斷十字位置的像素時,不僅僅看單個位置的特徵,而是把所有車子的特徵放在一起來判斷。
實現上採用non-local方法,記輸入OC模塊之前的特徵為 H*W*C,為例避免計算量過大,可以先對C進行降維。
1)把H*W*C展平為 N*C由此每一個position都是一個C維的向量,該向量融合了圖中相似的所有像素的特徵。細節看代碼:https://github.com/PkuRainBow/OCNet.pytorch 利用該模塊得到一個新特徵可以直接和原特徵concat,也可以用來改進Pyramid Pooling和ASPP模塊。
作者在很多數據集包括LIP上都做了實驗,都達到SOTA效果。和下面幾篇文章相比,這篇不一樣的地方就是利用OC機制改進了Pyramid Pooling和ASPP模塊了。
1.2《CCNet: Criss-Cross Attention for Semantic Segmentation》
這些論文都是同期出來的,這篇的思想可以說本質上和OCNet是一樣的,OCNet的亮點是把non-local融入了SPP, ASPP module, CCNet是利用一個Criss-Cross機制,大大化簡了Non-local中求解Affinity的計算量,速度和計算量小了很多,但是release的結果比OCNet差不了多少。
Non-local在做Affinity Matrix的時候,是在整張圖所有的Pixel之間求similarity, 這樣就要求W*H*W*H個pairwise similarity,這是很大的計算量。CCNet提出只需要在十字路徑上做no-local操作,通過循環兩次,就基本可以把信息傳播到全圖,如下圖( 具體推導看原文)
從Pipeline上看,CCNet和OCNet的本質是一樣的
1.3《Dual Attention Network for Scene Segmentation》
在spatial維度是完全一樣的思路,利用Non-local結構建立long range relation。不僅如此,這篇文章還把self-attention的思想拓展到了channel維度,由於不同的channel代表不同的濾波器響應,在高層特徵中可以代表不同的語義概念,作者希望利用channel-wise attention建立不同語義類別之間的依賴關係。
Attention機制就如同剛剛介紹的DANet, 和spatial wise attention都是一樣的。另外還有一篇早一點的《Context Encoding for Semantic Segmentation》
這篇算很有代表性的文章,文章的主旨是建立一個Context Encoding Module用於對場景進行編碼,由於不同的場景中不同的物件出現的可能性不一樣。比如在天空的場景中,就要強化飛機的概率,不能強化船的概率。本文用Global Pooling得到場景特徵,利用類似於senet的思想建立channel之間的關係。
3.1《Graph-Based Global Reasoning Networks》
我覺得這是最好的一篇文章,利用GCN建立不同region之間的relation。本文的核心思想如下圖,在圖像幾何空間(coordinate space),由於每一個像素都有特徵表示,所以特徵維度非常高,這麼多的特徵之間,不容易進行信息流動。如下圖:最好的情況就是把a圖投影到一個Interaction space, 把每個像素投影到不同的節點,比如:人,牆壁,電視機。。。然後再利用這些節點之間的依賴關係進行信息流動,之後再把這些信息交互過的節點,投影回到之前的坐標空間。
作者找到了一種簡介的表示方法來實現上述目的,使用簡單的1x1卷積做空間投影,使用圖卷積做information diffusion。圖卷積中不同節點的依賴關係也是依靠1x1的卷積學習得到。
其實這篇文章的出發點和上述的文章有相似之處: 在宏觀上把每個像素的決策問題轉變成一團像素的決策問題,spatial-wise self-attention的方法只能讓信息在同一個類別的像素之間流動,這裡作者利用圖卷積使得信息在不同的類別之間流動,建立了不同類別/區域間的依賴關係。
感覺這篇文章,作者的設計只是在空間「維度」上滿足了自己的設想,在具體如何對不同的region或者semantic class建模上其實還有很多內容可以繼續探究。
4.利用Metric learning, 建立像素之間的關係《Adaptive Affinity Fields for Semantic Segmentation》
上述的文章都是全圖之間,比較宏觀的語義依賴於關連,這篇文章講的是利用局部像素之間的關係使得網絡學習到更好的表徵能力。
這篇文章的思路很簡潔:屬於同一個類別的兩個像素之間的語義表示要儘可能相似,屬於不同類別的語義表示需要距離更遠,於是作者引入度量學習的思想,在一定的區域內利用Affinity Fields, 使得每個小區域內屬於同一個類別的像素特徵儘可能相似,不同類別像素儘可能有區別。這個思想其實也是「把逐像素預測問題變成一個更加宏觀的預測」
CRF在語義分割中早已經得到了廣泛的應用,CRF能work那就說明了基於底層特徵和位置特徵簡歷像素之間的依賴關係是可行的,這樣其實也可以為no-local類似的方法提供思路。
其餘變種的還有把CRF套到卷積中以提高計算效率,把類似CRF的東西寫到Loss中
《Convolutional CRFs for Semantic Segmentation》:https://arxiv.org/abs/1805.04777《On Regularized Losses for Weakly-supervised CNN Segmentation》想要了解更多資訊,請掃描下方二維碼,關注機器學習研究會
轉自:極市平臺