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 ...
随机推荐
- .NET 开源权限认证项目 MiniAuth上线
前言 在Web应用项目中权限认证是个绕不开的话题,传统方法复杂又耗时.MiniAuth推出专为.NET开发者设计的简单.实用的权限认证项目. MiniAuth,作为ASP.NET Core的插件,让我 ...
- 05-canvas绘制简单图形之三角形
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- 5 个有趣的 Python 开源项目「GitHub 热点速览」
本期,我从上周的开源热搜项目中精心挑选了 5 个有趣.好玩的 Python 开源项目. 首先是 PyScript,它可以让你直接在浏览器中运行 Python 代码,不仅支持在 HTML 中嵌入,还能安 ...
- 仿MFC消息机制封装对话框窗口类
仿MFC消息机制封装对话框窗口类 这几天,又看了网上不少MFC的学习视频,学习了不少知识,对MFC消息机制有了不少的认识,于是便有了根据MFC消息机制再次封装一次对话框类, class QDialog ...
- Java——计算1~N之间所有奇数之和
2024/07/15 1.题目 2.解题 1.题目 2.解题 import java.util.Scanner; public class Main { public static void main ...
- 自制 ShareLaTeX 镜像
Overleaf 官方的 sharelatex 镜像的 TeX Live 版本可能较旧,无法安装最新的宏包,并且往往只包含了少量的基础宏包.为了方便使用,我们可以自己构建一个使用最新 TeX Live ...
- Java多线程并发之同步容器和并发容器-第一篇
Java多线程并发之同步容器和并发容器-第一篇 概述 本文主要讲解在Java多线程并发开发中,集合中有哪些支持并发的的.什么是同步容器(集合),什么是并发容器(集合)?并发容器分类有哪些?每个分类都有 ...
- python png 转 icon文件
pip install pillow from PIL import Image def png_to_ico(png_path, ico_path): img = Image.open(png_pa ...
- 在一个简单的pwn题目中探究执行系统调用前堆栈的对齐问题
题目介绍:在输入AAAAAAAAAAAAAAAAAAAAAAAAA后,程序会打开一个shell,这是为什么?字符串中的A能否更换为@? 1.程序接收输入AAAAAAAAAAAAAAAAAAAAAAAA ...
- manim边学边做--通用多边形
manim提供了通用多边形模块,可以绘制任意的多边形. 通用多边形模块有两种,Polygon和Polygram. Polygon是一个几何学术语,主要指的是由三条或三条以上的线段首尾顺次连接所组成的平 ...