跳到主要内容
Meta DINOv3 视觉基础模型:下载、安装与快速上手 | 极客日志
Python AI 算法
Meta DINOv3 视觉基础模型:下载、安装与快速上手 Meta DINOv3 是 Meta 发布的 SOTA 级视觉基础模型,基于 17 亿张无标注图像训练,支持高分辨率特征提取。本文详述了 DINOv3 的下载渠道、预训练模型加载方式(PyTorch Hub 及 Hugging Face)、图像变换配置以及下游任务检测器使用。涵盖 ViT 与 ConvNeXt 架构变体,提供从快速上手到完整训练蒸馏评估的全流程代码示例,适用于分类、分割、检测等多场景,助力开发者高效构建视觉应用。
Meta DINOv3 简介
2025 年 8 月 14 日,Meta 正式发布了 DINOv3。这是一个通用的、SOTA(State-of-the-Art)级别的视觉基础模型。它通过无标注数据训练,生成高质量的高分辨率视觉特征,适用于图像分类、语义分割、目标检测等多种任务。DINOv3 拥有 70 亿参数,训练数据量达 17 亿张图像,性能全面超越弱监督模型。模型支持多种变体以适应不同的计算需求,开源的训练代码和预训练模型为计算机视觉研究和应用开发提供了强大支持。
功能概览
主要功能
高分辨率视觉特征提取 :生成高质量、高分辨率的视觉特征,支持精细的图像解析与多种视觉任务。
无需微调的多任务支持 :单次前向传播可同时支持多个下游任务,无需微调,显著降低推理成本。
广泛的适用性 :适用于网络图像、卫星图像、医学影像等多领域,特别适合标注稀缺场景。
多样化的模型变体 :提供多种模型变体(如 ViT-B、ViT-L 及 ConvNeXt 架构),适应不同计算资源需求。
技术原理
自监督学习(SSL) :利用对比学习从大量无标注图像中学习通用视觉特征,大幅降低数据准备成本并提高泛化能力。
Gram Anchoring 策略 :有效缓解密集特征的坍缩问题,生成更清晰、语义一致的特征图,提升高分辨率任务表现。
旋转位置编码(RoPE) :避免固定位置编码限制,天然适应不同分辨率输入,处理多尺度图像更灵活高效。
模型蒸馏 :将大型模型知识迁移到更小变体中,保留性能的同时提高部署效率。
下载地址
项目主页:https://ai.meta.com/dinov3/
代码仓库:github-dinov3 ,huggingface-dinov3
研究论文:arXiv-DINOv3 ,meta-DINOv3
预训练模型加载
获取权重
请通过官方链接申请获取所有模型权重。获批后系统将发送邮件包含完整 URL 列表。获得 URL 后,您可以下载到本地或通过 torch.hub.load() 在线加载。
⚠️ 建议使用 wget 而非浏览器下载权重。
基于网络数据集(LVD-1689M)预训练的 ViT 模型:
Model Parameters PretrainingDataset Download ViT-S/16 distilled 21M LVD-1689M link ViT-S+/16 distilled 29M LVD-1689M link ViT-B/16 distilled 86M LVD-1689M link ViT-L/16 distilled 300M LVD-1689M link ViT-H+/16 distilled 840M LVD-1689M link ViT-7B/16 6,716M LVD-1689M link
基于卫星数据集(SAT-493M)预训练的 ViT 模型:
PyTorch Hub 加载 首先确保安装了 PyTorch(建议 CUDA 版本)。克隆仓库后,设置 REPO_DIR 指向本地路径。
import torch
REPO_DIR = "<PATH/TO/DINOV3/REPO>"
dinov3_vits16 = torch.hub.load(REPO_DIR, 'dinov3_vits16' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_vits16plus = torch.hub.load(REPO_DIR, 'dinov3_vits16plus' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_vitb16 = torch.hub.load(REPO_DIR, 'dinov3_vitb16' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_vitl16 = torch.hub.load(REPO_DIR, 'dinov3_vitl16' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_vith16plus = torch.hub.load(REPO_DIR, 'dinov3_vith16plus' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_vit7b16 = torch.hub.load(REPO_DIR, 'dinov3_vit7b16' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_convnext_tiny = torch.hub.load(REPO_DIR, 'dinov3_convnext_tiny' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_convnext_small = torch.hub.load(REPO_DIR, 'dinov3_convnext_small' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_convnext_base = torch.hub.load(REPO_DIR, 'dinov3_convnext_base' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_convnext_large = torch.hub.load(REPO_DIR, 'dinov3_convnext_large' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_sat_vitl16 = torch.hub.load(REPO_DIR, 'dinov3_vitl16' , source='local' , weights="<CHECKPOINT/URL>" )
dinov3_sat_vit7b16 = torch.hub.load(REPO_DIR, 'dinov3_vit7b16' , source='local' , weights="<CHECKPOINT/URL>" )
Hugging Face 加载 所有主干网络已发布在 Hugging Face Hub,需 Transformers ≥4.56.0。
from transformers import pipeline
from transformers.image_utils import load_image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = load_image(url)
feature_extractor = pipeline(
model="facebook/dinov3-convnext-tiny-pretrain-lvd1689m" ,
task="image-feature-extraction" ,
)
features = feature_extractor(image)
import torch
from transformers import AutoImageProcessor, AutoModel
from transformers.image_utils import load_image
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = load_image(url)
pretrained_model_name = "facebook/dinov3-convnext-tiny-pretrain-lvd1689m"
processor = AutoImageProcessor.from_pretrained(pretrained_model_name)
model = AutoModel.from_pretrained(pretrained_model_name, device_map="auto" )
inputs = processor(images=image, return_tensors="pt" ).to(model.device)
with torch.inference_mode():
outputs = model(**inputs)
pooled_output = outputs.pooler_output
print ("Pooled output shape:" , pooled_output.shape)
facebook/dinov3-vits16-pretrain-lvd1689m
facebook/dinov3-vitb16-pretrain-lvd1689m
facebook/dinov3-vitl16-pretrain-sat493m
... (详见官方文档)
图像变换 import torchvision
from torchvision.transforms import v2
def make_transform (resize_size: int = 256 ):
to_tensor = v2.ToImage()
resize = v2.Resize((resize_size, resize_size), antialias=True )
to_float = v2.ToDtype(torch.float32, scale=True )
normalize = v2.Normalize(
mean=(0.485 , 0.456 , 0.406 ),
std=(0.229 , 0.224 , 0.225 ),
)
return v2.Compose([to_tensor, resize, to_float, normalize])
import torchvision
from torchvision.transforms import v2
def make_transform (resize_size: int = 256 ):
to_tensor = v2.ToImage()
resize = v2.Resize((resize_size, resize_size), antialias=True )
to_float = v2.ToDtype(torch.float32, scale=True )
normalize = v2.Normalize(
mean=(0.430 , 0.411 , 0.296 ),
std=(0.213 , 0.156 , 0.143 ),
)
return v2.Compose([to_tensor, resize, to_float, normalize])
预训练检测器
图像分类(ImageNet) import torch
dinov3_vit7b16_lc = torch.hub.load(
REPO_DIR,
'dinov3_vit7b16_lc' ,
source="local" ,
weights="<DEPTHER/CHECKPOINT/URL>" ,
backbone_weights="<BACKBONE/CHECKPOINT/URL>"
)
目标检测(COCO2017) detector = torch.hub.load(
REPO_DIR,
'dinov3_vit7b16_de' ,
source="local" ,
weights="<DETECTOR/CHECKPOINT/URL>" ,
backbone_weights="<BACKBONE/CHECKPOINT/URL>"
)
语义分割(ADE20K) 完整示例代码如下,展示了如何加载分割器并进行推理:
import sys
sys.path.append(REPO_DIR)
from PIL import Image
import torch
from torchvision import transforms
import matplotlib.pyplot as plt
from matplotlib import colormaps
from functools import partial
from dinov3.eval .segmentation.inference import make_inference
def get_img ():
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open (requests.get(url, stream=True ).raw).convert("RGB" )
return image
def make_transform (resize_size: int | list [int ] = 768 ):
to_tensor = v2.ToImage()
resize = v2.Resize((resize_size, resize_size), antialias=True )
to_float = v2.ToDtype(torch.float32, scale=True )
normalize = v2.Normalize(
mean=(0.485 , 0.456 , 0.406 ),
std=(0.229 , 0.224 , 0.225 ),
)
return v2.Compose([to_tensor, resize, to_float, normalize])
segmentor = torch.hub.load(
REPO_DIR,
'dinov3_vit7b16_ms' ,
source="local" ,
weights="<SEGMENTOR/CHECKPOINT/URL>" ,
backbone_weights="<BACKBONE/CHECKPOINT/URL>"
)
img_size = 896
img = get_img()
transform = make_transform(img_size)
with torch.inference_mode():
with torch.autocast('cuda' , dtype=torch.bfloat16):
batch_img = transform(img)[None ]
pred_vit7b = segmentor(batch_img)
segmentation_map_vit7b = make_inference(
batch_img, segmentor, inference_mode="slide" ,
decoder_head_type="m2f" , rescale_to=(img.size[-1 ], img.size[-2 ]),
n_output_channels=150 , crop_size=(img_size, img_size),
stride=(img_size, img_size),
output_activation=partial(torch.nn.functional.softmax, dim=1 ),
).argmax(dim=1 , keepdim=True )
plt.figure(figsize=(12 , 6 ))
plt.subplot(121 )
plt.imshow(img)
plt.axis("off" )
plt.subplot(122 )
plt.imshow(segmentation_map_vit7b[0 , 0 ].cpu(), cmap=colormaps["Spectral" ])
plt.axis("off" )
plt.show()
零样本文本对齐(dino.txt) import torch
dinov3_vitl16_dinotxt_tet1280d20h24l, tokenizer = torch.hub.load(
REPO_DIR,
'dinov3_vitl16_dinotxt_tet1280d20h24l' ,
weights="<SEGMENTOR/CHECKPOINT/URL>" ,
backbone_weights="<BACKBONE/CHECKPOINT/URL>"
)
安装与使用
环境配置 训练与评估代码要求 PyTorch ≥2.7.1,依赖若干第三方包,且需在 Linux 环境下运行。
micromamba env create -f conda.yaml
micromamba activate dinov3
快速上手 官方仓库提供了若干 Jupyter Notebook 帮助快速理解 DINOv3 的应用场景:
块特征 PCA :可视化前景物体上的主成分分析。
前景分割 :基于特征训练线性分割模型。
稠密与稀疏匹配 :利用特征在两幅图像间进行物体块匹配。
分割跟踪 :基于特征的非参数视频分割跟踪方法。
Notebooks 位于官方 GitHub 仓库的 notebooks 目录下。
训练、蒸馏与评估
模型训练 在 SLURM 集群上,使用 4 个 H100 节点(共 32 卡)训练 ViT-L/16:
PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
--nodes 4 \
--config-file dinov3/configs/train/vitl_im1k_lin834.yaml \
--output-dir <PATH/TO/OUTPUT/DIR> \
train.dataset_path=ImageNet22k:root=<PATH/TO/DATASET>:extra=<PATH/TO/DATASET>
预计训练时间约 14 小时,k-NN 评估可达 82.0%,线性评估可达 83.5%。
分为 Pretraining、Gram anchoring、High resolution adaptation 三个阶段。需 32 个节点(256 卡)启动。
模型蒸馏 PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
--nodes 1 \
--config-file dinov3/configs/train/multi_distillation_test.yaml \
--output-dir <PATH/TO/OUTPUT/DIR> \
--multi-distillation \
train.dataset_path=<DATASET>:root=<PATH/TO/DATASET>:extra=<PATH/TO/DATASET>
模型评估 训练代码会定期保存教师权重。在单节点运行以下命令进行评估:
ImageNet-1k 逻辑回归分类
ImageNet-1k k-NN 分类
ImageNet-1k 带数据增强线性分类
文本对齐(dino.txt)
具体命令请参考官方文档中的 eval 模块脚本,注意替换路径参数。
官方报道摘要 DINOv3 将图像自监督学习扩展至通用视觉骨干网络,在网络图像与卫星影像领域均取得领先性能。其骨干网络生成强大且高分辨率的图像特征,使得轻量级适配器训练极为便捷,在图像分类、语义分割、视频目标跟踪等任务上表现卓越。
相比前代,DINOv3 在比 DINOv2 大 12 倍的数据集上训练了 7 倍更大的模型。它在 15 项多样化视觉任务及 60 余项基准上进行了评估,在所有稠密预测任务中表现尤为突出。由于无需微调主干即可获得最先进结果,单次前向传播即可同时服务多个应用,这对端侧应用尤为关键。
我们以商业许可证形式发布 DINOv3 的训练代码与预训练骨干网络,并提供一整套开源骨干网络,包括在 MAXAR 影像上训练的卫星骨干。社区可在此基础上继续拓展,构建更多有意义的新技术。
引用 @misc{simeoni2025dinov3,
title={{DINOv3}},
author={Sim{\'e}oni, Oriane and Vo, Huy V. and Seitzer, Maximilian and Baldassarre, Federico and Oquab, Maxime and Jose, Cijo and Khalidov, Vasil and Szafraniec, Marc and Yi, Seungeun and Ramamonjisoa, Micha{"e}l and Massa, Francisco and Haziza, Daniel and Wehrstedt, Luca and Wang, Jianyuan and Darcet, Timoth{\'e}e and Moutakanni, Th{\'e}o and Sentana, Leonel and Roberts, Claire and Vedaldi, Andrea and Tolan, Jamie and Brandt, John and Couprie, Camille and Mairal, Julien and J{\'e}gou, Herv{\'e} and Labatut, Patrick and Bojanowski, Piotr},
year={2025},
eprint={2508.10104},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2508.10104},
}
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online