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的延申


方法

PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解

方法概述

用同一个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标记那块就是无参度量学习,通过和嵌入空间的逐像素匹配来执行分割

PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解
算法总览,公式编号和顺序相同算法总览,公式编号和顺序相同


Alignment

PANet Few-Shot Image Semantic Segmentation with Prototype 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})\}Si​={(Ic,k​,Mc,k​)},用Fc,kF_{c,k}Fc,k​表示图片的输出特征图,ccc表示类别的index,k=1,...,Kk=1,...,Kk=1,...,K是support图片的index,ccc类别的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]}pc​=K1​k∑​∑x,y​L[Mc,k(x,y)​=c]∑x,y​Fc,k(x,y)​L[Mc,k(x,y)​=c]​

其中(x,y)(x,y)(x,y)表示空间位置的index,LLL根绝式子内容输出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]}pbg​=CK1​c,k∑​∑x,y​L[Mc,k(x,y)​​∈Ci​]∑x,y​Fc,k(x,y)​L[Mc,k(x,y)​​∈Ci​]​

prototype通过无参的度量学习来优化


Non-parametric metric learning

通过计算每个位置的query特征向量每个support求出的类的protorype的距离来分类,从而实现分割,然后做softmax得到包括背景在内的可能性映射M~q\tilde{M}_qM~q​,设置P={pccCi}{pbg}P=\{p_c|c\in C_i\} \cup \{p_{bg}\}P={pc​∣c∈Ci​}∪{pbg​},FqF_qFq​是query的特征图,对于每个pjPp_j \in Ppj​∈P,ddd 表示距离计算函数,jjj 表示类别,有:
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))}M~q;j(x,y)​=∑pj​∈P​exp(−αd(Fq(x,y)​,pj​))exp(−αd(Fq(x,y)​,pj​))​
所以最后的mask为:
M~q(x,y)=arg maxjM~q;j(x,y)\tilde{M}^{(x,y)}_{q} = \argmax_j\tilde{M}^{(x,y)}_{q;j}M~q(x,y)​=jargmax​M~q;j(x,y)​
ddd 可以是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}Lseg​=−N1​x,y∑​pj​∈P∑​L[M(x,y)=j]logM~q;j(x,y)​

其中MqM_qMq​是query图片的真实mask,NNN是空间位置的总数


Prototype alignment regularization (PAR)

使用公式1和公式2来根据query特征来获得prototypes:P={pccCi}{pbg}\overline{P}=\{ \overline{p}_c|c \in C_i \} \cup \{\overline{p}_{bg} \}P={p​c​∣c∈Ci​}∪{p​bg​} ,然后用无参度量学习来预测support图片的mask,然后计算LPARL_{PAR}LPAR​

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))}M~c,k;j(x,y)​=∑pj​∈P​exp(−αd(Fq(x,y)​,pj​))exp(−αd(Fq(x,y)​,pj​))​

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}LPAR​=−CKN1​c,k,x,y∑​pj​∈P∑​L[Mq(x,y)​=j]logM~q;j(x,y)​

为什么这里每个像素是CK呢,而query不是?
答:C是类别数,K是图像数量,用为query已经做了argmax操作,所以类别只剩选出来的1了,因此C为1,而本身只有一张图片,所以K也是1

总loss:
L=Lsge+λLPARL = L_{sge} + \lambda L_{PAR}L=Lsge​+λLPAR​
λ\lambdaλ设为1,其他的参数也没啥提升


训练

VGG-16做backbone,前五个不变,后面移除,maxpool4的步长为1,为了保持大的分辨率,为了增加感受野,conv5用膨胀卷积代替,膨胀设为2,


实验

实验发现即使每个class只有一个support图像,也能提供稳定的分割结果。

PAR的分析

PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解
使使用后计算的平均距离变小,收敛更快使用后计算的平均距离变小,收敛更快
PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解

Generalization to weaker annotations

即使很弱,prototypes效果也不错,能提供好的分割效果
PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解
bbox简单的轮廓和bbox的效果也不错简单的轮廓和bbox的效果也不错
PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解

总结

第一次看这一块的论文,对于这一块的方法也不太了解,这个反向对齐操作看起来蛮亮的

做实验试过bbox和bbox的特征比较做分类,然而如果query是bbox的特征,那么就算提取support的mask也没什么提升,或许做分割的时候,逐像素对比的时候使用support的效果更好一点?

PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解PANet Few-Shot Image Semantic Segmentation with Prototype Alignment 论文理解 KirutoCode 发布了63 篇原创文章 · 获赞 2 · 访问量 7988 私信 关注
上一篇:Video Object Segmentation using Space-Time Memory Networks论文理解


下一篇:语义分割综述阅读——Understanding Deep Learning Techniques for Image Segmentation