ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DINOv2 部署实战:从环境到推理,四步跑通自监督视觉 Transformer

DINOv2 部署实战:从环境到推理,四步跑通自监督视觉 Transformer DINOv2 部署实战从环境到推理四步跑通自监督视觉 Transformer【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2想做 DINOv2 部署和 DINOv2 实战但不知道从何下手最稳的路线是先跑通最小推理再选骨干最后接下游任务。DINOv2 是 Meta 推出的自监督视觉模型不靠标注数据用自蒸馏学会强特征表示提取出的向量可以直接复用到分类、深度、分割等任务。下面按这条主线把流程走一遍。1. DINOv2 安装一条命令备好环境想省事就直接用官方清单它锁定了经过验证的 PyTorch 2.0 与 xformers 版本组合手动配依赖反而容易踩坑git clone https://gitcode.com/GitHub_Trending/di/dinov2 cd dinov2 conda env create -f conda.yaml conda activate dinov22. 选对骨干参数规模与寄存器 token第一个要做的决定是选多大四档模型参数量差了几十倍选小了精度不够选大了显存吃紧。变体参数量嵌入维度适合场景ViT-S/1421M384边缘侧、低延迟场景ViT-B/1486M768通用视觉任务性价比首选ViT-L/14300M1024需要更细粒度特征的高性能场景ViT-g/141.1B1536研究级用途显存消耗大另一个要确认的是寄存器register token_reg后缀的变体在输入序列里额外加 4 个 token作用是吸收patch 边界之类的伪影让中心区域特征更干净。做局部检测、检索匹配或高分辨率推理时建议直接用 reg 版本。在线加载一行搞定网络能连到权重 CDN 时一行 hub 调用即可内网环境可以指定sourcelocal从克隆目录加载首次运行会把权重落到本地缓存import torch model torch.hub.load(./dinov2, dinov2_vitb14, sourcelocal) model.eval()3. DINOv2 离线部署没有外网时手动加载权重生产机往往不通外网。此时可以在联网机器上先下载好 .pth 文件或把TORCH_HOME指到已备好的缓存目录然后自己搭架构、灌权重import torch from dinov2.models.vision_transformer import vit_base model vit_base(patch_size14) model.load_state_dict(torch.load(dinov2_vitb14_pretrain.pth, map_locationcpu), strictTrue) model.eval()骨干的构建逻辑在 dinov2/models/各类加载入口集中在 dinov2/hub/想自定义可以从这里改起。4. 预处理与视觉 Transformer 特征提取为什么是 518×518视觉 Transformer 对输入尺寸敏感这一步做错后面指标会整体掉。官方流程resize 到 518 再归一化518 不是随手定的518 14 × 3737 是奇数所以图像中心恰好落在 patch 边界上任意宽高比的图缩放裁切后中心都对齐结果稳定from torchvision import transforms preprocess transforms.Compose([ transforms.Resize(518, antialiasTrue), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), ])CLS token 和 patch token 怎么取前向的默认输出是 CLS token即全图的一个整体表示需要逐 patch 的局部特征时调get_intermediate_layers(x, n1, reshapeTrue)拿到带空间顺序的序列传n4则能取多层中间特征——接下游任务头时用的正是它。5. 接下游任务分类、深度、分割开箱即用仓库自带预训练任务头命名规则是dinov2_尺寸后缀lc分类、ld线性深度、ddDPT 深度不用自己写训练脚本。分类线性探针头线性头只训练最后一层、骨干冻结ImageNet linear probing是检验特征质量最直接的指标只关心分类结果的话lc模型输出 logits 就能直接用。深度估计_ld与_dd的区别在解码头是线性还是 DPT后者精度更高、开销也更大权重分室内 NYU 和室外 KITTI 两套深度范围会自动对应from dinov2.hub.depthers import dinov2_vitl14_dd depth_model dinov2_vitl14_dd(pretrainedTrue, weightsNYU)分割与领域扩展语义分割头基于 mmcv放在 dinov2/eval/segmentation/对应配置在 dinov2/configs/eval/。除了自然图像仓库还有细胞显微cell_dino和 X 光xray_dino两条扩展线前者的教师-学生自蒸馏流程与多通道显微数据见下图细节可看 docs/README_CELL_DINO.md。6. 常见失败点与推理提速实际跑起来会碰到这几类坑下载卡死hub 首次加载走 CDN内网经常超时把TORCH_HOME指到已备缓存目录或改用离线加载。shape 对不上_reg架构与非 reg 权重不通用strict 加载会直接报错见到 size mismatch 先核对 reg 后缀是否一致。显存ViT-L 在 518 分辨率下 batch1 前向就要占掉数 GB 显存批量大就降分辨率或开混合精度。速度eval 半精度 torch.compile的组合对 ViT 最稳batch 越大收益越明显。收尾动手前核对这 5 点环境conda env create -f conda.yaml一把梭别手搓依赖加载在线一行 hub内网走手动 .pth 本地灌权重预处理518 ImageNet 归一化参数别乱改骨干通用任务从 ViT-B/14 起步用局部特征时换_reg任务头分类、深度、分割都在 dinov2/hub/ 里有现成入口别重复造轮子【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表