点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

作者丨王Sr@知乎

来源丨https://zhuanlan.zhihu.com/p/121839698

编辑丨Smarter

这是一篇实例分割算法研究进展的分析与总结,最近看到了很多新鲜出炉的论文,其中包括cvpr中稿的论文,应该也包括投稿eccv的论文,也看到了好多关于实例分割算法的分享。但本文的思路和之前的分享有所不同,不会以算法为中心介绍论文,而是尝试首先提出一个实例分割算法的框架,然后在这个统一的框架下对若干经典实例分割算法进行剖析与总结。

前言

实例分割这一任务应该不需要再过多介绍了,兼具语义分割和目标检测的特点,这也逐渐演化出基于语义分割的自底向上与基于目标检测的自顶向下的两条道路,这也是近期看到的很多论文里的遵循的分类方式。但目前这两种算法逐渐趋同,出现了相互融合的趋势,所以本文不会从这个角度入手,而是会从另一视角走入实例分割算法的世界。

Region-based Segmentation

“instance-aware semantic segmentation needs to operate on region level.” 这句话来源于FCIS的论文,作为实例分割元老级算法,文章里的很多话确实非常经典。Region-based segmentation,这是笔者认为实例分割任务的最为精髓的概括,更具体来说,实例分割就是逐区域的分割任务。当然,这里的区域(region)具有更广义的含义,既可以代表rpn中的roi,也可以代表anchor,甚至是anchor point,(当然上述这些实质上并没有太多本质差别,关于这一观点,近期也会放出一篇关于目标检测算法的分享), 我们暂且统一称之为region。

region-based segmentation

当我们接受这一设定后,我们就只需要解决三个问题:

  1. 区域怎样设定;

  2. 怎样提取区域特征;

  3. 在每个区域内怎样表征和预测物体的mask;

对于问题1,我们一方面要保证region要足以覆盖图片中的所有object,另一方面需要尽可能减少region的数量,毕竟数量越多就意味着越大的计算量,因此我们需要找到以上两个问题的折中。这个问题实际上也是目标检测任务面临的核心问题,因此我们完全可以借鉴目标检测算法中anchor与gt assignment的设计。

对于问题2,我们有很多选择,例如ROI-Alignment,ROIConv,DeformConv等等,甚至是普通的3*3卷积,也可以完成规则区域的特征提取。

而问题3, 则是实例分割问题的核心,关于这一问题,大致总结如下图,接下来会详细介绍其中的含义。

Mask representation

首先要提到的就是怎样表征instance mask,大体上我们可以分为这两类:binary mask和contour。

contour是最近很火的实例分割方案,基本都是将contour的预测转化成位于contour上的点集的预测,如CurveGCN, PolarMask, DeepSnake等等。核心问题在于点的位置的自由度的设计:点的位置自由度越低,就意味着更明确的优化目标,但也同时意味着更有限的精度上限,代表算法就是PolarMask,将点限制在极坐标下极角间距确定的若干射线上,如此设计必定对特殊形状的物体无能为力,但换取了更简洁的表达形式和优化目标;而点的位置自由度越高,就意味着可以更趋近于物体的真实contour,拥有更高的理论精度上限,但就需要解决如何衡量点集构成的contour与gt contour间的距离的问题,并据此提出网络的损失函数,CurveGCN,DeepSnake等算法中均提出了一套解决方案。当然,基于contour的算法还需要解决点集初始位置设计、基于点的特征提取问题,但和上述问题相比,此类问题的解决方案会相对容易一些。值得注意的是,并不是所有的mask都可以简单的转化成contour进行预测,所以这类方法依旧存在一定的局限性,但依然不失是一种有益的尝试。

binary mask则是实例分割算法的主流,也就是逐区域进行逐像素的分割,自然也存在诸多设计上的选择:

  1. scope:前文我们提到过关于region的设计问题,而当我们确定了region的方案后,针对其中某一个region,我们应该在多大范围内预测mask呢?当然我们的一个选择是仅在这个region内部预测mask(restricted to region),例如Mask R-CNN,但这就意味着分割的精度会受限于bbox的定位精度;另一个极端是无论region在哪,无论region有多大,我们都去在全图范围内预测(whole image),但这种做法无疑是浪费了region提供的先验,造成了大量的预测的冗余。

2.resolution:既然我们需要逐区域预测mask,那么我们怎样选择每个区域的mask的resolution呢?一种方案是无论region什么样,我们都用统一的resolution去预测mask(fixed resolution),例如Mask R-CNN,所有物体的mask都是28*28,但这也就意味着对于大物体来说分辨率可能不够,而小物体可能存在冗余;而最理想的方案自然就是尽可能和物体的尺度保持一致,也就是可变分辨率(alterable resolution),大物体采用大分辨率,小物体采用小分辨率,TensorMask就是采用的这个方案。

3.compression:我们假设区域的个数为N,而每个区域的分割结果的分辨率为w*h(这里暂且假定mask具有统一的分辨率),那么我们最终需要预测的结果就是N*w*h,我们直接预测这个N*w*h的张量必然会带来高昂的计算代价,因此我们需要想办法对这个庞然大物进行压缩。下面简单提几种目前论文中看到过的压缩方案:

  • 首先我们可以考虑对N进行压缩:并非所有的region都需要预测mask,例如说如果我们可以提前确定这个region中并不包含物体,那么这个region我们就可以直接pass,Mask R-CNN就是这个方案(这里多说一句,Mask R-CNN虽然作为两阶段方案,但它的速度并没有想象中那么慢,本质原因就是上面提到的问题,这种两阶段的解决方案依旧是一种精度与速度平衡的优秀方案,目前很多论文中和Mask R-CNN的对比都不太公平);

  • 我们当然也可以考虑对w*h进行压缩,从信息论的角度来说object binary mask中一定存在着信息冗余,因此我们一定可以以更低的比特数对其进行表征,MEInst就是个不错的尝试;SOLO中提到的decoupled head也可以算在这里,把w*h的矩阵拆分为w*1和1*h的两个向量的乘积;这里再挖个坑,目前大多都采用了定长编码的形式,我们有没有可能引入变长编码的形式以应对不同分辨率和复杂程度的mask呢?(如果以后有了类似的论文,欢迎回来挖坟~)

  • 接下来的方案就没有那么直接了,大体思路类似于矩阵分解,也就是把N*w*h这个庞然大物分解为两个矩阵的乘积,通过N*k和k*w*h的两个矩阵相乘得到最终的N*h*w矩阵,这种思路首次出现在yolact中,取得了非常不错的效果。

总结

以上从region-based segmentation的角度提出了一套相对统一的实例分割框架,目前我们看到的绝大多数实例分割算法都是上述框架中不同分支的排列组合,接下来我们将按照这一框架对比较经典的实例分割算法逐一介绍。

经典算法介绍

InstanceFCN & FCIS

这两篇文章一脉相承,其最核心的思想就是将空间信息编码到了channel维度,也就是position-sensitive score map,并完成了特征对齐,这里的特征对齐在这两篇论文中并未提及,但此操作却影响深远,在后续的TensorMask中再次被提及。除此以外,这两篇文章里在测试过程中position-sensitive score map实际上是表意不明的,例如:如果对应于左上角的那个channel的score map中某个pixel响应值为1,那么就意味着它属于某个以它右下方的点为中心的物体,但具体是那个点,却并不明确。这也是这两个算法都需要依赖检测算法提出ROI的原因。

TensorMask

这篇文章写得相当复杂,但我们可以一步一步理解。按照前面提出的region-based segmentation的框架,本文最终输出的就是N*w*h,其中N就是anchor的数量,而w*h则可变的,对于大物体需要大的w*h,小物体则需要小的w*h;下一步就是借鉴了InstanceFCN中position-sensitive score map中特征对齐的思想。当然,和InstanceFCN不同的是在TensorMask中score map的表意是明确的,这也是TensorMask可以抛开检测算法独立工作的原因。按照前面介绍的框架,TensorMask在scope方面应该属于restricted to region,只是这里的region不是bbox,而是anchor,并且通过修改gt assignment的方式使得每个object都尽可能全部位于其对应的anchor的内部,因此mask并不受限于bbox。而TensorMask算法的速度极慢,究其原因,就是此算法对N*w*h丝毫没有压缩。

Yolact

这篇文章非常优秀,可谓是在此框架下极为优秀的作品。从scope的角度来说,本文应该属于whole image,但又利用bbox信息在训练和测试过程中进行了crop(这一操作会使得mask受限于bbox,但此问题在后续的改进算法RDSNet中得到了解决),充分利用了region的信息;从resolution的角度来说,属于alterable resolution,保持了和原图成比例的分辨率;从压缩的角度来说,一方面,限制了N的大小,只有检测算法中得到的正样本才会用于生成最终的mask;另一方面,采用矩阵分解的手段进一步将网络的输出压缩为N*k和k*W*H两个矩阵。我们再深入分析一下这一算法,实际上yolact中的k*W*H和自下而上的基于度量学习和聚类的实例分割算法中的embedding非常相似,只是通过另外一个矩阵N*k引入了聚类中心,因此yolact也可以看作是自下而上算法的一个改进吧。关于这一思想,在RDSNet论文中也有提及,这也就是开篇提到的自下而上算法和自上而下算法正在趋同的一个典型例子。

SOLO

SOLO看起来非常惊艳,但我们可以仔细剖析一下这个算法。按照前面介绍的框架,SOLO的输出是N*W*H,这里的N就是原文中  ,而W与H为原图的尺寸,也就是无论物体多大,都会为其预测一个和原图一样尺寸的mask;为了更好地理解这一算法,我们可以考虑如何通过TensorMask推演到SOLO,首先我们将TensorMask的输出中可变的w*h全部扩充到与原图相同的尺寸W*H,然后对于每个像素换一下channel的顺序,就可以得到SOLO的表示形式。这么看起来似乎SOLO并不如TensorMask优秀,但其最为精髓的地方在于它的N的数量远小于TensorMask;而其之所以可以极大程度上减少N的数量,我们又可以从目标检测算法FCOS上找到一些踪迹。而论文最后提到的decoupled head也是一种对N*W*H的压缩思路,但后续在SOLOv2中得到了更新,所以在这里就不介绍了。

SOLOv2

这是SOLO算法的第二版,主要对第一版中部分内容的进行了优化。首先这篇文章中对N*W*H的压缩方式进行了更新,采用了矩阵分解的思路,将其拆解为N*k与k*W*H两个矩阵的乘积,这种方式是不是似曾相识呢?而其中提出的Matrix NMS我们也能看到yolact中fast nms的影子。在此还是要赞叹一下yolact算法设计的如此高明!到此,我们发现似乎SOLO和yolact殊途同归,我们不妨把两者的性能差距归结为采用了不同的检测算法思路、coordinate inputs和Dice Loss吧。

未来展望

全篇最后还是对未来的实例分割算法的发展进行一点点展望吧。首先,个人认为未来region-based segmentation依旧会是实例分割算法的主流,跳脱于这一框架外的算法理论上很难取得全面的性能超越。而实例分割算法的进步,一方面有赖于检测算法的发展,另一方面,对于contour-based的方法:我们期待着更高效的算法的出现;而对于binary mask的方法:个人认为从scope角度上说,我们需要寻找restricted to region和whole image的折中;从resolution角度上说,个人认为需要根据实际需求确定,如果对于分割的精细度没有过高要求,那么fixed resolution就可以满足要求,反之alterable resolution会是比较理想的选择;而压缩方式则是未来实例分割算法的重头戏,也必然会成为实例分割算法取得精度与速度平衡的核心与关键。

注:

1. 全篇分析都在有意弱化单阶段和两阶段的概念,因为个人两者之间的差别并没有想象中那么大。

2. 本文并未对基于区域的特征提取方式进行过多分析介绍,但这并不意味着这一部分并不重要,如何设计有效且高效的特征提取方式,使其可以适配多尺度、多分辨率的区域,并可以充分融合区域特征与局部特征,仍然是个十分值得研究的方向。

参考文献

[1]. Yi, L., et al., Fully Convolutional Instance-aware Semantic Segmentation, in Computer Vision & Pattern Recognition. 2017.

[2]. Ren, S., et al. Faster R-CNN: towards real-time object detection with region proposal networks. in International Conference on Neural Information Processing Systems. 2015.

[3]. He, K., et al., Mask R-CNN, in IEEE International Conference on Computer Vision (ICCV). 2017. p. 2980-2988.

[4]. Chen Y, Han C, Wang N, et al. Revisiting Feature Alignment for One-stage Object Detection[J]. arXiv: Computer Vision and Pattern Recognition, 2019.

[5]. Dai J, Qi H, Xiong Y, et al. Deformable Convolutional Networks[C]. international conference on computer vision, 2017: 764-773.

[6]. Ling H, Gao J, Kar A, et al. Fast Interactive Object Annotation With Curve-GCN[C]. computer vision and pattern recognition, 2019: 5257-5266.

[7]. Xie E, Sun P, Song X, et al. PolarMask: Single Shot Instance Segmentation with Polar Representation.[J]. arXiv: Computer Vision and Pattern Recognition, 2019.

[8]. Chen X, Girshick R, He K, et al. TensorMask: A Foundation for Dense Object Segmentation[C]. international conference on computer vision, 2019: 2061-2069.

[9]. Peng, S., et al., Deep Snake for Real-Time Instance Segmentation. 2020.

[10]. Xinlong Wang,Tao Kong,Chunhua Shen,Yuning Jiang,and Lei Li. SOLO: Segmenting objects by locations. arXiv preprint arXiv:1912.04488, 2019.

[11]. Daniel Bolya, Chong Zhou, Fanyi Xiao, and Yong Jae Lee. YOLACT: Real-time instance segmentation. In Proc. IEEE Int. Conf. Comp. Vis., 2019.

[12]. J. Dai, K. He, Y. Li, S. Ren, and J. Sun. Instance-sensitive fully convolutional networks. In ECCV, 2016.

[13]. Rufeng Zhang, Zhi Tian, Chunhua Shen, Mingyu You, Youliang Yan. Mask Encoding for Single Shot Instance Segmentation. arXiv preprint arXiv: 2003.11712, 2020

[14]. Shaoru Wang, Yongchao Gong, Junliang Xing, Lichao Huang, Chang Huang, Weiming Hu. RDSNet: A New Deep Architecture for Reciprocal Object Detection and Instance Segmentation. arXiv preprint arXiv: 1912.05070

[15]. Zhi Tian, Chunhua Shen, Hao Chen, and Tong He. FCOS: Fully convolutional one-stage object detection. In Proc. IEEE Int. Conf. Comp. Vis., 2019.

[16]. Xinlong Wang, Rufeng Zhang, Tao Kong, Lei Li, Chunhua Shen. SOLOv2: Dynamic, Faster and Stronger. arXiv preprint arXiv: 2003.10152, 2020.

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

统一视角理解实例分割算法:最新进展分析与总结相关推荐

  1. 关于实例分割的最新研究和进展,看这篇就够了!

    在计算机视觉领域,实例分割是一个很重要的研究主题,在地理信息系统.医学影像.自动驾驶.机器人等领域有着很重要的应用技术支持作用,具有十分重要的研究意义. 本文综述基于实例分割的最新进展和发展历程,首先 ...

  2. 聊一聊今年实例分割领域的进展和未来展望

    点击上方"视学算法",选择"星标" 干货第一时间送达 作者:林大佬 | 来源:知乎 https://zhuanlan.zhihu.com/p/150321886 ...

  3. 聊一聊2020年实例分割领域的进展和未来展望

    作者|林大佬@知乎 This article was original written by 林大佬, welcome re-post, first come with https://zhuanla ...

  4. 3D-BoNet:比3D点云实例分割算法快10倍!代码已开源

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自新智元(AI_era)   新智元报道   来源:投稿 编辑:元子 [新智元导读]本文提出了一种基于边界框回归的高效点云实例分割算法,通过最小 ...

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

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

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

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

  7. 超Mask RCNN速度4倍,仅在单个GPU训练的实时实例分割算法

    点击我爱计算机视觉标星,更快获取CVML新技术 作者 | Daniel Bolya Chong Zhou Fanyi Xiao Yong Jae Lee 译者 | 刘畅 责编 | Jane 出品 | ...

  8. 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 | 技术头条

    作者 | Daniel Bolya Chong Zhou Fanyi Xiao Yong Jae Lee 译者 | 刘畅 责编 | Jane 出品 | AI科技大本营(id:rgznai100) [导 ...

  9. 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法

    这个带分割是25帧,有漏检. 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 原文:速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 | 技术头条 https:/ ...

  10. 2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?

    2017年深度学习优化算法最新进展:如何改进SGD和Adam方法? 深度学习的基本目标,就是寻找一个泛化能力强的最小值,模型的快速性和可靠性也是一个加分点. 随机梯度下降(SGD)方法是1951年由R ...

最新文章

  1. 看了SUMTEC的稍微思考了一下…… 感触颇深。讲一件身边的事:
  2. 多索引表 (4)multi_index.hpp源代码
  3. linux环境搭建golang服务器,Linux下golang环境搭建-Go语言中文社区
  4. 用ssh反向连接访问内网主机 ( 实例使用autossh隧道实现mysql的同步 )
  5. 自助银行服务系统项目开发_自助服务时代即将结束
  6. SpringMVC_day1
  7. selenium+log4j+eclipse相关问题及解决方案
  8. 阿里巴巴副总裁陈丽娟:我对阿里云产品生态的思考
  9. 新手入门makefile教程
  10. Java基础之线程原子量
  11. 计算机删除用户8,Win8.1如何删除账户?
  12. 网络中的中间商(CDN)
  13. postgresql - SQL查询某一天内的记录
  14. 【数据结构-树】哈夫曼树及其应用
  15. 移动机顶盒搭建网页服务器,超级简单搭建自己的私人影视库
  16. Facade模式的介绍
  17. Chrome OS 新功能:可在锁屏时切断 USB 访问
  18. 计算机设置u盘启动,bios设置u盘启动_如何进入bios_bios设置图解教程 - u大师
  19. C语言程序设计谭浩强版 九
  20. 推荐一款免费的带有坐标系的在线绘图web应用(汇报神器)

热门文章

  1. Chrome 插件自定义博客编辑界面
  2. 解题报告——-2018级2016第二学期第三周作业
  3. Struts2学习笔记一之工作原理和struts.xml解析
  4. Yii 多表关联relations,需要与with()方法联合使用
  5. java线程池ThreadPoolExecutor使用简介
  6. 【转】404、500、502等HTTP状态码介绍
  7. ASP.NET中Dictionary的基本用法
  8. Python csv文件读写(csv模块)(转载)
  9. C++ float、double判断是否等于0
  10. 如何封装带有不变参数的函数