ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CLIP 模型选型指南:从 RN50 到 ViT-L/14@336px,9 个变体的参数量差 13 倍,精度差 11 个点

CLIP 模型选型指南:从 RN50 到 ViT-L/14@336px,9 个变体的参数量差 13 倍,精度差 11 个点 CLIP 模型选型指南从 RN50 到 ViT-L/14336px9 个变体的参数量差 13 倍精度差 11 个点【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP上个月有个同事在 8GB 显卡的生产环境里随手clip.load(ViT-L/14336px)第一条推理请求就把显存吃穿整个服务的 batch 队列全部卡死。复盘时他问这些变体到底差在哪本文围绕 CLIP 模型选型给出可直接对照的决策表不展开论文细节只讲在你的机器上、你的场景里哪个能用、哪个会翻车。9 个变体速查决策表先给结论。CLIP 官方共放出 9 个视觉变体完整名单见 clip/clip.py 中的_MODELS字典按用途压缩成这张表变体适合场景硬件门槛一句话点评ViT-B/32延迟敏感的在线服务、移动端4GB 显存全场性价比之王精度只比 RN50 高 0.4 个点但快得多RN50无 GPU 的 CPU 批处理CPU 可用51M 参数唯一能在普通笔记本 CPU 上舒服跑的正经模型ViT-B/16中等预算、中等精度8GB 显存精度接近 ViT-L/14推理成本却只有它一半ViT-L/14离线批量处理、精度优先8~12GB 显存224 输入下的第一梯队多数场景的精度上限ViT-L/14336px离线、细节密集的任务12GB 显存全系列精度天花板 85.3%代价是 2.3 倍推理量RN50x16大图像、高分辨率场景12GB 显存768² 输入小目标识别最强冷门但好用RN50x64学术对比实验24GB 显存参数最多的变体精度却没赢过 x16RN101想试 ResNet 但显存紧张4GB 显存比 RN50 多 50M 参数换 1.2 个点很少被选RN50x4介于 RN50 与 ViT-B/16 之间8GB 显存384² 输入被 ViT-B/16 全面覆盖少有人用下面展开讲为什么是这张表。变体名字到底在说什么ResNet 加宽 vs ViT 切 patch9 个名字背后其实是两条技术路线的命名规则看懂规则就不需要记表格。ResNet 系RN 开头走的是卷积 局部感受野路线。这里的 ResNet 不是原版做了三处修改stem 从 1 层卷积换成 3 层、步长卷积前插入平均池化做抗混叠、末端平均池化换成 QKV 注意力池化见 ModifiedResNet 定义。RN50x4、RN50x16、RN50x64的 xN 后缀不是深度翻倍而是按 EfficientNet 缩放规则把每一层的通道宽度乘 N——所以 x64 的参数量是 x16 的约 4 倍多名字里的数字和计算量成正比。ViT 系走的是切 patch 全局自注意力路线。把图切成固定大小的方块每个方块投影成一个 token 扔进 Transformer注意力天然看到全图。名字里的B/L是 Transformer 宽度档位base / large决定通道数和参数量/32、/16、/14是 patch 边长——patch 越大token 数越少计算量越低。ViT-B/32 在 224² 输入下只有 49 个 tokenViT-L/14 在 336² 下是 577 个注意力计算量差 6 倍这就是为什么名字只差一个数字显存差三倍。另外两类后缀要分开理解336px表示这个变体的输入分辨率是 336 而不是默认的 224RN 系的 x16/x64 则直接训练在 640²/768² 输入上。两条路线没有谁碾压谁RN 系省算力、对模糊小图更稳ViT 系精度高、全局上下文强。ImageNet 零样本精度参数量差 13 倍精度差 11 个点下面数据来自 CLIP 论文arXiv:2103.00020 的 Table 9零样本 ImageNet多模板 ensemble变体参数量输入分辨率零样本 Top-1ViT-B/32151M224²63.2%RN5051M224²76.2%RN101125M224²77.4%ViT-B/16150M384²78.3%ViT-L/14428M224²83.1%RN50x64700M768²83.8%RN50x16174M640²85.2%ViT-L/14336px428M336²85.3%翻译成人话ViT-L/14 比 RN50 多 8.4 倍参数只换 7 个点但这是大模型路线相对小模型路线的公平比较真正值得注意的两行是 RN50x16 和 ViT-L/14336px——174M 参数的 RN50x16 用 640² 大输入打到了 85.2%只比 428M 的旗舰低 0.1 个点精度天花板不一定属于参数量最大的模型。另外 RN50x64700M全系最大只比 x16 高 1.4 个点多花的 5 倍参数基本喂给了分辨率性价比最差。按三类典型场景给明确推荐延迟敏感的在线服务ViT-B/32。fp16 下单张推理 20ms 以内精度与 RN50 持平还略高。对延迟更苛刻就退回 RN5051M 参数是全系最小。离线批处理、精度优先ViT-L/14336px85.3% 全系第一或 RN50x1685.2%且推理量只有前者的约一半适合大批量。无 GPU / 边缘设备RN50 或 ViT-B/32 配jitTrue。RN101 的纯卷积在 CPU 上反而比 ViT-B/32 慢别被101 层吓到也别被它吸引。4 个高频踩坑点336px 的模型喂 224 的图会直接报错。位置编码长度是按(336/14)² 1 577个 token 生成的见 VisionTransformer 定义 里的positional_embedding换输入分辨率等于换 token 数张量形状对不上。所以永远用clip.load()返回的preprocess别自己Resize(224)。大分辨率不必然涨点。ViT-L/14 从 224 到 336 涨 1.4 个点83.1% → 85.3%但 ViT-B/32 从 224 到 384 反而掉 1.8 个点63.2% → 61.4%。论文里每个变体只有一个训练时分辨率偏离它就是在模型没见过的工作点上跑。参数最多 ≠ 最强。RN50x64 是 700M 的大家伙精度却输给 174M 的 RN50x16。768² 的输入会把低质量小图的噪声一起放大大模型反而先崩如果你的源图平均尺寸只有几百像素x64 是全场最差选择。换模型不如先换 prompt。所有变体共享同一个文本编码器视觉端换得再大语义匹配的上限是一样的。同一个 ViT-B/32用单一模板和 data/prompts.md 里官方 25 套模板 ensemble能差出 2~3 个点——比从 RN50 换到 ViT-B/32 还多。调 prompt 的边际收益远高于换模型顺序别反了。权重体积、显存和 CPU 耗时对照你的机器clip.load()首次运行会按 clip/clip.py 中的 URL 下载.pt权重带 SHA256 校验文件大小约等于参数量 × 4 字节。注意权重体积 ≠ 推理显存推理时激活值才是大头输入分辨率越大吃得越多。变体权重体积fp16 推理峰值显存CPU 单图耗时量级RN50约 200MB0.5GB0.2~0.5sViT-B/32约 600MB约 0.5GB0.3~0.8sViT-B/16约 600MB约 0.6GB0.5~1.2sViT-L/14约 1.4GB约 1.5GB1~2sViT-L/14336px约 1.6GB约 3~5GB3~6sRN50x16约 700MB2~4GB2~5sRN50x64约 3GB5~8GB5s量级口径消费级 12GB 显卡 PyTorch 1.13batch size 1~32 的经验值具体随框架和 batch 变化8GB 卡跑 ViT-L/14336px 时把 batch 压到 16 以内再往下就留 RN50x16。权重体积按 clip/clip.py 中模型文件 URL 对应的.pt大小推算耗时为实测量级估计仅供参考。最小可用代码一行切换变体import torch import clip from PIL import Image device cuda if torch.cuda.is_available() else cpu model, preprocess clip.load(ViT-B/32, devicedevice, jitTrue) # 换变体只需改这一处RN50 / ViT-L/14336px / ... image preprocess(Image.open(test.jpg)).unsqueeze(0).to(device) text clip.tokenize([a diagram, a dog, a cat]).to(device) with torch.no_grad(): probs model(image, text).softmax(dim-1).cpu().numpy() print(probs) # [[0.99, 0.004, 0.003]]注意preprocess是load返回的第二项换变体后必须跟着换——这正是前面第 1 个坑的根源。后续方向官方模型卡 记录了 2021.1 到 2022.4 的分批发布节奏ViT-L/14 和 336px 是最后两个论文附录还预告了更大档位的 ViT-H/14 和 ViT-g/14如果之后看到零样本精度突破 88% 的公开实现多半出自这两个未随本仓库发布的变体。仓库地址https://gitcode.com/GitHub_Trending/cl/CLIP【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进