十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

三步跑通 OpenCLIP:零样本图文模型怎么装、怎么用、怎么选

三步跑通 OpenCLIP:零样本图文模型怎么装、怎么用、怎么选 三步跑通 OpenCLIP零样本图文模型怎么装、怎么用、怎么选【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip你需要让程序看懂一批没有标注的图片或者给图片库加一个语义搜索。传统路线是收集标签、训练分类器、部署。OpenCLIP 作为 OpenAI CLIP 的开源实现让你跳过前两步——加载预训练权重写几句文字描述就能开始分类和检索。OpenCLIP 是什么和其他实现差在哪OpenCLIP 是 OpenAI CLIP 的开源实现一个图文对比模型加载预训练权重后不做任何训练就能做零样本分类和图文检索。关键差异全部可验证内置 191 个模型配置覆盖 ViT、ConvNeXt、SigLIP、CoCa、音频 CLAP预训练权重来自 LAION-400M、LAION-2B、DataComp-1B 等大规模数据集38 个数据集的零样本成绩以 CSV 公开可直接对比最好的开源权重在 ImageNet-1k 零样本达 85.4%PE-Core-bigG-14-448推理和训练同仓库分布式训练实测到 1024 张 A100十五行跑通第一个 OpenCLIP 零样本推理先安装pip install open_clip_torch。需要自己训练时改为pip install open_clip_torch[training]。下面是最小示例对应官方 README 的快速开始加载 1.5 亿参数的 ViT-B-32LAION-2B 训练pretrained 标签laion2b_s34b_b79k把一张图在 3 个候选描述里分类。README 原版用的是仓库自带的架构图docs/CLIP.png你换成自己的图片即可。import torch, open_clip from PIL import Image 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.png)).unsqueeze(0) text tokenizer([a diagram, a dog, a cat]) with torch.no_grad(): img model.encode_image(image) txt model.encode_text(text) img img / img.norm(dim-1, keepdimTrue) txt txt / txt.norm(dim-1, keepdimTrue) print((100.0 * img txt.T).softmax(-1))预期输出是 3 个概率。README 对架构图那张图的输出为[[1., 0., 0.]]即几乎 100% 判定它是 a diagram换成你自己的图三项概率会重新分配。两个容易踩的坑加载后记得model.eval()否则 BatchNorm、随机深度等训练态行为会生效加载 OpenAI 原始权重时模型名要带-quickgelu后缀因为那些权重用的是 QuickGELU 激活和现在的默认 GELU 不一致。三个常见场景检索、生成描述、自己训练搭一个图文搜索场景给图片库加语义搜索用文字查图。 做法把全部候选文本用model.encode_text编码一次存成索引查询时只编码查询文本或图片做一次矩阵乘取前几名。 效果不用为搜索任务单独训练模型一个模型同时支持文查图、图查文。README 提到大规模算 embedding 时可搭配 clip-retrieval 这类生态工具。一句话生成图片描述场景给一批图自动写出整句描述而不是分类标签。 做法CoCa 是CLIP 描述生成的混合架构仓库里coca_ViT-L-14权重在 COCO 描述上做过微调直接调model.generateimport open_clip, torch from PIL import Image model, _, transform open_clip.create_model_and_transforms( coca_ViT-L-14, pretrainedmscoco_finetuned_laion2B-s13B-b90k) im transform(Image.open(cat.jpg).convert(RGB)).unsqueeze(0) with torch.no_grad(): caption model.generate(im) print(open_clip.decode(caption[0]).split(end_of_text)[0].replace(start_of_text, ))预期输出是cat.jpg的一句英文描述。换pretrained标签可以换不同风格/规模的 CoCa 权重。预训练权重不匹配时用 OpenCLIP 训练自己的场景你的数据在垂直领域预训练权重效果不够或者你想训练更小的模型适配显存。 做法用仓库自带的训练入口open_clip_train.main数据支持 CSV 或 WebDataset.tar分片。多卡用 torchrun 启动卡数多时加上--local-loss和--gather-with-gradtorchrun --nproc_per_node 4 -m open_clip_train.main \ --train-data /data/cc12m/cc12m-train-{0000..2175}.tar \ --model ViT-B-32 \ --batch-size 320 \ --local-loss \ --gather-with-grad这两个参数把批内对比损失拆成各卡本地计算logit 矩阵显存从随卡数平方增长降到近似线性且结果与朴素 all-gather 数值一致。整套脚本实测到 1024 张 A100。训练效果可量化官方 8 卡跑 Conceptual Captions 的实验里零样本准确率随训练步数持续爬升OpenCLIP 零样本原理一句描述为什么能当分类器核心机制只有一个图像和文本各过一个编码器得到同一空间里的两个等长向量。训练目标是纯对比学习一个 batch 里每张图把配对的文本拉近、把其他图的文本推远同 batch 的其余样本充当负例。示例里的100.0不是魔法数字而是可学习温度参数logit_scale初始值 ln(1/0.07)≈100作用是把相似度分布拉尖、变成可比的概率。这就是零样本的来源分类器不是网络头而是一堆文本。换类别就是换描述模型本身不用重训。分类、检索、匹配共用这同一个向量空间CoCa 生成、CLAP 音频、蒸馏、int8 推理都是在它之上的扩展。模型定义和 191 个配置统一收在 src/open_clip/create_model_and_transforms一个入口全部加载。OpenCLIP 模型怎么选按任务和显存对号入座你的情况推荐起点依据初次体验 / 显存紧张ViT-B-32 laion2b_s34b_b79k151M 参数官方快速开始即用它精度与推理成本平衡ViT-L-14DataComp-1B 版427M 参数ImageNet 零样本 79.2%精度优先、显存充足PE-Core-bigG-14-448ImageNet 零样本 85.4%86B 样本、448px 训练多语言场景ViT-SO400M-16-SigLIP2-38484.1%多语言 WebLI 数据训练移动端部署MobileCLIP 系列仓库内置多个尺寸配置显存受限部署int8 量化bitsandbytes实测 CIFAR-10 88.76%→88.83%量化层显存约省一半音频任务CLAP-HTSAT 系列支持零样本音频分类评估选型前先跑一次open_clip.list_pretrained()它会列出全部可用权重和对应的 pretrained 标签。文档与源码入口docs/PRETRAINED.md各预训练模型的训练数据、算力与成绩细节docs/openclip_results.csv每个模型在 38 个数据集上的零样本分数docs/Interacting_with_open_clip.ipynb官方交互式教程逐段可跑下一步动作装好环境照十五行示例验证能打印出概率向量再按显存从上面的表里换更大的模型。【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表