DINOv2 实战指南:从 3 行代码到图像检索与微调

发布时间:2026/11/11 14:18:24

DINOv2 实战指南:从 3 行代码到图像检索与微调 DINOv2 实战指南从 3 行代码到图像检索与微调【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2DINOv2 是 Meta AI 的自监督视觉特征提取框架基于 PyTorch 实现。读完本文你能用几行代码抽出图像特征、搭一个相似度检索工具并对分类头做轻量微调。30 秒认识 DINOv2结论DINOv2 全程不依赖标签把学特征这件事做完了你的活只剩下挑一个任务头。它在 1.42 亿张无标注图像上用自蒸馏完成预训练同一张图的全局视图喂给教师网络局部裁剪块喂给学生网络学生被要求复现教师的输出。没有类别信息模型只能把图像长什么样本身学扎实所以抽出的特征拿到下游任务就能直接用。两种输出各管一摊CLS token 是一张图的全局向量适合分类、检索这类整图任务patch token 保留逐块空间信息适合分割、深度估计这类密集预测任务。先选对模型结论四档都是 patch 尺寸 14只差宽度和深度默认输入 518×518权重全部在 LVD-142M 上蒸馏而来。档位参数量嵌入维度Transformer 层数推荐场景最低显存参考ViT-S/1421 M38412边缘端、批量推理~6 GBViT-B/1486 M76812默认选择精度/成本平衡~10 GBViT-L/14300 M102424高精度特征、密集预测~16 GBViT-g/141,100 M153640追极致指标~24 GB三句话选型边部署选 ViT-S/14求平衡选 ViT-B/14追性能选 ViT-L/14ViT-g/14 只在指标还差最后一段时才值得。带_reg后缀的版本会额外加 4 个 register token官方精度表中略占优加载方式完全相同。5 分钟上手结论推理只需要 PyTorch 加仓库里的依赖文件两条命令装完。git clone https://gitcode.com/GitHub_Trending/di/dinov2 conda create -n dinov2 python3.9 -y conda activate dinov2 pip install -r dinov2/requirements.txt仓库的 conda.yaml 锁的是 python 3.9、torch 2.0.0、torchvision 0.15.0、CUDA 11.7环境对齐它能少走弯路。加载、预处理、提特征的最短路径如下import torch import torchvision.transforms as T model torch.hub.load(facebookresearch/dinov2, dinov2_vitb14) # 权重缓存到 ~/.cache/torch/hub model.eval() preprocess T.Compose([ T.Resize(518), T.CenterCrop(518), T.ToTensor(), T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ]) x preprocess(img).unsqueeze(0) # (1, 3, 518, 518) with torch.no_grad(): cls model(x) # (1, 768)CLS token feats model.forward_features(x) # dictx_norm_clstoken / x_norm_patchtokens / x_prenorm print(feats[x_norm_patchtokens].shape) # (1, 1369, 768)518/143737*37 个 patch三个形状要记牢CLS 特征(B, 768)patch 特征(B, 1369, 768)get_intermediate_layers(x, n4)还能按层取中间特征分割头就是这么用的。实战一用特征搭一个图像检索工具结论入库时把 L2 归一化的 CLS 向量存成 numpy 文件查询就是矩阵乘法加排序相似度用点积即可。import glob, numpy as np from PIL import Image def embed(path): x preprocess(Image.open(path).convert(RGB)).unsqueeze(0) with torch.no_grad(): v model(x) return (v / v.norm(dim-1, keepdimTrue)).cpu().numpy()[0] # 归一化后点积即余弦相似度 def index_folder(folder, outindex.npy): paths sorted(glob.glob(folder /*.jpg)) np.save(out, np.stack([embed(p) for p in paths])) return paths def search(paths, query, db, k5): top np.argsort(-(db embed(query)))[-k:] return [paths[i] for i in top]embed里那一步归一化把每个向量压到单位球面上之后(1, 768) × (N, 768)的点积直接就是余弦相似度不用再除以范数。数据库存成.npy后万张级别的图库在 CPU 上查一次也就毫秒级。实战二微调一个图像分类器结论数据量不大就别动主干线性探测足够要榨精度再上全量微调。对比项线性探测全量微调可训练参数仅分类头约 0.77 M768 类维输入 → 1000 类全部约 86 MViT-B/14算力成本单卡数小时可先离线缓存特征多卡、混合精度一个数量级以上适用数据规模数千到数万张标注十万张以上或领域差距大最轻量的方案是主干冻结、只训一个线性头直接复用 patch 特征做全局池化import torch.nn as nn, torch.nn.functional as F head nn.Linear(768, 1000) opt torch.optim.SGD(head.parameters(), lr1e-3, momentum0.9) for images, labels in train_loader: with torch.no_grad(): f model.forward_features(images)[x_norm_patchtokens].mean(dim1) # (B, 768) loss F.cross_entropy(head(f), labels) opt.zero_grad(); loss.backward(); opt.step()想复刻官方评测多组学习率、取最后 1/4 个 block、avgpool 网格搜索看 dinov2/eval/linear.py 里的LinearClassifier与run_eval_linear入口脚本是 dinov2/run/eval/linear.py。数据充足时再解冻主干、给头 10 倍学习率通常比从头微调省得多。实战三分割与深度估计等密集预测结论密集预测别用 CLS token官方预训练头直接吃中间层 patch 特征一行torch.hub.load就能拿到能出图的结果。语义分割和深度估计都是逐像素任务需要保留空间结构。仓库把主干 4 个不同深度的中间层特征reshape 回 2D 网格后喂给 DPT 或线性深度头再上采样到原图尺寸。深度方向已经备好 NYUd 和 KITTI 两套权重import torchvision depth_model torch.hub.load(facebookresearch/dinov2, dinov2_vitb14_ld) # NYU 线性头NYU/KITTI 可切换 depth_model.eval() img torchvision.io.read_image(scene.jpg).float() / 255.0 with torch.no_grad(): depth depth_model(img) print(depth.shape) # (1, 1, H, W)模型内部会自动做中心填充适配任意输入尺寸不必自己垫到 14 的倍数。语义分割的对应模块在 dinov2/eval/segmentation/线性头与 dinov2/eval/segmentation_m2f/Mask2Former 头深度相关实现集中在 dinov2/eval/depth/。这套冻结主干 现成头的思路同样覆盖多通道显微、X 光等场景对应实现可看 dinov2/hub/depthers.py。避坑指南症状torch.hub.load卡在权重下载或报 403。原因默认从 Meta 的dl.fbaipublicfiles.comCDN 拉取.pth网络受限时会失败。命令手动下好权重后改为torch.hub.load(facebookresearch/dinov2, dinov2_vitb14, weights/path/to/xxx_pretrain.pth)weights支持本地路径见 dinov2/hub/backbones.py。症状The NVIDIA driver on your system is too old或 xformers 报不兼容。原因torch 编译的 CUDA 与驱动/系统版本对不上。命令nvidia-smi看驱动支持上限后重装pip install torch2.0.0cu117 torchvision0.15.0cu117 --extra-index-url https://download.pytorch.org/whl/cu117。症状跑 ViT-L/14 或 ViT-g/14 时CUDA out of memory。原因518×518 输入有 1369 个 token注意力矩阵随 token 数平方增长L/g 档在单卡上很难全量微调。命令pip install -U xformers0.0.18启用内存高效的注意力并降低 batch size仍不够就先缓存特征只训下游头。症状RuntimeError: Input image resolution ... not divisible by patch size或特征网格对不齐。原因绕过封装直接喂了 14 不整除的分辨率。命令保持 51837×14等合法尺寸或用T.CenterCrop/深度模型的自动中心填充自定义尺寸时确保 H、W 都能被 14 整除。症状检索结果排序异常相似图排不到前面。原因库里混了未归一化的向量点积不再是余弦相似度。命令入库统一过一遍v / v.norm(dim-1, keepdimTrue)已入库的旧向量重新归一化后再存回。关键要点选型边部署 ViT-S/1421 M、默认 ViT-B/1486 M、追指标 ViT-L/14300 M加载一行torch.hub.load(facebookresearch/dinov2, dinov2_vitb14)。用法整图任务取 CLS token(B, 768)密集任务取 patch token(B, 1369, 768)检索先 L2 归一化再点积分类优先冻结主干只训线性头。密集预测直接复用官方预训练头dinov2_vitb14_ld等不需要自己写 DPT 解码结构。想继续深挖所有模型入口在 hubconf.py骨干/分类器/深度头实现在 dinov2/hub/线性评测与分割、深度评测代码在 dinov2/eval/。【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/8 5:48:45

ProxyPin 请求阻塞实战:3 步快速拦掉广告与追踪请求

ProxyPin 请求阻塞实战:3 步快速拦掉广告与追踪请求 【免费下载链接】network_proxy_flutter Open source free capture HTTP(S) traffic software ProxyPin, supporting full platform systems 项目地址: https://gitcode.com/GitHub_Trending/ne/network_proxy_…

2026/11/8 11:36:37

晶振设计十大陷阱:从起振失败到EMC超标的工程真相

1. 晶振不是“插上就能用”的标准件:从一个烧掉三块PCB的故障说起去年帮一家做工业温控模块的客户做EMC整改,连续三块新打样的PCB在高温老化测试中出现通信丢包——不是偶发,是每次升温到65℃以上就稳定复现。示波器抓晶振输出波形&#xff0…

2026/11/11 14:14:31

电工证新通职业教育考前押题怎么准备?上岗前必须拿下的证

电工证新通职业教育考前押题怎么准备?上岗前必须拿下的证 急需特种作业证才能上岗找工作,很多新乡市的朋友已经开始为电工证发愁了。尤其是现在,很多建筑、市政工程类岗位都明确要求持证上岗,而电工证新通职业教育正成为很多人选择的培训渠道。但你知道吗…

2026/11/11 14:14:31

之前考的证在外省能不能转过来?注安考题电工作业证怎么报名全攻略

之前考的证在外省能不能转过来?注安考题电工作业证怎么报名全攻略 之前考的证在外省能不能转过来?这几乎是每个准备报考或正在准备转证的电工作业人员最关心的问题。特别是像你在周口这样的地方,外地的证书能不能顺利转过来,直接影响到你能不能正常上岗。…

2026/11/11 14:14:31

有电工证工资大概多少到期换证流程

电工证工资大概多少 保姆级教程避开报名坑 怕考不过白交培训费?你不是一个人。很多人在报考电工证前,最担心的就是钱花了,证没拿到,或者拿到后工资也提不上去。别急,这 保姆级教程…

2026/11/11 14:14:31

有电工证工资大概多少 官方报名入口怎么找

有电工证工资大概多少 官方报名入口怎么找 之前考的证在外省能不能转过来?这是很多电工朋友最关心的问题,特别是在跨省工作或换城市的电工,常常担心自己的证书无法正常使用。其实,只要通过 官方报名入口…

2026/11/11 14:14:31

电工证新通职业教育全流程办理指南:郑州报考避坑指南

电工证新通职业教育全流程办理指南:郑州报考避坑指南 之前考的证在外省能不能转过来?这是很多人在办理电工证时最关心的问题之一。尤其是在郑州报考电工证的小伙伴,面对外地证件转籍、报名条件、考试内容等疑问,常常感到无从下手。今天我们就从南阳初次报…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/10 20:08:15

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑