尧图精选

DINOv3 零样本分割实战:用 dino.txt 免标注、免训练,3步出结果

🕒 发布时间:2026/9/15 19:24:16 📁 来源:尧图网络
DINOv3 零样本分割实战用 dino.txt 免标注、免训练3步出结果【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3训练一个语义分割模型通常意味着三件事找标注、跑训练、等收敛。dino.txt 把这条链路砍掉了。它是 DINOv3 官方仓库里的多模态对齐模块把 DINOv3 视觉骨干的特征与文本编码器对齐到同一空间输入一张图加一句类别描述就能直接输出逐像素的分割结果全程不训练。本文按最短可复现路径走一遍并解释两种推理模式怎么选。 三步跑通零样本分割官方在notebooks/dinotxt_segmentation_inference.ipynb中提供了完整流程核心可压缩为三步建环境、载模型、算相似度。建环境仓库根目录提供conda.yaml用 micromamba 一键建环境避免依赖版本漂移。载模型通过dinov3.hub.dinotxt加载 ViT-L/16 视觉骨干加 dino.txt 文本头同时拿到 BPE 分词器权重默认从 FAIR 公共地址自动下载。出结果文本端对每个类别编码一组提示模板并取平均图像端提取密集特征两端算余弦相似度即得逐类别分数图。git clone https://gitcode.com/GitHub_Trending/di/dinov3 cd dinov3 micromamba env create -f conda.yaml micromamba activate dinov3import sys sys.path.append(./) # 仓库根目录torch.hub 本地加载需要 from dinov3.hub.dinotxt import dinov3_vitl16_dinotxt_tet1280d20h24l model, tokenizer dinov3_vitl16_dinotxt_tet1280d20h24l() model.to(cuda, non_blockingTrue) model.eval()注意图像预处理要用短边 resize 加 ImageNet 归一化不能强制缩成方图否则会破坏宽高比导致分割边界错位。 原理与模式选择dino.txt 免训练的原因在于对齐已经做好了。管线分三步文本模板编码把类别名套进 80 条提示模板如 a photo of the {0}.过文本编码器后对每条模板的嵌入做平均、再 L2 归一化得到每个类别一个向量形状[num_classes, D]。模板平均相当于对措辞做集成能压掉单个句式带来的偏差。图像密集特征DINOv3 骨干把图切成 16×16 的 patch每个 patch 输出一个向量patch token即每个图像小块的特征表示。这些向量经 2 个附加 head block 升维后拼回h × w的网格保留空间结构。余弦相似度两侧向量都已归一化直接做矩阵乘法torch.einsum(cd,hwd-chw)就得到[num_classes, h, w]的分数图argmax 即逐像素类别。softmax 只是可选的概率化变换。推理有两种模式官方 notebook 的配置数据类里给出了默认参数短边 512、窗口 384、步长 192维度Whole 全图模式Slide 滑动窗口模式输入尺寸整图一次进模型384×384 窗口、192 步长滚动显存占用随分辨率平方增长大图易 OOM恒定取决于窗口大小计算量一次前向前向次数 网格数明显更多适用场景短边 ≤512 左右的中小图高分辨率街景、卫星图等大图Slide 模式的细节值得注意每个窗口的分数先上采样回窗口分辨率、过 softmax再累加到全局画布上用被覆盖次数归一化。这样重叠区域天然做了软融合边界不会因窗口切分出现硬缝。️ 真实场景验证Cityscapes官方 notebook 内置了 Cityscapes 和 ADE20K 两个数据集类。Cityscapes 配置 19 个类别从 road、building 到 bicycleADE20K 则是 150 类且标签 0 为 ignore需要映射成 255 并把其余标签减 1。miou MulticlassJaccardIndex(len(class_names), averagemacro, ignore_index255) # 每张图 pred predict_slide(model, img, text_feats, side384, stride192) pred F.interpolate(pred[None], sizetarget.shape, modebilinear)[0].argmax(0) miou.update(pred[None], target[None])评估指标是宏平均 Jaccard 指数mIoU即每类交集除以并集再取平均宏平均让小类别和大类别权重相同能暴露大类分数高、小类别全丢的常见问题。预期偏差主要来自两处一是细粒度类别如 rider 和 person在零样本下容易互相吞并二是类别词表里没覆盖的像素会落到最相似的已知类别上而不是留白。这两个现象属于开放词汇方法的固有行为不是实现错误。️ 实战建议模板别只用一条官方用 80 条模板做平均换成 12 条会放大措辞偏差尤其在纹理类别vegetation vs tree上差异明显。模式跟分辨率走短边 512 以内用 Whole 就够超过 1024 优先 Slide并把side调到显存能承受的 384512stride取side的一半以平衡边界平滑度和速度。GPU 选 16GB 以上dino.txt 基于 ViT-L/16约 300M 参数加文本塔Slide 模式下单窗口 512 时 16GB 显存较稳妥显存吃紧就降窗口而不是降图像质量。预处理保持宽高比只用短边 resize不要用Resize((512, 512))强制方图否则街景这类宽图会被压扁纵向边界全部偏移。进一步复现可以翻仓库内的 notebooks/dinotxt_segmentation_inference.ipynb完整数据集类与两种模式的逐行实现和 dinov3/eval/text/dino.txt 的训练与模型定义源码权重获取方式见 README.md 中 Zero-shot tasks with dino.txt 一节的下载说明。【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →