单目深度估计实战:用 MiDaS 从一张照片生成高清深度图(完整上手教程)
单目深度估计实战用 MiDaS 从一张照片生成高清深度图完整上手教程【免费下载链接】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如果你做过 AR 贴纸、人像背景虚化或者机器人避障大概率会遇到同一个尴尬想让程序知道哪个物体离镜头近却买不起深度相机。其实只需要一张普通照片就有办法把每个像素到镜头的距离估算出来——这门技术叫单目深度估计Monocular Depth Estimation而 Intel 开源的 MiDaS 正是目前最容易上手、效果也最稳的实现之一。这篇文章会用零基础友好的方式带你理解它为什么能凭空算出深度并手把手跑出你的第一张深度图。一次背景虚化需求引出深度估计这件事先讲一个真实场景。有位做短视频工具的开发者想给照片加前景清晰、背景模糊的虚化特效。他最初的方案是让人工框选主体结果用户反馈极差——抠图边界毛糙头发丝更是重灾区。后来他了解到这类特效的工业级做法是先拿到深度图图上每个像素的亮度代表该点到相机的远近有了它程序就能自动知道哪里该清晰、哪里该模糊甚至可以做 3D 视差、物体遮挡等更高级的效果。问题来了深度数据通常要靠双目相机或 ToF 传感器采集消费级手机根本不具备。而 MiDaS 这类单目深度估计模型恰恰能用一个神经网络从单张 RGB 图片直接推断出整张深度图。这就是本文要带你亲手验证的东西——不需要任何深度传感器一行命令出结果。项目速览它是什么凭什么值得用MiDaS 全称 Towards Robust Monocular Depth Estimation是 Intel 实验室开源的单目深度估计模型库论文发表在 TPAMI 2022。一句话概括它的定位用一个预训练模型对任意未见过场景的照片输出相对深度图且基本不需要针对新场景做任何微调。凭什么是它三点原因训练数据覆盖面极广。模型在最多 12 个数据集上联合训练包括室内外的 ReDWeb、MegaDepth、KITTI、NYU Depth V2 等学会了迁移换个陌生环境依然靠谱。自带模型动物园。v3.1 版本一口气提供了 5 种 transformer 骨干BEiT、Swin2、Swin、Next-ViT、LeViT从 3.45 亿参数的旗舰模型到 2 千万参数的轻量模型都有手机、嵌入式设备、服务器各取所需。部署方式多。除了纯 PyTorch官方还提供了 TensorFlow、ONNX、OpenVINO 版本甚至有 iOS/Android 移动端工程和 ROS 机器人包想接到哪个平台都有现成路径。对比同类工具时MiDaS 的核心卖点是零样本迁移能力别的模型可能在自己训练过的数据分布上表现好一换场景就翻车MiDaS 因为见得多泛化明显更稳。拆解两个核心亮点为什么它算得准亮点一多数据集混合训练练出见过世面的泛化能力普通深度估计模型通常只在单一数据集比如全是室内场景上训练导致它对训练集以外的风格很敏感。MiDaS 的做法是把 12 个来源、分辨率、拍摄风格各不相同的数据集混在一起训练并做了多目标优化——你可以把它理解成让模型在多个老师的课堂上轮番学习每个老师出题风格都不同学出来的学生自然更抗折腾。这份见多识广直接体现在下游LDM3D 等文生图模型在训练时就是用 MiDaS 生成的深度图做监督信号的可见其可靠性已经被业界反复验证过。亮点二Transformer 骨干 分层特征融合保住边缘细节v3.1 的模型几乎全部基于 DPTVision Transformers for Dense Prediction架构。和传统 CNN 相比transformer 的全局注意力机制让模型能更好地理解物体之间的空间关系深度边界更锐利。而midas/blocks.py里的FeatureFusionBlock_custom负责把网络浅层细节纹理多和深层语义结构强的特征逐级融合再用上采样把低分辨率特征图还原到输入分辨率最终输出和原图同尺寸的深度图。# midas/blocks.py 中的融合模块结构示意非完整源码 class FeatureFusionBlock_custom(nn.Module): def forward(self, *xs, sizeNone): output xs[0] if len(xs) 2: # 同时接收深层语义特征和浅层细节特征 output self.resConfUnit1(xs[1]) output self.resConfUnit2(output) # 用双线性插值把特征图对齐到目标尺寸保证与输入分辨率一致 output nn.functional.interpolate(output, sizesize, modebilinear, align_cornersTrue) return self.out_conv(output)配合midas/dpt_depth.py中按骨干网络配置的 hook 位置模型能从不同层抽出四种尺度的特征既抓住了桌子在墙前面这种全局结构也保住了桌角边缘这种局部细节。三步完成环境配置从克隆到跑通首个示例下面进入实操。假设你有一台装了 Python 的电脑目标是跑出第一张深度图。第一步克隆仓库并创建环境仓库地址为https://gitcode.com/gh_mirrors/mi/MiDaS克隆后直接用官方提供的 conda 环境文件git clone https://gitcode.com/gh_mirrors/mi/MiDaS cd MiDaS conda env create -f environment.yaml conda activate midas-py310environment.yaml里锁定了 Python 3.10、PyTorch 1.13 和必要的依赖opencv、timm、einops 等。如果你不想用 conda用 pip 装torch、opencv-python、timm、einops和imutils也能跑只是建议版本与官方保持一致。第二步准备模型权重把下载好的.pt权重文件放进weights/目录即可。新手建议从dpt_swin2_large_384开始它在精度和速度之间比较平衡如果显卡显存充裕、追求极致质量就选dpt_beit_large_512。README 里的精度表给出了每个模型对应的权重名照着下载不会错。第三步放一张图运行一行命令把任意一张照片放进input/文件夹然后执行python run.py --model_type dpt_swin2_large_384 --input_path input --output_path output模型会自动把输入图缩放适配到编码器要求的分辨率Swin2 系列是 384×384推理完成后output/目录下会出现两个文件一个是彩色映射的.png深度图暖色近、冷色远用的是 Inferno 色板另一个是.pfm原始浮点深度文件供后续程序读取。整个过程不到一分钟你就得到了一张完整的深度图。看真实效果一张图看懂模型差距跑完基础示例后你可能会好奇不同模型之间差别到底有多大项目仓库的figures/目录里正好有两张官方效果图非常直观。第一张是定性对比。同一个小场景v3.1 的 BEiT/Swin2 系列生成的深度图里桌椅轮廓、墙面转折都更清晰锐利而 v2.1 的旧卷积模型明显更糊、边缘有涂抹感第二张则回答了速度和质量如何取舍。图中每个气泡代表一个模型横轴是 RTX 3090 上的推理 FPS纵轴是相对旧版的精度提升幅度气泡大小表示参数量可以看出BEiT-L-512 精度提升最猛约 28%但代价是速度慢、显存占用高而 LeViT-224、Swin2-T-256 这类小模型虽然精度提升有限却能跑出每秒几十帧适合实时场景。选型逻辑一句话显存够就上大模型求质量要实时就选小模型求速度。进阶技巧三个参数让效果更进一步跑通之后试试下面三个参数体验会明显不同1.--height自定义推理分辨率默认推理高度由模型名决定如 512、384、256。对支持多分辨率的模型你可以手动指定更高的高度来获得更精细的输出python run.py --model_type dpt_beit_large_384 --input_path input --output_path output --height 512注意高度会被自动对齐到 32 的倍数这是 transformer 编码器对输入尺寸的硬性要求。一个常见误区是以为调高分辨率一定更好——部分模型只支持训练时的高度传了不支持的值会直接报错即使支持过高的分辨率也可能因为显存不足而失败。2.--optimize半精度加速在 NVIDIA GPU 上开启后模型会转为半精度FP16推理速度明显提升、显存占用下降python run.py --model_type dpt_beit_large_512 --input_path input --output_path output --optimize但要注意官方在run.py源码里明确警告Swin 系列模型对半精度不友好可能产生非有限NaN深度值。所以这个参数只建议给 BEiT、ViT 等非 Swin 模型使用。3.--grayscale换灰度色板默认的 Inferno 彩色映射适合人眼看但它只能存 8 位深度。如果后续要做算法处理、需要 16 位精度加上--grayscale就能输出 16 位灰度 PNG保留更细腻的深度层级。避坑指南三个新手最容易踩的坑坑一CUDA 显存溢出跑dpt_beit_large_512时爆显存是常态。解决办法按顺序试先换成 384 或 256 分辨率的模型再开--optimize半精度最后考虑关掉其他占用显存的程序。如果处理的是超大图可以先把图裁剪成小块再推理。坑二深度图出现条纹或畸变这类问题八成出在缩放策略上。默认情况下支持保持纵横比的模型会等比缩放输入Resize类在midas/transforms.py中keep_aspect_ratio逻辑就在这里但 Swin、LeViT 系列强制方形输入画面比例和你原图差异大时深度图就容易出现透视畸变。要么换用支持等比缩放的 BEiT 模型要么接受方形裁剪别混着用。坑三摄像头模式起不来不加--input_path时run.py会进入实时摄像头模式依赖imutils的 VideoStream笔记本上偶尔会黑屏或打不开。可以先确认摄像头没有被其他软件占用再试试加--side参数让 RGB 和深度图并排显示方便确认画面是否正常python run.py --model_type dpt_swin2_tiny_256 --side下一步从深度图到真实应用到这里你已经完成了了解原理 → 搭环境 → 跑通 → 调参 → 避坑的完整闭环。深度图拿到手后能做什么取决于你的想象力接上 OpenCV 做背景虚化和 3D 视差喂给 ROS 机器人做障碍感知或者参考mobile/目录把模型部署到手机端——仓库里 iOS 和 Android 的完整工程都能直接借鉴。如果你想让深度从相对值变成米制真实距离官方还推荐搭配 ZoeDepth 使用它正是以 MiDaS 输出的相对深度为底座。最后回到开头的故事那位做虚化特效的开发者最终用 MiDaS 生成的深度图替换了手工抠图边缘质量提升显著还顺带做出了滑动查看 3D 照片的卖点功能。单目深度估计的门槛已经被这类开源项目压得很低与其观望不如现在就 clone 下来跑一张你自己的照片试试。如果你喜欢这个项目记得去仓库点个 star也欢迎把跑出来的效果图分享给身边的朋友。参考资料项目内 README 的精度表与模型下载清单、run.py命令行参数说明、midas/blocks.py与midas/transforms.py源码均可作为深入阅读的入口。【免费下载链接】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),仅供参考

相关新闻

零基础免费下载B站CC字幕:用BiliBiliCCSubtitle一条命令导出SRT

零基础免费下载B站CC字幕:用BiliBiliCCSubtitle一条命令导出SRT

零基础免费下载B站CC字幕:用BiliBiliCCSubtitle一条命令导出SRT 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 遇到想留档的B站视频,你却…

2026/10/14 3:03:59 阅读更多 →
批量替换100个元素只需1分钟:Illustrator脚本ReplaceItems.jsx实战指南

批量替换100个元素只需1分钟:Illustrator脚本ReplaceItems.jsx实战指南

批量替换100个元素只需1分钟:Illustrator脚本ReplaceItems.jsx实战指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 先来算一笔时间账。假设你平均每周要处理 3 次&q…

2026/10/2 4:20:29 阅读更多 →
魔兽争霸3在现代电脑上“跑不动“的真相:WarcraftHelper兼容性修复实操指南

魔兽争霸3在现代电脑上“跑不动“的真相:WarcraftHelper兼容性修复实操指南

魔兽争霸3在现代电脑上"跑不动"的真相:WarcraftHelper兼容性修复实操指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 深夜十…

2026/10/2 9:58:23 阅读更多 →

最新新闻

容器内nvidia-smi报Unknown Error的排查与根治

容器内nvidia-smi报Unknown Error的排查与根治

凌晨两点半,工作群里弹出一条消息:某个长期跑的容器,前一秒还好好的,后一秒容器里的nvidia-smi直接报Failed to initialize NVML: Unknown Error。宿主机上执行nvidia-smi一切正常,新建一个临时容器也能正常看到卡&…

2026/10/14 3:03:31 阅读更多 →
年会抽奖九宫格+转盘小程序:动画与随机逻辑避坑指南

年会抽奖九宫格+转盘小程序:动画与随机逻辑避坑指南

简介:一份面向企业年会场景的抽奖小程序资源,包含九宫格抽取幸运者和转盘抽奖两个页面,无需数据库,所有数据以静态方式配置,可直接用于年会“抽人发红包”环节。规则设计完整:先用九宫格抽出一名免红包幸运…

2026/10/14 3:03:31 阅读更多 →
DeepEMD:用可微分推土机距离破解小样本图像分类难题

DeepEMD:用可微分推土机距离破解小样本图像分类难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:03:31 阅读更多 →
FFT傅立叶变换股价周期分析:从频谱原理到量化回测实战

FFT傅立叶变换股价周期分析:从频谱原理到量化回测实战

先说一句大家可能不太爱听的话:把傅立叶变换用在股价预测上,市场上九成的人都觉得这是“花架子”,但真正用好了的人,都把它当成一种周期量化的辅助工具,而不是一台印钞机。我自己在量化分析这条路上摸索了几年&#xf…

2026/10/14 3:03:31 阅读更多 →
CLRC663 Pin-to-Pin替代实战:硬件迁移与固件适配全解析

CLRC663 Pin-to-Pin替代实战:硬件迁移与固件适配全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:03:31 阅读更多 →
Apache Mesos 0.18.0 发布:隔离策略重构为 Containerizer / Isolator API 的技术解读

Apache Mesos 0.18.0 发布:隔离策略重构为 Containerizer / Isolator API 的技术解读

云原生 【免费下载链接】mesos Apache Mesos 项目地址: https://gitcode.com/gh_mirrors/mesos2/mesos 点击查看 免费下载 Apache Mesos 0.18.0 是一次以架构演进为核心的里程碑版本:它将此前"单一隔离策略"的实现重构为 Containerizer API&a…

2026/10/14 3:02:31 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →