我们做智能驾驶其实是真正出于现在对一些社会问题的思考。今天堵车的问题很严重,堵车导致了路怒、违规驾驶,又会导致交通事故;交通事故会让路更堵,同时会造成能源浪费、废气排放。另一方面,我们停车也很困难。关于停车有三个数据,第一个数据,一辆车96%的时间是处于停放状态,而且它需要两个停车位,家里和办公室各一个;第二个是美国统计的,在商业中心附近的闹市区,汽车行驶里程当中的30%~35%是为了停车,并不是为了从A点到B点;第三个数据,现在很多大城市15%~30%的土地是用来停车的。我们想象一下,为什么房价贵?这里面“军功章”也有车的一半。房价贵又会导致很多年轻人只能够居住在远离城市中心的郊区,于是有了“睡城”,有了上下班的“潮汐效应”。今天北京可能多数人一天要花2个半小时在路上。2个半小时意味着什么?一个人1/10的生命在通勤。中国一天可能有一二十亿的小时浪费在路上,如果我们回到五六千年以前,古埃及人建造了一座吉萨大金字塔,也就花了这么多的时间,中国现在一天在路上要浪费这么多的生产力。所以我们认为,智能驾驶是解决堵车事故、排放,以及停车等等诸多问题的关键要素。
未来智能驾驶我们可以想象,车辆可能是排的整整齐齐的在路上走,它对路面的利用效率非常之高,交通事故减少90%以上;而且能源效率也得到提升,第一辆车把所有的风阻挡掉,其他车的能耗会非常的低。并且绝大多数车将会变成无人驾驶的出租车,它们整天在路上走,对于停车位的需求会极大的降低,即使是需要停车了,一个小小的停车位就足以停进去,而不像今天我们要预留很大的停车位,才能让这些新手停进去。
未来汽车交通工具的属性会极大的降低,商业空间的属性会提升。想象一下,在这个车里面放一台咖啡机,就变成了移动的星巴克;放一块大屏幕,它就变成了移动的电影院;放一套办公设备,它就变成了移动的写字楼。从某种意义上来说,它把每一辆车、每一条路,变成了商业的地产,所以未来5~10年,所有跟人或者物高度相关的产业都会被重新定义,包括出租车、停车业、写字楼、服务业、物流、金融、保险等等。
它离我们有多远呢?我们认为并不遥远,我们来看几个数据,第一,根据中国官方的智能驾驶的路线图,到2020年,带有驾驶辅助和半自动驾驶功能的新车销量将会达到1 500万台/年,占所有的新车销量的一半。第二,我们再看政策决策者,根据达沃斯论坛,以及波士顿咨询集团对于全世界一两百个城市的决策者做的调研,88%的决策者希望智能驾驶能够在未来10年之内得到商业化。我们成立这家公司也是希望能够在2~3年之内,实现辅助驾驶和无人驾驶的商业化,所以我们是真正从车库开始创业的。
现在我们有两套产品,一套叫做高速汽车的辅助驾驶,作为国内唯一一家能够实现100公里时速的高速辅助驾驶的公司,目前它在道路上已经路测了超过2万公里。它的亮点就是自主超车,在多数时间它是在高速的中间和右边的车道以100公里的时速行驶,如果前车速度太慢,它会非常敏捷地换到高速车道,完成漂亮的超车,然后再回来。另外一套产品线是无人驾驶,我们已经有多款无人驾驶的产品开始测试,其成本是诸如百度无人驾驶样车的1/5~1/10之间,以单排两座的小车为例,非常适合最后3公里的出行,就是从地铁站到小区,或者小区到商业中心的距离。同样有一款车是针对园区的共享出行,两排座椅对坐,没有方向盘和刹车。
这些无人驾驶车也已经在我们的园区开始常态化测试了,可以想象这样一个典型的使用场景,我们用手机对车发出信号,设置目的地,它就可以把我们带到那个地方,使用非常简单。另外,最后3公里的小车,我们认为未来可能会成为类似摩拜单车等这样的一种轻型交通工具,它不但实现了无人驾驶,而且实现了无人维护。当它低电量的时候,会找到一个带无线充电功能的停车位,以一个非常准确的姿势停进去,然后进行充电。
完成上述所提的技术门槛是非常高的,如下图所示的这样一个软件站,非常复杂,从底层的硬件和网联的模块到系统软件,要求实时性和高可靠性,再到状态的记录和监控,到驾驶员行为的学习、人机接口,再到上面的算法层,从感知到规划、到控制,从远程监控、维护到信息系统安全,再到测试、仿真等等。
对于这样一套智能驾驶系统来说,最基本的一个功能就是感知,我们要检测那些不能撞的障碍物,以及路面的可行驶的区域。最直观的一个方案就是通过摄像头,因为摄像头非常便宜。视觉,它对于这个世界的理解主要是抽取语义模型,它会看到这两条线是车道线,这个是车,那边是行人,那边是交通标志、交通灯等等,我们希望能够把这些语义的模型抽取出来。
车道线识别从传统视觉的算法上来讲,已经比较成熟了,最早就是通过边缘检测,做视觉处理,这是最基本的功能。通过边缘检测,把很多直线当中的一些车道线能够挑选出来,这时候我们可能要用一些像Hough变换、拟合等等这样一些方法;可能要用到人的一些知识,比如说路面的颜色是什么、天空的颜色是什么,这样会把一些噪音的直线过滤掉。当然下一步更加困难的就会是曲线的车道线识别,这时候我们就需要有一些曲线的模型。
除了车道线之外,车辆的识别是非常重要的。车辆的识别其实在计算机视觉领域也做了很久,以我为例,早在2007年,我的小组在做车辆识别的时候,就用的非常简单的计算机识别算法。这个算法原来是从人脸识别迁移过来的,就是用海尔特征,然后再加上AdaBoost的这样一些训练,这样我们也能够相对比较准确地把这些车辆识别出来。那时用的是传统算法,而传统算法当中很重要的就是特征提取,特征提取好不好,决定了最终这个识别的效率。像下图这样一种汽车,特征还是比较明显的,我们看:在车底下面有一团阴影,车的尾部是一个几何的对称体,车灯是红色的,两边也是对称的,等等。
后来行人检测也慢慢进入到了产品化阶段。行人跟汽车不一样,因为行人并不是一个刚体,这时候就需要更好的一些算法。对于传统的行人检测,最简单的就是用HOG的特征,再加上SVM算法来做一些分类,而随着深度学习的出现,就出现了更多的、更好的一些方法。这里传统的视觉,就是从图像当中抽取出语义特征。
还有一种视觉,立体的视觉,它是能够抽取出来几何的模型。刚刚提到行人检测,传统上来说我们需要机器学习,但是如果说我们有双目的摄像头,则可以非常准确地把这些行人,包括旁边黄色的是一只狗,能够把它以一种点云的方式呈现出来,而且这个点云可以用色彩去表示,远处的时候可能是冷色调,靠近的时候变成暖色调。这个并没有通过算法去理解它是什么样的语义,只是用双目的立体视觉,把这样一个几何的模型抽取出来。
还有一种手段就是通过雷达,尤其是毫米波雷达,目前来说它更多的是通过多普勒效应去检测障碍物,尤其是那些运动的障碍物,所以严格来说,它的几何模型是残缺的。但是慢慢地我们发现,毫米波雷达还可以有更高级的使用场景,比如说这样一种场景(如下图所示),这是一条右拐的路,如果说车在这条右拐线上即将要右拐的时候(我们想一下这个车头是冲着斜前方的,而且往往摄像头它的视场角是比较窄的),从这个地方突然走出来行人,摄像头是看不见的,这时候雷达就变得很重要了。一个非常典型的智能驾驶车,车周围有很多的传感器,它的车头两侧有150度角短距离的毫米波雷达,这样一种雷达去检测行人,检测上述场景中的行人是非常适合的。所以针对毫米波,把多普勒效应采集出来的数据,对它进行一些机器学习、进行分类,也是可以检测出行人的;只不过这里面的难度更高一点,而且行人并不是金属物体,对于毫米波雷达的反射可能就没那么强,这时候我们可能需要更好的算法。现在已经有公司通过相控阵雷达这样一种原理,能够更好地去了解障碍物,它就不仅仅是一个多普勒,它还加上XYZ,这样它对于环境的感知就更好。
有一种更好的传感器叫激光雷达,它是真正能够准确地把环境的几何模型建立出来的。现代意义的无人驾驶历史上最有名的一辆车,是斯坦福的车,在2005年获得了美国DARPA Grand Challenge的冠军。
我们可以看到,这辆车顶上有5个激光雷达,这5个激光雷达都来自于德国的一家叫SICK的公司,而且它是一线的,可以进行反复扫描,扫描这个平面上有没有障碍物。但是,我们只知道在这个平面上有障碍物是不够的,所以它用5个激光雷达,用5个不同的俯仰角扫出来5个平面。它扫出来一条平面是这样的,碰到旁边的灌木丛的时候进行了反射,这样它就知道那边有障碍物;然后通过5个平面的扫描,它就能够知道这个几何世界是什么样子的。到了2007年,DARPA Urban Challenge卡耐基梅陇的这辆车拿到了冠军,而这辆车顶上出现了一个新品种的激光雷达,这个激光雷达一直到现在还是无人驾驶车主要的一种激光雷达,它有64线。上面提到的SICK只是一线,它的视场角相对是有限的;而这样一个雷达能扫出来64根线的世界,且是360度在不停的旋转,每秒钟能够转5~12转,所以它对这个场景的感知就变得非常准确了。
到后面我们可以看到,谷歌的第一代的无人车顶上有这样的雷达,第二代的无人车上面也有,第三代还有。百度的第一代顶上也有,百度的第二代顶上依然有诸如此类的雷达。当然百度的第二代无人驾驶车,除了顶上4线激光雷达之外,还有三个16线的激光雷达,这三个16线的激光雷达是俯向地面,使得车身周围的盲区会进一步减少。
现在存在一个问题,这个激光雷达造价是很昂贵的,目前市场价一台是70万元人民币,边上的两个16线一排差不多七八万元人民币,所以使得无人车非常昂贵。而对于驭视科技,我们的车上同样也装了雷达,装了16线的激光雷达,相对来说便宜一些。这样的价钱其实已经成为了无人驾驶商业化的阻碍。但是好消息是说,未来几年这么一个昂贵的问题马上就要得以解决,未来三五年像这样的激光雷达会从75 000美金降到500美金以下,甚至是现在有一家激光雷达厂商喊出来说降到50美金以下,这意味着它不再成为无人驾驶商业化的一个阻碍。所以我们可以看到,很多激光雷达的厂商,都在针对2020年会推出性价比非常高的产品,意味着我们又可以有摄像头,又可以有雷达,还可以有激光雷达。
这样会让我们去考虑,我能否把视觉跟激光雷达结合起来,进行融合,这样意味着我可以把语义和几何模型结合起来。视觉的好处是,它有色彩,且分辨率非常高,1 080 P的摄像头就是有1 080根线;而激光雷达现在有64线,未来最多发展到128根线,所以它的分辨率是有限的。激光雷达没有色彩,是单色的激光,至多它回来的时候有一个反射强度,这样意味着它是对纹理不敏感的;而摄像头对色彩、对纹理是非常敏感的,所以这两个东西结合起来是非常好的。
再看特斯拉,我们都知道特斯拉的autopilot可能是现在商业化场景当中最好的,它主要靠挡风玻璃后面的一个摄像头,加上上面的一个毫米波雷达,以及车身周围的很多超声波。这三种传感器目前看来也并不完备,在去年5月份,特斯拉的一辆车就出现过一起致命的车祸。一辆特斯拉的Model S的传感器并没有发现横着的大卡车侧面,于是高速从大卡车的车身下面钻过去,驾驶员当场身亡。
我们现在就要考虑,为什么这些传感器、摄像头、雷达等等都失效了呢?所谓超声波失效是可以理解的。超声波只有五六米的这么一个距离,它肯定是感知不到远处的大卡车。那摄像头的原因是什么,现在有多种解释。
首先特斯拉的解释是,当时这辆车是迎着晨曦在行驶。做视觉的都知道,对面是强逆光过来,摄像头的成像可能会受到影响,这个时候对它的算法会产生影响。有的时候强逆光要比微光光照不强更严重。
另外一个解释是,当时它的算法是有局限性的。我们如果说用海尔特征再加上AdaBoost,可能训练的是对车辆尾部的特征识别,但是实际的情况是,这辆大车是横在那个地方,横截面不符合这个尾部的任何特征,算法根本没有检测出来这么一辆车。所以,不论是哪种原因都展示了摄像头和视觉算法的局限。有人就会问,雷达为什么没有起作用呢?马斯克在Twitter回答说,其实系统在很远的地方是看到了在路面上方有不少的反射点,但是这个时候它还不能做决策,雷达对静态障碍物的认定是保守的。它在高速上开的时候,它比较忌讳误刹车,高速上面突然给你来一下刹车的话,不但不舒服,而且很危险。所以它 采取了一种比较保守的分类,把它分类成为了一个马路上面的交通标志牌;是希望等到靠近的时候,如果有更多的数据能够进行判断时进一步做分类。但是悲剧在于,它的毫米波雷达安装位置比较低,而这个车身的底盘很高,靠近的时候这个毫米波雷达就扫空了,从车肚子下面扫过去了,因此靠近了也没有识别出来。
所以,这是现在我们的辅助驾驶技术的一些缺陷,该如何解决呢?现在已经有几种解决方法,一种就是大数据的思维,我们来改进雷达的算法。比如说雷达返回的数据量更大,如果说雷达返回的数据量足够大,意味着我们就可以做更好的分类。第二个,我们把时间因素加上去,不仅仅是说这么一个时间点上面雷达反射回来是什么,我们把多个时间帧的数据都融合进去,进一步地把静态和动态的问题区分开来,把虚假的反射过滤出去。第三个方法,其实就更简单了,就是非常简单的大数据众包的方法。但是想象一下,如果说我有一辆特斯拉的车经过这个地方的时候,扫到前面有一排的反射点,虽然它不知道,但它可以记下来。第二辆特斯拉的车又经过这个地方的时候,如果还是扫到这些反射点,意味着它是一个永久的障碍物,可能就是马路上面的交通标志牌;如果说第二辆车经过的时候没有扫到,说明它是临时的一辆大卡车,它现在已经开走了。这个方法听起来好像很简单,但是实际的应用当中是非常有用的。
第二个改进点,就是提升信噪比。比如说,在强逆光的时候他就看不清楚,我要改进视觉的感知能力,这也算是一种大数据的思路。比如说,摄像头改成宽动态。宽动态它在强逆光、在微光下面的细节还原就变得更好,现在一些星光级的传感器,在马路灰暗的路灯下,或者汽车前灯照射这种非常微弱灯光的辅助之下,也能够看清路面情况。还有就是在摄像头里面加入动态的曝光和自动的增益。如果有动态曝光和自动增益,对于刚才那些场景也能够很好的呈现。
另一种就是多摄像头,甚至是在摄像头上面做进一步的创新。应该说,大自然创造眼睛是从寒武纪开始的,创造眼睛这么一个器官真的是巧夺天工,在这里面可以有很多学习的地方。比如像苍蝇的复眼,还有很多昆虫的复眼,它是一种非常有效的器官,很多小镜片放在一起,用非常简单的算法就能检测障碍物。以蝗虫为例,它做障碍物检测,只需要一个神经元就可以完成;它做避障,就是做控制,只需要一个神经元就可以完成,这依赖于它的复眼的结构。而老鹰厉害在什么地方?它在离地面两三千米的高空盘旋,能够看到地面上的兔子或者一条小蛇,它的眼睛的远视能力非常强。事实上,老鹰眼睛里面有两个中心凹,一个深的,一个浅的,有点像我们多个摄像头组合的一个感知设备。还有像变色龙,它是360度环视,现在汽车上已经装上4个广角组合成的360度环视。还有像哈士奇,它在晚上看得很清楚,两个眼睛可能有不同的颜色;在晚上,它对眼睛瞳孔的控制能力很强,其实就是光圈的控制能力很强,所以夜视能力非常好。现在像特斯拉的Model AutoPilot 2.0,它车身周围装上了很多的摄像头——8个摄像头,未来即使是一个方向上,它可能需要短、中、长三种不同焦距的摄像头,通过多个摄像头的配合,能够对场景有很好的感知。
当然在短期的话,一个最实用的方法就是使用双目立体摄像头,我们做三目,为什么三目呢?在我们做视觉感知的时候,未必需要彩色的传感器,这样拍出来的图像是灰度的。但是灰度有一个问题,红绿灯就变得看不清楚,所以中间放一个彩色的摄像头,两边看的比较远,视场角是比较窄的;而中间这个是广角,附近能够看得见行人、自行车,这就是多摄像头的组合。这两边两个摄像头,它看到的世界是一个几何的世界,每一种障碍物都是一团点云,像静态的栏杆也是点,动态的车也是点,而暖色代表近,冷色代表远,所以它对场景里边的这些障碍物是有很好的感知。那么如何能够通过提升传感器的能力,通过多种摄像头来获得更多的信号,我们知道,感知的过程其实就是希望有更多的信号、更少的噪声,所以这是第二种做法。
第三种做法,现在普遍使用的是通过深度学习的方法,即通过单目摄像头进行深度学习。深度学习比传统的这些视觉算法有更好的目标检测能力。不同的距离,不同的角度,哪怕有遮挡,或者是一些奇形怪状的车都是可以容忍的,现在只要标注数据足够,我们在马路上看到一些非常奇怪的车也能进行识别,甚至针对一些类似拖着树的车,只要给定数据它就能识别出来;而且它能够很轻易地从简单的检测车辆到检测行人、自行车、交通标志等等,且我们可以把多个检测网络融合在一个,在这样一个multi-tasking神经网络里面。这个场景比之前的场景更加复杂,因为会存在行人、自行车等情况。
上面我提到了最基本的感知,无论是摄像头的语义模型,还是激光雷达的几何模型,还是多种传感器的组合。感知到不能撞的东西和可行驶的路面,第一步是存在两条车道线绘制出来可行驶的路面;第二步就要解决地图和定位的问题,而地图本身来说就是一个空间模型。人开车靠的是什么?定位靠的是GPS,还有靠的是我们简单的用肉眼去看交通标志,这两种对于定位的精度并不具有很高的要求,比如说GPS是10米的定位误差,但我们人不会有误差问题,我们不会因为GPS的误差而会错过一个路口。对于智能驾驶来说这里需要强调,就是我们之前所有这些算法都叫弱人工智能,它并没有我们人大脑里面一直在运行的常识,它并不能处理模糊的信息,并不能容错,所以它要求更高的定位精度,就是10厘米定位精度。
今天智能的不足我们要通过大数据来解决,通过各种传感器的融合来解决。举个例子,我们首先想到的就是绝对定位。绝对定位最先想到的一个传感器叫做GNSS RTK,GNSS就是全球卫星定位系统,RTK使得定位精度从普通的民用10米到10厘米、1厘米的这么一个定位精度。在我们的一个研发基地,我们在大楼的周围故意做了一些不规则的运动,可以看到,在绝大多数情况下它的定位精度是准确的,偶尔出现一个毛刺;另一边,因为障碍物就是大楼的遮挡,使得它跟卫星的通讯、跟地面基站的通讯会产生问题,所以就出现了很多毛刺。而换一个时间,在障碍物的这里边出现了大量的毛刺,意味着什么呢?意味着光靠它是不行的。这时候绝对定位不行,再加上一个相对定位,相对定位能够随时把运动的姿态记录下来。比如说,每一步都是向前走的,还是往其他角度走的,走了多远?这些能够把轨迹记录下来。绝对定位再加上相对定位就能够得到更好的效果,而相对定位在汽车上最直观的就是一个惯性导航。惯性导航其实在我们每台手机里面都有,通过加速传感器和陀螺仪能够形成惯性,但是手机不准。往往在自动驾驶上面需要高精度的惯导,高精度的惯导非常的昂贵。现在最典型的一种高精度惯导是基于光纤陀螺,用在哪里呢?用在战斧巡航导弹上,这个导弹打出去以后,如果说GPS信号被破坏掉,它还能够靠自身的惯导飞行一两百公里,还能够击中目标。
我们也测过,如果用这样的光纤陀螺的话,可能车开到20分钟,它还能够比较准确的定位,它完全是靠相对定位,能够比较准确。但是这个比较昂贵。我们现在想到另外一个计算机视觉的算法,这个计算机视觉的算法就是视觉的里程计,它是做什么呢?就是通过单目和双目去检测帧与帧之间特征点的位移来判断摄像头的位移,然后把这些位移区分起来就是行动的轨迹。当然这个东西要做得好是非常困难的。体现它好不好一个很重要的标志就是,它走一圈这个环绕不是能够闭上,如果最后环闭上,说明它的累积误差是足够的小。这个在实际的应用当中用处非常大,我们知道全宇宙最复杂的立交桥就是西直门立交桥,走西直门立交桥GPS经常是罢工,所以你通过这样一个视频里程计能够很好地把你的运行轨迹记录下来。
这是我们把绝对定位加上相对定位融合起来的结果,右上角是摄像头的实景,我们看到这是灰度的摄像头;左上角是我们规划出来的行驶路径,这个路径的颜色紫色是匀速、黄色是减速、绿色是加速;左下角是双目的视觉雷达,我们可以检测障碍物,而这边这条轨迹我们可以看到,就是把绝对定位加上相对定位融合出来的一条轨迹,在蓝色顶上出现了一点小的修正。所以这套系统就是比较完美的符合我们的要求。为什么说比较完美呢?其实这里面还是存在着问题,比如说在一个园子里面,GPS的工作效果不是很好,这时候我们要靠惯导。视觉里程计其实工作的效率也不好,为什么呢?大检测出来的很多特征点是树叶,树叶是会动的,所以我们可以看到,整个车身随着行驶是偏离了真正的地图规定的这条路。我们所想到的方法是每过一段距离放置两个牌子,牌子上面是一些特定的视觉特征,我们检测出来了以后可以做一次校正,然后它就会回到主要的路线上,所以这是第三种方法进一步对数据进行纠正。但是这种方法在实际应用当中是有问题的,因为我们不可能在马路上放置很多这样的牌子,而通过一些简单的思维拓展,我们只要把现实世界中的那些交通标志牌检测出来,拿这些交通标志牌来做累计误差的校正就行了。
所以我们可以看到,在行驶的时候持续用深度学习的方法把标志牌检测出来,然后把它跟地图里面存储信息进行匹配,一旦匹配上就知道我现在到底是在什么地方。因此只要在现实世界当中,这样的交通标志牌分布足够的稠密,我每过一段时间就可以做一次校正,每过一段时间做一次校正,就能保证在GPS不好的状况下也能够保证很好的在路面行驶。
(待续)
驭势科技联合创始人兼 CEO,前英特尔中国研究院院长、首席工程师。现致力于研发最先进的自动驾驶技术,以改变这个世界的出行。