资讯动态

MiDaS 深度估计上手:4 步把普通照片变成三维深度图

发布时间:2026/8/17 17:24:22 来源:尧图企业网站定制
MiDaS 深度估计上手4 步把普通照片变成三维深度图【免费下载链接】MiDaSCode for robust monocular depth estimation described in Ranftl et. al., Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-shot Cross-dataset Transfer, TPAMI 2022项目地址: https://gitcode.com/gh_mirrors/mi/MiDaS想让程序理解照片里哪个物体离我更近通常需要深度相机、激光雷达这类专门硬件成本高、体积大、还挑环境。而 MiDaSMonocular Depth Estimation这个开源项目只靠一张普通彩色照片就能给每个像素估出远近关系即单目深度估计而且无需针对新场景重新训练。它由 Intel Labs 维护经过 12 个数据集的混合训练在零样本跨数据集场景下依然稳定非常适合快速给应用装上一双看 3D 的眼睛。先聊聊痛点机器怎么看见远近人类扫一眼画面就知道前面的车比远处的楼近靠的是双眼视差和经验。机器没这么幸运多目方案需要标定、同步硬件贵深度相机怕强光、怕反光户外经常罢工雷达精度高但价格和体积劝退大多数开发者。单目深度估计想做的就是绕开这些硬件直接从 2D 像素推断 3D 距离。过去这类模型换一个数据集就水土不服直到 MiDaS 用混合数据集训练 多目标优化解决了泛化问题——它一次性在 ReDWeb、DIML、MegaDepth、KITTI、NYU Depth V2 等十余个来源各异的数据集上联合训练让模型学会了通用的深度先验而不是死记某一类场景。认识 MiDaS一张图换一张深度图的背后编码器-解码器先压缩再还原MiDaS 采用经典的编码器-解码器结构。编码器backbone把图像逐层压扁成越来越抽象的特征浅层特征保存边缘、纹理等细节深层特征包含这是墙、那是桌子的语义。解码器再把这些特征一步步还原成与输入同尺寸的深度图。真正让细节活下来的是中间那层特征融合模块代码位于midas/blocks.py的FeatureFusionBlock_custom。它把高层语义和低层细节通过残差连接residual connection相加再按目标尺寸做双线性插值上采样。你可以把它理解成高分细节与宏观结构的合并现场语义告诉模块这是一根柱子浅层特征负责把柱子的轮廓描清楚。输入尺寸的潜规则32 的倍数Transformer 编码器对输入尺寸有整除要求所以midas/transforms.py里的Resize类有两个工作重点一是默认保持纵横比缩放避免画面拉伸导致深度失真二是把尺寸对齐到 32 的倍数。这也解释了为什么官方参数建议高度按 384、512、256 这类数值走——它们恰好都是 32 的倍数喂给模型最舒服。动手实践跑通你的第一张深度图第一步拉代码、装环境git clone https://gitcode.com/gh_mirrors/mi/MiDaS cd MiDaS conda env create -f environment.yaml conda activate midas-py310第二步下载权重仓库自带weights/目录约定把选中的模型权重文件放进去即可。项目默认模型是dpt_beit_large_512精度最高的一档文件名为weights/dpt_beit_large_512.pt。第三步放入图片跑起来把任意图片放进input/目录然后python run.py --model_type dpt_beit_large_512 --input_path input --output_path output等命令行打印出类似Input resized to 512x512 before entering the encoder的信息就说明推理开始了。输出目录里会出现xxx-dpt_beit_large_512.png可视化深度图默认 Inferno 伪彩色橙色远、紫色近xxx-dpt_beit_large_512.pfm原始浮点深度数据适合后续程序读取。下图是官方给出的多模型效果对比同一室内场景下热力图的明暗分布就是模型理解的远近第四步调整参数按需出图# 提升编码器输入高度注意保持 32 的倍数 python run.py --model_type dpt_beit_large_512 --input_path input --output_path output --height 1024 # 输出 16 位灰度 PNG保留更多深度精度 python run.py --model_type dpt_swin2_large_384 --input_path input --output_path output --grayscale一个小提示--grayscale模式走的是 16 位灰度 PNGutils.py中write_depth的bits2分支而默认的 Inferno 伪彩色为了贴色彩映射只能存 8 位。要精度就开灰度要直观就看伪彩色各取所需。进阶挑一个真正适合你的模型MiDaS 3.1 提供了覆盖不同速度/精度档位的模型库选型基本决定了你的体验。下面是官方精度表里的核心数据RTX 3090 实测模型参数量推理高度FPS相对 v3.0 DPT-L 的提升dpt_beit_large_512345M5125.7最高约 34%dpt_swin2_large_384213M38441约 22%dpt_next_vit_large_38472M38430约 16%dpt_swin2_tiny_25642M25664约 -11%dpt_levit_22451M22473约 -40%一眼就能看出规律模型越重深度图越精细但帧率越低。轻量档的 Swin2-T 和 LeViT 精度落后明显适合嵌入式或实时场景要细节就要接受 BEiT-L 的慢。把官方那张提升 vs 帧率散点图摊开看每个点都是一次取舍选型口诀无脑求准选 BEiT-L 512要准又要快选 Swin2-L 384边缘设备选 Swin2-T 256 或 LeViT 224CPU 场景可试 OpenVINO 版 small 模型。优化分辨率与性能的拉扯怎么破--height参数是调节质量-速度天平最直接的旋钮。官方说明明确写着改高度可能降低准确率因为模型在训练分辨率下的行为最可预期。实际经验显存吃紧就降到 384 或 256FPS 往往翻倍--optimize开启半精度half-float推理速度提升明显但 Swin 系列对半精度不友好可能算出非有限值NaN/Inf谨慎使用--square强制方形输入会拉伸图像、可能引入透视畸变非必要不开启担心推理太慢优先换骨干网络而不是硬顶分辨率——从 BEiT-L 换到 Swin2-L速度能提升近 7 倍。想进一步压榨性能仓库还给了两条现成路径一是tf/子目录里的 TensorFlow / ONNX 版本目前支持 v2.1适合部署到推理引擎二是把输入张量转成channels_last内存布局并配合torch.backends.cudnn.benchmark Truerun.py 已默认开启减少访存开销。更多玩法不止处理文件夹里的图接摄像头实时估深python run.py --model_type dpt_swin2_tiny_256 --side不指定输入输出路径即可从摄像头取流--side让原图与深度图并排显示官方在酷睿 i7 OpenVINO small 模型下跑到过约 22 FPSDocker 一键跑仓库自带Dockerfiledocker build -t midas .后挂载 input/output/weights 三个目录即可环境隔离最省心移动端部署mobile/下有完整的 AndroidTensorFlow Lite与 iOS 示例工程还有配套的模型下载脚本机器人接入ros/里是现成的 ROS1 包含 talker/listener 示例方便在机器人上直接订阅图像话题出深度图。踩坑清单过来人的四条提醒显存溢出OOM先降--height保持 32 倍数再考虑--optimize半精度最后才考虑换小模型。深度图出现周期性条纹多半是尺寸没对齐或半精度导致。检查是否误开了--square以及 Swin 系模型是否开了--optimize。输出一堆Non-finite depth values警告Swin 系列在半精度下的典型症状去掉--optimize即可。改了--height报错说明该模型只支持训练时的固定高度如 LeViT 只认 224不要硬塞别的值。写在最后MiDaS 的价值在于把单目深度估计从一个研究玩具变成了开箱即用的工程组件13 个预训练模型覆盖从 21M 到 345M 的容量梯度命令行、Python API、Docker、移动端、ROS 五条部署路径齐全而且 MIT 协议可以放心商用。适合做 AR 交互、机器人避障、短视频景深特效、建筑测量这类需要空间感但装不起硬件的产品。顺着这个方向官方生态里 ZoeDepth 已经用它当底座做相对转绝对深度的升级LDM3D 则拿它生成训练深度监督数据——说明它不只是终点也是很多 3D 应用的地基。如果你手头正好有一张照片、一个需求花十分钟跑通上面的命令大概率会收获原来这么简单的惊喜。【免费下载链接】MiDaSCode for robust monocular depth estimation described in Ranftl et. al., Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-shot Cross-dataset Transfer, TPAMI 2022项目地址: https://gitcode.com/gh_mirrors/mi/MiDaS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价