MaskFormer-Mask2Former-MpFormer详解

MaskFormer

论文地址:https://arxiv.org/pdf/2107.06278.pdf

开源代码地址:https://github.com/facebookresearch/MaskFormer

总的来说,原来实例语义分割一般来说使用在per-pixel分类.然而实例分割一般使用mask classification.但是在本文中本文作者的观点是:mask classification完全可以通用,即可以使用完全相同的模型、损失和训练程序以统一的方式解决语义和实例级别的分割任务。maskformer将语义分割看出是类别预测与mask预测两个子任务,类别预测和mask预测只要一一对应起来就可以解决语义分割任务.因此该任务的损失函数由两个组成,一个是预测分类图与真值图的损失,另一个是预测类别的交叉熵损失

左边的图中表示了 基于每个位置用相同的分类损失的像素分类的语义分割

右边的图中表示基于掩码分类预测一组二值掩码,并为每个掩码分配一个类

模型结构

过程: MaskFormer提出将全景分割看成是mask分类任务。通过transformer decoder和MLP得到N个mask embedding和N个cls pred。另一个分支通过pixel decoder得到per-pixel embedding,然后将mask embedding和per-pixel embedding相乘得到N个mask prediction,最后cls pred和mask pred相乘,丢弃没有目标的mask,得到最终预测结果。

C 为通道数,下面绿色的像素解码器针对的是 H*W,而上面 Transformer 解码器针对的是 N 个分割图。

Transformer 输出后通过一个 MLP 使两者通道数保持一致,然后通过点积来预测每张分割图

分类端则通过另一个 MLP 将 Transformer 解码器的输出映射成 K + 1 个类别,其中包含一个空类别。

最后整合部分则先去掉这些空类别,然后每个像素点会根据最高的类别置信度和分割图置信度来进行分类

我们主要可以分为三个部分

1. Pixel-level Module(像素级模块):

Backbone:这部分通常包含一个用于图像特征提取的backbone,例如卷积神经网络(CNN)。Backbone负责从输入图像中提取高级特征,用于后续的任务。本文中使用的backbone为ResNet backbones和和Swin-Transformer backbones

Pixel Decoder(像素解码器):Pixel Decoder负责从backbone提取的特征中生成每个像素的per-pixel embedding。这个embedding捕捉了每个像素的语义信息,使得模型能够更好地理解图像的局部结构。像素解码器基于流行的 FPN 架构的轻量级像素解码器。在 FPN 之后,对解码器中的低分辨率特征图进行 2× 上采样,并将其与来自主干的相应分辨率的投影特征图(投影是为了与特征图维度匹配,通过1×1 卷积层+GroupNorm实现)相加。接下来,通过一个额外的 3×3 卷积层+GN+ReLU将串联特征融合。重复这个过程,直到获得最终特征图。最后,应用单个 1×1 卷积层来获得peri-pixel嵌入。

2. Transformer Module(Transformer模块):

堆叠的Transformer解码器层:在这一部分,采用了堆叠的Transformer解码器层,用于计算N个segment的embedding。Transformer模块负责对全局信息进行建模,其中每个segment表示一个类别或一个目标。使用标准的Transformer解码器来计算图像特征F和N个可学习的位置embedding(即query)。这些位置embedding代表了不同的分割,每个分割的全局信息被编码为一个embedding。作采用了6个Transformer解码器层和100个查询,并在每个解码器之后应用了DETR相同的损失。在实验中,观察到MaskFormer在使用单个解码器层进行语义分割时也相当有竞争力,但在实例分割中,多个层对于从最终预测中删除重复项是必要的。这意味着模型可以通过多层的Transformer解码器更好地处理实例分割任务,提高对图像中多个目标的理解和准确性。

3. Segmentation Module(分割模块):

生成预测结果:Segmentation Module利用上面的per-pixel embedding(来自Pixel-level Module)和per-segment embedding(来自Transformer Module)生成最终的预测结果。这个阶段可能包括将两者进行融合、相乘等操作,以生成每个像素属于不同类别的概率。对于每个分割embedding,模型首先通过一个线性分类器在softmax激活函数之后生成该分割的类别概率预测。这一步鉴别了每个分割属于哪个类别的可能性。对于mask的预测,首先将每个分割的per-segment embedding通过一个两层的MLP(多层感知机)进行转换,生成N个mask embedding,其中N是类别的数量。这一步将分割的全局信息映射到一个更适合mask生成的表示空间。接着,将得到的mask embedding与之前提到的per-pixel embedding进行点乘操作。这是为了结合全局(分割级别)和局部(像素级别)的信息,以更好地生成每个像素的mask。最后,通过应用sigmoid激活函数,将点乘后的结果映射到0到1的范围,获得最终的mask预测结果。这个操作使得每个像素的mask预测值表示该像素属于目标的概率,形成了分割的细节信息。

总体而言,MaskFormer模型通过这三个主要部分实现了从像素级别到全局级别的信息融合。Pixel-level Module关注局部像素级别的特征提取和embedding生成,Transformer Module关注全局信息的建模,而Segmentation Module则将这两者结合起来生成最终的分割预测结果。通过这种设计,模型可以同时捕捉图像的局部和全局上下文,提高了对复杂场景的理解和分割性能。

语义推理

pi(ci) ·argmax操作用于从每个像素的类别概率中选择最大值,以确定该像素所属的类别。然而,需要注意的是,argmax操作不包括“无对象”类别(∅)。这是因为标准的语义分割任务要求每个输出像素都要被赋予一个标签,而“无对象”类别表示没有目标的像素。虽然这个策略返回了每个像素的per-pixel类别概率,但作者观察到直接最大化每个像素的类别可能性(likelihood)可能导致性能不佳。这表明,在全景分割任务中,简单地选择每个像素的最大概率类别并不总是能够产生最佳结果,因此需要更复杂的策略来处理这个问题。可能的原因包括像素级别的不确定性以及类别之间的相互关系,需要更细致的处理方法来提高性能。

Mask2Former

论文地址: https://arxiv.org/pdf/2112.01527.pdf

开源代码: https://github.com/facebookresearch/Mask2Former

Mask2Former在MaskFormer的基础上:

1. 增加了masked attention机制,通过将交叉注意力限制在预测的掩码区域内来提取局部特征。

2. 另外还调整了decoder部分的self-attention和cross-attention的顺序,

3. 还提出了使用importance sampling来加快训练速度。

这个版本的改进主要是mask attention还有high-resolution features(本质上是一个金字塔),剩下的一些关于训练上的还有optimization上改进呢,能够提高训练速度

模型解码结构

Mask2Former模型整体架构来自于MaskFormer的简单的元架构,主要改进在Transformer 解码器中,由于前面详细介绍了MaskFormer,所以主要说明改进的内容

屏蔽注意力(Masked Attention)

Masked Attention 操作符,通过将交叉注意力限制在每个查询的预测掩码的前景区域内来提取局部特征,而不是关注完整的特征图。

标准交叉注意(带有残差路径)计算公式如下

掩码注意力通过添加掩码值调节注意力矩阵

高分别率率特征

高分辨率特征可以提高模型性能,特别是对于小目标。但增加了对计算的要求。

本文提出了一种有效的多尺度策略来引入高分辨率特征,同时控制计算量的增加。

利用一个由低分辨率和高分辨率特征组成的特征金字塔,并将多尺度特征的不同尺度特征分别馈送到不同的Transformer解码器层。

对于每个分辨率,添加了一个正弦位置嵌入以及一个可学习的尺度级嵌入。

重复3层Transformer 解码器L次,最终的 Transformer 解码器因此具有 3L层。

提高训练效率

由于高分辨率掩码预测导致大量内存消耗的问题,特别是对于像MaskFormer这样的模型,其内存需求较高,使得在具有较小内存(32G)的GPU中只能容纳单个图像。为了解决这个问题,文中借鉴了PointRend和Implicit PointRend的思想,通过在K个随机采样点而不是整个掩码上计算掩码损失来训练分割模型,其中K设置为12544,即112×112点。

在具体的训练过程中,使用了采样点计算掩码损失,这包括在构建二分匹配成本矩阵的匹配损失中,对所有预测和真实掩码的相同的K点集进行均匀采样。同时,在预测之间的最终损失及其匹配的ground truth中,采用了重要性采样的方法,为不同的预测和ground truth对不同的K点集进行采样。这个训练策略有效地减少了训练内存,将每张图像的内存需求从18GB降低到6GB,实现了更加内存友好的训练过程。这种策略在降低内存消耗的同时,保持了对模型性能的有效训练。

MP-Former

论文地址: https://arxiv.org/pdf/2303.07336v2.pdf

开源代码: https://github.com/IDEA-Research/MP-Former

Mask2Former通过使用Transformer解码层对mask进行细化和优化。在这个过程中,上一层的预测结果被用作下一层的注意力掩码,以产生更加精细的预测结果。通常情况下,通过二分图匹配将预测的mask分配给GT(Ground Truth) masks,然后在一个由粗到细的过程中进行进一步的优化。在这个过程中,保持不同层之间的一致性是提高预测结果一致性的关键。

然而,当逐层可视化Mask2Former的预测结果时发现,同一查询(query)之间的预测结果在相邻的解码器层之间存在严重的不一致性问题。解码器层之间的不一致性可能导致模型在不同层次上对相同目标的理解存在差异,这可能影响最终的分割效果。MP-Former改进了Mask2Former模型中的masked attention,提出了一种掩码驱动的训练方法,有效缓解了Mask2Former中不准确掩码预测产生的负面影响。

模型解码结构

这篇论文只要在Transformer解码器中额外提供了查询和注意力掩码,即所谓的MP部分(红色线条部分)。MP部分包含真实标注掩码(GT masks)作为注意力掩码,以及真实标注类别嵌入(GT class embeddings)作为查询。在所有解码器层中,将GT掩码馈入MP部分。此外,作者还GT掩码中添加了点噪声(point noises),并在类别嵌入中添加了翻转噪声(flipping noises),以进一步提高性能。需要注意的是:这种网络结构仅用于训练,在推理时,红线部分是不存在的,因此其模型推理的pipeline与Mask2Former完全相同。

其中(a)中红色区域部分表示第一个解码层中给定的GT mask,(b)展示了第一个解码层预测出来的mask(仅仅只覆盖了头部),这个预测出来的mask会直接作用于第二层的解码器层,而第二层的解码器层预测出来的mask会作用于第三层的解码器层(由粗到细的过程)。(c)(d)(e)展示了基于GT mask的点噪声,平移噪声和缩放噪声(实验表明点噪声是有效的,而平移和缩放噪声是无效的trick),蓝色区域是带噪声的mask,而红色区域表示真实标注的mask。

  • 38
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值