PCDet项目自定义数据集构建完整指南
OpenPCDet 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPCDet
前言
在3D目标检测领域,PCDet作为一个优秀的开源框架,支持多种先进的点云检测算法。但在实际应用中,开发者常常需要处理自定义数据集。本文将详细介绍如何在PCDet框架中构建和使用自定义点云数据集,帮助开发者快速实现从数据准备到模型训练的全流程。
数据集格式规范
点云数据格式
PCDet要求点云数据以.npy
格式存储,这是NumPy的标准二进制格式,具有加载速度快、存储效率高的特点。每个点云文件应包含N×D的矩阵,其中:
- N代表点的数量
- D代表每个点的特征维度(至少包含x,y,z坐标,可包含强度等附加特征)
标注文件格式
标注信息存储在.txt
文件中,每行对应一个3D边界框,格式如下:
x y z dx dy dz heading_angle category_name
其中:
- (x,y,z):边界框中心坐标
- (dx,dy,dz):边界框长宽高尺寸
- heading_angle:物体朝向角度(弧度制)
- category_name:物体类别名称
示例:
1.50 1.46 0.10 5.12 1.85 4.13 1.56 Vehicle
5.54 0.57 0.41 1.08 0.74 1.95 1.57 Pedestrian
数据集目录结构
正确的目录结构是确保数据加载正常的关键,建议按以下方式组织:
data
├── custom
│ ├── ImageSets
│ │ ├── train.txt # 训练集文件名列表
│ │ └── val.txt # 验证集文件名列表
│ ├── points
│ │ ├── 000000.npy # 点云数据文件
│ │ └── ...
│ └── labels
│ ├── 000000.txt # 标注文件
│ └── ...
注意:
ImageSets
中的文本文件只需包含文件名(不含扩展名)- 点云文件与标注文件应一一对应,且文件名相同
配置文件调整
点云特征配置
在custom_dataset.yaml
中需要根据实际数据调整点云特征设置:
POINT_FEATURE_ENCODING:
encoding_type: absolute_coordinates_encoding
used_feature_list: ['x', 'y', 'z', 'intensity'] # 使用的特征
src_feature_list: ['x', 'y', 'z', 'intensity'] # 原始数据中的特征顺序
如果点云不包含强度信息,可调整为:
used_feature_list: ['x', 'y', 'z']
src_feature_list: ['x', 'y', 'z']
点云范围与体素化参数
对于基于体素的检测器(如SECOND、PV-RCNN等),需要特别注意:
- Z轴范围与体素大小的比值应为40
- XY轴范围与体素大小的比值应为16的倍数
例如:
POINT_CLOUD_RANGE: [0, -40, -3, 70.4, 40, 1] # [x_min, y_min, z_min, x_max, y_max, z_max]
VOXEL_SIZE: [0.05, 0.05, 0.1] # 体素大小
类别与锚框配置
需要根据自定义数据集的类别调整相关参数:
CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] # 自定义类别名称
# 与KITTI类别的映射关系(用于评估)
MAP_CLASS_TO_KITTI:
'Vehicle': 'Car'
'Pedestrian': 'Pedestrian'
'Cyclist': 'Cyclist'
# 锚框尺寸配置(每个类别对应一组长宽高)
anchor_sizes: [[3.9, 1.6, 1.56], [0.8, 0.6, 1.73], [1.76, 0.6, 1.73]]
# 数据增强参数
PREPARE:
filter_by_min_points: ['Vehicle:5', 'Pedestrian:5', 'Cyclist:5'] # 最小点数过滤
SAMPLE_GROUPS: ['Vehicle:20', 'Pedestrian:15', 'Cyclist:15'] # 各类别采样比例
数据信息文件生成
完成上述配置后,需要生成数据信息文件:
python -m pcdet.datasets.custom.custom_dataset create_custom_infos tools/cfgs/dataset_configs/custom_dataset.yaml
该命令会生成以下文件:
custom_infos_train.pkl
:训练集信息custom_infos_val.pkl
:验证集信息
模型训练与评估
训练启动
使用标准训练命令即可开始训练:
python train.py --cfg_file tools/cfgs/custom_models/pointrcnn.yaml
评估注意事项
PCDet目前主要支持KITTI风格的评估方式,因此需要通过MAP_CLASS_TO_KITTI
将自定义类别映射到KITTI的标准类别。评估指标包括:
- 3D检测精度(AP)
- BEV(鸟瞰图)检测精度
- 不同难度级别的检测结果
常见问题与技巧
- 数据增强优化:根据自定义数据集特点调整
gt_sampling
等数据增强策略 - 类别不平衡处理:通过调整
SAMPLE_GROUPS
参数平衡各类别样本 - 小物体检测:适当减小体素大小,但需注意显存消耗
- 自定义评估指标:可继承KITTI评估类实现特定评估逻辑
结语
通过本文的指导,开发者应能够顺利地在PCDet框架中使用自定义点云数据集进行3D目标检测任务。实际应用中,可能需要根据具体场景对参数进行进一步调优,特别是点云范围、体素大小和锚框设计等关键参数。建议从小规模数据开始验证,逐步扩展到完整数据集,以提高开发效率。
OpenPCDet 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPCDet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考