PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 論文理解
解決什麼問題
少訓練樣本的分割
本文創新點\貢獻
將prototype的提取和無參數的度量學習分開了
優點:
- 不需要額外學習參數,不容易過擬合
啥意思,那一塊不需要參數啊,度量學習?如何實現的呢?
- prototype嵌入和預測都是在計算好的特徵圖上進行的,沒有額外的前向傳播
- 簡單易用,更弱的註釋也可以,bbox或塗鴉?這尼瑪還能分割了?
亮點
- 利用了prototypes上的度量學習,無參數
- 提出prototypes對齊正則化,充分利用support的知識
- 對於帶有弱註釋的少樣本直接使用
前人方法
Few-shot learning:
- 輸入放入神經網絡,執行加權最近鄰匹配來分類
- 用一個向量特徵來表示每個類
- 獨立的模組直接學習support特徵和query特徵的聯繫
Few-shot segmentation:
- 從support set生成一些用來調整query set的分割處理
- 將提取的support特徵和query對方到一起,然後decoder,來生成分割結果
- 使用mask average pool從suppor set裏提取前後景信息
本文IDEA來源
Prototypical networks for few-shot learning的延申
方法
方法概述
用同一個backbone來提取support和query的深度特徵,然後使用masked average pooling從support的特徵將不同的前景物體和背景嵌入不同的prototypes中,每個prototype表示對應的類別,這樣query圖像的每個的像素通過參考離它的嵌入表達最近的特定類的prototype來標記,得到query的預測mask後;訓練的時候,得到mask後,再將剛纔提取的query feature和mask作爲新的“support set”,將之前的support set作爲新的“query set”,再用“support set”對“query set”做一波預測,然後再算一個loss
prototype緊湊且魯棒的對每個語義類別進行表達;mask標記那塊就是無參度量學習,通過和嵌入空間的逐像素匹配來執行分割
Alignment
執行一個prototype對齊正則化,用query和他的mask建立新的support,然後用這個來預測原始的support set的分割,實驗證明能鼓勵query的prototype對齊他們的support的prototype,只有訓練的時候這麼做
反向再推一次,看看是否真的相似
圖像說明:
support的嵌入特徵是圓形,query圖像是三角形,對每個類學習prototype(藍色和黃色的),query通過在嵌入空間中將他的特徵和最近的prototype進行匹配,來進行分割,虛線就是匹配,右圖進行了prototype對齊正則化,就是通過從support到query的反向對齊。
Prototype learning
方法的選擇:
使用support的mask註釋分開學習前景和後景的prototypes,對於什麼時候融合mask有兩種策略,一種是早融合,一種是晚融合:
- 早:在送入網絡提取器之前,把mask和support圖片融合
- 晚:分別把mask和提取出來的前/後景的特徵融合在一起
作者選擇晚輸入,能保證兩個特徵提取器的輸入一致性(query是沒有mask的)
操作:
給定support set ,用表示圖片的輸出特徵圖,表示類別的index,是support圖片的index,類別的prototype用下式計算:
其中表示空間位置的index,根絕式子內容輸出1還是0
背景的prototype計算:
prototype通過無參的度量學習來優化
Non-parametric metric learning
通過計算每個位置的query特徵向量和每個support求出的類的protorype的距離來分類,從而實現分割,然後做softmax得到包括背景在內的可能性映射,設置,是query的特徵圖,對於每個, 表示距離計算函數, 表示類別,有:
所以最後的mask爲:
可以是cosin距離或者平方的歐氏距離
作者做實驗發現cosin更穩定更好,可能是因爲有邊界,參數直接設置爲20,改動這個提升不大
這感覺沒什麼東西啊,就是計算距離?
分割loss:
其中是query圖片的真實mask,是空間位置的總數
Prototype alignment regularization (PAR)
使用公式1和公式2來根據query特徵來獲得prototypes: ,然後用無參度量學習來預測support圖片的mask,然後計算
爲什麼這裏每個像素是CK呢,而query不是?
答:C是類別數,K是圖像數量,用爲query已經做了argmax操作,所以類別只剩選出來的1了,因此C爲1,而本身只有一張圖片,所以K也是1
總loss:
設爲1,其他的參數也沒啥提升
訓練
VGG-16做backbone,前五個不變,後面移除,maxpool4的步長爲1,爲了保持大的分辨率,爲了增加感受野,conv5用膨脹卷積代替,膨脹設爲2,
實驗
實驗發現即使每個class只有一個support圖像,也能提供穩定的分割結果。
PAR的分析
Generalization to weaker annotations
即使很弱,prototypes效果也不錯,能提供好的分割效果
總結
第一次看這一塊的論文,對於這一塊的方法也不太瞭解,這個反向對齊操作看起來蠻亮的
做實驗試過bbox和bbox的特徵比較做分類,然而如果query是bbox的特徵,那麼就算提取support的mask也沒什麼提升,或許做分割的時候,逐像素對比的時候使用support的效果更好一點?