点击上方“CVer”,选择加"星标"或“置顶”
重磅干货,第一时间送达

作者:王Sr
https://zhuanlan.zhihu.com/p/121839698
本文已由原作者授权,不得擅自二次转载
这是一篇实例分割算法研究进展的分析与总结,最近看到了很多新鲜出炉的论文,其中包括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 maskcontour
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 regionwhole 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.
重磅!CVer-图像分割 微信交流群已成立
扫码添加CVer助手,可申请加入CVer-图像分割 微信交流群,目前已汇集1200人!涵盖语义分割、实例分割和全景分割等。互相交流,一起进步!
同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、TensorFlow和PyTorch等群。
一定要备注:研究方向+地点+学校/公司+昵称(如图像分割+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲长按加群
▲长按关注我们
麻烦给我一个在看!
继续阅读
阅读原文