理解 CLIP 模型与图像搜索应用
什么是 CLIP - 连接文本与图像的多模态 AI
CLIP(Contrastive Language-Image Pre-training)是 OpenAI 于 2021 年发布的多模态模型,能够理解图像和文本之间的语义关系。它将图像和文本映射到同一个向量空间中,使得语义相似的图像和文本在向量空间中距离接近。
CLIP 的革命性在于:无需为每个具体任务训练专用模型。传统方法需要为"猫狗分类""场景识别""物体检测"分别训练模型,而 CLIP 通过学习图文对应关系,获得了通用的视觉理解能力,可以零样本(zero-shot)完成各种分类和检索任务。
训练数据:CLIP 在 4 亿个从互联网收集的图像-文本对上训练。这种大规模的弱监督学习使模型获得了广泛的世界知识,能理解从日常物品到抽象概念的各种视觉内容。
应用场景:文本到图像搜索(用自然语言搜索图片)、零样本图像分类(无需训练数据即可分类)、图像-文本匹配评分、内容审核、推荐系统中的跨模态理解。
对比学习机制 - 通过对比进行嵌入学习
CLIP 使用对比学习(Contrastive Learning)训练图像编码器和文本编码器,使匹配的图文对在向量空间中接近,不匹配的远离。
训练过程:每个批次包含 N 个图像-文本对。计算 N 个图像嵌入和 N 个文本嵌入之间的所有 N² 个余弦相似度。对角线上的 N 个正确配对应该相似度最高,其余 N²-N 个错误配对应该相似度低。使用对称交叉熵损失优化。
温度参数:可学习的温度参数 τ 缩放相似度分数,控制分布的"锐度"。较低的温度使模型更加确定(正确配对的概率更集中),较高的温度使分布更平滑。
大批次训练:CLIP 使用 32,768 的超大批次大小。更大的批次提供更多的负样本,使对比学习更有效。这也是 CLIP 需要大量计算资源训练的原因之一。
嵌入空间的性质:训练后,图像和文本共享同一个 512 维(或 768 维)向量空间。"一只在草地上奔跑的金毛犬"的文本嵌入,与对应照片的图像嵌入在向量空间中非常接近。
模型架构 - 图像编码器与文本编码器
CLIP 由两个独立的编码器组成,分别处理图像和文本输入。
图像编码器:可以是 ResNet(如 ResNet-50x64)或 Vision Transformer(如 ViT-L/14)。ViT 版本性能更好。输入图像被缩放到固定尺寸(如 224x224 或 336x336),输出一个固定维度的向量(如 512 维或 768 维)。
文本编码器:基于 Transformer 的文本编码器,类似 GPT-2 架构。输入文本被分词后编码,取 [EOS] token 的隐藏状态作为文本嵌入。最大输入长度 77 个 token。
投影层:两个编码器的输出通过线性投影层映射到共同的嵌入空间。投影后进行 L2 归一化,使所有向量位于单位超球面上。余弦相似度等价于归一化向量的点积。
模型变体:CLIP 有多种规模的变体。ViT-B/32(最快,精度较低)、ViT-B/16(平衡)、ViT-L/14(最准确但最慢)。选择取决于延迟要求和精度需求。
零样本分类实现 - 提示工程技巧
CLIP 的零样本分类无需任何训练数据,通过比较图像嵌入与候选类别文本嵌入的相似度实现分类。
基本流程:定义候选类别的文本描述(如 "a photo of a cat"、"a photo of a dog")→ 计算每个文本的嵌入 → 计算输入图像的嵌入 → 比较图像嵌入与所有文本嵌入的余弦相似度 → 最高相似度的类别即为预测结果。
提示工程:文本描述的措辞显著影响分类精度。"a photo of a {class}" 比单独的类别名效果好 5-10%。针对特定领域可以设计更好的提示模板(如卫星图像用 "a satellite photo of {class}")。
提示集成:对每个类别使用多个提示模板,取嵌入的平均值。例如同时使用 "a photo of a cat"、"a picture of a cat"、"a cat in the wild" 等。集成通常提升 2-5% 精度。
性能参考:CLIP ViT-L/14 在 ImageNet 上零样本 top-1 准确率约 75%(无需任何 ImageNet 训练数据)。虽然不及专门训练的模型(90%+),但通用性和灵活性无可比拟。
构建图像搜索系统 - 向量数据库集成
利用 CLIP 嵌入构建文本到图像的语义搜索系统。
索引构建:对图像库中的所有图像计算 CLIP 嵌入,存储到向量数据库中。每张图像对应一个 512/768 维的向量。向量数据库选择:Pinecone(托管服务)、Milvus(开源)、Qdrant(开源,Rust 实现)、pgvector(PostgreSQL 扩展)。
搜索流程:用户输入文本查询 → 计算文本的 CLIP 嵌入 → 在向量数据库中进行最近邻搜索(ANN)→ 返回相似度最高的图像。搜索延迟通常在 10-50ms(百万级图像库)。
混合搜索:结合向量搜索(语义相似性)和传统关键词搜索(精确匹配标签)。例如先用 CLIP 向量搜索缩小范围,再用元数据过滤(日期、分辨率等)。
图像到图像搜索:输入一张图像,找到视觉上相似的图像。直接比较图像嵌入之间的余弦相似度。适合"找相似图片"功能。
规模化考虑:百万级图像库需要近似最近邻(ANN)算法(如 HNSW、IVF)而非精确搜索。权衡召回率和搜索速度。定期重建索引以纳入新增图像。
CLIP 的演进与局限 - OpenCLIP、SigLIP 及实际限制
CLIP 发布后,社区和研究机构推出了多个改进版本。
OpenCLIP:LAION 社区的开源复现,使用更大的数据集(LAION-5B,50 亿图文对)训练。部分模型性能超越原版 CLIP。完全开源,可自由商用。
SigLIP:Google 的改进版本,使用 Sigmoid 损失替代 Softmax 损失,不需要超大批次即可有效训练。在相同计算预算下性能优于 CLIP。
EVA-CLIP:使用更强的视觉编码器(EVA ViT)和改进的训练策略。在多个基准测试上刷新了零样本分类记录。
CLIP 的局限性:
- 空间理解弱:难以区分"猫在桌子上"和"桌子在猫上"
- 计数能力差:无法准确判断图像中物体的数量
- 细粒度区分有限:难以区分相似的子类别(如不同品种的鸟)
- 文本长度限制:最大 77 token,无法处理长描述
- 训练数据偏差:互联网数据的偏见会反映在模型中
选择建议:通用场景使用 OpenCLIP ViT-L/14;需要更高精度使用 EVA-CLIP;资源受限使用 ViT-B/32;需要商用确认许可证兼容性。