复现CVPR 2021论文结果:ManyDepth在KITTI上的完整评估教程
【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepth
想要亲手复现 CVPR 2021 顶会论文中的深度估计结果?ManyDepth 是一款基于自监督学习的多帧单目深度估计模型,只需单目视频即可训练,无需任何深度或位姿标注,就能在 KITTI 数据集上达到当时最优的水平。本教程将带你从零开始,完成环境搭建、权重下载、数据准备到最终评估的全流程,一步步在本地跑出论文中的完整评估结果,轻松掌握 ManyDepth 深度估计评估的正确打开方式。
ManyDepth 是什么?为什么值得复现评估?
ManyDepth 是 Niantic 团队发表于 CVPR 2021 的工作,核心思想是"自适应地利用测试时的短序列信息"。与只能处理单帧的传统单目深度估计方法不同,ManyDepth 在推理时只要有多帧短序列,就能构建代价体积(Cost Volume)提升预测精度:
- ✅完全自监督:仅用单目视频训练,不需要深度和位姿真值
- ✅单帧可用、多帧更准:单帧也能出深度,短序列效果更佳
- ✅推理高效:测试时只需一次前向传播,无需测试时优化
- ✅当时 SOTA:在 KITTI 与 Cityscapes 上刷新了自监督单目深度估计纪录
下面这张对比图直观展示了 ManyDepth 相比单帧方法 Monodepth2 的优势,红色误差区域明显更少:
评估前必读:项目结构与核心模块
在开始复现之前,先快速熟悉一下项目结构,评估相关代码都在manydepth/目录下:
- evaluate_depth.py:KITTI / Cityscapes 官方评估入口,计算 abs_rel、rmse、a1 等全部论文指标
- export_gt_depth.py:从 KITTI 原始点云导出评估所需的深度真值
- test_simple.py:单图/双图快速推理演示脚本
- options.py:全部训练与评估参数定义
- kitti_utils.py:KITTI 数据解析与深度图生成工具
第一步:搭建 ManyDepth 评估环境
官方提供了 environment.yml 环境配置,包含 PyTorch 1.7.1、OpenCV 3.4.2 等依赖。建议用 conda 一键创建:
conda env create -f environment.yml conda activate manydepth然后克隆项目代码:
git clone https://gitcode.com/gh_mirrors/ma/manydepth cd manydepth💡 提示:如果 GPU 显存有限,评估时可以在命令行通过
CUDA_VISIBLE_DEVICES=0指定显卡。
第二步:准备 KITTI 数据集
评估使用 Eigen 划分(Eigen Split),需要下载 KITTI 原始数据(Raw Data)。下载完成后按 Monodepth2 的标准目录结构组织数据,最终目录树类似:
KITTI_RAW/ ├── 2011_09_26/ │ ├── 2011_09_26_drive_0002_sync/ │ │ ├── image_02/data/ │ │ └── velodyne_points/data/ │ └── calib_cam_to_cam.txt └── ...导出评估所需的深度真值
ManyDepth 评估依赖预先生成的真值文件gt_depths.npz,使用 export_gt_depth.py 一键导出:
python -m manydepth.export_gt_depth \ --data_path /path/to/KITTI_RAW \ --split eigen运行后会在splits/eigen/目录下生成gt_depths.npz,这就是后续评估的对照真值。
第三步:下载官方预训练权重
复现评估最快的方式是直接使用论文官方权重(也可自行训练,见文末)。官方提供三个预训练模型:
| 模型 | 分辨率 | 适用场景 |
|---|---|---|
| KITTI MR | 640x192 | 标准分辨率评估(推荐) |
| KITTI HR | 1024x320 | 高分辨率评估 |
| CityScapes MR | 512x192 | Cityscapes 数据集评估 |
下载后将压缩包解压到本地目录,记下权重文件夹路径,例如~/models/KITTI_MR/。权重文件夹内应包含encoder.pth、depth.pth、pose_encoder.pth、pose.pth等文件。
第四步:运行官方评估命令
万事俱备,现在运行 evaluate_depth.py 进行完整评估:
CUDA_VISIBLE_DEVICES=0 \ python -m manydepth.evaluate_depth \ --data_path /path/to/KITTI_RAW \ --load_weights_folder ~/models/KITTI_MR \ --eval_mono几个关键参数说明:
--eval_mono:单目评估模式(论文表 1 的主结果)--eval_split eigen:使用 Eigen 划分(默认值)--save_pred_disps:保存预测视差图,便于后续分析--zero_cost_volume:评估"单帧模式"(对应论文消融实验)--eval_teacher:评估用于一致性损失的单目教师网络
评估结束后,终端会输出标准格式的指标表,包含 abs_rel、sq_rel、rmse、rmse_log、a1、a2、a3 七个指标,与论文中的结果表完全对应:
第五步:解读评估指标
评估输出的是深度估计领域的标准指标,理解它们才能确认复现成功:
- abs_rel(平均相对误差):越低越好,衡量预测深度与真值的相对偏差
- rmse(均方根误差):越低越好,对大误差更敏感
- a1/a2/a3(阈值准确率):越高越好,表示预测与真值比值落在 1.25、1.25²、1.25³ 内的像素比例
📌 复现小贴士:论文结果基于中值缩放(median scaling)校正尺度,评估脚本默认开启,无需手动处理。若指标与论文有细微出入,请检查 KITTI 原始数据是否完整、
gt_depths.npz是否由相同划分导出。
附:用 test_simple.py 快速体验多帧推理
如果你想在不完整下载 KITTI 的情况下先跑通流程,可以用项目自带的示例图片体验多帧推理。仓库assets/目录提供了 test_sequence_target.jpg、test_sequence_source.jpg 两张行车记录仪连续帧以及对应的 test_sequence_intrinsics.json 相机内参:
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运行后会在同目录生成带色彩映射的深度图*_disp_multi.jpeg,让你直观看到 ManyDepth 如何利用前一帧信息提升深度预测质量。
延伸:从零训练自己的 ManyDepth 模型
如果不想直接用预训练权重,也可以参考 README 中的训练命令完整复现论文训练流程,入口是 train.py:
CUDA_VISIBLE_DEVICES=0 \ python -m manydepth.train \ --data_path /path/to/KITTI_RAW \ --log_dir /path/to/logs \ --model_name my_manydepth训练完成后,把--load_weights_folder指向训练输出目录,再按第四步执行即可评估自己的模型。至此,你已经完整走通了"数据准备 → 权重获取 → 指标评估 → 结果解读"的全链路,成功复现 CVPR 2021 论文的 KITTI 评估结果!
【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepth
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考