CLIP(Contrastive Language-Image Pre-Training)是 OpenAI 开发的模型,能够通过自然语言理解图像,将视觉与语言连接起来。
用途 CLIP 适用于以下场景:零样本图像分类(无需训练数据)、图像-文本相似度匹配、语义图像搜索、内容审核(检测 NSFW、暴力内容)、视觉问答,以及跨模态检索(图像→文本、文本→图像)。
主要能力 模型基于 4 亿对图像-文本数据训练,在 ImageNet 零样本任务上可达到 ResNet-50 的水平,采用 MIT 许可证。可用模型包括 RN50(102M 参数,速度快,质量良好)、ViT-B/32(151M 参数,速度中等,质量更好,推荐使用)、ViT-L/14(428M 参数,速度最慢,质量最佳)等。性能方面,图像编码在 CPU 上约 200ms、GPU(V100)上约 20ms;文本编码 CPU 约 50ms、GPU 约 5ms;相似度计算均小于 1ms。
使用方式 安装命令: pip install git+https://github.com/openai/CLIP.git pip install torch torchvision ftfy regex tqdm
加载模型并执行零样本分类的基本流程: import torch import clip from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device=device)
image = preprocess(Image.open("photo.jpg")).unsqueeze(0).to(device) text = clip.tokenize(["a dog", "a cat", "a bird", "a car"]).to(device)
with torch.no_grad(): image_features = model.encode_image(image) text_features = model.encode_text(text) logits_per_image, logits_per_text = model(image, text) probs = logits_per_image.softmax(dim=-1).cpu().numpy()
labels = ["a dog", "a cat", "a bird", "a car"] for label, prob in zip(labels, probs[0]): print(f"{label}: {prob:.2%}")
图像-文本相似度计算需对特征做归一化后求余弦相似度;语义图像搜索可先对图像库编码并归一化,再用文本查询计算相似度并取 top-k;内容审核可定义类别文本(如 safe for work、not safe for work、violent content、graphic content)后分类;批量处理可同时编码多张图像与多条文本,得到相似度矩阵;还可将 CLIP 嵌入存入 Chroma/FAISS 等向量数据库进行检索。
最佳实践 多数情况使用 ViT-B/32 以取得平衡;计算余弦相似度前必须归一化嵌入;采用批量处理提高效率;缓存嵌入避免重复计算;使用描述性标签以提升零样本表现;推荐使用 GPU(可快 10-50 倍);使用提供的 preprocess 函数预处理图像。
适用场景与限制 CLIP 适合宽泛类别的图像理解任务,不适合细粒度任务;依赖描述性文本,模糊标签效果差;基于网络数据训练,可能存在数据集偏差;不提供边界框,仅处理整图;空间理解与计数能力较弱。若需更好的图像描述可考虑 BLIP-2,视觉语言对话可考虑 LLaVA,图像分割可考虑 Segment Anything。
资源 GitHub:https://github.com/openai/CLIP 论文:https://arxiv.org/abs/2103.00020 Colab:https://colab.research.google.com/github/openai/clip/ 许可证:MIT
代理操作流程 检查环境(GPU 显存、模型检查点与许可证、框架版本、输入格式);确认输入(格式、标识符、参数,不确定时询问而非猜测);先在小样本上低分辨率或短长度运行;按上述说明执行完整任务;验证结果(定性检查与任务指标,检查生成内容的许可证限制);报告运行内容(版本、命令、参数)、检查项与仍不确定之处。若遇到大输入内存不足,可降低分辨率或序列长度、使用半精度或分块处理;若安装版本缺少某函数、标志或端点,应查阅该版本文档并告知用户,切勿虚构 API;若必需输入、标识符或参数不明确,应询问用户或明确说明假设后再运行。
完整性规则 不得捏造结果、参数、标识符、引用或统计数据;无法运行或验证时应如实说明;商业或发布用途前检查模型与数据集许可证;版本相关细节可能过时,应以已安装版本的官方文档为准;涉及费用、共享 GPU 或云配额、个人或患者数据、不可撤销操作时,应先征得同意。
相关技能 llava(大型语言与视觉助手)、blip-2-vision-language(Salesforce BLIP-2,通过 HuggingFace Transformers 使用 Q-Former 桥接冻结图像编码器与 LLM)、segment-anything-model(零样本迁移的图像分割基础模型)。