最近一两年,单阶段实例分割的工作出现的越来越多,有基于检测的(先检测后预测mask,检测框架有anchor-based也有anchor-free的),也有直接从图片像素到mask的。而自从anchor-free的单阶段目标检测框架FCOS出来以后,基于该目标检测框架的单阶段实例分割也出现了好几个不错的工作。单阶段目标检测和实例分割的框架一般会显得简洁有效,对其他视觉问题也会有一定的启发意义。自己后面也会陆续更新一系列单阶段实例分割的论文解读的博客,也算是做个笔记。
今天写的第一篇,大概是CVPR2020的一个工作,题目是EmbedMask:Embedding Coupling for One-stage Instance Segmentation。文章链接在这儿EmbedMask,代码作者也开源了EmbedMask。简单的来说,是对每一个候选框(Proposal)和每一个像素(Pixel)都计算一个Embedding,其实也就是特征编码,最后根据像素和候选框的Embedding的距离决定该像素是否属于该框框住的物体。框架是基于anchor-free的单阶段目标检测框架FCOS。
在FCOS里,特征图的每一个像素位置或负责预测一个框,这样其实该位置处的框的特征编码是256维度的向量。相比于anchor-based的单阶段目标检测比如RetinaNet,一个像素位置负责编码九个框,特征图的单个像素位置只负责回归一个框,会减少歧义。
整个实例分割的框架如上所示,蓝色模块是作者新加的针对实例分割的模块,其他颜色的模块继承自FCOS。
Overview
由于FCOS每一个像素位置负责一个框,因此,该位置可以表示为,其中,,分别代表是原来FCOS的输出,即分别为该像素处的物体的类别(背景或前景类),像素处预测的该像素相对于框的四周的偏移量,以及该像素处包含物体的概率。分别代表该Proposal的Embedding以及间隔Embedding。间隔Embedding用于确定该像素的Embedding和Proposal的Embedding在多少距离时可以把该像素归入到该Proposal框住的物体。像素Pixel的Embedding记为。
Embedding定义
针对Proposal的Embedding是对物体的全局语义信息的编码,而针对像素的Embedding是对物体局部位置的语义信息的编码。全局语义信息和局部语义信息结合,可能可以更好地对物体进行分割。由于FCOS利用了特征金字塔,所以即使每一个特征图的位置只负责预测一个框,但是数目也是可观的,为了减少处理的框减少计算量并减少噪声样本,在对物体进行实例分割时只考虑目标检测阶段经过NMS之后的候选框(Proposal)。记为,该Proposal的Embedding记为。对于像素的Embedding
,假如和的距离足够近,比如小于一个间隔,,则该像素属于该框框住的物体。
这样可以简单地设计如下的损失函数,训练实例分割网络。
上式两项分别代表把属于某一个物体的像素在Embedding空间与聚类中心也就是越来越近,而不属于的像素会被推开。
但是文中指出这样做 存在一些问题,那就是针对不同尺度的物体,都设置了一个固定的阈值,按照文中的说法,大物体阈值应该要大些,小物体阈值需要小些。因此采用了一种更加自适应的方式来根据物体尺度自适应设置间隔。
可学习的间隔
将间隔这一个超参数和像素以及候选框(Proposal)的Embedding打包在一起表示,省去超参数的调参烦恼。
上式的是的候选实例Embedding,是的间隔Embedding。像素的Embedding与Proposal的Embedding的聚类越接近,越接近于一。因此mask分支的训练损失函数为
是真值,代表0或者1.
平滑损失
训练的时候,在NMS之后留下来的框和真值框求IOU,大于一定阈值的框记为由真值框负责,这样该真值框对应的Embedding也是聚类中心、以及所对应的间隔Embedding可以按如下方式计算得到
而测试的时候,, ,测试和训练的时候和不太一样,因此引入了下面的平滑损失。
网络训练
目标函数:
框回归和分类的样本采样:和FCOS一样,只是正样本的选择更加严格,只是GT框中央的部分区域像素是正样本。
实例Embedding和间隔采样:框和GT框的IOU大于0.5.
像素Embedding的采样: ℬ𝑘是GT框类的一部分像素。
实验结果
部分实验结果如下,更多可以去阅读原文。