多模态之clip

news2025/1/22 16:10:48

论文:Learning Transferable Visual Models From Natural Language Supervision

Github:https://github.com/OpenAI/CLIP

OpenAI出品

论文通过网络爬取4亿(image, text)对,使用对比学习的方法训练得到clip(Contrastive Language-Image Pre-training)模型。模型可以实现图片和文本的编码,同时还可以zero-shot直接迁移进下游其他任务。在模型上一共尝试了8个模型,从resnet到ViT,最小模型和最大模型之间的计算量相差约100倍,迁移学习的效果基本和模型大小成正相关。尝试了30个数据集,都能和之前的有监督的模型效果差不多甚至更好。

网络结构:

Clip模型基于双塔结构的网络设计。分别基于2个主干网络实现对于文本和图片的编码,分别输出文本的特征向量(T1,T2……TN)和图片的特征向量(I1,I2……IN)。最终两个特征向量做矩阵运算共得到N个类内特征,N2-N个类间特征。通过对比损失函数,增大N个类内特征之间的cos距离,减小N2-N个类间特征的cos距离。

图片编码的主干网络一共设计了5种ResNet系列(ResNet-50, ResNet-101RN50x4 RN50x16 RN50x64)和3种ViT系列(ViT-B/32, a ViT-B/16, and a ViT-L/14)。

其中ResNet在原生基础上做了略微改动,主要改动包括增加了抗锯齿的2*2pooling,将网络最后的全局池化替换为attention池化。

ViT的改动主要是增加了一共额外的归一化层来结合patch块和位置position编码。同时使用了稍微不同的初始化策略。

文本的主干网络主要使用Transformer网络。网络包含63M参数,12层网络深度,512的网络宽度,8个注意力机制头。包含49152个单词长度,句子最大长度为76。
 

训练细节:

(1)在训练过程中,文本的主干网络和图片的主干网络都没使用类似ImageNet的预训练权重做初始化,全部都是随机初始化的。

(2)仅仅使用线性投影,将文本和图片的特征向量投影到embedding空间。

(3)Clip的(image, text)对都是一一配对的,一个图片只对应一个句子,所以这里也没有像一个图片对应多个句子,可以对句子进行随机采样操作。

(4)图片的数据增强方式只有resize和随机crop操作。

(5)softmax中的温度参数T是模型训练得到的,T初始化为0.07,超过100将被截断。

蓝色:基于transformer的语言模型,0样本迁移能力最差,训练速度最慢。

橙色:词袋模型,0样本迁移能力居中,训练速度比transformer语言模型快了3倍。

绿色:clip模型,0样本迁移能力最好,通过类内类间对比训练的方式,训练速度比transformer语言模型快了4倍。

损失函数:

 

有两个输入,一个是图片,一个是文本,图片的维度是[n,h,w,c],文本的维度是[n,l],l是指序列长度,然后送入到各自的encoder提取特征,image encoder可以是ResNet也可以是Vision Transformer,text encoder可以是CBOW,也可以是Text Transformer,得到对应的特征之后,再经过一个投射层(即W_i和W_t),投射层的意义是学习如何从单模态变成多模态,投射完之后再做l2 norm,就得到了最终的用来对比的特征I_e和T_e,现在有n个图像的特征,和n个文本的特征,接下来就是算consine similarity,算的相似度就是最后要分类的logits,最后logits和ground truth做交叉熵loss,正样本是对角线上的元素,logits的维度是[n,n],ground truth label是np.arange(n),算两个loss,一个是image的,一个是text的,最后把两个loss加起来就平均。这个操作在对比学习中是很常见的,都是用的这种对称式的目标函数。

实验结果:

 

相比基于有监督模式训练的ResNet-50模型,clip模型在大部分数据集上具有更好的0样本迁移能力。但是有些数据集上表现却不如监督训练的模型,比如细分类任务(判断车的款式、花的种类、车的种类)、计数任务、距离计算任务。

Clip模型本质是分类模型,只能在有限的几个文本选项中做选择,而不像caption任务可以输出任意的文本。

Clip模型训练数据都是网络爬取的,缺乏数据的过滤和筛选,会存在社会歧视问题。

Clip模型从zero-shot任务迁移到few-shot任务,会出现反常的掉点。

Clip模型在电脑字体的ocr场景识别效果很好,迁移到手写数字场景效果却较差。

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

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

相关文章

golang 输出固定位数的整数

需求:将0输出为000,99输出为099 c# Console.WriteLine(0.ToString("000")); Console.WriteLine(99.ToString("000"));go fmt.Printf("%03d", 0) fmt.Printf("%03d", 99)运行效果:

深入浅出Java中参数传递的原理

前言 今天,想和大家聊聊关于java中的参数传递的原理,参数的传递有两种,值传递和引用传递。 值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参…

windows系统 vmware17安装ubuntu server 22.04.2

vmware17 创建虚拟机 新建虚拟机 选择镜像文件:我这个镜像文件是需要联网才能安装的 设置虚拟机名称,设置存储路径 根据用户实际使用情况设置合适的大小:比如我是用来安装wvp平台的,20g太小,导致安装出现问题。 最…

scratch猫猫的儿童节 中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析2023年3月

目录 scratch猫猫的儿童节 一、题目要求 1、准备工作 2、功能实现 二、案例分析

如何使用java编写差分进化算法

差分进化算法属于一种进化算法,以全局最优性、收敛速度快等特点,得到很多学者的关注,并将其扩展到参数优化、数值优化、工程优化、路径优化、机器学习等一系列研究中。 而差分进化算法的原理即过程又是什么呢? 一、什么是差分进化算法 差分进化算法的原理属于内部寻优机…

假期出行小程序+chatgpt旅游攻略

马上五一了,如果想出去旅游,需要提取规划好路线图,我们可以借助chatgpt的路线规划功能帮我们生成一份攻略,按照攻略我们就可以愉快的出去玩耍了。 本文结合chatgpt,利用低代码工具帮我们制作一份旅行导览小程序&#…

揭秘!我用AI写了一部精彩小说;搭建AI视频创作工作流;一键生成摘要工具清单;大模型创业生死5问 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『大型语言模型 (LLM) 进化树』追踪近年来语言模型的发展 作者团队梳理了自2018年以来大语言模型的发展历程,并可视化成了…

Windows Vscode 远程连接Ubuntu, vscode检测到#include错误请更新includePath的解决方法

(闭坑)首先,我们要明白一点,就是我们在windows用vscode 远程连接了Ubuntu后,我们的Vscode的环境就是Ubuntu,不再是window了,所以出现问题,应该想到的是Ubuntu上的环境问题,而不是win…

Android逆向实战(一)腾讯新闻去开屏广告

上次反编译一个工具类app失败,原因是使用了360加固,回编译后无法启动。一般来讲,大厂的app考虑到性能、兼容性、包体积等,通常不用加固。因此,本次我们选一个大一些的app-腾讯新闻。写在前面:本篇博客仅用来…

优秀简历的HR视角:怎样打造一份称心如意的简历?

简历的排版应该简洁工整,注重细节。需要注意对齐和标点符号的使用,因为在排版上的细节需要下很大功夫。除此之外,下面重点讲述几点简历内容需要注意的地方。 要点1:不相关的不要写。 尤其是与应聘岗位毫不相关的实习经历&#x…

记一次峰回路转的注入

0X01 背景 自己之前写过一篇记录,当时是由于之前是一位校友刚做开发,叫我友情帮忙测试一波,由于是开发的新手,漏洞比较多,所以直接从注入开始讲起,但是到getshell的过程也算是一场峰回路转再跌跌撞撞的路程…

浏览器内核,chrominum = blink = webkit+

借鉴:浏览器内核有几种?深度解析浏览器内核工作原理和版本区别 1.什么是浏览器内核 广义上:浏览器内核 js引擎 渲染引擎。但是,由于js引擎越来越独立(比如chrome的V8)。所以,目前 浏览器内核 渲染引擎。 2、市面上…

hibernate多对多关系表的搭建和‘增删改查’

hibernate框架——数据库的多对多关系! 众所周知,数据库有三种数据模型,一对一,一对多,多对多,在前面的文章中主要介绍了一对一和一对多的表关系搭建和使用sql语句进行增删改查。 使用hibernate框架主要分…

web集群第二次作业

文章目录 1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。2. 基于 CentOS 7 构建 LVS-DR 群集。1、环境准备2、安装httpd准备两个web页面3、配置LVS负载均衡服务4、手工在RS端绑定VIP,添加本机访问VIP的路由信息5、手工在RS端抑制AR…

Turtle海龟画图

介绍 简单的一个窗口绘图工具。 提供一个小海龟,可以看做一个机器人,能够听得懂有限的命令。 三种命令 运动命令 forward(d) 向前移动D长度 backward(d) 向后移动D长度 right(d) 向右转动多少度 left(d) 向左转动多少度 goto(x,y) …

我让AI帮忙生成算法,Auto-GPT对比ChatGPT、文心一言,结果出人意料...

🍏🍐🍊🍑🍒🍓🫐🥑🍋🍉🥝 我让AI帮忙生成算法,Auto-GPT对比ChatGPT、文心一言,结果出人意料… 文章目录 &#x…

如何在 Python 中获取字典交集

本文将讨论在 Python 中对两个或多个字典执行交集的不同方法。 文章目录 Python字典在 Python 中使用字典推导来交叉两个字典使用按位 & 运算符在 Python 中对两个字典进行交集使用 Set intersection() 方法在 Python 中将两个字典相交在 Python 中用于交叉多个字典的方法总…

C-预处理

文章目录 预处理宏定义数值宏常量字符串宏常量使用宏充当注释去注释和宏替换谁先进行 用define宏定义表达式在if判断语句之后多条语句没有{}导致出错 定义不能带空格 #undef 条件编译#ifdef ifndef:判定的是宏是否被定义#if-#endif:宏定义是否为真宏定义进行多条件筛选#ifdef &…

听好程序员一句劝!零基础这样学Java才是正确的方式!

有一说一,Java还是现在很多新手入门学习的首选之一,新手学Java入门从哪里开始学?很多入门的小伙伴都会疑惑,今天好程序员给大家分享一下,超适合菜鸟入门的 Java学习路线 第一步,JavaSE,这是Java…

工具类——Java导出EXCEL2(设置样式、加载并填充图片、加载指定模板、大数据量设置窗口大小与刷新频率)

文章目录 一、POI设置样式二、POI导出图片1.解释XSSFClientAnchor 三、加载指定模板导出四、👉Workbook、XSSFWorkbook与SXSSFWorkbook1.大数据量导出1)根据数据量选择XSSFWorkbook,还是SXSSFWorkbook 书接上篇:工具类——Java 浏…