Meta FAIR 开源 DINOv3:自监督视觉基础模型新王者,双架构 ViT+ConvNeXt,7B 参数 12 个骨干,深度估计/检测/分割/林冠图全线 SOTA!
💡 Meta FAIR 出品,DINOv2 正统续作。双架构(ViT + ConvNeXt),12 个预训练骨干,最大 7B 参数,两大数据集(LVD-1689M 网页图 + SAT-493M 卫星图),无需微调即超越专业 SOTA。深度估计、目标检测、语义分割、林冠高度图、元数据引导训练(FINO)全覆盖,PyTorch Hub / HuggingFace Transformers / timm 三大生态即插即用。

📌 目录
- 1. DINOv3 是什么?
- 2. DINOv2 → DINOv3 进化了什么?
- 3. 双架构 + 12 个预训练骨干全览
- 4. 五大下游适配器
- 5. FINO:元数据引导训练
- 6. 快速上手
- 7. 竞品对比
- 8. 适用场景与优缺点
- 9. 总结与推荐
1. DINOv3 是什么?
DINOv3 是 Meta AI Research(FAIR)出品的自监督视觉基础模型,DINOv2 的正统续作。
- 🔗 项目地址:https://github.com/facebookresearch/dinov3
- 📜 论文:arXiv:2508.10104
- 📰 官方博客:https://ai.meta.com/blog/dinov3-self-supervised-vision-model/
- 🌐 官方网站:https://ai.meta.com/dinov3/
- 🤗 HuggingFace:https://huggingface.co/collections/facebook/dinov3-68924841bd6b561778e31009
一句话总结
DINOv3 = Meta FAIR 自监督视觉基础模型
= DINOv2 正统续作,高质量密集特征
= 双架构:ViT(6档)+ ConvNeXt(4档),共 12 个骨干
= 最大 7B 参数,最小 21M 参数
= 两大数据集:LVD-1689M(网页图)+ SAT-493M(卫星图)
= 无需微调即超越专业 SOTA
= 5 大下游适配器:分类/深度估计/检测/分割/林冠高度
= FINO 元数据引导训练:无需标签,用已有元数据适配
= PyTorch Hub + HuggingFace Transformers + timm 三大生态
= CVPR 级别工作,FAIR 视觉基石
核心亮点图
DINOv3 输出高分辨率密集特征——用红色十字标记某个 patch,计算其与所有其他 patch 的余弦相似度地图,直观展示模型对图像语义的理解深度。
输入图片 → DINOv3 → 密集特征 → 余弦相似度地图
↓
同一物体区域高相似度
不同物体区域低相似度
无需标注,自监督学习得到
2. DINOv2 → DINOv3 进化了什么?
| 对比维度 | DINOv2 | DINOv3 |
|---|---|---|
| 发布时间 | 2023 | 2025 |
| 架构 | ViT only | ViT + ConvNeXt 双架构 |
| 最大参数 | 1.1B (ViT-g) | 7B (ViT-7B) |
| 预训练骨干 | 4 个 (S/B/L/g) | 12 个(6 ViT + 4 ConvNeXt + 2 卫星) |
| 预训练数据 | LVD-142M | LVD-1689M + SAT-493M |
| 卫星图预训练 | ❌ | ✅ SAT-493M |
| ConvNeXt 蒸馏 | ❌ | ✅ 4 档 ConvNeXt |
| 下游适配器 | 分类/分割/深度 | 分类/深度估计/检测/分割/林冠高度 |
| 目标检测 | ❌ | ✅ COCO2017 检测器 |
| 林冠高度图 | ❌ | ✅ CHMv2 (CVPR 级) |
| 元数据训练 | ❌ | ✅ FINO 分支 |
| timm 支持 | ✅ | ✅ (≥1.0.20) |
| HF Transformers | ✅ | ✅ (≥4.56.0) |
| 密集特征质量 | 优秀 | 更强(高分辨率) |
| 无需微调 SOTA | ✅ | ✅ 更广范围超越 |
三大进化方向
1️⃣ 规模跃升:1.1B → 7B,数据 142M → 1689M(12 倍)
2️⃣ 架构扩展:ViT-only → ViT + ConvNeXt,覆盖更多部署场景
3️⃣ 领域拓展:通用视觉 → 卫星遥感 + 元数据引导 + 更多下游
3. 双架构 + 12 个预训练骨干全览
ViT 系列(网页图 LVD-1689M)
| 模型 | 参数 | 类型 | 适用场景 |
|---|---|---|---|
| ViT-S/16 distilled | 21M | 蒸馏 | 移动端/嵌入式 |
| ViT-S+/16 distilled | 29M | 蒸馏 | 轻量级应用 |
| ViT-B/16 distilled | 86M | 蒸馏 | 通用推荐 ⭐ |
| ViT-L/16 distilled | 300M | 蒸馏 | 高质量特征 |
| ViT-H+/16 distilled | 840M | 蒸馏 | 研究级精度 |
| ViT-7B/16 | 6,716M | 全量 | 顶级性能 🏆 |
ConvNeXt 系列(网页图 LVD-1689M)
| 模型 | 参数 | 适用场景 |
|---|---|---|
| ConvNeXt Tiny | 29M | CNN 偏好/部署友好 |
| ConvNeXt Small | 50M | 平衡精度与速度 |
| ConvNeXt Base | 89M | 通用 CNN 方案 |
| ConvNeXt Large | 198M | 高精度 CNN |
卫星图系列(SAT-493M)
| 模型 | 参数 | 预训练数据 | 适用场景 |
|---|---|---|---|
| ViT-L/16 distilled | 300M | SAT-493M | 遥感特征提取 |
| ViT-7B/16 | 6,716M | SAT-493M | 遥感顶级性能 🛰️ |
骨架选型指南
🎯 追求极致精度 → ViT-7B/16 (6.7B)
⚖️ 精度与效率平衡 → ViT-L/16 (300M) 或 ConvNeXt-Base (89M)
🚀 轻量快速部署 → ViT-S/16 (21M) 或 ConvNeXt-Tiny (29M)
🛰️ 遥感卫星场景 → ViT-7B/16 SAT-493M
🔧 CNN 架构偏好 → ConvNeXt 系列(蒸馏自 ViT)
📱 移动端/边缘 → ViT-S/16 (21M)
4. 五大下游适配器
🎯 适配器一:图像分类(ImageNet)
骨干:ViT-7B/16 (LVD-1689M)
头数据集:ImageNet
加载方式:
dinov3_vit7b16_lc = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_lc',
source="local", weights=<PATH>, backbone_weights=<PATH>)
📏 适配器二:单目深度估计(SYNTHMIX → NYUv2)
骨干:ViT-7B/16 (LVD-1689M)
头数据集:SYNTHMIX(合成混合数据)
评估:NYUv2-Depth
加载方式:
depther = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_dd',
source="local", weights=<PATH>, backbone_weights=<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]
depths = depther(batch_img)
复现论文结果:
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>
🔍 适配器三:目标检测(COCO2017)
骨干:ViT-7B/16 (LVD-1689M)
头数据集:COCO2017
加载方式:
detector = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_de',
source="local", weights=<PATH>, backbone_weights=<PATH>)
🖼️ 适配器四:语义分割(ADE20K)
骨干:ViT-7B/16 (LVD-1689M)
头数据集:ADE20K
解码器:Mask2Former (M2F)
加载方式:
segmentor = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_ms',
source="local", weights=<PATH>, backbone_weights=<PATH>)
推理示例(滑动窗口推理):
segmentation_map = 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=(896, 896),
stride=(896, 896),
output_activation=partial(torch.nn.functional.softmax, dim=1),
).argmax(dim=1, keepdim=True)
复现论文结果:
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>
🌲 适配器五:林冠高度图 v2(CHMv2)
骨干:ViT-L/16 (DINOv3)
功能:全球高分辨率林冠高度估计
改进:基于 2024 年初版 CHM,利用 DINOv3 大幅提升精度/细节/全球一致性
论文:arXiv:2603.06382
模型权重:
🤗 HuggingFace: facebook/dinov3-vitl16-chmv2-dpt-head
📖 HF Transformers 支持:https://huggingface.co/docs/transformers/model_doc/chmv2
应用场景:
🌍 全球森林监测
📊 碳汇估算
🛰️ 遥感分析
🌳 生态研究
5. FINO:元数据引导训练
🆕 2026-06-12 最新发布
FINO 分支:https://github.com/facebookresearch/dinov3/tree/FINO
论文:Who Needs Labels? Adapting Vision Foundation Models With
the Metadata You Already Have (Gardès et al., 2026)
arXiv: 2606.05107
核心思想
传统微调:需要标注标签 → 成本高、耗时长
FINO 方法:利用已有元数据(无需额外标注)→ 零标签成本适配
已验证场景:
🛰️ FMoW 卫星图像 → 利用地理/时间元数据
🔬 HPA-WholeHR 荧光图像 → 利用生物实验元数据
为什么重要?
1. 降低适配门槛:无需标注,用已有信息即可适配新领域
2. 卫星遥感/生物医学等专业领域标注稀缺
3. 元数据(时间、位置、实验条件)天然存在
4. 把"废数据"变成"训练信号"
6. 快速上手
方式一:PyTorch Hub(推荐)
import torch
REPO_DIR = "/path/to/dinov3" # 克隆到本地的仓库路径
# 加载 ViT 骨干
dinov3_vits16 = torch.hub.load(REPO_DIR, 'dinov3_vits16',
source='local', weights=<CHECKPOINT_URL_OR_PATH>)
dinov3_vitb16 = torch.hub.load(REPO_DIR, 'dinov3_vitb16',
source='local', weights=<CHECKPOINT_URL_OR_PATH>)
dinov3_vitl16 = torch.hub.load(REPO_DIR, 'dinov3_vitl16',
source='local', weights=<CHECKPOINT_URL_OR_PATH>)
dinov3_vit7b16 = torch.hub.load(REPO_DIR, 'dinov3_vit7b16',
source='local', weights=<CHECKPOINT_URL_OR_PATH>)
# 加载 ConvNeXt 骨干
dinov3_convnext_tiny = torch.hub.load(REPO_DIR, 'dinov3_convnext_tiny',
source='local', weights=<CHECKPOINT_URL_OR_PATH>)
dinov3_convnext_base = torch.hub.load(REPO_DIR, 'dinov3_convnext_base',
source='local', weights=<CHECKPOINT_URL_OR_PATH>)
# 加载卫星图骨干
dinov3_vit7b16_sat = torch.hub.load(REPO_DIR, 'dinov3_vit7b16',
source='local', weights=<SAT_CHECKPOINT_URL_OR_PATH>)
方式二:HuggingFace Transformers(≥4.56.0)
# Pipeline 方式
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)
# AutoModel 方式
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-vitl16-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)
可用 HF 模型名:
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
方式三:timm(≥1.0.20)
import timm
model = timm.create_model('vit_small_patch16_dinov3.lvd1689m', pretrained=True)
图像预处理
# LVD-1689M 网页图模型(标准 ImageNet 变换)
from torchvision.transforms import v2
import torch
def make_transform(resize_size: int = 256):
return v2.Compose([
v2.ToImage(),
v2.Resize((resize_size, resize_size), antialias=True),
v2.ToDtype(torch.float32, scale=True),
v2.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
])
# SAT-493M 卫星图模型(遥感专用归一化)
def make_sat_transform(resize_size: int = 256):
return v2.Compose([
v2.ToImage(),
v2.Resize((resize_size, resize_size), antialias=True),
v2.ToDtype(torch.float32, scale=True),
v2.Normalize(mean=(0.430, 0.411, 0.296), std=(0.213, 0.156, 0.143)),
])
深度估计完整示例
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"
return Image.open(requests.get(url, stream=True).raw).convert("RGB")
def make_transform(resize_size=768):
return v2.Compose([
v2.ToImage(),
v2.Resize((resize_size, resize_size), antialias=True),
v2.ToDtype(torch.float32, scale=True),
v2.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
])
# 加载深度估计器
depther = torch.hub.load(REPO_DIR, 'dinov3_vit7b16_dd',
source="local", weights=<DEPTHER_PATH>, backbone_weights=<BACKBONE_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]
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")
plt.savefig("depth_result.png")
7. 竞品对比
| 对比维度 | DINOv3 | DINOv2 | SAM2 | SigLIP2 | EVA-CLIP |
|---|---|---|---|---|---|
| 出品方 | Meta FAIR | Meta FAIR | Meta FAIR | BAAI | |
| 最大参数 | 7B | 1.1B | 900M | 878M | 5B |
| 架构 | ViT + ConvNeXt | ViT | Hiera | ViT | ViT |
| 骨干数量 | 12 | 4 | 1 | 2 | 多个 |
| 卫星预训练 | ✅ SAT-493M | ❌ | ❌ | ❌ | ❌ |
| 深度估计 | ✅ SYNTHMIX | ✅ | ❌ | ❌ | ❌ |
| 目标检测 | ✅ COCO | ❌ | ❌ | ❌ | ❌ |
| 语义分割 | ✅ ADE20K | ✅ | ✅ | ❌ | ❌ |
| 林冠高度 | ✅ CHMv2 | ❌ | ❌ | ❌ | ❌ |
| 元数据训练 | ✅ FINO | ❌ | ❌ | ❌ | ❌ |
| 自监督 | ✅ | ✅ | ✅ | ✅ (对比) | ✅ (对比) |
| PyTorch Hub | ✅ | ✅ | ✅ | ❌ | ❌ |
| HF Transformers | ✅ (≥4.56) | ✅ | ✅ | ✅ | ✅ |
| timm | ✅ (≥1.0.20) | ✅ | ❌ | ❌ | ❌ |
| 密集特征 | ✅ 高分辨率 | ✅ | ❌ | ❌ | ❌ |
最大差异化
1. 双架构:ViT + ConvNeXt 覆盖 Transformer 和 CNN 两种偏好
2. 12 个骨干:从 21M 到 7B,覆盖所有部署规模
3. 卫星遥感:SAT-493M 专属预训练,遥感领域独一份
4. FINO 元数据训练:零标签适配,专业领域利器
5. CHMv2 林冠高度:全球环境监测实际应用
6. 无需微调 SOTA:冻住骨干直接用
7. 三大生态:PyTorch Hub + HF Transformers + timm
8. 密集特征王者:高分辨率密集特征,下游任务最强基础
8. 适用场景与优缺点
✅ 适合场景
🖼️ 视觉特征提取(通用)
→ 图像检索/聚类/相似度计算
→ 21M~7B 全尺寸覆盖
📏 单目深度估计
→ 室内/室外场景理解
→ 自动驾驶/机器人导航
→ SYNTHMIX 训练,NYUv2 验证
🔍 目标检测
→ COCO 80 类通用检测
→ DINOv3 骨干 + 检测头
🖼️ 语义分割
→ ADE20K 150 类场景解析
→ Mask2Former 解码器
🛰️ 遥感卫星分析
→ SAT-493M 专用预训练
→ FMoW 功能性地图分类
→ CHMv2 林冠高度估计
🔬 生物医学/专业领域
→ FINO 元数据引导适配
→ HPA 荧光图像分析
🌲 环境监测
→ 全球森林碳汇估算
→ 植被覆盖变化检测
⚠️ 注意事项
1. 模型权重需申请:需通过 Meta 官方链接申请下载
2. 7B 模型显存需求大:推理需要高端 GPU
3. ConvNeXt 为蒸馏版本:精度略低于 ViT 原版
4. 部分适配器仅 ViT-7B:分类/深度/检测/分割头仅 7B 版本
5. 卫星图归一化不同:需使用 SAT-493M 专用归一化参数
6. 推理建议用 bfloat16:配合 torch.autocast 加速
9. 总结与推荐
推荐指数:⭐⭐⭐⭐⭐
| 维度 | 评分 | 说明 |
|---|---|---|
| 性能 | ⭐⭐⭐⭐⭐ | 无需微调即 SOTA,密集特征质量顶级 |
| 灵活 | ⭐⭐⭐⭐⭐ | 12 个骨干 + 5 个适配器,全场景覆盖 |
| 生态 | ⭐⭐⭐⭐⭐ | PyTorch Hub + HF + timm 三大生态 |
| 创新 | ⭐⭐⭐⭐⭐ | FINO 元数据训练 + SAT 卫星 + CHMv2 |
| 部署 | ⭐⭐⭐⭐ | 从 21M 到 7B 全覆盖,但 7B 显存需求大 |
| 文档 | ⭐⭐⭐⭐ | README 详细,但权重申请略繁琐 |
一句话推荐
如果你需要高质量的视觉特征,DINOv3 是 2025-2026 年的最佳选择。
12 个骨干(21M~7B),双架构(ViT + ConvNeXt),
卫星遥感专属预训练,FINO 零标签适配,
深度估计/检测/分割/林冠高度全适配器,
三大生态即插即用,无需微调即超越专业 SOTA。
DINOv2 可以正式退休了。
📢 项目地址:https://github.com/facebookresearch/dinov3
📜 论文:arXiv:2508.10104
📰 博客:https://ai.meta.com/blog/dinov3-self-supervised-vision-model/
🌐 网站:https://ai.meta.com/dinov3/
🤗 HuggingFace:DINOv3 Collection
🌲 CHMv2:arXiv:2603.06382
🧪 FINO:arXiv:2606.05107
相关链接
- 🌲 Canopy Height Maps v2
- 🧪 FINO 分支
- 📖 HF Transformers DINOv3 文档
- 📖 HF Transformers CHMv2 文档
- 🛠️ timm DINOv3 支持
原文链接:https://github.com/facebookresearch/dinov3
标签:#MetaFAIR #DINOv3 #自监督 #视觉基础模型 #ViT #ConvNeXt #深度估计 #语义分割 #目标检测 #林冠高度 #遥感 #FINO #7B参数 #SOTA
分类:原创文章


1万+

被折叠的 条评论
为什么被折叠?



