实例分割之SOLOv2

SOLOv2是基于SOLO的改进,SOLO首次提出了直接预测instance mask的范式,但其有如下三个缺点:

(1)mask的表示和学习不充分;

(2)预测得到的mask分辨率不够高;

(3)后处理的NMS太耗时。

基于此,作者在SOLO的基础上做出了两点改进:

(1)采用dynamic卷积的思想,使得网络能够根据位置信息动态地分割实例;

(2)提出了Matrix NMS,大大提高了后处理的速度;

下面对这两点分别进行解读:

Dynamic Instance Segmentation

在这里插入图片描述
从上图可以看出,SOLO的mask分支是直接预测一个 H W S 2 HWS^{2} HWS2的矩阵作为输出,在 S 2 S^{2} S2的维度上每一个切片对应一个cell的mask。这样存在一个问题,就是训练学到的kernal,在feature map上任意位置滑动都是一个不变的kernal。

于是在SOLOv2中,作者把直接得到mask输出,拆分成两个branch。上面的kernal branch负责预测动态的kernal,这样对于不同的input,都会得到不同的kernal(感觉和attention特别想,因为不同的input image,他们不同位置要去赋予的权重理应是不同的)。下面的 feature branch预测的是特征图上每个点的feature。最后将两者做卷积,kernal上每一个 1 ∗ 1 ∗ D 1*1*D 11D的向量作为kernal,在F上进行滑动,得到对应cell的一张mask。

由于backbone部分采用的是FPN结构,因此在生成mask feature的时候有两种方式:(1)对于不同level的feature map分别求其两个分支;(2)将所有的level进行统一,去预测一个所有level联合的representation。作者经过实验采用了后者,将所有level的feature map统一到1/4的scale。值得注意的是,coordconv貌似只用在了最上面一层,提供了position信息,使得网络对position更加的sensitive。

在这里插入图片描述

Matrix NMS

在Inference阶段,NMS是必要且非常耗时的。作者受soft NMS启发,做出了类似于fast NMS(表示快,出自YOLACT)的效果。

简单介绍下soft NMS:首先根据score从高到低对所有的mask进行排序,选中一个mask,将和他IOU较大的mask直接删去。这样做就会出现一个问题,如果两个instance距离很近,这样无疑就一刀切了。因此soft NMS的思想是,不直接删去,而是给他一个weight decay,让他的score衰减,从而还有一线生机。

所以对于一个mask m j m_{j} mj,他的decay factor受两部分影响:(1)对于某一 m i m_{i} mi s i > s j s_{i}>s_{j} si>sj),这个 m i m_{i} mi给他带来的penalty;(2) m i m_{i} mi自身受到抑制的概率。

其中(1)非常好求,直接计算即可;(2)不好求解,但被抑制的可能性,往往与IOU是正相关的,因此找一个IOU与他最大的来近似估计其被抑制的概率。这一部分比较绕,我贴一下原文更加清晰:
在这里插入图片描述

实验结果:COCO数据集
在这里插入图片描述
LVIS数据集:
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jackzhang11/article/details/115217415
今日推荐