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'])
    ]
相关推荐
ziwu20 小时前
【宠物识别系统】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·深度学习·图像识别
ziwu20 小时前
海洋生物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·深度学习·图像识别
WWZZ202520 小时前
快速上手大模型:深度学习12(目标检测、语义分割、序列模型)
深度学习·算法·目标检测·计算机视觉·机器人·大模型·具身智能
看到我请叫我铁锤1 天前
vue3中THINGJS初始化步骤
前端·javascript·vue.js·3d
后端小张1 天前
智眼法盾:基于Rokid AR眼镜的合同条款智能审查系统开发全解析
人工智能·目标检测·计算机视觉·ai·语言模型·ar·硬件架构
浩浩的代码花园1 天前
自研端侧推理模型实测效果展示
android·深度学习·计算机视觉·端智能
晨非辰1 天前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
这张生成的图像能检测吗1 天前
(论文速读)EfficientTrain++: 高效视觉骨干训练的通用课程学习
人工智能·深度学习·计算机视觉·训练方法
编程小白_正在努力中2 天前
神经网络深度解析:从神经元到深度学习的进化之路
人工智能·深度学习·神经网络·机器学习
无风听海2 天前
神经网络之经验风险最小化
人工智能·深度学习·神经网络