MMDetection3D的点云数据一般会经历如下步骤/模块:


下面分别介绍每个部分的一些典型模型。

0.体素化函数
  在介绍体素编码器前,需要先介绍体素化函数,以理解体素编码器的输入参数含义。

0.1 mmcv.ops.voxelize中的Voxelization类
初始化参数:

注:将体素大小z_zise设置为与点云高度范围相同时,就可以实现柱体化操作。

forward函数:

0.2 MVXTwoStageDetector类中的体素化函数voxelize
初始化:初始化mmcv.ops.voxelize中的Voxelization类为self.points_voxel_layer
voxelize函数:

1. 体素编码器(VOXEL_ENCODERS)
1.1 HardSimpleVFE

作用:将体素内的点取平均作为体素特征。通常搭配SparseEncoder中间编码器。
初始化参数:

参数名称 数据类型 默认值 含义 取值说明
num_features int - 点云的特征维度 记为C CC

forward函数:

1.2 PillarFeatureNet
  用于点云的柱体表达编码。通常搭配PointPillarsScatter中间编码器。

初始化参数:

forward函数:

2.2 PointPillarsScatter
  用于点云的柱体表达编码。可搭配PillarFeatureNet体素编码器。

作用:将柱体特征根据柱体坐标和batch_id生成BEV特征图。
初始化参数:

forward函数:与SparseEncoder的forward函数输入和输出含义相同。
3. 主干网络(BACKBONES)
3.1 SECOND

  SECOND主干网络通常搭配SECONDFPN颈部网络。前面可搭配体素操作(如HardSimpleVFE + SparseEncoder)或柱体操作(如PillarFeatureNet + PointPillarsScatter)。

初始化参数:

forward函数:

4. 颈部网络(NECKS)
4.1 SECONDFPN

  SECONDFPN颈部网络通常搭配SECOND主干网络。

初始化参数:

use_conv_for_no_stride=False且upsample_stride=1时,或upsample_stride>1时使用upsample_cfg搭建DeConv卷积,否则(即use_conv_for_no_stride=True且upsample_stride=1,或upsample_stride<1)使用conv_cfg搭建Conv2d卷积
forward函数:

5.检测头(DENSE_HEADS)
检测头模块需要注意两点:
  一是loss函数的计算以及预测结果的生成均是在检测头中实现的方法;
  二是检测头初始化一般都有train_cfg和test_cfg两个参数,但在配置文件中,这两个参数往往需要写到检测器模型(DETECTOR)中而非检测头中。

5.1 CenterHead
  CenterPoint的检测头。可搭配SECOND + SECONDFPN结构使用。
初始化参数:


  train_cfg和test_cfg均为字典格式,这里单独拿出来介绍:

train_cfg包含:

test_cfg包含:

forward函数(训练和测试阶段均会调用):

loss函数(训练阶段调用):

get_bboxes函数(测试阶段调用):