【弱监督学习】Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels

本文主要是介绍【弱监督学习】Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0.前言

这是一篇在2022年发表在CVPR上的有关弱监督语义分割的文章,文章关注使用图像级标签进行语义分割弱监督训练。现有方法通常产生伪标签,然后通过某种方法对伪标签进行过滤,仅仅使用可靠的像素来进行弱监督训练,然而这样通常会损失大量的像素,导致许多没有被判定为可靠的像素没有被使用,为了提高无像素级标签数据的使用率,本文提出了了U2PL框架。

1.介绍

全监督方法通常需要大量高质量的像素级标签才能完成像素级语义分割,然而现实中,我们通常使用弱监督的方法来减少训练对于像素级标签的依赖。目前的一个比较通用的方法就是生成伪标签,来使用伪标签进行监督训练。这里通常会有一个过滤机制,保证最后生成的伪标签是比较准确的。然而,由于伪标签的过滤机制,通常最后剩下的可靠的伪标签的像素非常有限,往往仅是整个图像的一小部分,这就造成了有些像素在训练过程中从来就没有被使用过,从而导致了模型在某些类上的性能退化。当然,直接使用不可靠的伪标签,也会导致性能退化。

为了避免上面的问题,本文提出了一个U2PL框架。为了避免所有不好的伪标签只来自于一小部分类的问题,本文应用一个对于每一类的队列,确保每一类的负样本平衡起来。同时因为伪标签的质量会在训练过程中变得越来越好,本文还引入了一个动态自适应阈值的策略来区分可靠和不可靠标签。

2.方法

2.1 整体框架

整体框架如下图:
请添加图片描述

整个框架中包含一个学生网络和一个教师网络,他们的结构相同,唯一不同的是他们权重的更新方式。优化的整体损失如下:
请添加图片描述
L s L_s Ls的定义如下:
请添加图片描述
里面的f和h分别代表编码器和分割头,也就是网络结构,这个损失使用的是学生网络预测的结果与人工标注的结果y之间计算的交叉熵。
L u L_u Lu的定义如下:
请添加图片描述
这里实际上是根据教师网络的可靠分割结果与学生网络的预测结果计算交叉熵。
L c L_c Lc是像素级的InfoNCE损失,定义如下:
请添加图片描述
M是锚点像素的个数(锚点像素具体是什么在2.3小节中会有提及),C是类别总数。每个锚点像素(这里可以理解锚点像素为关注的像素)会有一个正样本和N个负样本,这里面计算的是cosine相似度,z表示的是特征表示,是通过一个表示头(就是一个网络结构)来获得的。具体的内容,在2.3小节中会详细讲解。

2.2 伪标记生成

为了能够生成更加准确的伪标签,本文采用熵来评价伪标签的好坏程度,熵越大,伪标签越差,熵越小,伪标签越小,熵的计算如下式所示:
请添加图片描述
这里的下标i和j表示第i个图像的第j个像素。
给熵卡个阈值,大于阈值就判别为不可靠的伪标签:
请添加图片描述
阈值的计算如下:
请添加图片描述
当然,为了能够更好地根据训练过程动态更新阈值,本文采用了一些自适应的策略:

  • 动态分区适应
    也就是动态的去随着epoch的改变而改变 α t \alpha_t αt,如下:
    请添加图片描述

  • 权值自适应
    这个就是自适应的改变权值 λ u \lambda_u λu,如下:
    请添加图片描述
    这里面那个像是数字1一样的大写符号1[.]表示指示函数,它是在时间发生时取1,时间不发生的时候取0.

2.3 使用不可靠的伪标签

接下来就到了本文的重头戏了,如何使用到不可靠的伪标签。为了利用不可靠的伪标签,本文引入了三种样本点:(1)锚点像素;(2)正样本像素;(3)负样本像素。

2.3.1 锚点像素

其实锚点像素的选择就是设置一个阈值 δ p \delta_p δp,文中设置为0.3,对于有标签数据,锚点像素的特征表示如下:
请添加图片描述
对于无标签数据,只需要利用其伪标签来选锚点数据即可,如下:
请添加图片描述
当然,锚点像素在伪标签上也只是那些经过熵过滤留下的可靠标签中选出来的,最后无标签和有标签的取个交集,就变成这样:
请添加图片描述
这里面的z也就对应之前2.1小节中计算infoNCE中的z。

2.3.2 正样本像素

正样本像素特征在这里被定义为所有锚点像素特征的中心:
请添加图片描述
这里面的z+也就对应之前2.1小节中计算infoNCE中的z+。

2.3.3 负样本像素

首先,先生成二值化MASK:
请添加图片描述
想定义对于c类的一个有标签数据像素为负样本,实际上它应该满足两个条件(两个条件必须同时满足),第一就是它不属于这个类,第二就是它很难与这一类和背景区分开来(容易和背景混淆)。
根据这两个条件,对于有标签的数据:请添加图片描述
这个式子第第一项也就是这个像素如果不属于这个类,这一项就为1,如果属于这一类,这项就为0。第二项对应的其实是上面的的条件二,但是没看懂具体是啥意思,还是卡了个阈值,以下为没太看懂的部分:
请添加图片描述
对于这个 O i j O_{ij} Oij,文中说代表类别顺序, p i j p_{ij} pij表示的应该是第i个图像的第j个像素的softmax的结果,它应该是一个长度为C的向量,第0类是背景类,那么如果 p i j p_{ij} pij的第一个元素一定是一个比较大的值,这个 O i j ( a r g m a x ( p i j ) ) = 0 O_{ij}(argmax(p_{ij}))=0 Oij(argmax(pij))=0就比较好理解,但是后面这个 O i j ( a r g m i n ( p i j ) ) = C − 1 O_{ij}(argmin(p_{ij}))=C-1 Oij(argmin(pij))=C1就理解不了了,我做了一个仿真:
请添加图片描述
所以对于第二个条件,还是不太明白。治好索性接受了,这里面这个 r l r_l rl是一个阈值,设为3.

类似地,想定义一个无标签数据的像素为负样本,也需要满足两个条件:(1)是不可靠的(经过熵计算过滤下来的);(2)可能不属于类别c的
所以定义式如下:
请添加图片描述
最终的负样本特征表示如下:
请添加图片描述
这里面的z也就对应之前2.1小节中计算infoNCE中的z-。

2.4 类别级存储库

这部分就是文中后面的尾巴结构,引入的目的是因为每一个batch里面生成的负样本可能有限,所以把所有生成的负样本都存起来,待到不够用的时候再拿出来用。整个的算法更新流程如下:
请添加图片描述

3.结论

至此,整个方法都介绍完了,主要的创新之处在于损失函数 L c L_c Lc的设计与使用,它定义了锚点像素、正样本和负样本,从而实现了对unreliable数据的使用,并且实现了比较好的性能。

这篇关于【弱监督学习】Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234583

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件