DINOv3 零样本语义分割完全指南:从逐类标注到像素级类别图

发布时间:2026/9/15 15:42:49

DINOv3 零样本语义分割完全指南:从逐类标注到像素级类别图 DINOv3 零样本语义分割完全指南从逐类标注到像素级类别图【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3DINOv3 是 Meta 的自监督视觉基础模型家族其中 dino.txt 分支把视觉与文本对齐到同一特征空间让你不标注、不训练就能做 DINOv3 零样本分割。读完本文你可以写出可运行的像素级类别图推理脚本。一、为什么需要它问题与方案对比 传统语义分割流程从像素级标注开始而这一步恰恰最贵换一个新任务就要重新标一轮类别一变又要重标。部分团队尝试 CLIP 类开放词汇方案但它的视觉侧特征主要依赖单个 CLS token遇到细线结构和小目标时密集的空间细节明显掉档。DINOv3 换了路线骨干先用自监督学出 patch 级密集特征再由 dino.txt 通过对比学习把文本编码器对齐到同一空间于是任意像素的特征都能直接与任意文本匹配。密集特征在 patch 粒度空间细节更强零样本换类别不训练即可用文本对齐靠 dino.txt 直接给出多头复用分类检测深度分割共用二、5 分钟跑通准备环境并运行首个推理代码 ⚡先确认你有 Linux 环境、PyTorch ≥ 2.7.1 和可用的 micromamba。克隆仓库并创建环境git clone https://gitcode.com/GitHub_Trending/di/dinov3 cd dinov3 micromamba env create -f conda.yaml micromamba activate dinov3运行最小脚本验证双塔能输出同空间特征import torch from PIL import Image from torchvision import transforms from dinov3.hub.dinotxt import dinov3_vitl16_dinotxt_tet1280d20h24l model, tokenizer dinov3_vitl16_dinotxt_tet1280d20h24l() # 权重拉不下来时用 weights 与 backbone_weights 指到本地 .pth model.to(cuda).eval() text_feats model.encode_text(tokenizer.tokenize([a photo of a cat.]).to(cuda), normalizeTrue) t transforms.Compose([ transforms.Resize(512, antialiasTrue), # 短边对齐保持原图纵横比 transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), ]) img_feats model.encode_image(t(Image.open(cat.jpg)).unsqueeze(0).to(cuda), normalizeTrue) print((img_feats * text_feats).sum(-1)) # 该相似度越高图像被判为 cat 的把握越大如果你看到下载失败或哈希校验报错通常是权重 URL 不对或本地文件不完整核对dinov3/hub/backbones.py中的默认下载地址并指向正确的本地路径。三、拆解零样本分割工作流三步代码走读 把整条流程拆成三个操作编码文本 → 提取密集特征 → 映射相似度每一步的输出都是下一步的输入。3.1 批量编码类名生成 dino.txt 文本特征这一步把类名变成归一化的文本向量多个提示模板取平均以抵消措辞差异。import torch.nn.functional as F PROMPT_TEMPLATES [a photo of a {0}., a close-up photo of a {0}.] text_feats [] for name in class_names: # class_names 是目标类名字符组 tokens tokenizer.tokenize([t.format(name) for t in PROMPT_TEMPLATES]).to(cuda) feats model.encode_text(tokens) feats feats[:, feats.shape[1] // 2:] # 前半段对应 CLS token密集任务用不到 feats F.normalize(feats, dim-1).mean(0) # 对模板取平均抹平措辞随机性 text_feats.append(F.normalize(feats, dim-1)) text_feats torch.stack(text_feats) # [num_classes, 1024]关键要点文本特征只需算一次循环外缓存之后所有图像复用。→ 拿到类的向量后还需要给图像上每个 patch 一个同维向量。3.2 从图像提取 DINOv3 密集特征这一步把图像送进骨干和 2 个头部块输出每个 16×16 patch 一条向量。import math import torch.nn.functional as F def encode_image(img): # img: [B, 3, H, W] B, _, H, W img.shape P model.visual_model.backbone.patch_size new_H, new_W math.ceil(H / P) * P, math.ceil(W / P) * P if (H, W) ! (new_H, new_W): # 先补齐到 patch 整数倍网格才不会越界 img F.interpolate(img, size(new_H, new_W), modebicubic) B, _, h_i, w_i img.shape _, _, patch_tokens model.visual_model.get_class_and_patch_tokens(img) return patch_tokens.reshape(B, h_i // P, w_i // P, -1) # [B, h, w, D]关键要点特征网格尺寸为“图像尺寸除以 16”这就是 DINOv3 密集特征的像素级基础。→ 两侧都是向量之后剩下的事就是一次点积。3.3 计算相似度图输出 DINOv3 零样本分割结果这一步用 einsum 一次对齐所有类向量和所有 patch 向量相似度最高的类即为该位置类别。def predict_whole(img, text_feats): blocks encode_image(img.unsqueeze(0))[0] # [h, w, D] blocks F.normalize(blocks, dim-1) cos torch.einsum(cd,hwd-chw, text_feats, blocks) # [num_classes, h, w] return cos # 低分辨率相似度图放大回原图尺寸后 argmax 即类别图高分辨率图像改用滑动窗口参考实现中side384、stride192每个窗口内做 softmax 后放大重叠区域取平均。关键要点cosine 相似度要求两侧都先做 L2 归一化顺序不能反。四、速览底层机制从双塔到相似度图 两个塔最终都投影进同一个 2048 维空间分割本质上是“patch 特征”与“文本向量”之间的矩阵乘法。输入 → 变换 → 输出image → ViT-L/1624 层patch16→ patch tokens [h, w, 1024] → 2 个自注意力头部块 线性投影 → [h, w, 1024] text → 24 层因果 Transformer77 tokens→ 文本 tokens → argmax 池化 线性投影 → [1024] align: cos(patch, text) × logit_scale → [num_classes, h, w] 相似度图视觉侧骨干在 dino.txt 训练时冻结只学 2 个头部块和投影层因此骨干的密集特征不会被对齐任务带偏。对齐损失是双向 InfoNCE图像-文本正对拉近负对推远logit_scale是可学习的温度系数等价于把原始点积换算成 softmax 前的 logit。关键实现分别位于dinov3/models/vision_transformer.py骨干、dinov3/eval/text/vision_tower.py视觉塔、dinov3/eval/text/dinotxt_model.py双塔与 logits。五、实战场景与调优两套可直接改的领域配置 把class_names换成你的领域词表再调“输入分辨率”和“推理模式”两个参数即可迁移。5.1 对城市街景做 DINOv3 零样本分割Cityscapes 共 19 类且图像尺寸大必须用滑动窗口推理。class_names (road, sidewalk, building, wall, fence, pole, traffic light, traffic sign, vegetation, terrain, sky, person, rider, car, truck, bus, train, motorcycle, bicycle) pred predict_slide(img, text_feats, side384, stride192) # 大图走窗口推理 pred pred.argmax(0) # [H, W] 的类别索引图参数典型值影响resize短边512越大细节越好显存约按平方增长side/stride384 / 192side 越大边界越细stride 小于 side 产生重叠平均提示模板数2~4 条细粒度类别下越多越稳⚠️ 滑动窗口模式累加的是各窗口 softmax 的局部平均不是全局真实概率不要直接拿去做置信度阈值过滤。5.2 医学器官分割医学图像通常不超过 2048 像素整图模式就够用重点是控制类别数和模板措辞。medical (lung, liver, kidney, bone, tumor) tf encode_text_feats(medical) # 流程同 3.1 pred F.interpolate( predict_whole(img, tf)[None], sizeimg.shape[1:], modebilinear )[0].argmax(0) # 低分辨率相似度图放大回原图再取类别参数典型值影响类别数5~10类别过多会拉低 top-1 分布的信噪比输入分辨率512~768小病灶靠更高分辨率先放大图像而非指望模型内插提示模板2~3 条器官词歧义少模板不必多六、速查表与下一步五处文件先记住 先记住这张表再决定往哪个方向深入。关键文件/目录用途何时需要修改dinov3/hub/dinotxt.pydino.txt 加载入口返回模型与分词器需要指定本地权重时dinov3/eval/text/dinotxt_model.py定义双塔结构与对齐 logits想改池化方式或特征维度时notebooks/dinotxt_segmentation_inference.ipynb零样本分割参考实现换数据集或评估指标时dinov3/configs/train/预训练与蒸馏配置自训模型时dinov3/data/datasets/ImageNet、COCO 等数据集类接入自定义数据时下一步可以做的事跑通notebooks/里其余四个 notebookPCA 可视化、前景分割、稠密/稀疏匹配、分割跟踪换用 SAT-493M 卫星权重在遥感数据上评估零样本效果通过 Hugging Face Transformers 或 timm 直接复用骨干省掉本地加载有自己的图文对时参照dinov3/eval/text/configs/dinov3_vitl_text.yaml训练自己的对齐模型现在你已经拥有一套可运行的 DINOv3 零样本分割流程下一步就是把你的类别和数据换进去。【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/15 15:42:49

从Seurat转向scanpy:Python单细胞转录组分析完整流程指南

做单细胞数据分析的人,多半绕不开 Seurat。我前面两篇教程把 R 语言里 Seurat 的完整流程写过一遍,从数据读入、质控、标准化到聚类和 marker 基因鉴定,一套跑下来确实顺手。但这几年我自己的项目里出现了一个很现实的情况:样本量…

2026/9/15 15:37:49

GPD设备Linux源码分析:从UEFI固件到内核模块的全栈拆解

1. 这不是“读代码”,而是拆解一个真实嵌入式设备的神经中枢GPD——这个缩写在极客圈和便携计算爱好者中,几乎等同于“把桌面级体验塞进掌心”的代名词。它不是某个抽象的开源项目代号,而是GPD公司旗下一系列超便携Windows/Linux双系统掌机/迷…

2026/9/15 15:52:50

vectorbt向量化回测实战:从环境踩坑到千策并发

1. 为什么“一晚跑上千个策略”听起来很爽,但很多人装上vectorbt后连第一个回测都跑不起来?vectorbt 这个名字在量化圈子里最近两年确实火得有点突然。你刷技术社区、看知乎问答、甚至翻 GitHub Trending,总能看到它被冠以“向量化回测天花板…

2026/9/15 15:52:50

Python行为驱动开发(BDD)实战:BEHAVE框架核心原理与CI集成

1. BEHAVE不是“行为”,是BDD在Python世界的落地锚点很多人第一次看到BEHAVE,下意识会念成“be-have”(有行为),甚至以为是个描述运行时状态的动词——其实它读作 /bɪˈhɑːv/,和“behave”同音&#xff…

2026/9/15 15:52:50

基于Dask的本地化蔬菜价格预测大数据实践

简介:本资源是一份面向高校计算机与数据科学专业学生的高分课程设计项目,聚焦蔬菜价格预测这一典型大数据分析场景,适用于期末大作业、课程设计及数据分析实践学习。项目基于Python构建完整预测流程,涵盖数据采集、清洗、特征工程…

2026/9/15 15:52:50

iii http worker 实战:3 分钟把函数发布成 REST 端点

iii http worker 实战:3 分钟把函数发布成 REST 端点 【免费下载链接】iii Effortlessly compose, extend, and observe every service in real-time for the first time ever. 项目地址: https://gitcode.com/GitHub_Trending/mo/iii 本文带你用 iii 的 htt…

2026/9/15 15:47:50

MobileNetV3核心实战解析:从设计原理到PyTorch复现与量化部署

做端侧模型选型这几年,我绕不开的一个名字就是 MobileNetV3。不管是给安卓应用塞一个人脸检测模型,还是在 RK3588 上跑实时分割,最后工程化落地的方案里总能看到它的影子。这篇笔记不是官方的论文翻译,而是我结合项目实战重新整理…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码