机器视觉之:CLIP
- 1、引言
- 2、CLIP(Contrastive Language-Image Pre-training)
- 2.1 定义与解析
- 2.2 核心原理
- 2.2.1 双塔结构:图像编码器 + 文本编码器
- 2.2.2 对比学习:把"配对"拉近、把"非配对"推远
- 2.2.3 训练数据:4 亿图文对
- 2.2.4 零样本分类:用文本当"分类器"
- 2.3 实现方式 / 工作流程
- 2.4 算法公式
- 2.5 代码示例
- 3、总结
1、引言
小屌丝:鱼哥,最近搞图像分类,发现个怪事——我训的模型换个数据集就拉胯,咋回事啊?
小鱼:嘿,这叫"数据集偏见",模型只认你喂的那几个类,没见过的它一脸懵。
小屌丝:那有没有那种"啥都能认一点"的万能模型?
小鱼:有,而且思路特别骚——直接让图像和文字"谈恋爱"。这就是今天的主角CLIP。
小屌丝:图……和文谈恋爱?鱼哥你别又整抽象。
小鱼:(⊙o⊙)… 用对比学习把图像和对应文字塞进同一个向量空间,谁跟谁是一对,模型自己学会。零样本分类,就是从这儿来的。
小屌丝:懂了,一个"看图说话"、一个"听文认图",最后他俩能在同一个坐标系里对上号。
小鱼:精辟。那咱开整。
2、CLIP(Contrastive Language-Image Pre-training)
2.1 定义与解析
CLIP(Contrastive Language-Image Pre-training,对比语言-图像预训练),是 OpenAI 在 2021 年提出的多模态预训练模型。
一句话理解它:同时训练一个"看图"的编码器和一个"读文"的编码器,让"图片—文字"配对样本在向量空间里挨得近、非配对样本离得远。训完之后,图像和文本就共用同一个语义空间了。
它最炸裂的地方在于——零样本(Zero-shot)。你不用再为某个新任务重新训练分类器,直接拿文字描述当"类别原型"去比对图像就行。
简单来说,CLIP 把"分类"从"背题库"变成了"查字典":图像查到文字,分类自然就出来了。
2.2 核心原理
2.2.1 双塔结构:图像编码器 + 文本编码器
CLIP 是两个独立的编码器(双塔):
- 图像编码器(Image Encoder):可选ViT(Vision Transformer)或ResNet,把图像压成一个特征向量;
- 文本编码器(Text Encoder):一个Transformer,把句子压成同维度的特征向量。
关键点:两塔输出维度一致(如 512/640/768),这样图像向量和文本向量才能直接算相似度。
2.2.2 对比学习:把"配对"拉近、把"非配对"推远
训练数据是一堆(图像, 文本)对。在一个 batch 里,真正配对的只有对角线上的 N 对,其余 N²−N 对都是"错的"。
CLIP 用对比损失训练:让对角线(正样本对)的相似度尽可能高,让非对角线(负样本对)的相似度尽可能低。这就逼着两个编码器把"图文语义"对齐到同一空间。
2.2.3 训练数据:4 亿图文对
CLIP 在4 亿(400M)从互联网收集的(图像, 文本)对上训练。海量、弱标注、天然多样——这正是它能"泛化到没见过的任务"的底气。
2.2.4 零样本分类:用文本当"分类器"
推理时,比如要分"狗/猫/车",就把类别名套进模板:
“a photo of a dog” / “a photo of a cat” / “a photo of a car”
用文本编码器编码这些句子,再和图像向量算余弦相似度,谁最像就是哪类。整个过程没有任何新增训练参数。
2.3 实现方式 / 工作流程
CLIP 的推理可以压缩成 4 步:
- 编码图像:图像过 Image Encoder → 图像向量I II;
- 编码文本:候选类别描述过 Text Encoder → 一组文本向量{ T 1 , T 2 , . . . } \{T_1,T_2,...\}{T1,T2,...};
- 算相似度:每个T k T_kTk与I II做余弦相似度(再乘温度系数);
- 归一化选类:softmax 后取概率最大的类别。
Image ──▶ Image Encoder ──▶ I │ Text (prompts) ──▶ Text Encoder ──▶ {Tk} ──▶ cosine(I, Tk) ──▶ softmax ──▶ 类别2.4 算法公式
CLIP 的核心是对比损失(InfoNCE 的对称形式)。设 batch 内有 N 对,图像特征I i I_iIi、文本特征T i T_iTi,先各自做 L2 归一化并除以温度τ \tauτ:
sim ( I i , T j ) = I i ⊤ T j ∥ I i ∥ ∥ T j ∥ ⋅ τ \text{sim}(I_i, T_j) = \frac{I_i^\top T_j}{\|I_i\|\|T_j\| \cdot \tau}sim(Ii,Tj)=∥Ii∥∥Tj∥⋅τIi⊤Tj
图像→文本方向的损失(让第i ii个图像匹配第i ii个文本):
L i → t = − 1 N ∑ i = 1 N log exp ( sim ( I i , T i ) ) ∑ j = 1 N exp ( sim ( I i , T j ) ) \mathcal{L}_{i\to t} = -\frac{1}{N}\sum_{i=1}^{N} \log \frac{\exp(\text{sim}(I_i, T_i))}{\sum_{j=1}^{N}\exp(\text{sim}(I_i, T_j))}Li→t=−N1i=1∑Nlog∑j=1Nexp(sim(Ii,Tj))exp(sim(Ii,Ti))
总损失为双向对称平均:L = 1 2 ( L i → t + L t → i ) \mathcal{L} = \frac{1}{2}(\mathcal{L}_{i\to t} + \mathcal{L}_{t\to i})L=21(Li→t+Lt→i)。
记住一句话:正样本对相似度拉满,负样本对压下去,图文就对齐了。
2.5 代码示例
用 OpenAI 官方clip包,跑一个零样本图像分类:
环境准备:
pipinstallgit+https://github.com/openai/CLIP.git pipinstalltorch torchvision pillow零样本分类:
importclipimporttorchfromPILimportImage# 1、加载模型(可选 ViT-B/32、ViT-B/16、ViT-L/14 等)device="cuda"iftorch.cuda.is_available()else"cpu"model,preprocess=clip.load("ViT-B/32",device=device)# 2、准备图像与候选文本image=preprocess(Image.open("dog.jpg")).unsqueeze(0).to(device)labels=["a photo of a dog","a photo of a cat","a photo of a car"]text=clip.tokenize(labels).to(device)# 3、前向:得到图像-文本相似度(已含温度缩放)withtorch.no_grad():logits_per_image,_=model(image,text)probs=logits_per_image.softmax(dim=-1).cpu().numpy()[0]# 4、输出概率forlabel,pinzip(labels,probs):print(f"{label}:{p:.3f}")# 例:a photo of a dog: 0.912图像检索(以文搜图):
# 把一批图像编码成向量,用文本向量去检索最相近的图withtorch.no_grad():image_features=model.encode_image(image_batch)# [B, D]text_feature=model.encode_text(clip.tokenize(["a sunset on the beach"]).to(device))sims=(image_features @ text_feature.T).softmax(dim=0)top_idx=sims.argmax().item()# 最匹配的图像索引小提示:CLIP 是后续一大波多模态模型的"地基"——DALL·E、Stable Diffusion 的文本条件、BLIP、LLaVA 都建立在它的图文对齐思想之上。学会了 CLIP,半个多模态圈子你就通了。
典型应用场景:零样本图像分类、以文搜图 / 以图搜文、图像检索、内容审核、作为下游生成模型(扩散模型)的文本条件编码器。
3、总结
今天这篇,把CLIP(对比语言-图像预训练)啃了一遍:
- 是什么:OpenAI 的多模态模型,把图像和文本对齐到同一向量空间;
- 怎么搭:图像编码器 + 文本编码器双塔,对比损失训练;
- 强在哪:4 亿图文对喂出来的,天然零样本,换个任务不用重训;
- 怎么用:文本当分类器,算余弦相似度 + softmax,几行代码就跑通;
- 往哪走:它是 DALL·E、Stable Diffusion、LLaVA 等多模态模型的共同基石。
到这儿,你手里又多了一把"万能钥匙"。配合前面咱讲过的SAM(分割一切),图文分割+识别的活儿基本都能拿下。
我是小鱼:
- CSDN 博客专家;
- AIGC MVP专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 企业认证金牌面试官;
- 多个头部名企认证&特邀讲师等;
- 名企签约职场面试培训、职场规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)评测一等奖获得者;
关注小鱼,学习【机器视觉与目标检测】最新最全的领域知识。