極市導讀 不同的處理范式使得語義分割和實例分割存在很大的gap,極大了影響力圖像分割領域一起發展。因此本文作者提出將實例分割任務和語義分割任務都用mask分類的范式來處理,并在性能上能夠超過當前per-pixel分類的處理范式。 >>加入極市CV技術交流群,走在計算機視覺的最前沿 寫在前面在處理語義分割任務和實例分割任務的時候,以前的工作大多采用不同的任務范式。對于語義分割,大多都是作為per-pixel的分類任務來處理;對于實例分割,大多都是作為mask的分類任務來處理。 這種不同的處理范式使得語義分割和實例分割存在很大的gap,極大了影響力圖像分割領域一起發展。因此作者就提出了,將實例分割任務和語義分割任務都用mask分類的范式來處理,并在性能上能夠超過當前per-pixel分類的處理范式。 0. 基礎知識1)什么是語義分割(semantic segmentation)、實例分割(instance segmentation)、全景分割(panoptic segmentation)? (參考:https://zhuanlan.zhihu.com/p/368904941) 語義分割 :對圖像中的每個像素打上類別標簽,如下圖,把圖像分為人(紅色)、樹木(深綠)、草地(淺綠)、天空(藍色)標簽。 實例分割 :目標檢測和語義分割的結合,在圖像中將目標檢測出來(目標檢測),然后對每個像素打上標簽(語義分割)。對比上圖、下圖,如以人(person)為目標,語義分割不區分屬于相同類別的不同實例(所有人都標為紅色),實例分割區分同類的不同實例(使用不同顏色區分不同的人)。 全景分割 :語義分割和實例分割的結合,即要對所有目標都檢測出來,又要區分出同個類別中的不同實例。對比上圖、下圖,實例分割只對圖像中的目標(如上圖中的人)進行檢測和按像素分割,區分不同實例(使用不同顏色),而全景分割是對圖中的所有物體包括背景都要進行檢測和分割,區分不同實例(使用不同顏色) 1. 論文和代碼地址Per-Pixel Classification is Not All You Need for Semantic Segmentation 論文地址:https:///abs/2107.06278 代碼地址:https://github.com/facebookresearch/MaskFormer 2. Motivation目前語義分割大多被看做是一個像素級別的分類任務,而實例分割確是一個mask級別的分類任務。雖然都是分割任務,但是他們的結構卻存在這么大的區別,因此作者就提出了這樣的疑問:是不是可以都用mask分類來簡化語義分割和實例分割的范式呢?是否mask分類能夠在語義分割任務上表現比per-pixel分類的方法更好呢? 基于上面的問題,作者在這篇論文中提出,其實mask分類是非常通用的,完全可以用mask分類來統一語義分類和實例分類的范式。因此,作者提出了MaskFormer,能夠將現有的per-pixel分類的模型轉換為mask分類的模型。 為了驗證MaskFormer的有效性,作者在五個語義分割的數據集(Cityscapes (19 classes), Mapillary Vistas (65 classes), ADE20K (150 classes), COCO-Stuff-10K (171 classes), ADE20K-Full (847 classes))上做了實驗。在Cityscapes數據上,MaskFormer的性能和per-pixel分類的方式性能相近,因為這個數據集的類別比較少。在數據集中的類別比較多時,MaskFormer能夠比per-pixel分類的模型性能更好。 基于Swin-Transformer的backbone,MaskFormer在ADE20K這個數據集上達到了新的SOTA性能(55.6mIoU),比相同backbone下per-pixel分類的方法性能高2.1mIoU,并且少了10%的參數量和40%的計算量。 在全景分割任務上,MaskFormer的性能也比DETR更好,并且在COCO數據集上達到了52.7PQ的SOTA性能,比原來的SOTA高出了1.6PQ。 3. 方法3.1. Per-pixel classification formulation如上圖(左)所示,per-pixel的分類其實就是把分割任務看做是一個對每一個像素點都進行一次分類的任務,對于一張的圖片,模型輸出的結果就是,其中是一個K維的概率分布,K為數據集中類別的數量。 由于是一個分類任務,所以per-pixel的損失函數其實就是每個像素點的cross-entropy損失函數的和,也就是下面的公式: 3.2. Mask classification formulation如上圖(右)所示,mask分類的模型將分割任務轉換成了兩個步驟,第一是將圖像劃分成N個不同的區域,用binary mask表示(這一步只是劃分出了不同類別的區域,但并沒有做分類 ),第二是將區域作為一個整體與K個類別進行對應(這一步就是將不同區域分為不同的類 )。 最終模型的損失函數為第一步中分割任務的損失函數和第二步中分類任務的損失函數的和,可以表示成下面的公式: 3.3. MaskFormerMaskFormer的結構如上圖所示,主要可以分為三個部分: 1)pixel-level module:用來提取每個像素embedding(灰色背景部分) 2)transformer module:用來計算N個segment的embedding(綠色背景部分) 3)segmentation module:根據上面的per-pixel embedding和per-segment embedding,生成預測結果。(藍色背景部分) 3.3.1. Pixel-level module在Pixel-level module中,首先用backbone對圖片的H和W進行壓縮,通道維度進行提升,提取視覺特征,這一部分和正常CNN提取特征類似。然后用一個pixel Decoder去將長寬重新轉換為H和W。 3.3.2. Transformer moduleTransformer module的結構就是標準的Transformer Decoder的結構,根據視覺特征和N個可學習的query來計算輸出。 3.3.3. Segmentation moduleSegmentation module就是一個FC的結構,后面接上softmax激活函數。它的輸出就是segment的概率估計,因此根據這個概率估計和GroundTruth做分類的損失。 對于mask的預測,作者將per-segment embedding通過一個兩層的MLP轉換成了N個mask embedding。接著,作者將mask embedding和per-pixel embedding進行了點乘,后面接上了sigmoid激活函數,來獲得最后mask的預測結果。 4.實驗4.1. 語義分割上表比較了在ADE20K數據集上,MaskFormer和per-pixel分類模型的性能。可以看出,MaskFormer在語義分割方面具有顯著的潛力。 除了ADE20K之外,作者還比較了在其他數據集上的性能,可以看出在其他數據集上MaskFormer相比于per-pixel分類baseline方法,具有很大的優越性。 4.2. 全景分割![]() ![]() 可以看出,MaskFormer在全景分割任務上也能達到非常好的效果,并能夠在ADE20K數據集上達到新的SOTA效果。 4.3. 消融實驗4.3.1. Per-pixel vs. mask classification![]() 從上表中可以看出,per-pixel的方法轉換到MaskFormer的方法能夠帶來性能的提升。 4.3.2. Number of queries![]() 為了探究query數量N對實驗結果的影響,作者也做了消融實驗。隨著N數量的上升,模型的性能先上升在下降,N=100時,模型能夠達到比較好的性能。 4.3.3. Number of Transformer decoder layers![]() 可以看出六層的Transformer Decoder比一層的效果更好。 5. 總結語義級分割和實例分割之間的范式差異導致每個任務需要完全不同的模型,阻礙了整個圖像分割的發展。作者通過實驗表明,一個簡單的mask分類模型可以優于SOTA的per-pixel分類模型,特別是在存在大量類別的情況下。本文提出的MaskFormer在全景分割任務上也保持著很強的競爭力,最重要的不需要改變模型架構、損失或訓練過程。 這篇文章將語義分割是實例分割的范式進行了融合,極大的減小了語義分割和實例分割的gap,確實是一篇很有意義的工作。 本文亮點總結 如果覺得有用,就請分享到朋友圈吧! |
|