期刊:TPAMI
年份:2024
摘要
研究图像语义分割问题。目前的方法主要集中在通过专门设计的上下文聚合模块(如空洞卷积、神经注意力)或结构感知的优化目标(如iou样损失)挖掘"局部"上下文,即单个图像中像素之间的依赖关系。然而,它们忽略了训练数据的"全局"上下文,即不同图像之间像素之间的丰富语义关系。受最近无监督对比表示学习进展的启发,本文提出一种像素级对比算法PiCo,用于全监督学习环境下的语义分割。其核心思想是强制属于相同语义类的像素嵌入比来自不同语义类的嵌入更相似。通过明确探索以前很少研究的标记像素的结构,提出了一种用于语义分割的像素级度量学习范式。所提出的训练算法与现代分割解决方案兼容,在测试期间没有额外的开销。实验表明,通过著名的分割模型(即DeepLabV3、HRNet、crnet、SegFormer、Segmenter、MaskFormer)和骨干(即MobileNet、ResNet、HRNet、MiT、ViT),所提出算法在不同的数据集(即Cityscapes、ADE20 K、PASCAL-Context、COCO-Stuff、CamVid)上带来了一致的性能提升。期望这项工作将鼓励社区重新思考当前语义分割事实上的训练范式。
Introduction
动机:
- 利用全局上下文信息来改善语义分割的性能。
- 通过像素级的对比学习,促使同一类别的像素在嵌入空间中更紧凑,不同类别的像素更分散。
- 提出一种新的训练算法,与现代分割解决方案兼容,且在测试期间没有额外的开销。
主要贡献:
- 提出一种有监督的逐像素对比学习语义分割方法。它将当前的图像训练策略提升到图像间、像素到像素的范式。其本质是通过充分利用标记像素之间的全局语义相似性来学习像素语义嵌入空间。
- 开发了一种区域记忆,以更好地探索巨大的视觉数据空间,并支持进一步计算像素到区域的对比度。该方法结合像素到像素的对比度计算,利用像素之间以及像素与语义区域之间的语义相关性。
- 不是选择随机像素样本进行密集度量学习,而是可以通过更好的示例采样和合成策略提供更强大的分割模型。
Method
2.1 前置知识
无监督对比学习 :无监督对比学习是一种自监督学习方法,它通过学习数据的内在结构和模式来表示数据,而不需要依赖于外部的标签信息。这种方法的核心思想是通过对比正样本(相似的数据点)和负样本(不相似的数据点)来学习区分不同数据点的特征表示。损失函数设计用来拉近正样本对之间的距离,同时推远负样本对之间的距离。
其中 表示 I 的正样本的特征嵌入,包含所有负样本的嵌入,'·' 表示内部(点)乘积,𝜏 > 0 是缩放距离分布的温度超参数。
记忆库 :在无监督对比学习中,"记忆库"(Memory Bank)是一种关键机制,用于存储训练过程中遇到的样本的特征表示,以便在计算对比损失时使用。记忆库存储了大量样本的特征向量,这些特征向量通常由编码器网络生成,编码器网络负责将输入数据映射到特征空间。在每次迭代中,记忆库用于提供负样本,即与当前锚点(anchor)样本不同但同时参与损失函数计算。这有助于模型学习区分不同类别或不同实例的特征表示。
由于一次训练迭代中可用的负样本数量可能受到批处理大小的限制,记忆库允许模型在每次迭代中访问更多的负样本,从而提高学习效率。
2.2 监督对比分割
2.2.1 像素级交叉熵损失
一种常用的损失函数,用于训练卷积神经网络(CNN)或其它类型的神经网络,以预测图像中每个像素的类别标签。
以上损失函数公式存在两个问题:i)独立验证每个像素的分割预测,而忽略了像素之间的关系。因此,模型可能会遇到难以识别视觉证据较弱或属于小物体的像素。ii) 由于 softmax 的使用,损失仅取决于 logits 之间的相对关系,不能直接监督学习的表示 。
这两个问题很少被注意到;只有少数结构感知损失被设计用来解决:i),通过考虑相邻像素的成对亲和力,优化交叉过并测量,ii)最大化groundtruth和预测映射之间的区域互信息。
然而,这些替代损失只考虑图像中像素之间的依赖性(即局部上下文),而不考虑图像中像素之间的语义相关性(即全局结构)。
2.2.2 Pixel-to-Pixel对比
通过像素级的对比学习来探索训练数据中的全局语义结构,从而正则化分割嵌入空间的优化。这样,同一类别的像素嵌入会被拉近,而不同类别的像素嵌入则会被推远。
对于一个锚点像素 𝑖,其真实语义标签为 ,正样本是其他属于类别 的像素,负样本则是属于其他类别 的像素。
其中和分别表示正样本和负样本的像素嵌入集合,𝜏 是温度参数,用于控制分布的平滑程度。 正/负样本和锚点 i 不限于来自同一图像,这种基于像素到像素对比度的损失设计的目的是通过将同一类像素样本拉近并推开不同的类样本来学习嵌入空间。
与传统的像素级分类损失(如交叉熵损失)不同,像素到像素的对比损失不仅考虑了单个像素的分类准确性,还考虑了像素之间的全局语义关系。
像素级交叉熵损失和对比损失是互补的;前者让分割网络学习对分类有意义的判别像素特征,而后者有助于通过显式探索像素样本之间的全局语义关系来规范嵌入空间,从而提高类内紧凑性和类间可分离性。因此整体训练目标是:
如图所示,LSEG学习到的像素嵌入变得更紧凑,比仅使用LCE学习的像素嵌入更好。这表明,通过享受一元交叉熵损失和成对度量损失的优势,分割网络可以生成更多的判别特征,从而产生更有希望的结果。
(左)交叉熵损失;(右)Pixel-to-Pixel对比损失
2.2.3 Pixel-to-Region对比
"Pixel-to-Region Contrast"(像素到区域对比)是PiCo算法的一个重要组成部分,旨在通过利用图像中像素和区域(语义区域)之间的关系来提升语义分割的性能。
像素到区域对比是一种正则化技术,它不仅考虑像素级别的对比,还考虑像素与其所属语义区域之间的关系。
为了有效地进行像素到区域的对比,论文中提出了一种记忆库的设计,用于存储像素和区域的特征表示。记忆库包含两部分:像素队列和区域记忆库。
- 像素队列为每个类别维护了一个固定大小的像素特征集合,这些像素是从最新的小批量样本中随机选取的。
- 区域记忆库存储了每个图像中每个语义类别的区域特征,这些特征是通过平均池化同一图像中所有标记为该类别的像素嵌入得到的。
在计算像素到区域的对比损失时,属于同一类别的区域嵌入被视为正样本,而其他类别的区域嵌入被视为负样本。
动机:由于在密集预测设置中存在大量的像素样本,其中许多是冗余的(例如,从同一物体区域中采样的像素),直接存储所有训练像素样本会大大降低学习过程的速度。因此,通过维护像素队列和区域记忆库,可以更有效地利用数据。
2.2.4 Hard Example Sampling
硬样本采样的目的是在训练过程中专注于那些难以正确分类的样本,即"硬"样本,从而提高模型对困难案例的学习能力。
硬样本采样策略:
- Hardest Example Sampling(最硬样本采样):选择与锚点像素在特征空间中最相似的负样本和最不相似的正样本。
- Semi-Hard Example Sampling(半硬样本采样):选择与锚点像素相似度处于中间水平的样本,避免使用最容易和最困难的样本。
- Segmentation-Aware Hard Anchor Sampling(分割感知硬锚点采样):将分类错误的像素作为硬锚点,并在损失计算中给予更多关注。
通过专注于硬样本,模型可以学习到更加鲁棒的特征表示,从而在面对具有挑战性的场景时表现更好。
2.2.5 Hard Negative Example Synthesis
硬负样本合成的目的是在训练过程中增加模型学习的难度,通过引入难以区分的负样本来推动模型学习更鲁棒的特征表示。在对比学习中,负样本的选择对于模型学习至关重要。硬负样本是那些在特征空间中与锚点样本相似度较高的样本,这些样本对于模型的区分能力提出了更高的要求。
硬负样本的合成机制:
- 负负合成(Negative-Negative Synthesis):通过随机选择负样本对,进行凸线性组合来生成新的负样本。
- 负锚合成(Negative-Anchor Synthesis):将锚点样本与选定的负样本进行线性混合,生成更具挑战性的负样本。
合成的硬负样本在损失函数中作为负样本参与计算,增加了损失函数的复杂性,促使模型在优化过程中更加关注特征的区分度。
2.3 Detailed Network Architecture
对于小批量中的每个训练图像 I,利用特征提取器 将其投影到密集嵌入 I 中,然后将其输入分割头 进行掩码预测(即 Y),由交叉熵损失 () 监督,以及用于像素对比度的投影头 ()。此外,维护内存库M,设计硬示例采样和合成策略来寻找更多信息样本,以实现有效的对比学习。
Feature Extractor ( ) :特征提取器用于将输入图像 𝐼 映射到密集的特征表示 𝐼 ,其维度为 𝐻×𝑊×𝐷,其中 𝐻×𝑊 是特征图的空间尺寸,𝐷 是特征维度。常见的CNN或Transformer骨干网络可以用于实例化 。
segmentation Head ( ) :分割头 将特征表示 𝐼 映射到一个类别分数图 𝑌,其维度为 𝐻×𝑊×∣𝐶∣,其中 ∣𝐶∣ 是类别的数量。这个分数图表示了每个像素属于各个类别的置信度。
Projection Head ( ) :投影头 用于将每个高维像素嵌入 𝑖 映射到一个低维的 -归一化特征向量,用于计算对比损失 。 通常由几个1x1的卷积层、批量归一化(BN)和ReLU激活函数组成。在推理时, 被移除,不会引入任何额外的计算成本。
Memory Bank (M):记忆库 𝑀 由两部分组成,分别存储像素嵌入和区域嵌入。对于每个训练图像,我们为每个类采样 V = 10 像素。对于每个类,我们将像素队列的大小设置为 T = 10 N。对于大规模或词汇表的数据集,例如 COCO-Stuff 和 ADE20 K,我们将 T 设置为固定数量的(即 10,000),记忆库在训练后被丢弃,不参与推理过程。
Joint Loss ( ) :联合损失 结合了表示学习和度量学习的优势,用于更显著的分割特征学习。它结合了像素级交叉熵损失 和对比损失 ,通过一个可调节的系数 𝜆 来平衡两种损失。
总的来说:
- 通过特征提取器得到特征,并通过分割头得到像素级别的预测,将其预测与Grounding Truth比较计算交叉熵损失。
- 通过特征提取器得到特征,并通过投影得到低维特征向量,将分类错误的像素作为硬锚点,从记忆库中选择与当前锚点像素相似的负样本,以及不相似的正样本,使用采样得到的锚点、正样本和负样本,计算像素级的对比损失。
- 使用联合损失反向传递更新网络,并合成新的负样本。
- 在每次训练迭代中重复上述损失计算和参数更新步骤,直到模型在验证集上的性能不再提升或达到预定的迭代次数。
Conclusion
在本文中,我们提出了一种新的监督学习范式用于语义分割,它享受一元分类和结构化度量学习的互补优势。通过逐像素的对比学习,它研究了训练像素之间的全局语义关系,引导像素嵌入到跨图像的类别判别表示,最终提高分割性能。实验表明,在不同的语义分割基准上,该算法比基于fcn或基于transformer的分割器实现了一致的性能改进。我们的算法在各种密集预测任务中显示出巨大的潜力,例如姿态估计和身体解析。它也带来了新的挑战,特别是在智能数据采样和生成、度量学习损失设计、训练期间的类再平衡和多层特征对比方面。考虑到过去几年里大量的技术突破,我们期待在这些方向上出现一阵创新的热潮。