MaskFormer:逐像素分类并非语义分割所需的一切

发布于:2025-07-01 ⋅ 阅读:(27) ⋅ 点赞:(0)

摘要

现代方法通常将语义分割表述为逐像素分类任务,而实例级分割则采用另一种 mask 分类方式进行处理。我们的核心观点是:mask 分类具有足够的通用性,能够以完全相同的模型、损失函数和训练流程统一地解决语义分割与实例分割任务。基于这一观察,我们提出 MaskFormer,一种简单的 mask 分类模型,它预测一组二值 masks,每个 mask 与一个全局的类别标签预测相关联。总体而言,该基于 mask 分类的方法简化了语义分割与全景分割任务中已有有效方法的设计,并在实验中展现出优异表现。特别是,当类别数量较大时,我们观察到 MaskFormer 的表现优于逐像素分类的基线方法。我们的 mask 分类方法在语义分割任务(ADE20K 上 55.6 mIoU)和全景分割任务(COCO 上 52.7 PQ)中均优于当前的最新方法。

1 引言

语义分割的目标是将图像划分为具有不同语义类别的区域。自 Long 等人提出的 Fully Convolutional Networks (FCNs) [30] 工作以来,大多数基于深度学习的语义分割方法都将语义分割表述为逐像素分类问题(见图1左),即对每个输出像素应用分类损失 [9, 52]。在该表述下,逐像素的预测自然地将图像划分为不同类别的区域。

mask 分类是一种替代范式,它将图像划分与分类这两个方面解耦。与对每个像素进行分类不同,基于 mask 分类的方法预测一组二值 masks,每个 mask 对应一个类别预测(见图1右)。这种更具灵活性的 mask 分类在实例级分割领域中占据主导地位。例如 Mask R-CNN [21] 和 DETR [4] 都为每个 segment(区域)产生一个类别预测,广泛用于实例分割和全景分割任务。相反,逐像素分类假设输出数量固定,无法预测可变数量的区域或 segment,而这是实例级任务所必需的。

我们的关键观察是:mask 分类具有足够的通用性,能够解决语义分割与实例级分割这两个任务。实际上,在 FCN [30] 出现之前,表现最好的语义分割方法如 O2P [5] 和 SDS [20] 就采用了 mask 分类的形式。由此可得出一个自然的问题:是否可以用一个单一的 mask 分类模型简化语义分割与实例分割的有效方法体系?并且,这样的模型是否可以在语义分割中超过已有的逐像素分类方法?

为了解决这两个问题,我们提出了一个简单的 MaskFormer 方法,它可以无缝地将任意现有逐像素分类模型转化为 mask 分类模型。借助 DETR [4] 中提出的集合预测机制,MaskFormer 使用 Transformer 解码器 [41] 来生成一组 (类别预测, mask 表征向量) 对。mask 表征向量通过与底层全卷积网络输出的逐像素 embedding 进行点积,从而得到二值 mask 预测。该新模型可以统一地解决语义分割与实例分割任务:无需更改模型结构、损失函数和训练流程。具体地,对于语义分割和全景分割任务,MaskFormer 均采用相同的逐像素二值 mask 损失和每个 mask 一个类别预测损失进行训练。最后,我们设计了一种简单的推理策略,将 MaskFormer 的输出转化为具体任务所需的预测格式。
在这里插入图片描述

我们在五个具有不同类别数量的语义分割数据集上对 MaskFormer 进行了评估:Cityscapes [15](19 类)、Mapillary Vistas [34](65 类)、ADE20K [55](150 类)、COCOStuff-10K [3](171 类)以及 ADE20K-Full [55](847 类)。虽然在类别较少且分布较为多样的 Cityscapes 数据集上,MaskFormer 与逐像素分类模型表现相当,但在类别数量更大的数据集上,该新模型展现出更优越的性能。我们推测,对于精细的识别任务,每个 mask 只预测一个类别的方式,比逐像素的类别预测更具优势。MaskFormer 搭配 Swin-Transformer [29] backbone,在 ADE20K 上达到了新的 state-of-the-art(55.6 mIoU),相比使用相同 backbone 的逐像素分类模型 [29] 提高了 2.1 mIoU,同时更加高效(参数减少 10%,FLOPs 减少 40%)。

最后,我们使用两个全景分割数据集 COCO [28, 24] 和 ADE20K [55] 来研究 MaskFormer 处理实例级任务的能力。MaskFormer 超越了结构更复杂、使用相同 backbone 和后处理流程的 DETR 模型 [4]。此外,MaskFormer 在 COCO 上实现了新的 state-of-the-art(52.7 PQ),比此前的最优方法 [42] 提高了 1.6 PQ。我们的实验结果表明,MaskFormer 具有统一处理实例级与语义级分割任务的能力。

2 相关工作

逐像素分类和 mask 分类在语义分割中都被广泛研究。早期的工作中,Konishi 和 Yuille [25] 基于图像的局部统计信息应用了逐像素的贝叶斯分类器。随后,受到非语义分组早期工作的启发 [13, 36],mask 分类方法开始流行,并在 PASCAL VOC 挑战赛 [18] 中展示出最好的性能。诸如 O2P [5] 和 CFM [16] 等方法通过对 mask proposals 进行分类 [6, 40, 2] 获得了 state-of-the-art 的结果。2015 年,FCN [30] 将逐像素分类的思想扩展到了深度网络,大幅度提升了 mIoU(一个特别适用于逐像素分类语义分割的评估指标)性能,超越了此前的所有方法。自 Fully Convolutional Networks (FCNs) [30] 的开创性工作以来,逐像素分类成为基于深度网络的语义分割的主流方法。

现代语义分割模型主要集中于在最终特征图中聚合远程上下文信息:ASPP [7, 8] 使用不同扩张率的空洞卷积;PPM [52] 使用不同核大小的池化算子;DANet [19]、OCNet [51] 和 CCNet [23] 则使用不同变体的 non-local block [43]。最近,SETR [53] 和 Segmenter [37] 用 Vision Transformer (ViT) [17] 替代传统卷积 backbone,从第一层起就捕捉远程上下文。然而,这些 Transformer-based [41] 的语义分割方法仍然采用的是逐像素分类的形式。值得注意的是,我们的 MaskFormer 模块可以将任何逐像素分类模型转换为 mask 分类形式,从而可以无缝地利用逐像素分类领域中的各类最新进展。

在实例级分割任务中,mask 分类方法被广泛使用 [20, 24]。这些任务需要可变数量的预测,而逐像素分类方法假设输出数量是静态的,因此难以适配。广泛应用的 Mask R-CNN [21] 使用全局分类器对 mask proposals 进行分类以实现实例分割。DETR [4] 进一步引入了 Transformer [41] 架构,以同时处理 thing 和 stuff 类别的分割,实现全景分割 [24]。然而,这些 mask 分类方法需要预测边界框,这在语义分割任务中可能成为限制因素。最近提出的 Max-DeepLab [42] 通过条件卷积 [39, 44] 去除了对边界框预测的依赖,从而在全景分割任务中实现了 mask 分类。但除了主要的 mask 分类损失外,该方法还依赖多个辅助损失(如 instance discrimination loss、mask-ID cross entropy loss 和标准的逐像素分类损失)。

3 从逐像素分类到 mask 分类

在本节中,我们首先描述如何将语义分割表述为逐像素分类或 mask 分类问题。然后,我们借助 Transformer decoder [41] 介绍我们具体实现的 mask 分类模型。最后,我们描述将 mask 分类输出转换为任务相关预测格式的简单推理策略。

3.1 逐像素分类表述

对于逐像素分类,一个分割模型的目标是在大小为 H×W 的图像中,对每一个像素预测其属于所有 K 个类别的概率分布: y = { p i ∣ p i ∈ Δ K } i = 1 H ⋅ W y = \{p_i \mid p_i \in \Delta^K\}_{i=1}^{H \cdot W} y={pipiΔK}i=1HW ,其中, Δ K \Delta^K ΔK 表示 K 维概率单纯形(即所有元素非负且总和为 1 的向量空间)。训练逐像素分类模型是直接的:对于每个像素,给定其真实的类别标签 y g t = { y i g t ∣ y i g t ∈ { 1 , … , K } } i = 1 H ⋅ W y^{gt} = \{y^{gt}_i \mid y^{gt}_i \in \{1, \dots, K\}\}_{i=1}^{H \cdot W} ygt={yigtyigt{1,,K}}i=1HW ,通常使用逐像素交叉熵(即负对数似然)损失函数进行训练,即 L pixel-cls ( y , y g t ) = ∑ i = 1 H ⋅ W − log ⁡ p i ( y i g t ) \mathcal{L}_{\text{pixel-cls}}(y, y^{gt}) = \sum_{i=1}^{H \cdot W} -\log p_i(y^{gt}_i) Lpixel-cls(y,ygt)=i=1HWlogpi(yigt)

3.2 Mask 分类表述

Mask 分类将分割任务分为两个步骤:
1)将图像划分/分组为 N N N 个区域( N N N 不需要等于类别数 K K K),这些区域由二值 mask 表示:

{ m i ∣ m ˉ i ∈ [ 0 , 1 ] H × W } i = 1 N ; \{ m_i \mid \bar{m}_i \in [0, 1]^{H \times W} \}_{i=1}^N; {mimˉi[0,1]H×W}i=1N

2)为每个区域整体分配一个在 K K K 个类别上的分布。

为了联合地对区域进行分组和分类(即执行 mask 分类),我们将期望的输出 z z z 定义为一组 N N N 个 “概率-掩码(mask)” 对:

z = { ( p i , m i ) } i = 1 N 。 z = \{ (p_i, m_i) \}_{i=1}^N。 z={(pi,mi)}i=1N

与逐像素类别概率预测不同,在 mask 分类中,概率分布 p i ∈ Δ K + 1 p_i \in \Delta^{K+1} piΔK+1,其中包含一个额外的辅助“无目标(no object)”标签(类别 0),用于那些不对应于 K K K 个类别中任何一个的 mask。需要注意的是,mask 分类允许多个 mask 具有相同的类别,因此适用于语义级和实例级分割任务。

为了训练一个 mask 分类模型,我们需要将预测集 z z z N g t N^{gt} Ngt 个 ground truth 分割区域

z g t = { ( c i g t , m i g t ) ∣ c i g t ∈ { 1 , … , K } , m i g t ∈ { 0 , 1 } H × W } i = 1 N g t z^{\mathrm{gt}} = \{ (c_i^{\mathrm{gt}}, m_i^{\mathrm{gt}}) \mid c_i^{\mathrm{gt}} \in \{1, \dots, K\}, m_i^{\mathrm{gt}} \in \{0,1\}^{H \times W} \}_{i=1}^{N^{\mathrm{gt}}} zgt={(cigt,migt)cigt{1,,K},migt{0,1}H×W}i=1Ngt

进行匹配。

温馨提示:
阅读全文请访问AI深语解构,链接如下 MaskFormer:逐像素分类并非语义分割所需的一切


网站公告

今日签到

点亮在社区的每一天
去签到