BEV和OCC学习-5:数据预处理流程

参考:自定义数据预处理流程 --- MMDetection3D 1.4.0 文档

数据预处理流程的设计

预处理流程中的各项操作主要分为数据加载、预处理、格式化、测试时的数据增强。

接下来将展示一个用于 PointPillars 模型的数据集预处理流程的例子。

python 复制代码
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 (与这些指定的参数对应的增强后的数据列表)

扩展并使用自定义数据集预处理方法

  1. 在任意文件中写入新的数据集预处理方法,如 my_pipeline.py,该预处理方法的输入和输出均为字典

    python 复制代码
    from mmdet.datasets import PIPELINES
    
    @PIPELINES.register_module()
    class MyTransform:
    
        def __call__(self, results):
            results['dummy'] = True
            return results
  2. 导入新的预处理方法类

    python 复制代码
    from .my_pipeline import MyTransform
  3. 在配置文件中使用该数据集预处理方法

    python 复制代码
    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'])
    ]
相关推荐
weixin_3776348425 分钟前
【目标检测】特征理解与标注技巧
yolo·目标检测
蓝桉8021 小时前
如何进行神经网络的模型训练(视频代码中的知识点记录)
人工智能·深度学习·神经网络
星期天要睡觉2 小时前
深度学习——数据增强(Data Augmentation)
人工智能·深度学习
笑脸惹桃花2 小时前
50系显卡训练深度学习YOLO等算法报错的解决方法
深度学习·算法·yolo·torch·cuda
anneCoder3 小时前
AI大模型应用研发工程师面试知识准备目录
人工智能·深度学习·机器学习
骑驴看星星a3 小时前
没有深度学习
人工智能·深度学习
THMAIL5 小时前
深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
山烛6 小时前
深度学习:残差网络ResNet与迁移学习
人工智能·python·深度学习·残差网络·resnet·迁移学习
THMAIL10 小时前
量化基金从小白到大师 - 金融数据获取大全:从免费API到Tick级数据实战指南
人工智能·python·深度学习·算法·机器学习·金融·kafka
Tiger Z11 小时前
《动手学深度学习v2》学习笔记 | 2.4 微积分 & 2.5 自动微分
pytorch·深度学习·ai