论文巧妙地基于one-stage目标检测算法提出实时实例分割算法YOLACT,整体的架构设计十分轻量,在速度和效果上面达到很好的trade-off。



来源:【晓飞的算法工程笔记】 公众号

论文: YOLACT: Real-time Instance Segmentation

Introduction


  目前的实例分割方法虽然效果都有很大的提升,但是均缺乏实时性,为此论文的提出了首个实时($>30fps$)实例分割算法YOLACT,论文的主要贡献如下:

  • 基于one-stage目标检测算法,提出实时实例分割算法YOLACT,整体的架构设计十分轻量,在速度和效果上面达到很好的trade-off。
  • 提出加速版NMS算法Fast NMS,有12ms加速

YOLACT


  YOLACT的主要想法是直接在one-stage目标检测算法中加入Mask分支,而不添加任何的RoI池化的操作,将实例分割分成两个并行的分支:

  • 使用FCN来生成分辨率较大的原型mask,原型mask不针对任何的实例。
  • 目标检测分支添加额外的head来预测mask因子向量,用于对原型mask进行特定实例的加权编码。

  这样做的原理在于,mask在空间上是连续的,卷积能很好地保持这种特性,因此原型mask通过全卷积生成的,而全连接层虽然不能保持空间连贯性,但能很好地预测语义向量,于是用来生成instance-wise的mask因子向量,结合两者进行预测,既能保持空间连贯性,也能加入语义信息并保持one-stage的快速性。最后取目标检测分支经过NMS后的实例,逐个将原型mask和mask因子向量相乘,再将相乘后的结果合并输出

Prototype Generation

  原型mask分支预测$k$个mask,protonet按如图3的FCN形式实现,最后的卷积输出channel为$k$,protonet接在主干网络上。整体的实现与大多数的语义分割模型类似,区别在于主干网络使用了FPN来增加网络的深度,并且保持较大的分辨率($P_3$, 原图1/4大小)来提高小物体的识别。另外,论文发现不限制protonet的输出是很重要的,能够让网络对十分确定的原型给予压倒性的响应(比如背景),可以选择对输出的原型mask进行ReLU激活或不接激活,论文最终选择了ReLU激活。

Mask Coefficients

  在经典的anchor-based目标检测算法中,检测head一般有两个分支,分别预测类别和bbox偏移。在此基础上添加第三个用于mask因子预测的分支,每个实例预测$k$个mask因子。

  为了更好地控制和丰富原型mask的融合,对mask因子进行tanh激活,使得值更稳定且有正负,效果如图2的分支。

Mask Assembly

  将原型mask和mask因子进行线性组合,然后对组合结果进行sigmoid激活输出最终的mask。$P$为$h\times w\times k$的原型mask,$C$为$n\times k$的原型因子,$n$为检测分支NMS和分数过滤后留下的实例数。

  • Losses

  训练的损失函数包含3种:分类损失$L_{cls}$、box回归损失$L_{box}$以及mask损失$L_{mask}$,权重分别为1、1.5和6.125,分类损失和回归损失的计算与SSD一样,mask损失使用pixel-wise的二元交叉熵计算$L_{mask}=BCE(M, M_{gt})$

  • Cropping Masks

  在推理阶段,使用预测的bbox在最终的mask截取出实例,再使用阈值(人工设置0.5)来过滤成二值的mask。在训练的时候,则使用GT来截取实例计算mask损失,$L_{mask}$会除以截取的实例大小,这样有助于保留原型中的小目标。

Emergent Behavior

  一般而言,FCN做分割都需要添加一些额外的trick来增加平移可变性,比如position-sensitive特征图,虽然YOLACT唯一增加平移可变形的措施是对最终的mask进行截取输出,但是论文发现对于中大物体不截取输出的效果也不错,这代表YOLACT的原型mask学到了对不同的实例进行不同的响应,如图5所示,适当地对原型mask进行组合就能得出实例。需要注意的是全红的输入图片,其原型mask特征是各不一样的,这是由于每次卷积都会padding,使得边界存在可区分性,所以主干网络本身就存在一定的平移可变形。

Backbone Detector

  原型mask和mask因子的预测都需要丰富的特征,为了权衡速度和特征丰富性,主干网络采用类似与RetinaNet的结构,加入FPN,去掉$P_2$加入$P_6$和$P_7$,在多层中进行head预测,并用$P_3$特征进行原型mask预测。

  YOLACT head使用$P_2 \sim P_7$的特征,anchor的大小分别对应$[24, 48, 96, 192, 384]$,每个head共享一个$3\times 3$卷积,然后再分别通过独立的$3\times 3$卷积进行预测,比RetinaNet更轻量,如图4。使用smooth-$L1$训练bbox预测,使用带背景类的softmax交叉熵训练分类预测,OHEM正负比例为$1:3$。

Other Improvements


Fast NMS

  正常的NMS会串行地按类别将bbox逐个校验,这种效率对于5fps的算法是足够快的,但对于30fps的算法将是很大的瓶颈。为此,论文提出Fast NMS来加速。

  首先根据类别分数对各检测结果进行排序,然后计算各自的IoU对,得到$c\times n\times n$的IoU矩阵$X$,$c$为类别数,$n$为bbox数量。假设与bbox的IoU高于阈值$t$的其它bbox的分数高于当前框,则去掉该bbox,计算逻辑如下:

  • 将矩阵$X$的下三角和对角线置为0,$X_{kij}=0, \forall k, j, i \ge j$

  • 取每列的最大值,计算如公式2,得到最大IoU值矩阵$K$
  • $K<t$的检测结果即为每个类别保留的结果。

  通过实验,FastNMS大约能比原生的NMS快约11.8ms,mAP下降0.1

Semantic Segmentation Loss

  为了提升准确率而不影响推理的速度,在训练阶段加入语义分割分支并计算语义分割损失辅助训练。在$P_3$输出上接一个c维的$1\times 1$卷积,由于一个像素可能属于多个类别,使用sigmoid激活输出而不是softmax激活,损失的权重为1,大约能提升0.4mAP。

Results


Mask Results

Mask Quality

Ablations

CONCLUSION


  论文巧妙地基于one-stage目标检测算法提出实时实例分割算法YOLACT,整体的架构设计十分轻量,在速度和效果上面达到很好的trade-off。





写作不易,未经允许不得转载~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

YOLACT : 首个实时one-stage实例分割模型,29.8mAP/33.5fps | ICCV 2019的更多相关文章

  1. 论文速递 | 实例分割算法BlendMask,实时又state-of-the-art

    BlendMask通过更合理的blender模块融合top-level和low-level的语义信息来提取更准确的实例分割特征,该模型效果达到state-of-the-art,但结构十分精简,推理速度 ...

  2. 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割

    前言 前面给大家介绍了使用LabVIEW工具包实现图像分类,目标检测,今天我们来看一下如何使用LabVIEW实现Mask R-CNN图像实例分割. 一.什么是图像实例分割? 图像实例分割(Instan ...

  3. 实例分割:MaskXRCnn 与Visual Genome数据集

    一.VG数据集 机器学习领域的突破突然让计算机获得了以未曾有的高精度识别图像中物体的能力--几乎达到了让人惊恐的程度.现在的问题是机器是否还能更上层楼,学会理解这些图片中所发生的事件. Visual ...

  4. CVPR2019 | 超越Mask R-CNN!华科开源图像实例分割新方法MS R-CNN

    安妮 乾明 发自 凹非寺 本文转载自量子位(QbitAI) 实习生又立功了! 这一次,亮出好成绩的实习生来自地平线,是一名华中科技大学的硕士生. 他作为第一作者完成的研究Mask Scoring R- ...

  5. 经典论文系列| 实例分割中的新范式-SOLO

    前言: 这是实例分割中的一篇经典论文,以往的实例分割模型都比较复杂,这篇论文提出了一个简单且直接的实例分割模型,如何设计这种简单直接的模型且要达到一定的精度往往会存在一些困难,论文中有很多思路或思想值 ...

  6. CVPR2021 | Transformer用于End-to-End视频实例分割

    ​ 论文:End-to-End Video Instance Segmentation with Transformers 获取:在CV技术指南后台回复关键字"0005"获取该论文 ...

  7. 实时实例分割的Deep Snake:CVPR2020论文点评

    实时实例分割的Deep Snake:CVPR2020论文点评 Deep Snake for Real-Time Instance Segmentation 论文链接:https://arxiv.org ...

  8. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)1. 目标检测:FCOS(CVPR 2019)目标检测算法FCOS(FCOS: ...

  9. CVPR2020论文解析:实例分割算法

    CVPR2020论文解析:实例分割算法 BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation 论文链接:https://arxiv ...

随机推荐

  1. leetcode c++做题思路和题解(4)——队列的例题和总结

    队列的例题和总结 0. 目录 栈实现队列 队列实现栈 滑动窗口最大值 1. 栈实现队列 FIFO和FILO,相当于+-号,互转都是利用"负负得正"的原理. 官方解答中第二种思路很6 ...

  2. AJ学IOS(56)网络基础以及如何搭建服务器

    AJ分享,必须精品 一:为什么要学习网络编程 关于这个问题,为什么要学习网络编程,AJ的理解就是,这东西是时代发展的必要,没什么为什么,就是应该学,除非你就是想玩单机,但是就算是单机也会有购买金币之类 ...

  3. SpringBoot全局异常处理与定制404页面

    一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错 ...

  4. 关于JS垃圾回收机制

    一.垃圾回收机制的必要性 由于字符串.对象和数组没有固定大小,所以当它们的大小已知时,才能对它们进行动态的存储分配.JavaScript程序每次创建字符串.数组或对象时,解释器都必须分配内存来存储那个 ...

  5. element-ui修改自定义主题

    官方文档:https://element.eleme.cn/#/zh-CN/component/custom-theme 简单更换主题色 打开:在线主题编辑器,仅修改主题色,点击右上角[切换主题色], ...

  6. Nmap-脚本检测CVE漏洞

    Nmap的一个鲜为人知的部分是NSE,即Nmap Scripting Engine,这是Nmap最强大和最灵活的功能之一.它允许用户编写(和共享)简单脚本,以自动执行各种网络任务.Nmap内置了全面的 ...

  7. SQLi —— 逗号,空格,字段名过滤突破

    前言 出于上海大学生网络安全大赛的一道easysql,促使我积累这篇文章.因为放了大部分时间在Decade和Babyt5上,easysql一点没看,事后看了WP,发现看不懂怎么回事,于是了解了一番. ...

  8. 2019-2020-1 20199303《Linux内核原理与分析》第五周作业

    系统调用的三层机制 API:第一层是指Libc中定义的API,这些API封装了系统调用,使用int 0x80触发一个系统调用中断:当然,并非所有的API都使用了系统调用,如完成数学加减运算的API就没 ...

  9. 2019-2020-1 20199325《Linux内核原理与分析》第七周作业

    第七周作业 1.进程描述符task_struct数据结构(一) 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct数据结构很 ...

  10. Hexo博客插入图片的方法

    Hexo博客插入图片的方法 hexo图片blog hexo blog 插入图片的方法总结 hexo 的blog 内容是根据 markdown 文件的内容生成的html文件, 生成的文件全部在 /pub ...