CLIP:对比语言图像预训练的多模态基石

FreeGuideOnline 最新 2026-06-19

什么是 CLIP

CLIP(Contrastive Language-Image Pre-training)是由 OpenAI 提出的一种多模态模型,它能够通过对比学习同时理解图像和文本,并将它们映射到同一个向量空间。简单来说,CLIP 可以判断一张图片与一段描述性文本是否匹配,从而实现对视觉概念的零样本(zero-shot)识别,无需在特定任务上进行微调。

传统的视觉模型需要依赖大量人工标注的数据,且只能识别训练时见过的类别;而 CLIP 直接从互联网上收集的 4 亿对图像-文本对中学习,用自然语言作为监督信号,打破了类别数量的限制。这使它成为连接视觉与语言的基石模型,启发了 DALL·E、Stable Diffusion 等众多多模态模型。


为什么需要 CLIP

传统视觉模型的局限性

  • 固定类别:传统分类器在固定的类别集合上训练,如 1000 类的 ImageNet,无法延伸到未知类别。
  • 标注成本高:监督学习需要人工标注,昂贵的边界框、分割掩码等进一步限制扩展性。
  • 泛化能力弱:同一模型在不同分布的数据上表现差异大,对未见过的视觉概念几乎无识别能力。

自然语言监督的优势

互联网上充斥着大量以图文形式存在的内容,比如照片配标题、商品图片配描述。这些天然形成的弱监督信号无需额外标注,即可提供远超过任何人工构建数据集的规模与多样性。CLIP 利用这一点,学习到更通用、更具表达能力的视觉表示。


CLIP 的核心思想

CLIP 的核心是一种双塔结构 + 对比学习

  1. 图像编码器(Image Encoder):处理输入图像,输出图像特征向量。
  2. 文本编码器(Text Encoder):处理自然语言描述,输出文本特征向量。
  3. 通过对比损失,让配对的图文在向量空间中靠近,不配对则远离。

在推理时,可以将任一类别名称转化为文本(如 “a photo of a dog”),计算其与输入图像的相似度,从而实现零样本分类。


模型架构详解

双塔结构

  • 图像塔:通常采用 Vision Transformer (ViT) 或 ResNet 等经典架构。CLIP 使用了修改后的 ResNet(如 ResNet-50x4)和 ViT(如 ViT-B/32、ViT-L/14)。
  • 文本塔:基于 Transformer 的文本编码器,12 层,512 宽度,8 头注意力,处理最大长度为 77 个 token 的句子。文本序列以 [SOS] 和 [EOS] 标记包裹,[EOS] 的输出作为整个文本的表示。

双塔之间没有交互,所有交互仅在特征空间的内积层面发生,这使得两边的编码器可以独立运行,非常高效。

投影层

图像和文本编码器输出的向量维度可能不同,因此各自经过一个线性投影层,映射到统一的固定维度(如 512 维或 768 维),并进行 L2 归一化,使所有向量落于单位超球面上。

Contrastive 损失函数

给定一个 mini-batch 包含 N 个图文对,通过编码器和投影得到归一化的图像向量 ( I_i ) 和文本向量 ( T_i ),计算一个 N×N 的余弦相似度矩阵 ( S_{ij} = I_i \cdot T_j )。

对比损失的目标是最大化对角线元素(匹配对)的相似度,最小化非对角线元素。CLIP 使用对称的交叉熵损失(类似 InfoNCE),其形式为:

  • 对于图像到文本方向:
    [ \mathcal{L}{i2t} = -\frac{1}{N} \sum{i=1}^N \log \frac{ \exp(S_{ii} / \tau) }{ \sum_{j=1}^N \exp(S_{ij} / \tau) } ]
  • 对于文本到图像方向: [ \mathcal{L}{t2i} = -\frac{1}{N} \sum{i=1}^N \log \frac{ \exp(S_{ii} / \tau) }{ \sum_{j=1}^N \exp(S_{ji} / \tau) } ]

总损失为两者平均:( \mathcal{L} = (\mathcal{L}{i2t} + \mathcal{L}{t2i}) / 2 )。

其中温度系数 ( \tau ) 是可学习的标量,用于平滑 logits,训练开始时通常设为较小的正值。


训练细节

大规模数据

CLIP 的训练数据来自互联网收集的4 亿个图文对,覆盖广泛的概念、风格和领域。数据集命名为 WIT(WebImageText),并未公开,但其规模和质量是模型通用性的关键。

训练设置

  • 优化器:AdamW,较大 batch size(32,768),大量 GPU(如 256 到 400 块 V100 或 A100)。
  • 训练时长:数天到数周,通过大量计算资源将双塔模型从随机初始化训练至收敛。
  • 文本侧使用 591M 参数的 Transformer,图像侧 ViT-L/14 约 304M 参数,总参数约 428M(以 ViT-L/14@336px 为例)。

Prompt 工程

零样本分类时,类别标签需转化为自然语言句子。实验发现,直接使用标签名(如 “dog”)效果不佳,而使用提示模板(如 “a photo of adog”)能显著提升性能。甚至可以为不同数据集定制多个提示模板进行集成,进一步提升零样本准确率。


零样本分类与评估

零样本分类流程

  1. 准备候选类别名称列表,如 ["cat", "dog", "car", ...]。
  2. 构建文本描述:将每个类别填入预定义的模板,例如 “a photo of a {label}”,对每个类别得到一条文本。
  3. 使用文本编码器得到所有类别的文本特征。
  4. 对给定图像,用图像编码器提取特征,计算与所有文本特征的余弦相似度。
  5. 通过 softmax 归一化得到预测概率,取最大概率类别作为预测结果。

零样本性能表现

  • 在多个数据集上(如 ImageNet, CIFAR-100, STL-10 等),CLIP 的零样本分类准确率可以与 ResNet-50 全监督训练的模型媲美,甚至在某些数据集上超越。
  • 对抽象、艺术、素描等分布外数据,CLIP 表现出更强的鲁棒性,这得益于其训练的图文多样性。

CLIP 的局限性与挑战

  • 细粒度任务困难:对需要精细区分的任务(如车型识别、花卉分类)可能不如专门模型。
  • 文本依赖:对抽象概念(如 “love”)的理解仍有限,因为图文对齐本身存在歧义。
  • 偏见问题:训练数据中的社会偏见会被模型学习,导致不公正的分类行为。
  • 非生成式:CLIP 本身不生成图像或文本,而是提供语义相似度评估,但常作为生成模型的评估器或引导信号。

实际应用价值

图像检索与搜索

依据自然语言查询在海量图像库中检索相关内容。只需对图像库预先计算特征,即可实现毫秒级查询响应。

内容审核与过滤

结合 CLIP 的零样本能力,可以快速识别违规或 NSFW 内容,无需针对每种违规类型标注数据。

生成模型的指导

在 DALL·E 2、Stable Diffusion 等文本到图像的生成过程中,CLIP 被用于评估生成结果与文本的一致性,进行排名或微调生成方向。

多模态大模型的基石

CLIP 的视觉编码器被大量用于 LLaVA、MiniGPT-4 等多模态对话模型,作为视觉感知前端,为大型语言模型提供图像理解能力。


动手实践建议

初学者可以通过以下步骤快速体验 CLIP:

  1. 使用官方开源库

    • OpenAI 提供了 clip Python 包,安装简单:pip install git+https://github.com/openai/CLIP.git
    • 加载预训练模型:model, preprocess = clip.load("ViT-B/32")
  2. 零样本分类示例

    import torch
    import clip
    from PIL import Image
    
    model, preprocess = clip.load("ViT-B/32")
    image = preprocess(Image.open("your_image.jpg")).unsqueeze(0)
    text = clip.tokenize(["a photo of a dog", "a photo of a cat"])
    
    with torch.no_grad():
        image_features = model.encode_image(image)
        text_features = model.encode_text(text)
        logits_per_image, _ = model(image, text)
        probs = logits_per_image.softmax(dim=-1)
        print(probs)
    
  3. 尝试不同提示:修改 text 部分的提示词,观察预测变化,体会 prompt 工程的重要性。

  4. 探索更多模型:切换不同 ViT 规模(ViT-B/32, ViT-L/14)或 ResNet 变种,权衡速度与精度。


总结

CLIP 开创性地证明了自然语言监督对比学习结合的巨大潜力,它为计算机视觉注入了前所未有的开放类别识别能力,并成为现代多模态 AI 不可或缺的基础组件。理解 CLIP 的原理与运作方式,不仅能帮助你掌握多模态学习的核心范式,还能为探索更前沿的模型打下坚实基础。

无论是图像搜索、零样本分类,还是辅助生成式人工智能,CLIP 都展现了语言与视觉跨模态对齐的基石作用。现在,你可以亲手尝试 CLIP,开启多模态学习之旅。