
3步跑通DINOv2从零开始做自监督视觉特征提取【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2DINOv2 是 Meta 开源的自监督视觉特征学习框架用 1.42 亿张无标注图片预训练 ViT得到的特征可直接用于分类、分割等任务不强制微调。适合手头有图片、缺标注想直接拿强特征做下游任务的开发者。DINOv2 强在哪4个核心能力一览能力一句话说明无标注预训练骨干特征靠自监督学出来你的数据不用打标签四档骨干可选从 21M 的 ViT-S 到 1100M 的 ViT-g按算力挑Registers 版本加 4 个 register tokenpatch 特征更干净适合密集预测一套特征多任务复用同一个骨干换个小头就能做分类、语义分割、深度估计骨干越大精度越高ViT-g/14 的 ImageNet linear 评测 87.1%但显存也跟着涨。下面是让模型真正跑起来的路径。从0到第一次成功3步让DINOv2给出特征这节的目标很简单你机器上能跑出一张图的 DINOv2 特征向量。第1步克隆仓库并装好 dinov2 环境版本是严格钉死的torch 2.0.0 xformers 0.0.18别自己混搭版本直接用仓库给的 env 文件最稳git clone https://gitcode.com/GitHub_Trending/di/dinov2 cd dinov2 conda env create -f conda.yaml # 官方锁定版本的环境 conda activate dinov2跑成功应看到python -c import torch, xformers不报任何错且torch.__version__打印2.0.0。第2步加载预训练骨干跑第一次前向不训练、不准备数据集先验证模型能加载。仓库带 hubconf.py可以按本地仓库方式加载首次运行会自动下载预训练权重并缓存import torch REPO /你的路径/dinov2 # 仓库克隆目录 model torch.hub.load(REPO, dinov2_vitb14, sourcelocal, pretrainedTrue) model.eval() x torch.randn(1, 3, 224, 224) # 随机图先验证链路 with torch.no_grad(): feat model(x) print(feat.shape) # torch.Size([1, 768])跑成功应看到终端打印torch.Size([1, 768])这就是 CLS 全局特征768 维。第3步换一张真图确认真实场景可用把随机输入换成真实图片记得做标准归一化输出仍是 768 维特征。到这里DINOv2 能出特征这件事就闭环了后面都是怎么用。最小实战场景用DINOv2预训练权重对图片做分类最常见的用法是拿现成的 ImageNet 预训练分类器直接推理。仓库通过 hub 暴露了带线性分类头的完整模型一条命令加载import torch from torchvision import transforms from PIL import Image REPO /你的路径/dinov2 model torch.hub.load(REPO, dinov2_vitb14_lc, sourcelocal, pretrainedTrue) model.eval() tf transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ]) img tf(Image.open(cat.jpg)).unsqueeze(0) with torch.no_grad(): print(model(img).topk(5)) # 打印 ImageNet top-5 类别分数跑成功应看到top-5 里出现 cat 相关类别且分数最高。想验证更大规模的效果仓库还提供了完整的 linear 评测脚本需自备 ImageNet 数据评测配方见 dinov2/configs/eval/。真要训练DINOv2你最常改的4个参数自己训骨干官方配方4 节点 32 卡 A100约 1 天的入口命令PYTHONPATH. python dinov2/run/train/train.py \ --nodes 4 \ --config-file dinov2/configs/train/vitl16_short.yaml \ --output-dir 输出目录 \ train.dataset_pathImageNet:splitTRAIN:root数据根:extra数据根其余细节都在 ssl_default_config.yaml 里命令行追加键值即可覆盖。新手真正会动的就这几个参数默认值改成什么效果是什么--config-file无换 vitl14.yaml 训更大的 ViT-L/14效果更好但周期约 3.3 天train.batch_size_per_gpu64卡小就调小如 32学习率会按总 batch 的平方根自动缩放但收敛变慢student.num_register_tokens0改成 4 开启 registers做分割/深度这类密集任务时特征更稳evaluation.eval_period_iterations12500控制多久存一份 teacher 权重到eval/目录供评测调试期调小能更快看结果训练代码每 12500 步把 teacher 权重存进输出目录的eval文件夹之后用dinov2/run/eval/下的 knn / linear / log_regression 脚本评测即可。新手避坑区3个高频报错及解法现象ModuleNotFoundError: No module named dinov2。原因dinov2包没进 Python 搜索路径。解决所有评测/训练命令前都加PYTHONPATH.。现象单卡机器直接跑run/train/train.py报 submitit / SLURM 相关错误。原因训练入口是走 submitit 提交调度任务的需要 SLURM 集群环境。解决单机场景别硬训改用预训练权重做 linear eval 或下游推理。现象加载 ImageNet 数据集时报缺元数据文件。原因数据集实现要求class-ids-TRAIN.npy、entries-VAL.npy等 6 个元数据文件原始数据里没有。解决按 README 的 Data preparation 一节用ImageNet(...).dump_extra()生成一次即可。另外注意训练/评测代码只在 Linux 下测过装环境时 conda 和 pip 两条路线别混用。下一步跑通DINOv2后往哪走想看特征长什么样、做深度估计或语义分割直接打开仓库里的 notebooks/depth_estimation.ipynb 和 notebooks/semantic_segmentation.ipynb里面演示了骨干 预训练小头的组合用法。做生物方向可以看同仓库的 Cell-DINO / Channel-Adaptive DINO 扩展文档在 docs/README_CELL_DINO.md官方后续工作是 DINOv3想跟进最新进展可以顺着论文和代码库继续往下找。【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考