多模态论文笔记——CLIP
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍这几年AIGC火爆的隐藏功臣,多模态模型:CLIP。

文章目录
- CLIP(Contrastive Language-Image Pre-training)
- 1. CLIP 的核心思想
- 2. CLIP 的模型架构
- 2.1 图像编码器
- 2.2 文本编码器
- 2.3 对比学习机制
- 2.4 对比损失(Contrastive Loss)
- InfoNCE
- 图像编码器损失函数
- 文本编码器损失函数
- 总损失函数
- 2.5 共享嵌入空间
- 3. CLIP 的训练方式
- 4. CLIP 的推理过程
- 4.1 图像分类
- 4.2 跨模态检索
- 5. CLIP 的优势
- 6. CLIP 的应用场景
- 6.1 零样本学习
- 6.2 跨模态检索
- 6.3 多模态理解任务
- 7. CLIP 的局限性
CLIP(Contrastive Language-Image Pre-training)
CLIP 是由 OpenAI 提出的一个用于多模态学习的模型,通过对比学习(contrastive learning)进行图像-文本联合学习的创新模型。CLIP 训练图像和文本的联合表示。
论文:Learning Transferable Visual Models From Natural Language Supervision
1. CLIP 的核心思想
CLIP 的核心思想是将图像和文本映射到一个共享的嵌入空间中,并通过对比学习来最大化匹配图像-文本对之间的相似度,最小化不匹配图像-文本对的相似度。模型通过大量数据上进行预训练,具备强大的通用化能力,即零样本学习(zero-shot learning),这意味着它可以处理没有见过的任务或类目而无需重新训练。
2. CLIP 的模型架构
CLIP 的架构包括图像编码器和文本编码器,它们分别将图像和文本输入嵌入到同一个向量空间。图像和文本分别经过编码后,计算它们在向量空间中的相似度来进行对比学习。

2.1 图像编码器
CNN(如 ResNet)或 Vision Transformer (ViT) 作为图像编码器
- ResNet 或 ViT 接受图像作为输入,并输出包含了图像的高层语义信息的向量。
2.2 文本编码器
Transformer 作为文本编码器。这个编码器会将输入的文本描述(自然语言)转化为一个向量表示。
- 文本编码器会将每个文本通过多层 Transformer 的处理,生成包含了文本的语义信息向量。
2.3 对比学习机制
CLIP 的训练目标:通过对比学习(contrastive learning) 的损失函数 让正确的图像-文本对的表示在向量空间中尽可能接近,而错误的图像-文本对在向量空间中尽可能远离。
2.4 对比损失(Contrastive Loss)
对比损失(Contrastive Loss):CLIP 使用了一种基于InfoNCE的对比损失函数。对于每一对图像-文本,模型会计算图像和所有文本对(以及文本和所有图像对)的相似度。通过最大化匹配对的相似度,同时最小化不匹配对的相似度,CLIP 可以学到更强的多模态表示。
InfoNCE
损失函数的目标是让图像 x i x_i xi;与正确文本描述 t i t_i ti的相似度最大化,同时与所有其他不相关文本 t j t_j tj 的相似度最小化,公式为:
L = − log exp ( sim ( x i , t i ) / τ ) ∑ j = 1 N exp ( sim ( x i , t j ) / τ ) \mathcal{L} = - \log\frac{\exp(\text{sim}(x_i,t_i)/\tau)}{\sum_{j = 1}^{N}\exp(\text{sim}(x_i,t_j)/\tau)} L=−log∑j=1Nexp(sim(xi,tj)/τ)exp(sim(xi,ti)/τ)
- ( x i ) (x_i) (xi):第 ( i ) (i) (i)个图像样本。
- ( t i ) (t_i) (ti):第 ( i ) (i) (i)个图像样本的正确文本描述。
- ( t j ) (t_j) (tj):其他文本描述(包括 ( t i ) (t_i) (ti)和其他与 ( x i ) (x_i) (xi)不匹配的文本描述)。
- sim ( x i , t j ) \text{sim}(x_i,t_j) sim(xi,tj):图像 ( x i ) (x_i) (xi)和文本 ( t j ) (t_j) (tj)或者 ( t i ) (t_i) (ti)的相似度,一般使用余弦相似度来计算。
- ( τ ) (\tau) (τ):温度参数,用于控制相似度分布的平滑程度。
sim ( x i , t j ) \text{sim}(x_i, t_j) sim(xi,tj) 可以使用余弦相似度:
sim ( v i , t j ) = v i ⋅ t j ∥ v i ∥ ∥ t j ∥ \text{sim}(v_i,t_j)=\frac{v_i\cdot t_j}{\|v_i\|\|t_j\|} sim(vi,tj)=∥vi∥∥tj∥vi⋅tj
其中 ( v i v_i vi ) 是图像 ( x i x_i xi ) 的嵌入向量,( t j t_j tj ) 是文本 ( t j t_j tj ) 的嵌入向量。这样计算得到一个 相似度矩阵,矩阵中的每个元素表示批次中任意一对图像和文本的相似度。
由于CLIP 包含两个主要的编码器部分:图像编码器、文本编码器,所以,损失函数需要分为两部分,针对之后图像编码器的损失函数 和 文本编码器的损失函数。之后根据各自的损失函数优化两部分构件的权重。
- 其实损失函数都是一样的,只不过因为CLIP组成构件是两部分,所以需要分两部分,方便优化各自的权重参数,当单独使用图像编码器或者文本编码器时候(SD模型单独使用Text Encoder),也会有很好的效果。
- 确保图像和文本的嵌入能够在共享的嵌入空间中彼此对齐(无论是从图像到文本,还是从文本到图像,匹配的对之间的相似度都被最大化,不匹配的对之间的相似度都被最小化。),从而在跨模态任务中实现一致性和相互匹配的能力。
图像编码器损失函数
作用于图像检索文本:给定一个图像,可以找到与之最匹配的文本描述。
图像损失部分:对于每一个图像 ( x i x_i xi ),该部分的损失最大化它与正确文本 ( t i t_i ti ) 的相似度,同时最小化它与其他错误文本 ( t j t_j tj ) 的相似度。这一部分确保了图像能够找到正确的文本,也就是说图像编码器能够将图像嵌入到一个空间中,使得匹配的文本描述与它更接近。
L image = − 1 N ∑ i = 1 N log exp ( sim ( v i , t i ) / τ ) ∑ j = 1 N exp ( sim ( v i , t j ) / τ ) \mathcal{L}_{\text{image}} = - \frac{1}{N}\sum_{i = 1}^{N}\log\frac{\exp(\text{sim}(v_i,t_i)/\tau)}{\sum_{j = 1}^{N}\exp(\text{sim}(v_i,t_j)/\tau)} Limage=−N1i=1∑Nlog∑j=1Nexp(sim(vi,tj)/τ)exp(sim(vi,ti)/τ)
文本编码器损失函数
作用于文本检索图像:给定一个文本描述,可以找到与之最匹配的图像。
- 文本损失部分:对于每一个文本 ( t i t_i ti ),该部分的损失最大化它与正确图像 ( x i x_i xi ) 的相似度,同时最小化它与其他错误图像 ( x j x_j xj ) 的相似度。这一部分确保了文本能够找到正确的图像,也就是说文本编码器能够将文本嵌入到一个空间中,使得匹配的图像与它更接近。
L text = − 1 N ∑ i = 1 N log exp ( sim ( v i , t i ) / τ ) ∑ j = 1 N exp ( sim ( v j , t i ) / τ ) \mathcal{L}_{\text{text}} = - \frac{1}{N}\sum_{i = 1}^{N}\log\frac{\exp(\text{sim}(v_i,t_i)/\tau)}{\sum_{j = 1}^{N}\exp(\text{sim}(v_j,t_i)/\tau)} Ltext=−N1i=1∑Nlog∑j=1Nexp(sim(vj,ti)/τ)exp(sim(vi,ti)/τ)
总损失函数
最大化图像和其正确文本描述之间的相似度,同时最小化图像和其他不匹配文本描述之间的相似度。
L CLIP = 1 2 ( L image + L text ) \mathcal{L}_{\text{CLIP}}=\frac{1}{2}(\mathcal{L}_{\text{image}}+\mathcal{L}_{\text{text}}) LCLIP=21(Limage+Ltext)
- ( L image \mathcal{L}_{\text{image}} Limage ):文本编码器损失函数
- ( L image \mathcal{L}_{\text{image}} Limage ):图像编码器损失函数
2.5 共享嵌入空间
CLIP 将图像和文本映射到相同的嵌入空间的向量,可以直接进行相似度计算。
3. CLIP 的训练方式
CLIP 的训练使用了大量的图像-文本配对数据进行对比学习。这些数据通常来自网络,例如图像和它们的自然语言描述(如社交媒体图片和它们的描述文本)。OpenAI从互联网收集了共4个亿的文本-图像对。
4. CLIP 的推理过程
在推理过程中,CLIP 通过计算图像和文本描述的相似度来执行分类或检索任务
4.1 图像分类
在图像分类任务中,CLIP 可以通过以下步骤进行推理:
- 给定一个输入图像,将其通过图像编码器生成一个向量表示。
- 使用一组标签(例如“猫”、“狗”、“汽车”等)的文本描述,将这些描述通过文本编码器生成一组向量表示。
- 计算图像向量与每个文本向量的相似度,并选择相似度最高的标签作为分类结果。
这种方式使 CLIP 能够在没有特定类别标签的情况下进行零样本分类(zero-shot classification)。
4.2 跨模态检索
在跨模态检索任务中,CLIP 可以使用文本编码器执行文本检索图像或使用图像编码器执行图像检索文本。例如:
- 输入一个文本描述,检索与之相关的图像。
- 输入一个图像,检索与之语义相关的文本描述。
5. CLIP 的优势
1 零样本学习
CLIP 最具创新的特性之一是它在很多任务中可以执行零样本学习。可以通过它的预训练模型处理从未见过的新任务。例如,CLIP 可以在未见过的分类标签下进行分类。
2 跨模态能力
CLIP 的跨模态能力使得它在图像和文本的任务中都表现出色。进行跨模态检索。
5.3 灵活性和通用性
CLIP 能够在广泛的应用场景中工作,涵盖图像分类、检索、零样本推理等任务,而不需要为每个任务单独设计和训练模型。
6. CLIP 的应用场景
6.1 零样本学习
CLIP 不依赖于特定类别标签,而是通过自然语言描述进行分类。因此,它可以在开放领域的任务中对图像进行分类,不需要专门的任务训练。
6.2 跨模态检索
CLIP 的跨模态能力使它能够通过文本查询图像,或者通过图像查询相关的文本。这种灵活性使 CLIP 在图像搜索和检索任务中表现突出。
6.3 多模态理解任务
CLIP 可以应用于图像-文本匹配、视觉问答等任务,模型能够理解图像和文本的联合语义,进而执行多模态的复杂任务。
7. CLIP 的局限性
- 依赖大规模数据,计算资源需求高:CLIP 的预训练需要大量的图像-文本配对数据和计算资源,这对于小型项目或研究可能是一个挑战。
相关文章:
多模态论文笔记——CLIP
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍这几年AIGC火爆的隐藏功臣,多模态模型:CLIP。 文章目录 CLIP(Contrastive Language-Image Pre-training)…...
brpc之baidu_protocol
简介 是brpc默认使用的协议 初始化 Protocol baidu_protocol { ParseRpcMessage,SerializeRequestDefault, PackRpcRequest,ProcessRpcRequest, ProcessRpcResponse,VerifyRpcRequest, NULL, NULL,CONNECTION_TYPE_ALL, "baidu_std" };协议定义 定义在baidu_rpc…...
LeetCode:39. 组合总和
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 cand…...
SOLID原则学习,开闭原则(Open Closed Principle, OCP)
文章目录 1. 定义2. 开闭原则的详细解释3. 实现开闭原则的方法4. 总结 1. 定义 开闭原则(Open-Closed Principle,OCP)是面向对象设计中的五大原则(SOLID)之一,由Bertrand Meyer提出。开闭原则的核心思想是…...
Unreal Engine 5 C++ Advanced Action RPG 七章笔记
第七章 Ranged Enemy 2-Ranged Enemy Starting Weapon 制作新敌人的流程准备 新敌人的武器起始的状态数据自己的战斗能力投射能力自己的行为树 创建角色,添加武器,添加数据,就是继承之前的基类敌人的 运行结果 3-Glacer Starting Stats 看看就行,就是复制曲线表格更改数…...
自动连接校园网wifi脚本实践(自动网页认证)
目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态? 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑,但是最近实验室老是断电,但重启后也不会自动连接校园网账户认证,远程工具&…...
HTTP/HTTPS ⑤-CA证书 || 中间人攻击 || SSL/TLS
这里是Themberfue ✨上节课我们聊到了对称加密和非对称加密,实际上,单纯地非对称加密并不能保证数据不被窃取,我们还需要一个更加重要的东西——证书 中间人攻击 通过非对称加密生成私钥priKey和公钥pubKey用来加密对称加密生成的密钥&…...
traceroute原理探究
文章中有截图,看不清的话,可以把浏览器显示比例放大到200%后观看。 linux下traceroute的原理 本文通过抓包观察一下linux下traceroute的原理 环境:一台嵌入式linux设备,内网ip是192.168.186.195,其上有192.168.202.…...
50_Lua垃圾回收
1.Lua垃圾回收机制概述 Lua采用了一种自动内存管理机制,称为垃圾回收(Garbage Collection, GC)。垃圾回收的主要目的是回收程序中不再被使用的内存,从而避免内存泄漏。Lua的垃圾回收器负责回收动态分配的对象,如函数、用户数据、表、字符串、线程、内部结构等。Lua的垃圾…...
Git-2-:Cherry-Pick 的使用场景及使用流程
前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能,Cherry-Pick不是merge,只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介: git cherry-pick 是用来从一个分…...
【C++】21.map和set的使用
文章目录 1. 序列式容器和关联式容器2. set系列的使用2.1 set和multiset参考文档2.2 set类的介绍2.3 set的构造和迭代器构造函数:双向迭代器迭代器: 2.4 set的增删查2.5 insert和迭代器遍历使用样例:2.6 find和erase使用样例:2.7 …...
burpsiute的基础使用(2)
爆破模块(intruder): csrf请求伪造访问(模拟攻击): 方法一: 通过burp将修改,删除等行为的数据包压缩成一个可访问链接,通过本地浏览器访问(该浏览器用户处于登陆状态&a…...
ElasticSearch 同义词匹配
synonym.txt 电脑, 计算机, 主机 复印纸, 打印纸, A4纸, 纸, A3 平板电脑, Pad DELETE /es_sku_index_20_20250109 PUT /es_sku_index_20_20250109 {"settings": {"index": {"number_of_shards": "5","number_of_replicas&quo…...
linux RT-Preempt spin lock实现
一、spin_lock概述 Spinlock是linux内核中常用的一种互斥锁机制,和mutex不同,当无法持锁进入临界区的时候,当前执行线索不会阻塞,而是不断的自旋等待该锁释放。正因为如此,自旋锁也是可以用在中断上下文的。也正是因为…...
PySpark广播表连接解决数据倾斜的完整案例
使用PySpark解决数据倾斜问题的完整案例,通过广播表连接的方式来优化性能。 准备数据 假设我们有两张表,一张大表 big_table 和一张小表 small_table ,小表将作为广播表。 from pyspark.sql import SparkSession# 初始化SparkSession spar…...
Chromium CDP 开发(十二):为自己的Domain建立custom_config.json
引言 本章详细介绍了如何为自定义的 CDP Domain 创建 custom_config.json 文件,并通过修改 BUILD.gn 文件来确保自定义的配置文件参与编译。我们通过 inspector_protocol_generate 配置段自动生成自定义 Domain 的头文件和实现文件,并成功将其集成到构建…...
【Vue】全局/局部组件使用流程(Vue2为例)
全局组件和局部组件区别 如何使用 全局组件:全局注册后,可以在任意页面中直接使用。局部组件:在页面中需要先导入子组件路径,注册组件才能使用。 适用场景 全局组件:适用于高频使用的组件,如导航栏、业…...
Vue.js组件开发详解
在现代前端开发中,Vue.js 凭借其简洁、高效、灵活的特性,成为了众多开发者的首选框架之一,而组件化开发则是 Vue.js 的核心优势。组件可以将复杂的 UI 界面拆分成一个个独立的、可复用的小块,极大地提高了开发效率和代码的可维护性…...
解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
1. IsaacGymEnvs项目介绍 IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎…...
深度学习camp-第J7周:对于ResNeXt-50算法的思考
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 📌你需要解决的疑问:这个代码是否有错?对错与否都请给出你的思考 📌打卡要求:请查找相关资料、逐步…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
