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

论文: 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. 花样玩转“所见即所得”的可视化开发UI

    随着技术的发展,用户对软件的界面美观度和交互体验的要求越来越高.在这样的背景下,可视化开发UI(User Interface)成为了提升用户体验和开发效率的重要工具. 通过图形界面来设计和构建用户界面 ...

  2. SeaTunnel JDBC DB2 Sink Connector支持的工作原理,快来学习吧!

    DB2是IBM的一款关系型数据库管理系统,JDBC DB2 Source Connector是一个用于通过JDBC读取外部数据源数据的连接器.Apache SeaTunnel如何支持JDBC DB2 ...

  3. 面试题:写一个遍历ArrayList的时候,删除一个元素的例子?并说说原理。

    代码实现 方法一:for循环 public static void main(String[] args) { ArrayList<String> list = new ArrayList ...

  4. GPL前世今生

    从事Linux开发的朋友一定都听过GPL,那么到底什么是GPL呢?他有什么作用呢?本文给大家做详细讲解. 一.GNU/GPL 在讲解GPL之前,我们必须先了解什么是GNU? 1. 什么是GNU GNU ...

  5. Homebrew 使用

    使用 brew install brew uninstall|remove|rm brew list # *显示已安装软件列表 brew upgrade # 更新 Homebrew brew sear ...

  6. 链接器 ld 名称的由来

    Linker 通常缩写为 LD,这是因为在 Unix 和类 Unix 系统中,ld 是链接器的常用命令名称.这个命名可以追溯到 Unix 系统的早期发展历史. 历史背景 Unix 早期:在 Unix ...

  7. c程序设计语言 by K&R(二)指针与数组

    指针与数组 1. c语言只有值传递,没有引用传递 可通过指针交换 #include <stdio.h> #include <stdlib.h> void swap(int* a ...

  8. SQL Server Aggregate Functions

    SUM 如果 row count = 0 返回的是 NULL 而不是 0 哦, 如果要 0 可以使用 ISNULL 来处理 如果其中一些 row 是 NULL, 那无所谓, 它只会 SUM 数字出来 ...

  9. 记一次 公司.NET项目部署在Linux环境压测时 内存暴涨分析

    一:背景 讲故事 公司部署在某碟上的项目在9月份压测50并发时,发现某个容器线程.内存非正常的上涨,导致功能出现了异常无法使用.根据所学,自己分析了下线程和内存问题,分析时可以使用lldb或者wind ...

  10. 揭秘最为知名的黑客工具之一: Netcat!适用安全测试、渗透测试、黑客攻击!

    在网络安全领域,黑客工具一直备受关注.它们既可以被用于攻击,也可以用于防御.本文将为大家揭秘一款知名的黑客工具: Netcat. 1.Netcat是什么? Netcat被誉为"网络的瑞士军刀 ...