最早使用神经网络来检测车道线,分割地面和驾驶的自动驾驶汽车叫 ALVINN,创建于1989年。
Autonomous Land Vehicle In a Neural Network
天哪!神经网络早在1989年就已经被使用了!这种方法还是端到端的: 神经网络接收输入的一个图像,然后输出一个方向盘转向角度。
到了2021年,情况更加疯狂: 深度学习已经接管了自动驾驶的主要分支领域。
在本文中,我将向你展示深度学习是如何应用的,以及具体在哪里使用。
为了达到这个目的,下面介绍自动驾驶的所有4大支柱,并解释如何使用深度学习。
简而言之:
- 在 感知(Perception) 中, 你发现周围的环境和障碍。
- 在 定位(Localization) 中, 你在世界中确定了自己的位置,精度在 1-3 cm。
- 在 规划(Planning) 中, 你利用感知和定位,确定了从 A 到 B 的轨迹。
- 在 控制(Control) 中, 你产生方向盘转向角度和加速度值来沿着轨迹行进。
在本文中,你将学习到如何在所有4个模块中实现深度学习,以及如果希望从事自动驾驶汽车的工作,你需要学习哪些技能才能成为深度学习工程师。
>> 感知中的深度学习
来源:Nvidia Drive Labs
感知是自主驾驶的第一个支柱,正如你所想的那样,其中涉及到大量的深度学习。每一个学习深度学习课程的学生都会听过“深度学习用于自动驾驶汽车寻找障碍物或车道线”。这些应用属于感知。
感知通常使用3种传感器:
- 摄像头(Camera)
- 激光雷达(LiDAR/Light Detection and Ranging)
- 雷达(RADAR/Radio Detection and Ranging)
摄像头检测
在下面的图表中,我展示了最重要的用例,它们是如何实现的,以及如何自学来实现它们。
- 标淡黄色的地方, 你可以看到如何用传统技术来解决任务。
- 标深黄色的地方, 你可以看到如何用深度学习来解决任务。
- 标蓝色的地方, 是推荐的在线课程,如果你想学习的话。
计算机视觉中的深度学习
正如你所看到的,计算机视觉需要大量的深度学习来完成检测任务。
在车道线检测和分割中,我们使用深度学习超过了传统技术,因为它们更快更有效。像 LaneNet
这样的算法在车道线提取的研究领域相当流行。
2D 目标检测也是感知的核心。 像 YOLO 或 SSD 这样的算法已经得到了很好的解释,并且在这个领域非常流行。它们会不断更新,用新的代替,但 idea 是相似的。
最后,很多摄像头配置是双目的(Stereo)。 拥有立体信息有助于我们建立所谓的伪激光雷达(Pseudo-LiDAR)。我们可以完全模拟甚至有时取代激光雷达,因此可以用摄像头(2D 传感器)进行 3D 感知。
因此我们过去使用传统的计算机视觉实现块匹配(Block Matching),现在转向了深度学习。
激光雷达检测
首先,基于 RANSAC 算法、3D 聚类、 KD树和其他非监督式学习技术的传统方法仍然是许多机器人应用的首选。
然而,这些将被更快更安全的深度学习方法所取代。 为什么?因为这些简单的算法不能分类,也不能分开识别靠得很近的两个人。学习式的方法在这里更合适。
苹果公司(VoxelNet)、 UBER ATG 公司(PIXOR and Fast and Furious)、 nuTonomy 公司(PointPillars)和牛津大学(RANDLANET)等都发布了很多 3D 目标检测论文。
在他们的核心,我们会发现如 3D CNNs 或 PointNet等技术。这些都是 3D 深度学习的基础。
近年来,利用深层神经网络进行激光雷达检测的技术正在蓬勃发展。这是自动驾驶汽车研究中最活跃的领域之一。
雷达检测
雷达是一种非常成熟的传感器。它已经有100多年的历史了,说它不需要深度学习来提高效率并不可耻。几十年前我们就能够利用雷达来测量障碍物的速度了。事实上,如果你最近收到一张超速罚单,那就是因为雷达。
深度学习算法开始在雷达系统中出现了,例如论文 《Centric 3D Obstacle Detection》 或 《RADAR Region Proposal Network》。但这似乎仍然是很早期的研究。
传感器融合
感知的最后一部分是传感器融合。
为了使检测“确定”,我们包括了所谓的冗余。这个想法很简单: 我们合并来自传感器的数据,然后检查它们是否传递了相同的信息。
对于一家使用全部3种传感器的公司来说,有3种合并方法:
- 合并摄像头和激光雷达
- 合并摄像头和雷达
- 合并激光雷达与雷达
这里有一张图,展示了我们在传感器融合中使用的所有深度学习方法。
传感器融合中的深度学习
早期和后期融合需要区分清楚。
- 早期融合(Early Fusion) 是指融合原始数据, 如激光雷达点云和图像像素。
- 后期融合(Late Fusion) 是指融合检测的输出, 如 2D 和 3D 边界框。
有趣的是,深度学习的适用性或多或少取决于所使用的传感器。
对于激光雷达摄像头融合,可以应用不少传统的方法。但是深度学习非常适合这个过程。既然我们很好的用深度学习处理了摄像头和激光雷达,那么用它来融合这两者就不难理解了。
由于雷达没有使用大量的深度学习,它更加复杂,你会发现很多经典方法,包括卡尔曼滤波器
,IOU 匹配
和跟踪
。
同样,你开始看到深度学习在传感器融合中的影响。这门学科通常是非常传统的,使用了大量的机器人技术和贝叶斯过滤。它倾向于使用计算机视觉特征检测器而不是 CNN, 现在,它正在转变成一个深度学习的学科。
>> 定位中的深度学习
定位就是寻找车辆自己在世界中的位置。我们首先想到的是使用 GPS,但是你会发现它可能非常不准确,并且可能不能每次都完美地工作,例如当天气阴沉的时候。最后,GPS 精确到 1-2 米,而我们的目标是 1-3 厘米。
这个问题创造了一个我们称之为定位的大领域。
根据算法的选择,我们有很多定位的方法:
知道地图和初始位置的情况:
想象你在纽约,第五大道(我想念旅行了...?)。想象一下你有一张纽约的地图。从理论上讲,你只需要数一数你在街上走了多少步,就能知道10分钟步行后你会在哪里。这是第一种情况,你有地图(纽约)和你的位置。
知道地图,但不知道最初位置的情况:
现在想象一下,你仍然在纽约,但是你被绑架了,被蒙住了眼睛,被安置在其他地方。你需要用你的眼睛和地图知识来确定你的位置。当你认出一些熟悉的东西,比如帝国大厦,你就会知道你在哪里!
因此,这两种都依赖于所谓的地标(landmark)检测。我们想要探测我们知道的东西在地图的哪里。
定位中的深度学习
为此,我们使用扩展卡尔曼滤波器(Extended Kalman Filters)和粒子滤波器(Particle Filters)。
正如你所注意到的,我们也在使用里程计(Odometry,车轮转动了多少)、GPS、GPS-RTK(一种更好的 GPS)和 UWB (使用物理设备进行三边测量)。
如果你正在找哪里是深度学习,这里的地标检测,正是在感知阶段获得的。
既不知道地图也不知道初始位置的情况:
现在想象一下,你被绑架了,被蒙上了眼睛,放在纽约的某个地方,但是你没有地图。
这就是所谓的即时定位与地图构建(Simultaneous Localization And Mapping/SLAM):你需要同时定位和建立你周围环境的地图。
SLAM 领域最初使用了大量的贝叶斯滤波器,比如卡尔曼滤波器和粒子滤波器,但是一种叫做视觉里程计( Visual Odometry) 的东西目前正在蓬勃发展。
这个想法是使用传感器,如摄像头,或双目摄像头,以重建环境,生成一个地图。这是一张 SLAM 思维导图。
SLAM中的深度学习
正如你所看到的,有很多深度学习的东西涉及到建图和定位...... 但这个领域主要不是用深度学习。如果你想成为一名定位工程师,对机器人技术和传统技术的了解要比深度学习重要得多。
>> 规划中的深度学习
规划是无人驾驶汽车的大脑。从障碍物预测到轨迹生成。其核心是决策制定。
我们可以将规划世界分为三个步骤:
- 高层/全局规划(High-Level/Global Planning) —— 规划从 A 到 B 的路线。
- 行为规划(Behavioral Planning) —— 预测其他障碍,并作出决策。
- 路径/本地规划(Path/Local Planning) —— 避开障碍物,创建一个轨迹。
在自动驾驶汽车中使用深度学习,最好的方法是进行感知......第二好的方法是通过规划。
高层规划
第一件事是编写一条从 A 到 B 的路线,就像谷歌地图。为此,我们将不得不使用图搜索算法,如 Dijkstra,A* ,DFS,BFS,...。
通常使用 A* 。
但是你也可以在这里找到很多深度强化学习: 这就是所谓的概率规划。
规划中的深度学习
行为规划
这一步骤包括两个子步骤:
- 预测
- 决策
在预测中,我们希望利用时间信息和数据关联来了解未来的障碍物在哪里。有基于学习的方法,如高斯混合模型(Gaussian Mixture Models)的意图预测和卡尔曼滤波器方法。
决策是另外一回事。我们要么手动输入一些规则并创建一个有限状态机,要么使用强化学习方法。
路径规划
要了解在地图上你应该去哪里,全局规划足够了。但是,比如有一辆车挡住了路,那该怎么办?如果交通灯是红色的怎么办?如果车流很慢呢?我们需要做点什么,比如改变轨迹,或者停车。
正在应用的算法很多,如快速探索随机树(RRT),RRT* ,概率路图(PRM) ,PRM* 等。
在规划中,如果我们要使用深度学习,大多数情况下可以在预测中使用,或者使用强化学习方法进行路径规划。
>> 控制和其他应用中的深度学习
控制
控制,正如在介绍中所说的,是关于跟随生成的轨迹生成一个转向角度和加速度值。
当我在为了写这篇文章进行搜索的时候,刚开始我想“在控制中没有深度学习”,我错了。
事实证明,深度强化学习已经开始出现同时在规划和控制中,而且是和 ALVINN 一样的端到端的方法。
其他应用
自动驾驶的四大支柱多少都用到了深度学习。然而,还有很多其他地方可以应用深度学习。
可解释的 AI,GAN 产生合成数据集,主动学习得到半自动标注,等等。
总结
如果你已经读到了这里,恭喜你! 你现在比10分钟前更懂自动驾驶汽车了!
正如你所看到的,深度学习在自动驾驶的很多领域都有很好的应用,而且它正出现在更多的其他领域。
原文: https://becominghuman.ai/deep-learning-algorithms-in-self-driving-cars-14b13a895068