欢迎光临
我们一直在努力

人工智能 |手算CLIP模型

🌞欢迎来到人工智能的世界  🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

📆首发时间:🌹2026年4月22日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

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

文本编码器

网络结构

图片编码器

网络结构

图文相似度计算

相似度矩阵

双向对比损失(Contrastive Loss)

CLIP 推理阶段:Zero-Shot 预测

CLIP 的应用

图文检索

​编辑

其它的应用

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

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

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

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

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

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

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

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

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

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

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

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


文本编码器

网络结构
项目官方数值对应结构图位置
模型总参数量 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特征 → 输出文本特征

为了徒手笔算,我们做小维度的 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 前馈网络

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

后续操作:

输入文字

12 层 Masked Self-Attention (类 Decoder 结构)

取最后 [EOS] 位置的输出 → 512 维

可学习线性层 (512 → 512)

L2 单位归一化

最终文本特征向量 t̂ (模长 = 1)


图片编码器

网络结构
部分文本编码器图像编码器
架构 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,) ← 最终图像特征 î

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

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

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


图文相似度计算

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

假设 batch 里有 3 个图文对

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

对应文本:

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

相似度矩阵

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

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

乘以温度系数 τ

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

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


双向对比损失(Contrastive Loss)

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

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

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

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

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

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

的相似性得分;

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

的相似性得分。

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

完全对称。

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

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

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

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

  

 

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

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

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

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

 


CLIP 推理阶段:Zero-Shot 预测

  • 计算 (余弦相似度)

  • 取 argmax,找出得分最高的类别

  • 最终输出:自然语言类别描述,如 "A photo of a dog."


CLIP 的应用

图文检索

三个查询示例

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

输入(两路)

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

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

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

其它的应用
应用方向一句话说明是否需要微调 CLIP
零样本图像分类 不用训练,直接用文字描述类别给图片分类 ❌ 零样本,完全不用微调
图文检索 文字搜图片、图片搜文字 ❌ 零样本推理
开放词汇检测分割 识别任意新词物体,不用标注训练 ⚠️ 少量微调下游头
AIGC 生成打分引导 控制文生图图文匹配度 ❌ 直接复用特征
视频动作识别 零样本识别视频动作 ⚠️ 简单下游适配
多模态大模型底座 几乎所有图文大模型的基础组件 ✅ 后续二次开发微调

赞(0)
未经允许不得转载:171主机测评 » 人工智能 |手算CLIP模型
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址