尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

DINOv3零样本分割实测:dino.txt补丁级匹配与双推理模式 DINOv3零样本分割实测dino.txt补丁级匹配与双推理模式【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3无标注对象清单变化时的零样本分割分割项目的目标物清单经常变产线新增缺陷种类、卫星图新增地物类别、医学图谱补一个器官。每换一次清单就重训一个像素级监督头标注成本不现实。DINOv3 的 dino.txt 模块针对这类场景给出了零样本分割路径用 ViT-L/16300M 参数骨干的补丁特征与文本嵌入做逐补丁余弦相似度对任意文本类别直接输出像素级掩码不需要训练分割头。常规两条路线为什么卡住仓库自带两条 ADE20K 分割路线但都绑定固定的 150 类集合路线类别定义前置条件代价Linear probe 线性分割固定 150 类像素标注 额外训练头需再训练输出受头限制M2F segmenterViT-7B/166716M 参数固定 150 类7B 骨干 训练好的解码器权重显存占用高dino.txt 零样本分割任意文本类别仅预训练权重 BPE 词表文件不训练前两条要求类别在训练时就锁定加一个类别就得补标注或重训第三条以类别名为输入直接出掩码。对齐 1024 维补丁令牌与 2048 维文本嵌入dino.txt 的关键设计是 2048 维联合嵌入空间embed_dim2048。视觉侧ViT-L/16 骨干输出 1024 维的补丁令牌patch 16×16先过 2 个额外自注意力块vision_model_num_head_blocks2文本侧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, p2, dim-1).mean(0), p2, dim-1) text_feats.append(feats) text_feats torch.stack(text_feats) # [num_classes, 1024]输出关键变量是 text_feats形状 [num_classes, 1024]后续分割就是它和图像补丁特征的一次矩阵乘法。按分辨率切换 whole 与 slide 两种推理模式官方 notebook 给了两种推理模式Configuration 数据类默认 resize512短边、modeslide。whole 模式整图过一遍骨干得到 [num_classes, h, w] 的低分辨率相似度图hH/16wW/16再双线性上采样、argmax 到目标分辨率slide 模式按 side384、stride192 切重叠窗口每个窗口复用 whole 逻辑把逐窗口 softmax(cos) 累加再除以重叠计数避免边缘窗口被重复统计。一张 512×1024 的图在 slide 模式约需 2×510 次骨干前向计算量随图尺寸线性增长。两种模式的核心逻辑都在 notebook 中encode_image 负责把图像拉伸到 16 的倍数并取出补丁令牌定义见 notebookdef predict_whole(model, img, text_feats): _, blocks_feats encode_image(model, img.unsqueeze(0)) # [1, h, w, 1024] blocks_feats F.normalize(blocks_feats, p2, dim-1).squeeze(0) return torch.einsum(cd,hwd-chw, text_feats, blocks_feats) # [num_classes, h, w] # predict_slide 的窗口循环体side384stride192摘录 cos F.interpolate(cos.unsqueeze(0), sizewindow_size, modebilinear, align_cornersFalse).squeeze(0) probs[:, y1:y2, x1:x2] cos.softmax(dim0) # 每窗口累加 counts[y1:y2, x1:x2] 1 # 循环结束后 probs / counts两种模式的输出都是 [num_classes, H, W] 的分数图沿类别维 argmax 即逐像素类别。用 MulticlassJaccardIndex 算出 mIoU完整评测流程在 notebooks/dinotxt_segmentation_inference.ipynb。仓库定义了两个数据集类Cityscapes19 类IGNORE_ZERO_LABELFalse和 ADE20K150 类IGNORE_ZERO_LABELTrue标签 0 映射为 255 忽略在__init__中填本地数据加载器后循环调用 predict_whole / predict_slide上采样到标注尺寸、argmax再用MulticlassJaccardIndex(len(class_names), averagemacro, ignore_index255)累计。具体 mIoU 数值仓库未公布待验证需自行运行得到。接入成本先申请权重再配环境仓库代码免费但两类权重需先到官方模型页申请下载 URLViT-L/16 骨干LVD-1689M 预训练和 dino.txt 视觉头 文本编码器LVTD-2300M另有一个 BPE 词表文件bpe_simple_vocab_16e6词表大小 49408。环境要求 PyTorch ≥ 2.7.1、Linuxnotebook 内核使用 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),仅供参考
返回列表