• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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': 点云文件路径名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    12.2 初始化参数

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

    12.3 类内函数

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

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

  • 相关阅读:
    JarFile实例多 Finalizer占用内存过大 引起的YGC时间过长 的问题排查和解决办法
    汽车电子——产品标准规范汇总和梳理(自动驾驶)
    安装selenium
    笔记 vue3如何引入iconfont
    nacos源码深度剖析理解之注册中心
    【ICPC2022济南站】【树形dp】【删物品背包dp】C.DFS Order 2
    在云服务器上打开ftp服务-踩坑及心得
    (Java版)大小写转换设计一个程序, 输入一行字符串, 将其中大写转为小写, 小写转为大写. 其余字符不变
    NSS [HNCTF 2022 Week1]Interesting_http
    Serverless实战——2分钟,教你用Serverless每天给女朋友自动发土味情话
  • 原文地址:https://blog.csdn.net/weixin_36354875/article/details/127757667