跳转到内容

CLIP — Contrastive Language-Image Pre-training

是什么

CLIP 是 OpenAI 2021 年训出来的双塔模型——一塔吃图、一塔吃文,把它们映射到同一个向量空间。日常类比:让同一组模特拍 4 亿张照片,每张配一段文字描述,模型的目标是「同一对配对的图和文字应该靠得很近,不配对的应该离得很远」。

训完之后神奇的事情发生了:

  • 给一张猫的照片,写两行 prompt:"a photo of a cat""a photo of a dog"
  • CLIP 算余弦相似度,发现猫的 prompt 和图更近
  • 没有训练任何分类头,分类直接靠”图和哪句文字更近”

这种”不用训练就能分类”的能力叫 zero-shot transfer,是 CLIP 最颠覆的一招。

为什么重要

不理解 CLIP,下面这些事都没法解释:

  • 为什么 Stable Diffusion / DALL-E / Midjourney 都拿 CLIP 文本编码器做 prompt → 图条件——它们是”在 CLIP 学到的图文空间里采样”
  • 为什么 GPT-4V / Gemini / Claude 视觉部分基本都是 CLIP-style 双塔对齐——把图变成”LLM 可以读的 token”
  • 为什么”互联网级数据 + 简单对比损失”能超过精心设计的 ImageNet 监督——4 亿条粗糙 caption 比 1.4M 条精标更有用
  • 为什么过去五年所有 multimodal 系统的”视觉接入口”长得都那么像

核心要点

CLIP 的训练流程可以拆成 三步

  1. 双塔结构:图像编码器(ResNet 或 vit)+ 文本编码器(12 层 Transformer),两塔不共享权重;输出都做 L2 归一化,投到同一向量空间。

  2. 对比损失(contrastive loss):一个 batch 取 N 张图 + N 段配对文字,算 N×N 相似度矩阵——对角线是匹配(要拉近),非对角线是负样本(要推开)。N 越大效果越好,CLIP 用了 N=32768。

  3. 推理变成”找最近邻”:分类时把每个类别名套进 "a photo of a {label}",过文本编码器得到 N 个文本向量;图过图像编码器得到 1 个向量;选最相似的那条 prompt 当预测。

三步加起来叫 symmetric InfoNCE——图找文 + 文找图,两边对称。

实践案例

案例 1:零样本图像分类

拍一只猫的照片,准备一个类别列表:

classes = ["cat", "dog", "bird"]
prompts = [f"a photo of a {c}" for c in classes]
text_features = clip.encode_text(prompts)
image_features = clip.encode_image(cat_photo)
scores = image_features @ text_features.T
predicted = classes[scores.argmax()] # → "cat"

整套流程不需要任何训练样本。换一组类别名(比如换成花的品种、车型),分类器立刻就变了——不用重训、不用标注。

案例 2:图文检索

"sunset over ocean"

  • 把这段文字过文本编码器,得到一个查询向量
  • 把图库里所有图过图像编码器,得到 N 个图像向量
  • 算余弦相似度排序,返回 top-K

这是图库搜索(Pinterest、Google Images)背后的同款思路。反过来”以图搜文”也成立。

案例 3:Stable Diffusion 用 CLIP 文本编码器

输入 "a cat in space"

  • CLIP text encoder 把这句话编成 embedding
  • 扩散模型把这个 embedding 当条件,从纯噪声反推出一张图

CLIP 自己不会画图,但它学到的图文空间足够好,扩散模型只需要在这个空间里做 conditional sampling。没有 CLIP 的对齐空间,文生图至少要再延后两年。

踩过的坑

  1. 数据偏见:互联网爬来的图文带文化偏见——doctor 关联男性照片显著高于女性,criminal 关联深肤色显著高于浅肤色。下游(DALL-E 2、Stable Diffusion)会把偏见放大。没有简单的”训练后修复”,只能从数据源头改。

  2. 训练成本巨大:4 亿对、batch=32768、几千 GPU、几周时间。学术界基本没法独立复现 OpenAI 原版规模——LAION 团队搞 OpenCLIP 用 LAION-400M 复现,仍有 1-2 点 gap。

  3. 细粒度任务弱:区分犬种、鸟种、飞机型号(Boeing 737 vs 747)落后专门训练的模型 10-20 个点。CLIP 学到的是”bag of concepts”,不是”compositional structure”。

  4. Prompt 工程不是免费的:直接拿 class name 当 prompt("cat")只有 ~58% ImageNet zero-shot;改成 "a photo of a cat" 跳到 ~63%;用 80 个 template ensemble 取平均再涨 3.5 点。所谓 zero-shot 其实在 prompt 设计层面有 ImageNet 的影子。

适用 vs 不适用场景

适用

  • 零样本图像分类——给一组类别名就能分
  • 图文检索——文搜图 / 图搜文
  • 多模态系统的”视觉接入口”——LLaVA、GPT-4V、Stable Diffusion 都拿它当视觉编码器
  • 中等粒度的视觉理解——自然图像、抽象概念

不适用

  • 细粒度任务(犬种 / 鸟种 / 车型)→ 用 SigLIP 或 EVA-CLIP
  • 数值推理(“3 只猫” vs “5 只猫”)/ 空间关系(“猫在狗左边”)→ CLIP 不会数也不懂方位
  • 长文本理解(text encoder 只支持 76 token)→ 用 Long-CLIP 或直接接 LLM
  • 有 OCR 干扰的场景——图里写着 “cat” 字符会被误判成”猫”

历史小故事(可跳过)

  • 2017-2018:Transformer 与 attention 机制问世,NLP 进入”大规模预训练 + 下游迁移”时代
  • 2019-2020bert 把这套范式带到极致;同一时期 VirTex / ConVIRT / ICMLM 三篇前置工作开始用 caption 做视觉预训练,但都没 scale 到 web 规模
  • 2021-01:CLIP 论文发布——把 ConVIRT 的对比思路 scale 到 4 亿对,第一次把 zero-shot 做成核心卖点
  • 2022:Stable Diffusion / DALL-E 2 文生图爆发,文本编码器都来自 CLIP
  • 2023:LLaVA / MiniGPT-4 把 CLIP 视觉编码器接到 LLM,多模态 LLM 成为标配
  • 2024-2025:SigLIP / EVA-CLIP / InternVL 优化 CLIP 范式(sigmoid loss / MIM 预训练 / scale 到 6B),但双塔 + 对比的核心结构没变

CLIP 真正的 novelty 不是”对比 image-text”(ConVIRT 已经做了),而是 (a) 4 亿对的数据工程 (b) zero-shot transfer 这套评测范式——它同时定义了任务和方法

学到什么

  1. 大规模 + 弱监督 > 小规模 + 强监督——前提是模型容量够大、数据足够多样
  2. 对比目标是把任意两个空间拉到一起的通用工具——视觉-文本可以,文本-代码(CodeBERT)可以,文本-语音(CLAP)也可以
  3. “评估方式”本身可以被发明——zero-shot transfer 不是预先存在的评测,是 CLIP 同时定义了任务和方法
  4. prompt 是模型可读的接口——这条直接铺垫了后续 LLM 接到视觉上的所有工作
  5. 数据工程被严重低估——论文用一段话讲清的”500K query 均衡”很可能才是 CLIP 真正的护城河,比 method 本身更难复现

延伸阅读

反向链接

  • 2d-tan-2019 —— 2D-TAN — 用二维时间图做自然语言时刻检索
  • 3d-gaussian-splatting —— 3D Gaussian Splatting — 用一堆 3D 模糊光斑重建场景
  • align-2021 —— ALIGN — 用 18 亿条脏图文对训练,证明数据规模能压住噪声
  • attention —— Attention Is All You Need
  • bert —— BERT — 双向 Transformer 预训练
  • blip2-2023 —— BLIP-2 — 用 188M 小桥接器把冻结的视觉模型和大语言模型拼起来
  • chat-univi-2023 —— Chat-UniVi — 动态视觉 token 统一图像与视频对话
  • coca-2022 —— CoCa — 把对比和生成两种多模态训练目标合到一个模型里
  • dalle-2 —— DALL-E 2 — 基于 CLIP + 扩散的图像生成
  • ddpm —— DDPM — Denoising Diffusion Probabilistic Models
  • dino —— DINO 自监督视觉 transformer
  • dit —— DiT — Diffusion Transformer
  • e5-2022 —— E5 — 用海量”自然出现的文本对”训通用 embedding
  • filip-2021 —— FILIP — 把 CLIP 的图文对齐细化到 token 级
  • flamingo-2022 —— Flamingo — 让冻结的大模型学会看图,几张样例就上手
  • hawkeye-2024 —— HawkEye — 用递归缩窗把文本查询钉在长视频时间轴上
  • imagen-2022 —— Imagen — 文生图真正的引擎是语言模型
  • immich —— Immich — 把家庭照片从别人的云里救回自己机器
  • internvideo —— InternVideo — 上海 AI Lab 视频基础模型套件
  • internvl-2023 —— InternVL — 6B 视觉基座 + QLLaMA 对齐开源多模态
  • llama-vid-2023 —— LLaMA-VID — 每帧两枚 token,把小时级视频塞进 LLM
  • llava —— LLaVA — 开源多模态对话模型
  • llava-next —— LLaVA-NeXT — 图像/视频/交织统一多模态主线仓库
  • mae —— MAE — Masked Autoencoders
  • milvus —— Milvus — 开源向量数据库
  • milvus-2021 —— Milvus — 为向量检索而生的数据库
  • minicpm-v-2024 —— MiniCPM-V — 手机能跑的 GPT-4V 级多模态模型
  • mllm-benchmark-survey-2024 —— MLLM Benchmark Survey — 200+ 多模态评测基准地图
  • mlvtg-2025 —— MLVTG — MambaAligner + 冻结 LLM 提纯的多模态视频时序定位
  • mme-benchmark-2023 —— MME Benchmark — 开源 MLLM 评测的事实起点
  • mme-survey-2024 —— MME-Survey — 多模态 LLM 怎么评才靠谱
  • mplug-owl-2023 —— mPLUG-Owl — 模块化拼装多模态大模型
  • omnistvg-2025 —— OmniSTVG — 按句子把视频里所有相关物体都框出来
  • parti-2022 —— Parti — 把文生图当作翻译,用自回归 Transformer 一像素接一像素地写
  • pillow —— Pillow — Python 图像处理库与 PIL 现代继任者
  • qvhighlights-2021 —— QVHighlights — 用自然语言查询在视频里找精彩瞬间
  • qwen2-vl-2024 —— Qwen2-VL — 动态分辨率 + M-RoPE,工业级视频理解的里程碑
  • resnet —— ResNet — 残差连接
  • sam —— SAM — Segment Anything
  • siglip-2023 —— SigLIP — 用 Sigmoid 损失训练图文对齐
  • st-llm-2024 —— ST-LLM — 把所有时空 token 交给 LLM,让它自己学时序
  • stable-diffusion —— Stable Diffusion — 开源文生图引爆
  • ta-stvg-2025 —— TA-STVG — 解耦「找谁 / 何时 / 何地」的时空视频定位
  • torchcodec —— TorchCodec — PyTorch 原生 GPU 视频解码与张量输出
  • univtg-2023 —— UniVTG — 把视频时刻定位、高光检测、摘要合成一套框架
  • vid-llm-survey-2023 —— Vid-LLM Survey — 用大语言模型理解视频的全景地图
  • video-chatgpt-2023 —— Video-ChatGPT — 让大语言模型看懂视频并聊起来
  • video-llava-2024 —— Video-LLaVA — 投影之前先对齐,图像和视频共用一个 LLM
  • videollama2 —— VideoLLaMA2 — 阿里达摩院音视频 Video-LLM 可运行实现
  • videoprism-2024 —— VideoPrism — 冻结一个模型就能搞定所有视频理解任务
  • vit —— ViT — Vision Transformer
  • vtimellm-2023 —— VTimeLLM — 让 Video LLM 学会标出事件起止时间
  • word2vec —— Word2Vec — 词向量奠基