AI日记:多模态CLIP
从2021年OpenAI发布至今,CLIP开创的对比学习范式已经深刻影响了整个多模态领域。直到2025年底,顶会ICCV、AAAI还在不断接收CLIP相关的创新工作,足见其生命力。
今天我们从定义、原理、架构、推理到最新进展,一次性把CLIP讲透。
##学习AI,求职AI使用幕语:幕语AI
一、CLIP 是什么?

1.1 基本定义
CLIP(Contrastive Language–Image Pre-training,对比语言-图像预训练) 是 OpenAI 在 2021 年发布的革命性多模态模型。
核心目标:让 AI 能够理解图像和自然语言之间的语义关联,实现真正的图文统一表示学习。
1.2 革命性突破
在 CLIP 出现之前,计算机视觉和自然语言处理是两个完全割裂的领域:
-
传统CV模型:只能识别预定义的固定类别(如 ImageNet 的 1000 类)
-
传统NLP模型:只能处理文本,无法理解图像内容
CLIP 的出现,彻底改变了这一局面:
|
突破点 |
说明 |
|
✅ 打破模态壁垒 |
首次实现图像和文本的统一语义空间 |
|
✅ 开放世界识别 |
支持任意自然语言描述的图像理解 |
|
✅ 零样本迁移 |
无需微调就能执行新任务 |
|
✅ 数据效率革命 |
利用互联网海量弱标注数据,无需人工标注 |
二、CLIP 的核心思想
2.1 对比学习范式
传统监督学习是对每个图像标注固定类别,直接训练分类器。
CLIP 不一样——CLIP不直接学习分类,它学习的是「哪些图文是配对的,哪些不是」。
通过在海量图文对上进行对比学习,让模型学到通用的语义关联知识。
2.2 共享语义空间
CLIP 的核心创新是构建了一个共享的多模态向量空间:
图像编码器 文本编码器 ↓ ↓ [图像特征向量] ↔ [文本特征向量] ↖_____________↗ 共享语义空间
在这个空间中:
-
语义相似的图像和文本 → 向量距离很近
-
语义无关的图像和文本 → 向量距离很远
这就是为什么CLIP能做到"以图搜文"和"以文搜图"。
三、CLIP 的技术架构
3.1 双编码器结构(Dual Encoder)
CLIP采用非常简洁的双塔结构:
┌─────────────────┐ 输入图像 → │ 图像编码器 │ → 图像特征向量 (512维) │ (ViT/ResNet) │ └─────────────────┘ ↓ 共享语义空间 ← 余弦相似度计算 ↑ ┌─────────────────┐ 输入文本 → │ 文本编码器 │ → 文本特征向量 (512维) │ (Transformer) │ └─────────────────┘
编码器选择:
-
图像编码器:Vision Transformer (ViT-B/32, ViT-L/14 等) / ResNet-50/101 (带注意力池化)
-
文本编码器:12层 Transformer,最大序列长度77 tokens,使用BPE分词器
3.2 训练过程详解
数据准备:
-
数据规模:4亿个图像-文本对
-
数据来源:互联网公开数据(网页图片 + alt文本/标题)
-
数据特点:自然形成的弱监督信号,无需人工标注
训练流程,我整理成伪代码方便理解:
def clip_training_step(batch_images, batch_texts, temperature=0.07): # 1. 分别编码图像和文本 image_features = image_encoder(batch_images) # [batch_size, hidden_dim] text_features = text_encoder(batch_texts) # [batch_size, hidden_dim] # 2. L2归一化(使点积等价于余弦相似度) image_features = normalize(image_features, dim=-1) text_features = normalize(text_features, dim=-1) # 3. 计算相似度矩阵 logits = image_features @ text_features.T / temperature # [B, B] # 4. 对比损失(InfoNCE) labels = torch.arange(batch_size) # 对角线为正样本 loss_i = cross_entropy(logits, labels) # 图像→文本方向 loss_t = cross_entropy(logits.T, labels) # 文本→图像方向 return (loss_i + loss_t) / 2
关键技术细节:
-
温度参数 (temperature):控制相似度分布的尖锐程度,通常在 0.01-0.1 之间
-
对称损失:同时优化图像→文本和文本→图像两个方向,提升对齐效果
-
大批量训练:使用 32K+ 的 batch size 提升负样本质量,对比学习效果更好
四、CLIP 的推理能力
4.1 零样本分类(Zero-shot Classification)
这是 CLIP 最引人注目的能力:无需任何微调,直接用自然语言进行图像分类。
工作流程:
def zero_shot_classify(image, class_names, clip_model): # 1. 生成候选文本提示 texts = [f"a photo of a {name}" for name in class_names] # 2. 编码图像和文本 image_feat = clip_model.encode_image(image) # [1, D] text_feats = clip_model.encode_text(texts) # [N, D] # 3. 计算相似度并选择最高分 similarities = (image_feat @ text_feats.T).softmax(dim=-1) predicted_class = class_names[similarities.argmax()] return predicted_class
实际效果:
-
ImageNet 零样本准确率:~76%(接近有监督 ResNet-50 的 76.5%)
-
跨数据集泛化:在未见过的数据集上表现优异
-
开放词汇分类:可以识别训练时未见过的类别
4.2 图文检索(Image-Text Retrieval)
-
以文搜图:输入"一只戴着墨镜的柯基犬",输出最匹配的图片
-
以图搜文:输入一张图片,输出最匹配的文字描述
应用场景:
-
电商平台商品搜索
-
社交媒体内容检索
-
企业数字资产管理
##学习AI,求职AI使用幕语:幕语AI
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)