ClearCLIP:倒反天罡,删除两个组件反而可以提升密集预测性能 | ECCV'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处
论文: ClearCLIP: Decomposing CLIP Representations for Dense Vision-Language Inference

创新点
- 发现两个关键因素在将
CLIP适配密集视觉-语言推理中起着至关重要的作用:残差连接影响的减少以及通过自注意力机制的空间信息重组。 - 提出
ClearCLIP,在CLIP的最后一层中进行了三项简单的修改:去除残差连接、最后一个注意力层中采用自注意力机制以及舍弃前馈网络(FFN)。这些修改旨在增强注意力输出,从而为开放词汇语义分割任务生成更清晰的表示。
内容概述
尽管大规模预训练的视觉-语言模型(VLMs),特别是CLIP在各种开放词汇任务中取得了成功,但它们在语义分割中的应用仍然面临挑战,常常产生噪声分割图,存在误分割区域。
论文仔细重新审视了CLIP的架构,并确定残差连接是降低分割质量的主要噪声源。通过对不同预训练模型中残差连接与注意力输出的统计特性进行比较分析,发现CLIP的图像-文本对比训练范式强调全局特征,而牺牲了局部可区分性,从而导致噪声分割结果。
为此,论文提出了ClearCLIP,这是一种新颖的方法,旨在分解CLIP的表示,以增强开放词汇语义分割。对最终层进行了三项简单的修改:去除残差连接、最后一个自注意力层中采用自注意力机制以及丢弃前馈网络。ClearCLIP可以一致地产生更清晰、更准确的分割图,并在多个基准测试中超过现有方法。
ClearCLIP
基于ViT的CLIP模型由一系列残差注意力块组成。
舍弃残差连接

通过比较COCOStuff数据集中CLIP-B/16和CLIP-L/14模型最后一个模块的残差连接 \(X_{{res}}\) 与不同注意力输出 \(X_{{attn}}\) 的范数来开始分析,可以很容易地观察到这两个子图的共性和差异:
- 共性在于
mIoU曲线和 \(X_{attn}\) 的范数曲线表现出一定程度的正相关。 - 差异包括:
1)CLIP-B/16中 \(X_{res}\) 的范数远小于CLIP-L/14的范数;2)CLIP-B/16中的注意力修改在q-k基线之上表现出一致的改善,而CLIP-L/14中的情况则没有。
因此,当 \(X_{res}\) 的影响(或范数)最小化时,注意力修改才是有效的。换句话说, \(X_{res}\) 显著削弱了CLIP在密集推断任务上的表现。

为了验证这一假设,基于CLIP-B/16使用 \(X_{{sum}}\) 、 \(X_{{res}}\) 和 \(X_{{attn}}\) 进行开放词汇语义分割实验。COCOStuff数据集上的实验结果如图3所示,发现 \(X_{res}\) 的mIoU接近于零,这表明残差连接可能对图像分割没有帮助。相反,仅使用 \(X_{{attn}}\) 的mIoU显著高于 \(X_{{sum}}\) 。图3中的可视化结果表明,CLIP的噪声分割图可以分解为一个模糊的 \(X_{{res}}\) 图和一个更清晰的 \(X_{{attn}}\) 图。根据这些实验结果,可以初步得出结论:分割图中的噪声主要来源于残差连接。
为了进一步证明 \(X_{res}\) 如何影响CLIP的性能,引入了一个缩放因子 \(\alpha\) ,使得 \(X_{{sum}} = X_{{res}} + \alpha X_{{attn}}\) ,该因子控制 \(X_{attn}\) 相对于 \(X_{res}\) 的相对影响。实验表明表明更大的 \(\alpha\) 显著提升了性能,这清楚地说明了 \(X_{{res}}\) 对性能的不利影响。
最后,论文建议直接舍弃残差连接以在密集的视觉-语言推理任务中实现最佳性能。
舍弃前馈网络(FFN)
Transformer架构中的前馈网络(FFN)在建模数据中的关系和模式方面起着至关重要的作用,但最近的研究显示,FFN在推理过程中对图像表示的影响微乎其微。最后一个注意力模块中的FFN特征与最终分类特征的余弦角度明显更大,因此建议在密集预测任务中舍弃FFN。
在应用于基础CLIP模型时,论文发现移除FFN对开放词汇语义分割任务的影响较小。但当与去除残差连接相结合时,舍弃FFN会导致结果的改善,特别是在模型规模较大的情况下。这种改进的原理在于,去除残差连接显著改变了FFN的输入,从而影响其输出。因此,去除FFN的输出可能会减轻其对性能的负面影响。
自注意力机制
基于上述分析,使用最后一个自注意力层的注意力输出用于视觉-语言推理。
X^{{visual}} = X_{{attn}} = {Proj}({Attn}_{(\cdot) (\cdot)} \cdot v),
\label{eq:solution}
\end{equation}
\]
受到之前工作的启发,可以在注意力机制 \({Attn}_{(\cdot) (\cdot)}\) 中使用不同的查询-键组合。实际上, \({Attn}_{qq}\) 在大多数情况下始终能够实现更好的性能,因此选择默认使用它。
主要实验



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

ClearCLIP:倒反天罡,删除两个组件反而可以提升密集预测性能 | ECCV'24的更多相关文章
- 找出list中的不同元素、删除两个list中相同的对象
package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; ...
- oracle 如何快速删除两表非关联数据(脏数据)?
1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where ...
- 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)
本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)",主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款 ...
- 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
第三章 建议学习时间8小时 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...
- bootstrap multiselect两大组件
组件说明以及API 1.第一个组件——multiple-select.这个组件风格简单.文档全.功能强大.但是觉得它选中的效果不太好.关于它的效果展示,我们放在后面. 2.第二个组件——bootstr ...
- 如何删除windows服务(sc.exe删除和注册表删除两种方法)
一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和Windows网络的基础,属于系统核心的一部分,它支持着整个Windows的各种操作. ...
- vue的组件化运用(数据在两个组件互传,小问题总结)
一.vue的组件化应用 首先,知道有哪些相关的属性需要用到,再慢慢去理解,运用. 1.两个vue页面 2. slot占位符(可用可不用) 3.props内置属性 4.watch监听函数 5.impor ...
- POJ3268 Silver Cow Party (建反图跑两遍Dij)
One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...
- ANDROID_MARS学习笔记_S02_012_ANIMATION_利用AnimationListener在动画结束时删除或添加组件
一.代码 1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...
- sql存储过程通过ID删除两表中的数据。
CREATE OR REPLACE PROCEDURE del_p --建立名为del_p 的过程 IS CURSOR get_abid --简历名为get_abid的cursor 用来存放a表的id ...
随机推荐
- WhaleStudio 2.6正式发布,WhaleTunnel同步性能与连接器数量再创新高!
在这个数据驱动的大模型时代,数据集成的作用和意义愈发重要.数据不仅仅是信息的载体,更是推动企业决策和创新的关键因素.作为全球最流行的批流一体数据集成工具,WhaleTunnel随着WhaleStudi ...
- 暑假Java自学进度总结05
一.今日所学: 1.if的第一个表达式: if(关系表达式){ 语句: } 执行流程: 1>首先执行关系表达式的值 2>如果关系表达式的值为true则执行语句,否则不执行 3>继续执 ...
- Python if __name__ == "__main__" 解释
一种机制,允许脚本以不同的方式运行,这取决于作为独立的程序执行还是作为模块被其他脚本导入.这种机制就是 if __name == "__main__" 其作用是控制某些代码块只在该 ...
- win10找不到无线网络报错:Windows无法自动将IP协议堆栈绑定到网络适配器
win10找不到无线网络报错:Windows无法自动将IP协议堆栈绑定到网络适配器 问题描述: 今天启动电脑,忽然发现连不上WIFI了,但可以拨号连接有线网.大致情况如下: 上图是修复后的结果,在未修 ...
- vue自定义组件的点击事件失效
在vue开发过程中为了减少重复代码,很多时候都需要将重复的部分写成一个组件,方便调用.但是使用组件时很可能又会给该组件添加点击事件.如果直接这样写,事件则会失效: 正确写法应该是这样:
- Serilog文档翻译系列(二) - 设置AspNetCore应用程序
Serilog 日志记录适用于 ASP.NET Core.此包将 ASP.NET Core 的日志消息通过 Serilog 进行路由,使你可以将有关 ASP.NET 内部操作的信息写入与应用程序事件相 ...
- 用 SQL 写的俄罗斯方块游戏「GitHub 热点速览」
在开始介绍上周热门开源项目之前,要插播一条开源新闻:Nginx 已正式迁移至 GitHub. 近日,Nginx 官方宣布将 Nginx 开源项目,从 Mercurial 迁移至 GitHub 代码托管 ...
- reinstall nodejs 后跑不到 command
现象 : node -v 可以跑 , ng new 这些就跑不到 (确保已经安装了 global cli) 那多半是 path 的问题 https://stackoverflow.com/questi ...
- 一个 tomcat 下如何部署多个项目?附详细步骤
一个tomcat下如何部署多个项目?Linux跟windows系统下的步骤都差不多,以下linux系统下部署为例.windows系统下部署同理. 一.不修改端口,部署多个项目 清楚tomcat目录结构 ...
- 一条 SQL 语句在 MySQL 中是如何执行的?
本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程,包括 SQL 的查询在 MySQL 内部会怎么流转,SQL 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构 ...