ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MMDetection3D LiDAR 3D 目标检测实战:以 PointPillars + KITTI 为例的数据准备、训练、评估与可视化

MMDetection3D LiDAR 3D 目标检测实战:以 PointPillars + KITTI 为例的数据准备、训练、评估与可视化 人工智能计算机视觉深度学习自动驾驶【免费下载链接】mmdetection3dOpenMMLabs next-generation platform for general 3D object detection.项目地址https://gitcode.com/gh_mirrors/mm/mmdetection3d点击查看免费下载本文是 MMDetection3D 中 LiDAR-based 3D 检测点云 3D 目标检测任务的完整实战指南。我们将以 PointPillars 模型在 KITTI 数据集上的标准流程为主线逐步讲解数据准备、分布式训练、定量评估、在线测试提交与可视化验证的完整链路。读完本文你将能够独立完成一个点云 3D 检测模型的从数据到部署评估的全流程并理解背后各环节的源码实现原理。LiDAR 3D 检测任务概述LiDAR-based 3D detection 是 MMDetection3D 支持的最基础任务之一。该任务要求模型以激光雷达采集的任意数量点云每个点通常携带 x、y、z 坐标与反射强度等特征作为输入为每个感兴趣目标预测 3D 边界框位置、尺寸、朝向与类别标签。从仓库代码结构看该任务的核心实现覆盖了 检测器detectors、点云骨干网络backbones、3D 密集检测头dense_heads 与 3D 边界框数据结构structures/bbox_3d 等多个模块。PointPillars 是最具代表性的入门模型之一其配置位于 PointPillars 配置目录对应的 KITTI 三类别Pedestrian / Cyclist / Car完整配置为 pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py下文所有实操均以该配置为例展开。数据准备从原始 KITTI 数据到标准目录与信息文件第一步下载原始数据并组织目录首先需要下载 KITTI 3D 检测原始数据包括velodyne点云、calib标定文件、image_2图像与label_2标注并按 数据准备文档 中给出的标准方式重组目录。注意KITTI 数据集还需要额外的.txt分割文件ImageSets用于划分 train / val / test 子集。数据分割文件的准备方式如下详见 数据准备文档mkdir ./data/kitti/ mkdir ./data/kitti/ImageSets # 下载 4 个分割文件test / train / val / trainval wget -c ... -O ./data/kitti/ImageSets/test.txt wget -c ... -O ./data/kitti/ImageSets/train.txt wget -c ... -O ./data/kitti/ImageSets/val.txt wget -c ... -O ./data/kitti/ImageSets/trainval.txt此外也可以使用mim download mmdet3d --dataset kitti一键下载并预处理数据需要先安装 OpenDataLab CLI 并登录。第二步用 create_data.py 生成数据信息文件由于不同数据集的原始数据组织方式差异较大MMDetection3D 通常需要用一个.pkl文件统一收集有用的数据信息。原始数据就绪后需要运行 tools/create_data.py 中对应数据集的脚本生成 data infos。对 KITTI 而言命令为python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti从 tools/create_data.py 的源码可以看到kitti_data_prep内部依次完成四件事调用kitti.create_kitti_info_file依据 ImageSets 分割生成 train / val / trainval / test 四份 infos pkl调用kitti.create_reduced_point_cloud生成velodyne_reduced采样降密后的点云KITTI 官方评估仅使用降密点云的前 100 行左右的点调用update_pkl_infos将 infos 升级为 v2 格式兼容 MMDetection3D 新版数据结构调用create_groundtruth_database构建 GT 数据库用于训练期的ObjectSample数据增强。命令中三个参数的含义为--root-path指定原始数据根目录--out-dir指定 pkl 输出目录--extra-tag指定 infos 文件名的前缀此处为kitti。若环境使用 slurm 调度可改用sh tools/create_data.sh partition kitti。第三步核对生成后的目录结构命令执行完毕后data/kitti下应包含如下结构与 数据准备文档 描述一致mmdetection3d ├── mmdet3d ├── tools ├── configs ├── data │ ├── kitti │ │ ├── ImageSets │ │ ├── testing │ │ │ ├── calib │ │ │ ├── image_2 │ │ │ ├── velodyne │ │ │ ├── velodyne_reduced │ │ ├── training │ │ │ ├── calib │ │ │ ├── image_2 │ │ │ ├── label_2 │ │ │ ├── velodyne │ │ │ ├── velodyne_reduced │ │ ├── kitti_gt_database │ │ ├── kitti_infos_train.pkl │ │ ├── kitti_infos_trainval.pkl │ │ ├── kitti_infos_val.pkl │ │ ├── kitti_infos_test.pkl │ │ ├── kitti_dbinfos_train.pkl其中kitti_infos_*.pkl记录每帧数据的点云路径、标定参数、图像信息与 3D/2D 标注训练时由 KittiDataset 加载kitti_gt_database与kitti_dbinfos_train.pkl则用于训练期的 GT 采样增强对应配置中的db_sampler。如果你不需要重新生成、也可以直接下载仓库提供的现成标注文件放置到data/kitti/但若要使用ObjectSample增强仍需额外执行--only-gt-database模式生成 GT 数据库python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti --only-gt-database训练以 PointPillars 配置启动分布式训练单机多卡启动命令数据就绪后即可用仓库提供的配置训练 PointPillars。不同 GPU 规模的训练方式可参考 训练与测试教程。假设我们在单机 8 卡上进行分布式训练./tools/dist_train.sh configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py 8dist_train.sh 内部通过python -m torch.distributed.launch启动 tools/train.py支持通过环境变量NNODES、NODE_RANK、PORT、MASTER_ADDR扩展多机训练。理解配置8xb6、学习率与自动缩放配置名中的8xb6表示训练使用8 张 GPU、每张 GPU 上 6 个样本batch size 6。如果你的自定义设置与此不同通常需要相应调整学习率——基本经验规则可参考论文《Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour》arXiv:1706.02677。MMDetection3D 已支持--auto-scale-lr参数自动缩放学习率从 tools/train.py 的源码可以看到该参数会读取配置中的auto_scale_lr.enable与auto_scale_lr.base_batch_size字段并据此自动推算新的学习率。以当前配置 pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py 为例其关键训练设置包括学习率与调度lr 0.001epoch_num 80采用两段式CosineAnnealingLR前 40% epoch 以eta_min lr * 10退火后 60% 退火到lr * 1e-4并配套CosineAnnealingMomentumepoch 数虽然train_cfg dict(by_epochTrue, max_epochs80)但训练数据加载器外层套了RepeatDataset(times2)因此实际训练 160 epochs这正是配置名中160e的来源验证间隔train_cfg dict(by_epochTrue, max_epochsepoch_num, val_interval2)即每 2 个 epoch 在验证集上评估一次梯度裁剪optim_wrapper dict(optimizerdict(lrlr), clip_graddict(max_norm35, norm_type2))注释说明对 PointPillars 而言max_norm35略优于 10类别与点云范围class_names [Pedestrian, Cyclist, Car]point_cloud_range [0, -39.68, -3, 69.12, 39.68, 1]x/y/z 的前后边界。数据增强管线train_pipeline训练管线定义在同一配置中依次执行LoadPointsFromFile加载 LiDAR 点云load_dim4, use_dim4x, y, z, intensityLoadAnnotations3D加载 3D 框与标签ObjectSample基于db_sampler从kitti_dbinfos_train.pkl中采样 GT 点云做增强其中sample_groupsdict(Car15, Pedestrian15, Cyclist15)表示每个类别的采样目标数量注意PointPillars 的 KITTI 配置在基类 kitti-3d-3class.py 基础上调整了各类别的采样策略RandomFlip3DBEV 水平翻转概率 0.5GlobalRotScaleTrans全局旋转 ±45°、缩放 0.95~1.05PointsRangeFilter/ObjectRangeFilter过滤超出point_cloud_range的点与框PointShuffle打乱点序Pack3DDetInputs打包为模型输入。模型结构速览PointPillars 的模型定义见 pointpillars_hv_secfpn_kitti.py主干为VoxelNet架构体素化voxel_size [0.16, 0.16, 4]x/y 方向 0.16m、z 方向 4mmax_points_per_voxel32max_voxels(16000, 40000)训练/测试上限体素编码器PillarFeatureNetpillar 特征提取输入 4 通道输出 64 维特征中间编码器PointPillarsScatter将 pillar 特征散射回伪图像输出尺寸[496, 432]骨干网络SECOND3 层下采样通道 64→128→256颈部SECONDFPN上采样融合输出 128 维检测头Anchor3DHead使用三类 anchorPedestrian 尺寸[0.8, 0.6, 1.73]、Cyclist[1.76, 0.6, 1.73]、Car[3.9, 1.6, 1.56]旋转角 0 与 1.57并针对每个类别配置不同的Max3DIoUAssigner正负样本阈值Car 的pos_iou_thr0.6Pedestrian/Cyclist 为 0.5测试阶段使用use_rotate_nmsTrue、nms_thr0.01、score_thr0.1、max_num50。定量评估理解 KITTI 官方评估协议训练期间的定期评估训练过程中模型检查点会根据配置中的train_cfg dict(val_intervalxxx)定期在验证集上评估。MMDetection3D 对不同的数据集支持各自的官方评估协议。对 KITTI 而言评估协议为对 3 个类别分别计算 mAPmean Average PrecisionIoU 阈值分别为 0.5 / 0.7且按 easy / moderate / hard 三档难度分别报告。评估核心由 KittiMetric 实现它注册为typeKittiMetric其关键构造参数包括ann_file验证/测试集标注 pkl 路径metric评估指标默认bbox允许取值为bbox、img_bbox、mAP、LET_mAPpcd_limit_range点云范围过滤阈值用于剔除无效预测框默认[0, -40, -3, 70.4, 40, 0.0]pklfile_prefix结果 pkl 的保存前缀format_only仅格式化结果不计算指标用于提交submission_prefix提交文件的保存目录前缀default_cam_key默认相机KITTI 为CAM2用于 LiDAR 到相机的坐标转换与 2D 框投影。在kitti_evaluate中对 3D 预测默认计算bbox / bev / 3d三类 AP2D 框、BEV 鸟瞰框、3D 框评估结果会打印在命令行形如Car AP0.70, 0.70, 0.70: bbox AP:98.1839, 89.7606, 88.7837 bev AP:89.6905, 87.4570, 85.4865 3d AP:87.4561, 76.7569, 74.1302 aos AP:97.70, 88.73, 87.34 Car AP0.70, 0.50, 0.50: bbox AP:98.1839, 89.7606, 88.7837 bev AP:98.4400, 90.1218, 89.6270 3d AP:98.3329, 90.0209, 89.4035 aos AP:97.70, 88.73, 87.34其中AP0.70, 0.70, 0.70行对应 easy / moderate / hard 三档难度在 IoU 0.7 下的 Car AP第二行AP0.70, 0.50, 0.50对应 BEV / 3D 评估放宽到 IoU 0.5 的 Car 指标aos为朝向相似度指标。训练完成后的独立评估训练结束后也可以单独评估某个检查点直接运行./tools/dist_test.sh configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py work_dirs/pointpillars/latest.pth 8dist_test.sh的用法为dist_test.sh config checkpoint gpus其内部同样基于torch.distributed.launch启动 tools/test.py。注意默认配置中验证集与测试集都指向kitti_infos_val.pkl见 kitti-3d-3class.py因此上述命令评估的是验证集指标。测试与在线提交生成 KITTI 官方格式的预测结果如果你只想做纯推理或将模型性能提交到 KITTI 在线评估服务器需要模型在测试集上预测则需要为对应的评估器指定submission_prefix。例如在配置中加入test_evaluator dict( typeKittiMetric, ann_filedata_root kitti_infos_test.pkl, format_onlyTrue, pklfile_prefixresults/kitti-3class/kitti_results, submission_prefixresults/kitti-3class/kitti_results)配置要点format_onlyTrue只格式化输出、不执行本地评估。从 kitti_metric.py 的源码可以看到format_onlyTrue时强制要求submission_prefix非空否则结果会被保存到临时目录并在结束时被清理ann_file必须指向测试集请确保配置中的data_prefix与ann_file与测试集对应参考 kitti-3d-3class.py 中test_dataloader的写法即ann_filekitti_infos_test.pkl、data_prefixdict(ptstesting/velodyne_reduced)而不是验证集生成的文件格式从 bbox2result_kitti 可以看到每个测试样本会输出一个{sample_idx:06d}.txt文本文件每行包含类别名、alpha、2D bbox、尺寸、位置、rotation_y与置信度该格式与 KITTI 官方提交要求一致。生成结果后将结果文件夹压缩并上传到 KITTI 评估服务器即可获得官方打分。定性验证可视化检测结果与数据集MMDetection3D 提供了丰富的可视化工具便于直观感受训练模型的检测效果共三条途径方式一评估时在线可视化--show在运行 tools/test.py 时添加--show选项即可在评估过程中实时可视化预测结果。从 tools/test.py 的源码可以看到--show会激活default_hooks中的VisualizationHook并联动以下参数--show-dir指定保存可视化结果的目录--task可视化任务类型LiDAR 3D 检测对应lidar_det--score-thr框分数阈值默认 0.1--wait-time每帧显示间隔默认 2 秒。方式二离线可视化visualize_results.py也可以先保存预测结果再使用 tools/misc/visualize_results.py 做离线可视化python tools/misc/visualize_results.py config --result 结果.pkl --show-dir 输出目录该脚本加载指定 pkl 结果通过数据集的show方法逐帧绘制--result必须是.pkl文件且测试配置中需设置test_modeTrue。方式三无需推理的数据集浏览browse_dataset.py仓库还提供了 tools/misc/browse_dataset.py 脚本无需任何模型推理即可直接可视化数据集本身点云、GT 框与标注常用参数包括--output-dir无显示界面时保存可视化结果--task任务类型如lidar_det--aug可视化增强后的数据走训练管线而非原始数据--show-interval显示间隔秒。更完整的可视化用法可参考 可视化文档。小结本文以 PointPillars KITTI 三类别检测为完整示例走通了 LiDAR 3D 检测的标准工作流数据准备ImageSets 分割 create_data.py生成 infos 与 GT 数据库→ 分布式训练dist_train.sh 8xb6 配置解读→ 定量评估KittiMetric 与 mAP/IoU 协议→ 测试提交format_onlysubmission_prefix生成官方格式结果→ 定性验证三类可视化工具。对读者而言理解这套流程后可以轻松迁移到仓库中其他 LiDAR 检测模型如 SECOND、CenterPoint、PartA2、PV-RCNN、SASSD 等见 configs 目录因为它们在数据准备、评估与可视化环节共享同一套基础设施不同之处仅在于各自配置中的模型结构、数据增强管线与训练调度策略。更多数据集nuScenes、Waymo、Lyft 等的 LiDAR 检测配置也可在 configs/base/datasets 中找到对应基类按本文流程举一反三即可。赞分享人工智能计算机视觉深度学习自动驾驶【免费下载链接】mmdetection3dOpenMMLabs next-generation platform for general 3D object detection.项目地址https://gitcode.com/gh_mirrors/mm/mmdetection3d点击查看免费下载相关推荐MMDetection3D 视觉 3D 检测实战指南以 FCOS3D 单目模型跑通 nuScenes 数据准备、训练、评估与可视化全流程MMDetection3D 视觉 3D 检测实战指南以 FCOS3D 单目模型跑通 nuScenes 数据准备、训练、评估与可视化全流程 本文基于 MMDet人工智能计算机视觉深度学习自动驾驶MMDetection3D 室内 3D 检测实战SUN RGB-D 数据集准备、训练流水线与评估全指南MMDetection3D 室内 3D 检测实战SUN RGB D 数据集准备、训练流水线与评估全指南 导读 SUN RGB D 是室内场景 3D 目标检测领人工智能计算机视觉深度学习自动驾驶MMDetection3D 中 KITTI 数据集的完整使用指南数据准备、训练 Pipeline 与评测提交MMDetection3D 中 KITTI 数据集的完整使用指南数据准备、训练 Pipeline 与评测提交 KITTI 是自动驾驶领域最经典的 3D 目标检人工智能计算机视觉深度学习自动驾驶上一篇Podman 构建镜像的 --disable-compression 选项默认不压缩的机制与实战用法下一篇uni-app 应用市场上架全指南审核规则、资质准备与合规打包发布创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表