人工智能 |手算CLIP模型

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本文详解CLIP模型原理:突破传统CNN需重新训练的局限,通过4亿图文对联合训练文本与图像编码器,实现零样本迁移。利用对比学习对齐多模态特征,支持图文检索、零样本分类等应用,让AI像人一样理解未见过的概念。(239字)

 引入:当 CNN 遇到它没见过的世界

             传统的图像分类模型,比如经典的 CNN,本质上是一个“死记硬背”的选手

    你给它看一百万张猫的照片,它就能认出猫;但如果有一天你给它一张"米粉"的图片,而训练

集里从来没出现过这个类别——它就彻底懵了。更要命的是,每当你想让模型认识新事物,就得重

新收集数据、重新标注、重新训练。这个过程费时费力,扩展性极差。

image.gif

那有没有办法,让模型像人一样,看到没见过的东西也能"猜个八九不离十"?

CLIP(Contrastive Language–Image Pre-training)的作者们提出了一个很有意思的想法:与其让

模型死记图片的类别标签,不如直接让它从自然语言描述中学习图片的语义。

毕竟,互联网上充斥着海量的图文内容——一张图片配上一段描述,这样的数据俯拾皆是。于是,

OpenAI 的研究者们从网络上收集了 4 亿个图文对作为训练数据。每一条数据,就是一张图片加上

与之对应的一段简短文字描述。有了这样规模的数据,模型或许就能学会:图片里的视觉内容,和

自然语言的语义,到底是怎么对应起来的。

image.gif


文本编码器

网络结构

项目 官方数值 对应结构图位置
模型总参数量 63M 完整文本塔
Transformer 堆叠层数 12 层 图左侧 12x,重复堆叠 12 次同一个模块
特征隐藏维度(宽度) d_model=512 所有向量统一 512 维
注意力头数 8 头 Masked Multi Self Attention
最大文本序列长度 77(你写 76 是近似) 输入 [SOS]文本[EOS] 总长度
MLP 前馈中间维度 10656 Feed Forward 层
输入[SOS]词嵌入 → 位置编码Position Embedding
→ 12层Transformer块(掩码自注意力+残差→LayerNorm→FFN前馈+残差→LayerNorm)
→ 提取最后[EOS]token特征 → 输出文本特征

image.gif

为了徒手笔算,我们做小维度的 CLIP 文本编码器,结构和官方完全一致,只是把数字缩小:

隐藏维度 d_model=2(官方 512,逻辑完全一样)

Transformer 层数:1 层(官方 12 层,只是重复 12 次这套计算)

注意力头:1 头(官方 8 头,只是分成 8 份再拼接)

最大序列长度:3 token(官方 77):[SOS]、cat、[EOS]

MLP 中间维度:4(官方 10656,对应关系:迷你 2→4,官方 512→10656)

词嵌入:把每个 token 转为 2 维向量


加上位置编码 Position Embedding(固定位置向量)


相加得到 Transformer 输入:


Masked Multi Self Attention 掩码多头自注意力

掩码 Masked 含义:只能看到前面 token,看不到后面 token(因果掩码)。


LayerNorm 层归一化

Feed Forward 前馈网络


image.gif

                      最终图文对齐用的文本特征,唯一来自最后 [EOS] token

后续操作:

输入文字
12 层 Masked Self-Attention (类 Decoder 结构)
取最后 [EOS] 位置的输出 → 512 维
可学习线性层 (512 → 512)
L2 单位归一化
最终文本特征向量 t̂  (模长 = 1)

image.gif

image.gif


图片编码器

网络结构

部分 文本编码器 图像编码器
架构 Decoder(带掩码单向注意力) ViT Encoder(双向无掩码)
层数 12 层 12 层
隐藏维 512 512
FFN 中间维 10656 10656
全局特征来源 最后一位 EOS token 第一位 CLS token
原始空间 语言私有空间 视觉私有空间
投影层 Text Projection Wt Image Projection Wi
最终特征 512 共享空间文本特征 512 共享空间图像特征

具体流程

原始图片
(224, 224, 3)
切成 32×32 的 Patch,共 49 个
(49, 3072)        ← 49 个 patch,每个拉平是 32×32×3 = 3072
线性投影 (3072 → 768)
(49, 768)
+ 1 个 [CLS] token
(50, 768)
+ Positional Embedding
(50, 768)
× 12 层 Self-Attention
(50, 768)
取 [CLS] 位置的向量
(768,)
线性层 (768 → 512)
(512,)
L2 归一化
(512,)            ← 最终图像特征 î

image.gif

image.gif

图像编码器 = ViT Encoder,输出 CLS token;

文本编码器 = Masked Decoder,输出 EOS token;

各自经过投影进入同一共享空间然后进行归一化,再做图文对比学习。


图文相似度计算

                                下一步就是:算每张图片和每段文字之间的相似度。

image.gif

假设 batch 里有 3 个图文对

描述
图像 î₁ 一只猫
图像 î₂ 一只狗
图像 î₃ 一辆车

对应文本:

描述
文本 t̂₁ "a cat"
文本 t̂₂ "a dog"
文本 t̂₃ "a car"

相似度矩阵

因为都做了 L2 归一化,点积 = 余弦相似度,直接:

image.gif

绿色对角线 = 正确配对,值应该尽量大;其余位置是负样本,值应该尽量小。

乘以温度系数 τ

直接用原始相似度训练会不稳定,所以还要乘一个可学习的温度系数 τ(CLIP 初始化为 0.07):

image.gif

作用:放大相似度差异,让正样本更突出,负样本更拉开τ 越小,区分度越强;τ 越大,越平滑。


双向对比损失(Contrastive Loss)

     如图所示,在 CLIP 的训练迭代中,一个 Batch 包含 N 张图像和 N 段对应的文本。图像经过

ViT Encoder 编码,得到 N×D 的图像特征矩阵 image_features;文本经过 Masked Decoder 编

码,得到 N×D 的文本特征矩阵 text_features。这两个矩阵是后续计算 N×N 相似度矩阵 和 双向

对比损失 的原始数据基础。

image.gif

在得到图文特征矩阵后,CLIP 通过矩阵乘法计算双向相似度:

计算 图像对文本 的相似度矩阵 logits_per_image (形状 N×N),其中每一行代表一张图对所有文本

的相似性得分;

计算 文本对图像 的相似度矩阵 logits_per_text (形状 N×N),其中每一行代表一段文对所有图片

的相似性得分。 image.gif


image.gif 编辑

上面是图找所有文的相似度矩阵下面是文找所有图的相似度矩阵两个矩阵互为转置(行列互换),

完全对称。

image.gif

上图:把图片匹配文本,当成「N 分类任务」,类别是批量里所有文本

下图:把文本匹配图片,当成「N 分类任务」,类别是批量里所有图片

两个都是标准交叉熵分类损失,合起来就是CLIP 双向对比损失

模型目标:两个分类任务都能精准选中对角线的正样本配对

image.gif

先计算图像 - 文本双向相似度矩阵;

设定分类标签targets,对角线位置为正样本正确类别;

分别对两个相似度矩阵计算交叉熵损失;

CLIP 最终双向对比损失 = 图像方向损失 + 文本方向损失。

image.gif  


CLIP 推理阶段:Zero-Shot 预测

  • 计算 (余弦相似度)
  • 取 argmax,找出得分最高的类别
  • 最终输出:自然语言类别描述,如 "A photo of a dog."

image.gif


CLIP 的应用

图文检索

三个查询示例

文本查询 检索结果
"A bicyclist with a blue shirt" 找到了路口骑蓝色上衣自行车的人
"A white car" 找到了画面中央的白色轿车
"A truck with the text 'JCN'" 找到了带有 JCN 字样的货车

输入(两路)

文本端:一条自然语言查询,如 "A truck with the text 'JCN'",在线实时输入

图像端:监控视频拆出的所有图像帧(数据库),通常离线预先编码好存储

输出:数据库中与查询文本余弦相似度最高的那张图像(即最匹配的视频帧)

image.gif

image.gif

其它的应用

应用方向 一句话说明 是否需要微调 CLIP
零样本图像分类 不用训练,直接用文字描述类别给图片分类 ❌ 零样本,完全不用微调
图文检索 文字搜图片、图片搜文字 ❌ 零样本推理
开放词汇检测分割 识别任意新词物体,不用标注训练 ⚠️ 少量微调下游头
AIGC 生成打分引导 控制文生图图文匹配度 ❌ 直接复用特征
视频动作识别 零样本识别视频动作 ⚠️ 简单下游适配
多模态大模型底座 几乎所有图文大模型的基础组件 ✅ 后续二次开发微调
目录
相关文章
|
1月前
|
机器学习/深度学习 自动驾驶 PyTorch
PyTorch深度学习实战 |SegNet
CamVid_11是面向自动驾驶的语义分割数据集,含700+张精准标注图像,划分为训练/验证/测试集。涵盖道路、车辆、行人等11类场景目标(含背景共12类),支持SegNet等模型训练与评估。
182 3
|
1月前
|
人工智能 运维 安全
Claude Code模型替换升级指南 接入DeepSeek V4-Pro实操与问题排查全解
当下终端AI编程工具Claude Code凭借轻量化、全流程代码处理、跨文件项目分析等优势,成为众多开发者日常编码、项目重构、漏洞修复、脚本编写的主流选择。原生状态下Claude Code绑定专属模型运行,虽然基础能力稳定,但在代码理解、长逻辑推理、中文场景适配、调用成本等方面仍存在优化空间。
869 8
|
1月前
|
人工智能 自然语言处理 数据挖掘
AI时代的个人知识管理:从知识库、SOP到OPC一人公司
本文探讨AI时代下的个人知识管理新范式——OPC一人公司:它并非法律意义的单人企业,而是以目标判断为核、AI为辅、知识库为基、SOP为纲、复盘为钥的可复用工作系统。强调经验沉淀、流程自动化与持续优化,助力个体实现部门级任务处理能力。
314 4
|
1月前
|
人工智能 自然语言处理 数据挖掘
用ChatGPT和Codex搭建个人AI工作流:从一人部门到开源实践
本文探讨AI时代“一人部门”工作法:用ChatGPT拆解任务、构建知识库,用Codex将流程工具化,结合复盘与沉淀,打造可持续的个人AI工作系统(OPC)。非替代团队,而是以工具+流程+知识,提升单人可复用、可迭代的系统性产出能力。
697 7
|
1月前
|
机器学习/深度学习 人工智能 应用服务中间件
别再被误导了!一文讲透 MCP 与 Function Calling 的真实关系
AI圈热议MCP能否取代Function Calling?实则二者定位迥异:Function Calling是大模型的“决策层”,负责选工具、生成参数;MCP是后端与工具间的“执行协议”,统一调用标准。二者分属不同链路环节,非替代关系,而是协同互补的“黄金搭档”。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
田间杂草检测数据集分享(适用于YOLO系列深度学习分类检测任务)
本数据集含4000张真实农田图像(小麦/玉米/水稻田),YOLO格式标注杂草目标,覆盖多天气、光照与视角,适用于YOLO系列等目标检测模型训练,助力智能除草与精准农业研究。(239字)
374 16
|
1月前
|
监控 API Windows
WGCLOUD v3.6.8 正式更新
WGCLOUD v3.6.8发布:修复CPU/内存等指标偶现为0、大屏离线数据不显示等Bug;新增Windows系统服务列表及开放API;优化告警脚本执行与SNMP设备运行时间兼容性。升级方式详见官方图示。
|
1月前
|
安全 JavaScript 前端开发
《ZAKU渗透论:卓伊凡的2026渗透工程》第四章:Web攻击原理(下)——XSS、CSRF、文件上传漏洞
本章详解XSS、CSRF与文件上传三大Web漏洞:XSS通过注入恶意脚本窃取Cookie;CSRF伪造已登录用户请求执行非自愿操作;文件上传漏洞则因校验缺失致服务器被控。三者共性——过度信任用户输入。(239字)
361 10
|
1月前
|
人工智能 自然语言处理 计算机视觉
人工智能|大白话Meshed-Memory Transformer
M2Transformer是一种图像描述生成模型,由三部分构成:骨干编码器(Faster R-CNN)提取区域特征;记忆增强编码器(Transformer)对特征进行语义细化;网格解码器(Transformer)将增强特征转化为自然语言描述。结构清晰、层次分明,兼顾准确性与可解释性。(239字)
189 4
|
1月前
|
人工智能 机器人 芯片
人工智能|YOLOv8实战
本内容为安全帽检测实战项目,基于YOLOv8模型,涵盖Kaggle数据获取、自定义yaml配置、模型训练(yolo_train.py)与测试(yolo_test.py),并提供服务器(FastAPI+Docker)、边缘(Jetson+TensorRT)及国产嵌入式(RK3588+RKNN)三类部署方案,支持工业场景实时智能识别。(239字)
339 1

热门文章

最新文章