論文
#Segmentation, #Few-shot, # Weak- annotation
PANet: Few-Shot Image Semantic Segmentation with Prototype Alignment
概述
這是一篇元學習(Meta Learning)應用在Segmentation的方法。賣點大概如下:
- 有別於現在較多的segmentation模型,它中間使用metric learning (non-parametric)去學習prototype,相比參數會少一些。
- 多使用一個 prototype alignment regularization (PAR) loss來訓練模型,以充分使用support set的資訊。
- Testing時,新class也可以用weak annotations 來做分割。
方法
上圖為論文中2-way 1-shot的例子,大概解說一下各個步驟:
1.
Support set的圖片先經由VGG16特徵擷取,得到feature map,維度為w *h*ch (ch是channel數)。Feature map再經由masked average pooling計算得到高維度特徵prototype,此時的維度是(c+1)*ch,c是要分割的class數量,+1是背景也算是一類,然後ch同剛剛的channel數,也就是高維度的特徵數。Masked average pooling的計算方法如下,大致上就是像素值對該class的pixel做加權平均,K-way的K張圖再取平均,就能得到該class的prototype。
c:class
pc:某class的prototype
K:K-way
F:feature map像素值
M:mask
2.
Query Set的圖片一樣經由VGG16取得feature map,再與每個prototype計算餘弦距離,再取softmax,得到每個pixel屬於某class的預測機率(probability map),每個pixel取機率最大的class為預測結果。
3.
計算多class的cross entropy:
N:總spatial點數量
4. 5.
如過這個prototype學得好,照理來說可以逆向回去預測support set,因此作者照一樣的方式,用query set的圖片預測support set,這部份就是賣點提到的prototype alignment regularization (PAR)。loss的算法概念也相同,只是support set和query set的數量不一樣而已:
C:class數量
K:K-shot
6.
最後訓練模型的總loss為兩loss的合,不過lambda可以調整:
7.
推論時只需做上述第2步驟即可,也就是下方紅框的部份。
表現
上圖是論文中的結果,以1way-1shot來說,結果算還行,在物體邊邊角角的部份會沒有預測到,像是腳踏車把手和馬的尾巴。
我自己拿來跑,也有上述的現象,此外也發現,有些圖還是會切割的比較粗糙,調整一下訓練參數再訓練,可能會好些。
論文中探討對weak annotation的應用,在testing時,對於沒過的class只使用弱標註的資料,效果還可以:
總結
其實本來是想找方法可以節省一點標註的工作,不過感覺論文有挑選比較好的圖片出來放,論文中mean IoU和自己訓練後的結果看起來,能幫助的效果還是有限。