
DINOv2 视觉特征提取实战跑通推理只要 5 分钟坑一次讲清【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2不想微调、只想直接拿到可用的视觉特征提取器DINOv2 值得一看。这是 Meta AI 发布的自监督模型系列用 1.42 亿张无标注图片训练产出的特征可以直接接线性探针或 k-NN 检索——ViT-B/14 在 ImageNet 线性评测上就有 84.5% top-1。下面按“先跑起来、再选对版本、最后优化”的顺序走一遍。先跑通一次推理先把依赖装对仓库锁定的环境是 python 3.9、PyTorch 2.0、xformers 0.0.18且只在 Linux 上测试过。如果只是加载模型做推理装 torch 就够完整依赖只在训练和评测时才需要。conda env create -f conda.yaml conda activate dinov2加载模型并做第一次前向下面这段代码会下载 ViT-B/14 权重并对一张随机 224×224 图像做一次前向。import torch model torch.hub.load(facebookresearch/dinov2, dinov2_vitb14) model.eval() dummy torch.rand(1, 3, 224, 222) with torch.no_grad(): out model(dummy)模型默认输入是 518×51814 像素 patch切成 37×37 块用 518 推理精度最好224 只是快速验证。out是内置 DINO 头的 64 维输出并不是你平时要用的图像特征。怎么选骨干四个尺寸加 reg 版本变体参数量何时选它何时别选ViT-S/1421M低显存设备、大规模 k-NN精度不够时ViT-B/1486M速度精度均衡的默认选择追求精度上限时ViT-L/14300M算力放得开单卡要跑大批量时ViT-g/141.1B研究、冲 SOTA大多数场景推理代价太高ImageNet 线性评测S 81.1%、B 84.5%、L 86.3%、g 86.5%。每个变体都有加 4 个寄存器 token 的_reg版本精度再高一档比如 ViT-g/14 reg4 到 87.0%。后面要做分割这类密集任务直接用 reg 版本寄存器 token 能让 patch 特征更平滑其余变体同理把名字换成dinov2_vitb14_reg即可。深入用法特征提取与图像分类拿到真正能用的特征向量真正要特征时用get_intermediate_layers和forward_features而不是直接调model(x)。with torch.no_grad(): feats model.get_intermediate_layers(dummy, n1, reshapeTrue) cls model.forward_features(dummy)[x_norm_clstoken] print(feats[0].shape) # (1, 16, 16, 768)feats是 patch 特征图每个 patch 768 维可直接喂检索或分割头cls是整图级表示。输入 518×518 时空间尺寸就是 37×37。直接复用预训练线性分类器如果任务就是 ImageNet 分类头都不用自己写直接加载完整模型classifier torch.hub.load(facebookresearch/dinov2, dinov2_vitb14_lc)其余变体同理把名字换成dinov2_vits14_lc或dinov2_vitl14_lc就行。 换个领域生物方向变体 Cell-DINO同一套自监督思路也被搬到了细胞荧光显微图像上就是仓库里的 Cell-DINO。权重需要先申请拿到后用sourcelocal加本地 checkpoint 路径加载文档里写明仅限科研用途不能用于临床。细节看专门的 Cell-DINO 文档。⚡ 提速与省内存两件实际有效的事第一件是精度与编译GPU 上model.half()让显存和计算量都减半PyTorch 2.0 里再套一层torch.compile合并算子。第二件是内存构造模型时传block_chunks1参数定义见 dinov2/hub/backbones.pyTransformer 块分批前向用算力换显存跑 ViT-g 或大 batch 时特别有用。 避坑问答三个高频问题问torch.hub.load 连不上网怎么办先给TORCH_HOME指一个有空间的目录缓存权重。更彻底的做法是手动下好对应 .pthgit clone https://gitcode.com/GitHub_Trending/di/dinov2拉仓库然后torch.hub.load(仓库路径, dinov2_vitb14, sourcelocal, weights/path/to/dinov2_vitb14_pretrain.pth)完全离线。问输出 shape 不符合预期先查什么三件事model(x)裸输出是 64 维 DINO 头要 patch 特征得走get_intermediate_layers(reshapeTrue)reg 版本序列里多了 4 个寄存器 token但get_intermediate_layers已替你剔除拿到的 shape 是干净的。问想做深度估计或分割import 就报错密集任务依赖特定版本的 mmcv 和 mmsegmentation用仓库根目录的conda-extras.yaml或requirements-extras.txt单独建环境官方notebooks目录里有两个任务现成的用法示例。【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考