Clustering-Guided Class Activation for WeaklySupervised Semantic Segmentation

news2024/11/17 7:50:53

pdf:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=10381698

code:https://github.com/DCVL-WSSS/ClusterCAM

摘要:

基于transformer的弱监督语义分割(WSSS)方法利用其捕获全局上下文的强大能力得到了积极的研究。然而,由于激活函数在transformer的自注意机制中只突出了几个tokens,因此这些方法仍然受到稀疏注意映射的影响,从而导致生成不完整的伪标签。在本文中,我们提出了一种新的类激活方案,该方案能够均匀地突出整个目标区域。

该方法的核心思想是通过将目标相似的图像特征组合而成的聚类引导激活目标区域。具体来说,利用提出的基于聚类的注意力模块生成聚类引导类激活图(ClusterCAM),然后利用该图中的高响应区域激活编码特征空间中的目标对象。这有助于模型通过使用从同一对象提取的patch tokens之间的语义接近度来探索目标对象的整个区域。在此基础上,我们设计了一个端到端的WSSS框架,可以单阶段同时训练分类和分割网络。

在基准数据集上的实验结果表明,我们提出的方法明显优于以前的WSSS方法,包括几种多阶段方法。

1 引言

我们提出应用聚类方案[22],[23]来解决上述的稀疏注意图问题。由于语义亲和力,属于同一对象的局部区域往往会产生相似的patch tokens,这在自关注机制中是不一致的。为了解决这个限制,我们提出了一个新的ClusterCAM。本文提出的方法的关键思想是探索类和簇之间的关系,而不是以往大多数方法中使用的patch[16],[17]。具体来说,我们首先将相似的补丁压缩成单个语义感知原语,the cluster token,并进行自关注来估计类和聚类之间的相关性。

然后,将每个cluster token的关注值平均分配到属于相应簇的原始patch上。值得注意的是,这种反向映射方法有效地保留了cluetrcam中类似补丁的贡献。这样,物体就可以均匀地表示,没有任何缺失的部分,如图1所示。基于所提出的ClusterCAM生成的伪标签和区域传播方案[18],我们以单阶段的方式构建了端到端的WSSS框架。所建议的方法的主要贡献可概括如下:

  • 我们提出了一种新颖的聚类引导类激活方案。通过将聚类到类别的注意力权重平均传播到属于同一聚类的所有区域,有助于均匀激活对象的整个区域,尽管这些区域在视觉上具有相似性。这是非常理想的,可以防止由于相似区域而不必要地抑制激活。
  • 我们在两个具有代表性的基准上进行了各种实验,即PASCAL VOC 2012[24]和MS COCO 2014[25]数据集。实验结果表明,该方法明显优于以往的WSSS方法,包括几种多阶段方法。

 图一:Visualization examples of attention maps. While patch-to-class
attention weights (middle) used in MCTformer [17] sparsely emphasize
the object region, the proposed ClusterCAMs (bottom) successfully
highlight the whole region of the object.

3.PROPOSED METHOD

 图二:所提出方法的总体架构。transformer 编码器生成ClusterCAM和补丁间注意力权重(P2P Attn.weights)。然后,这些用于细化CAM,CAM是由与ClusterCAM和transformer 编码器的最后一个特征图连接形成的特征生成的,并产生伪标签。级联的特征图也被馈送到分割解码器中,以预测最终的分割掩模。

3.1 CLUSTERING-GUIDED CLASS ACTIVATION MAP

我们的目标是利用集群和类之间的关系来生成包含整个目标对象的注意力图。首先,将transformer块X∈R^(H×W+K)×C的输入标记分为类标记Xcls∈R^ K×C和补丁标记Xpat∈R ^H×W×C,其中H、W、K和C分别表示高度、宽度、类数和通道数。为了便于聚类,我们使用简单的卷积块将补丁token投影到适合计算相似性的位置,如下所示:

其中F(·)和LN(·)分别表示1×1卷积运算和层归一化。遵循[23]中提出的策略,我们进行了patch聚类。然而,与之前侧重于在局部对相似token进行分组的方法不同,所提出的方法在没有空间约束的情况下聚合patch,以考虑目标对象可能占据的大面积。具体来说,我们用规则网格区域中patch token的平均值初始化集群tokenX_{clu}^{0}∈R^ N×C,其中集群token的数量为N=(H /h)×(W /w),给定网格大小为h×w。然后,我们计算关联矩阵S^ i∈R^ HW×N,它表示展平patch token \bar{X}_{pat}^{'}∈R^ HW×C和簇token之间的相似性,如下所示:

 其中i表示聚类过程中的迭代次数。σ(·)表示softmax函数。为了确保每一列中的条目都反映了每个patch token属于相应集群token的贡献,我们对关联矩阵的列进行了归一化。然后,我们根据patch token的贡献通过patch token的加权和更新集群token,如下所示:

其中\hat{S}^{i}是S i的列标准化版本。请注意,我们重复此过程10次,以产生最终的集群token Xclu。

为了估计集群到类的关系,集群token与类token Xcls连接在一起,并进行自注意力,如下所示:

其中C(x1,x2)表示x1和x2沿信道方向的级联,MHSA(·)是多头自关注操作。请注意,我们的基于聚类的注意力模块与典型transformer块内的标准MHSA层并行执行。随后,来自两个注意力操作的输出token 与transformer块的输入token 的残差相结合,并馈入MLP层。为此,我们通过对聚类标记Yclu∈R ^N×C进行反向映射来对齐输出标记的形状,这些标记与基于聚类的注意力模块中的自注意力操作的输出标记分离,即(4)中的Y。反向映射简单地通过(2)中关联矩阵S∈R HW×N的点积运算来实现,该运算用于将补丁转换为簇token,如下所示:

 随后,转换后的集群token 与(4)中的类token Ycls连接在一起,类token 也与输出token Y分离,并与MHSA层组合,以馈送到MLP层,如下所示:

其中 X′ 表示当前transformer模块的输出token。请注意,我们的transformer编码器由12个连续的transformer模块组成。transformer模块的详细过程在图3中进行了说明。 

现在,我们准备生成我们提出的ClusterCAM。生成我们提出的ClusterCAM的过程在图4中描述。首先,我们从多头自注意力(MHSA)操作(4)中的自注意力权重矩阵A∈R^(K+N)×(K+N)提取K个类别标记和N个聚类标记之间的注意力权重(即,Ac→c∈R^K×N)。类似于在(5)中将聚类标记转换为补丁级别,我们还使用关联矩阵S∈R^HW×N对提取的聚类到类别的注意力权重Ac→c进行反向映射。然后,我们通过加权和补丁到类别的注意力权重Ap→c∈R^K×HW来生成ClusterCAMAclu∈R^K×HW,如下所示:

其中α是与网络一起训练的权重参数。

 3.2伪标签生成

我们建议利用ClusterCAM中对象区域的空间信息,即Aclu,不仅用于生成伪标签,还用于预测准确的分割掩模。为了实现这一点,我们将transformer编码器F∈R^ C×HW的输出特征图与从MHSA操作的所有头和所有transformer块获得的ClusterCAM连接起来。然后将得到的级联特征图F′∈R(C+12KV)×HW馈送到卷积层以生成CAM和分割解码器。V表示用在MHSA头的数量。为了生成伪标签,我们按如下方式计算CAM:

 其中G(·)表示1×1卷积运算,它将信道数量减少到类K的数量。

然后,我们通过使用ClusterCAM Aclu∈R^ K×HW和补丁来细化CAM,并对注意力权重Ap2p∈R HW×HW进行补丁,如下所示:

我们应用最小最大归一化并进行阈值处理,以分配前景、背景和忽略的像素,如下所示:



3.3损失函数

由于我们提出的方法基于端到端框架,因此网络是通过单级方式使用分类和分段损失进行训练的。具体来说,分类损失Lcls和Lcam是通过分别从类标记和CAM获得的类分数来计算的。首先,我们通过简单地按照[17]对类标记的相应值进行平均来获得每个类别的类得分。此外,将全球平均池(GAP)应用于CAM以生成课堂分数。然后,这些类别分数用于使用二进制交叉熵损失函数计算分类损失,如下所示:

其中y表示类标签。gcls和gcam分别表示根据类标记和CAM计算的类分数。

对于分割损失Lseg,我们采用如下的交叉熵损失函数:

其中Pi,j和P*i,j分别表示预测的分割结果和位置(i,j)处的伪标签。是在(11)中不被忽略的像素位置的集合。最后,总损失函数由以下三项组成:

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

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

相关文章

day8JS-作用域

1. 变量的作用域(变量函数) 作用域是变量的可作用范围,变量只有在自己的作用域下才会生效。 函数会产生作用域,在函数内定义的变量只能在函数内使用。 2. 作用域分类 局部作用域: 函数内定义的变量和形参的作用域就是局部作用域;这…

【Hot100】LeetCode—207. 课程表

目录 1- 思路有向图记录入度数组出度列表 2- 实现⭐207. 课程表——题解思路 3- ACM 实现 题目连接:207. 课程表 1- 思路 有向图记录入度数组出度列表 根据输入① 构造遍历构造入度数组② 构造出度列表根据入度数组为 0 的数 加入到 队列中,进行处理 2…

在线拼图用什么软件?5款顶级照片拼接工具

照片拼接在一起用什么软件?当你想全景展现山西应县木塔的震撼之美时,5款精选照片拼接软件能帮你解锁全新视角。 这座千年古塔,巍峨耸立,细节之处尽显匠心独运。而通过拼接技术,每一块木构的精致、每一层塔檐的飞翘都能…

OpenBayes 教程上新 | 青岛小哥焦恩俊版二郎神来袭,MuseV + MuseTalk 分分钟实现高质量数字人制作!

使用传统的数字人训练方案生成一个高质量的数字人,常常需要大量的时间和算力资源,同时对训练素材的要求也较高,如果想要达到良好的唇形一致效果,通常需要数小时乃至更久。 MuseV 和 MuseTalk 的出现为数字人领域带来了新的突破&a…

【Canvas与桌面】十字网格黑灰背景(1920x1080)

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>十字网格黑灰背景(1920x1080)</title><style type"te…

iphone被锁定怎么解锁?iPhone密码锁解锁办法分享

在忙碌的生活中&#xff0c;有时我们可能会遇到一些“小插曲”&#xff0c;比如苹果手机被锁定&#xff0c;iPhone被锁定是一个常见的问题&#xff0c;可能是由于忘记密码、多次输入错误密码或设备被远程锁定等原因造成的。 本文将介绍解锁被锁定的iPhone的方法以及注意事项&a…

【网络安全】IDOR之请求包分析

未经许可,不得转载。 文章目录 正文正文 某在线游戏平台,在开始测试时,我访问了 /profile 页面(个人资料页面),然后查看 Burp 历史记录,想查看有多少隐藏的请求。 可以看到一个HTTP 的 OPTIONS 方法的请求包: 从图中看到,该请求包含两个参数:player_id_or_name(用…

OpenHarmony源码解析之电话子系统——通话流程

一、简介 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;电话子系统为 OS 提供了基础的无线通信能力。 支持 TD-LTE/FDD-LTE/TD-SCDMA/WCDMA/EVDO/CDMA1X/GSM 等网络制式的通信模块&#xff0c;能够提供高速的无线数据传输、互联网接入等业务&#xf…

c++栈和队列(stack和queue)

前言 栈和队列是两个极其相似的数据结构&#xff0c;栈具有先进后出的特性&#xff0c;队列具有先进先出的特性。今天我们就来简单的介绍一下栈和队列这两数据结构&#xff0c;其中队列我们介绍普通队列、双端队列&#xff08;了解&#xff09;和优先级队列&#xff08;其实这…

C++从入门到起飞之——vector模拟实现 全方位剖析!

​ &#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、vector的成员变量 2、迭代器 3、size与capacity 4、[]运算符重载 5、reserve 6、push_bac…

LSTM结合时序异常检测直接写!小论文闭着眼睛发!

还在愁小论文&#xff1f;不如考虑考虑这个方向&#xff1a;LSTM时间序列异常检测。 这是个比较活跃且热门的研究方向&#xff0c;因为LSTM具有非常优秀的时序数据深度处理能力&#xff0c;能够灵活适应不同复杂度的数据&#xff0c;给我们提供高精度的预测结果&#xff0c;在…

时间继电器和定时器

一、概述 1.时间继电器是可以在设定的定时周期内或周期后闭合或断开触点的元器件。 2.时间继电器上可设定的定时周期数量有限&#xff0c;多为一个或两个。定时时长从0.02s至300h(根据产品型号范围不同)。 3.定时器可以理解为一台钟表&#xff0c;它在某个时间点上闭合(断开…

PostgreSQL如何设置主键自增(序列、SERIAL)

文章目录 PostgreSQL如何设置主键自增背景什么是序列Postgresql的自增机制基本使用使用SERIAL或BIGSERIAL数据类型手动创建序列和设置默认值实战demo&#xff1a;PostgreSQL 手动序列管理设置序列的当前值 工作常用总结创建表时候自定义序列&#xff1a;id SERIAL PRIMARY KEY …

调用具体接口的所有实现类

Java获取接口的所有实现类方法-CSDN博客https://blog.csdn.net/feeltouch/article/details/135399078

最实用接地气的 .NET 微服务框架

目录 前言 项目介绍 快速入门 1、服务注册 2、启动UI 3、服务发现与调用 4、启动服务网关 项目地址 最后 前言 微服务架构已经成为搭建高效、可扩展系统的关键技术之一&#xff0c;然而&#xff0c;现有许多微服务框架往往过于复杂&#xff0c;使得我们普通开发者难以…

基于生成对抗模型GAN蒸馏的方法FAKD及其在EdgesSRGAN中的应用

文章目录 FAKD系列论文paper1: FAKD&#xff1a;用于高效图像超分辨率的特征亲和知识蒸馏&#xff08;2020&#xff09;ABSTRACT1. INTRODUCTION2. PROPOSED METHOD2.1. Feature Affinity-based Distillation (FAKD) 2.2. Overall Loss Function3. EXPERIMENTAL RESULTS3.1. Ex…

TypeSript9 命名空间namesapce

我们在工作中无法避免全局变量造成的污染&#xff0c;TypeScript提供了namespace 避免这个问题出现 内部模块&#xff0c;主要用于组织代码&#xff0c;避免命名冲突。命名空间内的类默认私有通过 export 暴露通过 namespace 关键字定义 TypeScript与ECMAScript 2015一样&…

React学习day02-React事件绑定、组件、useState、React组件样式处理方式

3、React事件绑定&#xff08;以点击事件为例&#xff09; &#xff08;1&#xff09;语法&#xff08;整体遵循驼峰命名法&#xff09;&#xff1a;on事件名称{事件处理程序} 比如&#xff1a;点击事件onClick&#xff08;类似于vue中的click&#xff09; &#xff08;2&…

成为Python高手,我能给出的最好建议

今天笔者将向大家分享5个良好的Python编程习惯&#xff0c;大牛认证&#xff0c;通过不断实践&#xff0c;助你写出更Pythonic的代码&#xff0c;让你向Python大师之路更进一步。 今天笔者将向大家分享5个良好的Python编程习惯&#xff0c;大牛认证&#xff0c;通过不断实践&a…

Java面试题精选:消息队列(二)

一、Kafka的特性 1.消息持久化&#xff1a;消息存储在磁盘&#xff0c;所以消息不会丢失 2.高吞吐量&#xff1a;可以轻松实现单机百万级别的并发 3.扩展性&#xff1a;扩展性强&#xff0c;还是动态扩展 4.多客户端支持&#xff1a;支持多种语言&#xff08;Java、C、C、GO、…