资讯详情

实例分割最全综述(入坑一载半,退坑止于此)

自21年初从语义分割的舒适圈跳到实例分割方向以来,已经一年半了。

读过一些文章,跑过一些实验,到目前为止还没有输出。

经过多次了很多次,要不要继续,最后决定后悔退出。

写点东西,记过去,弥补遗憾。

文章目录

  • 1. 实例分割简介
  • 2. 二阶段实例分割
    • 2.1 Mask R-CNN * * * * *
      • (1) RoI Align
      • (2) Mask 分支
      • (3) 总结
    • 2.2 Cascade Mask R-CNN * * * *
      • (1) Motivation
      • (2) Box级联
      • (3) Mask级联
      • (4) 总结
    • 2.3 HTC * * * *
      • (1) mask 信息流
      • (2) 语义监督
      • (3) 总结
  • 3. 一阶段实例分割
    • 3.1 局部mask与全局mask之争
    • 3.2 YOLACT * * * * *
      • (1) RetinaNet
      • (2) 实例Mask系数
      • (3) Mask特征
      • (4) 实例Mask预测
      • (5) 总结
    • 3.2 BlendMask * * *
      • (1) BlendMask vs YOLACT
      • (2) 总结
    • 3.3 EmbedMask * * *
      • (1) 卷积 vs 聚类
      • (2) 实例聚类阈值可以学习
      • (3) 总结
    • 3.4 CondInst * * * *
      • (1) Motivation
      • (2) 模型结构
      • (3) 总结
    • 3.5 SOLOv2 * * * *
      • (1) 网格正负样本分配策略
      • (2) classification分支和mask分支
      • (3) SOLOv2 动态卷积
      • (4) 总结
  • 4. Boundary Refinement
    • 4.1 Pointrend * * * *
      • (1) 测试阶段
      • (2) 训练阶段
      • (3) 总结
    • 4.2 Refinemask \* \* \*
      • (1) SFM(Semantic Fusion Module)
      • (2) BAR(Boundary-Aware Refinement)
      • (3) 总结
  • 5. Contour-based实例分割
    • 5.1 PolarMask * * * *
      • (1) Polar Centerness
      • (2) Polar IoU Loss
      • (3) 总结
  • 6. Query-Based实例分割
    • 6.1 QueryInst * * * *
      • (1) Box Head & Mask Head
      • (2) 动态卷积
      • (3) 总结
    • 6.2 SOLQ * * *
      • (1) Mask Resolution
      • (2) Mask压缩算法
      • (3) 总结
    • 6.3 Mask2former * * * *
      • (1) Pixel decoder
      • (2) Transformer Decoder
        • <1> masked attention
        • <2> 调换self-attention和cross-attention的顺序
      • (3) 采样点损失函数
      • (4) 总结
  • 5. 这一载半
  • 6. 参考

1. 实例分割简介

实例分割是结合目标检测和语义分割的更高层次任务。

  • 目标测试:区分不同的例子,使用box目标定位;
  • 语义分割:区分不同的类别,使用mask进行标记;
  • 实例分割:区分出不同实例,用mask进行标记;

因此:

  • 在目标检测的基础上,实例分割需要更精细地使用mask定位,而不是bbox;
  • 例子分割需要在语义分割的基础上区分不同类别的例子mask;

实例分割算法的发展也遵循这两条路线:

  • 一是基于目标检测的自上而下方案:首先,通过目标检测定位每个实例box,进而对box内部语义分割得到每个例子mask;
  • 另一种是基于语义分割的自下而上的方案:首先通过语义分割逐像素分类,然后通过聚类或其他测量学习方法区分同类的不同实例;

考虑基于语义分割的自下而上实例分割算法(如Semantic Instance Segmentation with a Discriminative Loss Function,Deep Watershed Transform for Instance Segmentation)通常后处理步骤繁琐,效果差。本文主要讨论基于目标检测的自上而下实例分割算法。

本文根据目标检测网络将实例分割算法划分为介绍三类。此外,根据实例进行分割mask不同的表达方式,介绍 实例分割。

此外,还有一些方法(如:FCIS,TensorMask,deepmask,AdaptIS,MEInst)这也是一项非常经典的工作。由于篇幅原因,本文没有涉及。

2. 二阶段实例分割

2.1 Mask R-CNN * * * * *

在这里插入图片描述 Mask R-CNN是典型的自上而下的实例分割算法,其扩展自目标检测网络Faster R-CNN,在此基础上新增mask预测分支。

  • Faster RCNN包括两个阶段, 第一个段, 是RPN结构, 用于生成RoI集合。第二个阶段利用RoI pooling从RoI中提出固定尺寸的特征, 然后进行class分类任务和box offset回归任务。
  • Mask RCNN使用了相同的two-stage结构, 第一阶段使用了相同的RPN网络。第二阶段, 在执行class分类和box offset 回归任务的同时,

因此,,以下分别进行介绍:

(1) RoI Align

由于RPN阶段得到的proposals box的大小是不一样的,而为了进行后续的class分类,box回归和mask分割任务,必须有一种操作将不同尺寸的box特征图归化到相同的空间尺寸以方便进行batch运算,RoI Pooling和RoI Align的作用就是如此。

RoI Pooling存在两次量化过程:

  • 将box量化为整数坐标值;
  • 将量化后的box区域分割成 k × k k\times k k×k个bins, 并对每一个bins的边界量化为整数;

RoI Pooling这种粗糙的量化方式对于Mask R-CNN新增的mask分支会产生很大的量化误差,因此,提出了RoI Align方法,取消RoI Pooling中涉及的两次量化操作, 使用双线性插值的方法获得坐标为浮点数的像素点上的图像数值,其具体流程如下:

  • 遍历每一个候选区域, 保持浮点数边界不做量化;
  • 将候选区域分割成 k × k k\times k k×k个bins, 每个bins的边界也不做量化;
  • 在每个bins中sample四个point,使用双线性插值的方法计算出这四个位置的值, 然后取最大值;

(2) Mask 分支

由于mask分支需要对目标进行精细的mask预测,因此,mask分支采用比分类和回归分支更高的特征分辨率。具体来讲,将经过RPN阶段筛选出来的RoI经过RoI Align层将其尺寸统一为 14 × 14 14 \times 14 14×14,然后使用4层全卷积层和一层反卷积层以及最终的分类层为每个RoI预测一个 28 × 28 28 \times 28 28×28的mask。

(3) 总结

2.2 Cascade Mask R-CNN * * * *

Cascade Mask R-CNN 也是探讨如何在检测器Cascade R-CNN基础上设计mask分支。

(1) Motivation

具体来讲:

  • training阶段,RPN网络提出了2000左右的proposals,这些proposals在送入R-CNN结构前,需要首先计算每个Proposals和GT之间的IoU,并通过一个IoU阈值(如0.5)把这些Proposals分为正样本和负样本,并对这些正负样本按一定比例采样,进而送入R-CNN进行class分类和box回归。
  • inference阶段,RPN网络提出了300左右的proposals,这些proposals被送直接入到R-CNN结构中,因为没有GT用于采样。

因此,此处所描述的不匹配问题就在于:

  • training阶段的输入proposals质量更高(被采样过,IoU>threshold)
  • inference阶段的输入proposals质量相对较差(没有被采样过,可能包括很多IoU<threshold的)。

(2) Box级联

上述的实验表明,由于采用单一的IoU阈值会产生mismatch的问题,因此,无法通过一味提升IoU阈值来获取更精准的box预测。本文提出一种级联结构,并在不同层逐渐增大IoU阈值,来缓解mismatch问题并产生更精确的box预测。 Cascade R-CNN的结构如上图所示,

下图中,横轴 Input IoU 表示 RPN 输出的 proposal 与 gt bbox 的 IoU,纵轴 Output IoU 是经过 R-CNN 的 box 分支回归输出后与gt bbox 的 IoU,不同线条代表不同阈值训练出来的 detector。

下图显示逐stage增大IoU后,正样本不仅没有减少,而且稍稍有增加。这是因为经过前一个stage的refinement,后一个stage的输出box变得更精确了,即与GT的IoU提升了。

(3) Mask级联

为了将Cascade R-CNN目标检测器推广到实例分割,作者提出了(b)(c)(d)三种策略来新增mask分支。

  • (d)结构在文中的消融实验中也是性能最好的。

(4) 总结

  • Cascade R-CNN通过级联box head 来进行逐阶段的box refinement;
  • Cascade Mask R-CNN在其基础上添加级联mask head并在测试阶段对三个stage的mask预测概率进行均值集成。

2.3 HTC * * * *

下图中展示了在Cascade R-CNN的基础上添加mask分支的四种依次递进的设计:

  • (a)图是标准的Cascade Mask R-CNN,当前 stage 会接受 RPN 或者 上一个 stage 回归过的框作为输入,并行预测box和mask;
  • (b)图中在每个stage是将refine后的box输入到mask分支;
  • (c)图在(b)图的基础上添加了mask分支之间的信息流,每次将前一个stage的mask特征输入到当前stage进行sum融合;
  • (d)图进一步引入了语义分割监督,来增强mask分支的特征语义上下文信息;

(1) mask 信息流

为了在不同stage的mask分支之间添加信息流,作者将前一个stage的特征 M i − 1 M_{i-1} Mi−1​ ( 14 × 14 × 256 14\times14\times256 14×14×256)经过一个 1 × 1 1\times1 1×1卷积之后与当前stage RoI Align之后的特征 M i M_{i} Mi​进行sum融合并输入到当前mask分支。

(2) 语义监督

为更好的区分前背景,进一步将语义分割引入到实例分割框架中,以获得更好的 spatial context。具体来讲:

  • 将FPN输出的不同level的特征图分别经过 1 × 1 1\times1 1×1后插值到同一分辨率并sum融合;
  • 紧接着通过4层全卷积后,分别预测语义分割特征以及语义分割预测结果;
  • 语义分割特征通过RoIAlign及element-wise sum与box、mask特征进行融合;
  • 语义分割预测结果需要添加语义分割损失对该语义分支进行监督;

(3) 总结

  • HTC算是二阶段实例分割的终结了,一直在COCO霸榜直至22年6月上旬被Mask DINO以微弱的优势超越;
  • 二阶段实例分割采用RoI Align的通病就不再赘述;
  • 本文所提出采用mask信息流级联与语义监督虽然都不是特别新颖的创新点,但是都可以作为实例分割算法的稳定提点策略;

3. 一阶段实例分割

3.1 局部mask与全局mask之争

在介绍一阶段实例分割前,我们引入局部mask和全局mask的概念,这也是二阶段实例分割与一阶段实例分割的本质差别。如果这一块看的时候有点懵逼,就先跳过,等看完一阶段部分再回来看也行。

如上图所示,第二章介绍的二阶段实例分割采用的就是局部mask,将box内部的区域全部裁剪出来并通过RoI Align统一到相同的尺寸;

是:

  • :裁剪后的mask特征构成简单,只包含实例的前景和少量的背景,因此,mask分支设计简单,仅仅通过4层全卷积就可以得到mask;
  • :Mask R-CNN输出的mask分辨率为 28 × 28 28\times28 28×28,COCO的小目标定义是 s i z e < 32 × 32 size<32\times32 size<32×32,换算到1/4特征图就是 8 × 8 8\times8 8×8,所以小目标特征在经过RoI Align后会被放大,细节特征就可以较好的保留。此外,由于目标撑满整个mask,小目标的mask在监督时不会遇到正负样本严重不均衡的状况。

是:

  • :RoI Align后的尺寸较小,会导致大目标特别是轮廓复杂的大目标边缘分割较为粗糙;
  • :当box预测存在偏差时,仅仅对box内部进行实例mask预测无法预测box外的mask区域;

是:

  • :大目标的特征不会经过RoI Align操作导致细节特征严重丢失;而且大目标的损失函数优化时,正负样本还是相对均衡的。

是:

  • :为了减少计算量,全局mask通常在1/4或1/8特征图进行,小目标在此分辨率下边缘预测不佳;且交叉熵损失函数优化时会遇到背景负样本占据大多数的情况,优化效果不佳,需搭配Dice Loss这一类的损失函数进行优化;

3.2 YOLACT * * * * *

之所以这篇文章给了五星,是因为在我看来,YOLACT算是后来的BlendMask,EmbedMask,Condinst这一系列文章的雏形。

如果上面这句话理解有点困难的话,再拿Mask R-CNN举个例子:

接下来详细看一下YOLACT是怎么用共享的全局特征来进行实例分割的。YOLACT是在目标检测网络RetinaNet的基础上进行改造的。

(1) RetinaNet

RetinaNet本质上是由ResNet+FPN+两个FCN子网络(分类和回归)组成:

  • Backbone选择ResNet来作为特征提取网络;
  • FPN用来产生更强的包含多尺度目标区域信息的feature map,包含 P 3 到 P 7 P_3到P_7 P3​到P7​;
  • 最后在FPN的多个feature map上分别使用两个结构相同但是不共享参数的FCN子网络,从而完成目标框类别分类和bbox位置回归任务;

RetinaNet同时也是一个Anchor-based的模型:

  • 不同分辨率上anchor的尺寸anchor-size: [ 32 , 64 , 128 , 256 , 512 ] [32,64,128,256,512] [32,64,128,256,512];
  • 每个anchor-size对应着三种放缩系数scale: [ 2 0 , 2 1 / 3 , 2 2 / 3 ] [2^{0}, 2^{1/3}, 2^{2/3}] [20,21/3,22/3];
  • 每个anchor-size对应着三种长宽比ratio: [ 0.5 , 1 , 2 ] [0.5, 1, 2] [0.5,1,2];

也就是说,在 P 3 到 P 7 P_3到P_7 P3​到P7​的每个特征图的每个像素网格上都会预设9个anchor:

  • 每个anchor都会预测一个长度为c的类别向量(如下图分类分支预测的 W × H × c a W \times H \times ca W×H×ca, c 就 是 类 别 数 , a = 9 , 是 a n c h o r 数 c就是类别数,a=9,是anchor数 c就是类别数,a=9,是anchor数);
  • 和一个长度为4的bbox回归向量(如下图回归分支预测的 W × H × 4 a W \times H \times 4a W×H×4a, 4 就 是 b o x 四 个 回 归 量 , a = 9 , 是 a n c h o r 数 4 就是box四个回归量,a=9,是anchor数 4就是box四个回归量,a=9,是anchor数)。

训练时的anchor正负样本分配策略如下:

  • 当anchor与ground-truth的IoU大于等于0.5时,这一类anchor就是正样本;
  • 若IoU在[0,0.4)这个区间内,这一类anchor就是负样本,也就是背景。
  • IoU在[0.4,0.5)这个区间内的anchor在训练时是不计损失的。

(2) 实例Mask系数

实例mask系数就是在RetinaNet分类和回归分支的基础上,并行添加一个mask系数预测分支,也就是如上图所示,预测为 W × H × k a W \times H \times ka W×H×ka 的分支,即接下来的采用通道加权操作合成实例mask的通道加权的系数, k k k就是通道的数目。实际操作会对预测出来的系数采用 t a n h tanh tanh进行非线性变换。

(3) Mask特征

Mask特征直接在FPN P 3 P_3 P3​特征图上接一个全卷积网络,将分辨率上采样至1/4并将通道映射为 k k k,最终的shape为 H × W × k H \times W \times k H×W×k。

(4) 实例Mask预测

最终的实例mask的预测就采用下图所示的公式合成:

这个矩阵乘法背后的含义就是对预测的mask特征的每个通道采用对应的mask系数进行加权求和,其本质就是一个 1 × 1 × k × 1 1 \times 1 \times k \times 1 1×1×k×1 的卷积操作,卷积核为 1 1 1,输入通道为 k k k,输出通道也为 1 1 1。

(5) 总结

  • YOLACT通过预测一组实例特定的mask加权系数与共享的全局mask特征来生成实例mask,省去了RoI Align生成局部特征图的过程,网络简洁,速度实时;
  • 由于YOLACT采用的RetinaNet检测网络的性能本身较差,YOLACT的整体指标与二阶段Mask R-CNN相比还是差了许多的, 29.8 29.8 29.8 vs 35.7 35.7 35.7。

3.2 BlendMask * * *

BlendMask与YOLACT整体来讲是很像的,给检测head部分新增一个实例相关的参数()预测分支,在1/4特征图上生成mask特征()。接下来照旧挨个模块简介一下:

(1) BlendMask vs YOLACT

锐单商城 - 一站式电子元器件采购平台