MMDetection3D中使用纯点云数据集的技术指南
点云数据预处理
点云格式转换
在MMDetection3D中,我们目前仅支持.bin
格式的点云数据进行训练和推理。如果您需要使用其他格式的点云数据,需要先进行格式转换。
常见的点云数据格式包括:
- PCD格式:一种常见的点云数据格式
- LAS格式:激光雷达数据常用格式
转换工具推荐
- PCD转BIN:可以使用开源工具进行转换
- LAS转BIN:通常需要先转换为PCD格式,再转为BIN格式
点云标注
MMDetection3D本身不提供点云标注功能,但可以使用以下开源标注工具:
- SUSTechPOINTS:适用于点云标注
- LATTE:提供改进版本,使用体验更佳
支持新数据格式
转换为现有格式
如果您的数据集仅包含点云文件和3D边界框标注,建议转换为以下基本格式:
[
{
'sample_idx': '样本ID',
'lidar_points': {
'lidar_path': '点云文件路径',
...
},
'annos': {
'box_type_3d': 'LiDAR/Camera/Depth',
'gt_bboxes_3d': '3D边界框数组',
'gt_names': '类别名称列表',
...
},
'calib': { ... },
'images': { ... }
}
]
转换为中间格式
另一种方法是转换为pickle文件格式,这种格式总结了模型训练和推理所需的所有信息。一个基本的KITTI数据集示例如下:
[
{
'image': { ... },
'point_cloud': { ... },
'calib': { ... },
'annos': { ... }
}
]
自定义数据集实现
简单实现
如果您的pickle文件仅包含必要的键,可以直接使用Custom3DDataset
:
dataset_A_train = dict(
type='Custom3DDataset',
ann_file='annotation.pkl',
pipeline=train_pipeline
)
复杂实现
如果需要更复杂的处理,可以创建自定义数据集类:
@DATASETS.register_module()
class MyDataset(Custom3DDataset):
CLASSES = ('cabinet', 'bed', 'chair', ...)
def __init__(self, ...):
super().__init__(...)
def get_ann_info(self, index):
# 自定义获取标注信息的逻辑
...
然后在配置中使用:
dataset_A_train = dict(
type='MyDataset',
ann_file='annotation.pkl',
pipeline=train_pipeline
)
数据集包装器
MMDetection3D支持多种数据集包装器来混合或修改数据集分布:
重复数据集
dataset_A_train = dict(
type='RepeatDataset',
times=N,
dataset=dict(
type='Dataset_A',
...
)
)
类别平衡数据集
dataset_A_train = dict(
type='ClassBalancedDataset',
oversample_thr=1e-3,
dataset=dict(
type='Dataset_A',
...
)
)
合并数据集
- 同类型数据集合并:
dataset_A_train = dict(
type='Dataset_A',
ann_file=['anno_file_1', 'anno_file_2'],
pipeline=train_pipeline
)
- 不同类型数据集合并:
data = dict(
train=[dataset_A_train, dataset_B_train],
val=dataset_A_val,
test=dataset_A_test
)
修改数据集类别
可以修改数据集类别来训练子集:
classes = ('person', 'bicycle', 'car')
data = dict(
train=dict(classes=classes),
val=dict(classes=classes),
test=dict(classes=classes))
或者从文件读取类别:
classes = 'path/to/classes.txt'
data = dict(
train=dict(classes=classes),
val=dict(classes=classes),
test=dict(classes=classes))
点云加载调整
根据点云数据的维度调整配置:
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
load_dim=3, # 点云实际维度
use_dim=3), # 实际使用的维度
训练设置调整
点云范围
调整point_cloud_range
以改变训练点云范围:
point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1]
体素大小
体素大小voxel_size
应与点云范围配合设置:
voxel_size = [0.05, 0.05, 0.1]
锚点设置
调整锚点生成器的范围和大小:
anchor_generator=dict(
type='Anchor3DRangeGenerator',
ranges=[
[0, -40.0, -0.6, 70.4, 40.0, -0.6],
...
],
sizes=[[0.8, 0.6, 1.73], ...]
)
通过以上设置,您可以有效地在MMDetection3D中使用自定义的纯点云数据集进行3D目标检测训练。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考