DINOv3 实战:零样本语义分割与预训练特征加载完整教程

DINOv3 实战:零样本语义分割与预训练特征加载完整教程 DINOv3 实战零样本语义分割与预训练特征加载完整教程【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3DINOv3 是 Meta AI 发布的视觉基础模型家族输出高质量密集特征只需一份类别列表就能直接做零样本语义分割不用训练。想拿预训练视觉特征做分割、检索、跟踪这篇文章带你从零跑通到调参。先跑起来环境搭建与加载模型 仓库提供了现成的环境定义装好依赖只需两步。注意训练/评估代码要求 PyTorch ≥ 2.7.1且只在 Linux 上测试过。# 克隆仓库 git clone https://gitcode.com/GitHub_Trending/di/dinov3 cd dinov3 # 用仓库自带的环境定义创建并激活 conda 环境 micromamba env create -f conda.yaml micromamba activate dinov3模型权重要单独申请下载流程写在 README 的 Pretrained models 一节拿到 URL 后用wget下载不要用浏览器。拿到权重后最省事的是直接走torch.hub.load把weights指向你的本地文件即可。最快看到效果的路径是 dino.txt——给 ViT-L/16 视觉骨干接上一个文本编码器、并做过图文对齐的版本加载后同时返回模型和分词器import torch from dinov3.hub.dinotxt import dinov3_vitl16_dinotxt_tet1280d20h24l # 加载 dino.txt 模型和分词器weights 可指向本地权重文件 model, tokenizer dinov3_vitl16_dinotxt_tet1280d20h24l() model.to(cuda, non_blockingTrue) model.eval() tokenize tokenizer.tokenize模型加载入口在 dinov3/hub/dinotxt.py视觉骨干的 ViT 实现在 dinov3/models/vision_transformer.py。核心能力速览 这个仓库不只是分割模型而是一整套特征 任务头工具箱主要能力有五条零样本语义分割dino.txt 把类别名当 prompt直接输出像素级预测。把类别列表换成你自己的比如[road, building, sky]就能跑官方 notebook 里内置了 Cityscapes 19 类和 ADE20K 150 类的完整示例。即插即用的预训练任务头ADE20K 分割头dinov3_vit7b16_ms、COCO 检测头、深度估计头、ImageNet 分类头都是torch.hub.load一行加载评估脚本在 dinov3/eval/segmentation/ 等目录下。密集特征复用前景分割、稠密/稀疏匹配、视频分割跟踪都有现成 notebook在 notebooks/ 目录里改个图片路径就能复用。领域专用权重卫星图预训练SAT-493M的 ViT-L/16以及基于它做的 CHMv2 树冠高度估计头适合遥感方向。多规格骨干从 21M 参数的 ViT-S/16 到 67 亿参数的 ViT-7B/16另有 ConvNeXt 全系按显存选规格。它是怎么工作的patch 对文本的两级流水线 先说人话版模型把图切成 16×16 的小块patch每块变成一个向量相当于给图上每个小方块都写了一段特征描述分割时只是拿这段描述和你的类别词逐块比相似度谁的分数高这个块就归谁。技术细节分两级自监督预训练ViT 骨干在无标注的大规模图像集上用对比学习训练同一张图的不同增强视图特征拉近、不同图推远所以特征天然对这是什么东西敏感而不是对图长什么样。文本对齐dino.txt在骨干后面加 2 个头模块输出维度 2048再接一个 24 层、维度 1280 的文本 Transformer上下文长度 77用 CLIP 式对比损失把 patch 特征和文本特征拉进同一空间损失实现在 dinov3/eval/text/clip_loss.py。推理时双方都归一化余弦相似度就是相似度分数。推理代码就三行核心逻辑encode_image/predict_slide两个函数直接取自官方 notebook notebooks/dinotxt_segmentation_inference.ipynbimport torch.nn.functional as F # 整图推理适合 512x512 左右patch 特征归一化后与类别特征算余弦 _, blocks encode_image(model, img) # [1, h, w, D] cos torch.einsum(cd,hwd-chw, text_feats, F.normalize(blocks.squeeze(0), dim-1)) pred F.interpolate(cos[None], sizeorig_size, modebilinear).argmax(0) # 大图切滑动窗口累加官方推荐 side384、stride192 pred predict_slide(model, img, text_feats, side384, stride192)让效果更好的一些技巧 ⚙️用模板池而不是裸类别名官方 notebook 内置了 80 条 prompt 模板a photo of a {}.、a blurry photo of the {}. 等每个类别把所有模板编码后取平均再归一化比单句 prompt 稳得多。文本特征提前算好缓存文本侧只依赖类别列表算一次存下来换图不用重算text_feats形状是[num_classes, D]几 MB 而已。推理模式按图选512 短边以内用整图模式最快更高分辨率切窗口side 384 / stride 192窗口间预测取平均边缘块会用到重叠区域的票数。上 bfloat16用torch.inference_mode()包一层再套torch.autocast(cuda, dtypetorch.bfloat16)显存和速度都有明显收益。短边先缩到 512官方示例用短边 512 的 resize ImageNet 均值方差归一化输入尺寸别随意放大patch 数量是面积级增长的。谁适合用谁不适合适合的情况开放词汇分割原型类别会频繁变化新业务、新场景不想为每次变类重新训练分割模型。遥感任务CHMv2 树冠高度估计头是现成的卫星权重也省了领域适配。拿特征做别的图像检索、视频跟踪、匹配直接用密集特征比从零训便宜。不适合的情况直说显存紧张dino.txt 用的是 ViT-L/16约 300M 参数7B 骨干的推理头基本要 A100/H100 级别才跑得动。要求像素级精确的生产指标零样本分割的边界精度打不过同算力下微调过的专用模型追求 mIoU 上限还是老老实实加数据加训练。细粒度区分比如区分近似物种、相近型号物体文本对齐的分辨力有限。下一步与资源清单 代码主目录在 dinov3/训练配置在 dinov3/configs/train/数据准备细节看仓库根的 DATASETS.md。建议的下一步把 notebooks/dinotxt_segmentation_inference.ipynb 里的self.ds指到你自己的 3~5 张图上跑一遍 mIoU确认类别模板和 resize 参数在你的数据上表现如何再决定是否换滑窗参数。【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考