DINOv3 卫星图像视觉基础模型实战指南:不微调拿下 GEO-Bench 81.1%
【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3
在卫星图像分类任务上,一个从未针对任何类别微调过的模型,平均准确率做到了81.1%,语义分割平均精度75.0%。这是 DINOv3 在 GEO-Bench 基准上的成绩,也是它作为视觉基础模型最值得注意的点:特征直接拿来用,分类器简单到只需 k-NN 或逻辑回归。本文用仓库内的数据和代码,讲清这套卫星预训练权重能做什么、怎么用、适合谁。
先看结果:GEO-Bench 上的零样本分类与分割
DINOv3 官方在 MODEL_CARD.md 中给出的卫星权重评测结果如下,均为不微调(zero-shot)状态:
| 模型 | 分类平均准确率 | 语义分割平均精度 |
|---|---|---|
| DINOv3 ViT-L/16(300M) | 79.6% | 74.5% |
| DINOv3 ViT-7B/16(6716M) | 81.1% | 75.0% |
分类靠 k-NN 或逻辑回归作用在 [CLS] token 上,分割用一层线性层即可。两个模型间相差约1.5 个百分点,但参数量差了 22 倍,选型时值得权衡。
模型怎么选:DINOv3 卫星权重只有两个规格
DINOv3 是一个模型家族:ViT 从 2100 万参数的 ViT-S/16 到 67 亿参数的 ViT-7B/16,另有 4 个 ConvNeXt 骨干(29M~198M)。其中 10 个模型预训练在网页数据集 LVD-1689M 上,另外 2 个专门预训练在卫星数据集 SAT-493M 上。
SAT-493M 包含4.93 亿张 512×512 的图像块,全部从 Maxar 的 RGB 正射校正影像中随机采样,空间分辨率0.6 米。卫星侧的两个规格是:
- ViT-7B/16:从头训练(scratch),是卫星方向的教师模型
- ViT-L/16:由 ViT-7B 蒸馏而来,300M 参数,日常使用的主力
两者 patch 大小都是 16。输入图像可以比 224 更大,只要边长是 16 的倍数;不满足时模型会自动裁到最近的更小倍数。
原理一句话:让图像自己教图像
DINOv3 的训练不需要类别标签。它用 DINO 自蒸馏损失(配合多裁剪)让同一张图的不同视野互相监督,再加 iBOT 掩码图像建模损失补上密集特征,用 KoLeo 正则化压住 [CLS] token 的分布,最后用 Gram 锚定稳定特征结构。对使用者的含义是:特征是从无标签数据里"长"出来的,天然适合迁移到训练集很小的卫星场景。
如何加载 SAT-493M 预训练权重和卫星图像变换
先克隆仓库(本地路径之后会用到):git clone https://gitcode.com/GitHub_Trending/di/dinov3。权重需要先按 README.md 的说明申请获取,拿到 URL 后用wget下载,再通过torch.hub.load指向它:
import torch REPO_DIR = "<本地克隆的 DINOv3 仓库路径>" weights = "<SAT-493M 权重的 URL 或本地路径>" # 卫星预训练的 ViT-L/16(300M),常规场景首选 model_l = torch.hub.load(REPO_DIR, "dinov3_vitl16", source="local", weights=weights) # 卫星预训练的 ViT-7B/16(6.7B),需要大显存 GPU model_7b = torch.hub.load(REPO_DIR, "dinov3_vit7b16", source="local", weights=weights)注意:卫星权重的归一化参数和网页图像版不同,用错会直接影响精度:
import torch from torchvision.transforms import v2 # SAT-493M 权重专用变换(网页权重用的是 ImageNet 参数) def make_transform(resize_size=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)), ])如果你用 Hugging Face Transformers(4.56.0 起支持),对应模型名是facebook/dinov3-vitl16-pretrain-sat493m和facebook/dinov3-vit7b16-pretrain-sat493m。
适用场景与选型限制
适合的:卫星图像分类、检索、语义分割,以及用线性层做深度估计、目标检测等密集任务。仓库已经有一个现成例子:CHMv2 树冠高度模型直接以卫星版 ViT-L/16 为骨干,推理 notebook 见 notebooks/chmv2_inference.ipynb。
要留意的:
- 权重需申请获取,不是开箱即下的
- ViT-7B/16 训练用了61440 小时 H100 算力(MODEL_CARD.md 记载),推理端也需要大显存;多数项目用 ViT-L/16 就够了
- 官方明确建议微调是"最后手段":冻结特征的零样本性能已经不错,微调反而可能放大偏差
- 公平性方面,官方提到不同收入水平和不同大洲之间存在一定性能差距(欧洲与非洲间仍有相对差异),对覆盖均衡敏感的应用要自行验证
- 代码与权重遵循 DINOv3 License,商用前请阅读 LICENSE.md
更多可复现的评测命令(k-NN、逻辑回归、线性分割、深度)都在 README.md 的 Evaluation 一节,模型入口定义见 hubconf.py。
【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考