ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

DINOv3 dino.txt 零样本语义分割:不训练,一张街景图直接出 19 类结果

DINOv3 dino.txt 零样本语义分割:不训练,一张街景图直接出 19 类结果 DINOv3 dino.txt 零样本语义分割不训练一张街景图直接出 19 类结果【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3手里只有一批街景照片没有逐像素标注也不想为每个类别各跑一遍训练——DINOv3 的 dino.txt 能直接给出零样本分割输入类别名输出每个像素的类别图全程不训练。没有标注数据也能做语义分割传统语义分割要先标好每类像素再对网络做监督训练类别一变标注重来、训练重来。dino.txt 换了条路把类别名写成自然语言喂给模型模型按名字找区域。Cityscapes 的 19 个街景类、ADE20K 的 150 个场景类都能按名字直接分不需要为它们准备一份标注。它凭什么可行图文对齐dino.txt 本质是一组图文对比模型。视觉侧用 ViT-L/16 骨干把图切成小块再逐块出特征文本侧用 24 层、维度 1280 的文本塔把类名编码成向量。两侧落在同一个 2048 维空间里于是某块像不像某个词就能用余弦相似度衡量——两个向量夹角越小越匹配。加载入口在 hub/dinotxt.pyfrom dinov3.hub.dinotxt import dinov3_vitl16_dinotxt_tet1280d20h24l model, tokenizer dinov3_vitl16_dinotxt_tet1280d20h24l() model.to(cuda).eval() tokenizer tokenizer.tokenize这个函数一次返回模型和分词器函数名里的 1280/20/24 正对应文本塔的维度、头数、层数改名字不用改代码。装环境、跑通第一张图按官方 conda.yaml 建环境即可pretrainedTrue时权重自动下载无需手动搬文件。git clone https://gitcode.com/GitHub_Trending/di/dinov3 cd dinov3 micromamba env create -f conda.yaml micromamba activate dinov3环境装好后把上面三行加载代码粘进脚本model就绪。完整参考实现在 分割推理 notebook里面的encode_image会把图 resize 到 patch_size16的整数倍再取 patch 特征。把类别名变成向量每个类别先用一批提示模板参考 CLIP约 80 条如 a photo of a {0}.包一层再编码、平均得到一个归一化向量模板越多向量对措辞越不敏感。text_feats [] for name in class_names: texts [t.format(name) for t in PROMPT_TEMPLATES] tokens tokenizer(texts).to(cuda) feats model.encode_text(tokens) feats feats[:, feats.shape[1] // 2:] # 丢掉对应 CLS 的前半段 feats F.normalize(feats, p2, dim-1) feats F.normalize(feats.mean(dim0), p2, dim-1) text_feats.append(feats) text_feats torch.stack(text_feats) # [num_classes, D]产出是一张 [类别数, 维度] 的表每行代表一个类类别一多这段只需算一次后面逐张图复用。全图 vs 滑动窗口推理模式怎么选中等分辨率用全图整图过一遍patch 特征与文本特征做点积得到 [类别数, h, w] 的低分辨率相似度图再插值回原分辨率取 argmax。def predict_whole(model, img, text_feats): _, blocks encode_image(model, img.unsqueeze(0)) # [1, H/16, W/16, D] blocks F.normalize(blocks.squeeze(0), p2, dim-1) cos torch.einsum(cd,hwd-chw, text_feats, blocks) return cos # [num_classes, h, w]高分辨率大图走滑动窗口notebook 里 side384、stride192每个窗口内算相似度、做 softmax再按重叠次数平均累积到原分辨率避免大图显存爆。两种模式切换只改一个配置项modewhole/slide。效果怎么验证mIoU官方用多类 Jaccard 指数mIoU宏平均打分忽略索引 255 的背景和有没有训练直接可比。from torchmetrics.classification import MulticlassJaccardIndex miou MulticlassJaccardIndex(len(class_names), averagemacro, ignore_index255) for img, target in dataloader: pred predict_whole(model, img.cuda(), text_feats) pred F.interpolate(pred[None], sizetarget.shape, modebilinear) miou.update(pred.squeeze().argmax(0)[None], target[None].cuda()) print(fmIoU: {100 * miou.compute().item()})在 Cityscapes 或 ADE20K 验证集上跑完打印的就是百分制 mIoU越高说明按名字分的区域越准。跑之前先避开这几个坑图像尺寸要落在 16 的整数倍上encode_image会自己补但提前 resize 更稳。encode_text返回的向量是两倍宽前半段对应 CLS真正要用后半段。滑窗的 side/stride 直接决定显存和速度大图别硬上全图。类别名用英文小写、和标注体系对齐名字对不上就会漏类。想继续读实现看 hub/dinotxt.py 的加载逻辑和 文本塔 的编码细节。【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表