ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PaddleHub MiDaS_Large 单目深度估计实战:安装、API 调用与推理原理解析

2026/9/24 8:36:07 拓冰建站 浏览量
PaddleHub MiDaS_Large 单目深度估计实战:安装、API 调用与推理原理解析 人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载本篇技术指南以 PaddleHub 图像-深度估计模块 MiDaS_Large 为主体讲解如何在 PaddlePaddle 生态下使用 MiDaS_Large 完成单目深度估计Monocular Depth Estimation包括环境安装、hub.Module加载方式、depth_estimationAPI 的完整参数与返回值约定并结合本仓库源码剖析其预处理流水线、Paddle Inference 推理引擎与深度图可视化后处理的全过程。读完本文你将能够直接复现输入一张普通 RGB 图片、输出对应深度图的完整流程并理解每个参数在源码层面的真实作用。一、模型基本信息模型名称MiDaS_Large类别图像 - 深度估计网络-数据集3D Movies, WSVD, ReDWeb, MegaDepth是否支持 Fine-tuning否模型大小399MB最新更新日期2021-02-26数据指标-MiDaS_Large 是一个单目深度估计模型仅通过一张输入图像即可估计其中每个像素对应的场景深度信息无需双目相机、深度传感器等额外设备。它在本仓库中属于推理型InferencePaddleHub 模块——模型以预训练权重 Paddle Inference 格式发布不支持在 PaddleHub 框架内进行 Fine-tuning 微调这一点与 BERT/ERNIE 等支持微调的 NLP 模块有本质区别使用时请按开箱即用的预测模型来定位它。从源码注释transforms.py 与 utils.py 首行可以看到本模块的预处理与深度图写入工具参考自 Intel ISL 开源的 MiDaS 项目属于该经典方法的 Paddle 化移植实现。仓库中还提供了同系列的轻量版本 MiDaS_Small结构与用法完全一致可在精度与速度之间按需选择。二、环境依赖与安装1. 环境依赖使用 MiDaS_Large 需要满足以下最低版本要求paddlepaddle 2.0.0paddlehub 2.0.0PaddleHub 的安装方式可参考 PaddleHub 安装文档由于模型通过 Paddle Inference 预测器执行请确保本机已正确安装对应版本的 PaddlePaddleCPU 版或 GPU 版均可GPU 版需额外配置 CUDA 环境。2. 安装模块在满足上述依赖后通过 PaddleHub 命令行安装模块$ hub install MiDaS_Large如需安装指定版本当前仓库内版本为 1.0.0$ hub install MiDaS_Large1.0.0hub install命令在 paddlehub/commands/install.py 中实现当传入的不是本地目录也不是归档包时命令会将参数按拆分为模块名与版本号交由LocalModuleManager.install从服务器下载并安装同时支持--ignore_env_mismatch参数以忽略环境不匹配的检查。安装过程中如遇到问题可参考各平台的零基础快速上手文档Windows 安装 | Linux 安装 | macOS 安装。三、模型 API 预测1. 预测代码示例安装完成后即可在 Python 中加载模块并执行深度估计import paddlehub as hub import cv2 model hub.Module(nameMiDaS_Large) result model.depth_estimation(images[cv2.imread(/PATH/TO/IMAGE)]) # or # result model.depth_estimation(paths[/PATH/TO/IMAGE])其中hub.Module(nameMiDaS_Large)会通过模块管理器查找本地已安装模块若本地不存在则会自动从服务器下载参见 paddlehub/module/module.py 中init_with_name的逻辑。result为包含深度数据的列表列表中每个元素的形状为[H, W]与输入图片的空间尺寸一致。2. depth_estimation API 详解depth_estimation的完整签名如下def depth_estimation(imagesNone, pathsNone, batch_size1, output_diroutput, visualizationFalse):参数说明参数类型说明imageslist[numpy.ndarray]图片数据列表每个 ndarray 的 shape 为[H, W, C]BGR 通道顺序pathslist[str]图片文件路径列表batch_sizeint推理时的 batch 大小默认 1output_dirstr可视化结果的保存目录默认outputvisualizationbool是否将深度结果保存为图片文件默认False。NOTE:paths与images两个参数选择其一提供数据即可images的优先级更高当images非空时直接使用之见 module.py 中load_datas的实现。返回值res(list[numpy.ndarray])图像深度数据列表每个 ndarray 的 shape 为[H, W]即逐像素的深度值。四、源码级原理剖析理解了 API 之后结合仓库源码可以更深入地把握一次depth_estimation调用的完整链路。整个流程由 module.py 组织为加载数据 → 预处理 → 模型推理 → 后处理四个阶段。1. 模块定义与模型加载MiDaS_Large 是一个标准的 PaddleHub V2 模块通过moduleinfo装饰器声明名称、作者、版本等元信息module.pymoduleinfo( nameMiDaS_Large, # 模型名称 typeCV/style_transfer, # 模型类型 authorjm12138, version1.0.0 # 版本号 ) class MiDaS_Large(Module):在__init__中模块加载了位于model-f6b98070目录下的 Paddle Inference 格式模型并构造了固定输入尺寸为384 × 384的预处理流水线self.net_h, self.net_w 384, 384 self.transform Compose([ Resize(self.net_w, self.net_h, resize_targetNone, keep_aspect_ratioFalse, ensure_multiple_of32, resize_methodupper_bound, image_interpolation_methodcv2.INTER_CUBIC), NormalizeImage(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), PrepareForNet() ])其中的归一化均值与标准差[0.485, 0.456, 0.406]/[0.229, 0.224, 0.225]是 ImageNet 预训练的标准统计量说明该深度估计骨干网络沿用了 ImageNet 预训练特征提取器的输入约定。2. 预处理流水线预处理逻辑集中在 transforms.py 的三个类中Resize默认keep_aspect_ratioFalse将图像直接缩放至 384×384ensure_multiple_of32保证输出尺寸是 32 的整数倍resize_methodupper_bound表示输出尺寸不超过给定尺寸并结合constrain_to_multiple_of做对齐。get_size中还实现了lower_bound、upper_bound、minimal三种缩放策略供不同场景复用。NormalizeImage按(image - mean) / std逐通道归一化。PrepareForNet将图像从[H, W, C]转置为[C, H, W]的 NCHW 布局并转为连续内存的float32数组以满足网络输入要求。此外在 module.py 的preprocess中图像首先通过cv2.cvtColor(img, cv2.COLOR_BGR2RGB) / 255.0完成 BGR→RGB 转换并缩放到[0, 1]区间——这解释了 API 中images参数为何要求 BGR 顺序的 ndarray与cv2.imread的输出保持一致。3. Paddle Inference 推理引擎模型执行部分由 inference.py 中的InferenceModel承担它基于paddle.inference的Config/create_predictor构建预测器模型文件以combinedTrue方式加载即读取__model__网络结构与__params__参数两个合并文件。运行设备use_gpuTrue时通过config.enable_use_gpu(100, 0)启用 GPU并会检查CUDA_VISIBLE_DEVICES环境变量否则config.disable_gpu()且可叠加use_mkldnnTrue开启 CPU 上的 MKL-DNN 加速。MiDaS_Large 模块初始化时以use_gpu参数透传、use_mkldnnFalse创建实例。batch 处理forward中按batch_size将输入数据切分np.array_split逐块copy_from_cpu→predictor.run()→copy_to_cpu最后将各分块结果np.concatenate合并返回。这意味着即便传入超过batch_size的图片列表也会被自动分批推理。4. 后处理与深度图可视化推理输出的是 384×384 的低分辨率深度图module.py 的postprocess会通过cv2.resize(..., interpolationcv2.INTER_CUBIC)将其双三次插值回输入图像的原始尺寸保证返回的[H, W]深度图与输入逐像素对齐。当visualizationTrue时模块调用 utils.py 中的write_depth输出两类文件保存到output_dir下.pfm文件通过write_pfm写入保留原始浮点精度float32的深度数据供专业工具或后续计算使用.png文件将深度值按max_val * (depth - depth_min) / (depth_max - depth_min)线性拉伸到[0, 255]bits2时为 uint16 的[0, 65535]范围见write_depth的bits2参数后保存为 16 位灰度图便于直接查看深度明暗分布。五、使用建议与注意事项输入约定通过images传入时务必使用 BGR 顺序的[H, W, C]ndarray推荐直接使用cv2.imread读取paths模式下模块内部同样使用cv2.imread读取两个参数二选一。输出语义返回的深度值为模型估计的相对深度数值越大代表距离越近或越远的语义取决于模型的尺度约定并非物理世界的绝对距离如需绝对尺度需结合相机参数做额外标定。不支持微调MiDaS_Large 为推理型模块不能通过 PaddleHub 的 fine-tune 流程进行训练若需要训练深度估计模型请结合 PaddleHub Fine-tune 文档 中的思路自建数据集与模型。硬件加速默认在 CPU 上运行若显存充足可在实例化时利用 Paddle Inference 的 GPU 支持获得更快的推理速度当前模块封装未直接暴露use_gpu开关其默认配置为use_gpuFalse, use_mkldnnFalse可通过修改模块初始化参数或环境配置调整。六、更新历史1.0.02021-02-26 发布初始版本$ hub install MiDaS_Large1.0.0以上即 MiDaS_Large 单目深度估计模块的完整使用指南从环境安装、API 调用到预处理/推理/后处理的源码级原理读者可以基于本仓库路径直接复现单图输入 → 深度图输出的完整流程并将其接入自己的图像处理、三维重建或自动驾驶等下游任务中。赞分享人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐PaddleFormers 单目深度估计实战MiDaS_Large 模块的安装、预测 API 与源码级原理解析PaddleFormers 单目深度估计实战MiDaS_Large 模块的安装、预测 API 与源码级原理解析 导读 本文以 PaddleFormers 仓库人工智能大模型微调模型推理服务单目深度估计技术深度解析从原理到Monodepth2实战应用单目深度估计技术深度解析从原理到Monodepth2实战应用 单目深度估计技术作为计算机视觉领域的重要分支通过单张二维图像实现对三维场景的深度感知。Mono计算机视觉深度学习Transformers 单目深度估计实战指南Pipeline 推理与手动推理全解析Transformers 单目深度估计实战指南Pipeline 推理与手动推理全解析 导读 单目深度估计Monocular Depth Estimation人工智能深度学习机器学习预训练微调NLP计算机视觉语音多模态创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考