目录
写在前面
兵荒马乱的秋招结束了,浑浑噩噩地过了几个月,荒废了不少日子,现在打算重新捡起论文来读。这段时间,单阶段实例分割(Single Shot Instance Segmentation)的文章开始大量出现。这篇文章记录一下单阶段实例分割的方法,并简单介绍一下自己印象深刻的几篇论文。
实例分割(Instance Segmentation)
实例分割(Instance Segmentation)是视觉经典四个任务中相对最难的一个,它既具备语义分割(Semantic Segmentation)的特点,需要做到像素层面上的分类,也具备目标检测(Object Detection)的一部分特点,即需要定位出不同实例,即使它们是同一种类。因此,实例分割的研究长期以来都有着两条线,分别是自下而上的基于语义分割的方法和自上而下的基于检测的方法,这两种方法都属于两阶段的方法,下面将分别简单介绍。
两阶段实例分割
自上而下(Top-Down)
自上而下的实例分割方法的思路是:首先通过目标检测的方法找出实例所在的区域(bounding box),再在检测框内进行语义分割,每个分割结果都作为一个不同的实例输出。
这类方法的代表作就是大名鼎鼎的Mask R-CNN了,如下图,总体结构就是Faster R-CNN的两阶段目标检测,box head用来做检测,增加了mask head用来做分割,模型大家都很熟,细节就不再赘述。
自下而上(Bottom-Up)
自下而上的实例分割方法的思路是:首先进行像素级别的语义分割,再通过聚类、度量学习等手段区分不同的实例。
自下而上的工作并不多,通常的做法都是通过Instance Embedding的做法来做。举一篇CVPR2017的文章为例,
论文名称:Semantic Instance Segmentation with a Discriminative Loss Function。
参考代码:https://github.com/Wizaron/instance-segmentation-pytorch
这篇论文的实例分割做法是:
(1)语义分割:首先在第一个阶段做了语义分割,得到了所有的物体mask;
(2)像素嵌入:再通过使用一个判别式损失函数来训练网络,网络的优化目标是将图像每个像素投影到 n维特征空间后,同属于一个实例的像素尽量靠近,形成一个 cluster
, 每一个实例对应一个 cluster
, 不同 cluster
则尽量远离
(3)后处理:最后使用聚类的方法(如mean-sh