基于Adapter用CLIP进行Few-shot Image Classification

news2025/1/19 8:10:52

文章目录

  • 【ECCV 2022】《Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification》
  • 【NeuIPS 2023】《Meta-Adapter: An Online Few-shot Learner for Vision-Language Model》


【ECCV 2022】《Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification》

\quad 先来说一些Few-shot 分类任务是干嘛的:在只有很少数量的训练样本(通常是很小的数据集,N-way K-shot)的情况下,模型需要对新的、未见过的类别进行分类。比如,在下图的Tip-Adapter网络结构中,输入是N-way K-shot的图像和labels(文本),将他们输入到网络中,需要对未见过的test image进行分类,也就是在这些类别中找到它属于的类别。
\quad 再来说一下CLIP-Adapter是怎么做的。与之前的prompt tuning(CoOp)方法不同,CLIP-Adapter提出用特征适配器来适应视觉语言模型。CLIP Adapter仅在视觉或语言主干的最后一层之后添加了两个额外的线性层,并通过残差连接将原始Zero-Shot视觉或语言嵌入与相应的网络调整特征混合。通过这种“残差样式混合”,CLIP Adapter可以同时利用原始CLIP中存储的知识 和来自Few-Shot训练样本的新学习的知识 。下图是CLIP-Adapter与之前方法的对比,Av()和At()是两个MLP,W和f分别是分别是CLIP生成的文本(label)特征和图像特征。两者经过MLP后再连接,之后再预测。可以看出,这个范式是需要训练的。
在这里插入图片描述
\quad Tip-Adapter这篇文章认为,CoOp和CLIP-Adapter为了fine-tuning参数,会引入额外的计算资源,因此本文的目的在于设计一种training-free的few-shot分类方法。
在这里插入图片描述

\quad Tip-Adapter其实就是一个training-free clip-adapter,它使用cache model中的数据对分类器进行初始化。对于Few-shot的样本,使用CLIP等预训练的模型对他们进行编码,得到的特征作为Cache Model的Keys和Values。
\quad 对于test image,使用CLIP分别提取它的图像特征和文本特征。图像特征当作query,在cache model中找寻Few-shot knowledge中的相似信息,然后乘以一个稀疏α与CLIP‘s的知识进行残差连接,进行最后的预测。

【NeuIPS 2023】《Meta-Adapter: An Online Few-shot Learner for Vision-Language Model》

一、动机
\quad 对比视觉语言预训练(如CLIP)在建模开放世界的视觉概念方面显示出了令人印象深刻的潜力,这有利于多种视觉任务,包括图像识别和开放词汇感知。通过构建基于视觉类别的提示,CLIP显示了有效的few-shot图像分类能力和对看不见的数据的泛化能力。近年来,基于CLIP的few-shot learning已经获得了越来越多的研究关注。受feature adapters的成功(《Parameter-efficient transfer learning for nlp》)和NLP的prompt tuning的启发,一系列针对CLIP的few-shot方法被提出。
\quad 根据是否需要对unseen类别的few-shot samples进行微调,用于CLIP的Few-shot learning methods可以被分为 offline 和 online 两类方法。offline 方法通过参数优化从few-shot samples中提取知识。即,面对新的数据时,offline 方法需要微调,online 方法不需要微调。离线学习的典型案例是CoOp和CoCoOp,它们通过对few-shot samples进行微调,用learnable continuous tokens取代了CLIP中hand-crafted templates。此外,CLIP-Adapter过从few-shot样本中学习任务特定的知识,为CLIP引入feature adapters。尽管这些额外的组件产生了很有前途的few-shot学习能力,他们也面临着额外的训练开销,并容易极大地过拟合到某一数据分布中。
\quad 为了消除训练开销,一种在线学习(无需微调)方法,叫做Tip-Adapter被提出。该方法提出了一种手工制作的调制功能,可以调整类别嵌入和少镜头视觉嵌入之间的比例。该方法提出了一种hand-crafted modulation function,可以调整category embeddings和few-shot visual embeddings之间的比例。它可以无需微调从few-shot samples中获取知识,并展现出了相对于zero-shot方式的显著提升。但是,由于其复杂的超参数搜索方案,这篇文章发现Tip-Adapter仍然倾向于过拟合到观测数据的分布上,导致有限的泛化能力。因此,与以往的方法不同,这篇试图探索一种新的感知方法:learning an online few-shot learner for CLIP via meta-learning。(即通过元学习,学习一个无需微调的few-shot learner。这种方式很好,即用了few-shot samples,又用了meta-learning,还无需微调。)
\quad 为了实现如此,作者提出了一个Meta-Adapter,用一个 lightweight residual-style network 替换 Tip-Adapter中的 hand-crafted modulation function and searching scheme。offline few-shot learning methods面对unseen类别的few-shot 样本时,需要额外的微调。相反,这篇文章利用了meta-testing mechanism,因此模型的训练和测试数据的类别可以不同。通过使用有限数量的few-shot数据,Meta-Adapter可以被训练以实现few-shot学习能力,它可以进一步泛化到其他unseen数据,并在线地从few-shot samples中提取知识。
\quad 为了实现高效,Meta-Adapter有一个基于gated multi-head attention mechanism的轻量级网络来构造。这个过程可以看作是一个可学习的滤波器,以fine由few-shot图像引导的category embeddings。因为Meta-Adapter不需要额外的微调,它只比zero-shot方式多一点计算量。相对于Tip-Adapter,他缓解了过拟合问题,并展现出了更强的跨数据集泛化性。此外,Meta-Adapter是简单的,可以作为一个即插即用的模块应用到多种CLIP-based方法中,使其成为针对许多open-vocabulary下游任务的versatile solution(通用解决方案)。
\quad 为了验证Meta-Adapter的泛化性,这里执行了一系列的消融实验,包括cross-category generalization within a certain dataset、cross-dataset generalization、cross-task generalization。下图是一些和Tip-Adapter的对比结果。
在这里插入图片描述
二、相关工作
2.1 Vision-Language Model Adaption
\quad 最近的许多工作集中在探索将视觉语言模型adapting下游任务的有效方法,他们可以被分为prompt-tuning methods和feature adapters methods。我们这里主要关注feature adapters methods, CLIP-Adapter 和 Tip-Adapter执行residual feature blending来整合few-shot knowledge和CLIP’s zero-shot knowledge。它们保持CLIP的整体参数被冻结,然后微调一个可接受的小数量的额外权重,这在few-shot图像分类任务上展现出了卓越的结果。此外,通过使用few-shot knowledge来初始化线性权值,Tip-Adapter可以进一步呈现出具有更好性能的无训练方式。然而,这些方法存在过拟合的问题,特别是当source数据集和target数据集之间的domain gap很大时。
2.2 Meta-Learning
\quad 元学习的一个简单解释是“learning-to-learn”,它对应于通过搜索最适合给定task family的算法(归纳偏差)来改进泛化。与此相反,传统的机器学习算法通过随着来自某个单一任务的更多的数据而得到改进。通常,元学习是对从一个任务族中采样的学习实例进行的,这将模拟一个基础学习算法,在从这个任务族中采样的新任务上表现良好。在将视觉语言模型适应下游任务的背景下,元学习可以看作是学习一般的微调算法,在不同的任务或数据集上带来一致的收益。

三、方法
在这里插入图片描述

\quad 在图像分类任务中,logits 通常表示模型对每个可能类别的置信度或分数。
\quad 作者认为,Tip-Adapter严重依赖在target dataset上的超参数搜索,这使它容易在某个数据分布内进行过拟合,并限制其分布外泛化的能力。
\quad 因此,这篇文章抛弃了Tip-Adapter的handcraft modulation function和searching strategy。主要核心点在于一个Meta-Adapter。

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

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

相关文章

什么是缓存雪崩、击穿、穿透?

背景 数据一般是存储于数据库中,数据库中的数据都是存在磁盘上的,磁盘读写的速度相较于内存或者CPU中的寄存器来说是非常慢的了。 如果用户的请求都直接访问数据库的话,请求数量一上来,数据库很容易就崩溃了,所以为了…

LeetCode704.二分查找及二分法

每日一题:LeetCode704.二分查找 LeetCode704.二分查找知识点:二分法解题代码 LeetCode704.二分查找 问题描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中…

Vue3-shallowRef 和 shallowReactive函数(浅层次的响应式)

Vue3-shallowRef 和 shallowReactive函数(浅层次的响应式) shallowRef函数 功能:只给基本数据类型添加响应式。如果是对象,则不会支持响应式,层成也不会创建Proxy对象。ref和shallowRef在基本数据类型上是没有区别的…

CronExpression

CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年]序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JA…

解决终端自暂停的问题 关闭快速编辑模式 python代码暂停

问题描述: 在windows10终端中运行的python出现自暂停或者是点击鼠标后出现暂停,敲回车或空格它才继续运行。 解决方法 注意:windows不能针对所有命令行统一设置,只能单个程序去设置。 半永久 在终端右键点击属性 取消勾选快速…

os.path.join函数用法

os.path.join()是Python中用于拼接文件路径的函数,它可以将多个字符串拼接成一个路径,并且会根据操作系统的规则自动使用合适的路径分隔符。 注:Linux用的是/分隔符,而Windows才用的是\。 该函数属于os.path模块,因此在…

新增文章分类

pojo.Category package com.lin.springboot01.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键NotEmptyprivate String categoryName;//分类名称NotEmptypr…

【Java 进阶篇】唤醒好运:JQuery 抽奖案例详解

在现代社交网络和电商平台中,抽奖活动成为吸引用户、提升用户参与度的一种常见手段。通过精心设计的抽奖页面,不仅可以增加用户的互动体验,还能在一定程度上提高品牌的知名度。本篇博客将通过详细解析 JQuery 抽奖案例,带领你走进…

Visio是什么软件,有哪些好用的Visio平替软件推荐?

1. 什么是Visio? Visio是一款由微软开发的流程图和矢量绘图软件,它可以帮助用户创建各种类型的图表、图示和流程图,从而更好地呈现和传达信息。Visio的功能强大,适用于各种领域,如项目管理、系统设计、流程优化等。…

【Java 进阶篇】插上翅膀:JQuery 插件机制详解

在前端开发中,JQuery 作为一个广泛应用的 JavaScript 库,为开发者提供了丰富的工具和方法,简化了 DOM 操作、事件处理等繁琐的任务。而在这个庞大的生态系统中,插件机制是 JQuery 的一项重要特性,使得开发者能够轻松地…

OpenAI的多函数调用(Multiple Function Calling)简介

我在六月份写了一篇关于GPT 函数调用(Function calling) 的博客https://blog.csdn.net/xindoo/article/details/131262670,其中介绍了函数调用的方法,但之前的函数调用,在一轮对话中只能调用一个函数。就在上周,OpenAI…

【Java 进阶篇】深入理解 JQuery 事件绑定:标准方式

在前端开发中,处理用户与页面的交互是至关重要的一部分。JQuery作为一个广泛应用的JavaScript库,为我们提供了简便而强大的事件绑定机制,使得我们能够更加灵活地响应用户的行为。本篇博客将深入解析 JQuery 的标准事件绑定方式,为…

MySQL数据库下的Explain命令深度解析

Explain是一个非常有的命令,可以用来获取关于查询执行计划的信息,以及如何解释输出。Explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有一定的局限性,并不总是会说出真相,但是它的输出是可以获取的最好信息&…

无需公网IP、简单3步,直连远程NAS实现高速访问

面对NAS远程访问难题 蒲公英旁路组网盒子X1 一招搞定! 无需公网IP、无需设置原有路由 简单3步,即可实现异地组网 更有点对点直连(P2P)模式 不限流量、不限速 传输速率取决于实际网络带宽 贝锐蒲公英X1,无需改变原…

2023年【危险化学品经营单位安全管理人员】考试题及危险化学品经营单位安全管理人员模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试题是安全生产模拟考试一点通总题库中生成的一套危险化学品经营单位安全管理人员模拟试题,安全生产模拟考试一点通上危险化学品经营单位安全管理人员作业手机同步练习。…

JVM虚拟机:CMS垃圾回收器的日志分析

本文重点 本文我们将学习CMS垃圾回收器的日志 使用CMS java -Xms20M -Xmx20M -XX:PrintGCDetails -XX:UseConcMarkSweepGC 类名 日志格式 分析 上面的日志我们分为了两部分,上面表示新生代,下面表示老年代。 ParNew表示年轻代收集器,6144…

Python中位运算符的用法

目录 引言 一、按位与运算符(&) 二、按位或运算符(|) 三、按位异或运算符(^) 四、按位非运算符(~) 五、位移运算符 结论 引言 在Python中,位运算符是一种对二…

学会Bitmap内存管理,你的App内存还会暴增吗?

相信伙伴们在日常的开发中,一定对图片加载有所涉猎,而且对于图片加载现有的第三方库也很多,例如Glide、coil等,使用这些三方库我们好像就没有啥担忧的,他们内部的内存管理和缓存策略做的很好,但是一旦在某些…

C语言开发者的利器:gcc编译命令指南

本文主要介绍gcc编译c语言过程,以及常用命令 文章目录 C语言编译过程1. 预处理(Preprocessing):2. 编译(Compiling):3. 汇编(Assembling):4. 链接&#xff08…

C语言之for while语句详解

C语言之for while语句详解 文章目录 C语言之for while语句详解简介1 while语句1.1while语句的格式1.2 while语句的实践 2 for2.1 for语句格式2.2 for循环的实践 3 do while3.1 do while语句格式3.2 do while循环的实践 3 循环中break和continue3.1 while语句中的break和continu…