3步用上self-supervised-depth-completion预训练模型:KITTI深度补全推理与评估完整教程
2026/8/23 12:44:41 网站建设 项目流程

3步用上self-supervised-depth-completion预训练模型:KITTI深度补全推理与评估完整教程

【免费下载链接】self-supervised-depth-completionICRA 2019 "Self-supervised Sparse-to-Dense: Self-supervised Depth Completion from LiDAR and Monocular Camera"项目地址: https://gitcode.com/gh_mirrors/se/self-supervised-depth-completion

self-supervised-depth-completion是 MIT 团队 ICRA 2019 论文《Self-supervised Sparse-to-Dense》的官方 PyTorch 实现:用LiDAR 稀疏深度 + 单目相机图像输入,通过自监督学习输出整幅密集深度图(深度补全 / Depth Completion),全程仅用 KITTI 数据集训练,无需额外标注。本教程带你3 步完成:环境安装 → 获取预训练模型 → KITTI 验证集一键评估。

📌 核心关键词:深度补全、稀疏转密集(Sparse-to-Dense)、自监督、KITTI、预训练模型、推理与评估

一、项目能做什么?先搞懂它

传统做法里,LiDAR 点云投影到相机平面只有零散几个深度点,而相机拍到的每个像素都"希望"有一个深度值。本项目的工作就是:把稀疏深度"填满"成密集深度,让下游任务(建图、感知、定位)拿到完整深度信息。

项目结构非常清晰,先认识几个核心文件:

文件作用
main.py训练 / 评估统一入口,所有命令都在这里发起
model.py深度补全网络DepthCompletionNet:ResNet 编码器 + 转置卷积解码器(U-Net 风格跳跃连接)
criteria.py三种损失:稀疏深度损失、光度损失(Photometric)、平滑损失
metrics.py评估指标:RMSE、MAE、iRMSE、delta1、Lg10 等
dataloaders/kitti_loader.pyKITTI 数据加载器与相机标定
download/一键下载 KITTI RGB 验证/训练图像的脚本

它最大的亮点是自监督训练:不依赖密集真值标注,用"用预测深度反投影相邻帧 → 光度一致性"作为监督信号,训练命令里加上photo模式即可自动启用(对应main.py中的args.use_pose分支)。

二、第1步:安装依赖与准备 KITTI 数据

1. 克隆代码并安装依赖(要求 Python 3 + PyTorch 1.0 及以上,官方在 Ubuntu 16.04 上验证过):

git clone https://link.gitcode.com/i/09de3ab0f6e9c0a738688935354111f0 cd self-supervised-depth-completion pip install numpy matplotlib Pillow pip install torch torchvision pip install opencv-contrib-python==3.4.2.16

2. 下载 KITTI Depth 数据集:先到 KITTI 官网 Depth Completion 评测页注册并下载原始数据(train / val 原始包 + 标注),然后运行仓库自带的脚本提取对应的 RGB 图像:

./download/rgb_train_downloader.sh ./download/rgb_val_downloader.sh

3. 摆好目录结构。项目默认数据目录为../data(即与代码平级),整理后应如下:

data/ ├── data_depth_annotated # 密集真值深度(train/val) ├── data_depth_velodyne # LiDAR 稀疏深度(train/val) ├── depth_selection/ │ └── val_selection_cropped # 官方验证子集(--val select 使用) └── data_rgb # 由上面脚本生成的 RGB 图像

⚠️ 注意:评估用--val select(默认)时,只读depth_selection/val_selection_cropped这个官方裁剪验证集,数据量小、速度快,最适合跑通流程

三、第2步:获取官方预训练模型

项目作者提供了两套训练好的预训练模型,直接下载即可,无需自己训练(下载地址见README.mdTrained Models一节):

  • supervised:用半密集 LiDAR 真值监督训练,精度通常更高;
  • self-supervised:光度损失 + 稀疏深度损失 + 平滑损失,完全不依赖密集真值。

下载后把.pth.tar权重文件放到任意固定路径备用,例如:

~/models/self_supervised_model_best.pth.tar

💡 小建议:新手先拿self-supervised版本体验全流程,之后可对比 supervised 版本观察指标差异,直观感受两种训练范式的区别。

四、第3步:一行命令完成推理与评估

main.py--evaluate分支会自动加载 checkpoint、恢复训练时的超参数,然后在验证集上逐帧前向推理并统计全部指标:

# 在官方裁剪验证集上评估(默认,速度快,推荐) python main.py --evaluate ~/models/self_supervised_model_best.pth.tar --val select # 在完整验证集上评估(约 44 帧,耗时更长) python main.py --evaluate ~/models/self_supervised_model_best.pth.tar --val full

运行结束后,终端会打印一段汇总(由helper.pyconditional_summarize生成):

Summary of val round RMSE=xxxx.xxxx MAE=xxx.xxx Photo=xx.xx iRMSE=xx.xxx iMAE=xx.xxx silog=xx.xx Delta1=x.xxx REL=x.xxx Lg10=x.xxx

同时会在../results/下自动生成输出目录(含代码备份code_backup/、指标 CSV),其中:

  • val.csv:逐 epoch 的指标记录,方便后续画曲线对比;
  • comparison_eval.png:由vis_utils.py生成的并排对比图(RGB + 稀疏输入 + 预测深度 + 真值),一眼看出补全效果;
  • best.txt:当前最优指标快照。

📊 如何读懂指标(定义见metrics.py):

  • RMSE / MAE(毫米):数值越小越好,是深度补全排行榜的核心指标;
  • delta1:预测与真值比值小于 1.25 的像素占比,越接近 1 越好;
  • iRMSE / iMAE:基于倒数深度(接近视差空间),对近处更敏感;
  • Lg10 / silog:尺度敏感的对数类误差。

五、进阶:自己训练或断点续训

想复现论文或微调模型,main.py -h可查看完整参数列表,最常用的几条:

# 用 KITTI 半密集真值训练,rgbd 双模态输入,batch size 1 python main.py --train-mode dense -b 1 --input rgbd # 论文核心:纯自监督训练(无密集真值) python main.py --train-mode sparse+photo # 从已有 checkpoint 断点续训 python main.py --resume ~/results/.../checkpoint-10.pth.tar

几个高频参数说明:

参数说明
--input输入模态:d(仅稀疏深度)/rgb/rgbd/g/gd
--layers编码器层数,18 / 34 / 50 / 101 / 152,默认 34
--pretrained是否加载 ImageNet 预训练权重
--train-modedense/sparse/photo/sparse+photo/dense+photo
--cpu无 GPU 时强制 CPU 运行(会慢很多)

训练每轮自动保存checkpoint-N.pth.tar,最优模型会额外复制为model_best.pth.tar(见helper.pysave_checkpoint),后续评估就指向model_best.pth.tar

六、常见问题速查(FAQ)

Q1:评估时报 "No model found at '...'"?checkpoint 路径写错,或传的是文件夹。--evaluate后面必须跟具体的.pth.tar文件路径。

Q2:评估时报找不到数据?确认data/目录与代码目录平级(默认--data-folder ../data,不在同级需显式指定),且val_selection_cropped已放入depth_selection/

Q3:评估时也想保存每帧预测深度图?评估分支本身以指标统计为主;如需可视化对比图,comparison_eval.png会自动生成在输出目录中,无需额外配置。

Q4:为什么我的 RMSE 和论文/官网对不上?优先检查三点:① 用的是--val select而非full(两者数值本就不同);② 权重文件与--input模态是否匹配(rgbd 训练的权重要配rgbd输入,checkpoint 会自带训练参数,通常会自动对齐);③ CUDA/cuDNN 版本差异带来的微小浮动属正常现象。

总结

只需3 步——装依赖与数据、下预训练权重、跑--evaluate命令——你就能在自己的机器上得到 KITTI 深度补全的完整推理与评估结果:指标 CSV、对比图、最优模型快照一应俱全。之后无论是复现自监督训练(--train-mode sparse+photo)还是换输入模态做消融实验,都只需在 main.py 基础上改一行命令。建议动手时打开metrics.py对照着看,几分钟就能吃透每个误差指标的物理含义。

【免费下载链接】self-supervised-depth-completionICRA 2019 "Self-supervised Sparse-to-Dense: Self-supervised Depth Completion from LiDAR and Monocular Camera"项目地址: https://gitcode.com/gh_mirrors/se/self-supervised-depth-completion

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询