多模态论文笔记——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同学啊 📌你需要解决的疑问:这个代码是否有错?对错与否都请给出你的思考 📌打卡要求:请查找相关资料、逐步…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
