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函数(测试阶段调用):
评论(0)
您还未登录,请登录后发表或查看评论