Apollo Lidar感知Cnn_seg原理
高精地图ROI过滤器(HDMap ROI Filter) 参考博客
ROI(The Region of Interest)指定从高精地图检索到包含路面、路口的可驾驶区域。高精地图 ROI 过滤器(往下简称“过滤器”)处理在ROI之外的激光雷达点,去除背景对象,如路边建筑物和树木等,剩余的点云留待后续处理。
输入:激光雷达捕捉的3D点数据集 输出:由高精地图定义的ROI内的输入点索引
包括三步:1.坐标转换:Apollo将输入点云和HDMap多边形变换为来自激光雷达传感器位置的地方坐标系。
2.ROI LUT构造:Apollo采用网格显示查找表(LUT),将ROI量化为俯视图2D网格,以此决定输入点是在ROI之内还是之外。3.ROI LUT点查询:基于ROI LUT,查询每个输入点的关系使用两步认证。对于点查询过程,Apollo数据编译输出如下,:检查点在ROI LUT矩形区域之内还是之外。查询LUT中相对于ROI关联点的相应单元格。收集属于ROI的所有点,并输出其相对于输入点云的索引。
高精地图ROI过滤之后,Apollo得到已过滤、只包含属于ROI内的点云,大部分背景障碍物,如路侧的建筑物、树木等均被移除,ROI内的点云被传递到分割模块。分割模块检测和划分前景障碍物,例如汽车,卡车,自行车和行人。
基于卷积神经网络分割(CNN Segmentation)
该模块的输入:表示在HDMap中定义的ROI内的点的点索引 输出:对应于ROI中的障碍物对象数据集
Apollo 使用深度卷积神经网络FCNN提高障碍物识别与分割的精度,障碍物分割包含以下四步:
1.通道特征提取
给定一个点云框架,Apollo在地方坐标系中构建俯视图(即投影到X-Y平面)2D网格。 基于点的X、Y坐标,相对于LiDAR传感器原点的预定范围内,每个点被量化为2D网格的一个单元。 量化后,Apollo计算网格(0.25m??)内每个单元格中点的8个统计测量。
1.单元格中点的最大高度
2.单元格中最高点的强度
3.单元格中点的平均高度
4.单元格中点的平均强度
5.单元格中的点数
6.单元格中心相对于原点的角度
7.单元格中心与原点之间的距离
8.二进制值标示单元格是空还是被占用
2.基于卷积神经网络的障碍物预测(进行鸟瞰投射的预处理,采用二维网格在鸟瞰角度对有效距离切割后的点云数据进行分割,二维网格化分割后,点云中的每一个点均落在对应的二维网格内,可以用网格格子的位置索引到点云中的任意点)
Apollo使用深度完全卷积神经网络(FCNN)来预测单元格障碍物属性,包括潜在物体中心的偏移位移(称为中心偏移)、对象性 积极性和物体高度。网络的输入为 W x H x C 通道图像,其中:W 代表网格中的列数 H 代表网格中的行数 C 代表通道特征数
完全卷积神经网络由三层构成:下游编码层(特征编码器)上游解码层(特征解码器)障碍物属性预测层(预测器)
特征编码器将通道特征图像作为输入,并且随着特征抽取的增加而连续下采样其空间分辨率。 然后特征解码器逐渐对特征图像 上采样到输入2D网格的空间分辨率,可以恢复特征图像的空间细节,以促进单元格方向的障碍物位置、速度属性预测。 根据具有非线性**(即ReLu)层的堆叠卷积/分散层来实现 下采样和上采样操作。在基于CNN的预测之后,Apollo获取单个单元格的预测信息。利用四个单元对象属性图像,其中包含:中心偏移 对象性(??) 积极性(??) 对象高度
channel 0: category_pt 是否是物体预测。Sigmoid**,并与输入channel 7掩码mask相乘
channel 1-2: instance_pt 中心偏移预测(包括x方向和y方向的偏移)
channel 3: confidence_pt 前景物体概率预测。Sigmoid**
channel 4-8: classify_pt 物体类别预测。Sigmoid**(可以对5种物体进行预测,如行人,汽车,自行车等)
channel 9-10: heading_pt -
channel 11: height_pt 高度预测。
通过对12个特征进行处理可以得到单元格的4个属性,这4个属性分别用于障碍物集群和后期处理
3.障碍物集群(聚类)
为生成障碍物,Apollo基于单元格中心偏移,预测构建有向图,并搜索连接的组件作为候选对象集群。
如图3所示,每个单元格是图的一个节点,并且基于单元格的中心偏移预测构建有向边,其指向对应于另一单元的父节点。Apollo采用压缩的联合查找算法(Union Find algorithm )有效查找连接组件,每个组件都是候选障碍物对象集群。对象是单个单元格成为有效对象的概率。因此,Apollo将非对象单元定义为目标小于0.5的单元格。因此,Apollo过滤出每个候选对象集群的空单元格和非对象集。
4.后期处理
聚类后,Apollo获得一组候选对象集,每个候选对象集包括若干单元格。在后期处理中,Apollo首先对所涉及的单元格的积极性和物体高度值,平均计算每个候选群体的检测置信度分数和物体高度。 然后,Apollo去除相对于预测物体高度太高的点,并收集每个候选集中的有效单元格的点。 最后,Apollo删除具有非常低的可信度分数或小点数的候选聚类,以输出最终的障碍物集/分段。
在后期处理中,Apollo首先对所涉及的单元格的积极性和物体高度值,平均计算每个候选群体的检测置信度分数和物体高度。 然后,Apollo去除相对于预测物体高度太高的点,并收集每个候选集中的有效单元格的点。 最后,Apollo删除具有非常低的可信度分数或小点数的候选聚类,以输出最终的障碍物集。从代码中可以看到 CNN分割器最终识别的物体类型有三种:小机动车、大机动车、非机动车和行人
MinBox 障碍物边框构建(MinBox Builder)标记障碍物的长length、宽width、高heigh
对象构建器组件为检测到的障碍物建立一个边界框。因为LiDAR传感器的遮挡或距离,形成障碍物的点云可以是稀疏的,并且仅覆盖一部分表面。因此,盒构建器将恢复给定多边形点的完整边界框。即使点云稀疏,边界框的主要目的还是预估障碍物(例如,车辆)的方向。同样地,边框也用于可视化障碍物。算法背后的想法是找到给定多边形点边缘的所有区域。在以下示例中,如果AB是边缘,则Apollo将其他多边形点投影到AB上,并建立具有最大距离的交点对,这是属于边框的边缘之一。然后直接获得边界框的另一边。通过迭代多边形中的所有边,在以下图4所示,Apollo确定了一个6边界边框,将选择具有最小面积的方案作为最终的边界框。该部分参考博客
HM对象跟踪(HM Object Tracker)
此处后续会加入PPT
上一篇: 有序表查找(折半,插值,斐波那契).c