
OpenCLIP完全指南CLIP图文对比学习与零样本分类30秒跑通第一次推理【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip你需要让模型认识一批从没见过的图片却没有标注预算OpenCLIPCLIP 的开源实现用图文对比学习解决了这个问题它把图像和它们的文字描述配对训练之后你只需用自然语言描述类别就能直接做零样本分类与图文检索无需再训练。下面这篇指南会带你从安装、推理一路走到训练与生产部署。从没有标注也能认图说起很多业务场景是这样的你有几万张商品图、几万张监控截图但没人标注而每次新增一个类别重新训练一个分类器成本太高。CLIP 的思路是既然一张金毛犬的照片这句话和那张金毛照片天然配对那就用大规模图文对做对比学习contrastive learning让配对的图文向量靠近、不配对的远离模型就能听懂自然语言描述的类别。OpenCLIP 把这个思路完整开源了并且用公开数据训练出了从 65% 到 85%ImageNet-1k 零样本准确率各档位的预训练模型供你按算力预算直接取用。它是什么一句话定位与能力速览OpenCLIP 是一个用 PyTorch 编写的开源多模态训练与推理框架MIT 协议覆盖加载预训练权重 → 零样本推理 → 自行训练新模型全链路。核心能力速览140 模型配置ViT、ConvNeXt、SigLIP、EVA、CoCa、CLAP 音频等家族配置集中在 src/open_clip/model_configs/一行加载预训练权重create_model_and_transforms()同时给出模型、文本编码器与图像预处理完整训练栈CSV 或 webdataset 数据、多 GPU/多节点官方验证到 1024 张 A100、FSDP2、torch.compile38 个基准的零样本评测结果全部公开在 docs/openclip_results.csv30 秒跑通第一次零样本推理先装推理依赖一条命令即可pip install open_clip_torch下面是最小可运行示例加载在 LAION-2B 上训练的 ViT-B-32对一张图和三个文本标签做相似度打分import torch from PIL import Image import open_clip # 加载预训练模型与配套的图像预处理、文本 tokenizer model, _, preprocess open_clip.create_model_and_transforms( ViT-B-32, pretrainedlaion2b_s34b_b79k) model.eval() tokenizer open_clip.get_tokenizer(ViT-B-32) image preprocess(Image.open(your_image.jpg)).unsqueeze(0) text tokenizer([a diagram, a dog, a cat]) with torch.no_grad(): image_features model.encode_image(image) / 512 text_features model.encode_text(text) text_features text_features / text_features.norm(dim-1, keepdimTrue) probs (100.0 * image_features text_features.T).softmax(dim-1) print(Label probs:, probs) # 例如: [[0.02, 0.97, 0.01]]跑通后你就能看到标签概率了。想确认本地还有哪些权重可选随时执行open_clip.list_pretrained()各模型的参数量与 FLOPs 见 docs/model_profile.csv。上图是 OpenCLIP 训练过程中 ImageNet-1k 零样本准确率的变化模型边训练边学会认没见过的类别无需任何微调。核心能力拆解四个可以拆开看的模块1对比学习机制本身长什么样训练时一个 batch 里的每张图都要和同 batch 的所有文本算相似度矩阵配对的推高、不配对的压低。推理时把类别名套进a photo of a {label}模板再编码就成了一个免训练分类器OpenCLIP 继承的 CLIP 核心架构左半部分是对比预训练右半部分是把标签文本编码成分类器、实现零样本预测。2预训练模型库按算力选档位同一套 API 加载不同档位的权重。几个代表性数字ImageNet-1k 零样本准确率来自 README 与 docs/PRETRAINED.md模型训练数据分辨率零样本准确率ViT-B-16DataComp-1B13B 样本224px73.5%ViT-H-14LAION-2B32B 样本224px78.0%ViT-L-14DataComp-1B13B 样本224px79.2%ConvNext-XXLargeLAION-2B34B 样本256px79.5%ViT-bigG-14LAION-2B34B 样本224px80.1%ViT-SO400M-14-SigLIPWebLI45B 样本224px82.0%ViT-gopt-16-SigLIP2-384WebLI40B 样本384px85.0%3不止分类生成式 CoCa 与音频 CLAP对比式 CLIP 只做匹配但仓库里还有两类扩展模型CoCa在对比学习上加一个自回归解码器能对图片生成描述文字和 CLAP把图像塔换成音频塔做声音-文本对比见 src/open_clip/audio/。生成式用法一行调用model, _, transform open_clip.create_model_and_transforms( coca_ViT-L-14, pretrainedmscoco_finetuned_laion2B-s13B-b90k) captions model.generate(transform(Image.open(cat.jpg)).unsqueeze(0))4训练系统从单卡到千卡训练入口在 src/open_clip_train/。单进程示例CSV 数据源RN50 模型python -m open_clip_train.main \ --model RN50 \ --train-data /path/to/train_data.csv \ --batch-size 128 --epochs 30 --lr 1e-3 \ --precision ampOpenCLIP 训练曲线示意配合--zeroshot-frequency定期评测零样本指标训练是否收敛一目了然。真实案例实战两个马上能写的用例案例一零样本分类新类别场景你新增了扫地机器人这个品类不想重训模型。只要把类别名写进模板即可labels [fa photo of a {c} for c in [robot vacuum, coffee machine, toaster, lamp]] with torch.no_grad(): img_f model.encode_image(image) txt_f model.encode_text(tokenizer(labels)) img_f img_f / img_f.norm(dim-1, keepdimTrue) txt_f txt_f / txt_f.norm(dim-1, keepdimTrue) pred (100.0 * img_f txt_f.T).softmax(dim-1) print(pred) # 四个类别各自的概率无需任何训练这套文本模板 相似度就是零样本分类的全部机制模板措辞比如a photo of a还是an image of会直接影响效果值得在你的验证集上试几种。案例二给图库建语义搜索索引场景给一个文档/图库做以图搜文。思路是离线把所有文本编码成向量存下来查询时算相似度取 Top-Kdocs [一只橘猫趴在沙发上, 城市夜景天际线, 海滩日落] doc_vec model.encode_text(tokenizer(docs)) doc_vec doc_vec / doc_vec.norm(dim-1, keepdimTrue) # 离线算一次即可 q model.encode_image(preprocess(Image.open(query.jpg)).unsqueeze(0)) q q / q.norm(dim-1, keepdimTrue) top3 (q doc_vec.T).topk(3).indices # 最相关的 3 条文档图片量大时同理把图片向量批量算好入库检索就是一次矩阵乘。选型决策与调优到底该选哪一档模型结论先行先按部署端能承受的参数量定上限再在预算内选准确率最高的。下面是决策清单按任务选只做零样本分类、单卡部署 →ViT-B-16DataComp 版73.5%或ViT-B-32最省精度优先、服务器有 A100 级显卡 →ViT-L-1479.2%约 428M 参数或ViT-H-1478.0%LAION-2B 版追当前开源最强 →ViT-gopt-16-SigLIP2-38485.0%或ViT-SO400M-14-SigLIP-384需要多语言 → SigLIP2 多语言版或 xlm-roberta 塔系列声音场景 → CLAP-HTSAT 系列按资源选参考参数量与 FLOPsdocs/openclip_results.csvViT-L-14约 428M 参数 / 175B FLOPsViT-SO400M-14-SigLIP约 877M / 234BConvNeXt-XXLarge约 1.2B / 443BEVA02-E-14高达 4.7B——移动端与边缘设备请停留在 B/S 档分辨率越高越费显存224px 是基准384/448px 档位留给离线评测按数据选训练大数据 → webdataset 的.tar分片--dataset-type webdataset小数据集 → CSV 即可多个数据源用::分隔路径混合喂入调优手段数据越多零样本能力越强这是被反复验证的规律OpenCLIP 的缩放实验从 0.5M 到 15M 训练样本零样本 Top-1 准确率随数据量近似对数增长——数据比堆参数更划算。显存不够开--grad-checkpointing、梯度累积--accum-freq训练太慢视觉塔可开 patch dropout丢一半到四分之三的视觉 token官方引用论文称可提速 2-3 倍且不掉点新版训练栈支持--torchcompile加速精度与算力的权衡可参考 CLIPA 系列的准确率-计算成本曲线OpenCLIP 的 CLIPA 实验通过压缩视觉 token在相近算力下维持高准确率——选型时小一点但更便宜常常是更优解。生产落地容器化推理服务部署要点有三条容器里只装推理依赖open_clip_torch不要带[training]全家桶镜像更小模型只在进程启动时加载一次推理用torch.inference_mode()。一个可用的最小服务FROM python:3.11-slim WORKDIR /app RUN pip install --no-cache-dir open_clip_torch fastapi uvicorn COPY app.py . CMD [uvicorn, app:app, --host, 0.0.0.0, --port, 8000]# app.py上传图片返回归一化后的图像向量客户端自己做相似度检索 from fastapi import FastAPI, UploadFile import io, torch, open_clip from PIL import Image app FastAPI() model, preprocess, _ open_clip.create_model_and_transforms( ViT-B-32, pretrainedlaion2b_s34b_b79k) model.eval() app.post(/encode) async def encode(file: UploadFile): image Image.open(io.BytesIO(await file.read())).convert(RGB) with torch.inference_mode(): feats model.encode_image(preprocess(image).unsqueeze(0)) return {features: feats.tolist()}向量入库后可接任何向量数据库批量算向量时按 32/64 张一组循环避免一次性吃满显存。避坑指南五个新手必踩的坑-quickgelu后缀别搞混。早期预训练权重用 QuickGELU 激活训练如果你的模型名不带-quickgelu如ViT-B-16加载 quickgelu 权重权重能加载但准确率会掉微调时间越长掉得越明显。对策模型名与权重的训练配置保持一致新训练的模型默认nn.GELU无需后缀。忘了model.eval()。模型默认是 train 模式BatchNorm 与随机深度等模块会让推理结果忽高忽低——这是明明权重对结果却离谱的第一嫌疑人。Unknown model报错先升级 timm。ConvNeXt、SigLIP、EVA 等视觉塔走的是 timm 后端timm 版本过旧就不认识新架构pip install -U timm通常能直接解决。多卡训练不开--local-loss --gather-with-grad。朴素 all-gather 的 logit 矩阵显存是 O(n²) 的卡一多就 OOM加上这两个参数后复杂度近似线性且数值结果与朴素版一致。训练 API 有代际差异。main 分支已切换到 TrainingTask 新训练栈默认精度从amp变为amp_bf16--horovod等旧参数被移除且要求torch2.6。如果你要续用旧脚本请锁定 v3 分支或 3.x 版本或在升级前通读 README 顶部的变更说明。延伸资源与社区接下来去哪预训练模型清单与指标docs/PRETRAINED.md、38 基准零样本结果 docs/openclip_results.csv交互式教程docs/Interacting_with_open_clip.ipynbCoCa 版在 docs/Interacting_with_open_coca.ipynb核心源码模型实现 src/open_clip/model.py、工厂函数 src/open_clip/factory.py、训练主循环 src/open_clip_train/main.py可复现的训练脚本docs/script_examples/ 里有 CLIPA、稳定性测试等真实跑过的配置想参与开发clone 仓库后make installmake install-test用make test跑全量测试见 Makefile问题与特性建议直接在项目仓库提 issue上手路径建议先用 30 秒示例确认环境 → 挑一档权重在你的验证集上评零样本指标 → 按选型清单定档 → 需要更多精度时再考虑从 src/open_clip_train/ 开始自训。祝你第一次推理一次跑通。【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考