电子说
今天我主要想分享自动驾驶感知技术在探索的过程中,采用的传统方法和深度学习方法。传统方法不代表多传统,深度学习也不代表多深度。它们有各自的优点,也都能解决各自的问题,最终希望将其结合起来,发挥所有方法的优点。
感知系统简介
首先介绍下感知系统。感知可以被看作是对周围世界建模的过程,比如车辆在行驶过程中,需要知道其他物体的地理位置、速度、运动方向、加速度等各种各样的信息,自动驾驶系统接收这些信息之后,再通过后续的规划和控制模块来对车的运动做真正的调节。
感知可以类比为人类眼睛的功能,即观察周围世界的能力:
◆ 采用的传感器:激光雷达、照相机、毫米波雷达等。
◆ 帧信号处理:多传感器深度融合、物体分割、物体检测、物体分类。
◆ 物体追踪:当有多帧信息之后,可以推算速度、加速度、方向等更有意义的信息,甚至可以用多帧的信息调整物体分割的结果。
◆ 道路特征分析:对道路特征进行理解,比如交通信号灯、交通指示牌等。
感知可以认为是自动驾驶系统的基础部分,假如感知不到这个世界,就谈不上对这个世界做出反应,更谈不上后续的路径规划和车辆控制的过程。
2D物体检测
我今天主要介绍关于物体检测部分,因为必须先有了准确的物体检测和分割结果,我们才能对物体做出准确的分类、追踪等。我首先介绍下2D物体检测。
2D物体检测是指以2D信息作为输入(input)的检测过程,而典型的2D输入信息来自于照相机。
传统2D物体检测方法及缺点
传统的 2D 信息检测方法是使用检测框遍历图片,把对应的图片位置抠出来之后,进行特征提取,用 Harris计算子检测角点信息,Canny计算子检测边缘信息等。物体特征被提取并聚集在一起后,通过做分类器(比如SVM),我们可以判断提取的图中是否存在物体,以及物体的类别是什么。
但传统 2D 物体检测方法存在不足:
检测物体时,需要预置检测框,对不同物体需要设置不同的检测框。
自动驾驶需要高级的组合特征,而传统方法提取的特征维度比较低,对后续的分类会造成比较大的影响。
基于深度学习的2D物体检测
卷积神经网络的出现,解决了部分传统2D物体检测方法的不足。
卷积神经网络首先是多层感知机加卷积操作的结合,它的特征提取能力非常不错。因为卷积神经网络经常会有几十、上百个卷积,使其具备高维特征提取能力。
其次,通过 ROI pooling和RPN,整张图可以共享同样的特征,物体检测时不用遍历整张图片,还可以在单次操作中对图片中所有物体进行检测。这种检测方法使物体检测模型真正具备了应用于实际场景中的性能。
目前基于卷积神经网络的2D物体检测有两类分支:
◆ Anchor Based Methods:跟传统方法比较类似,先预置检测框,检测过程则是对预设框的拟合过程。
RCNN(fast,faster)
SSD(DSSD)
YOLO(v1,v2,v3)
RetinaNET
◆ Anchor Free Methods:直接对照特征金字塔的每个位置,回归对应位置上,判断物体是否存在、它的大小是多少等。这类方法是2018年底开始大量出现的,也是未来的一个发展方向。
CornerNet
FSAF
FCOS
这是路测场景中的一个真实检测案例(上图),2D 物体检测已经应用于检测路面上一些小物体。
同时远距离物体检测也是2D物体检测中关注的重点。受限于激光雷达和毫米波雷达的物理特征,远距离物体缺乏良好的检测效果,而照相机在这方面比较有优势,可以和其他的检测方法进行互补。
2D物体检测面临的问题
物体相互遮挡
但是采用照相机做 2D 物体检测不可避免要面临一些问题。因为照相机回馈的图像只有两个维度,当两个物体堆叠时,对一个神经网络而言,图像的特征就比较聚集。
一般做物体检测的过程,会用一些非极大值抑制的方法,对检测结果进行后处理,当特征结果非常密集的时候,这种方法往往会受到影响。
成像质量波动
照相机是可见光设备,因此会受到光照强度的影响,成像质量出现波动。但我们总是希望图中的特征不管是在哪个位置,都能得到足够的表达。
例如,2D图像中远处的车灯和路灯很难区分开,导致可能都被检测为车或者路灯。在这种情况下,特征总会难以区分。
测距 另一个的问题就是测距问题。因为照相机是被动光源的设备,它不具备主动测距的能力。
如果希望借助照相机进行物体测距,就需要做很多的假设或者求解一些病态的数学问题,用以估算车与物体的距离。但这个结果通常不如主动测距设备的结果,比如激光雷达和毫米波雷达。
3D物体检测
正是因为照相机存在上面提到的问题,所以我们物体检测也使用了其他的传感器,将它们的结果共同结合起来,最终达到更可靠的检测效果。
什么是3D物体检测?
3D物体检测,顾名思义就是把3D的一些数据坐标,聚集起来进行物体检测。比如激光雷达,类似于我们拿一支激光笔不断扫描周围,它会提供相对明显的信息。当把3D数据聚集起来之后,我们可以用来推测周围物体的位置,大小,朝向等等。
3D物体检测一个很大的好处就是,我们在2D物体检测中很难区分的物体,有了3D数据提供的距离信息之后,将更容易从距离的维度上分开。这样感知系统在进行物体分割的时候能使用的信息更多,达到一个更好的工作效果。
传统3D分割方法及限制
传统的 3D 分割方法包括:
Flood Fill
DB scan
Graph Cut
它主要是利用一些点的距离信息、密度信息或者点的一些天然属性,比如它的强度,把物体聚类分割。
传统分割方法也存在不少限制,首先是过度分割。
比如上图中的异形车,由于车尾和车头之间有缝隙,在 3D 检测中,它可能会被分割成多个物体,因为点和点之间有间隙,在激光雷达检测时呈现的是离散信息,就会出现过度分割。
传统分割方法的另一个问题是分割不足。
我们将上图出现的情况称为“三人成车”,就是当三个人离的很近的时候,有可能被传统分割方法识别成一辆车。
基于深度学习的3D分割方法
当深度学习与卷积神经网络引入到 3D 物体检测中时,我们发现传统3D分割方法遇到的问题得到较好解决。
首先让点云信息进行特征工程,即将点的位置、反射强度、高级特征聚合在一起,组织成类似图片或者图的关系。随后进行卷积神经网络特征提取,再进行多帧特征的聚合(它的意义是对运动的物体有一个更好的反映),最后输出物体的位置、聚类信息、物体速度。
通过上述深度学习方法,“三人成车”的情况得到避免。系统不仅可以提取人的距离关系,还可以提取到更多的高级信息,比如在点云变化中,人类的点云形似长的柱体,而自行车类似于小山一样的点云分布,这样感知系统可以了解这些障碍物不属于同一物体,而将其割离开。
深度学习3D分割方法的限制
另一方面,我们也要认识到深度学习分割方法也可能面对的挑战。
◆ 结果的不完全可控:首先卷积神经网络经常有几百层的卷积层,参数总量可能有百万级,并且是自动学习的,这可能会导致对网络的输出缺少把控。换句话说,系统无法预期数据输入(input)后会得到怎样的数据输出,于自动驾驶而言,这是比较致命的。因为自动驾驶对场景的召回率和精度有非常高要求,如果车辆在行驶中,前面的一位行人miss(丢失),这是极其严重的隐患。
◆ 无法保证100%的召回(recall):如上图所示,垃圾桶和行人的特征其实非常相似,那么深度学习可能会出现把人学成了垃圾桶,最后导致行人在感知系统中出现丢失的情况。
◆ 易导致过拟合:由于卷积神经网络有非常好的特征提取能力,固定的数据集训练可能导致神经网络过拟合。例如同样的数据集训练后,在北京路测的表现很好,但是当到达一个新的城市进行测试时,因为路面特征和北京有所区别,可能导致物体分割效果下降,这对感知系统非常不友好。
优点兼得:传统方法和深度学习方法的结合
为了解决分割方法的限制,我们的想法是将传统方法和深度学习方法的结果进行结合:
◆ 使用深度学习的分割结果调整传统分割方法的结果。
◆ 使用传统分割方法的结果补足深度学习结果的召回。
◆ 基于多帧追踪的概率模型融合:比如利用马尔可夫分布的特点、贝叶斯的方法对多帧数据进行一定的平滑,以得到更好的效果。
通过传统方法和深度学习方法的相互结合与补充,我们最终可以实现优点兼具的物体检测策略。
做自动驾驶真的是一个很崎岖的旅程,不断的解决问题之后又出现新的问题,不过正是因为过程的艰难,才带来更多的快乐。
感知系统基本介绍
Perception(感知)系统是以多种传感器的数据与高精度地图的信息作为输入,经过一系列的计算及处理,对自动驾驶车的周围环境精确感知的系统。
它能够为下游模块提供丰富的信息,包括障碍物的位置、形状、类别及速度信息,也包括对一些特殊场景的语义理解(例如施工区域,交通信号灯及交通路牌等)。
感知系统的构成与子系统
◆ 传感器:涉及到传感器的安装,视场角,探测距离,数据吞吐,标定精度,时间同步等。因为自动驾驶使用的传感器比较多,时间同步的解决方案至关重要。
◆ 目标检测及分类:为了保证自动驾驶的安全,感知系统需要达到近似百分之百的召回率及非常高的准确率。目标检测及分类往往会涉及到深度学习方面的工作,包括3D点云及2D Image(图片)上的物体检测及多传感器深度融合等。
◆ 多目标追踪:跟进多帧的信息计算并预测障碍物的运动轨迹。
◆ 场景理解:包括交通信号灯,路牌,施工区域,以及特殊类别,比如校车,警车。
◆ 机器学习分布式训练基础架构及相关评价系统
◆ 数据:大量的标注数据,这里包括3D点云数据及2D的图片数据等。
传感器详解
目前自动驾驶应用的传感器主要分为三类:激光雷达(LiDAR),相机(Camera),毫米波雷达(Radar)。
开头提到,感知系统的输入为多种传感器数据和高精地图,而上图展示了感知系统物体检测的输出结果,即能够检测车辆周围的障碍物,如车辆、行人、自行车等,同时结合高精度地图,感知系统也会对周边的Background(环境背景)信息进行输出。
如上图所示,绿颜色的块状代表一辆乘用车,橙色代表一辆摩托车,黄色代表一位行人,灰色则是检测到的环境信息,如植被。
感知系统结合多帧的信息(上图),还能对运动的行人和车辆的速度、方向、轨迹预测等进行精确的输出。
传感器配置与多传感器深度融合
了解了关于感知系统从输入到输出的大致介绍,接下来,我简要介绍一下小马智行第三代自动驾驶系统PonyAlpha的传感器安装方案以及多传感器深度融合的解决方案。
传感器安装方案
目前PonyAlpha传感器安装方案的感知距离能够覆盖车周360度、范围200米以内。
具体来看,这套方案用到了3个激光雷达,在车的顶部和两侧。同时,通过多个广角的摄像头来覆盖360度的视野。远处的视野方面,前向的毫米波雷达以及长焦相机将感知距离扩到200米的范围,使其可以探测到更远处的物体信息。这套传感器配置能保证我们的自动驾驶车辆在居民区、商业区、工业区这样的场景进行自动驾驶。
多传感器深度融合解决方案
多传感器深度融合的基础 多传感器深度融合的方案首要解决的是将不同的传感器的数据标定到同一个坐标系里,包括了相机的内参标定,激光雷达到相机的外参标定,毫米波雷达到GPS的外参标定等等。
传感器融合重要前提是使标定精度达到到极高水平,不论对于结果层面的传感器融合还是元数据层面的传感器融合,这都是必要的基础。
通过上图你会发现,我们的感知系统将3D的激光点云精准地投射到影像上,可见传感器标定的精度是足够高的。
不同传感器的标定方案 整个传感器标定的工作基本上已做到完全自动化的方式。
首先是相机内参的标定(上图),这是为了修正由相机自身特性导致的图像扭曲等。相机内参的标定平台使每一个相机能够在两到三分钟之内完成传感器的标定。
其次是激光雷达与GPS/IMU的外参标定(上图),激光雷达的原始数据是基于雷达坐标系,因此我们需要将点由雷达坐标系转换为世界坐标系,这就涉及到激光雷达与GPS/IMU相对位置关系的计算。我们的标定工具在室外通过优化的方案,能够快速找到最优的位置关系。
第三是相机到激光雷达的融合(上图)。激光雷达的感知环境是360度旋转的方式,每旋转一周是100毫秒,而相机是某一瞬时曝光,为了保证相机的曝光与激光雷达的旋转保证同步,需要对二者进行时间同步,即通过Lidar来触发相机曝光。比如说,可以通过激光雷达的位置信息来触发对应位置相机的曝光时间,以达到相机与激光雷达的精确同步。
3D(激光雷达)和2D(相机)彼此互补,二者更好的融合可使得感知得到更精确的输出。
最后是毫米波雷达(Radar)与GPS/IMU的标定(上图),同样是将Radar数据由Local(本地)坐标系将其转换到世界坐标系,我们将通过真实的3D环境来计算Radar与GPS/IMU的相对位置关系。好的标定结果能够保证感知系统给出200米距离以内障碍车的车道信息(如位于车道内或压车道线等)等。
下面这个demo视频简明生动地展示了多传感器深度融合的部分处理效果。
车载感知系统架构
那么车载感知系统架构是什么样的?它的解决方案又是什么?
上图展示了整个车载感知系统的架构。首先激光雷达、相机、毫米波雷达三种传感器数据须进行时间同步,将所有的时间误差控制在毫秒级。结合传感器数据,感知系统以帧为基础(frame-based)进行检测(detection)、分割(segmentation)、分类(classification)等计算,最后利用多帧信息进行多目标跟踪,将相关结果输出。这个过程中将涉及到多传感器深度融合和深度学习相关的技术细节,我这里不做过多的讨论。
感知系统的解决方案应保证以下五点:
◆ 首先是安全,保证近乎百分之百的检测(Detection)召回率(Recall)。
◆ 精度(Precision)要求非常高,如果低于某个阈值,造成False Positive(误报),会导致车辆在自动驾驶状态下行驶得非常不舒适。
◆ 尽量输出所有对行车有帮助的信息,包括路牌,交通信号灯及其它场景理解的信息。
◆ 保证感知系统的高效运行,能够近实时处理大量的传感器数据。
◆ 可扩展性(Scalability)也很重要。深度学习(Deep learning)依赖大量数据,其训练模型的泛化能力对于感知系统非常重要。未来,我们希望模型(model)和新算法有能力适配更多的城市和国家的路况。
感知技术的挑战
感知精度与召回率相平衡的挑战
上图展示了晚高峰时期十字路口的繁忙场景,此时有大量行人、摩托车穿过十字路口。
通过3D点云数据(上图),能够看到此时对应的感知原始数据。
这里挑战是,经过计算处理后,感知系统需要在这样环境下输出所有障碍物的正确的分割(segmentation)结果和障碍物类别。
除了繁忙的十字路口,感知系统在处理一些特殊的或者恶劣的天气条件,也面临不小挑战。
突降暴雨或者长时间降雨往往会造成路面积水,车辆经过自然会溅起水花。上方视频中白色点云展示了激光雷达检测到其他车辆经过溅起的水花并对其进行filter(过滤)的结果。如果感知系统不能对水花进行准确的识别和过滤,这会对自动驾驶造成麻烦。结合激光雷达与摄像头(Lidar&Camera)的数据,我们的感知系统对水花有很高的识别率。
长尾场景挑战
洒水车 上图是我们在路测时曾遇到的两类洒水车(上图)。左边洒水车采用向上喷的雾炮,而右边是向两侧喷洒的洒水车。
人类司机遇到洒水车时,可以很容易做出判断并超过洒水车,但是对于感知系统来说,则需要花一定时间去处理和识别这类场景和车辆,我们的自动驾驶在遇到类似场景已获得更优的乘坐体验。
小物体的检测
小物体检测的意义在于,面对意想不到的路测事件,比如流浪的小猫、小狗突然出现马路上,感知系统对这类小物体能够有准确的召回,以保证小生命的安全。
红绿灯
随着越来越多地区和国家开展自动驾驶路测,感知系统在处理交通信号灯总会遇到新的长尾场景。
例如,逆光的问题(上图)或者突然从桥洞中驶出后相机曝光的问题,我们可以通过动态调整相机的曝光等方法来解决问题。
还有红绿灯倒计时的场景(上图),感知系统可以识别出倒计时的数字,这样能够让自动驾驶车辆在遇到黄灯时/前,给出更优的规划决策应对,优化乘车体验。
雨天时,摄像头(照相机)会水珠密布(上图),感知系统需要处理这类特殊气候条件下的场景,准确识别红绿灯。
一些地区使用的红绿灯带有进度条(上图),要求感知系统能够识别进度条的变动,这样可以帮助下游的规划决策模块在绿灯将变黄时,提前给出减速。
全部0条评论
快来发表一下你的评论吧 !