---
# System prepended metadata

title: MaskFormer
tags: [3IN1 segmentation]

---

# Per-Pixel Classification is Not All You Need for Semantic Segmentation (NeurIPS 2021)

* **論文:** https://arxiv.org/abs/2107.06278

* **主要特點:** 
    1. 基於DETR的想法，探討能不能把Semantic Segmentation、Instance Segmentation、Panoptic Segmentation看做是同一個任務
    2. 將Per-pixel classification 任務轉換為 masl classification，簡單來說就是原本是預測單個像素，變成==預測整個mask以及這整個mask是屬於哪一個類別==。具體可以看下面那張圖
    
    ![image.png](https://hackmd.io/_uploads/HJijOxrXT.png)
    
    
* **方法:**
     
     1. ++網路架構:++
        
        整體架構不複雜，主要由pixel-level module、transformer、segmentation這3大Module所組成

        ![image.png](https://hackmd.io/_uploads/SJYZYlHQ6.png)

        pixel-level module負責extract出圖像特徵。transformer module則只有包含decoder部分，query由可訓練參數所組成。segmentation負責最後的融合。
    
    ---
    
    2. ++整體流程:++
        
        其思想大致都是基於DETR，==所以這邊會有個$N$，代表共要預測多少張mask的數量(論文裡設100)==。==而$K$則代表共有多少個類別要預測==，會+1是因為多了一個空類別。
        
        所以說==模型最後會輸出$(N, H, W)$的mask，和$(N, K+1)$個預測類別的概率==。所以每個mask都可以找到自己對應的類別(可以再回去看一下第一張圖)。
        
        接下來就是照架構圖跑一下流程:
        
        ![image.png](https://hackmd.io/_uploads/SkSGxWBma.png)

        ::: info
        其中$N=100$， $C_\epsilon = 128$， $d_m = 128$。
        最後的binary mask 是由$\epsilon_{mask}$ 和 $\epsilon_{pixel}$兩者內積出來後再經過Sigmoid的結果。$(B, N, C_\epsilon) \bullet (B,  C_\epsilon, H, W) = (B, N, H, W)$
        :::
    
    3. ++訓練:++
        
        剛剛有說道$N$是代表mask預測數量，$K$是代表總共的類別數量。==但是$N$可以不用等於$K$==，如果在訓練時兩者一樣的話，那計算損失就是依照對應到的label去計算損失就好。==如果$N>K$的話，則可以利用bipartite的方式來分配。== 具體配對cost計算如下，與DETR類似但是更簡單: 
        
        ![image.png](https://hackmd.io/_uploads/ryDSBJLQp.png)


    4. ++輸出:++
        
        1. <font color="#D83F31">Semantic Segmentation:</font>
                                
            只需要將每個輸出是同樣類別的mask合併成一個mask當作輸出即可
            
        2. <font color="#e89845">Instance Segmentation:</font>
            
            因為每一個mask和class probability都對應到一個instace，所以過濾掉class probability太低的預測就可以了
            
        3. <font color="#754492">Panoptic Segmentation:</font>
            
            
            
* **結果:**
    
    ![image.png](https://hackmd.io/_uploads/HJdHTJ87T.png)
    ![image.png](https://hackmd.io/_uploads/r1Vv6yLQp.png)


