亲爱的晓伙伴们!春晓资本“晓专栏”迎来第六期,本次继续放送由春晓资本投资总监刘海涛倾情主笔的自动驾驶晋级路上的几大关卡系列分析。本次晓专栏将就不够靠谱的传感器——摄像头进行详解,以下enjoy:
双目还是单目?这不是个简单的选择题!
想到这个标题得时候,不知道为什么我大脑里突然想到了WALL·E和EVA那对机器人小情侣。
2008年上映的这部《机器人总动员》在俘获了全球科幻迷内心那点小柔软的同时,在全球市场上狂扫近6亿美金票房,并且还顺带着拿了个小金人。不得不承认工科男确实是一个不同的物种,当别人都在感动于两个机器人间的懵懂爱情时,我却在思考一个“略显深奥”的技术问题——为什么WALL·E要装两个摄像头当眼睛,而不是像星战里得那台吸尘器(型号为R2-D2的工程机器人)一样,用一个摄像头?
《机器人总动员》电影剧照
上一篇文章介绍过,自动驾驶环境感知系统中一共有三个主要的传感器——毫米波雷达、摄像头和激光雷达,并且具体介绍了一下毫米波雷达。文中说到,毫米波雷达有一个很大的缺点——分辨率实在太低,低到不知道探测到的障碍物到底是什么。那么作为三个传感器中分辨率最高的摄像头,无疑就是弥补毫米波雷达这个缺点的最有效方法。所以这个系列的第二篇文章我就想说一说自动驾驶环境感知系统的第二个重要传感器——摄像头。摄像头的应用领域非常广泛,在已知的电子消费品中大多都集成了摄像头。那么在这篇文章中,我们就把摄像头放在自动驾驶这个特殊的应用场景下讨论讨论。
车载双目摄像头系统
作为自动驾驶环境感知系统的传感器,汽车和消费电子产品对摄像头的功能要求有很大不同。消费级电子产品上搭载的摄像头,其功能是能拍出一张照片(例如手机的前后摄像头)、或将连续拍摄的照片拼接成视频。在这个功能要求下,摄像头只需要具备简单的二维成像功能就已经足够。而车载有很大不同,在这个应用场景中传感器必须能够提供3维信息——也就是“二维平面图像+深度信息”。目前部分高端手机由于面部识别的功能要求,摄像头也已经增加了深度信息采集功能,但大多是通过“结构光技术”来实现(感兴趣的童鞋可以去度娘一下)。“结构光”的测量精度比较高,但是他的深度探测范围仅有几十厘米到几米,这对于行驶速度几十上百公里每小时的汽车来说实在太小了。所以车载摄像头采用了其他的技术路径解决这一问题。
结构光三维建模
说到这里不得不提一个挺牛掰的公司——Mobileye。Mobileye采用的是单目摄像头测距技术。其原理是先进行目标识别,识别行人、物体、车型等,再通过目标在图像中的大小去估算目标距离。这就要求在估算距离之前先对目标进行准确识别,是汽车还是行人,是货车、SUV还是小轿车,准确识别是准确估算距离的第一步。由于其产品早在2007年就进入了市场,是一段时间内唯一靠谱的车载摄像头方案,所以Mobileye一直雄霸车载摄像头市场十年。我们熟悉的特斯拉在2016年以前就是通过搭载Mobileye的产品实现了那个争议满满的自动驾驶功能。
特斯拉自动驾驶
但是Mobileye的技术路线有一个问题很难彻底解决,那就是他的识别率高度依赖于数据库。比如一个妙龄少女穿着牛仔裤的时候可以被识别出来,但是穿着拖地晚礼服的时候就不一定能被识别出来。又或者对北京夏天街头偶尔能见到的“膀爷”们,系统也需要提前单独建一个数据模型。也就是说,如果遇到了数据库中没有的东西,或者遇到同一种物体但大小不同(例如大人和小孩儿),这时候单目摄像头系统除了”面壁思过“,其他的基本什么也做不了。这时候就出现了另一个完全不同的技术路线——双目系统。
双目系统的工作原理比单目稍微复杂一些,是仿生学的一个实际应用。在自然界中,善于“远距离目标定位”的动物(比如人、狮子、猎豹等)无一例外都拥有“一双”位于头部前侧眼睛。大脑会根据目标物体在两只眼睛成像的视觉差异计算出目标物的大致距离。(这里强调前侧,是因为食草动物为了更大范围观察周围情况,眼睛大多长在头部两侧。)
猎豹的双眼
双目系统就是模仿了这种距离探测方式,利用两个摄像头同步拍摄目标图像,通过计算两幅图像的视差,利用双目三角测距的原理,直接对视场范围内的景物进行距离测量,而无需识别前方障碍物的类型。所以对于任意类型的障碍物,双目系统都能给出有效的距离信息,向自动驾驶系统提供决策依据,从而进行必要的预警或制动。和单目系统相比这种测量原理有一个非常明显的特点,就是不需要依赖于海量数据库进行目标识别,这样就大幅提升了系统的可靠性和响应速度。这两个优点对于汽车行业来说恰恰是最为重要的。
不可否认的是,Mobileye的单目方案确实在汽车环境感知系统传感器市场上获得了巨大的成功。但是从目前整车厂和自动驾驶系统公司的方案中,明显可以感觉到双目系统大有后来居上之势。在整车厂阵营中,奔驰、宝马、路虎、捷豹、雷克萨斯、斯巴鲁等豪华品牌车都已经在自己的量产车上配备了双目视觉系统,供应商包括博世、大陆、电装等Tier1巨头。再来看看自动驾驶系统公司。日本的老牌自动驾驶公司ZMP一直拥有自己的双目摄像头系统。国内方面,百度刚刚量产的“阿波龙”自动驾驶汽车上搭载的就是国产厂商——“中科慧眼”的双目系统。从这些巨头们的动向看,我们基本可以确定“双目”将会是未来车载摄像头的主流技术路线。
搭载中科慧眼双目双焦摄像头系统的
百度“阿波龙”无人驾驶汽车
但是双目系统也不是完全没有缺点(或者说难点),除了硬件成本会高于单目系统外,算法开发难度也更高,模块结构设计和材料选择等工程化问题也更难一些。我们都知道汽车的使用环境对于电子产品来说是非常恶劣的。比如环境温度,电子设备要面对的往往是接近一百摄氏度的环境温度差。在这么大的温差下,单是材料的热膨胀问题(简单说就是热胀冷缩)都会导致整个系统产生不小的测量误差。要解决这个问题,除了要在材料和结构上下功夫外,还必须从算法上修正这种误差。
中科慧眼官网上的双目摄像头测距原理图
双目系统虽然不需要对目标物进行识别,但是需要立体匹配。立体匹配需要对每个像素都做出运算,这个计算量就非常大,对算法的要求也非常高。此外还需要解决两个摄像头的同步、系统出厂前的ISP调教、汽车震动等一系列难题。所以总体来说,双目系统的开发难度其实是远远大于单目的。
作为一家双目系统公司,算法是公司的基础能力。在算法上各家有各家的绝活,我们就不多做讨论了。下面我想着重说一说硬件部分。
前方略枯燥
双目系统示意图
上图是一个简化的双目系统示意图(由于我所接受的基础教育中“美学”部分的严重缺失,导致这幅图基本没有美感……大家凑合着看)。通过这幅图我们可以看到,一个双目系统是由两台摄像头和算法组成的——当然系统里还有很多的外围电路器件,这里就不一一说明了。一般来说,相机本身并不是双目系统公司自己做。因为这属于光学成像领域,和双目系统完全是两个世界。组成摄像头硬件本身(黑色框部分)的是镜头、图像传感器、以及ISP(Image Signal Processor——图像信号处理)。镜头是由一组透镜构成,起到的作用是将光线聚焦到图像传感器上;而图像传感器的作用就是将光信号转换为电信号;而后面的ISP的功能是电信号处理为人类视觉或者是机器视觉为目标处理的数字图像。
我用黑色框把摄像头框起来其实是想说明:“一般来说”,摄像头硬件对于不管单目还是双目系统公司来说都是一个“黑箱”(一定注意是“一般来说”,确实有的团队自己能做摄像头的)。双目系统科技公司通常没有能力自己开发摄像头硬件,只能采购现成的标准化产品来搭系统。
德国Basler公司的工业摄像头产品
在摄像头这条产业链上,上游的摄像头产品大体可以分为两类——消费级摄像头和工业级摄像头。两类产品的区别大致如下:消费级摄像头一般来说是彩色的,主要用在手机、计算机、数码相机和摄像机等消费电子产品上。消费级摄像头通常无法达到工业应用场景对摄像头稳定性和可靠性的要求,而且由于应用场景明确、市场规模巨大、标准化程度高,所以消费级摄像头的ISP是非常封闭的;而用在工业领域的摄像头由于应用场景的特殊性,一般来说黑白的就够用,但是稳定性可靠性高很多。由于工业领域对摄像头的具体应用需求千差万别,所以ISP开放出来很多接口可以供二次开发使用。由于汽车工况的特殊性,整车厂前装的摄像头产品要求必须都是车规级的,这就比工业级产品对可靠性和稳定性的要求更高。
在认清了这些事实以后很多事情理解起来就不那么难了。
中科慧眼深度图
上面我说过,双目系统的原理是通过“同一时间”拍摄的两张图片进行运算得到深度信息。那么双目系统开发的时候就有一个最基本的问题必须解决,那就是两个摄像头的“帧同步”。在使用工业级摄像头搭系统时能够通过其ISP开放的接口,相对容易的实现帧同步功能,而消费级摄像头想做同步就困难很多。再加上算法的简化、车规对可靠性、稳定性等方面的严苛要求,所以采用工业相机就成为了大家的普遍选择。其实据我的了解,除了通过ISP控制外也有其他的办法实现双目乃至多目系统的帧同步(比如很多CMOS传感器都支持的主从模式等等)。但是通过ISP实现应该是最简单、可靠,而且占用计算资源比较小的办法。
—————————————————— 枯燥内容结束 ——————————————————
作为自动驾驶环境感知系统三大传感器之一的摄像头,还有一个不管双目还是单目系统都亟待解决的重要问题。在本文的最后我想着重说说这个问题。
优步自动驾驶车撞死行人的新闻截图
大家应该还记得今年3月份的一个报道吧——“优步的一辆无人驾驶测试汽车在路测的时候撞死了行人”。这出悲剧发生后,全球舆论很快就分成了两个阵营,一派认为政府对自动驾驶的限制太宽松了,这才导致事故发生,应该更加严格的约束测试公司的路测行为;另一派则认为,自动驾驶事故率其实并不比人工驾驶更高,而且从视频画面看行人应该负有更多责任。作为一个工科男,我更关注的却是另外一个维度的报道——分析事故背后的技术问题。总结一下这类分析文章,事故发生时大概是以下情形:测试员当时关闭了激光雷达,这时候实际在工作的可能只有摄像头和毫米波雷达。但是毫米波雷达由于其先天不足并不太善于发现侧面突然跑出来的行人,而这个时候“环境光线”又非常复杂,所以摄像头也不太可能做出应有的反应。
注意了!这里有一个关键词——“环境光线”。与一般的民用场景和工业场景不同,自动驾驶汽车的环境光线是非常复杂的。比如遇到逆光、炫光、光线明暗快速变化、光线很弱或者很强的环境,在这些环境下摄像头肯定出问题。原因在于目前能够批量采购到的摄像头的“环境光宽容度”都很有限。从技术角度看,这个锅并不应该让自动驾驶测试公司或者双目、单目系统公司来背,而是应该由摄像头厂商来背。针对这个问题我在咨询了一些成像领域专家,以及专业摄影师以后有了一些小心得,在这里用最简单的语言跟大家分享一下。
说到“环境光宽容度”,其实大家应该都有过亲身感受。老人们口中所说的“灯下黑”就是目标物和环境光之间的光强差距超出了眼睛的“动态范围限制”造成的。对人眼来说是这样,对摄像头来说也是这样。当光线过强的时候,CMOS传感器的曝光时间就要缩短,否则会出现“过曝”;当光线过弱的时候就要延长曝光时间,否则会出现“欠曝”。
EyeMore(眼擎科技)图像处理引擎的弱光成像效果
当摄像头在光的明暗对比明显的环境下拍摄,摄像头因为受到自身动态范围的限制,测光点设置在取景框亮的地方,整个画面就会为了优先表现明亮的地方而让周围变暗,如果测光点在暗的地方,就会优先表现暗部细节而让画面过度提亮,这样出来的照片不是过曝就是欠曝,不能同时纪录极端亮或者暗的细节。为了解决摄像头环境光宽容度问题,摄像头的ISP技术在这几年也有了比较大幅度的“进化”。比如现在支持WDR(Wide Dynamic Range——宽动态范围)模式的ISP,就可以输出100dB以上的宽动态图像。此前也有BLC(中央背光补偿)、逆光补偿等解决方案,这里就不一一说明了。
但是单纯解决了ISP问题还不够,比如硬件之间数据传输的带宽不够、硬件成本等等因素都对摄像头的性能有一定制约。工业科技就是这样,往往单一的产业环节并不能单纯靠自己解决一切问题,而是要依靠整个产业链共同努力。除了机器视觉,毫米波雷达和激光雷达等产品要想提升产品性能也同样需要上游提供性能更好、更加稳定可靠的元器件。
因为提到了交通事故,所以这篇文章的整体基调似乎沉重了些。借此我也想呼吁一下整个自动驾驶行业:“请大家尽量严格约束自己的测试行为,李老板坐着自动驾驶汽车上北五环的事情还是不做的好。”一方面我们还是应该对生命保持应有的尊重和敬畏之心;另一方面,这样也能降低自动驾驶技术普及过程中的社会负面情绪。虽然有句话叫“变革总要伴随一些牺牲”,但这种牺牲还是应该能少一点是一点。个人认为墨家先贤们提出的“道技合一”的理念,在人工智能时代即将来临的当下,是很有社会意义的。
好了,今天就写到这里。欢迎大家继续拍砖哈!
评论