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

文章目录

  • 【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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第一次组会汇报(2023/11/18)

目录 一,浅谈学习规划 二, 两个比较典型的注意力机制 ㈠SEnet ⒈结构图 ⒉机制流程讲解 ⒊源码(pytorch框架实现)及逐行解释 ⒋测试结果 ㈡CBAM ⒈结构图 ⒉机制流程讲解 ⒊源码(pytorch框架实现)…

Docker命令

1. 基础命令 # 启动docker systemctl start docker # 关闭docker systemctl stop docker # 开机自启动docker systemctl enable docker 2. 镜像 ● 拉取centos镜像 docker pull 镜像名[:tag] 示例:docker pull centos:centos7 ● 查看本地主机所有镜像 docker i…

【刷题专栏—突破思维】LeetCode 138. 随机链表的复制

前言 随机链表的复制涉及到复制一个链表,该链表不仅包含普通的next指针,还包含random指针,该指针指向链表中的任意节点或空节点。 文章目录 原地修改链表 题目链接: LeetCode 138. 随机链表的复制 原地修改链表 题目介绍&#xf…

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

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

Java中的集合内容总结——Collection接口

集合概述 Java 集合可分为 Collection 和 Map 两大体系: Collection接口:用于存储一个一个的数据。 List子接口:用来存储有序的、可以重复的数据(主要用来替换数组,"动态"数组) 实现类&#xf…

python的文件目录操作 1

我们在实际开发中,经常需要对文件进行读取、遍历、修改等操作,通过 python 的标准内置os模块,能够以简洁高效的方式完成这些操作。常见的操作整理如下: 文件夹操作:包括文件夹的创建、修改(改名/移动&…

JS进阶——深入面向对象

1、编程思想 1.1 面向过程编程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的一次调用就可以了。 1.2 面向对象编程(oop) 面向对象是把事务分解成为一个个对象,然…

【Hello Go】Go语言复合类型

复合类型 分类指针基本操作new函数指针作为函数的参数 数组概述操作数据数组初始化数组比较在函数之间传递数组 slice概述切片的创建和初始化切片操作切片和底层数组关系内建函数appendcopy 切片作为函数传参 map概述创建和初始化常用操作赋值遍历 删除map作函数参数 结构体结构…

『 MySQL数据库 』数据库之表的约束

文章目录 前言 💻空属性约束(非空约束) 🔖default约束(默认值约束,缺省) 🔖列描述comment 🔖数字类型长度zerofill 🔖主键primary key 🔖📍 追加主键 📍📍 删除主键 &…

TensorRt推理加速框架Python API服务器部署教程以及运行Helloworld程序

一、确认cuda工具包和n卡相关驱动是否安装 在终端中输入以下命令: nvcc -V如果出现以下提示,则已经成功安装 在终端中输入以下命令: nvidia-smi如果出现即为成功,我在这里就不去介绍怎么下载cuda和驱动怎么下载了,…

2023最新最全【OpenMV】 入门教程

1. 什么是OpenMV OpenMV 是一个开源,低成本,功能强大的 机器视觉模块。 OpenMV上的机器视觉算法包括 寻找色块、人脸检测、眼球跟踪、边缘检测、标志跟踪 等。 以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上&a…

Alibaba Nacos注册中心源码剖析

Nacos&Ribbon&Feign核心微服务架构图 架构原理: 微服务系统在启动时将自己注册到服务注册中心,同时对外发布 Http 接口供其它系统调用(一般都是基于Spring MVC)服务消费者基于 Feign 调用服务提供者对外发布的接口&…

在国内购买GPT服务前的一定要注意!!!

本人已经入坑GPT多日,从最开始的应用GPT到现在的自己研发GPT,聊聊我对使用ChatGPT的一些思考,有需要使用GPT的朋友或者正在使用GPT的朋友,一定要看完这篇文章,可能会比较露骨,也算是把国内知识库、AI的套路…

清华学霸告诉你:如何自学人工智能?

清华大学作为中国顶尖的学府之一,培养了许多优秀的人才,其中不乏在人工智能领域有所成就的学霸。通过一位清华学霸的经验分享,揭示如何自学人工智能,帮助你在这场科技浪潮中勇往直前。 一、夯实基础知识 数学基础:学习…

LabVIEW和NIUSRP硬件加快了认知无线电开发

LabVIEW和NIUSRP硬件加快了认知无线电开发 对于电视频谱,主用户传输有两种类型:广播电视和节目制作和特殊事件(PMSE)设备。广播塔的位置已知,且覆盖电视传输塔(复用器)附近的某个特定地理区域(称为排除区域…

2.项目疑问

Day01 1.前后端分离项目的全局异常处理怎么做 使用ControllerAdviceExceptionHandler(类.class)来实现异常处理 ControllerAdvice: Controller增强器。将异常处理器应用到所有的控制器 ExceptionHandler:异常处理器,只要发生异…

使用SpringBoot Actuator监控应用

使用SpringBootActuator监控应用 微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进 行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个…

【好奇心驱动力】ESP8266驱动SG90舵机开关灯

0.前言 ESP8266弄丢了好几个都忘记放在哪,重新买了个typeC接口的方便多了,看到驱动SG90舵机作为智能开关,简单复现了一下,代码比较简单,没有连接小爱同学或者其他语音助手。 1.实验方法 ESP8266连接SG90舵机&#x…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

参考:https://www.cnblogs.com/sam-snow-v/p/15917898.html eclipse链接SQL Server出现问题 笔者使用Open JDK 17,SQL Server 2016,项目中使用JPA操作数据库。测试环境没问题,生产环境出现如题所示“驱动程序无法通过使用安全套接…

趣学python编程 (二、计算机硬件和用途介绍)

1944年,美籍匈牙利数学家 冯诺依曼 提出计算机基本结构和工作方式的设想,为计算机的诞生和发展提供了理论基础。时至今日,尽管计算机软硬件技术飞速发展,但计算机本身的体系结构并没有明显的突破,当今的计算机仍属于冯…