(本文内容来自图森互联科技首席科学家王乃岩在雷锋网硬创公开课的分享)
本期公开课要点:
1、在自动驾驶场景中使用到的具体计算机视觉技术;
2、如何利用计算机视觉打造低成本自动驾驶方案。
计算机视觉如何“观察”世界
无人驾驶技术链非常长,基本分为三大阶段:感知、决策和控制。计算机视觉技术在无人驾驶的感知阶段,我个人总结下来,包括五方面的应用场景和技术。
第一,使用双目视觉系统获取场景中的深度信息。它可以帮助我们进行后续的图像语义理解,在无人驾驶中可以帮我们探索可行驶区域和目标障碍物。
上面两张图片分别对应双目成像系统中的左眼和右眼,图片下半部分是根据左眼和右眼的图像,估算出的一个深度信息。
我们可以把双目成像系统看作是一个廉价但没有那么准确的激光雷达。它的作用是得到周围场景每个像素的深度信息,这与激光雷达获取的3D点云数据非常像。双目的优点是成本非常便宜,但缺点也明显,探测距离可能没有激光雷达远;其次是对计算能力,其次是对计算能力要求较高。
第二,通过一段视频来估计每一个像素的运动方向和运动速度。下图是一个例子:
如图,一个人在打网球,这是两帧图片联系在一起进行的一个运动估计,其中亮度代表运动激烈程度,颜色代表它不同运动方向。
这样一个运动估计的任务,在无人驾驶中是可以较好地帮助我们去估计,首先是自身的运动,这与后面我们提到的定位息息相关。除此之外,我们还可以使用它来估计周围场景中其他我们感兴趣物体的运动方向,对于后续的决策模块、路径规划模块非常有意义。
除此之外,我们还可以根据某个感兴趣物体历史的运动轨迹,来对它后续的运动方向和轨迹进行预测,这是非常重要的一点,也是我们常提到的,对路面上移动物体意图的估计去获取它的轨迹。
第三,对物体的检测与追踪。在无人驾驶中主要是各种车辆、行人、非机动车。这可能是大家比较熟悉的应用,在这样一个问题中也分为多种设置,比如说我们最常熟悉的是2D下的检测,但我们同样也很关注3D包围框的表示方式。
上图中,上半部分是2D检测,下半部分是3D检测。2D检测只需要画一个平面矩形框,把它框住就可以。但在3D检测中,我们需要报告每个物体的中心点的位置,包括X、Y、Z的位置、长宽高以及朝向,这对于后续的轨迹估计以及它的意图分析非常重要。
这种基于深度学习的物体检测方法是目前效果最好、最主流的方法。它对于传统算法来讲,大大降低了物体检测的漏检率和误检率。
比如下图,我们可以看到在一个非常拥挤的环境下,深度学习算法是可以很准确地检测出场景中的行人。
第四,对于整个场景的理解,最重要的两个,第一是道路线检测,其次是在道路线检测下更进一步,需要把场景中的每一个像素打成标签,这叫做场景分割或者场景解析。
道路线检测其实是相对容易的任务,在过去的十年也有很多研究,在绝大多数正常情况下做到的结果是相当不错的。而场景分割和场景解析,相对来说是比较新的概念。
上图中,我们给整个场景中每个像素打了标签。比如深紫色是路面,粉色是人行道,红色是行人,绿色是树木。如果我们有了每个像素的标签图,就可以根据它得到的语义信息,对避障以及路径规划等决策模块做一个非常有价值的输入和参考。
场景分割其实是在检测任务上对周围的环境更进一步的理解。例如,目标检测任务中,我们可能只关心路面上移动的物体。但是,在场景分割中,我们不仅仅对行人、车辆和非机动车等进行一个分割,同样对背景静态障碍物,也能进行很好地感知。
第五,是同步的地图构建和定位技术,即SLAM(SimultaneousLocalizationandMapping)技术。这是最早在机器人领域中的一项研究,在这里我们主要说的是基于视觉的传感器,即摄像头的SLAM技术:
通过摄像头和其他多种廉价传感器的融合,能够递增创建周围环境地图,同时利用多种传感器提供的位置信息去实现自身位置的精确定位。
比如,无人驾驶对于定位的要求非常高,需要达到分米级别的定位。如果我们只使用加速传感器、GPS等,得到的精度是远远不够的。但借助视觉传感器、视觉地图,再融合这些加速传感器和GPS等,我们可以得到一个非常准确的定位效果。
上图是SLAM自身轨迹的绘制,一条蓝色轨迹以及3D点云地图。如果我们离线建立一个比较准确的3D地图,我们只需要根据视觉标定(Visuallandmark),再辅以其他传感器的验证,就可以得到对无人车位置的一个准确估计,这是SLAM技术在无人驾驶中的作用和地位。
目前计算机视觉在无人驾驶上的应用有两个难点。
第一个难点可能是精度和可靠性达不到我们的预期,但是随着这几年深度学习的快速发展,在这方面的难点会被一一攻克;
第二个难点主要源自于传感器本身,比如说过曝和欠曝,都是非常严重和常见的问题。解决这个问题的方法就是通过传感器融合,也就是说当视觉传感器失效的时候,我们融合其他传感器,包括毫米波雷达甚至激光雷达,对周围环境进行感知,来保证它的安全。
从商用车切入
和绝大多数自动驾驶公司不一样,我们服务的对象是大型的客运车辆,尤其是大型的物流公司。我们希望通过人工智能与计算机视觉技术,开发一个可商业化的物流自动化解决方案:在限定路段限定条件下,可以降低驾驶员的工作量,减少物流公司运营成本和大型车辆事故率,提升运输车辆的安全。
目前自动驾驶落地主要有三个方向:
小型乘用车辆,以特斯拉、各大传统车企为代表;
特种车辆:特定厂房和园区里的固定路线和货物运输车辆;
大型商用车:比如Otto这样的公司;
我们在确定商用车方向前做了很多调研,最后结论是:对于自动驾驶这项技术,最有刚需的是商用车:
1、企业会考虑成本
在长途运输中,尤其是超过800公里,为保证时效性,一辆车上大概会有2到3名司机。如果我们在限定条件下通过自动驾驶,把人力降低1名甚至2名,这能为物流企业节省50%的人力成本;
自动驾驶车辆能够对整个路线进行更好的规划,驾驶习惯比普通司机好,使车辆耗油量大大降低,减少5%-7%的油量,这对物流企业来讲有比较大的吸引力。
2、增加车辆的安全性
尤其在中国环境下,大型货运车辆的安全事故非常多,一旦出现事故大多是致命的。大型车辆事故主要有两个原因:一个是超载,一个是疲劳驾驶。超载我们不能控制,但在疲劳驾驶方面,我们能通过辅助驾驶和自动驾驶技术来减少驾驶员的工作压力;
对物流车辆来讲,他们绝大多数仓库在高速路附近,我们可能只需要让驾驶员通过人工驾驶的方式把车辆开到高速路上。在下高速之前,我们再提醒驾驶员接管驾驶权。自动驾驶技术能在长途运输中绝大多数路段,比如高速公路相对封闭、固定、确定性的路段实现高度自动驾驶。在这种情况下,驾驶员可以适当休息,增加车辆的安全性。
简单来说,就是路线相对固定,环境更加可控,而商用车对成本更加敏感。综合这几点,这是我们通过视觉技术能够发挥作用的地方。
打造低成本自动驾驶方案
在无人驾驶的体系中,我们采用的是一个双目摄像头,因为成本比较低。
但是,双目在实际生产中的问题在于:双目系统的两个摄像头需要精确标定,由于硬件机械结构的不稳定,在车辆行进的过程中,比较小的颠簸和抖动都会对两个摄像头的外参造成扰动。所以我们要实现一个相对可靠的自标定,这是双目从实验环境走到实际生产比较大的挑战。
我们的做法是研发了一套比较可靠的双目自标定算法,在车辆行驶过程中会以一个固定的频率对双目的外参不停地进行修正。在无人驾驶中,我们采用的解决方案是以计算机视觉为主导,然后辅以其他传感器,比如说毫米波雷达、GPS、IMU等传感器的解决方案。
降低成本最关键的一点是如何利用算法的优势来保障安全性,这其中包含两点:
第一,在视觉传感器自身之间不同任务和算法之间做交叉验证。我们知道没有一个算法是100%可靠的,任何一个单一算法都会有失效的可能。但是,如果我们同时进行多个算法之间的交叉验证,那么安全性就会得到一个大的提升。
比如前段时间特斯拉出的致命事故,就是在白色的大卡车在转弯的时候,Mobileye的视觉感知芯片没有检测出卡车,这是它第一重传感器失效。但是想像一下,如果我们在这个时候去做一个道路可行驶区域的分割,特斯拉一定不会把白色物体当成是可以行驶的道路,直接以巡航的速度去撞上一辆大卡车。
这是我们说的多个任务之间的交叉验证。
第二,多个传感器之间的交叉验证,主要是视觉传感器的输出和毫米波雷达的交叉验证。
所以降低成本的关键,并不意味着我们牺牲安全性,降低的关键就是提升单个算法性能极限,同时对多个算法的结果做交叉验证。
精彩问答
问:机器视觉对光线,进动态要求很高,计算机的运算速度要求更好,据我所知,目前连最基本的ADAS系统的准确度都很低,除了Mobileye有芯片,其他还没有成熟,出现虚报误报的情况很多,如何保证无人驾驶的安全?
答:这个其实是基于上一代计算机算法,就是传统的视觉算法。使用深度学习之后,结果会有非常大的提升,以我们目前的测试结果来看,最起码在检测任务上,计算机视觉是完全可以达到产品的需求,尤其是对于ADAS这样的产品完全不成问题。
至于芯片的选择,Mobileye有自己专用的芯片,但目前我们也可以针对这种深度学习算法考虑英伟达嵌入式GPU这样的平台。我们的ADAS系统是基于英伟达TX1芯片,自动驾驶平台则会基于英伟达DrivePX2以及后续的DrivePX平台去做。在这样的支撑下,我们可以做到很好的结果。
问:目前自动驾驶技术突破是从车场突破可能性大一点,例如特斯拉、丰田还是计算机算法公司如谷歌、百度?
答:其实单就任何一个方面,车厂或者是计算机视觉公司,能实现突破的可能性都不大,汽车产业是一个非常长的产业链,车厂是偏向底层的控制,如车辆本身的控制;而上层是算法公司控制的。其实这两部分缺哪一部分都是不可以的。
如果自动驾驶技术在乘用车上真正能够商用化,这两者一定需要一个非常好的合作关系,目前我们也看到了这样一些联盟。我相信在不远的将来,在乘用车市场的上游和下游产业链一定会有比较好的融合。