论⽂解读《SOLO :SegmentingObjectsbyLocations 》
实例分割属于⽐较challenging的任务,他相当于是object detection和mantic gmentation的结合体。在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的范式。
aholic作者在研究SOLO时对instance之间的差别进⾏了rethinking。通过对所有的annotation统计发现:98.3%的instance质⼼相隔超过30个pixel,⽽剩下的1.7%中,⼤⼩⽐例超过1.5的占据了40.5%。也就是说,instance的不同完全可以归结于两个因素:(1)Location;
snip
(2)Size。
(1)对于Location的考虑:把image分成 个cell,每⼀个cell负责预测1个instance。当⼀个实例落⼊某个cell,则该cell负责预测该instance;(2)对于Size的考虑:采⽤FPN结构来适⽤于不同尺度的instance。
下图是整个SOLO⽹络结构⽰意图:
输⼊为⼀张image,通过FCN进⾏多尺度的特征提取,得到多尺度的feature map。随后接⼊两个分⽀:(1)分类分⽀:最后的输出是 维度的矩阵,这⾥ C 表⽰总类别数,表⽰着总共 个cell,每⼀个cell负责预测⼀个C维的类别向量;(2)Mask分⽀:输出维度是 ,其中 表⽰feature map的维度, 这个维度表⽰总共有个cell去预测个mask。好听的英文歌推荐
其中Semantic category和Instance mask是对应的,例如某⼀个cell位于 ⾏ 列,则该类别对应到Instance mask的第 个维度的mask(i,j从零开始计数)。
值得注意的是,传统的卷积操作具有空间不变性,这种性质在分类任务中很有必要,但是在分割任务中并不适⽤,需要的是对位置信息更加敏感的⽹络。因此⽂章采⽤了CoordConv,即在特征图赏concat了两个维度的位置信息,这样在做conv的时候就有位置信息的参与了,实现了position nsitive。
S ∗S S ∗S ∗C S ∗S H ∗W ∗S 2H ∗W S 2S 2S 2i j i ∗S +j
⽹络的Loss Function如下:
其中第⼀项分类的Loss采⽤focal loss,第⼆部分mask的loss计算公式如下:
midway
狠狠地
⾥⾯的参数含义懒得打字了,如下图:
草莓的英文关于
的选择最终选取了Dice Loss,其表达形式如下:
其中rides
的计算公式如下:
Inference阶段:(懒得打字了,别骂我):
Decoupled SOLO:由于 的值可能很⼤,mask的维度为 就显得不太合适了,因此作者采⽤如下思想,将维度从 减⼩到
:
d mask D S S 2S 22S
实验是在MS COCO数据集上做的,主要实验结果如下:
adobe air是什么
⼀点感悟:
inquiry
(1)SOLO这种直接预测instance mask的范式设计的⾮常漂亮,将分割问题转化为对位置的分类问题,从⽽抛开了传统的top-down和bottom-up这两种间接求解的范式,简化步骤保证性能的同时,使得实例分割很⼤程度上不再依赖于detector或者embedding的grouping;
(2)CoordConv感觉⽤得⾮常妙,卷积的平移不变性对于分类任务是有利的,但对于实例分割,如果⼀张image有两个相同的⼈,传统的卷积⽹络可能会学习到相同的特征,因此会混淆两个instance;⽽采⽤CoordConv,加⼊了位置信息之后,该平移不变性将会打破,⽽这种position nsitive对实例分割这类任务⾮常有利;
支持英文(3)最后那个decoupled SOLO的设计,确实⾮常精妙,通过将 的维度拆分成两个 的组合,⼤⼤减少了训练的参数。有⼏个不解的问题:
(1)如果instance⾮常密集,导致⼀个cell中存在多个instance,那么这个cell到底负责预测哪⼀个instance?(可能这⾥还要考虑
FPN?);(2)然后多个尺度的feature map之间是如何协调的,因为肯定涉及到不同尺度特征图上的cell去预测同⼀个instance,这⾥的后处理是怎样操作的?
具体怎样操作的还是需要抽空研究⼀番代码。S ∗S S