CLIP Surgery论文阅读

CLIP Surgery for Better Explainability with Enhancement in Open-Vocabulary Tasks(CVPR2023)

M = norm ⁡ ( resize ⁡ ( reshape ⁡ ( F i ˉ ∥ F i ‾ ∥ 2 ⋅ ( F t ∥ F t ‾ ∥ 2 ) ⊤ ) ) ) M=\operatorname{norm}\left(\operatorname{resize}\left(\operatorname{reshape}\left(\frac{\boldsymbol{F}_{\bar{i}}}{\left\|\boldsymbol{F}_{\underline{i}}\right\|_{2}} \cdot\left(\frac{\boldsymbol{F}_{t}}{\left\|\boldsymbol{F}_{\underline{t}}\right\|_{2}}\right)^{\top}\right)\right)\right) M=norm resize reshape Fi 2Fiˉ( Ft 2Ft)
重点是CLIP的图可视化,上面是CLIP Surgery可视化Similarity map的公式

贡献:

https://picx.zhimg.com/80/v2-cf9998060d51d70d47669260a0de3801_720w.webp?source=1940ef5c
1.发现CLIP可视化结果(相似度图)和人的感知是反的,集中在背景(flatten transformer做q可视化,集中在前景
),认为是QK self-attention导致,最相似的token并不是本身或者相同语义区域,而是一些背景的噪声。而用vv attention就不会出现错误的关联。出现这种情况的原因主要是训练的pooling不合适,提出了CLIP Architecture Surgery,如模型图所示

x ^ i + 1 = { None  i < d f attn  ( x i , { ϕ v } ) + x i i = d , f attn  n v ( x i , { ϕ v } ) + x ^ i i > d , ∀ T & A x i + 1 = { f F F N ( x i ′ ) + x i ′ , s.t.  x i ′ = f a t t n q k ( x i , { ϕ q , ϕ k , ϕ v } ) + x i , ∀ T & A f res  ( x i ) + x i , ∀ R e s \begin{array}{l} \hat{x}_{i+1}=\left\{\begin{array}{ll} \text { None } & i<d \\ f_{\text {attn }}\left(x_{i},\left\{\phi_{v}\right\}\right)+x_{i} & i=d, \\ f_{\text {attn } n_{v}}\left(x_{i},\left\{\phi_{v}\right\}\right)+\hat{x}_{i} & i>d \end{array}, \forall T \& A\right. \\ x_{i+1}=\left\{\begin{array}{ll} f_{F F N}\left(x_{i}^{\prime}\right)+x_{i}^{\prime}, \text { s.t. } & \\ x_{i}^{\prime}=f_{a t t n_{q k}}\left(x_{i},\left\{\phi_{q}, \phi_{k}, \phi_{v}\right\}\right)+x_{i} & , \forall T \& A \\ f_{\text {res }}\left(x_{i}\right)+x_{i} & , \forall R e s \end{array}\right. \\ \end{array} x^i+1=  None fattn (xi,{ϕv})+xifattn nv(xi,{ϕv})+x^ii<di=d,i>d,T&Axi+1= fFFN(xi)+xi, s.t. xi=fattnqk(xi,{ϕq,ϕk,ϕv})+xifres (xi)+xi,T&A,Res

2.发现CLIP可视化有非常多的噪声响应
请添加图片描述
算取一个冗余特征,多类的情况显著的类会影响其他的类(带偏了)。所以我们用类之间的分数作为权重,对每个特征做类别的加权,来抑制显著类的影响。然后在类别维度(Nt,text token的数量)求均值作为冗余特征,并对每个特征减去冗余特征,然后求和得到余弦相似度。对于单个类来说,如交互式分割和多模态可视化,则用空文本特征作为冗余特征(知乎上看到这句话才明白,看的一脸懵逼)。category dimension 是(Nt)

具体如下:

  • 先算出multiplied features[Ni,Nt,C]: F m = F ^ i ∥ F ^ i ∥ 2 ⊙ F ^ t ∥ F ^ t ∥ 2 F_m=\frac{\hat{F}_i}{\|\hat{F}_i\|_2}\odot\frac{\hat{F}_t}{\|\hat{F}_t\|_2} Fm=F^i2F^iF^t2F^t

沿C方向做逐元素乘法

  • 再算similarity score[1,Nt]: s = s o f t m a x ( F c ∥ F c ∥ 2 ⋅ ( F t ∥ F t ∥ 2 ) ⊤ ⋅ τ ) s=softmax(\frac{F_c}{\|F_c\|_2}\cdot(\frac{F_t}{\|F_t\|_2})^\top\cdot\tau) s=softmax(Fc2Fc(Ft2Ft)τ)

[CLS]乘token[Nt,C]算相似度

  • 再算category weight[1,Nt]: w = s m e a n ( s ) w=\frac s{mean(s)} w=mean(s)s
  • 再算冗余特征common and redundant features[Ni,1,C]: F r = m e a n ( F m ⊙ e x p a n d ( w ) ) F_r=mean(F_m\odot expand(w))\mathrm{~} Fr=mean(Fmexpand(w)) 

沿C方向做,空文本相似度最大的?

  • 最后算common and redundant features[Ni,Nt]: S = s u m ( F m − e x p a n d ( F r ) ) S=sum(F_m-expand(F_r))~ S=sum(Fmexpand(Fr)) (去掉冗余特征)

模型

不参与训练,只在推理
请添加图片描述

实验

错误的self-attention也能解释为什么有人删掉CLIP中ResNet的最后一个self-attention可以做可视化。但是ViT每层都是self-attention,所以现有的方法在ViT上表现很差(全是self-attention删最后一层没用)

开放多标签分类
除此之外我们的算法做open-vocabulary的多标签分类也有效果,可以作为一种后处理任意插到算法里面来提高mAP。原理是抑制冗余特征后会让误报少一些。注意,单类没有效果,因为冗余特征是一个common bias,不改变单张图别之间的位次,而是影响跨图之间的排位来减少误报

请添加图片描述
多模态可解释性
做了多模态的可解释性,解释CLIP训练过程中文本和图片是怎么匹配的,也发现了一些有趣的现象。比如CLIP训练数据一般关注部分物体,如第一张图片只关注了自行车。而且CLIP对文本也有一定的感知,如最后一张。对于文本的解释,一些不重要的词如 ‘in’ ‘the’ ‘.’ 也经常也有高响应,而且结束符[end]是最高频的。这说明clip会把全局特征编码到固定的token中。
请添加图片描述

ref

https://www.zhihu.com/question/595372017

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

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

相关文章

【汇编】[BX]和loop指令(学习笔记)

一、[BX] 利用BX寄存器存储偏移地址与DS配合使用 在DEBUG中可以使用mov al,[0]&#xff0c;但在ml编译器里面会变成mov al,0 可以使用BX寄存器来解决 mov bx,0 mov al,[bx]补充 1、使用描述性符号()表示取内容 2、使用idata表示常量 二、loop循环指令 1、loop的概述 需要…

【深度学习】pytorch——神经网络工具箱nn

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 深度学习专栏链接&#xff1a; http://t.csdnimg.cn/dscW7 pytorch——神经网络工具箱nn 简介nn.Modulenn.Module实现全连接层nn.Module实现多层感知机 常用神经网络层图像相关层卷积层&#xff08;Conv&#xff…

Tensor.scatter_add_函数解释:

Tensor.scatter_add_(dim, index, src) → Tensor out.scatter_add_(dim, index, src) 1.参数&#xff1a; dim (int) – 哪一dim进行操作 index (LongTensor) – 要在的out的哪一index进行操作 src (Tensor) – 待操作的源数字 2.官方的解释的操作如下&#xff1a; 3.例…

【JAVA学习笔记】63 -坦克大战1.3-敌方发射子弹,击中坦克消失并爆炸,敌人坦克随机移动,规定范围限制移动

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter18/src/com/yinhai/tankgame1_3 〇、要求 增加功能 1.让敌人的坦克也能够发射子弹(可以有多颗子弹) 2.当我方坦克击中敌人坦克时&#xff0c;敌人的坦克就消失,如果能做出爆炸效果更好. …

c-CoSe2-CoN助力Zn-空气电池

硒化钴&#xff08;CoSe2&#xff09;的相变可有效调节其固有的电催化活性&#xff0c;但提高CoSe2的电导率和催化活性/稳定性还是一个挑战。异质结构工程可优化界面性能&#xff0c;促进CoSe2基催化剂上氧电催化的动力学。 基于此&#xff0c;黑龙江大学邹金龙教授等人报道了…

再谈Android重要组件——Handler(Native篇)

前言 最近工作比较忙&#xff0c;没怎么记录东西了。Android的Handler重要性不必赘述&#xff0c;之前也写过几篇关于hanlder的文章了&#xff1a; Handler有多深&#xff1f;连环二十七问Android多线程&#xff1a;深入分析 Handler机制源码&#xff08;二&#xff09; And…

游戏专用....

游戏专用&#xff1a;星际战甲 APP窗口以及键鼠监控 import tkinter as tk import time,threading from pynput.keyboard import Key,Listener import pynput.keyboard as kbclass myClass:def __init__(self):self.root tk.Tk()self.new_text self.flag threading.Event()…

2022 ccpc广州站 E. Elevator

Problem - E - Codeforces E. Elevator 题意&#xff1a;有一栋有m层的楼&#xff0c;有n部电梯从1到m。第i个电梯再ai时刻上升。每一层有一个按钮&#xff0c;可以让第一个到达该层的电梯停1秒&#xff0c;如果有多个电梯同时到某一层&#xff0c;下标靠前的被视为第一台到的…

pyspark连接mysql数据库报错

使用pyspark连接mysql数据库代码如下 spark_conf SparkConf().setAppName("MyApp").setMaster("local")spark SparkSession.builder.config(confspark_conf).getOrCreate()url "jdbc:mysql://localhost:3306/test?useUnicodetrue&characterE…

在JavaScript中,使用var、let和const声明变量有什么区别?

在 JavaScript 中&#xff0c;使用 var、let 和 const 声明变量有以下区别&#xff1a; 1&#xff1a;作用域的差异&#xff1a; var 声明的变量存在函数作用域或全局作用域&#xff0c;它们在整个函数或全局范围内都是可访问的。let 和 const 声明的变量存在块级作用域&…

C语言习题整理①

一些C语言习题的整理。 目录 一、判断质数 二、判断回文数 三、判断水仙花数 四、输出乘法表 五、输出杨辉三角 一、判断质数 质数是指在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数的自然数。质数又称素数。一个大于1的自然数&#xff0c;除了1和它自身…

为什么有了MAC地址,还需要IP地址?

解释 搞懂这个问题&#xff0c;首先需要了解交换机的功能 交换机内部有一张MAC地址映射表&#xff0c;记录着MAC地址和端口的对应关系。 如果A要给B发送一个数据包&#xff0c;构造如下格式的数据结构&#xff1a; 到达交换机时&#xff0c;交换机内部通过自己维护的 MAC 地…

Angular-07:组件生命周期

三个阶段&#xff1a; ① 挂载阶段1.1 constructor1.2 ngOnInit ② 更新阶段2.1 ngOnChanges2.2 ngAfterViewInit2.3 ngAfterContentInit2.4 ngDoCheck ③ 卸载阶段3.1 onOnDestroy ④ 在组件中添加所有方法并打印 该表按照执行顺序编写 编号函数名实现名说明1constructorcons…

uniapp自定义权限菜单,动态tabbar

已封装为组件&#xff0c;亲测4个菜单项目可以切换&#xff0c; 以下为示例&#xff0c;根据Storage 中 userType 的 值&#xff0c;判断权限菜单 <template><view class"tab-bar pb10"><view class"tabli" v-for"(tab, index) in ta…

叁[3],感兴趣区域ROI

1&#xff0c;简介 ROI&#xff0c;感兴趣区域&#xff08;region of interest)&#xff0c;截取图像 2&#xff0c;获取方法 方法1&#xff1a;使用Rect cv::Mat srccv::imread("*.bmp");//读取原图 cv::Mat matROI src(cv::Rect(100,200,50,100));//截取原图&am…

C—结构体,动态分配内存存储字符串

#define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:4996)&#xff1b; //上面这一行必须加&#xff0c;否则strcpy不能用#include<stdio.h> #include<string.h>typedef struct LNode {char* name;int age; }LNode,*LinkNode;int main() {LNode node;LinkNo…

DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)

文章目录 任务要求原始代码CPP文件代码着色器文件代码 效果展示 任务要求 本篇文章是中国农业大学虚拟现实课程的一次作业内容&#xff0c;需要对五个茶壶模型使用不同的光照进行着色和渲染&#xff0c;然后旋转展示。 本人的代码也是在其他人的代码的基础上修改来的&#xf…

centos获取服务器公网ip

查看公网IP 用下面几个命令&#xff1a; #curl ifconfig.me #curl icanhazip.com #curl cip.cc

前端框架Vue学习 ——(五)前端工程化Vue-cli脚手架

文章目录 Vue-cliVue项目-创建Vue项目-目录结构Vue项目-启动Vue项目-配置端口Vue项目开发流程 Vue-cli 介绍&#xff1a;Vue-cli 是 Vue 官方提供的一个脚手架&#xff0c;用于快速生成一个 Vue 的项目模版 安装 NodeJS安装 Vue-cli npm install -g vue/cliVue项目-创建 图…

《深入理解分布式事务:原理与实战》读书笔记

Mysql事务 锁升级 行锁升级表锁&#xff1a;如果不是索引查找&#xff0c;或者索引失效&#xff0c;此时需要全表扫描&#xff0c;会升级为锁整张表。 为什么Mysql要把扫描到的每一行以及其间隙都加锁&#xff1f;这是为了防止幻读出现。幻读导致的问题是破坏了一致性声明&am…