news 2026/9/12 16:13:31

DINOv2 视觉特征提取实战:跑通推理只要 5 分钟,坑一次讲清

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DINOv2 视觉特征提取实战:跑通推理只要 5 分钟,坑一次讲清

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×518(14 像素 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_layersforward_features,而不是直接调model(x)

with torch.no_grad(): feats = model.get_intermediate_layers(dummy, n=1, reshape=True) 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_lcdinov2_vitl14_lc就行。

🩺 换个领域:生物方向变体 Cell-DINO

同一套自监督思路也被搬到了细胞荧光显微图像上,就是仓库里的 Cell-DINO。权重需要先申请,拿到后用source='local'加本地 checkpoint 路径加载;文档里写明仅限科研用途,不能用于临床。细节看专门的 Cell-DINO 文档。

⚡ 提速与省内存:两件实际有效的事

第一件是精度与编译:GPU 上model.half()让显存和计算量都减半;PyTorch 2.0 里再套一层torch.compile合并算子。第二件是内存:构造模型时传block_chunks=1(参数定义见 dinov2/hub/backbones.py),Transformer 块分批前向,用算力换显存,跑 ViT-g 或大 batch 时特别有用。

🧭 避坑问答:三个高频问题

问:torch.hub.load 连不上网怎么办?先给TORCH_HOME指一个有空间的目录缓存权重。更彻底的做法是手动下好对应 .pth,git clone https://gitcode.com/GitHub_Trending/di/dinov2拉仓库,然后torch.hub.load(仓库路径, "dinov2_vitb14", source="local", weights="/path/to/dinov2_vitb14_pretrain.pth"),完全离线。

问:输出 shape 不符合预期,先查什么?三件事:model(x)裸输出是 64 维 DINO 头;要 patch 特征得走get_intermediate_layers(reshape=True);reg 版本序列里多了 4 个寄存器 token,但get_intermediate_layers已替你剔除,拿到的 shape 是干净的。

问:想做深度估计或分割,import 就报错?密集任务依赖特定版本的 mmcv 和 mmsegmentation,用仓库根目录的conda-extras.yamlrequirements-extras.txt单独建环境;官方notebooks目录里有两个任务现成的用法示例。

【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 16:13:17

SpringBoot+Vue医院挂号系统:事务一致性与并发控制实战

简介:这是一套基于SpringBoot开发的医院预约挂号系统完整源码,面向计算机、电子信息工程等专业学生,适用于高分毕业设计、课程设计及期末大作业。系统采用B/S架构与MVC模式,整合Java、MySQL、MyBatis、Vue、Ajax等主流技术&#x…

作者头像 李华
网站建设 2026/9/12 16:11:27

机器人坐标变换系统的革新:从tf到tf2的深度解析与应用实践

在当今机器人技术飞速发展的时代,机器人软件的开发已成为推动自动化、智能导航和人机协作的核心支柱。特别是在复杂环境中的自主导航与精确定位任务上,坐标变换(transformation)作为基础但关键的系统组件,直接影响机器人的决策精度与操作效率。例如,在一个多传感器融合的…

作者头像 李华
网站建设 2026/9/12 16:11:11

OpenCLIP 快速上手:零样本分类、图文检索与微调实战指南

OpenCLIP 快速上手:零样本分类、图文检索与微调实战指南 【免费下载链接】open_clip An open source implementation of CLIP. 项目地址: https://gitcode.com/GitHub_Trending/op/open_clip OpenCLIP 是 CLIP 的开源实现,核心能力是把图片和文本…

作者头像 李华
网站建设 2026/9/12 16:09:47

如何把微信聊天记录导出成 Word 和 HTML?3步上手,免费开源

如何把微信聊天记录导出成 Word 和 HTML?3步上手,免费开源 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tr…

作者头像 李华