dino.txt 零样本分割实操:三步跑通免训练语义分割
2026/9/15 21:59:14 网站建设 项目流程

dino.txt 零样本分割实操:三步跑通免训练语义分割

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

过去想拿到一个能用的分割模型,是个典型的长周期工程:先买或手标几千张 mask,再训几周网络,最后还得留人维护评测管线。dino.txt 零样本分割把这条链路压缩到零——DINOv3 模型家族只吃一份类别名清单,就能直接吐出像素级类别图,也就是免训练图像分割。

dino.txt 怎么做到免训练对齐

dino.txt 是挂在 DINOv3 视觉基础模型之上的文本-视觉对齐模块。DINOv3 输出的密集特征,通俗说就是图像里每个 patch(小块区域)各拿到一个特征向量;文本塔则把类别名编码成同维度的向量。推理时逐 patch 与类别向量算余弦相似度,相似度最高的类别即该 patch 的归属。对齐关系在预训练阶段已建立好,下游既不产生分割标注,也不做微调,零样本语义分割的完整流程只涉及一次前向匹配。

三步把环境跑起来

环境准备:十分钟装好

conda.yaml 里已锁定 Python 3.11,dino.txt 专用的 ftfy、regex 依赖也都包含在内,克隆仓库后一条命令建环境:

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

GPU 机器请安装 CUDA 版 PyTorch,否则前向会静默落回 CPU。

加载模型:五行为准

入口函数位于 dinov3/hub/,一次调用同时返回模型与分词器:

from dinov3.hub.dinotxt import dinov3_vitl16_dinotxt_tet1280d20h24l model, tokenizer = dinov3_vitl16_dinotxt_tet1280d20h24l() model.to("cuda", non_blocking=True) model.eval()

函数名虽长,只是把文本塔规格写在了里面:隐藏维度 1280、20 个注意力头、24 层,视觉侧沿用 ViT-L/16 骨干。

首次推理:把数据流读一遍

文本侧:把每个类别名填进若干提示模板,批量交给model.encode_text,先对每条嵌入归一化,再沿模板维度取平均并二次归一化,得到一个类别一根向量。

图像侧:先把图像缩放到 patch 尺寸的整数倍,过骨干后用model.visual_model.get_class_and_patch_tokens取出 patch tokens,reshape 成与图像同构的二维网格。

两侧会合:patch 特征归一化后,与全部类别向量做一次einsum,产出 [类别数, h, w] 的相似度网格——这就是低分辨率的类别概率图。

最后双线性上采样到目标分辨率、逐像素取 argmax,分割结果即得。整条链路没有可学习的分割头,本质是一次特征匹配。

Whole 还是 Slide

notebook 提供两种推理入口,输出同为 [类别数, H, W],差别只在喂图方式:

对比维度WholeSlide
适用分辨率中分辨率图像,整图单次前向高分辨率大图,切窗口处理
窗口重叠与累积策略无窗口,相似度图直接上采样至图像分辨率按 side/stride 迭代重叠窗口,softmax 后逐像素累积概率,再除以覆盖次数取均值
算力开销一次前向,最低每个窗口一次前向,随窗口数线性增长
推荐场景批量跑中分辨率数据集、快速验证效果高分辨率街景、遥感图或对局部细节敏感的任务

一个容易忽略的细节:slide 模式下图像会先缩放到短边(官方默认 512),窗口边长 384、步长 192,即 50% 重叠。重叠越大接缝越平滑,耗时也越高。

提示模板为什么要多句取平均

单句提示会让类别向量被措辞带偏。dino.txt 沿用了 CLIP 社区的成熟做法:把每个类别名同时填进数十个模板,例如a photo of a {0}.a blurry photo of the {0}.a cartoon {0}.a tattoo of a {0}.。编码完成后,先归一化,再对所有模板的嵌入取平均,最后归一化一次。取平均这一步抵消了单个模板的风格偏差,类别向量更稳,也顺手省掉了逐句调参的功夫。完整模板清单见 dinov3/eval/text/ 配套 notebook。

用 Cityscapes 检验成色

官方评测入口是 Cityscapes,共 19 个类别:road、sidewalk、building、wall、fence、pole、traffic light、traffic sign、vegetation、terrain、sky、person、rider、car、truck、bus、train、motorcycle、bicycle。评测口径一句话带过:多类别 Jaccard 指数的宏平均(mIoU),ignore_index=255 标记未定义区域。

notebooks/dinotxt_segmentation_inference.ipynb 把数据集构建、两种模式推理、mIoU 计算串成了一个完整闭环;换成 ADE20K 或自己的数据,只需替换类别表和 mask 来源,其余部分原样可复用。

落地前自查三问

问题回答
输入分辨率怎么定?短边 512 是默认值,够用;抬高它换取局部细节,但推理时间随之增长,骨干会自动对齐到 patch 倍数。
Whole 还是 Slide?中分辨率图走 whole;高分辨率大图走 slide,窗口按 50% 重叠配置,避免接缝明显。
GPU 显存够不够?模型本体是 ViT-L 级,固定开销不大;显存主要随窗口数和图像尺寸上涨,不够就先降短边。

类别开放、迭代频繁的场景,dino.txt 帮你省掉整套标注与训练,代价是可接受的精度折损;固定类别且追求极致精度时,监督分割头仍然更稳,两者也可以组合使用。想今天就看到结果的话,克隆仓库、激活 conda 环境,单卡跑通 Cityscapes notebook。

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

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

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

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

立即咨询