1.传感器
激光雷达、毫米波雷达、摄像头、超声波主要用于自动驾驶中的传感器,其优缺点如下:
1)激光雷达具有较强的测距精度、测距范围和对温度和光的适应性,缺点线束低,识别不良,也可能错过目标(特别是非金属物体)
2)相机对环境细节信息多,但光照影响太大。
3)毫米波探测角度大,抗干扰性强,性能稳定,缺点是分辨率和精度差
4)超声雷达精度差,探测距离短,只有3m。
2.标定
传感器校准主要包括内参和外参。内参主要是焦距,光圈,相机中心偏移等参数,可直接获取或者简单算法测定。这里主要说的是外参校准。外参描述了传感器与其他给定坐标之间的相对位置关系。因此,这里的外参描述相机与短焦相机、相机与雷达或雷达与雷达之间的外参, 都需要单独标定。
校准方法包括使用校准室校准或使用算法校准。使用校准室校准,设置一些参考,主要是角物体,便于定位。校准后也可以纠正误差。具体方法:
(1)相机标定: 多点图像数据 VS 多点参考对象相应角点数据 方法:PNP算法
(2)点云校准: 多点云坐标 VS 多参考物点云数据 方法:ICP算法
使用不同的相机PNP得到一个矩阵,传递两个矩阵,一般用一个矩阵乘以另一个矩阵得到外参,点云也是如此。
3.检测
2D常用的图像检测算法:SSD;yolo系列;centernet
3D常用的点云检测算法:
(1)分割:birdview(2)检测:MV3D
流行算法:VoxelNet,SECOND,PointPillars,Centerpoint
PointPillars
Pillars其实每一点都有xyz或者其他特征,所以点本身也是一个特征向量。然后通过我们的全连接层,Bath Norm,ReLU,还有Max Pooling在这些常规操作之后,它们被转换成一个Pillar里的global特征,代表Pillar特征向量。这个过程其实是对的VoxelNet转化成Voxel过程的简化是VoxelNet对Voxel学习编码的过程。VoxelNet在最后Voxel得到一个global在特征之后,它还需要把它放在global特征再Concat回去,也就是说,每个人复制一份,然后收回原来的点,然后继续迭代这个过程,在最后的内存中使用最后的点global的特征作为VoxelNet整个特征向量。所以PFE它实际上是一种简化,加速了迭代过程。
PointPillars原来是用了Focal loss损失函数作为其分类。Focal loss它是在2018年提出的,也用于二维目标检测,以改善正负样本比例不平衡的问题。公式有两个参数α和γ。这两个参数应提前设置一个超参数,需要通过先验调整。在实际测试中,发现这些参数不是特别容易调整,因为需要使用一些先验信息,所以被加权取代softmax loss,它具有更好的泛化性,因为没有超参数,泛化后的检测效果有所提高,这意味着给出了一些类比较大的权重。
左边的结构是原来的,右边的结构是改进的。当得到点的特征时,它最初包含点xyz坐标和反射率intensity,当然,可能还有其他特征。先做一个radius替换是对内部特征进行初步改变。然后进行,Linear,Batch Norm,Relu,MaxPooling,得到最后一个global的Pillar的特征。
接下来用Radius替换点特征:右边的这个BEV这个视角下的点云图里面,坐标系的原点O,其实是车上的lidar向前的传感器是X的正方向,左边是Y轴的正方向。首先计算一个radius,就是xy二范数,也就是说在这里BEV视角xy在平面上,这个点与原点的距离是radius,替代点的原始特征xy,再加上Y intensity,构成此点变换后的特征。激光雷达点云反射器几乎不间断地获得激光雷达的点云。激光雷达的点云由圆点组成,通过旋转激光反射器几乎不间断获得。此外,在这里BEV在目标检测的视角下,X其实和Y的地位是一样的,所以把xy替换成了radius,把这个radius作为点的基本特征,更符合点云是一圈一圈的原始特征,有助于网络的提升。
RPN是二维目标检测的初始目标Fast-RCN提出的编码解码网络通过提前在网格点上设置初始检测框,然后对应特征图。经过后续处理,这些候选框包含概率分数值和目标类别,最后进行进一步筛选。初始候选框proposals,一开始,你需要在原始图片上取一些初始图片anchor,提供初始框架。在二维目标检测中,即图像目标检测中,由于相同的目标,在不同的拍摄角度,图像上的尺寸不同,有一些距离关系,因此需要设置multi-anchor在图像的目标检测中,匹配图像中的这些目标可以通过不同的大小和长宽比来覆盖。
Apollo的PointPillars模型支持9个类别,其中4个是大类别(Large head),比如汽车、卡车、公交车、工程车。另外5个Small head、行人、bicycle、motorcycle、雪糕筒等,那他们在BEV图中的尺寸有差距,从俯视图的角度来看,这些头有一些差距。因此,我们应该将这些类别分为两个不同的类别RPN head去做检测。例如,在获得最终特征图之前,我们首先使用卷积层输出目标class类别的概率得分,以及body box以及它的回归值direction朝向。
4.融合跟踪
对象跟踪器跟踪分段检测到的障碍物。通常,它通过将当前检测与现有跟踪列表相关联,来形成和更新跟踪列表,如不再存在,则删除旧的跟踪列表,并在识别出新的检测时生成新的跟踪列表。 关联后将估计更新后跟踪列表的运动状态。 在HM匈牙利算法在对象跟踪器中(Hungarian algorithm)用于检测跟踪关联,并使用鲁棒卡尔曼滤波器(Robust Kalman Filter) 运动估计。
可分为:
-
(lidar->local ENU变换坐标系,创建跟踪对象,保存跟踪目标。
-
,(卡尔曼滤波阶段1:预测物体当前位置和速度;Predict阶段)
-
,关联检测对象和跟踪对象;
-
,更新跟踪对象的位置和速度信息。(卡尔曼滤波阶段2:Update阶段)
检测到每一刻Object跟踪列表中的TrackedObject进行,匹配结果分为三类:
-
若匹配成功,则使用卡尔曼滤波器更新信息(重心位置、速度、加速度)等信息;
-
如果不匹配,则缺乏相应的TrackedObject,将Object封装成TrackedObject,添加跟踪列表;
-
目标在跟踪列表中当前时刻的缺失TrackedObject(Object无法匹配),使用时刻速度,跟踪新时刻的重心位置和加速度(卡尔曼滤波器无法更新,缺乏观测状态)。从跟踪队列中删除长期丢失的跟踪目标。
在跟踪对象信息融合阶段,Apollo主要工作是给定一个跟踪对象序列:
(Time_1,TrackedObject_1),
(Time_2,TrackedObject_2),
...,
(Time_n,TrackedObject_n)
每次执行LidarSubNode回调将再次刷新跟踪列表,因此被跟踪对象的信息也将被刷新(重心位置、速度、加速度、CNN物体分割-前景概率,CNN物体分割-各类概率)。N二次调用将获得N个概率分布(N个CNN物体分割-前景概率score,N个CNN物体分割-各种物体的概率Probs),我们需要在每次回调过程中确定物体的类别属性。当然,最简单的方法必须是argmax(Probs)
。但是CNN分割可能会有噪声,所以最好的办法是将N次结果联合起来进行判断。
开发者说|Apollo跟踪对象的信息集成