dinov3
facebookresearch/dinov3加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样的场景: 深夜,你对着一张医学影像反复端详,病变区域模棱两可,资深放射科医生的经验难以言传。传统深度学习模型需要数以万计标注数据才能勉强上岗——但 DINOv3 告诉你,它从未见过任何一张医学影像的标注,却能在病灶分割任务上超越专门训练过的专家模型。这不是魔法,是 Meta 团队用海量无标签数据和巧妙的自监督学习策略,训练出了真正的"视觉通用智能"。
DINO 系列的故事始于 2021 年。Meta 的研究团队从自然界的自组织现象中汲取灵感——蚁群无需中央指挥却能协作筑巢、鸟儿无需指令却能形成优美的编队——他们提出了 DINO(Distillation of NO labels),用纯自监督方式让 ViT 架构学会了"看"世界。
2022 年的 DINOv2 带来了突破:团队发现,通过足够大规模的数据和精心设计的训练策略,自监督模型学到的特征天然具备良好的线性可分性——无需微调,直接在特征空间中做 k-NN 分类或线性探测,就能匹敌甚至超越全监督模型。这次,Meta 直接开源了 ViT-G/14 大模型,并在 GitHub 上提供了完整的训练代码。
2026 年的 DINOv3,则将这条路走到了极致:12 个模型,涵盖 71 亿参数的超大 ViT 到轻量的 ConvNeXt 家族,在 16 亿张无标注网络图像上完成预训练——这就是 LVD-1689M 数据集。模型在 40+ 评测基准上刷新 SOTA,且完全不需要任务特定的微调。
DINOv3 的技术核心是多尺度知识蒸馏。整个系统分为学生网络(Student)和教师网络(Teacher):
这样设计的好处是:教师始终"领先"学生一步,而学生通过模仿教师输出分布来学习,教师反过来从更大的全局视图中提炼知识。两者形成正向循环,最终教师(学生 EMA 版本)学到了比原始训练数据更强的表征。
此外,团队引入了 register tokens(额外的可学习 tokens 插入到 ViT 序列中),专门吸收"噪声"信息,让 class token 更专注于语义特征,从而显著降低了注意力图的噪声。
DINOv3 提供了 12 个预训练模型,覆盖从端侧到超大规模:
| 模型 | 参数量 | 蒸馏来源 | 适用场景 |
|---|---|---|---|
| ViT-S/16 | 22M | — | 资源受限环境 |
| ViT-S/16+ | 22M | ViT-7B | 高效部署 |
| ViT-B/16 | 87M | — | 平衡场景 |
| ViT-B/16+ | 87M | ViT-7B | 精度优先 |
| ViT-L/16 | 304M | — | 服务器推理 |
| ViT-L/16+ | 304M | ViT-7B | 高精度 |
| ViT-H/16+ | 632M | ViT-7B | 追求极致 |
| ViT-7B | 7B | — | 超大规模科研 |
| ConvNeXt-T/S/B/L | 28M~198M | ViT-7B | 传统 CNN 架构偏好 |
特别值得注意的是,团队还发布了卫星遥感专用模型(SAT-493M 数据集预训练),以及元数据引导微调(FINO branch),用户可以用手头已有的卫星影像元数据或荧光染色元数据,低成本完成下游任务适配。
pip install dinov3
或通过 conda:
conda env create -f conda.yaml
conda activate dinov3
DINOv3 提供了简洁的 PyTorch Hub 接口,支持直接通过 torch.hub 加载:
import torch
# 加载 ViT-B/16 预训练模型
model = torch.hub.load("facebookresearch/dinov3", "dinov3_vitb16")
model.eval()
# 单图推理
from PIL import Image
from torchvision import transforms
transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
img = Image.open("your_image.jpg")
x = transform(img).unsqueeze(0)
with torch.no_grad():
features = model(x) # 提取特征
print(f"特征维度: {features.shape}") # [1, 768]
DINOv3 真正强大的地方在于密集特征:不只是 image-level 的 class token,还包括每个 patch 的特征向量。配合 notebook 中的示例,可以完成语义分割、深度估计、显著物体检测等任务:
# dense_sparse_matching.ipynb 示例
from dinov3.hub.backbones import dinov3_vitb16
backbone = dinov3_vitb16(embed_dim=768, depth=12, num_heads=16)
# ... 配合分割头完成密集预测
天下没有免费的午餐。DINOv3 的"零样本泛化"虽然惊艳,但仍有其局限:
DINOv3 的发布在 CV 领域被广泛视为一个里程碑事件。Yann LeCun 本人亲自转推"Universal image features from pure self-supervised learning",Meta AI 官方博客称之为"视觉基础模型的下一代范式"。
从技术趋势看,DINOv3 引领了三个方向:
DINOv3 Model Family