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 类内函数文章来源:https://www.toymoban.com/news/detail-474096.html
-
__call__
: 收集results中的关键字 -
__repr__
: 返回描述模块的字符串
未完待续,CenterPoint 源码流程解读(二)文章来源地址https://www.toymoban.com/news/detail-474096.html
到了这里,关于CenterPoint 源码流程解读(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!