如何用 Lite-Mono 处理自定义数据集?数据准备与模型微调全流程
【免费下载链接】Lite-Mono[CVPR2023] Lite-Mono: A Lightweight CNN and Transformer Architecture for Self-Supervised Monocular Depth Estimation项目地址: https://gitcode.com/gh_mirrors/li/Lite-Mono
Lite-Mono 是一个轻量级 CNN 与 Transformer 架构的自监督单目深度估计算法,基于 CVPR2023 研究成果开发。本文将详细介绍如何使用 Lite-Mono 处理自定义数据集,包括数据准备、格式转换和模型微调的完整步骤,帮助新手快速上手深度估计任务。
为什么选择 Lite-Mono 处理自定义数据?
Lite-Mono 作为轻量级深度估计算法,在保持高精度的同时具备出色的速度和鲁棒性。从模型架构图可以看到,它通过多阶段特征提取和跨阶段连接实现高效的深度估计:
Lite-Mono 架构图:展示了 DepthNet 和 PoseNet 的协同工作流程,通过多尺度特征融合实现精确深度估计
在不同硬件环境下,Lite-Mono 都能保持优异的推理速度,这使得它特别适合在资源有限的设备上处理自定义数据集:
Lite-Mono 在 Titan XP 和 Jetson Xavier 上的推理速度对比,展示了其在不同硬件环境下的高效性能
自定义数据集准备指南
数据采集要求
要训练出准确的深度估计模型,自定义数据集应满足以下条件:
- 图像格式:推荐使用 JPG 或 PNG 格式,分辨率不低于 640×192
- 序列要求:至少包含连续的两帧图像(用于自监督训练)
- 相机参数:如果有内参(焦距、主点)信息,可显著提升精度
- 数据多样性:尽量包含不同光照、天气和场景条件的样本
数据组织结构
参照 KITTI 数据集格式,建议将自定义数据组织为以下结构:
custom_data/ ├── sequences/ │ ├── 00/ │ │ ├── image_0/ # 左目图像序列 │ │ │ ├── 000000.jpg │ │ │ ├── 000001.jpg │ │ │ └── ... │ │ └── image_1/ # 右目图像序列(可选,用于立体训练) │ ├── 01/ │ └── ... └── filenames.txt # 训练文件列表文件列表格式
创建filenames.txt文件,每行包含一个训练样本的信息,格式如下:
00 000000 l 00 000001 l 01 000000 l- 第一个数字:序列文件夹名称
- 第二个数字:图像索引
- 第三个字符:相机视角('l' 表示左目,'r' 表示右目)
自定义数据集加载实现
创建数据集类
在datasets/目录下创建自定义数据集类,继承自基础的MonoDataset类:
from .mono_dataset import MonoDataset class CustomDataset(MonoDataset): def __init__(self, *args, **kwargs): super(CustomDataset, self).__init__(*args, **kwargs) # 设置相机内参(根据实际相机参数调整) self.K = np.array([[0.58, 0, 0.5, 0], [0, 1.92, 0.5, 0], [0, 0, 1, 0], [0, 0, 0, 1]], dtype=np.float32) self.full_res_shape = (1242, 375) # 原始图像分辨率 self.side_map = {"l": 0, "r": 1} # 相机视角映射 def get_image_path(self, folder, frame_index, side): # 实现图像路径获取逻辑 f_str = "{:06d}.jpg".format(frame_index) image_path = os.path.join( self.data_path, "sequences/{:02d}".format(int(folder)), "image_{}".format(self.side_map[side]), f_str ) return image_path修改数据加载配置
在options.py中添加自定义数据集选项:
self.parser.add_argument("--dataset", type=str, help="dataset to train on", default="kitti", choices=["kitti", "kitti_odom", "kitti_depth", "kitti_test", "custom"])模型微调步骤
1. 环境准备
首先克隆 Lite-Mono 仓库并安装依赖:
git clone https://gitcode.com/gh_mirrors/li/Lite-Mono cd Lite-Mono pip install -r lite-mono-pretrain-code/requirements.txt2. 配置训练参数
创建训练配置文件custom_train.sh:
python train.py \ --model_name custom_lite_mono \ --data_path ./custom_data \ --dataset custom \ --split eigen_zhou \ --model lite-mono \ --height 192 \ --width 640 \ --batch_size 8 \ --num_epochs 50 \ --lr 0.0001 5e-6 31 \ --frame_ids 0 -1 1 \ --use_stereo关键参数说明:
--data_path:自定义数据集路径--dataset custom:使用我们创建的自定义数据集类--height/--width:输入图像尺寸--batch_size:根据 GPU 内存调整--frame_ids:使用的帧索引,0 为当前帧,-1 和 1 为相邻帧
3. 启动微调训练
chmod +x custom_train.sh ./custom_train.sh训练过程中,日志和模型权重会保存在./tmp/custom_lite_mono目录下。
4. 评估微调效果
使用evaluate_depth.py评估模型性能:
python evaluate_depth.py \ --load_weights_folder ./tmp/custom_lite_mono/models/weights_19 \ --data_path ./custom_data \ --dataset custom \ --eval_split eigenLite-Mono 在各种环境条件下都表现出良好的鲁棒性,这确保了我们的自定义数据集即使在复杂场景下也能获得稳定的深度估计结果:
Lite-Mono 在不同环境条件下的鲁棒性对比,展示了其在各种视觉干扰下的稳定性
常见问题解决
数据不平衡问题
如果自定义数据集中某些场景占比过大,可通过以下方式解决:
- 在
filenames.txt中调整样本比例 - 使用数据增强技术增加多样性
- 在
mono_dataset.py中实现自定义采样逻辑
过拟合处理
当模型在训练集上表现良好但测试集误差较大时:
- 增加数据量或应用更多数据增强
- 调整
options.py中的weight_decay参数(默认 1e-2) - 减小模型规模,如使用
--model lite-mono-small
推理速度优化
如需进一步提升推理速度:
- 使用更小的模型:
--model lite-mono-tiny - 降低输入分辨率:
--height 128 --width 416 - 启用 TensorRT 加速(需额外配置)
总结
本文详细介绍了使用 Lite-Mono 处理自定义数据集的完整流程,包括数据准备、格式转换、代码实现和模型微调等关键步骤。通过遵循这些步骤,即使是深度学习新手也能快速将 Lite-Mono 应用于自己的深度估计项目中。
Lite-Mono 的轻量级架构和优异性能使其成为处理自定义数据集的理想选择,无论是学术研究还是工业应用,都能提供高效准确的深度估计结果。
希望这篇指南能帮助你顺利完成自定义数据集的深度估计任务!如有任何问题,欢迎查阅项目中的README.md或提交 issue。
【免费下载链接】Lite-Mono[CVPR2023] Lite-Mono: A Lightweight CNN and Transformer Architecture for Self-Supervised Monocular Depth Estimation项目地址: https://gitcode.com/gh_mirrors/li/Lite-Mono
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考