YOLACT Real-time Instance Segmentation
Background
最近实例分割方向,出了很多的论文,本文要介绍的就是一篇非常优秀的实时实例分割论文:YOLACT,该论文由加州大学提出。截止目前,据我所知,YOLACT是实例分割中速度最快的算法(即FPS最高)。
Introduction
论文地址:https://arxiv.org/abs/1904.02689
代码地址:https://github.com/dbolya/yolact
作者提出了一个用于实时分割的简单全卷积模型,在单个 Titan Xp上以 33FPS 在MS COCO 上实现了 29.8 mAP,这比以前的任何算法都要快很多。此外,作者只在一个GPU上训练后获得此结果。作者将实例分割分为两个并行子任务:(1) 生成一组 prototype masks;(2) 预测每个实例的 mask 系数。作者发现由于这个过程不依赖于 repooling,所以这种方法可以产生非常高质量的 masks。此外,作者分析了 the emergent behavior of prototypes,并表明它们学会以 translation variant manner 来定位实例,尽管是完全卷积的。最后,作者提出了快速NMS(Fast NMS),比标准NMS快12ms,只有一点点的性能损失。
先介绍下为什么叫 YOLACT,因为其全称叫 You only look at coefficients. 这里应该是致敬YOLO。
作者在论文中引用了YOLOv3中的这句话,“Boxes are stupid anyway though, I’m probably a true believer in masks except I can’t get YOLO to learn them.”
Algorithm
YOLACT 的目标是将 mask 分支添加到现有的单阶段目标检测模型,其方式和 Mask R-CNN 对 Faster R-CNN的操作相同,但没有明确的定位步骤(如 feature repooling)。为此,作者将实例分割的复杂任务分解为两个更简单的并行任务,这些任务可以组合形成最终的 masks。第一个分支使用全卷积网络生成一组图像大小的 prototype masks,它们不依赖于任何一个实例。第二个向目标检测分支添加额外的 head,以预测用于编码 prototype 空间中的实例表示的每个 anchor 的 mask 系数的向量。最后,对经过NMS后的每个实例,我们通过线性组合这两个分支的工作来为该实例构造 masks。
YOLACT 将问题分解为两个并行的部分,利用全连接层(擅长产生语义向量)和卷积层(擅长产生空间相干masks)来分别产生 mask coefficients 和 prototype masks。然后,因为 prototype 和 mask coefficients 可以独立地计算,所以主干网络检测器的计算开销主要来自”合成“步骤,其可以实现为单个矩阵乘法。通过这种方式,我们可以在特征空间中保持空间一致性,同时仍然是单阶段和快速的。
1. 生成 Prototypes
本文将 protonet实现为 FCN,其最后一层有个通道(每个prototype对应一个),并将其附加到主干特征层。
2. Mask coefficients
传统的基于 anchor 的目标检测器在其预测 head 上具有两个分支:一个分支用于预测类别的置信度(confidence),另一个用于预测4个边界框的回归偏移量。对于mask 系数预测,本文简单地添加了并行的第三个分支,其预测个 mask coefficients,分别对应着每个prototype。因此,不是每个 anchor 产生 个系数,而是产生。
3. Mask assembly
为了生成实例mask,我们需要将prototype 分支和mask coefficient 分支进行合成,使用前者和后者的线性组合作为系数。这个运算可以由单个矩阵相乘完成:
其中,是的prototype mask,是的mask coefficients.
4. YOLACT detector
主干网络:ResNet-101 + FPN
图像大小:
注:本文其实尝试了 ResNet-101和DarkNet-53,这部分很好理解,主干网络越轻量级,YOLACT运行速度越快,但是mAP越低。不过使用ResNet-101就能达到33FPS,真的很赞。
5. Fast NMS
Experiments and Results
YOLACT 在COCO test-dev 上的mAP和FPS,其中基于 ResNet-101的YOLACT-550比之前具有相同mAP的算法快了3.8倍。