恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
SD.Next 深度控制模块中的 MiDaS 单目深度估计:模型族谱、零样本精度评测与源码集成机制
首页
资讯中心
/
SD.Next 深度控制模块中的 MiDaS 单目深度估计:模型族谱、零样本精度评测与源码集成机制
SD.Next 深度控制模块中的 MiDaS 单目深度估计:模型族谱、零样本精度评测与源码集成机制
发布时间:2026/9/16 18:53:16
SD.Next 深度控制模块中的 MiDaS 单目深度估计模型族谱、零样本精度评测与源码集成机制【免费下载链接】automaticSD.Next: All-in-one WebUI for AI generative image and video creation, captioning and processing项目地址: https://gitcode.com/GitHub_Trending/au/automatic本文以 SD.Nextau/automatic仓库中 vendored 的 MiDaS 文档 modules/control/proc/zoe/zoedepth/models/base_models/midas_repo/README.md 为核心系统讲解单目深度估计模型 MiDaS 的训练数据混合策略、三代模型族谱v2.1 卷积 / v3.0 DPT / v3.1 多 Transformer 骨干与权重选择、官方精度评测表的解读方法、run.py推理与 Docker/相机部署方式并结合 SD.Next 源码说明该 MiDaS 副本如何作为 ZoEZoeDepth深度模型的骨干被torch.hub本地加载、以特征钩子抽取多尺度特征用于深度控制的完整机制。一、MiDaS 的核心思想混合数据集实现零样本跨数据集迁移MiDaSMulti-Internet-Views Depth for Stereo是 Intel 智能系统实验室ISL开源的单目深度估计项目其 README 对应的论文为Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-shot Cross-dataset Transfer René Ranftl, Katrin Lasinger, David Hafner, Konrad Schindler, Vladlen KoltunREADME 开宗明义地指出了该项目最核心的技术卖点MiDaS 最多使用 12 个数据集联合训练ReDWeb、DIML、Movies、MegaDepth、WSVD、TartanAir、HRWSI、ApolloScape、BlendedMVS、IRS、KITTI、NYU Depth V2并采用多目标优化multi-objective optimization。这种混合数据集 零样本评测的路线是 MiDaS 区别于早期单数据集模型的根源模型不在某一个深度基准上拟合而是在分布极广街景、电影画面、室内、自动驾驶的数据上同时优化从而在从未见过的测试集上仍能给出鲁棒的相对深度。第二个核心概念来自其配套预印本《Vision Transformers for Dense Prediction》DPTv3.0 之后的模型全部采用预训练视觉 Transformer 骨干 DPT 解码头的结构将 Transformer 的多尺度特征经 refine 路径上采样融合输出稠密深度图。这一点在仓库源码 modules/control/proc/zoe/zoedepth/models/base_models/midas_repo/midas/dpt_depth.py 中可以直接验证见第五节。二、SD.Next 中 MiDaS 的角色ZoE 深度控制的骨干在 SD.Next 仓库中MiDaS 并非作为独立命令行工具存在而是以**本地代码副本vendored repo**的形式嵌入到 ZoE 深度估计模块内部modules/control/proc/zoe/ └── zoedepth/models/base_models/ ├── midas.py # MidasCore封装 MiDaS 为特征提取骨干 └── midas_repo/ # 本文档主体README.md 所在目录 ├── hubconf.py # torch.hub 模型工厂DPT_BEiT_L_384 等 12 个入口 └── midas/ # DPT 模型、骨干BEiT/Swin/Swin2/LeViT/Next-ViT、预处理其定位是SD.Next 控制网ControlNet/深度提示词流程下的zoeZoE处理器需要一个强大的预训练深度骨干base_models/midas.py中的MidasCore.build()通过torch.hub.load(midas_path, midas_model_type, ..., sourcelocal)从本地midas_repo目录加载模型见 midas.py 第 341–343 行因此 README 中描述的下载权重、独立推理流程在 SD.Next 语境下被改造为以sourcelocal本地加载 冻结参数抽取中间特征。下面先完整继承 README 的原始内容再展开源码级机制。三、模型族谱与权重清单README Setup 章节全量继承README 将 MiDaS 权重按代际分为三族选择哪一族取决于质量与速度的取舍MiDaS 3.1多 Transformer 骨干精度最高模型定位推理分辨率dpt_beit_large_512最高质量512×512dpt_swin2_large_384质量略低速度-质量折中384×384dpt_swin2_tiny_256、dpt_levit_224嵌入式设备256×256 / 224×224openvino_midas_v21_small_256Intel CPUOpenVINO 优化.xml .bin256×256MiDaS 3.0早期 Transformer 骨干dpt_large_384、dpt_hybrid_384ViT-L 与 ViT-BResNet-50 混合骨干MiDaS 2.1经典卷积模型midas_v21_384MidasNet、midas_v21_small_256MidasNet_smallEfficientNet-Lite3 骨干面向移动端权重原始放置约定是下载到 MiDaS 仓库根目录的weights文件夹文件名与模型类型一一对应这一映射关系在源码 midas_repo/midas/model_loader.py 第 11–26 行 的default_models字典中完整保留。四、环境准备与依赖README Setup 章节README 给出的标准安装流程适用于上游独立使用场景conda env create -f environment.yaml conda activate midas-py310可选依赖按模型族区分Next-ViT 模型需要额外子模块git submodule add Next-ViT 仓库地址 midas/external/next_vitREADME 指向 isl-org/Next-ViTOpenVINO 模型pip install openvino。SD.Next 适用前提说明当前仓库内的midas_repo是裁剪后的代码副本不含run.py、environment.yaml、weights/等独立运行资产因此上述 conda 独立部署流程仅适用于上游 MiDaS 项目在 SD.Next 内部MiDaS 的依赖已由主项目统一提供且模型加载改走torch.hub本地源第五节详述。五、SD.Next 源码级集成从 hubconf 到多尺度特征钩子5.1 模型工厂hubconf.pymidas_repo/hubconf.py 声明dependencies [torch]并为每个模型提供与 README 权重表对应的工厂函数DPT_BEiT_L_512、DPT_BEiT_L_384、DPT_BEiT_B_384、DPT_SwinV2_L_384、DPT_SwinV2_B_384、DPT_SwinV2_T_256、DPT_Swin_L_384、DPT_Next_ViT_L_384、DPT_LeViT_224、DPT_Large、DPT_Hybrid、MiDaS、MiDaS_small。每个函数先以pathNone构建DPTDepthModelnon_negativeTrue保证深度非负pretrainedTrue时从 release 地址加载 state dict。SD.Next 内部调用时传pretrainedFalse与sourcelocal即由上层自行决定权重的来源与加载时机。5.2 DPT 结构与骨干 hooksdpt_depth.py 中的DPT类为每种骨干硬编码了特征抽取钩子位置这正是Dense Prediction Transformers论文的多尺度融合点在代码中的落点hooks { beitl16_512: [5, 11, 17, 23], swin2l24_384: [1, 1, 17, 1], # Allowed ranges: [0, 1], [0, 1], [0, 17], [0, 1] next_vit_large_6m: [2, 6, 36, 39], levit_384: [3, 11, 21], # LeViT 为 3 层结构 ... }[backbone]前向流程为forward_transformer从骨干取出 3–4 个尺度特征 → 逐层refinenet4 → refinenet3 → refinenet2 → refinenet1上采样融合LeViT 少一层另加stem_transpose处理→output_conv输出深度。DPTDepthModel在此基础上配置深度预测头含head_features_1/2LeViT 模型显式指定为 64/8。5.3 MidasCore作为 ZoE 骨干的封装base_models/midas.py 是 MiDaS 与 SD.Next 生成管线的衔接点关键机制有三本地加载第 332–348 行build()静态方法midas_path os.path.join(os.path.dirname(__file__), midas_repo) midas torch.hub.load(midas_path, midas_model_type, pretraineduse_pretrained_midas, force_reloadforce_reload, sourcelocal)默认midas_model_typeDPT_BEiT_L_384与hubconf.py的工厂函数名严格对应img_size支持 int / H,W 字符串 / [H, W] 列表三种形式parse_img_size第 354–367 行。多尺度特征抽取MidasCore.__init__默认layer_names(out_conv, l4_rn, r4, r3, r2, r1)attach_hooks()第 297–319 行在这些层上注册 forward hook把 MiDaS 的输出头和各级 refinenet 激活值收集进self.core_out字典forward()返回的不是深度图本身而是这组特征列表fetch_featuresTrue时供 ZoE 的深度头重新组合训练/推理——这解释了为什么build()中fetch_features默认为False而 ZoE 配置启用特征模式。输入预处理对齐PrepForMidas第 176–187 行使用Normalize(mean[0.5]*3, std[0.5]*3)Resize(ensure_multiple_of32, resize_methodminimal)与 README 推理说明中DPT 系模型统一 0.5 归一化、Swin/Swin2/LeViT 强制方形输入的规则完全一致v2.1 卷积模型则使用 ImageNet 归一化[0.485, 0.456, 0.406]/[0.229, 0.224, 0.225]见 model_loader.py 第 170–185 行。此外MIDAS_SETTINGS第 370–377 行记录了各模型输出通道数8 种大模型BEiT×3、SwinV2×3、DPT_Large、DPT_Hybrid特征通道为(256,256,256,256,256)MiDaS_small为(512,256,128,64,64)——SD.Next 据此配置 ZoE 各版本的输入通道。5.4 推理加载器 model_loader.py 的分辨率规则model_loader.py 的load_model()是 README 精度表中推理高度一列的实现来源dpt_beit_large_512取net_w, net_h 512, 512Swin/Swin2/LeViT 系列强制keep_aspect_ratio False无法保持长宽比只能方形输入OpenVINO 变体强制方形且已在 CPU 上优化height参数可覆盖默认推理高度对应 README 的--height。CUDA 上非 OpenVINO 模型会自动channels_last half()半精度优化第 231–234 行。六、README 原始用法run.py 推理、可选参数、相机与 Docker以下命令属于上游 MiDaS 独立仓库的用法SD.Next 内的 vendored 副本不含run.py在独立部署 MiDaS 时可直接复制执行。6.1 基本推理把输入图片放入input目录运行python run.py --model_type model_type --input_path input --output_path output其中model_type取值为权重清单中的模型名dpt_beit_large_512、dpt_beit_large_384、dpt_beit_base_384、dpt_swin2_large_384、dpt_swin2_base_384、dpt_swin2_tiny_256、dpt_swin_large_384、dpt_next_vit_large_384、dpt_levit_224、dpt_large_384、dpt_hybrid_384、midas_v21_384、midas_v21_small_256、openvino_midas_v21_small_256 3) 深度图输出到output目录。6.2 可选推理参数--height与--square--height默认推理会把输入图高度缩放到模型名中数字对应的分辨率以适配编码器。部分模型支持一段高度范围而非单一值可用--height探索不同高度不支持的高度会抛错且使用该参数可能降低精度。源码层面即load_model()中if height is not None: net_w, net_h height, height的覆盖逻辑。--square默认推理除 Swin、Swin2、LeViT 外保持输入长宽比加--square后按方形分辨率缩放忽略长宽比但保持高度。对应model_loader.py中keep_aspect_ratio not square以及 Swin 系模型强制False的实现。6.3 相机实时深度--side省略输入/输出路径仅指定模型即可从相机取流并弹窗显示python run.py --model_type model_type --side--side使原始 RGB 与深度图左右并排显示以便对比。6.4 Docker 部署前置已安装 Docker 与 NVIDIA Docker runtime。# 构建镜像 docker build -t midas . # 推理透传全部 GPU挂载 input/output/weights 目录 docker run --rm --gpus all \ -v $PWD/input:/opt/MiDaS/input \ -v $PWD/output:/opt/MiDaS/output \ -v $PWD/weights:/opt/MiDaS/weights midas6.5 其他运行形态README 原文保留PyTorch Hub预训练模型在 PyTorch Hub 上可用对应hubconf.py各工厂函数与transforms()提供的default_transform/dpt_transform/swin384_transform等预处理组合TensorFlow / ONNX上游tf子目录提供当前仅支持 MiDaS v2.1移动端iOS / Android上游mobile子目录对应midas_v21_small_256轻量模型ROS1上游ros子目录当前仅支持 MiDaS v2.1。七、零样本精度评测表README Accuracy 章节全量继承README 提供零样本误差ε_d在 6 个数据集上评测数值越低越好。绿色 Imp.Improvement表示相对 MiDaS v3.0 DPT_L-384 的整体提升百分比模型按推理高度分组模型名中的数字是方形训练分辨率。表中还给出参数量M与 RTX 3090 GPU 在训练分辨率下的推理 FPSMiDaS 模型DIW (WHDR)Eth3d (AbsRel)Sintel (AbsRel)TUM (δ1)KITTI (δ1)NYUv2 (δ1)Imp. %参数量 MFPS推理高度 512v3.1 BEiT_L-5120.11370.06590.23666.1311.56*1.86*193455.7v3.1 BEiT_L-512方形0.11210.06140.20906.465.00*1.90*343455.7推理高度 384v3.1 BEiT_L-5120.12450.06810.21766.136.28*2.16*2834512v3.1 Swin2_L-384方形0.11060.07320.24428.875.84*2.92*2221341v3.1 Swin2_B-384方形0.10950.07900.24048.935.97*3.28*2210239v3.1 Swin_L-384方形0.11260.08530.24288.746.60*3.34*1721349v3.1 BEiT_L-3840.12390.06670.25457.179.84*2.21*1734413v3.1 Next-ViT_L-3840.10310.09540.22959.216.89*3.47*167230v3.1 BEiT_B-3840.11590.09670.29019.8826.60*3.91*−3111231v3.0 DPT_L-3840.10820.08880.26979.978.468.32034461v3.0 DPT_H-3840.11060.09340.274110.8911.568.69−1012350v2.1 Large_3840.12950.11550.328512.5116.088.71−3210547推理高度 256v3.1 Swin2_T-256方形0.12110.11060.286813.4310.13*5.55*−114264v2.1 Small_2560.13440.13440.337014.5329.2713.43−762190推理高度 224v3.1 LeViT_224方形0.13140.12060.314818.2115.27*8.64*−405173脚注原文语义保留* KITTI 与 NYU Depth V2 无零样本误差因为模型训练时也使用了这两个数据集□方形标记由于 Transformer 骨干Swin、Swin2、LeViT不支持非方形分辨率或为了与这些模型对比验证在方形分辨率下完成其余验证均保持长宽比。分辨率差异会影响零样本误差与提升值的可比性因为它们是像素级平均量未计入更高分辨率带来的细节优势加粗为同一验证高度下该列最优值。Imp. 的定义原文公式相对 MiDaS v3.0 DPT_L-384 的平均零样本误差改进。设 ε_d 为数据集 d 上的零样本误差则Imp. 100 × (1 − (1/6) Σ_d ε_d / ε_{d, DPT_L-384}) %README 还特别指出v2.0 → v2.1 的约 10% 提升、v2.1 → v3.0 的约 21% 提升不会出现在 Imp. 列中该列基准固定为 v3.0 DPT_L-384需分别以 v2.1 Large_384、v2.0 Large_384 为基准才能看到。相机实时速度参考README 原文测试配置Windows 10 / 11 代 i7-1185G7 3.00GHz / 16GB RAM / 相机 640×480 /openvino_midas_v21_small_256模型实测22 FPS。八、版本演进README Changelog 全量继承2022 年 12 月 — MiDaS v3.1基于 5 类 Transformer 骨干BEiT、Swin2、Swin、Next-ViT、LeViT的新模型训练数据集从 10 个扩展到 12 个新增 KITTI、NYU Depth V2采用 BTS 划分最佳模型 BEiT_Large-512512×512平均比 v3.0 准确约 28%集成相机实时深度估计2021 年 9 月基于 Gradio 接入 Hugging Face Spaces 在线演示2021 年 4 月 — MiDaS v3.0基于 DPTDense Prediction Transformers的新模型平均比 v2.1 准确约 21%更多模型见上游 DPT 仓库2020 年 11 月 — MiDaS v2.110 数据集训练的新模型比 v2.0 平均准确约 10%新增移动端实时轻量模型iOS / Android 示例应用与 ROS 机器人部署包2020 年 7 月新增 TensorFlow 与 ONNX 代码及在线 demo2019 年 12 月MiDaS 新版本发布精度与鲁棒性显著提升2019 年 7 月MiDaS 首次发布。九、引用与许可使用 MiDaS 代码或任何模型时README 要求引用其主论文IEEE TPAMI 2022ARTICLE{Ranftl2022, author Ren\{e} Ranftl and Katrin Lasinger and David Hafner and Konrad Schindler and Vladlen Koltun, title Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-Shot Cross-Dataset Transfer, journal IEEE Transactions on Pattern Analysis and Machine Intelligence, year 2022, volume 44, number 3 }使用 DPT 系模型时还需追加引用《Vision Transformers for Dense Prediction》ICCV 2021。该 vendored 副本遵循 MIT License其midas/目录内各文件保留了 Intelligent Systems Lab Org 的版权声明。十、小结选型追求精度选dpt_beit_large_512Imp. 19%34%兼顾速度选dpt_swin2_large_38441 FPS资源受限选dpt_swin2_tiny_256/dpt_levit_224/ OpenVINO small移动端 22 FPS 级别推理约束Swin/Swin2/LeViT 必须方形输入BEiT/DPT 系可保持长宽比并支持--height调高推理高度可能降精度在 SD.Next 中的落地MidasCore.build()以sourcelocal从 midas_repo 本地加载默认DPT_BEiT_L_384通过 forward hook 抽取out_conv、l4_rn、r4–r1六组特征供 ZoE 深度头使用输出通道数由MIDAS_SETTINGS按模型族256 通道大模型 / 小模型金字塔通道区分预处理统一为 0.5 归一化 32 像素对齐缩放可验证入口权重映射见 midas/model_loader.py模型工厂见 hubconf.pyDPT 骨干 hooks 见 midas/dpt_depth.pySD.Next 集成封装见 base_models/midas.py。【免费下载链接】automaticSD.Next: All-in-one WebUI for AI generative image and video creation, captioning and processing项目地址: https://gitcode.com/GitHub_Trending/au/automatic创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考