YOLACT 和 YOLACT++如何解决实例分割的实时性问题

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,第1张

这篇文章的目标是解决实例分割的实时性问题。通过在现有one-stage目标检测模型的基础上添加mask分支来解决这一问题。与Mask R-CNN等明显使用特征定位步骤(特征repooling)的方法不同,在YOLACT中并不存在这一步。

为了达到这一目的,作者将实例分割任务划分为两个更简单的平行任务,通过对这两个任务的结果进行融合来得到最终的实例分割结果。具体如下:

第一分支:使用全卷积网络(FCN)作为分支来产生一些具有整个图像大小的“prototype masks”,这些prototype masks不与任何实例相关;

第二分支:在目标检测分支的基础上添加额外的head,该head针对每一个anchor都预测一个掩膜系数(mask coefficients)。这些系数的作用是在prototype空间对某个实例的表示进行编码。

最后,在使用NMS得到所有的实例后,对其中的每一个实例都通过对上述两个分支的结果进行线性组合来得到所对应的掩膜。结构如下图所示:

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,43a56192-13d5-11ed-ba43-dac502259ad0.png,第2张

作者这么做的依据在于掩膜之间是空间相关的:例如相邻的两个像素更有可能属于同一个实例。卷积层很自然地利用了这一相关性,但全连接层没有。这会导致一个问题,对于one-stage目标检测器来说,其使用全连接层来针对每一个anchor输出类别预测和box系数,无法利用到掩膜的空间相关性;而类似于Mask R-CNN的two stages方法则使用额外的定位步骤(RoI-Align)来解决这一问题,定位步骤既保留了特征图中的空间相关性,也可以使用卷积运算得到掩膜输出。但是这一做法的代价是,定位层会引入额外的计算,降低算法的运行效率。

因而,将这一问题分为了两个平行的步骤:使用善于产生语义向量的全连接层来产生掩膜系数,而使用善于产生空间相关掩膜的卷积层来产生”prototype masks”。

Protonet由FCN构成,其最后一层输出k个通道,每一个通道对应一个类别的prototype mask。结构如下所示。

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,43de1f14-13d5-11ed-ba43-dac502259ad0.png,第3张

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,4406c360-13d5-11ed-ba43-dac502259ad0.png,第4张

接着,将上述两个步骤得到的prototype mask和掩膜系数做矩阵乘法,并使用Sigmoid进行激活,便可以得到最终的实例掩膜。

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,441aba14-13d5-11ed-ba43-dac502259ad0.png,第5张

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,4445ff08-13d5-11ed-ba43-dac502259ad0.png,第6张

实验结果

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,44754b14-13d5-11ed-ba43-dac502259ad0.png,第7张

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,44bf2f54-13d5-11ed-ba43-dac502259ad0.png,第8张

在COCO上的对比结果:

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,44dcf462-13d5-11ed-ba43-dac502259ad0.png,第9张

总结

大多数错误来自于目标检测部分:误分类、边界框误对准。但是,除此之外,掩膜生成算法部分也有两个典型的错误:

定位失败:如果在一个场景中的某一个点上有着太多的目标,那么网络则无法在prototype中定位每一个目标。在这种情况下,网络将输出与前景掩膜更为接近的而不是这一组中的一些目标实例分割。

泄露:该算法的裁剪步骤是在掩膜集成后进行的,因而无法过滤裁剪区域之外的噪声。当边界框是准确的时候,这一方法有着较好的效果,但当边界框不准确的时候,噪声将被裁剪进实例的掩膜中,导致裁剪区域之外的掩膜的泄露。同时,当预测的边界框太大时,掩膜中也会包含一些离得很远的实例掩膜。

导致AP差距的原因:作者认为这一差距是由检测器相对差的性能所导致的,而不是产生masks的方法。

YOLACT++

YOLOACT++ Better Real-TIme Instance SegmentaTIon

https://arxiv.org/abs/1912.06218

在YOLACT的基础上,作者进一步进行了如下修改,来得到一个准确度更高的实例分割模型。

在backbonde网络中加入可变形卷积(deformable convoluTIons);

使用更好的anchor尺度和比例对predicTIon head进行优化;

加入新的mask re-scoring支路。

最终,在MS COCO上,YOLACT++可以获得34.1mAP和33.5fps的成绩,其精度已经非常接近SOTA模型。

Fast Mask Re-Scoring分支

对于模型来说,其分类置信度和预测的掩膜的质量之间是存在差异的。为此,作者引入了一个fast mask re-scoring分支,该分支依据所预测的掩膜与ground-truth的IoU对掩膜进行评分。具体来说,Fast Mask Re-Scoring网络由6层FCN组成,每一层卷积层之后跟一层ReLU,最后一层为全局池化层。该网络以YOLACT所输出的裁剪过的mask(未经过阈值)为输入,输出mask对于每一个目标种类的IoU。接着,将分类分支预测的类别所对应的mask IoU与相对应的类别置信度的乘积作为该mask最终的分数。

与Mask Scoring R-CNN相比,作者提出的方法有以下不同:

输入为全尺寸的图像的mask(预测框之外的区域值为0),而Mask Scoring R-CNN输入的是RoI repooled的掩膜与来自于掩膜预测分支的特征图所拼接得到的;

没有全连接层,因而本方法更快,加入Fast Mask Re-Scoring分支后时间仅增加了1.2ms。

可变形卷积

通过加入可变形卷积,mAP提高了1.8,速度慢了8ms。作者认为性能提升的原因有以下几点:

通过和目标实例进行对准,使得网络可以处理不同尺度、旋转角度和比例的实例;

YOLACT本身没有再采样策略,因而一个更好、更灵活的采样策略更重要。

同时作者发现,在引入可变形卷积时需要选择合适的插入位置才能取得性能的提升。

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,45021e22-13d5-11ed-ba43-dac502259ad0.png,第10张

实验结果

下图为YOLACT和YOLACT++的实验结果对比:

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,45291950-13d5-11ed-ba43-dac502259ad0.png,第11张

下表为加入改进措施后的性能提升:

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,456a4754-13d5-11ed-ba43-dac502259ad0.png,第12张

可变形卷积的不同插入位置的结果对比:

YOLACT 和 YOLACT++如何解决实例分割的实时性问题,459738f4-13d5-11ed-ba43-dac502259ad0.png,第13张

编辑:黄飞

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/3000984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存