拓冰建站拓冰建站
首页 / 资讯中心 / 正文

ManyDepth推理实战:用预训练权重在任意图片上预测深度图的完整教程

ManyDepth推理实战用预训练权重在任意图片上预测深度图的完整教程【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepthManyDepth 是 CVPR 2021 发表的自监督深度估计框架核心能力是从短视频序列中预测高精度的单目深度图。它最大的优势在于训练完全不需要深度标注数据仅凭普通视频就能学会看出场景远近推理时只需一次前向传播却能取得超越单帧方法的效果。本文是一篇面向新手的 ManyDepth 推理实战教程我会带你从零开始用官方预训练权重在任意图片上完成深度图预测全程无需编写任何代码照着命令执行即可。什么是 ManyDepth为短序列而生的自监督深度估计模型ManyDepth 的论文名为The Temporal Opportunist: Self-Supervised Multi-Frame Monocular Depth由 Niantic 团队发表于 CVPR 2021。传统的单目深度估计方法大多只看单张图片而 ManyDepth 的思路与众不同在推理时额外引入相邻帧通过构建代价体积Cost Volume融合多帧信息从而得到更稳定、更精细的深度预测结果。代价体积在传统多视角深度估计中很常见但很难直接套用到自监督训练里。ManyDepth 通过三项关键贡献解决了这个问题自适应代价体积应对未知场景尺度让多帧信息稳定可用运动物体处理修复动态目标带来的匹配错误静态相机与序列首帧增强解决训练数据中的静止场景问题。最终ManyDepth 在 KITTI 和 CityScapes 两个主流数据集上都刷新了自监督单目深度估计的 SOTA 成绩。深度图预测凭什么更准先看 ManyDepth 的三大核心优势很多新手会问市面上单目深度估计模型不少为什么要选 ManyDepth这里总结三个最直观的理由自监督训练零标注成本训练数据就是普通行车记录仪/车载视频不需要昂贵的激光雷达深度真值推理高效测试时仅一次前向传播无需像部分方法那样做测试时优化速度更快短序列加成有相邻帧时精度更高没有时也能退化为纯单帧模式灵活适配各种场景。上图直观对比了 ManyDepth 与单帧方法 Monodepth2 的预测结果在道路纹理、车辆轮廓等细节区域ManyDepth 的深度图边界更清晰误差图中红色高误差区域明显更少。推理环境准备3 步搭建 ManyDepth 运行环境在开始深度图预测之前先把运行环境准备好。推荐使用 conda 一键创建官方环境文件 environment.yml其中已锁定 torch 1.7.1、opencv、numpy 等全部依赖版本。第一步克隆项目仓库git clone https://gitcode.com/gh_mirrors/ma/manydepth.git cd manydepth第二步创建并激活 conda 环境conda env create -f environment.yml conda activate manydepth第三步确认 GPU 可用可选但推荐python -c import torch; print(torch.cuda.is_available())如果输出True说明 CUDA 环境正常。即使没有 GPU 也不用担心ManyDepth 的推理脚本会自动回退到 CPU 模式只是速度会慢一些。下载官方预训练权重KITTI 与 CityScapes 模型任你选官方在 README.md 的 Pretrained weights 小节提供了三组预训练权重覆盖两个数据集、两种分辨率模型输入分辨率适用场景KITTI MR640x192默认推荐精度与速度均衡KITTI HR1024x320高分辨率场景细节更丰富CityScapes512x192城市街道语义场景下载并解压后模型文件夹内应包含 4 个权重文件encoder.pth、depth.pth、pose_encoder.pth、pose.pth。推理脚本正是通过 test_simple.py 逐个加载这些权重来构建完整网络的如果缺少任一文件都会报错。准备测试图片与相机内参两帧图片 归一化内参矩阵ManyDepth 的多帧推理需要两份输入目标帧target image想要预测深度图的当前帧源帧source image视频序列中位于目标帧之前的相邻帧。项目已在 assets/ 目录下内置了一组从行车记录仪视频中截取的示例图片可以直接用来验证流程。此外还需要提供相机的内参矩阵格式为 JSON 文件中的 3x3 矩阵。注意官方要求的是归一化坐标的内参示例文件见 assets/test_sequence_intrinsics.json其中第 1、2 行的前两个数值分别表示归一化的焦距 fx、fy第 3 列是主点坐标。如果你使用自己的图片需要先估计或换算成这种归一化格式。运行深度预测命令一行命令完成推理万事俱备现在执行核心推理命令。假设预训练权重解压到了models/KITTI_MR目录python -m manydepth.test_simple \ --target_image_path assets/test_sequence_target.jpg \ --source_image_path assets/test_sequence_source.jpg \ --intrinsics_json_path assets/test_sequence_intrinsics.json \ --model_path models/KITTI_MR各参数含义如下--target_image_path目标帧图片路径必填--source_image_path源帧图片路径必填--intrinsics_json_path归一化内参 JSON 文件路径必填--model_path预训练权重文件夹路径必填--mode推理模式multi默认多帧或mono纯单帧。命令执行完成后终端会打印- Done!深度图预测结果就保存在目标图片同目录下。看懂输出结果深度彩图、代价体积图与 npy 数据推理会生成三类结果文件*_disp_multi.jpeg深度图预测的可视化彩图magma 配色暖色近、冷色远*_costvol_min_multi.jpeg代价体积 argmin 的可视化可理解为最匹配深度层的索引图*_disp_multi.npy原始深度/视差数据方便后续在代码中二次处理。上图是官方给出的目标帧深度预测结果参考图可以看到车辆、行人、道路边缘的远近关系都被清晰地区分开来。如果你想量化评估模型精度可以查看 results_table.png 中的 KITTI 评测表ManyDepth 在各项指标上全面领先此前的自监督方法。进阶玩法在任意图片上批量预测深度图官方示例只是热身把上面的流程推广到自己的数据非常简单只需三步替换图片把--target_image_path和--source_image_path指向你自己的视频相邻帧更新内参将你自己的相机内参换算为归一化坐标写入 JSON 文件可参考 test_sequence_intrinsics.json 的格式切换模式如果只有单张图片、没有相邻帧把参数改成--mode monoManyDepth 就会退化为单帧深度估计模式照样能出结果。如果你想深入了解网络内部结构关键实现都集中在 networks/resnet_encoder.py含代价体积构建的match_features与ResnetEncoderMatching、networks/depth_decoder.py深度解码器以及 networks/pose_decoder.py位姿解码器中位姿矩阵转换则在 layers.py 的transformation_from_parameters函数里完成。常见问题排查推理失败怎么办Q1报错找不到encoder.pth说明--model_path指向的目录不对请确认权重文件确实解压在该目录下。Q2内参矩阵格式总写错牢记两点必须是 3x3 的 JSON 数组、必须是归一化坐标。直接复制官方示例 JSON 修改数值是最稳妥的做法。Q3显存不足怎么办换用输入分辨率更小的 KITTI MR640x192模型或者降低图片输入尺寸纯 CPU 推理时也建议用 MR 模型。Q4--mode mono和--mode multi结果一样吗不一样。multi模式会利用源帧构建代价体积精度通常更高mono模式忽略源帧适合无相邻帧的场景两者对应论文中的不同实验设置。小结至此你已经完整走通了 ManyDepth 的推理全流程搭建环境 → 下载预训练权重 → 准备图片与内参 → 一行命令预测 → 解读深度图结果。整个过程无需编写任何代码非常适合作为自监督深度估计的入门实践。下一步你可以尝试用自己的行车记录仪视频截帧测试感受多帧输入带来的精度提升或者进一步阅读论文与源码探索代价体积背后的实现细节。【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门