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

news2024/9/24 9:26:29

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.coloradmin.cn/o/908242.html

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

相关文章

(三)Linux中卸载docker(非常详细)

docker 卸载 使用yum安装docker 如需卸载docker可以按下面步骤操作: 1、停止docker服务 systemctl stop docker 2、查看yum安装的docker文件包 yum list installed |grep docker 3、查看docker相关的rpm源文件 rpm -qa |grep docker 4、删除所有安装的docke…

python 开发环境(PyCharm)搭建指南

Python 的下载并安装 参考:Python基础教程——搭建Python编程环境 下载 Python Python 下载地址:官网 (1)点击【Downloads】>>>点击【Windows】>>>点击【Python 3.x.x】下载最新版 Python; Pyt…

linux学习(软硬链接+静态库)[15]

软硬链接 软链接(symbolic link)和硬链接(hard link)是操作系统中用于创建文件或目录之间关联的两种方式。 软链接是一个特殊的文件,它包含了指向目标文件或目录的路径。软链接可以跨文件系统,并且可以指…

vue3+ts+vite项目页面初始化loading加载效果

简介 一分钟实现 vue-pure-admin 同款项目加载时的 loading 效果 一、先看效果 1.1 静态效果 1.2 动态效果 二、上代码 核心代码在body里面&#xff0c;代码中已标明。找到你项目的 index.html &#xff0c;复制粘贴进去即可 <!DOCTYPE html> <html lang"en…

购车小记:辅助驾驶(锋兰达双擎领先版(14W落地)/锐放双擎先锋版(心里预期13W落地))

文章目录 引言I 试驾L2辅助驾驶II 优惠2.1 补贴2.2 坚持免息2.3 礼包III 车型对比3.1 锐放双擎先锋3.2 锋兰达双擎领先版引言 最近想买辆代步车,关注了锐放、锋兰达。 记录下心得。 流程:多家店对比落地价、礼包、政府补贴;合同没有确定不交意向金。 不要因为价格优惠/政府…

vue3-ts- element-plus新增组件-过滤

新增组件-所有值为空时过滤 <el-form-item label"家庭成员"><divclass"username-box"v-for"(item, index) in form.namelist":key"index"><div>姓名&#xff1a;<el-input v-model"item.name" placeho…

【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)

HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows S&P-2019 伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学 Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of susp…

Redis有什么作用?面试题答案

参考答案 Redis是一种开源的内存数据库,它具有多种作用和用途。以下是Redis的主要作用: 缓存:Redis最常见的用途是作为缓存存储,将常用的数据存储在内存中,以提高读取速度。由于Redis是基于内存的,因此读取操作非常快速,适用于需要频繁读取的应用程序。 数据库:Redis可…

无人机工程安全巡检:主要应用与实施策略

无人机工程安全巡检是指使用无人机技术&#xff0c;对工程项目进行系统的、周期性的监测和检查&#xff0c;以确保工程的安全性、稳定性及其与设计的符合性。这包括但不限于建筑物、桥梁、道路、隧道、大坝等各种大型工程项目。无人机工程安全巡检不仅大大提高了效率&#xff0…

Revit 3D高效处理:cad exchanger sdk 3.21 Crack

3D 格式概述&#xff1a;Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit&#xff1f; Autodesk Revit 是一款流行的 CAD 软件&#xff0c;重点关注 BIM&#xff0c;被建筑师、工…

Mybatis模糊查询的问题

使用${}方式模糊查询&#xff0c;出错。 mapper 对应的 xml&#xff0c;注释掉的两种方式都可以得到数据&#xff0c;只有第三种出错 测试方法 结果 不知道为啥会出现这个 %root%&#xff0c;使用其他两种方式结果没问题&#xff0c;不知道问题出在哪里了。

opencv进阶11-LBPH 人脸识别(人脸对比)

人脸识别的第一步&#xff0c;就是要找到一个模型可以用简洁又具有差异性的方式准确反映出每个人脸的特征。识别人脸时&#xff0c;先将当前人脸采用与前述同样的方式提取特征&#xff0c;再从已有特征集中找出当前特征的最邻近样本&#xff0c;从而得到当前人脸的标签。 OpenC…

Linux知识点 -- Linux多线程(二)

Linux知识点 – Linux多线程&#xff08;二&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;二&#xff09;一、线程互斥1.背景概念2.多线程访问同一个全局变量3.加锁保护4.问题5.锁的实现 二、线程安全1.可重入与线程安全2.常见情况3.可重入与线程安全的联系 三…

【力扣每日一题】2023.8.17 切披萨的方案数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个二维数组来表示一个披萨&#xff0c;其中‘A’表示披萨上的苹果。 让我们切k-1刀&#xff0c;把披萨切成 k 份&#xff0…

Eslint error, configuration for rule “import/no-cycle“ is invalid

可以参考stackoverflow.comEslint error, configuration for rule "import/no-cycle" is invalid他的意思是有个∞符号不支持&#xff0c;解决方案&#xff0c;把 eslint-plugin-import 的版本增加到 ^2.22.1&#xff0c;重新下载依赖包如&#xff1a;

【分布式共识】Raft算法 选举一个领导者

Raft算法是通过一切以领导者为准的方式&#xff0c;实现一系列值的共识和各节点日志的一致 在分布式系统中&#xff0c;节点可能出现宕机、网络故障等&#xff0c;所以在3个节点的分布式系统中&#xff0c;如何选举出一个Leader节点。比如我们部署一个ZK集群。 成员 Leader领…

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

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

SpringBoot实现热部署/加载

在我们修改完项目代码后希望不用重启服务器就能把项目代码部署到服务器中(也就是说修改完项目代码后不用重启服务器修改后的项目代码就能生效)。 一、实现devtools原理 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-…

内网渗透神器CobaltStrike之凭据的导出与存储(八)

简介 Cobalt Strike 是一个流行的渗透测试工具&#xff0c;主要用于模拟高级持续性威胁&#xff08;APT&#xff09;的攻击。它提供了许多功能来操作、持久化和操纵受害者机器。其中&#xff0c;凭据的导出和存储是渗透测试中的一个重要步骤。 凭据导出: Cobalt Strike 通过其…

Vue前端封装一个任务条的组件进行使用

任务条 样式 代码 父组件 <articleSteps :tabs"tabs" :tabs-active-name"tabsActiveName" /><div class"drawer__footer"><el-button v-if"tabsActiveName 1 || tabsActiveName 2" click"backClick">…