DINOv2 模型选择速览:3 个问题定下 ViT-S 到 ViT-G 的档位
【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2
DINOv2 模型选择其实只取决于三件事:你的显卡和显存、你要跑的任务、以及精度目标。DINOv2 是 Meta 出品的自监督视觉预训练方法,在 1.42 亿张无标注图像上训练,产出可直接接线性分类器的视觉特征,并提供 ViT-S 到 ViT-G 四档开箱即用的骨干网络(backbone)。下面不铺垫背景,直接给结论——读完这一页,1 分钟内定下该用哪一档。
先想清楚档位:用选车类比四档模型
四档模型的 patch 大小都是 14,输入粒度和特征图尺寸一致,区别只在"发动机排量"(宽度与深度):
- ViT-S/14(21 M):代步电动车。便宜、快、够通勤,资源紧张时的安全牌。
- ViT-B/14(86 M):家用车。大多数场景的默认答案,速度和成本平衡得最好。
- ViT-L/14(300 M):性能车。预算够就升,精度明显高一档。
- ViT-g/14(1,100 M):超跑。全场最准,但"油费"(显存)要先算好再上。
决策表:DINOv2 ViT-B 还是 ViT-L,看这张表
| 模型 | 参数量 | registers | ImageNet k-NN | ImageNet linear |
|---|---|---|---|---|
| ViT-S/14 distilled | 21 M | ✗ | 79.0% | 81.1% |
| ViT-S/14 distilled | 21 M | ✓ | 79.1% | 80.9% |
| ViT-B/14 distilled | 86 M | ✗ | 82.1% | 84.5% |
| ViT-B/14 distilled | 86 M | ✓ | 82.0% | 84.6% |
| ViT-L/14 distilled | 300 M | ✗ | 83.5% | 86.3% |
| ViT-L/14 distilled | 300 M | ✓ | 83.8% | 86.7% |
| ViT-g/14 | 1,100 M | ✗ | 83.5% | 86.5% |
| ViT-g/14 | 1,100 M | ✓ | 83.7% | 87.1% |
表有两个信号:参数越大越准(linear 从 81.1% 一路到 87.1%);带 registers 在 L、g 档收益最大。下面是文字版"三问决策流":
- 显存/算力够吗?显存只有几 GB → 选 S;常见 12–24 GB 卡 → B、L 都能跑;想用 G,先看下方 FAQ 算账。
- 什么任务?只做分类、k-NN 或线性评估 → 直接按精度目标选档;做语义分割、深度估计这类密集任务 → 建议 L 或 g 的 registers 版本(仓库内 dinov2/eval/depth/ 与 dinov2/eval/segmentation/ 有对应评测代码)。
- 精度卡多少?要 87% 以上(ImageNet linear)→ 只有 ViT-g/14 + registers 达标(87.1%);86% 以上 → ViT-L/14 + registers(86.7%);84.5% 够用 → ViT-B/14 即可。
PyTorch Hub 加载 DINOv2:最短路径
只需一行torch.hub.load,换型号名即可切换档位:
import torch # 型号:vits14 / vitb14 / vitl14 / vitg14;带 registers 版本加 _reg 后缀 model = torch.hub.load("facebookresearch/dinov2", "dinov2_vitb14") model.eval()想要 ImageNet 上训好的分类头(_lc后缀)或各任务的预训练头,命名规则相同,见 dinov2/hub/backbones.py。
FAQ
DINOv2 ViT-G 需要多大显存?
官方表只给了参数量,但显存可以先粗算:fp32 下 1,100 M 参数光权重就约 4.4 GB;ViT-L(300 M)约 1.2 GB,ViT-B(86 M)仅约 0.34 GB。⚠️ 这只是起点,激活值还会随输入分辨率和 batch size 增长。稳妥做法:先用 ViT-B 把 pipeline 跑通,再换 G 验证显存是否够。
要不要选带 registers 的版本?
registers(reg4,4 个可学习 token)相当于给模型加了"额外记号位",让注意力有地方吸收冗余信息。数据说话:S 档收益很小(linear 反而 80.9% 略低于 81.1%);B 档基本持平(84.5% → 84.6%);L 档 k-NN、linear 各 +0.3、+0.4 个百分点;g 档 linear 从 86.5% 提到 87.1%。结论:L 及以上默认开 registers,S/B 差别不大,随意。
表里的 distilled 是什么意思?
指蒸馏训练形式:学生网络在预训练时由教师网络的输出引导学习,表里 S/B/L 三档列出的都是 distilled 版本。选型时不用额外操心,按表中名字加载即可,同一档位下 distilled 版本通常是默认推荐。
收尾
一句话:没有特殊约束就选 ViT-B/14;要 87% 以上精度且显存够,直接 ViT-g/14 + registers。每个模型的评测细节与使用建议见 MODEL_CARD.md,更多可视化材料在 docs/ 目录。
【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考