CVPR21RefineMask: Towards High-Quality Instance Segmentation with Fine-Grained Features
目录
-
介绍部分
-
方法论
-
语义头部
- 包含两个子模块:
- Mask Head
- 多阶段细化过程
- 包含两个子模块:
-
基于自监督学习的语义融合模块
* Boundary-Aware Refinement(BAR module)- 实验
面向具有细粒度特征的高质量实例分割
Introduction
基于特征金字塔结构及池化层中的降采样操作
该方法在执行高质量实例分割任务时出现了不可忽视的图像细节缺失问题。其主要原因在于其高级别特征在空间分辨率上呈现较低精度,并且这种缺陷会通过后续的区域兴趣点池化(RoI Pooling)进一步放大至7×7或14×14的空间尺寸。相比之下,在保持高空间分辨率方面表现更为出色的传统的语义分割方法能够有效利用这些高分辨率特徵,并且如deeplab的效果图所示效果显著。显然无需采用任何级别的实例级池化操作即可实现较好的性能表现

本工作的核心理念是依托于现有两阶段方法所具有的强大能力,在实例分割过程中实现对实例的有效区分。同时,在这一过程中通过逐步整合更细粒度的特征并重点处理边界区域来完成对掩模的一致细化和提升质量。
Method

整体前面和maskrcnn一样,后面有两个分支,semantic head和mask head。
Semantic Head
在FPN架构中选择分辨率最高的分支输出P2,在生成图像表示时将其输出的空间分辨率得以维持与输入一致,并通过无需进行下采样处理来保证细节完整性。通过semantic head提取出高分辨率细节特征后,在mask head模块中被整合并用于实现对目标实例的精确分割任务。
组成为:四个卷积模块 由其组合提取图像语义特征信息,并采用一个用于预测每个像素前景概率的二进制分类器作为辅助工具。其中一个是用于预测每个像素前景概率的二进制分类器;同时选择性地对损失进行优化以实现更好的目标收敛性。采用二元交叉熵损失函数作为优化目标
Mask Head
随后将通过14×14 RoIAlign操作提取出的特征依次输入至两个3×3的卷积层中,并经过处理从而生成了各实例特征;接着利用一个H_w=H_h=7的空间尺寸设置下的一个或多个并行分支来预测实例mask;其中mask的空间尺寸限定为该区域尺寸(即均为H_w=H_h=7),其中mask的空间尺寸限定为该区域尺寸(即均为H_w=H_h=7)。此粗掩模则作为后续精细阶段的基础掩模使用
多阶段的细化过程
在各个阶段中,输入被划分为四个组成部分:实例特征向量及其自上一阶段而来获取的实例掩码信息,以及分别来自Semantic Head模块输出的语义特征向量以及对应的语义掩码信息。

通过结合Semantic Fusion Module (SFM)对输入进行整合,并将其延伸至更大空间维度后得到最终结果;随后通过反复应用这一精确定位机制完成目标定位任务;最终系统将输出一个分辨率高达112×112的高质量实例掩码
SFM中的融合特征被一个1×1的卷积层压缩,使其通道减半,减少计算成本。
SFM语义融合模块

为更有效地集成细粒度特征而设计了该模块。
随后将四个输入串联后经1×1卷积层进行降维处理。
接着采用三个不同膨胀率并行的3×3卷积层来整合每个神经元周边区域的信息。
最后将实例掩膜与语义掩膜重新连接至融合后的特征图中,并以此作为后续预测的基础。
经过上述步骤后,在融合特征时是否丢失了语义信息呢?
在卷积神经网络中,dilation参数代表了卷积核间距的变化程度。当dilation=0时等同于常规卷积核,而当dilation=1时则表示增加了两倍的间距,从而扩大了感受野范围。值得注意的是,这种间距的调整虽然并未增加计算开销但显著提升了图像细节捕捉能力,使得图像还原精度得到了明显提升。
class MultiBranchFusion(nn.Module):
def __init__(self, feat_dim, dilations=[1, 3, 5]):
super(MultiBranchFusion, self).__init__()
for idx, dilation in enumerate(dilations):
self.add_module(f'dilation_conv_{idx + 1}', ConvModule(
feat_dim, feat_dim, kernel_size=3, padding=dilation, dilation=dilation))
self.merge_conv = ConvModule(feat_dim, feat_dim, kernel_size=1, act_cfg=None)
def forward(self, x):
feat_1 = self.dilation_conv_1(x)
feat_2 = self.dilation_conv_2(x)
feat_3 = self.dilation_conv_3(x)
out_feat = self.merge_conv(feat_1 + feat_2 + feat_3)
return out_feat
Boundary-Aware Refinement(BAR module)
本节将介绍一种用于细化边界感知的方法。定义如下:在第k个阶段中使用二进制实例mask M^k进行表示,则该mask的尺寸为14 \times 2^k像素(其中k=1,2,3)。具体而言,在距离mask轮廓不超过dˆ像素的区域内所包含的所有像素即为所指的边界区域。我们将其定义为集合符号的形式:B^k = { (i,j) | 像素(i,j)位于mask M^k中 }。


开发了一种卷积核以近似估计边界区域,并通过以下步骤完成这一过程:首先将实例掩码的尺寸设定为固定值(如阶段1采用28×28、阶段2采用56×56),随后计算出相应的边界掩码参数。在具体实现中:
- 当边界宽度设定为1时,则采用3×3大小的矩阵与原图进行相乘运算。其中D作为输出结果,并与M保持相同维度,在完成相关运算后可获得D值。
- 当背景或前景完全占据整个图像时,则D值为零。
- 仅在计算边界区域时才出现D>0的情况。

训练过程的BAR:只有特定的边界区域被监督训练
第一阶段成功生成了一个大小为28×28的真实实例掩码。随后在输出尺寸分别为56×56和112×112的两个后续放大倍数下,在这两个更大的规模中仅对特定边界区域实施监督信号训练 。这些需要重点标注的位置由两部分共同决定:一是真实标签掩码(ground truth mask, gt mask),二是上一阶段模型预测的结果掩码。

BG是边界地区的gt,BP是边界地区的预测,fup是双线性上采样操作


RK被定义为上一阶段中ground truth mask边缘区域与预测mask边缘区域合并后的双线性插值放大。其中l代表第n个实例在指定位置处对应的二值交叉熵损失。N则表示实例的数量。
推理时的BAR:
在每一步骤中,在第一阶段生成一个尺寸为28×28的粗粒化完整掩码M_1的同时,并随之生成其边界遮罩B_1。

fup是双线性上采样操作,×是像素级乘法,+是像素级加法。
实验
将边界宽度d指定为2用于训练,并采用1用于推理。在semantic头、初始遮掩层以及mask头的第一个阶段,在 semantic 头和 initial mask 的第一个 stage 中, 使用 二值交叉熵损失函数;而在 mask 头 的后两个 stage 中, 则采用第 3.3 节中所定义的标准作为 损失度量标准。
mask head中的初始掩膜(initial mask)以及三个阶段(three stage)的具体实现中所使用的损失函数权重值分别为0.25、0.5、0.75和1;在检测头(detection head)中采用的损失权重设置为2。通过消融实验分析表明:引入语义头(Semantic head)带来了一定程度的提升,并且充分挖掘了细粒度特征的作用。

多阶段细化提升还行

BARmodule提升一般

