news 2026/8/18 15:31:59

ManyDepth数据准备全指南:KITTI数据集下载、目录组织与splits划分详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ManyDepth数据准备全指南:KITTI数据集下载、目录组织与splits划分详解

ManyDepth数据准备全指南:KITTI数据集下载、目录组织与splits划分详解

【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepth

ManyDepth 是 CVPR 2021 提出的自监督多帧单目深度估计模型,仅需单目视频即可训练,无需任何真值深度或位姿标注。想顺利复现论文效果或自己训练模型,KITTI 数据集的下载与目录组织是第一道关卡。本文面向新手,用最直观的方式讲清 KITTI 原始数据怎么下、目录怎么摆、splits划分文件怎么读,帮你一次跑通 ManyDepth 的训练与评估流程。

一、为什么 ManyDepth 需要 KITTI 原始数据?

ManyDepth 的核心思路是:训练时只使用连续视频帧,通过成本体积(cost volume)聚合多帧信息来估计深度。因此它需要的不是 KITTI 目标检测数据集,而是KITTI 原始数据(Raw Data),其中包含:

  • 彩色图像序列image_02左目、image_03右目)
  • 相机标定文件calib_cam_to_cam.txtcalib_velo_to_cam.txt等)
  • 激光雷达点云velodyne_points/data/*.bin),用于生成评估时的真值深度

KITTI 原始数据本身不含现成的深度真值,ManyDepth 会在评估前用 kitti_utils.py 中的generate_depth_map把 Velodyne 点云投影到图像平面,得到稀疏深度图。理解这一点,你就明白为什么下载时不能漏掉标定文件和点云文件。

二、KITTI 数据集下载:需要下载哪些文件?

官方建议从 splits/kitti_archives_to_download.txt 中读取所有下载链接,这个文件已经替你列好了训练所需的全部压缩包,包括:

  • 每个日期的标定文件,例如2011_09_26_calib.zip
  • 每个drive 的同步数据,例如2011_09_26_drive_0022_sync.zip(含图像、点云、位姿)

最快下载方法

打开终端,进入你要存放数据的目录,依次执行:

# 1. 下载所有压缩包(注意引号内的路径替换为你的 splits 目录) wget -i splits/kitti_archives_to_download.txt # 2. 逐个解压 for f in *.zip; do unzip "$f"; done

提示:全部文件约 175GB,建议预留充足磁盘空间;也可以只下载eigen_zhou训练划分用到的 drive,进一步节省空间。若你的 KITTI 数据是 PNG 格式,训练时加上--png参数即可(默认按 jpg 读取)。

三、KITTI 数据集目录组织:标准结构详解

解压完成后,目录应按如下结构组织(这正是 ManyDepth 的 kitti_dataset.py 期望的路径):

kitti_data/ # 即 --data_path 指向的根目录 ├── 2011_09_26/ │ ├── calib_cam_to_cam.txt # 相机间标定 │ ├── calib_velo_to_cam.txt # 雷达到相机标定 │ └── 2011_09_26_drive_0022_sync/ │ ├── image_02/data/0000000000.jpg # 左目彩色图 │ ├── image_03/data/0000000000.jpg # 右目彩色图 │ └── velodyne_points/data/0000000000.bin # 激光雷达点云 ├── 2011_09_28/ └── ...

关键细节值得注意:

  • 日期文件夹存放该日期所有序列共用的标定文件,点云投影真值时按日期读取(见 export_gt_depth.py 中的calib_dir逻辑)。
  • 图像帧号固定为 10 位补零,如0000000000.jpg;点云文件同样按 10 位帧号命名。
  • 左右目映射:代码中side_map = {"2": 2, "3": 3, "l": 2, "r": 3},即l对应image_02r对应image_03,训练文件里的l/r标记就是这样映射到文件夹的。
  • 内参归一化:模型使用的内参矩阵是归一化坐标(见 kitti_dataset.py 中的self.K),并非原始像素内参,直接照搬即可。

四、splits 划分文件详解:训练集与测试集

splits/目录是 ManyDepth 的数据划分核心,每种划分对应一个子文件夹,每个文件每行记录一条样本,常见格式为:

序列文件夹 帧号 左右目

例如 splits/eigen_zhou/train_files.txt 中的一行:

2011_09_26/2011_09_26_drive_0022_sync 473 r

表示读取该序列第 473 帧的右目图像。解析逻辑位于 mono_dataset.py 的index_to_folder_and_frame_idx:一行为三段时,分别解析为文件夹、帧号、左右目。

各划分的用途一览

划分目录文件用途
eigen_zhou/train_files.txt、val_files.txt论文主实验的训练/验证划分,约 39810 条训练样本
eigen_full/train_files.txt、val_files.txt、all_files.txt使用全部 Eigen 数据的训练划分
eigen/test_files.txt经典 Eigen 测试集,共 697 条,用于深度评估
eigen_benchmark/test_files.txtEigen 的 benchmark 版本测试集(含真值深度图)
benchmark/train_files.txt、test_files.txt、val_files.txt、eigen_to_benchmark_ids.npyKITTI 官方深度基准格式(行内容为image 0样式)
odom/train_files.txt、test_files_09.txt、test_files_10.txt里程计数据集划分,格式为序列号 帧号 左右目
cityscapes/cityscapes_preprocessed/对应训练/测试文件CityScapes 数据集划分

其中odom划分格式特殊(如8 4056 r),其图像路径由 kitti_dataset.py 中的KITTIOdomDataset解析为sequences/08/image_02/004056.jpg,帧号为 6 位补零,与原始 KITTI 的 10 位格式不同,初学时注意区分。

五、训练与评估如何选择正确的划分

ManyDepth 通过两个参数控制划分选择,定义在 options.py:

  • 训练--split可选eigen_zhoueigen_fullodombenchmarkcityscapes_preprocessed,默认eigen_zhou
  • 评估--eval_split可选eigeneigen_benchmarkbenchmarkodom_9odom_10cityscapes,默认eigen

一条典型训练命令:

python -m manydepth.train \ --data_path /path/to/kitti_data \ --log_dir /path/to/logs \ --model_name my_manydepth

六、评估前必做:导出真值深度

评估 KITTI 模型前,必须先用 export_gt_depth.py 从点云生成真值深度文件,否则评估脚本会因缺少gt_depths.npz而报错:

python -m manydepth.export_gt_depth \ --data_path /path/to/kitti_data \ --split eigen

脚本会读取splits/eigen/test_files.txt,逐条把 Velodyne 点云投影为深度图,压缩保存为splits/eigen/gt_depths.npz。若选eigen_benchmark划分,则直接读取 KITTI 提供的proj_depth/groundtruth真值 PNG(深度值除以 256 得到米制深度)。

七、新手避坑指南

  1. 别下错数据集:目标是 Raw Data 而非 Object Detection 数据集,路径里带drive_xxxx_sync就对了。
  2. 标定文件不能缺:点云生成真值深度依赖calib_cam_to_cam.txtcalib_velo_to_cam.txt,漏掉会在评估时报错。
  3. 帧号位数别搞混:raw 数据用 10 位帧号,odom 数据用 6 位帧号。
  4. jpg 与 png 要一致:默认读.jpg,如果你的数据是 png 或遇到"找不到帧"报错,记得加--png
  5. 磁盘空间预留:完整下载约 175GB,建议先用eigen_zhou涉及的最小 drive 集合试跑通流程,再全量下载。

八、总结

KITTI 数据准备看似繁琐,其实只需三步:下载原始数据 → 按日期/序列标准目录组织 → 选对 splits 划分。ManyDepth 的数据加载逻辑高度集中,只要目录结构与 kitti_dataset.py、mono_dataset.py 中的路径规则一致,训练和评估就能顺畅跑通。希望这份 ManyDepth 数据准备指南能帮你少走弯路,早日跑出自己的深度估计模型!

【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepth

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 15:27:45

RayIoU深度解读:OccNet为何用射线评估3D占用?技术报告精读

RayIoU深度解读:OccNet为何用射线评估3D占用?技术报告精读 【免费下载链接】OccNet [ICCV 2023] OccNet: Scene as Occupancy 项目地址: https://gitcode.com/gh_mirrors/oc/OccNet 在3D占用预测(3D Occupancy Prediction)…

作者头像 李华