每天一篇论文 274/365 YOLACT Real-time Instance Segmentation 实时实例分割

原文
Code

摘要

我们提出了一个简单的、完全卷积的实时实例分割模型,在MS-COCO上达到29.8map,在单个Titan Xp上以33.5fps的速度进行评估,这比以往任何竞争方法都要快得多。而且,我们只在一个GPU上训练就得到了这个结果。我们通过将实例分割分成两个子任务来实现这一点:(1)生成一组原型掩码;(2)预测每个实例的掩码系数。然后将原型与模板系数线性组合生成实例模板。我们发现,由于这个过程不依赖于再冷却,这种方法产生了非常高质量的掩模,并免费展示了时间稳定性。此外,我们还分析了原型的涌现行为,并展示了它们在完全卷积的情况下,以一种翻译变体的方式学会了自己定位实例。最后,我们还提出了快速NMS,它比仅具有边际性能损失的标准NMS快12 ms。

当前比较主流的实时性有缺陷的地方

作者认为目前最先进的两阶段实例分割方法在很大程度上依赖于特征定位来生成遮罩。也就是说,这些方法在一些边界框区域(例如,通过RoIpool/align)中“再现”特征,然后将这些现在已本地化的特征馈送给它们的掩码预测器。这种方法本质上是连续的,因此很难加速。与FCIS并行地执行这些步骤的一个阶段方法确实存在,但是它们在定位之后需要大量的后处理,因此仍然远远没有实时性。

本文化整为零再组合的方法

YOLACT将实例分割分解为两个并行任务:
(1)在整个图像上生成一个非局部原型模板字典
(2)预测每个实例的一组线性组合系数。然后从这两个组件生成完整的图像实例分割很简单:对于每个实例,使用相应的预测系数线性组合原型,然后使用预测的边界框裁剪。

网络学习如何自己定位实例Mask,从视觉上、空间上和语义上相似部分找出不同的地方。此外,由于原Mask的数量与类别的数量无关(例如,可以有比原型更多的类别),YOLACT学习分布式表示,在该表示中,使用跨类别共享的原型组合分割每个实例。这种分布式表示导致了原型空间中出现一些有趣行为:一些原型在空间上分割图像,一些局部化实例,一些检测实例轮廓,一些编码位置敏感的方向图(类似于在FCIS中硬编码位置敏感模块获得的方向图)。
在这里插入图片描述

理论基础

通过连续帧实例分割主要是因为Mask在空间上是一致的;也就是说,彼此靠近的像素可能是同一实例的一部分。因此,我们将问题分解为两个并行部分,分别使用擅长产生语义向量的fc层和擅长产生空间相干Mask的conv层来产生“Mask系数”和“原型Mask”。然后,由于原型和Mask系数可以独立计算,因此主干检测器的计算开销主要来自组装步骤,组装步骤可以实现为单矩阵乘法。这样,在保持特征空间的空间一致性的同时,仍然是一个阶段和快速的。

原形生成

原型生成分支(protonet)为整个图像预测一组k个原型Mask。我们将protonet实现为一个FCN,其最后一层有k个通道(每个通道对应一个原型),并将其附加到主干特征层。
在这里插入图片描述

Mask 系数

典型的基于锚的目标检测器在预测头上有两个分支:一个用于预测c类置信度,另一个用于预测4个包围盒回归。对于Mask系数预测,我们简单地添加一个并行的第三个分支来预测k个掩模系数,一个对应于每个原型。因此,我们不是产生每个锚4+c系数,而是产生4+c+k。然后对于非线性,我们发现能够从最终掩模中减去原型是很重要的。因此,我们将tanh应用于k个掩模系数,它在没有非线性的情况下产生更稳定的输出。

Mask Assembly

为了生成实例掩码,我们将原型分支和掩码系数分支的工作结合起来,使用前者和后者的线性组合作为系数。然后我们通过一个非线性符号函数的线性来产生最终的掩模。使用单矩阵乘法和sigmoid可以有效地实现这些操作:
在这里插入图片描述

在这里插入图片描述

Backbone Detector过程

为了得到一致的每幅图像的评价时间,我们不保留长宽比。与RetinaNet一样,我们通过不产生P2和产生P6和P7来修改FPN,作为从P5(而不是C5)开始的连续3×3跨2 conv层,并在每个层上放置3个长宽比为[1,1/2,2]的锚。P3的锚定具有24像素平方的区域,并且每个后续层具有上一层的两倍比例(导致比例[24、48、96、192、384])。对于每个Pi上的预测头,三个分支共享一个3×3conv,然后每个分支并行得到自己的3×3conv。与RetinaNet相比,我们的预测头设计(见图4)更轻,速度更快。我们将平滑L1损失应用于列车箱回归器,并以SSD[30]的方式编码箱回归坐标。为了训练类预测,我们使用带c个正标签和1个背景标签的softmax交叉熵,使用3:1负正比例的OHEM[39]选择训练示例。
在这里插入图片描述

训练过程

我们使用ImageNet预训练权重在一个GPU上训练所有batch大小为8的模型。我们发现这是一个足够大的batch size,所以我们让预处理的batch size数解冻,但不添加任何额外的bn层。我们用SGD训练800k次迭代,初始学习率为10-3,在280k、600k、700k和750k次迭代时除以10,使用5×10-4的权重衰减,动量为0.9,以及SSD中使用的所有数据增强[30]。对于Pascal,训练120k次迭代,将学习速率除以60k和100k,并将锚定标度乘以4/3,因为对象往往更大。训练需要4-6天(取决于配置)在一个Taitan Xp为可可和不到1天的Pascal。

结果

Mask 质量
在这里插入图片描述
COCO 数据集结果
在这里插入图片描述
COCO上测试结果
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值