【語義分割】PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 論文理解

解決什麼問題

少訓練樣本的分割


本文創新點\貢獻

將prototype的提取和無參數的度量學習分開了

優點:

  1. 不需要額外學習參數,不容易過擬合

    啥意思,那一塊不需要參數啊,度量學習?如何實現的呢?

  2. prototype嵌入和預測都是在計算好的特徵圖上進行的,沒有額外的前向傳播
  3. 簡單易用,更弱的註釋也可以,bbox或塗鴉?這尼瑪還能分割了?

亮點

  1. 利用了prototypes上的度量學習,無參數
  2. 提出prototypes對齊正則化,充分利用support的知識
  3. 對於帶有弱註釋的少樣本直接使用

前人方法

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 Si={(Ic,k,Mc,k)}S_i = \{ (I_{c,k},M_{c,k})\},用Fc,kF_{c,k}表示圖片的輸出特徵圖,cc表示類別的index,k=1,...,Kk=1,...,K是support圖片的index,cc類別的prototype用下式計算:
pc=1Kkx,yFc,k(x,y)L[Mc,k(x,y)=c]x,yL[Mc,k(x,y)=c]p_c = \frac{1}{K}\sum_k\frac{\sum_{x,y}F^{(x,y)}_{c,k}L[M^{(x,y)}_{c,k}=c]}{\sum_{x,y}L[M^{(x,y)}_{c,k}=c]}

其中(x,y)(x,y)表示空間位置的index,LL根絕式子內容輸出1還是0

背景的prototype計算:
pbg=1CKc,kx,yFc,k(x,y)L[Mc,k(x,y)∉Ci]x,yL[Mc,k(x,y)∉Ci]p_{bg} = \frac{1}{CK}\sum_{c,k}\frac{\sum_{x,y}F^{(x,y)}_{c,k}L[M^{(x,y)}_{c,k}\not \in C_i]}{\sum_{x,y}L[M^{(x,y)}_{c,k}\not \in C_i]}

prototype通過無參的度量學習來優化


Non-parametric metric learning

通過計算每個位置的query特徵向量每個support求出的類的protorype的距離來分類,從而實現分割,然後做softmax得到包括背景在內的可能性映射M~q\tilde{M}_q,設置P={pccCi}{pbg}P=\{p_c|c\in C_i\} \cup \{p_{bg}\}FqF_q是query的特徵圖,對於每個pjPp_j \in Pdd 表示距離計算函數,jj 表示類別,有:
M~q;j(x,y)=exp(αd(Fq(x,y),pj))pjPexp(αd(Fq(x,y),pj))\tilde{M}^{(x,y)}_{q;j} = \frac{\exp(-\alpha d(F^{(x,y)}_q,p_j))}{\sum_{p_j\in P}\exp(-\alpha d(F^{(x,y)}_q,p_j))}
所以最後的mask爲:
M~q(x,y)=arg maxjM~q;j(x,y)\tilde{M}^{(x,y)}_{q} = \argmax_j\tilde{M}^{(x,y)}_{q;j}
dd 可以是cosin距離或者平方的歐氏距離

作者做實驗發現cosin更穩定更好,可能是因爲有邊界,參數α\alpha直接設置爲20,改動這個提升不大

這感覺沒什麼東西啊,就是計算距離?

分割loss
Lseg=1Nx,ypjPL[M(x,y)=j]logM~q;j(x,y)L_{seg} = -\frac{1}{N}\sum_{x,y}\sum_{p_j \in P} L[M^{(x,y)} = j]\log\tilde{M}^{(x,y)}_{q;j}

其中MqM_q是query圖片的真實mask,NN是空間位置的總數


Prototype alignment regularization (PAR)

使用公式1和公式2來根據query特徵來獲得prototypes:P={pccCi}{pbg}\overline{P}=\{ \overline{p}_c|c \in C_i \} \cup \{\overline{p}_{bg} \} ,然後用無參度量學習來預測support圖片的mask,然後計算LPARL_{PAR}

M~c,k;j(x,y)=exp(αd(Fq(x,y),pj))pjPexp(αd(Fq(x,y),pj))\tilde{M}^{(x,y)}_{c,k;j} = \frac{\exp(-\alpha d(F^{(x,y)}_q,p_j))}{\sum_{p_j\in P}\exp(-\alpha d(F^{(x,y)}_q,p_j))}

LPAR=1CKNc,k,x,ypjPL[Mq(x,y)=j]logM~q;j(x,y)L_{PAR} = -\frac{1}{CKN}\sum_{c,k,x,y}\sum_{p_j \in P} L[M^{(x,y)}_q = j]\log\tilde{M}^{(x,y)}_{q;j}

爲什麼這裏每個像素是CK呢,而query不是?
答:C是類別數,K是圖像數量,用爲query已經做了argmax操作,所以類別只剩選出來的1了,因此C爲1,而本身只有一張圖片,所以K也是1

總loss:
L=Lsge+λLPARL = L_{sge} + \lambda L_{PAR}
λ\lambda設爲1,其他的參數也沒啥提升


訓練

VGG-16做backbone,前五個不變,後面移除,maxpool4的步長爲1,爲了保持大的分辨率,爲了增加感受野,conv5用膨脹卷積代替,膨脹設爲2,


實驗

實驗發現即使每個class只有一個support圖像,也能提供穩定的分割結果。

PAR的分析

在這裏插入圖片描述
使使用後計算的平均距離變小,收斂更快
在這裏插入圖片描述

Generalization to weaker annotations

即使很弱,prototypes效果也不錯,能提供好的分割效果
在這裏插入圖片描述
bbox簡單的輪廓和bbox的效果也不錯
在這裏插入圖片描述

總結

第一次看這一塊的論文,對於這一塊的方法也不太瞭解,這個反向對齊操作看起來蠻亮的

做實驗試過bbox和bbox的特徵比較做分類,然而如果query是bbox的特徵,那麼就算提取support的mask也沒什麼提升,或許做分割的時候,逐像素對比的時候使用support的效果更好一點?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章