其他分享
首页 > 其他分享> > 论文解读《SOLO: Segmenting Objects by Locations》

论文解读《SOLO: Segmenting Objects by Locations》

作者:互联网

实例分割属于比较challenging的任务,他相当于是object detection和semantic segmentation的结合体。在SOLO出现之前,有两种常用的paradigm:(1)top-down:先进行目标检测,再对检测框做分割,经典的方法有Mask RCNN、PANet、TensorMask等;(2)bottom-up:让每一个像素学习到一个embedding,拉近相同instance像素之间的embedding的距离,推远不同instance像素之间embedding的距离,最后根据embedding之间的距离进行cluster。

而这两种范式都显得indirect,前者需要较高的检测精度,后者需要有较好的embedding的学习,这都稍都影响了实例分割的效果。因此本文提出的SOLO可谓打破陈规之举,因为他实现了之间端到端预测instance mask的功能。也就是说,输入是一张image,直接输出instance mask以及对应的类别,整个过程属于box-free和grouping-free的范式。

作者在研究SOLO时对instance之间的差别进行了rethinking。通过对所有的annotation统计发现:98.3%的instance质心相隔超过30个pixel,而剩下的1.7%中,大小比例超过1.5的占据了40.5%。也就是说,instance的不同完全可以归结于两个因素:(1)Location;(2)Size。

(1)对于Location的考虑:把image分成 S ∗ S S*S S∗S 个cell,每一个cell负责预测1个instance。当一个实例落入某个cell,则该cell负责预测该instance;(2)对于Size的考虑:采用FPN结构来适用于不同尺度的instance。

下图是整个SOLO网络结构示意图:
在这里插入图片描述
输入为一张image,通过FCN进行多尺度的特征提取,得到多尺度的feature map。随后接入两个分支:(1)分类分支:最后的输出是 S ∗ S ∗ C S*S*C S∗S∗C 维度的矩阵,这里 C 表示总类别数,表示着总共 S ∗ S S*S S∗S 个cell,每一个cell负责预测一个C维的类别向量;(2)Mask分支:输出维度是 H ∗ W ∗ S 2 H*W*S^{2} H∗W∗S2 ,其中 H ∗ W H*W H∗W 表示feature map的维度, S 2 S^{2} S2 这个维度表示总共有 S 2 S^{2} S2个cell去预测 S 2 S^{2} S2个mask。

其中Semantic category和Instance mask是对应的,例如某一个cell位于 i i i 行 j j j 列,则该类别对应到Instance mask的第 i ∗ S + j i*S+j i∗S+j 个维度的mask(i,j从零开始计数)。

值得注意的是,传统的卷积操作具有空间不变性,这种性质在分类任务中很有必要,但是在分割任务中并不适用,需要的是对位置信息更加敏感的网络。因此文章采用了CoordConv,即在特征图赏concat了两个维度的位置信息,这样在做conv的时候就有位置信息的参与了,实现了position sensitive。

网络的Loss Function如下:
在这里插入图片描述
其中第一项分类的Loss采用focal loss,第二部分mask的loss计算公式如下:
在这里插入图片描述
里面的参数含义懒得打字了,如下图:
在这里插入图片描述
关于 d m a s k d_{mask} dmask​ 的选择最终选取了Dice Loss,其表达形式如下:
在这里插入图片描述
其中 D D D 的计算公式如下:
在这里插入图片描述
Inference阶段:(懒得打字了,别骂我):
在这里插入图片描述
Decoupled SOLO:由于 S S S 的值可能很大,mask的维度为 S 2 S^{2} S2 就显得不太合适了,因此作者采用如下思想,将维度从 S 2 S^{2} S2 减小到 2 S 2S 2S:
在这里插入图片描述

实验是在MS COCO数据集上做的,主要实验结果如下:
在这里插入图片描述

一点感悟:

(1)SOLO这种直接预测instance mask的范式设计的非常漂亮,抛开了传统的top-down和bottom-up这两种间接求解的范式,简化步骤保证性能的同时,使得实例分割很大程度上不再依赖于detector或者embedding的grouping;

(2)CoordConv感觉用得非常妙,卷积的平移不变性对于分类任务是有利的,但对于实例分割,如果一张image有两个相同的人,传统的卷积网络可能会学习到相同的特征,因此会混淆两个instance;而采用CoordConv,加入了位置信息之后,该平移不变性将会打破,而这种position sensitive对实例分割这类任务非常有利;

(3)最后那个decoupled SOLO的设计,确实非常精妙,通过将 S ∗ S S*S S∗S 的维度拆分成两个 S S S 的组合,大大减少了训练的参数。

有几个不解的问题:

(1)如果instance非常密集,导致一个cell中存在多个instance,那么这个cell到底负责预测哪一个instance?(可能这里还要考虑FPN?);(2)然后多个尺度的feature map之间是如何协调的,因为肯定涉及到不同尺度特征图上的cell去预测同一个instance,这里的后处理是怎样操作的?

具体怎样操作的还是需要抽空研究一番代码。

标签:SOLO,S2,mask,Locations,cell,instance,Objects,维度
来源: https://blog.csdn.net/jackzhang11/article/details/115078147