自动驾驶能否取代人类司机?四通搬家公司与您探讨


随着二十一世纪计算设备和方法的突飞猛进,迎合人类惰性的自动驾驶技术晋级成为车辆工程领域的显学之一。
自动驾驶实际上并不是一门单一学科,而是个综合课题。涉及很多学科和交叉领域,包括但不限于:雷达学、计算机视觉、传感器、图形处理硬件、人工智能、深度神经网络、AI加速芯片、模拟电路、高精度卫星定位、地图学、伦理学、数学、控制工程等等。
不耽误时间,先说结论:以目前可展望的技术未来,在三十至五十年的时间内,于非固定线路下实现通用的全自动驾驶技术是不可能的。
换句话说,就是00后退休之前,想在我国取代人类司机实现既能在城市中心区域又能在没有道路标线、电驴满街跑的县城道路上实现想去哪就去哪的全天候、全自动驾驶是不可能的。(注意本句中的条件和名词,请勿断章取义)
那么,为什么得出这个结论?自动驾驶技术又是如何实现和发展的?为什么从特斯拉到理想汽车都让你感觉到自动驾驶近在咫尺,从而又和上述结论相矛盾呢?如果全自动驾驶希望渺茫,“半”自动驾驶能否实现?
本文将从自动驾驶领域的人工智能、计算机视觉这两个主要方面带你一窥门径。
在我们的上一篇文章《监控探头如何识别你的车牌?》之中,我们向你阐述了基本的人工智能技术和深度神经网络的概念,强调并解释了深度学习这个概念中“学习”二字的含义。现在,我们将向你描述一下什么是“深度”。因为在实现自动驾驶的诸多技术中,基于深度神经网络的计算机视觉是必不可少的核心。

01
—
“深度”神经网络
在此我们跳出以往诸多文章中专注于对L0到L5自动驾驶分级的讨论,我们直奔核心;现在几乎所有对驾驶环境的计算机视觉感知都是通过神经网络来实现的。
我们人类和动物的大脑学习效率极高且耗能极低,这让迫切想使计算机具备自主学习能力的科学家们好奇起来,通过模仿大脑的神经元结构人们构造出了神经网络。人脑的神经网络非常庞大且复杂,因此越具备深度的人工神经网络越能模仿生物大脑的学习功能。这种模仿生物神经网络而建立的人工神经网络能够学习到图像中某一种或者多种物体的核心特征,目的在于使计算机能够在复杂多变的现实环境中像人一样识别各种“看”到的东西。
说起“深度”神经网络,可能有人会问:“既然有深度神经网络,那有没有浅层神经网络?”——还真有,而且神经网络技术最开始应用的时候就是只有浅层网络,后来经过技术发展和迭代才有了今天的深层网络。神经网络这个由浅入深的发展路线完全建立在硬件和算法的进步之上,这也是其魅力和强大功效所在,让我们简单地走马观花一下。

模仿生物大脑神经元的神经网络在被科学家通过数学结构于上世纪四十年代确立了以后,相关研究和实验一直止步不前,因为诞生于二战后的第一代电子计算机根本没有足够的计算能力去完全实现神经网络。直到八十年代,卷积神经网络诞生了。但是,在当时硬件运算能力有限、缺乏有效训练数据等因素的制约下,人们难以训练不产生大误差的高性能深度神经网络。
在之前的文章中我们提到过,“学习”的本质在于不断降低与目标之间的误差从而不断逼近正确的结果。神经网络中的最前端是输入层,用来输入训练数据也就是视觉图像;最后是输出层,用来给出结果。在输入与输出之间是隐藏层(隐层),隐层可能有很多个,隐层的数量越多,这个神经网络的深度也越深,这就是深度神经网络的“深度”由来。隐层的意义就是把输入数据的特征,抽象到另一个维度空间,来展现其更抽象化的特征,一步一步收集这些特征能更好的进行类别划分。

上图中的每一个圆圈就是人工神经网络的其中一个神经元,每个神经元的任务有三个:输入、判断、输出。这些神经元只要你输入数据就能运转起来,就像汽车只要有油就能跑一样。每一层神经元的内部是不互相连接的,而相邻层的神经元才互相连接。每个神经元都具有自身的权重和值,训练的核心就是让整个网络中的神经元去调整自己的权值使得整个输出结果逼近我们需要的正确目标。
现在,我们需要在这个数学结构上把输入传递给输出,要怎么办呢?答案是——矩阵乘法。当我们做了一次矩阵乘法把输入传递给了输出之后得到一个结果,相当于学习了一次,可是对计算机来说学习一次远远不能逼近正确的目标,需要学习很多次才行。那也意味着这一次的学习结果和目标之间肯定存在误差,因此我们需要把这个误差反馈给整个网络,让网络中的神经元去调整自己的权值以接近正确目标。
所以我们就得让这个误差值沿着来路返回前端去告诉每个神经元它们需要做出权重调整。这个权值如何计算呢?之前我们提到过,微积分中的导数可以求解变化率,所以在整个神经链条上使用矩阵的链式求导法则就可以了。这一系列的动作被称为反向传播算法,也是卷积神经网络的基础架构。
但是现在我们发现了两个重大问题。如果用数学语言表达每个神经元的作用(输入、判断、输出),是这样:

1、第一个问题就出在这个激活函数上,所谓的激活函数就是一个处理变量的计算式,通常的激活函数使用一种叫做Sigmoid的函数处理神经网络上传递给该神经元的误差值。

你不用知道这东西具体怎么算,只需看图就成,蓝色曲线是Sigmoid函数的原始图像。前边我们提到过,如果要处理途径这个神经元的误差并根据这个误差值计算这个神经元所需要调整的权值,就需要计算函数的导数。但是这个Sigmoid函数的导数图像是这个样子(紫色曲线):

纵轴是函数值,横轴是输入值也就是所传递的误差值。你可以看到,一旦输入一个或大或小的误差值,这个导数(紫色)的结果就迅速趋近于0。
这只是一个神经元的处理过程,想象一下,如果有大量的神经元在传递并计算误差的导数,也就是说上一个神经元求出的导数作为一个因子通过矩阵乘法传递给下一个神经元,那么只要经过几次传递,这个“误差值”就会迅速的提前消失了,根本无法按原计划一直返回前端并通知这个链条上的每一个神经元做出修正。
这导致了很多本该做出调整的神经元永远无法得到误差通知,也就永远无法调整自己,这就意味着“学习”多少次都没用。在这个问题解决之前,只能通过降低甚至取消隐层的层数,也就是必须大量减少中间神经元的数量,才能避免整个网络学习失效,这个问题叫做梯度消失。
2、另一个麻烦在于神经网络的图像学习机制。上篇文章我们提到过,神经网络学习图像的过程和人脑视神经元类似,它是通过对图像进行层层抽象、提取特征、学习特征来实现的。其中,这个“层层抽象”的过程就是通过大量隐层来完成的。

比如识别一张人脸图,先抽取边缘特征,再从边缘特征中抽取出五官的各自特征,最后再总体看面部综合特征。上图只是简单的示意图,实际上中间需要大量的隐层来完成各种细节特征的抽象和提取。
问题就出在这,神经网络强制要求每层神经元都对误差进行学习并调整自身,但是有一些特征或者说误差并不需要被如此多次数的传递或调整,也就是说总存在一些应该直接被传递给下一个神经元而不需要在上一处做出改变的量。如果按照网络要求,每层都必须强制完成自我调整任务,没有问题也要制造问题,那就是所谓的“教条主义”,这样做会造成网络学习效率非常低下,最后经常出现偏差。
这个问题用术语解释就是:对于神经网络来说,恒等映射并不容易拟合。
现在你可以了解了,在这两个问题(尤其是第一个梯度消失问题)解决之前,人们无奈地发现,只能通过降低甚至取消隐层的层数才能正常使用神经网络,因此那时候的神经网络就是浅层神经网络,这也是当时未能实现算法优化的妥协。
而浅层神经网络的问题就在于无法处理复杂的图像,因为复杂的图像需要多重隐层对大量复杂特征进行抽象提取,缺乏深度的神经网络只能用于相对简单的图像学习。
这一时期的神经网络并不受到人们的重视,只有很少一部分学者执着地将它们应用到实际工程领域,其中就有今天全球计算机视觉的顶尖专家之一杨立昆(LeCun Yann),他是法国人,目前在Facebook从事人工智能研究。杨立昆在上世纪八十年代末首次将卷积神经网络应用到了自动识别手写支票的领域,这也第一次向世人证明了卷积神经网络在简单图像识别领域的价值。(有趣的是,这种在今天看来可能十分钟就能训练完的仅有5层的浅层网络,当时需要最好的计算机“连轴转”上三天三夜。)

直到2011年,人们通过在神经网络中加入修正线性单元(ReLu)才彻底解决了梯度消失的问题。于是,从那个时候开始,神经网络逐渐开始深化,对神经网络应用于图像识别领域的研究和成果才开始迸发。
2015年,何恺明博士(2003年广东省高考900分满分状元)通过向神经网络中加入“跳线”以便能够跳层直接传递必要的恒等映射而无需经过不必要的误差处理操作,也就是说通过这跟“跳线”,原本一些只需要拷贝而不需要处理的上层特征信息终于可以直接传递给下一个神经元了。换句话说,就是下一个神经元可以直接学习上一层未经处理的残余误差值,于是这种网络称为残差神经网络(ResNet)。

这个创造性的跳层残差结构彻底解决了以往无法传递恒等映射的问题,使误差特征或者上级拟合值能够畅通无阻的传递到低层神经元,这也使得残差神经网络能够训练以往难以企及的深达152层的人工神经网络;这意味着ResNet-152能够识别非常复杂的图像。直到此时,基于神经网络的图像识别领域才算是被彻底引爆,大量新的结构、算法和应用蜂拥而至,计算机视觉领域出现井喷。
再加上硬件领域的进步,我们本次的主题——由人工神经网络所驱动的机器视觉自动驾驶由此开始呈现出爆发的趋势。
(当然了,以上只是人工神经网络的一些大致原理。在上次的车牌识别文章中我们提到过使用由卷积神经网络驱动的目标检测器,实现这样一个检测器的原理就复杂多了,不仅需要双重网络而且其扫描待检测图像的方式具有很强的针对性以及繁杂的计算,不同的参数针对不同的物体。如果图像分辨率变化过大或者扫描参数设置不合理,错误率就会比较高。也就是说不同位置的电子警察探头都经过了针对其位置的微调优化。)
02
—
基于机器视觉的自动驾驶

作为一名老司机,当你坐上驾驶位时基本上就能做到“眼观六路”,这是一名合格驾驶员的必备技能。
因此,对于自动驾驶来说,首要问题就是:看什么?怎么看?
看什么?
首先,你要知道路在哪,不能撞墙,所以你必须看路和车道线。
其次,你必须关注路上其他的物体,包括:其他车辆、障碍物、行人。
最后,你要遵守交通规则,也就是必须观察:各种交通标志和信号灯。
怎么看?
相对于“看什么”来说,“怎么看”才是技术专家们最关心的。
想必上边提到的这些需要看的东西对于已经是老司机的你完全不成问题,但是对于计算机来说却是非常困难的任务。上文已经向你展示了人工神经网络的学习方法,一张图片的识别尚需如此繁琐的步骤,那如果是实时的视频信号呢?实际上,自动驾驶面对的就是大量的实时视频监控信息,也就是作为人类驾驶员的你所看到的所有路上信息都必须以实时视频的形式输入计算机并瞬间做出判断。如果速度慢了,很可能是要出人命的。
换句话说,就是“量化一切”!举个最简单的例子,笔者非常热衷于我国美食,也时常亲自上手烹饪,酷爱那种带有鼓风机的喷火炉灶,但是最不喜欢的也是在菜谱上看到“少许、适量、酌情添加”这样的字眼!我要是知道“少许、适量”是多少我还看菜谱干啥?!当然,也有人说这就是中国菜的精髓所在。但是,对于计算机来说,这样纯靠感觉的模糊表达绝对是行不通的,“感觉”是生物的独有技能,对于电脑来说,所有司机看到的和应该看到的信息都必须被彻底量化、计算和考察!(你必须告诉我:根据我这个锅的大小,用多大的勺!放几勺盐?!!是海盐还是精盐?!!)
得益于专用硬件加速技术的飞速发展,今天的我们才终于有能力使用足够强大的电脑硬件去针对每种细分对象训练一个专业且极具深度和可靠性的人工深度神经网络。
以识别车道线为例,这里展示了基于机器视觉的自动驾驶如何实时识别车道线,并严格按照车道线行驶:
如果我们将各种车道线的图像用复杂的数学公式去表示,神经网络所能做到的就是不断调整自身的网络结构去贴合(拟合)这个车道线表达式。从这一点可以看出,人工神经网络天然具有很强的单一类目标针对性,这是强项也是不足。
就像视频中提到的,由于神经网络强烈的特定目标学习特性,因此单一神经网络的泛用性不佳,必须针对不同类型的交通标志或者不同外观特征的物体部署多个神经网络协同工作,以便有针对性的提升每个网络对它所擅长的目标的检测能力。
接下来的例子更具代表性:识别交通标志。

要知道,交通标志种类繁多,还受到自然环境的影响,各种不同类型的交通标志差异非常大,这种差异远远大过不同车型外观的差异;并且很多交通标志上存在相对复杂的多行文字,使用单一的神经网络对所有交通标志进行甄别显然是做不到的。必须针对不同类型的交通标志训练多个专门识别其中一种标志的神经网络。此外,为满足数据更新的速度和数据准确度的要求,对于算法的性能要求也格外严格,要做到“瞬发”,也就是实时判断,不能有超过人类判断时间的延迟。
本质上,识别的过程就是分类。
高德地图提供了一种有效的方法。
首先,目标检测阶段的目的是通过神经网络目标检测器在图片中检测所有的交通标志,并进行粗分类。然后将检测目标根据外形特征分为多个大类(如圆形、三角形、方形,以及高宽比异常的人行横道等),再为每一类配置专属的RPN网络,各个RPN根据对应的目标尺寸特性设计不同的扫描区域;不同RPN根据需要使用不同层的特征图,设计更有针对性。
这个RPN网络就是Faster RCNN目标检测器的双重网络之一,它并不负责最后的结果分类,它只负责选取出图像中可能是目标的这类对象的候选区域。接下来就是把RPN产生的候选区域输入到分类网络中进行最终的分类。

最后为每个大类交通标志配置独立的精细分类网络,互相之间不干扰;各个大类的迭代完全独立和并行。

简而言之,就是对简单标志用简单一些的网络,对复杂标志用另一个复杂一些的网络,而且要做到协同且互不干扰,还能随时更新。
通过多个深浅不同的神经网络目标检测器协同工作,最终可以获得不错的检测效果:



行人和车辆检测也是类似的方法。如果仅从行人安全检测这方面来说,自动驾驶确实比人类更安全,因为人类司机从看到突然出现的行人到踩下刹车踏板大概需要0.5秒,但是计算机只需0.2秒,别小看这0.3秒的差距,在高速行驶中,这0.3秒就是数十米的距离。
下边让我们来看一看英伟达实验室将上述所有这些机器视觉检测技术以及多重神经网络综合运用时,当前的全自动驾驶能够达成的效果:
另外,类似于传统汽车的倒车雷达,当前的自动驾驶通过毫米波雷达以及超声波雷达来近距离测距,用来感知车辆周围尤其是前后车距。
03
—
事故与结论
说了这么多,我们还没有忘记本文开头的结论:以目前可展望的技术未来,在三十至五十年的时间内,于非固定线路下实现通用的全自动驾驶技术是不可能的。
通过上述文章,你应该大概了解了当前全自动驾驶的基本原理。所以我们就可以明确的指出其局限性所在了。
1、车道线依赖
正如上边的技术展示,人类可以非常轻松的在完全没有车道线或者车道线极为不清的路上自主判断行驶,但是计算机不成,计算机必须依靠画在地上的各种车道线,这不仅造成了在中国的国情下,很多车道划线不全的或者没有车道线的县道、旧路甚至一些国道上全自动驾驶可能完全“看不到”路,而且道路上未清除的旧标线甚至蓄意乱画的车道线可以轻松欺骗自动驾驶造成路线突然自动切换,这会造成严重的交通事故。
已经有视频证实,特斯拉的自动驾驶无法分辨画在路上的突然转向的假车道线:

甚至现在的自动驾驶还会混淆用3D画法画在地上的假人,造成紧急停车。
更有意思的是,故意在路边视频广告中插入只闪现一瞬(一帧)的“紧急停车”标志就可以逼停自动驾驶。因为自动驾驶的探头感知比人类灵敏,能看到那一瞬间的紧急停车标志,于是就认为前方需要紧急停车。如果在高速路边有人蓄意如此干扰,后果也会很严重。
另外,当前具备车道保持功能的车辆在实践中表明,位于右侧车道的车道保持功能常常将匝道上的限速或者路边各种不是交通标志的数字识别成为“限速”,这就导致了常常莫名其妙的突然降速,严重影响驾驶辅助体验。
2、成本
自动驾驶的未来迫切需要更全面和更灵敏的全方位感知,实践证明仅仅依靠多个摄像头还不够,还需要一种叫做激光雷达(LiDAR)的设备,这是一种类似通过激光测距和多频谱空间扫描来对车辆周围世界做出全息3D建模的雷达设备,售价相当不菲,是高清摄像头的几十倍,难以得到普及。

3、卫星和地图依赖
目前,自动驾驶强烈地依赖高精度卫星定位和超高清地图数据。卫星信号无法保证在任何时候都足够清晰。更关键的是超高清地图数据的问题。这种地图数据和普通车载或手机导航中的地图不一样,超高清的交通地图精确到厘米,而且包含更详细的道路交通标志信息。这样的超高清地图测绘牵涉到国防安全问题,注定不可能在所有地方普及,而且中国幅员辽阔,也不可能做到普及。
这也将目前的试验型全自动驾驶局限在了固定线路上。
4、国情以及有待改进的视觉识别算法
当前,美国自动驾驶发生的事故数量是传统汽车的5倍。
另一边,在中国,大量因为堵车而购买带有“自适应巡航”也就是自动跟车功能的车主表示这个功能形同鸡肋。原因在于当前的自动跟车无法很好的处理“加塞儿”车,这就是中国国情。现在的自动跟车面对侧方的加塞儿车要么判定为紧急状况,立即像撞墙一样紧急制动,要么看不到一点一点蹭进来的加塞儿车,仍然不管不顾地向前行驶。这样一来,本想通过自动跟车来节省精力的司机却反而要时刻保持十二分的精神,简直是本末倒置、削足适履。
此外,最近使用辅助驾驶导致理想汽车发生高速斜方追尾的危险事故表明,L2级辅助驾驶仍然存在局限性,无法识别旁边车道上车辆变入主车道,没法在旁边车道车辆并入 1/5 车身的时候识别成主要目标。



严格地说,将这样的事故完全归咎于理想没有意义。因为这是目前基于机器视觉的自动驾驶算法可能存在的通病,尤其是考虑到中国的国情,大量存在的各种不够“识别标准”的道路信息和移动目标。前边说过了,自动驾驶的视觉训练具有相对严格的针对性,无法做到万金油似的通用算法。此外,全自动驾驶是非常非常遵守交通规则和驾驶道德的,高峰时段想加个塞儿?右转道上想直行?想使劲踩一脚油阻止别人超车并入?做梦吧!
所以,在未来相当长的一段时间内,无法在全天候、任意路段实现全自动驾驶。换句话说,全自动驾驶的近未来根本就不应该专注于通用型全自动驾驶,只须在有针对性的区域内实现就可以了,例如:一线和二线城市的核心城区,设施完善的高速公路或者路途较短的商业固定线路运输(公交车或者物流)。一旦驶出这些支持全自动驾驶的区域,电脑把车辆控制权重新交给人类就可以了。因为目前看来,对通用型全自动驾驶的研究投入完全谈不上商业回报,根本不具备投入产出比。

那么真正意义上想去哪就去哪,任何情况、任何路段都能实现全自动驾驶的人工智能系统是什么样子呢?——它是这样的:

所以,我们距离终结者这样的通用型强人工智能系统还非常遥远,目前仍然看不到实现这样人工智能的希望。
但是我们不需要悲观,人类的惰性总会驱使我们不断通过技术来改善生活。自动驾驶领域当前的目标在于实现一定程度上的驾驶辅助,比如自动跟车之类的,这些毕竟都在我们的智慧和技术力所能及的范围之内。所以基于机器视觉的自动驾驶系统的目的不在于彻底取代人类司机,它也没有能力完全取代人类,它的目的在于让我们的驾驶变得更加简单,能让我们将以往消耗于枯燥驾驶行为上的精力投入到更有意义的领域中去。
