SOLOv2:动态快速实例分割论文笔记

388 阅读2分钟

总述:

Mask Kernel G: 在给定的backbone和FPN的前提下,预测mask kernel G在每一个金字塔的层级。首先将输入特征 image.pngresize为SxSxC。然后加4xconvs和3x3xD的conv生成kenel G。 在F1之前添加归一化的空间特征信息,添加的两个通道是像素坐标归一化到[-1,1]之间的两个特征。不同特征层之间共享同一个预测头。 对每一个grid,kernel分支预测D维的输入来表示预测卷积kernel的权重,其中D是参数的数目。为了生成由E个input通道产生的1x1的卷积权重,令D=E),至于3x3的卷积,D=9E,这些生成的权重是由位置决定的,比如网格位置。如果我们把一个图片划分成SXS个网格,那么输出空间则为SXSXD,输出结果没有激活函数。

Mask Feature F: 经过验证分别对FPN每一个层级的特征图单独学习一个mask feature和结合多个尺度层级的特征图学习统一的一个mask feature 这两种方式,最终选择了后者作为solov2掩膜特征的提取方式。为了学到一个统一的且高分辨率的掩膜特征的表征,应用了特征金字塔融合技术。即显示经过重复的3x3 CONV,group norm,ReLU和两倍线性上采样,FPN的P2-P5特征融合为了一个单独的1/4降采样的特征图(相比于原始输入尺度)。在按位相加后最后一层是由1x1的卷积,group norm和ReLU组成的。需要注意的是,我们送入了归一化后的像素坐标特征图到FPN的最深的层级,即1/32 scale(在卷积和线性上采样之前)

image.png Forming Instance Mask: 对于每一个处于(i,j)位置处的网格,我们首先获取到mask kernel image.png,然后用Gi,j,:卷积mask feature F并得到对应的实例掩膜。这样最多会产生S的平方个mask对每一个预测层级。最终,我们使用matrix NMS获得最终的实例分割的结果。 Learn and Inference 训练损失函数如下所示:

image.png

其中Lcate是传统的Focal Loss,用来做语义分类损失函数,Lmask是DiceLoss,用来做掩膜的损失函数。 在推理阶段,我们对原始图片进行推理,经过backbone和FPN后,获得类别得分,对于每一个位于网格(i,j)可以得到对应的C个分数,即Pi,j.然后采用置信度阈值0.1过滤地制度的预测。对应的预测掩膜kernel被用来和mask feature进行卷积。然后采用sigmod作为激活函数,最后用用0.5作为阈值把soft mask转换为binary mask。接下来采用matrix nms就可以了。

matrix nms伪代码: image.png