# 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)