感知是自动驾驶的第一环,十分重要,同时感知算法要考虑传感器的功能特性、适配其采集到的数据,才能开发出更好的算法。感知算法根据使用的传感器不同而不同。
激光雷达(Lidar)点云感知的两种检测算法——启发式的Ncut、深度学习算法CNNSeg
点云障碍物感知的主要任务是感知障碍物的位置、大小、类别、朝向、轨迹、速度等。核心是点云检测分割技术
启发式Ncut
特别注意:首先要利用地图信息对点云进行预处理;例如:去除ROI(感兴趣区域)之外的点云,降低点云图的复杂度。
算法核心思想:将点云转化为拓扑图分割问题,利用图聚类的方法(Ncut)解决问题,每一簇即为一个障碍物,虽然可以予点云以区分,但是缺乏对应的语义信息。
深度学习方法:CNNSeg
算法核心思想:利用卷积神经网络来处理激光雷达捕获的点云数据,并对点云中的目标进行识别;关键词:数据驱动、特征学习。
Apollo的实践:
1.前视图(front-view):将所有点云都投到前视图(front-view)(投影面是一个圆柱面)来构造特征,将点云问题转化为矩阵问题,进而使用深度学习进行处理。通过构建全卷积神经网络对前向视图进行处理。
2.制作俯视图:借助自采集车队,采集更多的实际数据,并且扩展数据视角,制作俯视图,通过将俯视图+前视图相结合的方式进行训练。同时,修改Loss函数,包括使用3D回归和Segmentation的损失函数。如下图:
但是俯视图没有高度信息,于是把前视图和Camera图像加进来进行辅助检查,综合了Lidar测距准和Camera识别准的优点,从而诞生了Middle-Level Fusion方法(Multi-View 3D Object Detection Network for Autonomous Driving);该方法使用俯视图提取Proposal,利用前视图和光学图像辅助进行更加精准的位置回归。流程图如下:
视觉感知——CNN检测、CNN分割与后处理
视觉感知最早从ADAS(高级驾驶辅助系统)发展而来(ADAS采用人工构造的特征,使用浅层分类器);现在主流已经变为“深度学习+后处理计算”;其特点是计算硬件要求升级、数据需求量大增、安全性评估的变化。
面向自动驾驶的深度学习的特点:1.2D感知向3D感知渗透,模型输出更丰富(后处理需要的3D信息、跟踪信息、属性信息等都会放在CNN中进行学习);2.环视能力构建(传统方法靠一个Camera完成前向检测、碰撞检测、车道线检测。无人驾驶需要环视);3.感知+定位+地图紧密结合。
自动驾驶领域的CNN检测
1.场景有几何约束(规则道路),可以辅助检测
2.模型输出需要更加丰富;Detectation--->2D to 3D--->Tracking
3.多任务学习(学习多种障碍物特征),网络结构适配;(由多个专用网络则流程太长难以满足需求)
4.属性识别——不仅限于障碍物级别的输出
CNN分割
分割与检测有相似之处,但是分割粒度更细,相比于检测的“画框”,它要求边缘分割
后处理—— 针对下游模块
2D-to-3D的几何计算:需要考虑相机位姿的影响、接地点、稳定性
时序信息计算(针对跟踪处理):相机帧率与延时的要求、跟踪不能耗费太多时间、利用检测模块的输出进行跟踪;考虑轻量级的Metric Learning
多相机的环视融合:相机布局决定融合策略,要做好视野重叠
红绿灯检测算法、Radar感知与超声波感知
红绿灯检测算法:
任务描述:在距离停止线50~-2米的范围内精准识别红绿灯亮灯状态,检测精度要求非常高(需要达到99.9%),同时召回不能太低(recall = TP/(TP + FN));天气等环境问题;红绿灯的制式;
自动驾驶中使用深度学习进行红绿灯感知模块的构建,主要分为以下几步:
1.相机选择和安装
2.高精地图的交互
3.使用深度学习识别灯颜色的变化(分为检测和颜色分类两步)