9月24日,由新浪汽车、牛车网、汽车智能、汽车观察杂志联合主办的第七期轮语汇自沙龙、牛车网第四期汽车智能沙龙——“无人驾驶,未来何时到来”在清华大学旧经管报告厅举办。图森互联联合创始人郝佳男做了题为《视觉感知—无人驾驶的基石》的主题演讲。郝佳男在演讲中结合前段时间特斯拉Model S出现的致死事故实例,为我们讲解了“视觉感知的正确打开方式”。
以下是演讲实录:
郝佳男:谢谢大家,首先感谢牛车网提供这样一个舞台,让大家都能展现自己公司做的事情。
今天很有意思,刚才王总和伍总都提到了一点,就是大家目前用的传感器都是基于视觉去做,或者把视觉作为主要的传感器,这也跟我今天的演讲题目很贴近,我讲的是视觉感知为什么是无人驾驶汽车的基石。
北京是总部,美国有个研究院,加起来大概60人的规模。我自己是南洋理工毕业的博士,但是我做的并不是视觉感知这部分,更多在底层技术,比如并行、分布式、虚拟化、安全,现在我负责图森研发的基础架构和路线的制定。
提到视觉感知,它到底是什么意思?说白了就是拿一个摄像头拍一张图片,或者拍一个连续的图片序列,最后告诉计算机,你要给我完成一个任务。
任务有多种多样,比如识别车辆,识别某个物体,比如追踪这个移动的物体。再比如对场景的理解,这部分是人,那部分是建筑物,有一部分是树木,有一部分可能是其他份量,这些是场景分割。
所有的算法怎么评定谁好谁坏?通过第三方去评判。现在世界上最权威的数据集有两个,一个是Cityscapes,由奔驰主推,测试无人驾驶环境下通过单目摄像头采回来的图像,然后对它进行分割,分类比较多。另一个是KITTI,这个数据集相对来说跑的项目多一点,比如目标的检测包括三项,机动车、非机动车和行人,包括目标的追踪和路面分割。
还 有两个数据集是AFLW和300W,这是对人脸的检测,有68点或者更多点的测试。为什么要提到这个数据集?因为无人驾驶中还有一个很重要的应用,要对驾 驶员有状态的检测,在L2、L3的自动驾驶中人是需要有监控能力的,需要知道现在驾驶员在什么状态,就能够避免像特斯拉那样的悲剧产生。在总共9项的比赛 当中,目前图森都获得第一,也就是说在视觉感知这个领域,目前图森可以代表世界第一的水平。
回 到传感器本质,为什么我们说视觉是无人驾驶汽车的基石?我们认为视觉是最适合作为主传感器的,所以我们认为它应当是无人驾驶汽车的基础。厘米波雷达、毫米 波雷达、激光雷达、红外和我们自己的视觉感知,其实从根本上来讲就是不同的波长进行感知,这就是传感器的本质。从视觉传感器来说,它有什么优势?为什么我 们选择它?第一,大家不能忽略一个客观的因素,就是人类本身的世界是建立在可见光的基础上,因为大家有视觉,人类的视觉、动物的视觉都是在这里获得,有些 动物更远一些。
人类是基于视觉,能看见什么就创建什么东西,比如这个投影仪的光也在可见光之内。因为这一点,我们通过摄像头拿来的视觉图像 一定包含最丰富的语义。这张图比如拍到外面有车辆、有人、有自行车,上面有红绿灯,这边有限速牌,前面有垃圾桶,一张图片能做所有的事情,人类开车就是这 样开的。
另外一点很重要,上路以后不可能期待所有车都是无人驾驶,有其他人工驾驶的车和自行车,别人同样的是参与的交通者,别人是怎么行驶 的?一定是通过视觉判断很多信息。举个稍微极端点的例子,假如V2X以后成熟了,可能我的车不需要识别到底现在红绿灯是什么状态,而是直接告诉车子就好 了。但可能告诉我现在是红灯,可这个系统出了问题,其实这个红绿灯显示的是绿色怎么办?这种情况下如果我不能理解其他交通参与者对当前场景的理解时就会出 现问题,这也是为什么一定需要视觉,因为我要理解其他人怎么想,才能构成完整的无人驾驶环节。
还有一点是视觉本身是被动的传感器,不像雷达 需要去打一个波数,这有什么好处?现在很多无人车方案都是用lidar,lidar有一个问题,多个lidar互相之间会进行干扰,如果之后无人驾驶都广 泛用了激光雷达,但是它们可能不合标准或者由于设计的不全,互相之间就会有干扰问题,这点就会很糟糕,从一开始选型来说这些技术可能就面临这个缺陷。当 然,如果拿视觉作为主传感器,它也一定面临挑战,我们拿到的就是一幅图像,它虽然信息很丰富,但是这些信息不能被下面的决策系统直接使用,因为即使就一张 图,我也一定要几套算法把它转化成结构化或半结构化的信息。
什么叫视觉传感器?说白了就是摄像头,摄像头主要分两部分,一部分是镜头,一部 分是后面的传感器。镜头是让光线汇聚的作用,它会影响视角有多大、锐度有多好。我们重点看一下传感器部分,目前大部分的传感器都是基于CMOS技 术,CMOS本身是个半导体,在这上面有一个特性,就是光打在上面就会变成电。大家回忆一下在物理课上学的知识,一个光子打过来就有可能转化成一定的电 子,然后累积起来,这就是传感器大致的运作方式。
这张图是传感器的样子,如果我们把单反或者手机拆了,把镜头拿掉后看到的就是这样的场景,这上面很小,每一部分都是这样的传感器。
我 们拍照时它发生什么?首先,传感器把上面这部分电荷清除掉,把之前累积的清成零,接着光线当然就会穿过镜头,通过光子接触这个传感器,变成一系列的电子积 累在这个地方,然后因为有一个快门时间,比如多少毫米或者几分之一秒,过了快门时间后统一把井里面到底有多少电荷统计出来,之后经过转换变成数字信号,根 据数字信号的不同变成数字,最终这个数字就可以解读为像素,比如任何一个点它的亮度。其实很多摄像头都是彩色的,它怎么做到的?本身这个器件它只能测量亮 度,那就通过一种过滤的方式,这个单元我允许它只能过蓝色调光,这个单元只能过绿色的光,这个单元只能过红色的光,最终这个井里面的信息就是在这个附近蓝 色光到底有多强,最终这样的光强可以转换成大家肉眼去理解的图像。
CMOS来说,视觉传感器对无人车非常重要,我们一定要关注本质的属性。 第一个叫量子效应 ,光本身肯定有量子效应,每个光子打在这上面,它到底能转化成多少电子,这是个概率问题,假如这边10个光子打过来,最终生成了6个电子,它的效率是 60%,剩下的40%没有办法去记录。另外一个指标叫颞暗噪声,当我们读这个井里面有多少电子时也是不准确的,有可能有一个偏差,到底偏差多少?如果没有 信号是否也能读出数字?这就是颞暗噪声。还有饱和容量,这个井如果满了以后就不能再装进新的电子了,在图像上我们就变成一片白了,没有细节了,本质上来说 是这个井满了。而且快门结束以后要去读所有像素点的电荷数,怎么读有两种方式,一种叫“卷帘方式”,就是一行行的读,先读这一行再读下一行,每次清除电荷的时间也有可能不同,就会出现问题。还有一种方式叫“全局”,这种方式我们可以认为清除是在一个时间点,全部读取也在一个时间点,这样更好一点。另外,要把电子测量之后变成数字,那数字量化以后一定有位宽问题,用多少位数去存,位数越多灰度越好,如果只有两个,那可能就只有一个黑、一个白,没有别的了。
我 们看看什么叫“最适合自动驾驶的CMOS”,举个例子,我们来看它的不同,第一,我需要它在低照度下有优异表现,就是比较暗的情况下也能拍,那么一是量子 效率必须要高,全都能转化为可以测量的量;第二是颞暗噪声比较低,三是有很高的通俗范围,比值能到多少BD,这就是宽动态的问题。怎么宽动态?第一,噪声 低,第二,饱和量要高,不然很快饱和以后没办法继续度量接下来的光照。比如ICX614在很亮的区域很快就饱和掉了,饱和掉以后这个部分全是白的,并没有 细节,你不会区分这个点和边上的点有什么差异,这对后面的算法来说无能为力,比如车面反光很大,而且造成这样已经溢出的情况,那就非常糟糕。IMX249 这个地方虽然也很亮,但是我们可以看到细节,可以看到光晕的变化,从机器的角度来讲,只要有数值上的差别,就能够做下面的算法。
刚才提到了 全局快门,大家可以自己去实验,有直升机可以拍直升机,没有直升机可以拍电扇,如果一行行扫的,电扇这种很快的物体会产生运动模糊,产生并不是当时实际场 景,因为你在不同的时间段拍了不同的地方。全局快门就没有这个问题,无论物体运动多快。还有数模转换,平滑过渡才够好。
我们用视觉能做什么?刚才王总提到了一些,我们可以检测车,我们可以围绕它画一个方块,可以是2D的,可以是3D的,3D知道它的朝向和长宽高。另外,所有的物体不是每一帧都需要检测,不同的框之间要有对应的关系,这就是追踪。
检 测确实可以满足一些应用,例如对ADAS或者简单的自动驾驶没有问题,但是如果想做很复杂的自动驾驶确实需要语义分割,语义分割是我们对每个像素都指定类 别,比如这是地面,这是建筑,这是天空,这是树木,这是人,这是散落的一些小的物件,对不同的车、不同的物体有不同的颜色和不同的分类,可以帮助我们理解 场景到底是什么样子和哪些地方可以走。
提一个悲伤的事情,特斯拉的这次事故,在今年的5月7号特斯拉发生了这起很严重的车祸,车毁人亡。在进入事件回顾之前,我们先看一下特斯拉本身是什么样的技 术,从传感器来说,它的主传感器也是视觉感知,是Mobileye的。图像进来能够识别什么?第一,车尾,Mobileye里面跑的算法是SVM,识别的 是车后面的两个车灯和后车轮,以这样的方式检测车很明显的特征点,然后对车尾进行检测。当然,特斯拉不会只用摄像头,它也想到备选方案,就是毫米波,上面 可能是6个或者8个毫米波雷达,大概安装在车牌那个位置,这个功能是自动巡航定速,可以根据前面车的距离去定速,另外还有车道线的保持,通过这两项在一起 达到从SAE的分级来说达到L2,它比L2高级一点,如果你想变道,确认没问题以后车会变到另外一条道,但是变道过程需要人来决策,所以这不能叫L3。
我 们回顾这场事故,当时车主由西向东行使,另外一辆非常长的白色车从另一边拐下高速公路,当时车主本身不再监控这个状态了,甚至有传言说他当时再看《哈利波 特》。结果这个车正好横在了这个位置,当时特斯拉已经很近了,它的系统并没有做出反馈,它认为前面没问题,可以开过去,没有任何的刹车动作。车从大卡车的 下面直接穿过去了,而且车穿过去以后还会继续行使,连续撞击,最后车是实在走不了了才停下。
为什么出现这个问题?任何事故肯定都是很多具体 条件聚集起来才发生的,这起事故当中是什么呢?第一,从感知上来说,当车横在这个位置,无论这个车是什么颜色,不能检测到这个车,这是Mobileye这 一代芯片的缺陷;第二,糟糕的是毫米波雷达位置正好穿越这辆车下面,所以它也认为前面没有障碍物,于是系统判断前面没问题,继续往前开,就撞了。
为 什么说它是视觉感知的错误打开方式?Mobile在这个事情上没有问题,他的这一代产品本来就是这个功能。特斯拉也知道这个事情,但是它错误的把图像只做 了这样一个处理。也就是说如果特斯拉想拿视觉作为主传感器,不能只做这两个传感器,还需要用其他的传感器或者算法去做,比如去识别这个地方的深度信息,或 者用单目做语义分割,判断这个地方是不是一个可行驶路面,所有这些传感器只是视觉,就一张图,但可以跑很多算法,这些算法融合起来,最后进行一个决策,对 于视觉来说绝对不可能是只跑一个算法,然后拿这个作为真的物理量去做下面的决策,这是不对的。
正确的打开方式,就是刚才说的,是一组传感器,单目、双目或者多目都没关系,它有不同的视角,有一些窄一点去关注比较远的,有一些宽一点的去关注有没有闯入的行人等等。然后跑多个算法,比如目标检测、目标追踪、可行驶路面。
它 第一次出现的时候会给它一个编号,然后追踪它,对后续的算法可以预计它的轨迹,它是不是要转弯、是不是要强行并道,都可以获得。这边有一个绿色的淡淡的区 域,这叫可行驶区域,可以理解为语义分割的一个子集,最关注的是哪部分可以开,哪部分开了不会撞。这个信息不是双目取得的,这是单目信息直接算出来的,通 过单目对场景的理解,然后它知道这个位置可以行驶,比如这边有车挡着就不能行驶。
我 们看看在北京很复杂的路段它跑到什么样子,这是在CBD那边我们拍摄的一段视频,人和车以两种颜色去做区分,因为语义分割规定了车跟人是属于两个分类。除 此之外我们还可以看到天空,可以看到建筑物、树木、车辆、隔离带,都用不同的颜色去做区分。有这样的技术,无人驾驶就会更稳妥一点。
除 了语义分割,深度信息我们通过双目获取也是比较方便的。这也是CBD,是实际拍摄到的左眼的视频,右眼我没有放。红色的部分表示离大家很近,紫色的部分表 示离大家很远。这并不是实际到这个摄像头的,而是对于任何一个特征点,从左眼到右眼它们之间的距离有多远,根据这个直接划出的颜色。道路这一侧是同一个颜 色,如果是距离的话,中间肯定更近一点。
不同算法其实有不同的适用场景,比如刚才提到的目标检测,可以跑得很远,比如40度识别一个200米以外的车辆没有问题,这在高速场景就很必须,因为高速给你响应时间很短。
比 如对于双目的深度信息,它在比较远端就比较麻烦,因为双目的识别距离跟这两个摄像头离多远有关,我们在这个视频里面大概的距离基本在车头的两个三分之一 处,它能够区分的距离应该是在三四十米比较精确,再往远的话很难去分辨了,所以它对于近距离的物体做比较好。所以如何使用视觉传感器,实际是拿这一组传感 器传回来的图像去跑多个算法,所有这些拿出来结构化信息,比如目标检测失败了,但是可行使路面告诉我那有一个障碍物,或者深度信息告诉我这边有一个异常的 坑,我都应该决策这个车不能行使,应该绕开或者以其他的方式规避,这样的情况下特斯拉的悲剧就不会重演了,这是视觉感知的正确打开方式。
责任编辑:范赫