CenterPoint 源码流程解读(一)

CenterPoint 源码流程解读(一)

参考
1.论文速读 – CenterPoint
2.激光雷达点云的3D目标检测入门(CenterPoint源码分析)
3.CenterPoint 在mmdetection3d中的实现
4. centerpoint 原文完整翻译

本文使用配置页
mmdetection3d工程中的configs/centerpoint模型:
centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py

一. 数据处理部分(主要针对点云) – train_pipeline 流程

1. LoadPointsFromFile

1.1 功能: 从文件中加载点云。

1.2 初始化参数

  • coord_type: 坐标系类型,可选’LIDAR’,‘DEPTH’,‘CAMERA’
  • load_dim: 数据加载维度,默认是6,nuscenes数据集设置为5
  • use_dim: 需要使用的维度,默认[0,1,2],只用xyz
  • shift_height: 是否需要使用高度平移,默认false
  • use_color: 是否需要使用颜色特征,默认false
  • file_client_args:(可选参数)文件客户端配置,默认使用disk方式,即给定文件路径,直接进行读取。

1.3 类内函数(以下所有均省略__init__)

  • _load_points: 加载点云数据
  • __call__: 从文件中获取点云数据的回调函数,结果为包含点云数据的dict
  • __repr__: 返回模块描述字符串

2. LoadPointsFromMultiSweeps

2.1 功能: 加载多帧点云数据

2.2 初始化参数

  • sweeps_num: 帧数,默认10
  • load_dim: 默认5
  • use_dim: 默认[0, 1, 2, 4],4维度对应时间戳的差值
  • time_dim: 每一个点的时间戳维度,默认4
  • file_client_args: 同上
  • pad_empty_sweeps: 当点云为空时,是否重复关键帧,默认false
  • remove_close: 移除最近点,默认false
  • test_mode: 如果为true,则不会随机采样,只选择最近的N帧,默认false

2.3 类内函数

  • _load_points: 加载点云数据
  • _remove_close: 移除原点位置一定半径点的所有点
  • __call__: 从文件中获取点云数据的回调函数,结果为包含点云数据的dict
  • __repr__ : 返回模块描述字符串

3. LoadAnnotations3D

3.1 功能: 加载3D标注框,将实例掩码和点云语义掩码封装到关联字段中。

3.2 初始化参数

  • with_bbox_3d: 是否加载3D box,默认为true
  • with_label_3d: 是否加载3D box标签,默认为true
  • with_attr_label: 是否加载属性标签,默认为false
  • with_mask_3d: 是否加载点云3D 实例掩码,默认是false
  • with_seg_3d: 是否加载点云3D 语义掩码,默认是false
  • with_bbox: 是否加载2D box,默认false
  • with_label: 是否加载2D 标签,默认false
  • with_mask: 是否加载2D 实例掩码,默认是false
  • with_seg: 是否加载2D 语义掩码,默认是false
  • with_bbox_depth: 是否加载2.5D box,默认false
  • poly2mask: 是否转换多边形标注到二进制掩码,默认true
  • seg_3d_dtype: 3D 语义掩码类型,默认int64
  • file_client_args

3.3 类内函数
以下处理函数的具体过程均在mmdet3d.CustomDataset类中进行的

  • _load_bboxes_3d: 加载3D box标注,返回gt_bboxes_3d、bbox3d_fields两个key
  • _load_bboxes_depth: 加载2.5D box标注,返回center2d、depths两个key
  • _load_labels_3d: 加载标签标注,返回gt_labels_3d的key
  • _load_attr_labels: 加载标签属性,返回attr_labels的key
  • _load_masks_3d: 加载3D掩码标注,返回pts_instance_mask、pts_mask_fields两个key
  • _load_semantic_seg_3d: 加载3D语义分割标注,返回pts_semantic_mask、pts_seg_fields两个key
  • __call__: 返回多种类型的标注结果中的一种
  • __repr__ : 返回模块描述字符串

4. ObjectSample

4.1 功能: 采样真值(gt)物体到数据中

4.2 初始化参数

  • db_sampler (dict): 基准数据采样器的配置
  • sample_2d (bool): 是否拷贝2D图像的补丁到图像上,如果是多模态的裁剪-粘贴,应该设置为ture,默认false
  • use_ground_plane (bool): 是否使用地平面去调整3d标签,默认false

4.3 类内函数

  • remove_points_in_boxes(静态函数):移除采样的bbox中的点云
  • __call__: 采样真值物体到数据中,返回结果包含gt_bboxes_3d、gt_labels_3d、points三个key
  • __repr__: 返回模块描述字符串

5. GlobalRotScaleTrans

5.1 功能: 对3D场景应用执行全局坐标系下的旋转、缩放和平移

5.2 初始化参数

  • rot_range (list[float]): 旋转角度范围,默认[-0.78539816, 0.78539816] (close to [-pi/4, pi/4])
  • scale_ratio_range (list[float]): 缩放尺度因子 ,默认[0.95, 1.05]
  • translation_std (list[float]): 平移噪声的标注差,通过添加噪声方式随机平移一个场景,噪声方式从高斯分布中采样,默认[0, 0, 0]
  • shift_height (bool): 是否平移高度值,默认false

5.3 类内函数

  • _trans_bbox_points: 平移bbox和点云
  • _rot_bbox_points: 旋转bbox和点云
  • _scale_bbox_points: 缩放bbox和点云
  • _random_scale: 随机设置尺度因子
  • update_transform: 更新变换矩阵
  • __call__:旋转、缩放、平移bbox和点云
  • __repr__

6. RandomFlip3D

6.1 功能:随机翻转点云和bbox。
注意:如果输入字典中包含“flip”关键字,则将使用标志。否则,它将由init中指定的比率随机决定。

6.2 初始化参数

  • sync_2d (bool, optional):是否应用翻转到2D图像上。如果为真,则应用3D中的相关翻转到2D图像上,如果false,则决定是否随机独立旋转2D图像。默认为真。
  • flip_ratio_bev_horizontal (float, optional): 水平方向翻转比例,默认0.0
  • flip_ratio_bev_vertical (float, optional): 垂直方向翻转比例,默认0.0
  • **kwargs: 可变键值对参数

6.3 类内函数

  • random_flip_data_3d: 随机翻转3d数据
  • update_transform: 更新变换矩阵
  • __call__: 翻转点云(bbox3d_fields),同时翻转二维图像和它的标注
  • __repr__

7. PointsRangeFilter

7.1 功能: 通过范围过滤点云

7.2 初始化参数

  • point_cloud_range (list[float]): 点云范围

7.3 类内函数

  • __call__: 通过范围过滤点云
  • __repr__

8. ObjectRangeFilter

8.1 功能:通过范围过滤障碍物

8.2 初始化参数

  • point_cloud_range (list[float]): 点云范围

8.3 类内函数

  • __call__: 通过范围过滤点云
  • __repr__

9. ObjectNameFilter

9.1 功能:根据类别名字过滤真值障碍物

9.2 初始化参数

  • classes (list[str]): 训练需要保留的类别名列表

9.3 类内函数

  • __call__: 通过名字过滤障碍物
  • __repr__

10. PointShuffle

10.1 功能: 对输入点云打乱顺序(洗牌)

10.2 初始化参数:无

10.3 类内函数

  • __call__: 打乱点云排序
  • __repr__

11. DefaultFormatBundle3D

11.1 功能: 默认格式化打包3D信息

注意: 它简化了格式化体素(voxel)通用字段的pipeline,主要包含"proposals", “gt_bboxes”, “gt_labels”, “gt_masks” and “gt_semantic_seg”。字段类型转换如下:

    - img: (1)transpose, (2)to tensor, (3)to DataContainer (stack=True)
    - proposals: (1)to tensor, (2)to DataContainer
    - gt_bboxes: (1)to tensor, (2)to DataContainer
    - gt_bboxes_ignore: (1)to tensor, (2)to DataContainer
    - gt_labels: (1)to tensor, (2)to DataContainer

11.2 初始化参数

  • class_names: 种类列表
  • with_gt(bool): 是否使用真值,默认true
  • with_label(bool): 是否使用标签,默认true

11.3 类内函数

  • __call__: 执行变换和格式化通用字段,放入[results]
  • __repr__: 返回描述模块的字符串

12. Collect3D

12.1 功能: 从有关特定任务的dataloader中收集数据

注意
1)此类通常作为data loader pipeline的最后阶段,典型的关键字集合,如"img", “proposals”, “gt_bboxes”, “gt_bboxes_ignore”, “gt_labels”, “gt_masks”
2)img_meta总是被插入的数据项,内容依赖于meta_keys,默认包含:

- 'img_shape': 网络中输入图像尺寸,类型 tuple ,维度(h, w, c). 注意图像在
          右/下可能是0扩充(pad)
- 'scale_factor': 预处理尺度
- 'flip': 图像是否翻转
- 'filename': 图像文件名路径
- 'ori_shape': 图像原始形状,tuple (h, w, c)
- 'pad_shape': 扩充后图像尺寸
- 'lidar2img': lidar 到 图像旋转矩阵
- 'depth2img': depth 到图像旋转矩阵
- 'cam2img': 相机坐标系到图像坐标洗旋转矩阵
- 'pcd_horizontal_flip': 点云是否水平翻转
- 'pcd_vertical_flip': 点云是否垂直翻转
- 'box_mode_3d': 3D box 模式
- 'box_type_3d': 3D box 类型
- 'img_norm_cfg': 正则化信息dict
    - mean: 每个channel平均值
    - std: 每个channel标准差
    - to_rgb: 是否由bgr转换为rgb
- 'pcd_trans': 点云旋转矩阵
- 'sample_idx': 样本关键帧索引
- 'pcd_scale_factor': 点云尺度因子
- 'pcd_rotation': 点云旋转
- 'pts_filename': 点云文件路径名

12.2 初始化参数

  • keys (Sequence[str]): 收集的关键字
  • meta_keys (Sequence[str], optional): 主要关键字,被用来转换到mmcv.DataContainer,存放在data[img_metas]中。

12.3 类内函数

  • __call__: 收集results中的关键字
  • __repr__: 返回描述模块的字符串

未完待续,CenterPoint 源码流程解读(二)

你可能感兴趣的:(激光点云工程复现,深度学习,目标检测,自动驾驶,算法,计算机视觉)