尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

open_clip零样本分类:从安装到出第一个结果只要3个动作

open_clip零样本分类:从安装到出第一个结果只要3个动作 open_clip零样本分类从安装到出第一个结果只要3个动作【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip想在本地跑通零样本图像分类却不想自己攒数据、从零训模型open_clip 就是干这个的 CLIP 开源实现给它一张图和几句自然语言它直接告诉你图更像哪一句。下面按一条线讲先把它跑起来再讲它到底能干什么然后是选型最后替你记下 3 个高频坑。 先把它跑起来装好后第一件该做的事是把模型拉起来一条命令就够pip install open_clip_torch装完包会带一份模型注册表首次加载时自动把对应的预训练权重拉到本地缓存具体有哪些名字和权重可以翻 预训练模型列表。接下来这段是 README 里的最小例子一张图、两句文字喂进去各自得到一组特征。import torch, open_clip 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) image preprocess(Image.open(cat.jpg)).unsqueeze(0) text tokenizer([a photo of a cat, a photo of a dog]) with torch.no_grad(): img_f, txt_f model.encode_image(image), model.encode_text(text)跑完后最后一步其实在你脑子里把 img_f 和 txt_f 相乘再做个 softmax概率大的那句就是答案——图是猫的话a photo of a cat 应该明显高于 a photo of a dog。图片尺寸别手动调缩放和归一化由返回的 preprocess 函数兜底照用它最稳。想多把玩的话仓库里有份交互 notebookdocs/Interacting_with_open_clip.ipynb浏览器里直接跑不用装环境。它到底能帮你做什么场景一用一句话搜商品图库。商品库想支持以文搜图传统做法得有人给每张图打标签、再维护一套标签体系。用 open_clip只需离线算好图片特征和语句特征按相似度检索语义相关的说法也能命中。和纯关键词检索比阳光下打盹的黑猫这种描述也能找到对的那张图具体提升多少要看你自己的数据评测。场景二海量图库自动打标签。想给图库自动分类、辅助审核时传统做法是每新增一个类别就得收集样本、单独训一个分类器。open_clip 零样本分类只需要把类别换成一句描述文本新增类别的成本约等于零。审核场景同理把违规内容写成文本模板用相似度分数筛出嫌疑图省下人工初筛的活。上图对应前文结论(1) 对比学习预训练、(2) 用标签文本搭分类器、(3) 零样本预测——你拿到的匹配哪句话就是第 (3) 步前提靠第 (1) 步对齐好的双塔特征。 选型与调参动手前先看清这个按显存挑open_clip零样本分类模型模型名不等于档次同一个 ViT-B-16 就有 laion、datacomp、openai 好几套权重准确率差别不小所以先定权重 tag 再谈大小。只是推理、显存小于 8G 时从 ViT-B-32 起步约 1.5 亿参数、14.8 GFLOPs详见 模型参数表要追更高精度就升到 ViT-L-14、ViT-H-14 乃至 bigG每升一档显存和算力开销都翻好几倍。别上来就选最大的38 个数据集的零样本结果表 里各模型的差距和参数量不成正比先拿小模型跑评测不达标再升。另一个容易被忽略的调参点是文本侧的措辞。仓库在 src/open_clip/zero_shot_metadata.py 里备了一套模板池做零样本分类时套 a photo of a {类别} 这类句式比单句更稳。上图对应先定权重 tag 再谈大小零样本精度随训练样本量上升——选型时先看这组权重吃过多少数据别只盯参数量具体数值以 README 表格为准。⚠️ 踩过的坑替你记好了这里几乎没人能一次跑通给你记下三个高频问题。报 Unknown model 或找不到预训练 tag原因模型名和 pretrained tag 不配套——每个名字对应一套或多套权重填错即挂另一种是用了 timm 系图像编码器如 convnext但 timm 版本太旧。解法用open_clip.list_pretrained()核对配套关系timm 模型先pip install -U timm。open_clip零样本分类准确率比预期低原因先怀疑模型还在 train 模式——BatchNorm 这些层在推理时行为不一样README 示例代码里那行model.eval()的注释说的就是它其次是权重用的激活是 QuickGELU你却用了默认 GELU 的模型定义。解法加载后调model.eval()加载 OpenAI 或早期 OpenCLIP 权重时换-quickgelu后缀的模型定义。自己训模型时loss不降或变NaN原因main 分支默认精度已改为 amp_bf16照着老配置写的 amp 就得显式传别以为默认一样批次开太大也更容易溢出。解法显式传精度模式把--batch-size调小用--accum-freq做梯度累积。这条 loss 曲线来自仓库训练日志先快速下降、再缓慢贴近 0——你训的时候如果一直平或一上来就 NaN先和它对比形态。这是 ImageNet 零样本验证准确率随训练步数的变化训完模型该盯的是这条曲线而不是 loss。open_clip 最擅长用一句话描述类别的图像-文本任务想要文本生成得另找项目。下一步去读 docs/PRETRAINED.md按你的显存挑一套权重。【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表