基于像素-原型对比的弱监督语义分割

news/2024/11/28 21:59:21/

目录

  • Weakly Supervised Semantic Segmentation by Pixel-to-Prototype Contrast
    • 摘要
    • 本文方法
      • Pixel-to-Prototype Contrast
      • Prototype Estimation
      • Cross-view Contrast
      • Intra-view Contrast
    • 消融实验

Weakly Supervised Semantic Segmentation by Pixel-to-Prototype Contrast

摘要

  1. 提出了弱监督Pixel-to-Prototype Contrast,可以提供像素级的监督信号来缩小差距
  2. 在不同视图和图像的单个视图中执行,旨在施加跨视图特征语义一致性正则化,并促进特征空间的内(间)类紧凑性(离散性)
  3. 本文方法可以无缝地整合到现有的WSSS模型中,而无需对基础网络进行任何更改,也不会产生任何额外的推断负担
    在这里插入图片描述

本文方法

在这里插入图片描述
A(·)是增强训练样本的空间变换
fCAM, fproj由1×1卷积层实现,然后是ReLU。fest表示原型估计过程,p{S,T}表示生成的原型。
L2表示逐像素L2归一化。argmax函数沿着通道维度逐像素执行,并返回最大值的索引。

Pixel-to-Prototype Contrast

给定图像的CAM,我们使用逐像素的argmax函数来生成伪MASK y,即y = argmax(m),它决定了每个像素的类别。每个类别都有一个代表性的嵌入,原型用P = {pc}表示。

本文目标是在投影特征空间中通过对比学习来学习每个像素的判别特征嵌入。其思想如图所示
在这里插入图片描述
首先通过映射层获得像素级的特征vi∈R128,它由1 × 1卷积层实现,然后是ReLU。那么,给定vi和P,像素到原型的对比度F(·)有如下公式:
在这里插入图片描述

Prototype Estimation

进一步描述如何生成原型,一种可能的解决方案是通过聚类来挖掘像素级语义结构,就像在无监督语义分割中所做的那样。然而,在弱监督设置的情况下,该方法不能充分利用图像标签信息,通常需要过度聚类才能获得更好的性能。生成的聚类通常不能很好地匹配真正的类别。

在这项工作中,将像素级CAM值作为置信度,并建议从像素级特征嵌入中估计具有最高置信度的原型。具体来说,对于所有分配给c类的像素,我们经验地选择置信度最高的K个像素来估计原型。原型Pc计算是通过投影像素级嵌入的加权平均计算出来的:

在这里插入图片描述
随后采用l2标准化对Pc
此外,为了捕获整个数据集的全局上下文,我们在整个训练批中计算原型,即选择整个训练中CAM值最高的像素。

Cross-view Contrast

交叉原型对比
考虑到两个视图之间的语义一致性,一个视图的原型可以作为另一个视图的监督信号,反之亦然。精确地说,给定一个像素i,其伪标签yi∈[1,2,…, C]和投影特征嵌入vi,借用另一个视图的原型P ’ = {P ’ C}对当前视图进行正则化。交叉原型对比损失计算为
在这里插入图片描述
交叉CAM对比
此外,一个视图中的CAM也可以用于对另一个视图施加一致性正则化。CAM决定视图的伪掩码。因此,对于一个像素i在其自身视图中具有原型P,我们利用来自另一个视图的伪标签y 'i来确定正原型和负原型。类似地,交叉凸轮的对比损失可以写成

在这里插入图片描述
值得注意的是,跨视图对比是对称的,源视图和目标视图都可以作为当前视图计算Lcp和Lcc。最后将两个视图各自的Lcp和Lcc相加,得到总跨视图对比损失Lcross。
在这里插入图片描述

Intra-view Contrast

Intra-view Contrast
根据类内紧凑性和类间离散性的第二个假设,我们进一步提出了在每个图像的单个视图内进行的视图内对比。相对于交叉视图对比,对于一个带有伪标签yi的像素i,内视图对比从当前视图中获取原型P进行像素到原型的对比学习:
在这里插入图片描述
对两个视图进行视图内对比,为简单起见,在式(9)中不列出对称形式。

然而,我们通过实验发现,简单地引入Lintra会导致性能退化。原因是在弱监督设置的情况下,没有精确的像素级注释,分配给像素i的伪标签yi可能是不准确的,导致不准确的对比。在对比学习中的硬挖掘策略的激励下,通过引入半硬原型挖掘来缓解这个问题。此外,我们还采用了硬像素采样策略,更多地关注难以分割的像素样本
Semi-hard Prototype Mining
对于像素i,分配的标签yi决定了正原型pyi和负原型PN = P\pyi。本文没有直接使用PN,而是采用半硬原型挖掘:对于每个像素,我们首先收集前60%最难的负原型,从中选择50%作为负样本,计算视图内对比损失。

这里剩下的问题是如何定义“更难的”原型。对于像素i,我们将除了pyi之外的原型用点积来嵌入更接近于1的像素特征vi,即与像素相似的原型。
Hard Pixel Sampling
本文还引入了硬像素采样,以更好地利用硬像素。特别的是,没有使用属于一个原型pc的所有像素来计算视图内的对比损失,而是采用了逐类像素采样策略:对于每个类,一半像素是随机采样,一半像素是硬像素。

在训练期间定义了“更难的”像素,没有标签。对于原型pc,我们将点积与pc更接近- 1的归属像素视为更难的像素,即与原型不同的像素。“更硬”像素的定义与“更硬”原型正好相反,因为远离对应原型的像素需要更多的注意力才能拉近原型,以提高类内的紧凑性

我们实验证明,配备了这两种策略,我们减轻了不正确的对比和影响更好地使用困难的例子,这将进一步提高性能。

消融实验

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/39232.html

相关文章

git 实际开发中使用-解决问题

前言 git代码版本管理工具,打破常规的物理传输,更新,合并,回滚提高了开发效率和可追溯性。 网上的资料会把所有的命令都很全也很多,导致对刚刚了解的同学不友好,很难实际使用。 每个人都有自己使用git的习…

numpy中transpose详解

transpose用于numpy中高维度数组的轴变换,在二维情况下就是通常说的转置。该方法很不好理解,本文详细介绍该方法。 该方法有两个实现,分别是numpy.ndarray.transpose和numpy.transpose,两者分别是类成员方法和独立的方法&#xf…

python字符编码

目录 ❤ 前言 文本编辑器存取文件的原理(nodepad,pycharm,word) python解释器执行py文件的原理 ,例如python test.py 总结 ❤ 什么是字符编码? ASCII MBCS Unicode ❤ 字符编码的发展史 阶段一: 现代计算…

一篇文章看懂C++三大特性——多态的定义和使用

目录 前文 一,什么是多态? 1.1 多态的概念 二, 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.3.1 虚函数重写的两个例外 2.4 C override 和 final 2.5 重载,重写(覆盖),隐藏(重定义)的区别 三,抽…

Pandas高级操作,建议收藏(一)

在数据分析和数据建模的过程中需要对数据进行清洗和整理等工作,有时需要对数据增删字段。下面为大家介绍Pandas对数据的复杂查询、数据类型转换、数据排序的使用。 复杂查询 实际业务需求往往需要按照一定的条件甚至复杂的组合条件来查询数据,接下来为大家介绍如何…

UE4 C++编写自定义动画蓝图节点

UE中自带的动画蓝图节点有限,在实现一些功能时需要通过C编写一些自定义的动画蓝图节点,本文就来讲解其基础实现,自定义节点最终效果如下: 源文件下载:https://download.csdn.net/download/grayrail/87654290 1.流程简…

【华为OD机试真题】猜字谜(javapython)

猜字谜 时间限制:1s空间限制:256MB 限定浯言:不限 题目描述: 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩 家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的,…

mac电脑配置adb

1、打开mac的terminal终端,输入 cd ~/ 2、输入 touch .bash_profile,如果没有.bash_profile这个文件,则创建一个这个文件 3、输入 open .bash_profile ,打开创建的.bash_profile 文件,此时应该弹出一个文本编辑框&am…