OpenPCDet自定义数据集构建完全指南
前言
OpenPCDet作为优秀的点云目标检测框架,支持多种主流3D检测算法。在实际应用中,开发者经常需要将自己的数据集接入框架进行训练和评估。本文将详细介绍如何在OpenPCDet中构建自定义点云数据集的全流程,帮助开发者快速实现从数据准备到模型训练的全过程。
数据集格式规范
点云数据格式要求
OpenPCDet要求点云数据以.npy
格式存储,这是NumPy的标准二进制格式,具有读取速度快、存储效率高的特点。每个点云文件应包含N×D的矩阵,其中:
- N代表点的数量
- D代表点的特征维度,通常包括:
- x, y, z坐标
- 反射强度(intensity)
- 其他可选特征(如回波次数等)
标注文件格式规范
标注信息存储在.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
│ │ └── 999999.npy
│ └── labels # 标注文件目录
│ ├── 000000.txt
│ └── 999999.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'] # 原始数据中的特征顺序
关键参数说明:
encoding_type
:编码类型,通常保持默认used_feature_list
:实际使用的特征列表src_feature_list
:原始数据中的特征排列顺序NUM_POINT_FEATURES
:必须与used_feature_list
长度一致
点云范围与体素化参数
对于基于体素的检测器(如SECOND、PV-RCNN等),需要特别注意:
- Z轴范围与体素大小的比值应为40
- XY轴范围与体素大小的比值应为16的倍数
这一规则同样适用于基于柱状的检测器(如PointPillar)。
类别与锚框配置
需要根据实际数据集调整类别和锚框参数:
CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] # 自定义类别
MAP_CLASS_TO_KITTI: # 与KITTI类别的映射关系
'Vehicle': 'Car',
'Pedestrian': 'Pedestrian',
'Cyclist': 'Cyclist',
anchor_sizes: [[3.9, 1.6, 1.56]] # 各类别的锚框尺寸
PREPARE: # 数据过滤参数
filter_by_min_points: ['Vehicle:5', 'Pedestrian:5', 'Cyclist:5'],
filter_by_difficulty: [-1],
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
:验证集信息文件
评估配置说明
OpenPCDet目前提供KITTI风格的评估方式。需要在配置文件中定义自定义类别与KITTI类别的映射关系:
MAP_CLASS_TO_KITTI:
'Vehicle': 'Car',
'Pedestrian': 'Pedestrian',
'Cyclist': 'Cyclist',
评估指标将基于此映射关系计算,确保评估结果与KITTI基准一致。
常见问题与解决方案
-
点云范围设置不合理:
- 症状:训练时出现NaN损失
- 解决:检查点云范围与体素大小的比值是否符合要求
-
类别映射错误:
- 症状:评估时出现类别不匹配警告
- 解决:确保
MAP_CLASS_TO_KITTI
中的类别名称与CLASS_NAMES
完全一致
-
数据信息生成失败:
- 症状:无法找到点云或标注文件
- 解决:检查目录结构是否符合规范,文件名是否匹配
最佳实践建议
-
数据预处理:
- 建议对点云进行归一化处理
- 移除超出有效范围的点
-
锚框设计:
- 根据实际目标尺寸统计结果设置锚框大小
- 不同类别应设置不同的锚框尺寸
-
数据增强:
- 合理配置GT-Sampling参数
- 根据场景特点调整数据增强策略
通过本文的详细指导,开发者应该能够顺利地将自定义点云数据集接入OpenPCDet框架,并开始训练自己的3D目标检测模型。在实际应用中,可能还需要根据具体场景和需求进行适当的调整和优化。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考