激光雷达感知

介绍

在Apollo7.0版本中我们提供了一种新的激光雷达障碍物检测模型Mask-Pillars,在Pointpillars的基础上做了两个方向的改进。首先,在主干网络的编码部分(encoder)引入了residual attention模块,用来学习mask信息并以残差(residual)的方式增强特征映射。第二种是在主干网络的解码部分(decoder)后利用pillar-level数据进行监督,这部分只在训练阶段执行。pillar-level训练数据根据前景障碍物pillars的分布生成。从实验验证结果看,Mask-Pillars在Kitti和Waymo数据集上比PointPillars具有更高的性能,尤其是对于障碍物的召回率。

结构

这里我们主要针对在Pointpillars基础上进行的改进:

注意力机制

尽管激光雷达可以采集到高质量的点云数据,但是由于遮挡或距离因素部分障碍物可能点云数量较少,因此我们参考Residual Attention Network for Image Classification在FPN encoder部分添加了注意力层以增强模型的特征表达,由于FPN有3个不同分辨率的特征图,我们的注意力模块也同时作用在3个特征图上。具体的结构可以参考下图,图中S代表Sigmoid函数,F函数形式如公式1所示:

\[ F(x) = (1 + M(x)) * T(x) \tag{1} \]

其中\(T(x)\)为主干模块的输出,\(M(x)\)为注意力模块的输出

Pillar-level 监督

为了进一步提高网络的召回率,我们在训练阶段引入了pillar-level的监督机制。我们注意到,分割算法由于使用了像素级别的监督信息,通常具有较高的召回率。因此我们借鉴了分割网络的思想,添加了一个前景障碍物pillars生成的pillar-level监督数据表示障碍物信息,对输入检测模块之前的特征图进行监督用来表示障碍物分布。pillar-level监督数据根据前景障碍物pillars的高斯分布生成。

最终FPN部分的网络结构如下图所示

图片名称

结果

我们使用MMDetection3D框架进行训练,在KITTI验证集上结果如下表所示,PointPillars的模型指标来自于mmdetction3d官方

Method

3DmAP
Mod.

Car
Easy Mod. Hard

Pedestrian
Easy Mod. Hard

Cyclist
Easy Mod. Hard

PointPillars

60.11

85.41 73.98 67.76

52.02 46.40 42.48

78.72 59.95 57.25

Ours

62.07

86.13 76.74 74.14

50.79 45.59 41.50

83.91 63.87 61.05

Method

BEVmAP
Mod.

Car
Easy Mod. Hard

Pedestrian
Easy Mod. Hard

Cyclist
Easy Mod. Hard

PointPillars

67.76

89.93 86.57 85.20

59.08 53.36 48.42

80.93 63.34 60.06

Ours

69.49

89.85 87.15 85.55

58.29 53.87 49.98

85.13 67.43 63.85

我们将PointPillars和我们模型在KITTI数据集上的检测结果进行了可视化,如下图所示。从图中可以看出我们的模型具有更好的检出效果。可以看到,我们的模型可以召回被截断和阻挡的车辆:

图片名称

线上部署

这里我们使用libtorch进行线上部署,利用pytorch的torch.jit.trace函数。我们把原来的模型分成5个部分进行转化。更多详细信息,请参阅代码:

"modules/perception/lidar/lib/detector/point_pillars_detection/point_pillars.cc"

启动

为了方便Apollo模型的拓展,我们重构了检测模块以允许更多检测模型可以便捷的添加和切换。只需要修改对应的配置文件就可以选择启动不同的模型。相关的配置文件在路径下:

modules/perception/production/data/perception/lidar/models/lidar_obstacle_pipeline/

下面有多个目录,对应着不同的设备名称。对于激光雷达传感器,修改目录下的”lidar_obstacle_detection.conf”配置文件的detector关键字即可切换检测模型。

Reference