来源:晓飞的算法工程笔记 公众号,转载请注明出处

论文: ClearCLIP: Decomposing CLIP Representations for Dense Vision-Language Inference

创新点


  • 发现两个关键因素在将CLIP适配密集视觉-语言推理中起着至关重要的作用:残差连接影响的减少以及通过自注意力机制的空间信息重组。
  • 提出ClearCLIP,在CLIP的最后一层中进行了三项简单的修改:去除残差连接、最后一个注意力层中采用自注意力机制以及舍弃前馈网络(FFN)。这些修改旨在增强注意力输出,从而为开放词汇语义分割任务生成更清晰的表示。

内容概述


尽管大规模预训练的视觉-语言模型(VLMs),特别是CLIP在各种开放词汇任务中取得了成功,但它们在语义分割中的应用仍然面临挑战,常常产生噪声分割图,存在误分割区域。

论文仔细重新审视了CLIP的架构,并确定残差连接是降低分割质量的主要噪声源。通过对不同预训练模型中残差连接与注意力输出的统计特性进行比较分析,发现CLIP的图像-文本对比训练范式强调全局特征,而牺牲了局部可区分性,从而导致噪声分割结果。

为此,论文提出了ClearCLIP,这是一种新颖的方法,旨在分解CLIP的表示,以增强开放词汇语义分割。对最终层进行了三项简单的修改:去除残差连接、最后一个自注意力层中采用自注意力机制以及丢弃前馈网络。ClearCLIP可以一致地产生更清晰、更准确的分割图,并在多个基准测试中超过现有方法。

ClearCLIP


基于ViTCLIP模型由一系列残差注意力块组成。

舍弃残差连接

通过比较COCOStuff数据集中CLIP-B/16CLIP-L/14模型最后一个模块的残差连接 \(X_{{res}}\) 与不同注意力输出 \(X_{{attn}}\) 的范数来开始分析,可以很容易地观察到这两个子图的共性和差异:

  1. 共性在于mIoU曲线和 \(X_{attn}\) 的范数曲线表现出一定程度的正相关。
  2. 差异包括:1CLIP-B/16中 \(X_{res}\) 的范数远小于CLIP-L/14的范数;2CLIP-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的输出可能会减轻其对性能的负面影响。

自注意力机制

基于上述分析,使用最后一个自注意力层的注意力输出用于视觉-语言推理。

\[\begin{equation}
X^{{visual}} = X_{{attn}} = {Proj}({Attn}_{(\cdot) (\cdot)} \cdot v),
\label{eq:solution}
\end{equation}
\]

受到之前工作的启发,可以在注意力机制 \({Attn}_{(\cdot) (\cdot)}\) 中使用不同的查询-键组合。实际上, \({Attn}_{qq}\) 在大多数情况下始终能够实现更好的性能,因此选择默认使用它。

主要实验






如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

ClearCLIP:倒反天罡,删除两个组件反而可以提升密集预测性能 | ECCV'24的更多相关文章

  1. 找出list中的不同元素、删除两个list中相同的对象

    package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; ...

  2. oracle 如何快速删除两表非关联数据(脏数据)?

      1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where ...

  3. 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)

    本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)",主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款 ...

  4. 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

    第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...

  5. bootstrap multiselect两大组件

    组件说明以及API 1.第一个组件——multiple-select.这个组件风格简单.文档全.功能强大.但是觉得它选中的效果不太好.关于它的效果展示,我们放在后面. 2.第二个组件——bootstr ...

  6. 如何删除windows服务(sc.exe删除和注册表删除两种方法)

    一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和Windows网络的基础,属于系统核心的一部分,它支持着整个Windows的各种操作. ...

  7. vue的组件化运用(数据在两个组件互传,小问题总结)

    一.vue的组件化应用 首先,知道有哪些相关的属性需要用到,再慢慢去理解,运用. 1.两个vue页面 2. slot占位符(可用可不用) 3.props内置属性 4.watch监听函数 5.impor ...

  8. 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 ...

  9. ANDROID_MARS学习笔记_S02_012_ANIMATION_利用AnimationListener在动画结束时删除或添加组件

    一.代码 1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...

  10. sql存储过程通过ID删除两表中的数据。

    CREATE OR REPLACE PROCEDURE del_p --建立名为del_p 的过程 IS CURSOR get_abid --简历名为get_abid的cursor 用来存放a表的id ...

随机推荐

  1. 2. 基于MCU应用的EMC指南

    1. 硬件 主要的噪声感受器和发生器是印刷电路板(PCB)上的轨道和布线,特别是MCU附近的轨道和布线.因此,防止噪声问题的第一步行动涉及到PCB布局和电源设计.一般来说,MCU周围的元器件数量越少, ...

  2. BST 二叉搜索树 BinarySearchTree C++实现(递归/非递归)

    目录 二叉搜索树 基本概念 常用结论 用途 二叉搜索树的性能分析 二叉搜索树的操作 查找 插入 删除 代码实现 BSTree.hpp test.cc 二叉搜索树 基本概念 二叉搜索树(BST,Bina ...

  3. MYSQL——mysql检索不包含字母U的数据

    2024/07/09 1. NOT LIKE 2. IS NOT.<>.!= 3. NOT IN 如题,正确答案如下: SELECT * FROM your_table_name WHER ...

  4. C# WebSocket Fleck 源码解读

    最近在维护公司旧项目,偶然发现使用Fleck实现的WebSocket主动推送功能,(由于前端页面关闭时WebSocket Server中执行了多次OnClone事件回调并且打印了大量的关闭日志,),后 ...

  5. 常见 URI 协议

    mailto mailto 是一种 URI(统一资源标识符)协议,主要用于在 Web 页面中创建电子邮件链接.当用户点击使用 mailto 协议的链接时,系统会自动打开默认的电子邮件客户端,并在新邮件 ...

  6. Linux 内核相关命令

    Shell 命令: ipcs # 查看共享内存 dmesg # 显示内核消息 sudo dmesg -c # 清空内核消息 sudo mknod /dev/rwbuf c 60 0 sudo insm ...

  7. 单 log 实现 区间加减,查询区间 gcd

    主要是查询,要将 log 个区间拿出来依次求 gcd,当然如果是 O(1) gcd 的话可以直接求就是了.

  8. LaTex “too many unprocessed floats”

    latex编辑时出现LaTex "too many unprocessed floats" 如何解决? 有人说是用/usepackage[section] {placeins} 我 ...

  9. Node.js开发博客项目笔记-http请求处理(1)

    处理get与post请求示例代码: const http = require('http'); const querystring = require('querystring'); const se ...

  10. 15. 三数之和 Golang实现

    给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[i] + nums ...