DINOv3零样本分割实测:dino.txt补丁级匹配与双推理模式
2026/9/15 12:58:46 网站建设 项目流程

DINOv3零样本分割实测:dino.txt补丁级匹配与双推理模式

【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3

无标注对象清单变化时的零样本分割

分割项目的目标物清单经常变:产线新增缺陷种类、卫星图新增地物类别、医学图谱补一个器官。每换一次清单就重训一个像素级监督头,标注成本不现实。DINOv3 的 dino.txt 模块针对这类场景给出了零样本分割路径:用 ViT-L/16(300M 参数)骨干的补丁特征与文本嵌入做逐补丁余弦相似度,对任意文本类别直接输出像素级掩码,不需要训练分割头。

常规两条路线为什么卡住

仓库自带两条 ADE20K 分割路线,但都绑定固定的 150 类集合:

路线类别定义前置条件代价
Linear probe 线性分割固定 150 类像素标注 + 额外训练头需再训练,输出受头限制
M2F segmenter(ViT-7B/16,6716M 参数)固定 150 类7B 骨干 + 训练好的解码器权重显存占用高
dino.txt 零样本分割任意文本类别仅预训练权重 + BPE 词表文件不训练

前两条要求类别在训练时就锁定,加一个类别就得补标注或重训;第三条以类别名为输入,直接出掩码。

对齐 1024 维补丁令牌与 2048 维文本嵌入

dino.txt 的关键设计是 2048 维联合嵌入空间(embed_dim=2048)。视觉侧,ViT-L/16 骨干输出 1024 维的补丁令牌(patch 16×16),先过 2 个额外自注意力块(vision_model_num_head_blocks=2);文本侧,24 层 / 20 头 / 1280 维的 Transformer 编码类别短语。2048 维文本嵌入由两个 1024 维半区拼成:前半对齐 CLS 令牌,后半才是与补丁令牌对齐的部分,所以推理时取文本特征的后半段与补丁令牌算余弦相似度。补丁令牌的提取路径在 dinov3/eval/text/vision_tower.py。

下面的代码加载模型,并把每个类别名用 80 条提示模板编码后取平均、归一化:

from dinov3.hub.dinotxt import dinov3_vitl16_dinotxt_tet1280d20h24l import torch.nn.functional as F model, tokenizer = dinov3_vitl16_dinotxt_tet1280d20h24l() # ViT-L/16 骨干 + 24L/20H 文本塔 model.to("cuda").eval() text_feats = [] for class_name in class_names: # Cityscapes 19 类、ADE20K 150 类 text = [t.format(class_name) for t in PROMPT_TEMPLATES] # 80 条提示模板 feats = model.encode_text(tokenizer.tokenize(text).to("cuda")) # [num_prompts, 2048] feats = feats[:, feats.shape[1] // 2 :] # 丢掉 CLS 半区,保留 1024 维补丁对齐部分 feats = F.normalize(F.normalize(feats, p=2, dim=-1).mean(0), p=2, dim=-1) text_feats.append(feats) text_feats = torch.stack(text_feats) # [num_classes, 1024]

输出关键变量是 text_feats,形状 [num_classes, 1024],后续分割就是它和图像补丁特征的一次矩阵乘法。

按分辨率切换 whole 与 slide 两种推理模式

官方 notebook 给了两种推理模式,Configuration 数据类默认 resize=512(短边)、mode="slide"。whole 模式整图过一遍骨干,得到 [num_classes, h, w] 的低分辨率相似度图(h=H/16,w=W/16),再双线性上采样、argmax 到目标分辨率;slide 模式按 side=384、stride=192 切重叠窗口,每个窗口复用 whole 逻辑,把逐窗口 softmax(cos) 累加再除以重叠计数,避免边缘窗口被重复统计。一张 512×1024 的图在 slide 模式约需 2×5=10 次骨干前向,计算量随图尺寸线性增长。

两种模式的核心逻辑都在 notebook 中(encode_image 负责把图像拉伸到 16 的倍数并取出补丁令牌,定义见 notebook):

def predict_whole(model, img, text_feats): _, blocks_feats = encode_image(model, img.unsqueeze(0)) # [1, h, w, 1024] blocks_feats = F.normalize(blocks_feats, p=2, dim=-1).squeeze(0) return torch.einsum("cd,hwd->chw", text_feats, blocks_feats) # [num_classes, h, w] # predict_slide 的窗口循环体(side=384,stride=192)摘录: cos = F.interpolate(cos.unsqueeze(0), size=window_size, mode="bilinear", align_corners=False).squeeze(0) probs[:, y1:y2, x1:x2] += cos.softmax(dim=0) # 每窗口累加 counts[y1:y2, x1:x2] += 1 # 循环结束后 probs /= counts

两种模式的输出都是 [num_classes, H, W] 的分数图,沿类别维 argmax 即逐像素类别。

用 MulticlassJaccardIndex 算出 mIoU

完整评测流程在 notebooks/dinotxt_segmentation_inference.ipynb。仓库定义了两个数据集类:Cityscapes(19 类,IGNORE_ZERO_LABEL=False)和 ADE20K(150 类,IGNORE_ZERO_LABEL=True,标签 0 映射为 255 忽略),在__init__中填本地数据加载器后,循环调用 predict_whole / predict_slide,上采样到标注尺寸、argmax,再用MulticlassJaccardIndex(len(class_names), average="macro", ignore_index=255)累计。具体 mIoU 数值仓库未公布(待验证),需自行运行得到。

接入成本:先申请权重,再配环境

仓库代码免费,但两类权重需先到官方模型页申请下载 URL:ViT-L/16 骨干(LVD-1689M 预训练)和 dino.txt 视觉头 + 文本编码器(LVTD-2300M),另有一个 BPE 词表文件(bpe_simple_vocab_16e6,词表大小 49408)。环境要求 PyTorch ≥ 2.7.1、Linux,notebook 内核使用 Python 3.11 与 xFormers。以下 4 条命令完成环境准备:

git clone https://gitcode.com/GitHub_Trending/di/dinov3 cd dinov3 micromamba env create -f conda.yaml micromamba activate dinov3

激活后即可导入仓库内的 dinov3 包,用 dinov3_vitl16_dinotxt_tet1280d20h24l() 加载模型。边界也要清楚:文本塔上下文 77 个 token,类别名只能是短语;slide 模式耗时与窗口数成正比;官方仓库没有公布参考 mIoU,显存下限也未公开(待验证)。

三个延伸方向:训练头、文本对齐、骨干切换

  • 想要训练好的分割头替代零样本:linear 与 M2F 的推理配置在 dinov3/eval/segmentation/configs/,README 附对应的启动命令。
  • 想用自己领域的图文对做文本对齐、替换官方 LVTD-2300M 权重:示例配置为 dinov3/eval/text/configs/dinov3_vitl_text.yaml,官方示例用 CocoCaptions 数据集演示。
  • 想换骨干或指定本地权重路径:dinov3/hub/dinotxt.py 暴露了 backbone_weights、weights、bpe_path_or_url 三个参数,均支持本地文件。

【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询