CLIP(Contrastive Language–Image Pretraining,对比语言-图像预训练) 是 OpenAI 于 2021 年发布的著名多模态模型,能够理解图像与文本之间的语义关系。它的核心是:
使用对比学习方法,将图像和文本映射到一个共享的语义空间中,并通过相似度来进行匹配和推理。
CLIP 的出现极大推动了图文理解、零样本分类、跨模态检索等多模态任务的发展,是现代多模态 AI 系统的关键基石之一。
一、CLIP 是什么?
CLIP 是一种同时预训练图像编码器和文本编码器的模型。它的训练目标是:
- 给定一张图和一句话,让模型判断它们是否匹配;
- 用成千上万的图文对,通过**对比学习(Contrastive Learning)**训练两个编码器;
- 最终让模型能理解图像与语言之间的语义联系。
二、CLIP 的结构组成
CLIP 包含两个主要的子模型:
-
图像编码器(Image Encoder)
- 通常使用 ResNet 或 Vision Transformer(ViT);
- 输入图像 → 输出图像向量。
-
文本编码器(Text Encoder)
- 使用 Transformer(类似 GPT);
- 输入一段自然语言文本 → 输出文本向量。
二者都将输入映射到一个 共享语义空间(Shared Embedding Space),在这个空间中,可以通过余弦相似度判断图像与文本的匹配程度。
三、训练方法:对比学习(Contrastive Learning)
训练数据:成对的图像与描述性文本(如“一个正在吃披萨的男人”)
训练目标:
- 对于每一张图,匹配的文本向量要与图像向量距离最近;
- 对于每一段文本,它对应的图像要在所有图像中相似度最高。
损失函数:
使用 InfoNCE 损失:
L = − log exp ( sim ( I , T + ) ) ∑ j = 1 N exp ( sim ( I , T j ) ) \mathcal{L} = -\log \frac{\exp(\text{sim}(I, T^+))}{\sum_{j=1}^N \exp(\text{sim}(I, T_j))} L=−log∑j=1Nexp(sim(I,Tj))exp(sim(I,T+))
其中:
- I I I 是图像向量, T + T^+ T+ 是对应文本;
- sim ( I , T ) \text{sim}(I, T) sim(I,T) 表示余弦相似度;
- N 表示一个 batch 的样本数。
这种训练方式使 CLIP 学会了图像与自然语言之间的语义对应关系。
四、CLIP 的关键能力
1. 零样本图像分类(Zero-Shot Image Classification)
不需要针对特定任务微调模型,只需要设计合适的自然语言标签,就可以做图像分类。
示例:
from PIL import Image
import clip
import torch
model, preprocess = clip.load("ViT-B/32")
image = preprocess(Image.open("cat.jpg")).unsqueeze(0)
text = clip.tokenize(["a cat", "a dog", "a car"])
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
logits = (image_features @ text_features.T).softmax(dim=-1)
输出表示图像与每个文本标签的相似度。
2. 跨模态检索(Text → Image / Image → Text)
可以用一句话检索匹配的图像,或用图像检索描述它的文本。
3. 多模态理解与推理
CLIP 已成为下游多模态系统(如 DALL·E 2、Stable Diffusion、BLIP、MiniGPT-4)的感知模块之一。
五、CLIP 的优势
优势 | 说明 |
---|---|
无需任务特定训练 | 支持零样本推理 |
统一的语义空间 | 图文之间可以直接比较 |
泛化能力强 | 支持任意自然语言描述,不局限于固定类别 |
可组合性强 | 可与其他模块组合用于图像生成、问答、标注等任务 |
六、CLIP 的应用场景
- 图像分类(零样本 / 少样本)
- 图文检索系统(搜索图像、搜索描述)
- 多模态问答系统(如 Visual ChatGPT、MiniGPT-4)
- 图像生成引导(在 Stable Diffusion 中作为 Prompt 编码器)
- 内容审查、图片匹配、图文一致性检测
七、开源与生态
- 官方模型发布:
ViT-B/32
,RN50
,ViT-L/14
等 - 推理库:
openai/CLIP
,open_clip
,transformers
(支持 CLIPModel) - 中文优化版本:
- Taiyi-CLIP(IDEA)
- Chinese-CLIP(清华)
- CPT(百度)
- WuDaoCLIP(智源)
八、CLIP 的局限与挑战
问题 | 描述 |
---|---|
语言偏差 | 训练数据来自互联网,可能存在刻板印象或不当内容 |
图像细节捕捉能力有限 | 对小物体或复杂布局图像表现不如专门模型 |
空间信息弱 | ViT 特征缺乏空间显著性,难以直接用于目标定位 |
无法主动生成 | CLIP 只做匹配,不具备直接的生成能力(可用于引导) |