CLIP-Adapter: Better Vision-Language Models with Feature Adapters

当前的问题

由于CLIP的过度参数化和缺乏足够的训练样例,简单的微调会导致对特定数据集的过拟合,并且训练过程会非常缓慢由于在所有CLIP层之间的向前和向后传播。

方法

在这里插入图片描述

视觉适配器 A v ( ⋅ ) A_v(\cdot) Av()(包含 W 1 v , W 2 v \textbf{W}^v_1,\textbf{W}^v_2 W1v,W2v)和文本适配器 A t ( ⋅ ) A_t(\cdot) At()(包含 W 1 t , W 2 t \textbf{W}^t_1,\textbf{W}^t_2 W1t,W2t)的设计:
在这里插入图片描述
我们对特征适配器采用残差连接,以避免遗忘预训练CLIP编码的原始知识。采用两个恒定值 α \alpha α β \beta β作为“残差比”,以帮助调整保持原始知识的程度,以获得更好的性能。
在这里插入图片描述
在少量训练中,通过交叉熵损失对 A v ( ⋅ ) A_v(\cdot) Av() A t ( ⋅ ) A_t(\cdot) At()的权值进行优化:
在这里插入图片描述
其中 θ = { W 1 v , W 2 v , W 1 t , W 2 t } \theta=\{\textbf{W}^v_1,\textbf{W}^v_2,\textbf{W}^t_1,\textbf{W}^t_2\} θ={W1v,W2v,W1t,W2t}

结果

对实验的思考:适配器只做了域内(非跨域)的实验,有可能是适配器鲁棒性的不好,相比prompt而言。
在这里插入图片描述在这里插入图片描述

适配器中超参的不足

在这里插入图片描述
超参数 α , β \alpha,\beta α,β对不同数据集影响很大。
作者建议设计一个超参网络 Q Q Q来动态生成超参,即 α , β = Q ( f , W ) \alpha,\beta=Q(f,\textbf{W}) α,β=Q(f,W),然而作者没有解决这个问题。
适配器以及核心代码

class Adapter(nn.Module):def __init__(self, c_in, reduction=4):super(Adapter, self).__init__()self.fc = nn.Sequential(nn.Linear(c_in, c_in // reduction, bias=False),nn.ReLU(inplace=True),nn.Linear(c_in // reduction, c_in, bias=False),nn.ReLU(inplace=True))def forward(self, x):x = self.fc(x)return x
class CustomCLIP(nn.Module):def __init__(self, cfg, classnames, clip_model):super().__init__()self.image_encoder = clip_model.visualself.text_encoder = TextEncoder(cfg, classnames, clip_model)self.logit_scale = clip_model.logit_scaleself.dtype = clip_model.dtypeself.adapter = Adapter(1024, 4).to(clip_model.dtype)def forward(self, image):image_features = self.image_encoder(image.type(self.dtype))x = self.adapter(image_features)ratio = 0.2image_features = ratio * x + (1 - ratio) * image_featurestext_features = self.text_encoder()image_features = image_features / image_features.norm(dim=-1, keepdim=True)text_features = text_features / text_features.norm(dim=-1, keepdim=True)logit_scale = self.logit_scale.exp()logits = logit_scale * image_features @ text_features.t()return logits

参考资料

论文下载(2023 IJCV, 2021发在arixv)

https://arxiv.org/pdf/2110.04544
在这里插入图片描述

代码地址(470 stars)

https://github.com/gaopengcuhk/CLIP-Adapter

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

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

相关文章

微软Ignite 2024:建立一个Agentic世界!

在今年的Microsoft Ignite 2024上,AI Agent无疑成为本次大会的重点,已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布:企业可以在智能体中,使用Azure目录中1800个LLM中的任何一个模型了! 建立一个Agent…

Kubeadm 安装 Kubernetes 高可用集群 v1.30.0

1、修改主机名(各个节点) hostnamectl set-hostname xxx2、hosts 文件加入主机名(全部节点) cat /etc/hosts 192.168.88.5 master1 192.168.88.6 master2 192.168.88.7 master3 192.168.88.8 node13、关闭防火墙(全部…

【Python爬虫实战】深入解析 Scrapy:从阻塞与非阻塞到高效爬取的实战指南

🌈个人主页:易辰君-CSDN博客 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、阻塞和非阻塞 (一)阻塞 (二)非阻塞 二、Scrapy的工作…

计算(a+b)/c的值

计算(ab)/c的值 C语言代码C语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 给定3个整数a、b、c,计算表达式(ab)/c的值,/是整除运算。 输入 输入仅一行&…

技术文档的高质量翻译对俄罗斯汽车推广的影响

进入新市场需要的不仅仅是一个伟大的产品;它要求深入了解当地消费者的期望、法规和文化差异。对于希望在俄罗斯取得成功的国际汽车制造商来说,技术文件的质量是一个关键因素。手册、规范和服务指南在产品和用户之间形成了直接的桥梁,影响着客…

网络安全事件管理

一、背景 信息化技术的迅速发展已经极大地改变了人们的生活,网络安全威胁也日益多元化和复杂化。传统的网络安全防护手段难以应对当前繁杂的网络安全问题,构建主动防御的安全整体解决方案将更有利于防范未知的网络安全威胁。 国内外的安全事件在不断增…

c++:面向对象三大特性--继承

面向对象三大特性--继承 一、继承的概念及定义(一)概念(二)继承格式1、继承方式2、格式写法3、派生类继承后访问方式的变化 (三)普通类继承(四)类模板继承 二、基类和派生类的转换&a…

【C语言】web workers

请解释一下什么是Web Workers,以及它在哪些场景下会被使用。 Web Workers是一种HTML5技术,它允许在浏览器后台线程中运行脚本,从而实现了JavaScript的异步处理。Web Workers创建了独立于主线程的执行上下文,可以执行计算密集型任…

关于网络安全攻防知识

DNS 劫持 什么是DNS劫持? DNS劫持又叫域名劫持,(劫持了路由器或域名服务器等),篡改了域名的解析结果,使得指向该域名的IP指向IP,你想访问正经网站结果给你跳到一个不正经的网站,实现…

基于Boost库的搜索引擎

本专栏内容为:项目专栏 💓博主csdn个人主页:小小unicorn ⏩专栏分类:基于Boots的搜索引擎 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识…

Pgsql:json字段查询与更新

1.查询json字段的值 SELECT attribute_data->>设施类别 mycol, * FROM gis_coord_data WHERE attribute_data->>设施类别阀门井 查询结果如下: 2.更新json字段中的某个属性值 UPDATE gis_coord_data SET attribute_data(attribute_data::jsonb ||{&quo…

【eNSP】动态路由协议RIP和OSPF

动态路由RIP(Routing Information Protocol,路由信息协议)和OSPF(Open Shortest Path First,开放式最短路径优先)是两种常见的动态路由协议,它们各自具有不同的特点和使用场景。本篇会对这两种协…

Linux——基础命令(1)

目录 一、认识Linux 终端命令格式 查阅命令帮助信息 -help 辅助操作 自动补全 清屏和查看当前工作目录 二、基本命令 文件和目录常用命令 1.ls-查看文件与目录 2.cd切换目录 (1)touc创建文件或修改文件时间 (2)mkdir创…

leetcode - LRU缓存

什么是 LRU LRU (最近最少使用算法), 最早是在操作系统中接触到的, 它是一种内存数据淘汰策略, 常用于缓存系统的淘汰策略. LRU算法基于局部性原理, 即最近被访问的数据在未来被访问的概率更高, 因此应该保留最近被访问的数据. 最近最少使用的解释 LRU (最近最少使用算法), 中…

基于springboot的HttpClient、OKhttp、RestTemplate对比

HttpClient详细 Httpclient基础&#xff01;&#xff01;&#xff01;&#xff01;实战训练&#xff01;&#xff01;&#xff01;&#xff01;-CSDN博客 OKhttp使用 OKhttp导包 <!-- ok的Http连接池 --><dependency><groupId>com.squareup.okhttp3</g…

【Python】九大经典排序算法:从入门到精通的详解(冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序)

文章目录 1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 选择排序&#xff08;Selection Sort&#xff09;3. 插入排序&#xff08;Insertion Sort&#xff09;4. 归并排序&#xff08;Merge Sort&#xff09;5. 快速排序&#xff08;Quick Sort&#xff09;6. 堆排序&…

【PyTorch】(基础三)---- 图像读取和展示

图像读取和展示 pytorch本身并不提供图像的读取和展示功能&#xff0c;利用pytorch执行计算机视觉任务的时候&#xff0c;通常是利用opencv等工具先进行图像处理&#xff0c;然后将结果转化成tensor类型传递给pytorch&#xff0c;在pytorch执行之后&#xff0c;也可以将tensor…

Diffusion异常检测相关论文及代码整理

扩散模型&#xff08;Diffusion Models&#xff09;是一种生成模型&#xff0c;广泛用于图像生成、文本生成等领域。在异常检测任务中&#xff0c;扩散模型也可以被用来识别和检测异常数据点。该文章对近几年利用扩散模型进行异常检测的文章进行了整理&#xff1a; 2024 1. A…

蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列&#xff0c;要求尽可能少地添加若干括号使得括号序列变得合…

LLM PPT Translator

LLM PPT Translator 引言Github 地址UI PreviewTranslated Result Samples 引言 周末开发了1个PowerPoint文档翻译工具&#xff0c;上传PowerPoint文档&#xff0c;指定想翻译的目标语言&#xff0c;通过LLM的能力将文档翻译成目标语言的文档。 Github 地址 https://github.…