ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

OpenCLIP 从 0 到 1 上手指南:零样本图像分类、多模态模型选型与分布式训练

OpenCLIP 从 0 到 1 上手指南:零样本图像分类、多模态模型选型与分布式训练 OpenCLIP 从 0 到 1 上手指南零样本图像分类、多模态模型选型与分布式训练【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip手上没有标注数据怎么让模型直接给任意图片打标签CLIP 的开源实现 OpenCLIPpip 包名open_clip_torch把这个能力做成了开箱即用它提供一批图文对比学习训练好的权重拿来做零样本图像分类、图文检索也能用自己的数据从头训或继续微调。模型代码在src/open_clip/训练流水线在src/open_clip_train/两者分工清晰。它到底怎么工作OpenCLIP 的核心是图文对比学习思路一句话就能讲完训练时把每个图片、文本配对当作正确答案两个编码器的任务就是在整批样本里检索到对方。图片、文本被投影到同一个向量空间正确配对的相似度高于错误配对图像编码器和文本编码器就这样被联合训练。训练完模型输出的是图片向量和文本向量分类、检索全靠比相似度不需要任何任务专属的训练数据。所以零样本分类的本质是用文字描述出每一个类别当探针再看图片向量离哪个探针最近。这也解释了为什么文本措辞会直接影响分类精度。 open_clip 安装与第一次零样本推理先用 pip 装包只做推理装基础包即可要训练再加training扩展。pip install open_clip_torch pip install open_clip_torch[training] # 需要训练时再装最小示例加载 LAION-2B 训练的 ViT-B/32 权重编码 1 张图和 2 句话直接输出概率分布import open_clip, torch from PIL import Image model, preprocess, _ open_clip.create_model_and_transforms(ViT-B-32, pretrainedlaion2b_s34b_b79k) tokenizer open_clip.get_tokenizer(ViT-B-32) with torch.inference_mode(): img model.encode_image(preprocess(Image.open(cat.jpg)).unsqueeze(0)) txt model.encode_text(tokenizer([a photo of a cat, a photo of a dog])) print((100 * img txt.T).softmax(-1))create_model_and_transforms会同时返回模型和官方预处理管线预处理参数随权重不同而不同用它返回的preprocess就永远不会错。 多模态模型选型一张表挑对权重docs/PRETRAINED.md 收录了全部可用权重及其在 38 个数据集上的零样本结果主流权重对比如下ImageNet-1k 零样本 top-1 准确率模型训练数据分辨率零样本准确率适合场景ViT-B/32LAION-2B224px66.6%小显存通用推理ViT-L/14LAION-2B224px75.3%精度与成本平衡ViT-H/14LAION-2B224px78.0%高精度需求ConvNeXt-XXLargeLAION-2B256px79.5%偏好卷积架构ViT-bigG/14LAION-2B224px80.1%追求开放权重最高精度ViT-SO400M-14-SigLIPWebLI224px82.0%换 SigLIP 损失冲更高精度趋势很清楚模型越大、数据越好精度越高而换成 SigLIP 损失函数后精度进一步抬高。除此之外还有 MobileCLIP 系列、RoBERTa 多语言版本完整清单在模型配置目录。三条选型建议按任务纯图像分类拼精度直接上 ViT-H/14 或 ConvNeXt-XXLarge要处理多语言文本选带 RoBERTa 文本编码器的权重。按显存8GB 级显存做推理优先 ViT-B/32224px、66.6%与大模型的推理成本差距远大于精度差距。按数据通用英文图像用 LAION-2B 权重是默认答案图片分布偏移动端场景时再试 MobileCLIP 系列。⚙️ 自己训练关键超参与分布式训练入口是open_clip_train.main单机最小形式是python -m open_clip_train.main --model ViT-B-32 --train-data /path/to/train_data.csv --batch-size 64 --epochs 30 --lr 1e-3 --precision amp常用超参数如下参数作用建议--train-data数据路径csv 或 WebDataset tar 分片多数据源用::分隔与目标任务分布对齐--batch-size每卡批大小对比学习对批大小敏感显存允许就调大--lr学习率官方脚本普遍用 1e-3--precision精度默认amp_bf16--accum-freq梯度累积步数显存不足时替代大 batch--grad-checkpointing梯度检查点以速度换显存大模型必开--pretrained从已有权重继续训练微调比从头训稳得多多机多卡用torchrun拉起两个关键开关--local-loss让每张卡只看自己那一份样本算损失--gather-with-grad负责带梯度地聚合全局批torchrun --nproc_per_node8 -m open_clip_train.main \ --model ViT-L-14 --train-data /data/train-{00000..41455}.tar \ --batch-size 64 --epochs 10 --lr 1e-3 \ --local-loss --gather-with-grad --grad-checkpointing量级上可以参照官方记录LAION-400M 的 ViT-B/32 用了 128 块 A100 训了约 36 小时、全局批 32768拿到 62.96%和 OpenAI 用私有数据训的同规格模型基本持平。 上生产前必做的三件事生产部署归根结底是三件事让模型更小、让吞吐更高、让显存不爆。第一量化。对 Linear 层做 INT8 动态量化是成本最低的压缩手段能同时缩小体积、加快推理上线前先在完整链路里回归一遍精度。第二批量推理。编码图片时按批比如每批 32 张调用避免单张逐次调用encode_image带来的调度开销检索场景的文本特征也应一次性编码完缓存。第三显存控制。大模型微调用--grad-checkpointing加--accum-freq组合撑住显存推理侧则考虑换小分辨率权重或分片处理数据。精度和成本的权衡看下面这张图大小模型之间只差几个点训练成本却差出数量级按业务能容忍的精度下限去选而不是无脑追最大。⚠️ 新手容易踩的三个坑下面三个问题几乎出现在每一个 OpenCLIP 的使用反馈里看源码和文档就能避免。第一个坑权重名和架构名必须配对。pretrainedlaion2b_s34b_b79k只对应ViT-B-32架构配到别的模型上要么直接报错要么静默降级权重与架构的对应关系查 docs/PRETRAINED.md。第二个坑不要自己写预处理。不同权重的归一化参数不一样——LAION-2B 的 ViT-L/14 权重用的是[0.5, 0.5, 0.5]的 Inception 风格 mean/std而不是 OpenAI 那套手动归一化会让精度明显掉。create_model_and_transforms会按权重自动选对预处理照用即可。第三个坑分开调用的特征没有归一化。encode_image/encode_text返回的特征不做归一化归一化只发生在走完整forward的路径里。跨批做图文检索时先F.normalize再点积否则不同批次的分数没法比。资料入口资料路径内容预训练模型清单docs/PRETRAINED.md全部权重、训练细节、38 个基准的零样本结果训练脚本示例docs/script_examples/CLIPA、CLIPv2、Stability 训练的现成脚本模型配置目录src/open_clip/model_configs/所有架构的 JSON 配置交互式教程docs/Interacting_with_open_clip.ipynb覆盖加载、推理、微调的 Notebook训练主程序src/open_clip_train/超参数定义与数据流水线想动手的话最快路径是用上面第一次零样本推理的几行代码跑通自己的一张图然后拿两三个模型在你的数据上各打一次分选型答案自然就出来了——再决定要不要微调为时不晚。【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表