《Cross-Image Pixel Contrasting for Semantic Segmentation》论文解读

期刊:TPAMI

年份:2024

摘要

研究图像语义分割问题。目前的方法主要集中在通过专门设计的上下文聚合模块(如空洞卷积、神经注意力)或结构感知的优化目标(如iou样损失)挖掘"局部"上下文,即单个图像中像素之间的依赖关系。然而,它们忽略了训练数据的“全局”上下文,即不同图像之间像素之间的丰富语义关系。受最近无监督对比表示学习进展的启发,本文提出一种像素级对比算法PiCo,用于全监督学习环境下的语义分割。其核心思想是强制属于相同语义类的像素嵌入比来自不同语义类的嵌入更相似。通过明确探索以前很少研究的标记像素的结构,提出了一种用于语义分割的像素级度量学习范式。所提出的训练算法与现代分割解决方案兼容,在测试期间没有额外的开销。实验表明,通过著名的分割模型(即DeepLabV3、HRNet、crnet、SegFormer、Segmenter、MaskFormer)和骨干(即MobileNet、ResNet、HRNet、MiT、ViT),所提出算法在不同的数据集(即Cityscapes、ADE20 K、PASCAL-Context、COCO-Stuff、CamVid)上带来了一致的性能提升。期望这项工作将鼓励社区重新思考当前语义分割事实上的训练范式。

Introduction

动机

  1. 利用全局上下文信息来改善语义分割的性能。
  2. 通过像素级的对比学习,促使同一类别的像素在嵌入空间中更紧凑,不同类别的像素更分散。
  3. 提出一种新的训练算法,与现代分割解决方案兼容,且在测试期间没有额外的开销。

主要贡献

  1. 提出一种有监督的逐像素对比学习语义分割方法。它将当前的图像训练策略提升到图像间、像素到像素的范式。其本质是通过充分利用标记像素之间的全局语义相似性来学习像素语义嵌入空间。
  2. 开发了一种区域记忆,以更好地探索巨大的视觉数据空间,并支持进一步计算像素到区域的对比度。该方法结合像素到像素的对比度计算,利用像素之间以及像素与语义区域之间的语义相关性。
  3. 不是选择随机像素样本进行密集度量学习,而是可以通过更好的示例采样和合成策略提供更强大的分割模型。

Method

2.1 前置知识

无监督对比学习:无监督对比学习是一种自监督学习方法,它通过学习数据的内在结构和模式来表示数据,而不需要依赖于外部的标签信息。这种方法的核心思想是通过对比正样本(相似的数据点)和负样本(不相似的数据点)来学习区分不同数据点的特征表示。损失函数设计用来拉近正样本对之间的距离,同时推远负样本对之间的距离。

其中 v^{+} 表示 I 的正样本的特征嵌入,N_{I}包含所有负样本的嵌入,'·' 表示内部(点)乘积,𝜏 > 0 是缩放距离分布的温度超参数。 

记忆库:在无监督对比学习中,"记忆库"(Memory Bank)是一种关键机制,用于存储训练过程中遇到的样本的特征表示,以便在计算对比损失时使用。记忆库存储了大量样本的特征向量,这些特征向量通常由编码器网络生成,编码器网络负责将输入数据映射到特征空间。在每次迭代中,记忆库用于提供负样本,即与当前锚点(anchor)样本不同但同时参与损失函数计算。这有助于模型学习区分不同类别或不同实例的特征表示。

由于一次训练迭代中可用的负样本数量可能受到批处理大小的限制,记忆库允许模型在每次迭代中访问更多的负样本,从而提高学习效率。

2.2 监督对比分割

2.2.1 像素级交叉熵损失

一种常用的损失函数,用于训练卷积神经网络(CNN)或其它类型的神经网络,以预测图像中每个像素的类别标签。

以上损失函数公式存在两个问题:i)独立验证每个像素的分割预测,而忽略了像素之间的关系。因此,模型可能会遇到难以识别视觉证据较弱或属于小物体的像素。ii) 由于 softmax 的使用,损失仅取决于 logits 之间的相对关系,不能直接监督学习的表示 。

这两个问题很少被注意到;只有少数结构感知损失被设计用来解决:i),通过考虑相邻像素的成对亲和力,优化交叉过并测量,ii)最大化groundtruth和预测映射之间的区域互信息。

然而,这些替代损失只考虑图像中像素之间的依赖性(即局部上下文),而不考虑图像中像素之间的语义相关性(即全局结构)。 

2.2.2 Pixel-to-Pixel对比

通过像素级的对比学习来探索训练数据中的全局语义结构,从而正则化分割嵌入空间的优化。这样,同一类别的像素嵌入会被拉近,而不同类别的像素嵌入则会被推远。

对于一个锚点像素 𝑖,其真实语义标签为 \overline{c} ,正样本是其他属于类别\overline{c} 的像素,负样本则是属于其他类别 C\setminus \overline{c}的像素。

其中P_{i}N_{i}分别表示正样本和负样本的像素嵌入集合,𝜏 是温度参数,用于控制分布的平滑程度。 正/负样本和锚点 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,利用特征提取器 f_{EXT} 将其投影到密集嵌入 I 中,然后将其输入分割头 f_{SEG} 进行掩码预测(即 Y),由交叉熵损失 (L^{CE}) 监督,以及用于像素对比度的投影头 f_{PROJ} (L^{NCE})。此外,维护内存库M,设计硬示例采样和合成策略来寻找更多信息样本,以实现有效的对比学习。

Feature Extractor (f_{EXT}):特征提取器用于将输入图像 𝐼 映射到密集的特征表示 𝐼,其维度为 𝐻×𝑊×𝐷,其中 𝐻×𝑊 是特征图的空间尺寸,𝐷 是特征维度。常见的CNN或Transformer骨干网络可以用于实例化 f_{EXT}

segmentation Head (f_{SEG}):分割头f_{SEG} 将特征表示 𝐼 映射到一个类别分数图 𝑌,其维度为 𝐻×𝑊×∣𝐶∣,其中 ∣𝐶∣ 是类别的数量。这个分数图表示了每个像素属于各个类别的置信度。

Projection Head (f_{PROJ}):投影头 f_{PROJ} 用于将每个高维像素嵌入 𝑖 映射到一个低维的 l_{2}-​归一化特征向量,用于计算对比损失 L^{NCE}f_{PROJ} 通常由几个1x1的卷积层、批量归一化(BN)和ReLU激活函数组成。在推理时,f_{PROJ} 被移除,不会引入任何额外的计算成本。

Memory Bank (M):记忆库 𝑀 由两部分组成,分别存储像素嵌入和区域嵌入。对于每个训练图像,我们为每个类采样 V = 10 像素。对于每个类,我们将像素队列的大小设置为 T = 10 N。对于大规模或词汇表的数据集,例如 COCO-Stuff 和 ADE20 K,我们将 T 设置为固定数量的(即 10,000),记忆库在训练后被丢弃,不参与推理过程。

Joint Loss (L^{SEG}):联合损失 L^{SEG} 结合了表示学习和度量学习的优势,用于更显著的分割特征学习。它结合了像素级交叉熵损失 L^{CE} 和对比损失 L^{SEG},通过一个可调节的系数 𝜆 来平衡两种损失。

总的来说

  • 通过特征提取器得到特征,并通过分割头得到像素级别的预测,将其预测与Grounding Truth比较计算交叉熵损失。
  • 通过特征提取器得到特征,并通过投影得到低维特征向量,将分类错误的像素作为硬锚点,从记忆库中选择与当前锚点像素相似的负样本,以及不相似的正样本,使用采样得到的锚点、正样本和负样本,计算像素级的对比损失。
  • 使用联合损失反向传递更新网络,并合成新的负样本。
  • 在每次训练迭代中重复上述损失计算和参数更新步骤,直到模型在验证集上的性能不再提升或达到预定的迭代次数。

Conclusion

在本文中,我们提出了一种新的监督学习范式用于语义分割,它享受一元分类和结构化度量学习的互补优势。通过逐像素的对比学习,它研究了训练像素之间的全局语义关系,引导像素嵌入到跨图像的类别判别表示,最终提高分割性能。实验表明,在不同的语义分割基准上,该算法比基于fcn或基于transformer的分割器实现了一致的性能改进。我们的算法在各种密集预测任务中显示出巨大的潜力,例如姿态估计和身体解析。它也带来了新的挑战,特别是在智能数据采样和生成、度量学习损失设计、训练期间的类再平衡和多层特征对比方面。考虑到过去几年里大量的技术突破,我们期待在这些方向上出现一阵创新的热潮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dify中高质量索引模式时,通过线程池处理chunk过程

本文主要介绍了Dify中高质量索引模式时,如何通过线程池执行器来处理chunk的过程。源码位置:dify\api\core\indexing_runner.py\IndexingRunner._load。核心思想:假设一个数据集中有一个文档,该文档可以拆分为12个段(segment)。如果chunk_size=10,那么分为2批提交给线程池…

Mojo语言的运用

1.Mojo语言概述 1.1什么是Mojo语言? Mojo语言是一种现代的动态编程语言,主要用于Web开发。它结合了多种语言的优点,如JavaScript、Perl和Lua,旨在为开发者提供: 简洁的语法:易于学习和使用,适…

Azcopy Sync同步Azure文件共享

Azcopy Sync同步Azure文件共享 一、工作原理二、安装 AzCopy在 Windows 上在 Linux 上 三、资源准备1. 创建源和目标 Azure 存储账户2. 创建源和目标文件共享3. 确定路径4. 生成源和目的存储账户的共享访问签名(SAS)令牌配置权限示例生成的 URL 四、Azco…

【鸿蒙学习笔记】尺寸设置・width・height・size・margin・padding・

官方文档:尺寸设置 目录标题 width:设置组件自身的宽度height:设置组件自身的高度size:设置高宽尺寸margin:设置组件的外边距padding:设置组件的内边距 width:设置组件自身的宽度 参数为Length…

【Linux杂货铺】3.程序地址空间

1.程序地址空间的引入 fork(&#xff09;函数在调用的时候子如果是子进程则返回0&#xff0c;如果是父进程则返回子进程的pid&#xff0c;在代码中我们分别在子进程和父进程读取全局变量g_val的时候居然出现了俩个不同的值。如下&#xff1a; #include<stdio.h> #includ…

【Linux】软件管理工具 yum

文章目录 概念搜索&#xff1a;yum list安装&#xff1a;yum install卸载&#xff1a;yum remove 概念 在Linux下安装软件&#xff0c;可以下载到程序的源代码&#xff0c;进行编译得到可执行程序&#xff0c;另外这些软件还有依赖其它工具的问题&#xff0c;还得下载编译这些依…

底软驱动 | Linux字符设备驱动开发基础

文章目录 知识整理--Linux字符设备驱动开发基础字符设备基础1从一个最简单的模块源码说起字符设备驱动工作原理字符设备驱动代码实践--给空模块添加驱动壳子应用程序如何调用驱动 字符设备基础2添加读写接口&#xff08;应用和驱动之间的数据交换&#xff09;驱动中如何操控硬件…

WIFI连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下&#xff0c;如何使用阿里云物联网平台&#xff0c;创建一个简单的远程控制小灯示例。 1 实现功能…

整洁架构SOLID-里氏替换原则(LSP)

文章目录 定义LSP继承实践正例反例 LSP软件架构实践反例 小结 定义 1988年&#xff0c;Barbara Liskov在描述如何定义子类型时写下了这样一段话&#xff1a; 这里需要的是一种可替换性&#xff1a;如果对于每个类型是S的对象o1都存在一个类型为T的对象o2&#xff0c;能使操作T…

Meta MobileLLM

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

鸿蒙开发—基础组件

目录 安装介绍 1.Text 2.Image 3.Button 4.Slider 安装介绍 该文章介绍鸿蒙开发中的部分基础组件&#xff0c;适用于鸿蒙开发的初学者。 1.软件下载地址&#xff1a;DevEco Studio-HarmonyOS Next Beta版-华为开发者联盟 (huawei.com) 2.安装DevEco Studio&#xff1a;…

最新版智能修图-中文luminar ai 1.55(13797) 和 neo1.20,支持m芯片和intel芯片(绝对可用)

Luminar AI for macOS 完整版本 这个程序是第一个完全由人工智能驱动的图像编辑器。有了它&#xff0c;创建引人注目的照片是有趣的&#xff0c;令人惊讶的容易。它是一个独立的照片编辑器和macOS插件。 Luminar AI for macOS 轻轻地塑造和完善一个肖像打造富有表现力的眼睛…

增加内容曝光、获得更多粉丝 - 「评论发红包」功能

目录 博客发放以及领取红包规则 1. 发布博客评论社区红包规则&#xff1a; 2. 博客评论红包领取规则 如何发红包评论&#xff1f; 发布红包评论益处 不知道大家有没有注意到&#xff0c;我们的「评论发红包」功能已经上线啦&#xff5e; 现在几乎所有的内容 -- 博客&…

TCP连接的三次握手和断开的四次挥手

TCP连接的建立过程通过三次握手完成&#xff0c;‌而连接的关闭过程则通过四次挥手完成。‌ 三次握手&#xff1a;‌这是TCP连接建立的过程&#xff0c;‌主要目的是确保双方都准备好进行数据传输。‌具体步骤如下&#xff1a;‌ 客户端向服务器发送一个SYN报文&#xff0c;‌请…

独立开发者系列(24)——使用redis

&#xff08;一&#xff09;REdis的使用原理 在早期的网站的时候&#xff0c;如果系统本身功能不是很复杂&#xff0c;比如就是内部的几个用户使用&#xff0c;而且基本就是汇报一点简单的设备维护信息&#xff0c;还有日常公告。完全可以不使用数据库&#xff0c;直接使用jso…

IoTDB 集群高效管理:一键启停功能介绍

如何快速启动、停止 IoTDB 集群节点的功能详解&#xff01; 在部署 IoTDB 集群时&#xff0c;对于基础的单机模式&#xff0c;启动过程相对简单&#xff0c;仅需执行 start-standalone 脚本来启动 1 个 ConfigNode 节点和 1 个 DataNode 节点。然而&#xff0c;对于更高级的分布…

02:项目二:感应开关盖垃圾桶

感应开关盖垃圾桶 1、PWM开发SG901.1、怎样通过C51单片机输出PWM波&#xff1f;1.2、通过定时器输出PWM波来控制SG90 2、超声波测距模块的使用3、感应开关盖垃圾桶 需要材料&#xff1a; 1、SG90舵机模块 2、HC-SR04超声波模块 3、震动传感器 4、蜂鸣器 5、若干杜邦线 1、PWM开…

7、y0usef

难度-低 局域网靶机地址发现 端口服务扫描 通过目录扫描发现adminstration目录&#xff0c;但是访问发现提升没有权限 尝试通过添加请求头X-Forwarded-For: http://127.0.0.1 成功绕过 访问发现是一个登录框 尝试admin admin发现成功登录。。。 发现文件上传功能点 尝试进…

JavaWeb后端学习

Web&#xff1a;全球局域网&#xff0c;万维网&#xff0c;能通过浏览器访问的网站 Maven Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建Java项目的工具 作用&#xff1a; 依赖管理&#xff1a;方便快捷的管理项目以来的资源&#xff08;jar包&#xff09;&am…

鸿蒙系统在服装RFID管理中的应用:打造智能零售新时代

​随着物联网技术的迅速发展&#xff0c;服装零售行业正面临着新的变革与挑战。鸿蒙系统作为新一代智能操作系统&#xff0c;结合RFID技术&#xff0c;为服装行业提供了高效、智能的管理解决方案。常达智能物联&#xff0c;作为RFID技术的领先企业&#xff0c;致力于将鸿蒙系统…