Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification (Paper reading)

Renrui Zhang,Shanghai AI Laboratory,ECCV2022,Cited:45,Code,Paper

1. 前言

对比式视觉-语言预训练,也称为CLIP,通过大规模的图像-文本对来学习视觉表示,为zero-shot知识迁移展示了新的范式。它在下游任务上展现出令人瞩目的性能,实现了zeri-shot的知识迁移。为了进一步增强CLIP的适应能力,现有方法提出了微调可学习模块的方法,显著提高了少样本情况下的性能,但也引入了额外的训练时间和计算资源。在本文中,我们提出了一种适用于CLIP的无需训练的少样本分类方法,称为Tip-Adapter。它不仅继承了zero-shot CLIP的无需训练的优势,还能够在性能上与需要训练的方法相媲美。Tip-Adapter通过来自少样本训练集的键-值缓存模型构建适配器,并通过特征检索来更新CLIP中编码的先前知识。除此之外,通过对缓存模型进行微调,Tip-Adapter的性能可以进一步提升,达到在ImageNet上领先的水平,且仅需比现有方法少10倍的微调轮次,既高效又有效。我们在11个数据集上进行了大量的少样本分类实验,以展示我们提出的方法的优越性。

2. 介绍

在这里插入图片描述
我们提出了一种适用于CLIP的无需训练的自适应方法,称为Tip-Adapter,它通过在权重冻结的CLIP模型中附加一种新颖的非参数适配器实现。与现有方法不同,我们的方法不需要额外的训练,而是将适配器设计为一个查询-键缓存模型,使用zero-shot样本数据集。具体而言,Tip-Adapter通过CLIP的视觉编码器提取zero-shot样本图像的视觉特征,并将其相应的标签转换为独热编码。然后,创建一个包含zero-shot样本视觉特征和独热标签的缓存模型,将它们视为配对的键和值。通过缓存模型,与传统的通过随机梯度下降(SGD)进行微调相比,Tip-Adapter的无需训练的构建表现出很高的效率。在推理过程中,测试图像首先计算其与缓存键的特征相似性,然后汇总缓存值以形成适配器的预测,可以将其视为从缓存模型中检索少样本知识。然后,通过残差连接将适配器的预测与原始CLIP的预测相结合。通过这种方式,Tip-Adapter同时利用了来自预训练CLIP和少样本训练数据集的知识。令人惊讶的是,无需训练的Tip-Adapter可以与经过微调的CoOp和CLIP-Adapter表现相当此外,如果我们将缓存键解冻为可学习参数,并进一步进行微调,Tip-Adapter的性能可以在很少的训练轮次内显著提升。我们将这个经过微调的版本称为Tip-Adapter-F,仅需要在ImageNet [10] 上进行 20 轮训练,就能达到与CoOp和CLIP-Adapter所需的 200 轮相媲美的最先进水平。在表1中,我们列出了所有现有方法在ImageNet上进行16-shot分类的性能、训练时间和推理速度的比较,表明我们的方法在准确性和效率之间取得了很好的平衡。
在这里插入图片描述

3. 方法

缓存模块结构: 给定预训练的CLIP模型和一个新的数据集,其中包含K-shot N-class训练样本,用于few-shot样本分类。每个类别中有 K K K个标注图像,表示为 I K I_K IK,并附带其标签 L N L_N LN。我们的目标是创建一个键-值缓存模型作为特征适配器,其中包含 N N N个类别内的few-shot本知识。对于每个训练图像,我们使用CLIP的预训练视觉编码器提取其 C C C L 2 L_2 L2归一化特征,并将其地面真实标签转换为一个 N N N维的独热向量。对于所有 N K N K NK个训练样本,我们将它们的视觉特征和相应的标签向量表示为 F t r a i n ∈ R N K × C F_{train} ∈ R^{NK×C} FtrainRNK×C L t r a i n ∈ R N K × N L_{train} ∈ R^{NK×N} LtrainRNK×N。对于键-值缓存,CLIP编码表示 F t r a i n F_{train} Ftrain被视为键,而独热的地面真实向量 L t r a i n L_{train} Ltrain被用作它们的值。通过这种方式,键-值缓存会记忆从少样本训练集中提取的所有新知识,用于更新预训练CLIP中编码的先验知识。

Tip-Adapter: 构建缓存模型后,可以通过两次矩阵-向量乘法简单实现CLIP的适应。在推断过程中,测试图像的L2归一化特征 f t e s t ∈ R 1 × C f_{test} ∈ R^{1×C} ftestR1×C首先由CLIP的视觉编码器提取,并用作从键-值缓存中检索的查询。查询与键之间的关联可以估计为:
A = e x p ( − β ( 1 − f t e s t F t r a i n T ) ) A = exp(-\beta(1-f_{test}F_{train}^{T})) A=exp(β(1ftestFtrainT))
其中, A ∈ R 1 × N K A ∈ R^{1×NK} AR1×NK,而 β β β代表调节超参数。由于查询和键特征都是L2归一化的,术语 f t e s t F t r a i n T f_{test}F^{T}_{train} ftestFtrainT等同于测试特征 f t e s t f_{test} ftest与所有few-shot训练特征 F t r a i n T F^{T}_{train} FtrainT之间的余弦相似性。采用指数函数将相似性转换为非负值,β调节其锐度。随后,缓存模型的预测可以通过加权查询-键关联的缓存值的线性组合获得,表示为 A L t r a i n ∈ R 1 × N AL_{train} ∈ R^{1×N} ALtrainR1×N。除了从缓存模型中检索的few-shot知识外,预训练CLIP的先前知识通过 f t e s t W c T ∈ R 1 × N f_{test}W^{T}_c ∈ R^{1×N} ftestWcTR1×N计算,其中 W c W_c Wc是从其预训练文本编码器生成的CLIP分类器的权重。通过残差连接混合两个预测,Tip-Adapter计算出测试图像的输出logits,如下所示:
l o g i t s = α A L t r a i n + f t e s t W c T = α φ ( f t e s t F t r a i n T ) L t r a i n + f t e s t W T c logits = \alpha A L_{train} + f_{test}W^{T}_c = \alpha \varphi(f_{test}F^{T}_{train})L_{train} + f_{test}W^{c}_{T} logits=αALtrain+ftestWcT=αφ(ftestFtrainT)Ltrain+ftestWTc
其中, α α α表示残差比率,我们定义 φ ( x ) = e x p ( − β ( 1 − x ) ) φ(x) = exp(−β(1 − x)) φ(x)=exp(β(1x))。因此,TipAdapter的预测包含两个项,前一项自适应地总结了来自few-shot训练数据集的信息,后一项保留了来自CLIP分类器 W c T W^{T}_{c} WcT的先验知识。这两个项由权重 α α α平衡。经验上,如果预训练和下游少样本任务之间的领域差距较大,则将 α α α设置为较大的值,因为需要来自少样本集的更多知识;反之,如果差距较小,则将 α α α设置为较小的值。

Tip-Adapter微调:Tip-Adapter能够通过整合few-shot训练集中的新知识显著提升CLIP的性能。然而,当提供更多样本时,未经过训练的Tip-Adapter逐渐落后于需要训练的CoOp和CLIP-Adapter。为了减小差距并保持效率,我们提出了Tip-Adapter-F。Tip-Adapter-F将缓存模型中的键视为可学习参数的良好初始化,并通过随机梯度下降(SGD)进行微调。在ImageNet 上仅进行了20个时期的微调,Tip-Adapter-F实现了最先进的性能。具体而言,我们解除了缓存键 F t r a i n F_{train} Ftrain的冻结,但仍然冻结了 L t r a i n L_{train} Ltrain的值以及预训练CLIP的两个编码器。其直觉是,更新缓存模型中的键可以提升关联估计,从而能够更准确地计算测试图像与训练图像之间的余弦相似性。相比之下,缓存模型中的值是表示地面真实注释的独热编码,应该保持冻结以充分记忆类别信息。

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

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

相关文章

javaScript:对函数的认识与应用

目录 一.前言 二.函数介绍 A.函数的分类 1.自定义函数 示例 2.匿名函数 声明匿名函数 计时器也是匿名函数 3.立即执行函数 解释 示例 B.函数的返回值 没有参数,没有返回值的函数 示例 没有参数,有返回值的函数 示例 有参数,有…

【Leetcode】108. 将有序数组转换为二叉搜索树

一、题目 1、题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-1…

java学习——二叉树

二叉树的种类: 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层…

spring源码分析bean的生命周期(下)

doGetBean()执行过程 createBean()执行过程 一、DependsOn注解 spring创建对象之前会判断类上是否加了DependsOn注解,加了会遍历然后会添加到一个map中,spring会先创建DependsOn注解指定的类 二、spring类加载器 在合并BeanDefinition,确定…

时序数据库influxdb笔记

官方资料 https://docs.influxdata.com/influxdb/v2.7/install/?tLinux https://www.influxdata.com/influxdb/ 安装 1、linux平台下 1)下载 2)解压 3)添加账户( adduser influx) 4)设置目录权限 5…

操作符详解(1)

1. 操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 2. 对…

技术文档如何在线搭建网页形式,方便编辑与管理分享其他人员?

搭建在线技术文档网页形式的平台可以方便编辑、管理和分享给其他人员,促进团队的协作和知识共享。 搭建在线技术文档网页形式的步骤和具体操作的详细介绍: 1. 选择适合的平台 首先,需要选择适合搭建在线技术文档网页形式的平台。市面上有很…

深入完整的带你了解java对象的比较

目录 元素的比较 1.基本类型的比较 2.对象比较的问题 1.运行结果 2.疑问 3.原因 对象的比较 1.覆写基类的equals 2.基于Comparble接口类的比较 3.基于比较器比较 4.三种方式对比 元素的比较 1.基本类型的比较 在Java 中,基本类型的对象可以直接比较大…

dockerfile的概念

目录 一.Dockerfile 概念 1.1 docker镜像的分层 二.Docker镜像的创建 2.1基于已有的镜像创建 2.2基于本地模板创建 2.3基于dockerfile创建 2.3.1dockerfile 结构(四部分) 三.Dockerfile操作指令 3.1ENTRYPOINT指令 3.2CMD 与entrypoint 四.ADD和copy区别 五.镜像分层的原…

Docker运行Nacos容器,过一会就报错`UnsatisfiedDependencyException`

Docker运行Nacos容器,过一会就报错UnsatisfiedDependencyException 问题背景: 最近要上线一个项目,由于要使用Nacos作为服务注册中心,为了方便,我就打算直接使用Docker部署Nacos,没想到Nacos启动没一会就嗝…

spring cloud 之 dubbo nacos整合

整体思路: 搭建本地nacos服务,详见docker安装nacos_xgjj68163的博客-CSDN博客 共三个工程,生产者服务、消费者服务、生产者和消费者共同依赖的接口工程(打成jar,供生产者和消费者依赖); …

javaScript:常用的js字符串方法

目录 一.前言 二.字符串方法 1.charAt(num) 获取字符串指定位置上的字符 解释 示例 注意 2.length属性 获取字符串长度 解释 示例讲解 3.substring()字符串的截取 解释 特点 示例 4.slice()字符串截取 解释 特点 示例 应用 单行文本加省略号 字符串劫…

7-5 螺旋方阵

分数 20 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 所谓“螺旋方阵”,是指对任意给定的N,将1到NN的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入NN的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在…

STM32 CubeMX (第一步Freertos任务管理:创建、删除、挂起、恢复)

STM32 CubeMX Freertos STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复) STM32 CubeMX Freertos前言一、STM32 CubeMX 配置时钟树配置HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基&#xff09…

css学习1

1、样式定义如何显示元素。 2、样式通常保存至外部的css文件中。 3、样式可以使内容与表现分离。 4、css主要有两部分组成:选择器与一条或多条声明。 选择器通常为要改变的html元素,每条声明由一个属性和一个值组成。每个属性有一个值,属性…

网络通信原理UDP协议(第五十课)

UDP协议:用户数据包协议,无连接、不可靠,效率高 字段长度描述Source Port2字节标识哪个应用程序发送(发送进程)。Destination Port2字节标识哪个应用程序接收(接收进程)。Length2字节UDP首部加上UDP数据的字节数,最小为8。Checksum2字节覆盖UDP首部和UDP数据,是可…

[Docker] Windows 下基于WSL2 安装

Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。 1. 开启虚拟化 进入系统BIOS(AMD 为 SVM;Intel 为 Intel-vt)改为启用(enable) 2. 开启WSL 系统设置->应用->程序和功能->…

浅拷贝与深拷贝

作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅…

《Linux运维总结:Centos7.6之OpenSSH7.4p1升级版本至9.4p1》

Centos通过yum升级OpenSSH 在官方支持更新的CentOS版本,如果出现漏洞,都会通过更新版本来修复漏洞。这时候直接使用yum update就可以升级版本。 yum -y update openssh 但是,CentOS更新需要有一段时间,不能在漏洞刚出来的时候就有…

最长公共子序列——力扣1143

解法:动态规划 int longestCommonSubsequence(string text1, string text2){int m=text1.size(), n=text2.size