news 2026/4/16 16:46:41

多模态-2 CLIP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多模态-2 CLIP

这篇文章介绍多模态模型-CLIP

多模态基础知识点可以看:多模态-1 基础理论

ViT的相关介绍可以看:计算机视觉Transformer-1 基础结构

CLIP原论文:《Learning Transferable Visual Models From Natural Language Supervision》-2021-OpenAI

一 为什么提出CLIP

做过视觉模型的一定会有以下痛苦经历:本来最初的要求是让模型识别20种类别,你收集数据->标记数据->构建模型->调参炼丹->输出能识别20种类别的模型,你开心地进行交付时,突然需求跟你说又加了一个新类别,你又需要重新做,重走整个流程,即使有数据平台、标记外包等,随着需求的变动如此循环也是很烦的。

之所以要进行循环的根源是:传统判别式模型外推能力有限,它只认识你在训练数据集中标记过、教给它让它学习的类别,如果你的训练数据集中根本就没有“猫”这种类别的数据,然后突然输入一张“猫”的图片让模型识别,它大概率会不产生任何识别结果或者给出置信度很低的其它相似类别标签输出,比如输出了“狗”。工业模型落地一直强调的“数据先于模型”就是这个道理,再牛的模型,没有数据做燃料,也是废物。

我们希望有这样一种模型,它经过训练后,对于未在训练集中出现的类别也能做出准确的判断,学术上称这种能力为“Zero-Shot”,CLIP就是这种模型。

二 结构

传统判别式模型是从特征映射的角度处理识别问题,也就是“特征->识别结果”,而CLIP是从语义相似性的角度来处理识别问题,也就是“(特征,识别结果)->最相似的是正确结果”。举例来说,输入一张“猫”的图片,传统判别式模型会对图片进行特征提取,根据提取到的特征进行判断,说“我认为这张图片90%是猫”,而CLIP会分别对图片、所有类别“猫”、“狗”......,都进行特征提取,然后判断每个<图片特征,类别特征>相似度是多少,选相似度最大的作为当前图片的类别。CLIP的Zero-Shot能力就体现在如果‘所有类别’哪天突然变了,传统判别式模型需要重新构建数据集->进行训练......,但是CLIP只需要对新类别进行一次特征提取就可以,然后还是通过相似度比对就可以进行判断识别,CLIP整体结构如下:

左侧是CLIP的训练过程,CLIP包含两个关键组件Image Encoder(图像编码器)、Text Encoder(文本编码器),最后就是通过数据集训练这两个编码器,让它们提取到的特征具有语义相似性,也就是图像编码器对‘猫图片’的特征编码输出和文本编码器对文本“猫”的特征编码输出具有最大的相似性。

右侧是CLIP的推理过程,输入一张待进行识别的图片,利用训练完毕的图像编码器对其进行特征提取,利用文本编码器对所有类别标签文本进行特征提取,然后判断图像特征和类别标签文本特征的相似性,具有最大相似性的就是图像对应的类别。

CLIP训练时的输入是多个<图像,图像文本描述>对,比如<猫的图片,“A photo of a cat”>,利用图像编码器对输入图像进行特征提取,论文中尝试了ResNet和ViT作为图像编码器,利用文本编码器对于图像文本描述进行特征提取,论文中尝试了类似BERT结构的文本编码器,对于图像编码器和文本编码器提取到的特征,利用对比学习最大化正确匹配<图像,图像文本描述>相关特征的余弦相似度,最小化错误匹配<图像,图像文本描述>相关特征的余弦相似度,强迫模型学习出图像特征和文本特征之间的语义相关性。

三 数据集构建

CLIP作者通过不同主题的搜索关键词在网络上进行图片数据搜索,构建了一个包含4亿<图像,图像文本描述>对的数据集,为了保持数据集的均衡性,每个主题的搜索关键词大约包含20000个数据,这个数据集命名为WIT(WebImageText),其包含的文本token数量接近于GPT-2的训练数据集。

四 训练过程

CLIP训练过程的核心目标是将图像和文本映射到一个共享的语义向量空间中,使得语义相近的图文对特征在该空间中距离更近,而无关的图文对特征距离更远。

具体过程:

1)从训练数据集中获取一个batch的<图像,图像文本描述>训练数据,论文中使用的batch size高达32768

2)获取图像编码器、文本编码器对于batch数据的特征编码表示,对特征编码表示进行归一化

3)计算当前batch所有图像编码表示、文本编码表示的余弦相似度矩阵

4)计算当前batch的损失,对于第i个图像和第i个图像文本描述

直观上就是最大化相似度矩阵对角线上的值,最小化其它的值,所以论文里会像下图所示进行示意:

5)根据损失,反向梯度传播训练CLIP

所有非对角线元素其实是作为负样本,负样本越多,效果越好,这也是为什么CLIP要采取那么大的batch size,这也提醒我们,如果我们的资源没办法支撑这么大的batch size时,不要轻易尝试在我们的数据集上训练CLIP,效果肯定差。训练的一些其它细节如下:

整体训练过程的伪代码如下:

训练伪代码解释如下:

# image_encoder - ResNet /Vision Transformer图像编码器 # text_encoder - CBOW /Text Transformer 文本编码器 # I[n, h, w, c] - 包含n张图像的训练图像 # T[n, L] - 包含n个长度为L的图像文本描述 # W_i[d_i, d_e] - 图像编码结果线性变换层可学习矩阵 # W_t[d_t, d_e] - 文本编码结果线性变换层可学习矩阵 # t - Logits计算中的可学习温度控制参数 # 利用图像编码器和文本编码器获取输入训练<图像,文本>对的特征 I_f = image_encoder(I) #[n, d_i] T_f = text_encoder(T) #[n, d_t] # 先利用线性变换层(对应可学习的W_i、W_t参数)对编码器提取到的特征进行维度变换 # 然后进行L2正则化 axis=1表示操作每一行 也就是对每一行进行正则化 I_e = l2_normalize(np.dot(I_f, W_i), axis=1) T_e = l2_normalize(np.dot(T_f, W_t), axis=1) # 因为已经进行过正则化,所以利用dot计算内积就是余弦相似度的结果,然后利用可学习的温度参数t对结果进行平滑得到logits logits = np.dot(I_e, T_e.T) * np.exp(t) # arange(n)得到[0,1,...n]的标签,也就是第i张图片的标签是i,训练目标是最大化对角线上<图像-文本>对的匹配,也就是最大化对角线上的余弦相似值,最小化其它的值 labels = np.arange(n) # 分别计算logits每行每列的交叉熵损失,对应图像->文本的匹配损失和文本->图像的匹配损失 loss_i = cross_entropy_loss(logits, labels, axis=0) loss_t = cross_entropy_loss(logits, labels, axis=1) # 整体损失是图像到文本的匹配损失和文本到图像的匹配损失的平均值 loss = (loss_i + loss_t)/2

五 实验结果

CLIP的论文一共48页,实验部分页数就占了32页,这里列出部分实验部分的页面,感受一下数据的震撼^_^,感兴趣的可以细读原论文的实验部分,可以称作是论文实验部分的撰写教科书了:

CLIP的实验主要涵盖了零样本(Zero-Shot)能力的验证、模型鲁棒性、模型可拓展性、消融实验、失败案例分析环节:

六 细节问题

1)可以把图片对应的文本描述看做是语言大模型中的prompt,越详细的prompt训练效果会越好,这也是为什么后续的多模态模型直接用next token的文本生成方式进行训练

2)CLIP在人工合成的小型公开评测数据集CIFAR-10、CIFAR-100上效果不如以往的传统模型

3)要想针对特定领域重新训练CLIP所需的数据量非常大

4)CLIP图像特征编码表示来自哪里?

5)CLIP的文本特征编码表示来自哪里?

七 如何使用CLIP

CLIP的使用记住一点:永远不要轻易地尝试重新开始训练(微调)CLIP

CLIP具体应用中常使用的是Linear Probe(线性探针)的方法:

八 拓展

1 文本描述拓展

3 现代多模态模型中的<img>标签

2 中文CLIP

CLIP是在英文数据集上进行训练的,中文效果不好,阿里达摩研究院在大规模中文数据集上训练了一个对中文友好的CLIP模型,具体工作可以查看《Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese》

整体先冻结预训练CLIP的图像编码器,只训练文本编码器,然后在联合训练。

论文整体工作如下:

数据集构建策略如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 21:33:36

《P3216 [HNOI2011] 数学作业》

题目描述 小 C 数学成绩优异&#xff0c;于是老师给小 C 留了一道非常难的数学作业题&#xff1a; 给定正整数 n,m&#xff0c;要求计算 Concatenate(n)mod m 的值&#xff0c;其中 Concatenate(n) 是将 1∼n 所有正整数 顺序连接起来得到的数。 例如&#xff0c;n13&#x…

作者头像 李华
网站建设 2026/4/16 14:06:31

强烈安利8个AI论文网站,继续教育学生搞定论文必备!

强烈安利8个AI论文网站&#xff0c;继续教育学生搞定论文必备&#xff01; AI 工具让论文写作不再难 在当今这个信息爆炸的时代&#xff0c;继续教育学生面临着越来越高的学术要求。无论是撰写毕业论文还是完成研究项目&#xff0c;都需要大量的时间和精力。而随着 AI 技术的不…

作者头像 李华
网站建设 2026/4/15 12:36:36

基于STM32的智慧衣橱环境监测与管理系统设计

目录 系统概述硬件设计软件设计关键技术应用场景 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 智慧衣橱环境监测与管理系统基于STM32微控制器设计&#xff0c;旨在实时监测衣橱内的温湿度、光照、空气质量等环境参数&…

作者头像 李华
网站建设 2026/4/16 15:26:00

基于Android和蓝牙的智慧停车场系统的设计与实现

目录 系统概述核心技术组成关键实现步骤应用场景与扩展参考案例 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 基于Android和蓝牙的智慧停车场系统旨在通过移动应用与蓝牙技术实现停车位的智能管理、导航和支付功能。该系统…

作者头像 李华
网站建设 2026/4/16 12:21:58

基于MQTT协议的物联网家庭安防系统设计

目录 MQTT协议概述系统架构设计关键技术实现安全增强措施典型应用场景性能优化建议 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; MQTT协议概述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布…

作者头像 李华
网站建设 2026/4/16 10:45:34

吐血推荐!专科生必备8款AI论文工具测评

吐血推荐&#xff01;专科生必备8款AI论文工具测评 2026年专科生论文写作工具测评&#xff1a;为何值得一看&#xff1f; 随着AI技术的不断进步&#xff0c;越来越多的学术工具开始进入高校师生的视野&#xff0c;尤其是对于专科生而言&#xff0c;论文写作不仅是学业的重要环…

作者头像 李华