參考:自定義數據預處理流程 — MMDetection3D 1.4.0 文檔
數據預處理流程的設計
預處理流程中的各項操作主要分為數據加載、預處理、格式化、測試時的數據增強。
接下來將展示一個用于 PointPillars 模型的數據集預處理流程的例子。
train_pipeline = [dict(type='LoadPointsFromFile',load_dim=5,use_dim=5,backend_args=backend_args),dict(type='LoadPointsFromMultiSweeps',sweeps_num=10,backend_args=backend_args),dict(type='LoadAnnotations3D', with_bbox_3d=True, with_label_3d=True),dict(type='GlobalRotScaleTrans',rot_range=[-0.3925, 0.3925],scale_ratio_range=[0.95, 1.05],translation_std=[0, 0, 0]),dict(type='RandomFlip3D', flip_ratio_bev_horizontal=0.5),dict(type='PointsRangeFilter', point_cloud_range=point_cloud_range),dict(type='ObjectRangeFilter', point_cloud_range=point_cloud_range),dict(type='ObjectNameFilter', classes=class_names),dict(type='PointShuffle'),dict(type='DefaultFormatBundle3D', class_names=class_names),dict(type='Collect3D', keys=['points', 'gt_bboxes_3d', 'gt_labels_3d'])
]
test_pipeline = [dict(type='LoadPointsFromFile',load_dim=5,use_dim=5,backend_args=backend_args),dict(type='LoadPointsFromMultiSweeps',sweeps_num=10,backend_args=backend_args),dict(type='MultiScaleFlipAug',img_scale=(1333, 800),pts_scale_ratio=1.0,flip=False,pcd_horizontal_flip=False,pcd_vertical_flip=False,transforms=[dict(type='GlobalRotScaleTrans',rot_range=[0, 0],scale_ratio_range=[1., 1.],translation_std=[0, 0, 0]),dict(type='RandomFlip3D'),dict(type='PointsRangeFilter', point_cloud_range=point_cloud_range),dict(type='DefaultFormatBundle3D',class_names=class_names,with_label=False),dict(type='Collect3D', keys=['points'])])
]
對于每項操作,我們將列出相關的被添加/更新/移除的字典項。
數據加載
LoadPointsFromFile
-
添加:points
LoadPointsFromMultiSweeps
-
更新:points
LoadAnnotations3D
-
添加:gt_bboxes_3d, gt_labels_3d, gt_bboxes, gt_labels, pts_instance_mask, pts_semantic_mask, bbox3d_fields, pts_mask_fields, pts_seg_fields
預處理
GlobalRotScaleTrans
-
添加:pcd_trans, pcd_rotation, pcd_scale_factor
-
更新:points, *bbox3d_fields
RandomFlip3D
-
添加:flip, pcd_horizontal_flip, pcd_vertical_flip
-
更新:points, *bbox3d_fields
PointsRangeFilter
-
更新:points
ObjectRangeFilter
-
更新:gt_bboxes_3d, gt_labels_3d
ObjectNameFilter
-
更新:gt_bboxes_3d, gt_labels_3d
PointShuffle
-
更新:points
PointsRangeFilter
-
更新:points
格式化
DefaultFormatBundle3D
-
更新:points, gt_bboxes_3d, gt_labels_3d, gt_bboxes, gt_labels
Collect3D
-
添加:img_meta (由?
meta_keys
?指定的鍵值構成的 img_meta) -
移除:所有除?
keys
?指定的鍵值以外的其他鍵值
測試時的數據增強
MultiScaleFlipAug
-
更新: scale, pcd_scale_factor, flip, flip_direction, pcd_horizontal_flip, pcd_vertical_flip (與這些指定的參數對應的增強后的數據列表)
擴展并使用自定義數據集預處理方法
-
在任意文件中寫入新的數據集預處理方法,如?
my_pipeline.py
,該預處理方法的輸入和輸出均為字典from mmdet.datasets import PIPELINES@PIPELINES.register_module() class MyTransform:def __call__(self, results):results['dummy'] = Truereturn results
-
導入新的預處理方法類
from .my_pipeline import MyTransform
-
在配置文件中使用該數據集預處理方法
train_pipeline = [dict(type='LoadPointsFromFile',load_dim=5,use_dim=5,backend_args=backend_args),dict(type='LoadPointsFromMultiSweeps',sweeps_num=10,backend_args=backend_args),dict(type='LoadAnnotations3D', with_bbox_3d=True, with_label_3d=True),dict(type='GlobalRotScaleTrans',rot_range=[-0.3925, 0.3925],scale_ratio_range=[0.95, 1.05],translation_std=[0, 0, 0]),dict(type='RandomFlip3D', flip_ratio_bev_horizontal=0.5),dict(type='PointsRangeFilter', point_cloud_range=point_cloud_range),dict(type='ObjectRangeFilter', point_cloud_range=point_cloud_range),dict(type='ObjectNameFilter', classes=class_names),dict(type='MyTransform'),dict(type='PointShuffle'),dict(type='DefaultFormatBundle3D', class_names=class_names),dict(type='Collect3D', keys=['points', 'gt_bboxes_3d', 'gt_labels_3d']) ]