摘要
MaX-DeepLab優勢:
加了遮罩:基於包圍框的方法是預測包圍框,不用包圍框的是預測遮罩
端到端,無代理子任務:直接通過transformer預測類別標簽,用二匹配方法,以PQ-style loss指標訓練。
最重要的transformer:引入全局memory路徑,再加上原來的像素CNN路徑,合成雙路徑結構,使得各CNN層可以直接通信(?)
實驗結果:首次讓基於包圍框和不用包圍框的方法的准確性近乎接近,不用包圍框可以使預測更無條件進行
背景介紹
全景分割:對每個像素進行預測,預測遮罩歸屬和類別,每個像素都有唯一的類別thing/stuff,不允許兩個物體重合,不僅預測出了類別還能將各物體分離開

語義分割:只能紅色的都是人,但是不能區分是幾個人,無法分個體處理並且甚至肉眼都看不出是人(比如方框里的那玩意)

實例分割:類似目標檢測,只不過輸出的是遮罩,只能分離特定類別的物體,也不是對像素標記,而是只找到感興趣物體的物體輪廓即可

現有的研究
Panoptic-FPN
這是基於包圍框的處理管線,有anchors, 包圍框特例規則等人工設置的模塊,雖然這些規則已經研究得挺好了但是對於以下情況還是會有問題。
Ours | Axial-DeepLab | box-based |
---|---|---|
成功 | 方法基於中心,中心太近的物體會被認為是同一個物體 | 椅子包圍框的置信度太低,被過濾 |
優化
使得代理任務數更少:

從處理管線里直接去掉包圍框:這更好地滿足 實例分割任務是對於遮罩的性質。
一個SOTA的算法Axial-DeepLab是像素級別的預測(相比於包圍框來說)(會不會處理量過於大?),它不適於變形了的或中心點重合的物體
本文:
-
借鑒DETR end-to-end的思想用mask transformer直接完成預測遮罩區域和對應語義的任務
-
用PQ-style loss這個自己發明的遮罩重合度和類別正確度的乘積的指標,以及用one-to-one bipartite matching* 評價 predicted mask 與 ground truth
-
不用人工參數
-
是Axial-DeepLab的拓展改進
one-to-one bipartite matching
之前box-free的方法都是label assignment(匹配target和成千上萬個anchor,選擇正樣本)先對目標生成多個預測(one-to many),再對多個預測去重(many-to-one),而類似YOLO對每個目標匹配一個grid的就是one-to-one assignment
bipartite matching(二分圖匹配):左邊和右邊能匹配起來並且兩條邊不依附於同一個節點
網絡結構:
傳統:transformer放在CNN頂端
本文:將CNN和transformer結合起來的雙路徑框架,加了全局的memory,任何卷積層可以與memory直接溝通,促使transformer可以插入任何一層CNN(?)
decoder:
還采用了沙漏式解碼器,將多種尺度特征聚合起來,最終以高分辨率輸出。
方法
Transformers
在機器翻譯中應用。每個transformer中有兩個模塊,encoder(編碼)模塊包括一堆小的encoder,decoder(解碼)模塊有同樣數量的小的decoder
第一層encoder是一個word embedding(用低維的一些數字vector表示單詞,embedding越近的單詞意義越相似,通過神經網絡將低維的數字映射了高維的關聯關系),以后每層都是前層來的
每一個小的encoder里面都有兩部分:self-attention和前饋傳播網絡
每一個小的decoder還有一個Attention層(?)
self-attention使得網絡可以聯系上下文,比如翻譯中"it"的指代
Self-attention的執行步驟
-
在每個encoder的輸入vector后加3個vector: Query, key, value 它們的維度都固定且小於embedding
-
算得分Query1 dot Key1,Query1 dot Key2(后面的詞),得出我們在編碼這個單詞時,對其他位置的關注度
-
將score進行softmax標准化,使得score∈(0,1]
-
Value * score,得出每個詞的focus程度
-
將有關於它的各權重相加
比如對Thinking這個詞,並考慮它后面的Machines這個詞:
所以,transformer由encoder和decoder組成,encoder包括數個小encoder,decoder也是,每個小encoder由self-attention和前饋網絡組成,self-attention計算包括6個步驟,同時為讓attention可以關注更多位置,引入multi-head即多檢測頭機制,使該層有多個Query/key/value矩陣
算法基本方程
mi是物體ground truth遮罩,各不重合,ci是該遮罩的分類號
是預測的遮罩,mi近似不相交,pi是c這個分類的概率
對每個遮罩求類別
是(h,w)這個像素的第i個預測mask,下標i稱為其ID,之后還要過濾掉confidence太低的
PQ-Style Loss
PQ(全景質量)=識別質量(RecognitionQ)*分割質量(SegmentationQ)
先定義PQ-style的分類的ground truth和預測值間的相似矩陣
然后優化使得預測的遮罩結果逼近真實的遮罩結果
遮罩相似矩陣
相似矩陣:,那么A和B是相似矩陣
遮罩相似矩陣定義為:,前面的yi=
,^yi=
Dice(應對語義分割中正負樣本強烈不平衡的場景,評估兩個樣本相似性)系數評估預測樣本和真實樣本
遮罩相似矩陣下界0是預測的分類不對 或者 遮罩與正確遮罩無交集,上界1是分類正確 且 遮罩完全吻合
遮罩匹配

用匈牙利算法進行預測遮罩和真實遮罩的二部圖匹配,找到對應真實值的那K個預測遮罩叫正樣本,並得出正樣本的正確排列,那N-K個負樣本就當作空集(無物體)
DETR的一對一匹配是為了移除重復和重疊,本文沒有遇到這樣的困難,並且利用PQ(panoptic quality)矩陣成功(因為上面的匹配輸出的是唯一對應排列)使每個預測遮罩只能對應一個真實遮罩來促進訓練
PQ-style loss
用上面的方程來優化模型的參數θ(這是哪個參數?)

為了讓它更適合梯度下降訓練,我們加了交叉熵項Log:
然后也給了負樣本一些權重,來訓練空集的識別:,於是最后PQ-Style Loss就是:
用這個loss來訓練
網絡結構
包括一個雙路徑transformer,一個將多尺度結合起來的沙漏式解碼器和檢測頭
雙路徑Transformer


解碼器
本文不是用的輕量級解碼器,而是用了L層層疊的解碼器
這個解碼器進行的處理是將特征進行尺寸調整后,加和
Bilinear Resizing 指用雙線性插值將圖片縮放,調整尺寸

本文的解碼器只是做了簡單的各尺度加和,每一層解碼器后面加了一個transformer再進入下一個分辨率,並且這里的每個分辨率不和YOLO一樣直接參與預測,只是聚合一下各尺度的特征供接下來處理
檢測頭
對於N個遮罩,通過2個全連接層和1個SoftMax標准化后,我們得出了分類
另外一路經過兩個全連接層的得到了特征,然后從解碼器出來的在經過兩個卷積層(步長為4)后得到了正則化的特征
,預測的遮罩^m就是f和g相乘:
在處理時,應用了batch norm([知乎-Batch Normalization]是為防止訓練飽和,在隱藏層中也進行邊訓練邊正則化,如下圖)來改善初始化值,並且對原始的圖像進行遮罩雙線性上采樣(用雙線性是為了不讓放大模糊)
最后結合上述的m和p就是結果
輔助Loss
輔助Loss可以幫助網絡訓練
Instance discrimination
Instance discrimination常見於無監督學習中,露頭於"What makes instance discrimination good for transfer learning?" 它的 MoCo 超越了有監督網絡,通過物件級別的對比學習來得到有意義的表征,該表征可以用於反映實例之間的明顯相似性。正如有監督分類學習可以獲得具備 不同類別之間的明顯相似性的表征。相似地,通過將class數量擴展為instance數量,我們最終可以用無監督方法得到表示instance之間明顯相似性的表征。因而,instance discrimination本身成立的假設是建立在:每一個樣例均與其他樣例存在顯著不同,可以將每一樣例當作單獨類別看待的基礎上。
本文將每個像素作為每個instance,處理
對於每個遮罩,定義
上的特征embedding

這K個實例embedding 對應着K個真實遮罩。然后這個pixel的
每個對應一個instance discrimination任務,每個像素對應哪個遮罩embedding會被對應好(?)
Contrastive Loss:像素會被表示成vector,相同類別的vec距離近,不同類別的距離遠,該loss想讓和這個樣本同類的正樣本趨近於1,負樣本趨近於0(?)

τ 是temperature(?),m項僅當像素(h,w)屬於真實遮罩mi時為1,並且跑一遍所有的像素,這會促使同個物體的特征是相似的,而不同的物體是差別很大的,這就是contrastive loss處理的結果,也是實例分割的目的
遮罩ID的交叉熵
這會得出每個像素(h,w)下的“正確”遮罩ID號,優化的過程中將使用交叉熵Loss
語義分割檢測頭
當Stacked decoder的L=0時,在backbone的頂端加入語義檢測頭,否則把語義檢測頭放在步長為4的decoder的后面,因為通過實驗得知這樣會讓遮罩的特征g和語義的特征分離得很好
實驗
參數
32 TPU 訓練 100k 樣本(分成54 epochs)
batch size=64
poly式的learning rate = 1e-3
推理的圖像尺寸=641×641
遮罩的置信度=0.7 過濾遮罩ID的置信度<0.4的像素的類別,設置為空
輸出尺寸:N=128 D=128(128個通道)
PQ-Style Loss
weight=3.0
α=0.75
輔助Loss
instance discrimination
τ=0.3
weight=1.0
遮罩ID的交叉熵
weight=0.3
語義分割檢測頭
weight=1.0
Main results
小模型MaX-DeepLab-S和大模型MaX-DeepLab-L 跑 COCO val(訓練過程的測試集),test-dev(開發過程中訓練過程后的測試集)
MaX-DeepLab-S使用ResNet50骨架,在最后兩階段用了Axial-attention 塊,預訓練后將最后一個階段替換為雙路徑transformer L=0decoder
MaX-DeepLab-L使用Wide-ResNet-41骨架,L=2decoder,替換所有步長=16的殘差塊為axial-attention雙路徑塊


Ablation Study
將Wide-ResNet-41的16步長的塊都加入雙路徑transformer,使得其擁有四種尺度的注意力
為了更快地訓練,我們不用decoder,並且將Pixel-to-pixel近似用卷積塊代替
尺寸

各個網絡的尺寸如表所示。加入Axial-attention有最大的提升,將輸入分辨率提升至1025×1025后同樣采用100kIter后PQ提升至49.4%,加入L=1的decoder后PQ有較大的提升,L=2就沒有那么明顯了,Iter數量更多更利於聚合,但是沒有DETR里面那種明顯
雙路徑Transformer
本文用Memory-to-pixel來把transformer連接到CNN上,接下來的情況見表:

把P2M去掉會帶來損失,但是把M2M去掉會更魯棒,我們認為是因為非重合遮罩方程促使的。其實DETR是通過M2M的self-attention來去重的。
把步長為8的塊也加入transformer會帶來1%的提升,但是加入步長為4的塊就沒有提升了
輔助Loss

通過從匈牙利算法基本的RQ+SQ開始,逐漸改進,可以看到其逐步的提升
分析
訓練曲線
模型通過1/10於DETR的iterations快速收斂到了46%PQ附近,由(b),(c)可知,匹配的分類效果優於匹配的遮罩效果,同時(d),(e)進行了逐像素的instance discrimination效果和Mask-ID預測的效果,絕大多數的像素都預測得很好,只有10%一直預測不好,最終也是它們導致的PQ error
好看的
為了更好了解transformer遮罩特征f,標准化的decoder輸出g,它們怎樣得到預測值^m的,我們用RGB3個通道訓練,得到只有這三種基本顏色的遮罩結果,如圖:

差別越大的物體顏色差別越大
閱讀總結
全景分割是一個非常有意思的領域,之前沒有接觸過NLP的transformer,研究復雜神經網絡的經歷較少,對各種Loss學習得也不足,對數學公式的推導和理解也較欠缺,這樣看來雖然對神經網絡很感興趣,但是相較於研究生階段高端深入的研究學習來說,目前的知識可能還處在新手村,還有很長的路要走,需要繼續和現在一樣查英文解釋,以一敵百拓展學習,多舉一反三多讀文獻來進步,希望能早日在我浙做出好的成果!