dinov3

GitHub
10.1k 812 简单 1 次阅读 今天NOASSERTION图像其他
AI 解读 由 AI 自动生成,仅供参考

DINOv3 是由 Meta AI 研发的最新一代自监督视觉基础模型,旨在为计算机视觉任务提供高质量的密集特征表示。它解决了传统模型依赖大量标注数据进行微调的痛点,无需针对特定任务进行精细调整,即可在语义分割、单目深度估计及植被高度测绘等多种视觉任务中达到甚至超越专用模型的顶尖水平。

这款工具特别适合人工智能研究人员、算法工程师以及需要处理复杂视觉数据的开发者使用。其核心亮点在于能够生成高分辨率的密集特征图,显著提升了对图像细节的捕捉能力和全局一致性。例如,最新发布的 CHMv2 模型利用 DINOv3 技术,大幅提高了全球植被高度地图的精度与细节表现。此外,DINOv3 已全面集成至 Hugging Face Transformers 和 PyTorch Image Models (timm) 等主流开源库中,支持多种骨干网络架构,并提供了便捷的蒸馏代码与推理接口,让用户能够轻松将其应用于科研探索或实际工程部署中。

使用场景

某林业监测团队正利用卫星遥感影像,对全球热带雨林进行高精度的树冠高度测绘与生物多样性评估。

没有 dinov3 时

  • 细节丢失严重:传统模型在处理高分辨率卫星图时,难以捕捉细微的植被纹理,导致单棵树木的轮廓模糊,无法区分相邻的树冠。
  • 泛化能力不足:在不同光照条件或地理区域(如从亚马逊切换到东南亚雨林)时,模型表现大幅下降,需针对每个新区域重新收集数据并微调训练。
  • 任务割裂效率低:估算树冠高度和识别树种需要分别部署两个专用模型,不仅推理速度慢,还增加了系统维护的复杂性。
  • 标注成本高昂:为了达到可用精度,必须依赖大量人工标注的像素级掩码数据,耗时数月且专家资源难以获取。

使用 dinov3 后

  • 高密度特征还原:dinov3 生成的密集特征图能清晰呈现高分辨率下的植被细节,精准勾勒出单株树木边界,显著提升了地图的颗粒度。
  • 零样本全局一致:凭借强大的自监督学习能力,dinov3 无需任何微调即可在全球不同气候带保持一致的高精度,实现了“一次训练,全球通用”。
  • 多任务统一架构:基于 dinov3 骨干网络,团队仅用一套模型便同时完成了树冠高度估算(CHMv2)和语义分割,推理延迟降低 40%。
  • 摆脱数据依赖:利用 dinov3 的线性探测技术,仅需极少量标注样本即可达到甚至超越以往全量微调的效果,将项目启动周期从数月缩短至数周。

dinov3 通过提供无需微调的高质量密集特征,让全球尺度的精细化生态监测变得低成本且触手可及。

运行环境要求

操作系统
  • 未说明
GPU

强烈建议使用支持 CUDA 的 NVIDIA GPU(具体型号和显存未说明,但运行 7B 参数模型需大显存)

内存

未说明

依赖
notes1. PyTorch 是加载模型的唯一必需依赖,强烈建议安装支持 CUDA 的版本。 2. 模型权重需通过特定链接申请获取,收到邮件后方可下载。 3. 建议使用 wget 而非浏览器下载模型权重文件。 4. 支持通过 PyTorch Hub 或 Hugging Face Transformers (v4.56.0+) 加载模型。 5. 提供多种规模模型(从 21M 到 6.7B 参数),大模型对硬件资源要求极高。
python未说明
torch
transformers>=4.56.0
timm>=1.0.20
dinov3 hero image

快速开始

:新: [2026-03-10] :fire: 冠层高度地图v2 (CHMv2) 模型及推理代码现已发布(有关下载模型权重和使用代码的更多详情请见此处)。该模型的权重也已在Hugging Face Hub上提供,并由Hugging Face的Transformers支持。基于我们在2024年发布的原始高分辨率冠层高度地图,CHMv2通过利用DINOv3,在精度、细节和全球一致性方面实现了显著提升。

[2025-11-20] 用于ConvNeXt主干网络的蒸馏代码和配置现已发布!

[2025-10-13] 语义分割(ADE20K)和单目深度估计(NYUv2-Depth)的线性探针代码现已发布!

[2025-09-17] DINOv3主干网络现已由PyTorch Image Models / timm库自版本1.0.20起支持。

[2025-08-29] DINOv3主干网络已由Hugging Face的Transformers库自版本4.56.0支持

[2025-08-14] DINOv3主干网络现已在Hugging Face Hub上提供,并由Hugging Face的Transformers库的开发版支持

DINOv3 🦖🦖🦖

Meta AI Research, FAIR

奥里安·西梅奥尼、胡伊·V·武、马克西米利安·赛策尔、费德里科·巴尔达萨雷、马克西姆·欧卡布、
西乔·约瑟夫、瓦西里·哈利多夫、马克·斯扎夫拉涅茨、李承恩、米夏埃尔·拉马蒙吉索阿、
弗朗西斯科·马萨、丹尼尔·哈齐扎、卢卡·韦尔施泰特、王建元、
蒂莫泰·达尔塞、泰奥·穆塔卡尼、莱昂内尔·森塔纳、克莱尔·罗伯茨、
安德烈亚·韦达尔迪、杰米·托兰、约翰·布兰特、卡米尔·库普里、
朱利安·迈拉尔、埃尔韦·热古、帕特里克·拉巴图、皮奥特尔·博亚诺夫斯基

[ :scroll: 论文] [ :newspaper: 博客] [ :globe_with_meridians: 网站] [ :book: BibTeX]

DINOv3的参考PyTorch实现及模型。详情请参阅**DINOv3**论文。

概述

市场

高分辨率密集特征。
我们可视化了使用DINOv3输出特征计算得到的余弦相似度图,
对比以红十字标记的补丁与其他所有补丁之间的相似度。


一个扩展的多功能视觉基础模型家族,能够生成高质量的密集特征,并在各类视觉任务中取得卓越表现,甚至在广泛的应用场景下无需微调即可超越专门优化的最先进方法。

预训练模型

:information_source: 请按照下方提供的链接获取所有模型权重的访问权限:一旦申请被接受,您将收到一封电子邮件,其中包含指向所有可用模型权重(包括主干网络和适配器)的完整 URL 列表。这些 URL 可用于:

  • 将模型或适配器权重下载到本地文件系统,并通过 weightsbackbone_weights 参数将 torch.hub.load() 指向这些本地权重;
  • 直接调用 torch.hub.load(),通过 URL 下载并加载主干网络或适配器,同样使用 weightsbackbone_weights 参数。

请参阅下方的示例代码片段。

:warning: 请使用 wget 而不是网页浏览器来下载权重。

在 Web 数据集(LVD-1689M)上预训练的 ViT 模型:

模型 参数量 预训练
数据集
下载
ViT-S/16 蒸馏版 21M LVD-1689M [链接]
ViT-S+/16 蒸馏版 29M LVD-1689M [链接]
ViT-B/16 蒸馏版 86M LVD-1689M [链接]
ViT-L/16 蒸馏版 300M LVD-1689M [链接]
ViT-H+/16 蒸馏版 840M LVD-1689M [链接]
ViT-7B/16 6,716M LVD-1689M [链接]

在 Web 数据集(LVD-1689M)上预训练的 ConvNeXt 模型:

模型 参数量 预训练
数据集
下载
ConvNeXt Tiny 29M LVD-1689M [链接]
ConvNeXt Small 50M LVD-1689M [链接]
ConvNeXt Base 89M LVD-1689M [链接]
ConvNeXt Large 198M LVD-1689M [链接]

在卫星数据集(SAT-493M)上预训练的 ViT 模型:

模型 参数量 预训练
数据集
下载
ViT-L/16 蒸馏版 300M SAT-493M [链接]
ViT-7B/16 6,716M SAT-493M [链接]

预训练主干网络(通过 PyTorch Hub

请按照 此处 的说明安装 PyTorch(这是加载模型所需的唯一依赖项)。强烈建议安装支持 CUDA 的 PyTorch 版本。

import torch

REPO_DIR = <PATH/TO/A/LOCAL/DIRECTORY/WHERE/THE/DINOV3/REPO/WAS/CLONED>

# DINOv3 在网络图像上预训练的 ViT 模型
dinov3_vits16 = torch.hub.load(REPO_DIR, 'dinov3_vits16', source='local', weights=<检查点/URL/或路径>)
dinov3_vits16plus = torch.hub.load(REPO_DIR, 'dinov3_vits16plus', source='local', weights=<检查点/URL/或路径>)
dinov3_vitb16 = torch.hub.load(REPO_DIR, 'dinov3_vitb16', source='local', weights=<检查点/URL/或路径>)
dinov3_vitl16 = torch.hub.load(REPO_DIR, 'dinov3_vitl16', source='local', weights=<检查点/URL/或路径>)
dinov3_vith16plus = torch.hub.load(REPO_DIR, 'dinov3_vith16plus', source='local', weights=<检查点/URL/或路径>)
dinov3_vit7b16 = torch.hub.load(REPO_DIR, 'dinov3_vit7b16', source='local', weights=<检查点/URL/或路径>)

# DINOv3 在网络图像上预训练的 ConvNeXt 模型
dinov3_convnext_tiny = torch.hub.load(REPO_DIR, 'dinov3_convnext_tiny', source='local', weights=<检查点/URL/或路径>)
dinov3_convnext_small = torch.hub.load(REPO_DIR, 'dinov3_convnext_small', source='local', weights=<检查点/URL/或路径>)
dinov3_convnext_base = torch.hub.load(REPO_DIR, 'dinov3_convnext_base', source='local', weights=<检查点/URL/或路径>)
dinov3_convnext_large = torch.hub.load(REPO_DIR, 'dinov3_convnext_large', source='local', weights=<检查点/URL/或路径>)

# DINOv3 在卫星影像上预训练的 ViT 模型
dinov3_vitl16 = torch.hub.load(REPO_DIR, 'dinov3_vitl16', source='local', weights=<检查点/URL/或路径>)
dinov3_vit7b16 = torch.hub.load(REPO_DIR, 'dinov3_vit7b16', source='local', weights=<检查点/URL/或路径>)

预训练主干网络(通过 Hugging Face Transformers

所有主干网络均可在 Hugging Face Hub 上的 DINOv3 系列中找到,并通过 Hugging Face Transformers 库支持(自 4.56.0 版本起已发布相关包)。请参阅相应文档以了解使用方法,以下是一个简短示例,展示了如何使用 [Pipeline] 或 [AutoModel] 类获取图像嵌入。

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)

其中,上述 modelpretrained_model_name 可以是以下之一:

  • facebook/dinov3-vits16-pretrain-lvd1689m
  • facebook/dinov3-vits16plus-pretrain-lvd1689m
  • facebook/dinov3-vitb16-pretrain-lvd1689m
  • facebook/dinov3-vitl16-pretrain-lvd1689m
  • facebook/dinov3-vith16plus-pretrain-lvd1689m
  • facebook/dinov3-vit7b16-pretrain-lvd1689m
  • facebook/dinov3-convnext-base-pretrain-lvd1689m
  • facebook/dinov3-convnext-large-pretrain-lvd1689m
  • facebook/dinov3-convnext-small-pretrain-lvd1689m
  • facebook/dinov3-convnext-tiny-pretrain-lvd1689m
  • facebook/dinov3-vitl16-pretrain-sat493m
  • facebook/dinov3-vit7b16-pretrain-sat493m

图像变换

对于使用 LVD-1689M 权重(基于网络图像预训练)的模型,请使用以下变换(标准 ImageNet 评估变换):

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])

对于使用 SAT-493M 权重(基于卫星影像预训练)的模型,请使用以下变换:

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])

预训练分类头 - 图像分类

主干网络 预训练
数据集
分类头
数据集
下载
ViT-7B/16 LVD-1689M ImageNet [链接]

这些(完整)分类器模型可以通过 PyTorch Hub 加载:

import torch

# DINOv3
dinov3_vit7b16_lc = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_lc', source="local", weights=<DEPTHER/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

预训练头部——在SYNTHMIX数据集上训练的深度估计模型

骨干网络 预训练
数据集
头部
数据集
下载
ViT-7B/16 LVD-1689M SYNTHMIX [链接]
depther = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_dd', source="local", weights=<DEPTHER/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

使用深度估计模型对图像进行处理的完整示例代码

from PIL import Image
import torch
from torchvision.transforms import v2
import matplotlib.pyplot as plt
from matplotlib import colormaps

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])

depther = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_dd', source="local", weights=<DEPTHER/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

img_size = 1024
img = get_img()
transform = make_transform(img_size)
with torch.inference_mode():
    with torch.autocast('cuda', dtype=torch.bfloat16):
        batch_img = transform(img)[None]
        batch_img = batch_img
        depths = depther(batch_img)

plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.imshow(img)
plt.axis("off")
plt.subplot(122)
plt.imshow(depths[0,0].cpu(), cmap=colormaps["Spectral"])
plt.axis("off")

复现论文结果

请确保按照此文档设置NYU数据集。

运行以下命令以复现我们在NYUv2数据集上使用在SYNTHMIX数据集上预训练的深度估计模型所得到的结果:

PYTHONPATH=. python -m dinov3.run.submit dinov3/eval/depth/run.py \
config=dinov3/eval/depth/configs/config-nyu-synthmix-dpt-inference.yaml \
datasets.root=<PATH/TO/DATASET> \
load_from=dinov3_vit7b16_dd \
--output-dir <PATH/TO/OUTPUT/DIR>

注意事项:

  • 如果您希望不使用dinov3.run.submit直接运行代码,可以使用Python或torchrun来执行:
PYTHONPATH=. python dinov3/eval/depth/run.py \
config=dinov3/eval/depth/configs/config-nyu-synthmix-dpt-inference.yaml \
datasets.root=<PATH/TO/DATASET> \
load_from=dinov3_vit7b16_dd \
output_dir=<PATH/TO/OUTPUT/DIR>
  • 您还可以通过设置result_config.save_results=true来保存预测结果。

预训练头部——在COCO2017数据集上训练的检测模型

骨干网络 预训练
数据集
头部
数据集
下载
ViT-7B/16 LVD-1689M COCO2017 [链接]
detector = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_de', source="local", weights=<DETECTOR/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

预训练头部——在ADE20K数据集上训练的分割模型

骨干网络 预训练
数据集
头部
数据集
下载
ViT-7B/16 LVD-1689M ADE20K [链接]
segmentor = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_ms', source="local", weights=<SEGMENTOR/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

使用提供的分割模型(ViT-7B + M2F)对ADE20K数据集进行完整推理的示例命令:

PYTHONPATH=. python -m dinov3.run.submit dinov3/eval/segmentation/run.py \
config=dinov3/eval/segmentation/configs/config-ade20k-m2f-inference.yaml  \
datasets.root=<PATH/TO/DATASET> \
load_from=dinov3_vit7b16_ms \
--output-dir <PATH/TO/OUTPUT/DIR>

使用分割模型对图像进行处理的完整示例代码

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/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

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")

预训练头 —— 使用 dino.txt 的零样本任务

主干网络 下载
ViT-L/16 蒸馏版 [链接], 词汇表, 词汇表许可

可以通过 PyTorch Hub 加载完整的 dino.txt 模型:

import torch
# DINOv3
dinov3_vitl16_dinotxt_tet1280d20h24l, tokenizer = torch.hub.load(REPO_DIR, 'dinov3_vitl16_dinotxt_tet1280d20h24l', weights=<SEGMENTOR/CHECKPOINT/URL/OR/PATH>, backbone_weights=<BACKBONE/CHECKPOINT/URL/OR/PATH>)

安装

训练和评估代码需要 PyTorch 版本 ≥ 2.7.1,以及一些其他第三方包。请注意,该代码仅在指定版本下经过测试,并且要求运行环境为 Linux。要设置训练和评估所需的所有依赖项,请按照以下步骤操作:

micromamba (推荐) - 克隆仓库,然后使用提供的环境定义创建并激活一个名为 dinov3 的 conda 环境:

micromamba env create -f conda.yaml
micromamba activate dinov3

入门

提供了几个笔记本以帮助您开始使用 DINOv3:

数据准备

ImageNet-1k

数据集的根目录应包含以下内容:

  • <ROOT>/test/ILSVRC2012_test_00000001.JPEG
  • <ROOT>/test/[..]
  • <ROOT>/test/ILSVRC2012_test_00100000.JPEG
  • <ROOT>/train/n01440764/n01440764_10026.JPEG
  • <ROOT>/train/[...]
  • <ROOT>/train/n15075141/n15075141_9993.JPEG
  • <ROOT>/val/n01440764/ILSVRC2012_val_00000293.JPEG
  • <ROOT>/val/[...]
  • <ROOT>/val/n15075141/ILSVRC2012_val_00049174.JPEG
  • <ROOT>/labels.txt

提供的数据集实现要求在额外目录下存在一些附加元数据文件:

  • <EXTRA>/class-ids-TRAIN.npy
  • <EXTRA>/class-ids-VAL.npy
  • <EXTRA>/class-names-TRAIN.npy
  • <EXTRA>/class-names-VAL.npy
  • <EXTRA>/entries-TEST.npy
  • <EXTRA>/entries-TRAIN.npy
  • <EXTRA>/entries-VAL.npy

这些元数据文件可以使用以下 Python 代码一次性生成:

from dinov3.data.datasets import ImageNet

for split in ImageNet.Split:
    dataset = ImageNet(split=split, root="<ROOT>", extra="<EXTRA>")
    dataset.dump_extra()

请注意,根目录和额外目录不必是独立的目录。

ImageNet-22k

请根据您的本地设置调整 数据集类


:warning: 要执行接下来各节中提供的训练和评估命令,dinov3 包必须包含在 Python 模块搜索路径中,即只需在运行命令前加上 PYTHONPATH=.

训练

快速设置:在 ImageNet-1k 上训练 DINOv3 ViT-L/16

在 SLURM 集群环境中,使用 submitit 在 4 个 H100-80GB 节点(32 张 GPU)上运行 DINOv3 预训练:

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%。

训练代码每 12500 次迭代会在评估文件夹中保存教师权重,以便进行评估。

DINOv3 的精确设置:训练 DINOv3 ViT-7B/16

DINOv3 ViT-7B/16 是在一个私有数据集上训练的。训练分为三个阶段:

  • 预训练
  • Gram 锚定
  • 高分辨率适应

预训练

在 SLURM 集群环境中,使用 submitit 启动 DINOV3 ViT-7B/16 的预训练,共 32 个节点(256 张 GPU)。

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
  --nodes 32 \
  --config-file dinov3/configs/train/dinov3_vit7b16_pretrain.yaml \
  --output-dir <PATH/TO/OUTPUT/DIR> \
  train.dataset_path=<DATASET>:root=<PATH/TO/DATASET>:extra=<PATH/TO/DATASET>

Gram 锚定

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
  --nodes 32 \
  --config-file dinov3/configs/train/dinov3_vit7b16_gram_anchor.yaml \
  --output-dir <PATH/TO/OUTPUT/DIR> \
  train.dataset_path=<DATASET>:root=<PATH/TO/DATASET>:extra=<PATH/TO/DATASET> \
  gram.ckpt=<PATH/TO/GRAM_TEACHER_FROM_PREVIOUS_STEP>

高分辨率适应

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/train/train.py \
  --nodes 32 \
  --config-file dinov3/configs/train/dinov3_vit7b16_high_res_adapt.yaml \
  --output-dir <PATH/TO/OUTPUT/DIR> \
  train.dataset_path=<DATASET>:root=<PATH/TO/DATASET>:extra=<PATH/TO/DATASET> \
  gram.ckpt=<PATH/TO/TEACHER_FROM_GRAM> \
  student.resume_from_teacher_chkpt=<PATH/TO/TEACHER_FROM_GRAM>

多重蒸馏

测试设置:

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 数据集上的逻辑回归分类

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/eval/log_regression.py \
  model.config_file=<输出目录路径>/config.yaml \
  model.pretrained_weights=<输出目录路径>/teacher_checkpoint.pth \
  output_dir=<输出目录路径> \
  train.dataset=ImageNet:split=TRAIN:root=<数据集路径>:extra=<数据集路径> \
  eval.test_dataset=ImageNet:split=VAL:root=<数据集路径>:extra=<数据集路径>

ImageNet-1k 数据集上的 k-NN 分类

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/eval/knn.py \
  model.config_file=< 输出目录路径 >/config.yaml \
  model.pretrained_weights=< 输出目录路径 >/teacher_checkpoint.pth \
  output_dir=< 输出目录路径 > \
  train.dataset=ImageNet:split=TRAIN:root=< 数据集路径 >:extra=< 数据集路径 > \
  eval.test_dataset=ImageNet:split=VAL:root=< 数据集路径 >:extra=< 数据集路径 >

ImageNet-1k 数据集上带数据增强的线性分类

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/eval/linear.py \
  model.config_file=< 输出目录路径 >/config.yaml \
  model.pretrained_weights=< 输出目录路径 >/teacher_checkpoint.pth \
  output_dir=< 输出目录路径 > \
  train.dataset=ImageNet:split=TRAIN:root=< 数据集路径 >:extra=< 数据集路径 > \
  train.val_dataset=ImageNet:split=VAL:root=< 数据集路径 >:extra=< 数据集路径 >

ADE20K 数据集上带数据增强的线性分割

PYTHONPATH=. python -m dinov3.run.submit dinov3/eval/segmentation/run.py \
model.dino_hub=dinov3_vit7b16 \
config=dinov3/eval/segmentation/configs/config-ade20k-linear-training.yaml \
datasets.root=< 数据集路径 > \
--output-dir < 输出目录路径 >

作业完成后,您将在指定的输出路径目录中找到:

  • segmentation_config.yaml,包含用于训练模型的配置文件;
  • model_final.pth,训练结束时的最终线性头部检查点;以及
  • results-semantic-segmentation.csv,包含最终的评估指标。

NYUv2 Depth 数据集上的线性深度估计

PYTHONPATH=. python -m dinov3.run.submit dinov3/eval/depth/run.py \
    model.dino_hub=dinov3_vit7b16 \
    config=dinov3/eval/depth/configs/config-nyu.yaml \
    datasets.root=< 数据集路径 > \
    --output-dir < 输出目录路径 >

作业完成后,您将在指定的输出路径目录中找到:

  • depth_config.yaml,包含用于训练模型的配置文件;
  • model_final.pth,训练结束时的最终线性头部检查点;以及
  • results-depth.csv,包含最终的评估指标。

使用 dino.txt 在 DINOv3 上进行文本对齐

文本对齐可以按照 dino.txt 中的方法进行,即 DINOv2 Meets Text 的方法。

PYTHONPATH=${PWD} python -m dinov3.run.submit dinov3/eval/text/train_dinotxt.py \
   --nodes 4 \
  # 文本对齐的一个示例配置在这里:dinov3/eval/text/configs/dinov3_vitl_text.yaml \
  trainer_config_file="< DINOv3 文本配置路径 >" \
  output-dir=< 输出目录路径 >

上述命令将在 4 个节点上启动训练,每个节点配备 8 张 GPU(总共 32 张 GPU)。 请注意,DINOv3 论文中使用的文本对齐模型是在私有数据集上训练的,而这里我们提供了一个基于 CocoCaptions 数据集的示例配置 dinov3/eval/text/configs/dinov3_vitl_text.yaml,仅用于说明目的。 请根据提供的 CocoCaptions 数据集类进行调整,该数据集可在 此处 找到。

冠层高度地图 v2 (CHMv2)

John Brandt, Seungeun Yi, Jamie Tolan, Xinyuan Li, Peter Potapov,
Jessica Ertel, Justine Spore, Huy V. Vo, Michaël Ramamonjisoa, Patrick Labatut,
Piotr Bojanowski, Camille Couprie

[ :scroll: 论文] [ :newspaper: 博客]

CHMv2 模型加载(通过 PyTorch Hub

:information_source: 请按照下方链接获取 CHMv2 模型权重:一旦申请被接受,您将收到一封包含可用模型权重 URL 的电子邮件。随后,您可以使用该 URL:

  • 将模型权重下载到本地文件系统,并通过 weights 参数将 torch.hub.load() 指向这些本地权重;或者
  • 直接调用 torch.hub.load() 从其 URL 下载并加载骨干网络。

CHMv2 使用 DINOv3 ViT-L/16 卫星作为骨干网络,可通过在此处申请访问权限获得 这里

:warning: 请使用 wget 而不是网页浏览器来下载权重。

下载链接:https://ai.meta.com/resources/models-and-libraries/chmv2-downloads/

import torch
from dinov3.hub.backbones import Weights

REPO_DIR = < 克隆 DINOv3 仓库的本地目录路径 >

chmv2_model = torch.hub.load(
    REPO_DIR,
    'dinov3_vitl16_chmv2',
    source="local",
    weights="< CHMV2 模型检查点的 URL 或路径 >",
    backbone_weights=Weights.SAT493M,  # 或 < DINOV3_VITL_SAT 检查点的 URL 或路径 >
)

有关如何使用 DINOv3 + CHMv2 模型的示例,请参阅此 笔记本

笔记本可用于从 AWS 上存储的现有全球数据集中下载推理数据。

CHMv2 模型加载(通过 Hugging Face Transformers

CHMv2 模型也可在 Hugging Face Hub 上找到,并由 Hugging Face Transformers 库支持。请参考相应的文档以了解使用方法,但下面是一个简短示例,演示如何对示例图像获取冠层高度预测。

from PIL import Image
import torch

from transformers import AutoModelForDepthEstimation、AutoImageProcessor

processor = AutoImageProcessor.from_pretrained("facebook/dinov3-vitl16-chmv2-dpt-head")
model = AutoModelForDepthEstimation.from_pretrained("facebook/dinov3-vitl16-chmv2-dpt-head")

image = Image.open("image.tif")
inputs = processor(images=image, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)

depth = processor.post_process_depth_estimation(
    outputs, target_sizes=[(image.height, image.width)]
)[0]["predicted_depth"]

许可证

DINOv3 的代码和模型权重根据 DINOv3 许可证发布。更多详情请参阅 LICENSE.md

贡献

请参阅 contributing行为准则

引用 DINOv3

如果您觉得这个仓库有用,请考虑给它点个赞 :star: 并引用 :t-rex::

@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},
}

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|4天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|4天前
插件Agent图像

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|1周前
语言模型图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|1周前
开发框架图像Agent