眼擎科技CEO朱继志:如何设计自动驾驶的视觉成像系统 | 吃瓜笔记-阿里云开发者社区

开发者社区> 量子位> 正文

眼擎科技CEO朱继志:如何设计自动驾驶的视觉成像系统 | 吃瓜笔记

简介:

6月14日晚,量子位邀请到眼擎科技创始人兼CEO朱继志,从视觉成像、动态范围等角度讲解了如何设计自动驾驶的视觉成像系统。

本期主讲人朱继志,毕业于北京大学电子学系,曾任职于中兴视频通讯部,积累有10年视频图像技术开发及产品管理经验;后任职于国内最大的芯片分销商担任VP,有8年芯片领域推广营销经验。

babca7a6216ebccd118dfc8dbef77303ad8b1673

本次分享反应热烈,量子位应读者要求,将详细文字笔记整理如下:

光线的差异

f131f13266f39488fe87426a96634a7d6db12db4

眼擎科技专注做成像引擎技术,可以广泛应用在AI机器视觉的各种领域里,其中自动驾驶是很重要的一个应用领域。

首先说一下光线的环境的差异。

在实验室里,图像识别率很多时候能达到95%,甚至99%,但是在现场时可能会变成了80%。用户通常会很关注能不能准确识别的这个问题,所以从用户的角度来看,感觉上这个系统的识别率可能会只有60%,也就是在勉强及格的水平。

这其中很多问题都是因为图像源所导致的,现场和实验室最大差异的源头就是光线的环境。看上去还有很多原因,但是最重要的原因就是光线差异的问题。

光线是自动驾驶相关领域经常碰到的问题。比如:进出隧道的时候反应比较慢,隧道内是黑的,隧道外是亮的,两个场景切换需要适应一段时间才能完全看清。还有一个场景是夜晚的时候,路上可能有多种多样的景观灯,还有各种车灯照射,导致红绿灯、路标等都不那么明显。

在这些各种各样的场景中,因为光线的问题,待识别的目标可能是死黑的,比如刚进入隧道时,目标人物在一个阴影下,摄像头出来的原图是黑的,很难被检测到;视觉也有可能是全白的,车灯闪过来的时候噪点很多,目标可能不好识别;也有可能检测时目标物体的边缘很模糊;还有颜色的偏差等等。

还有响应速度快慢的问题,比如:几秒钟会没有图像,或者基本上图像很黑。

放在前端成像来看,最主要和最根本的原因是动态范围不够,也就是Dynamic range的动态范围太窄。

动态范围

今天讲视觉系统核心的问题,主要也是围绕动态范围来展开,这是绝大部分场景里都会碰到的成像端的问题。

03d7ecaef0a2e37a5d9417c10be313ded1fd336b

对于动态范围简单的理解就是:亮部、暗部以及整个画面里,用光强来测试的话,它的比值是多少。动态范围和人的感知是有差异的,因为人的眼睛本身就会对动态范围进行处理,所以在我们感知到的逆光情况下,人看上去会认为可能只差十倍差五倍,但实际上有可能差了500倍甚至1000倍。

整个范围中,还有局部的每两个物体的亮度间都可以形成一个动态范围。动态范围,其实有三种概念:

首先是整个环境的动态范围,也就是光比的值,比如说进出隧道的时候,隧道内外的光线反差会特别大;还有在局部的时候,比如白色和黑色的物体,在同样的光照环境下,反差可能会很大。

第二个动态范围的概念是传感器,一般是指CMOS Sensor的动态范围,也就是说CMOS在做光电转换的时候,传感器能够承载的动态范围有多少。

第三个动态范围是指整个相机的视觉图像。传感器的动态范围出的是RAW数据,在数据上可能有90个dB或者120个dB,但并不意味着后期图像、视频可以达到这个值,因为还有相机的处理动态范围因素。

这三个动态范围有一个匹配的问题。如果说环境的动态范围远远大于传感器的范围,那传感器本身就处理不了,会损失很多信息,这个时候就是选择丢失亮部的信息,还是丢失暗部的信息。

同样的道理,如果相机动态范围比传感器的动态范围小很多,在做识别自动驾驶的最后一个环节的时候,得到的图像源还是很少。

理想的状况是:如果最后相机的动态范围输出大于环境动态范围,那就不会有因为光比而导致的问题。

如果是跟人眼相比,人眼动态范围大概是120个dB,传感器有120个dB,人眼动态范围大概是什么概念?人眼的情况下,一般红绿灯、摄影灯等,但如果是一个类似汽车的大灯照的大光源,我们就会看不清楚周围的东西。

如果严格符合120dB的这种效果,基本上绝大部分的光线范围的场景都可以解决。把它转换成CMOS,120DB对应的是20个比特,这是一个非常大的值,那现实当中呢其实经常会碰到这种光比反差会很大的这种。

我们所有做AI的现在都不是采用RAW数据直接进行处理,都是用标准的jpeg图像进行训练,标准的jpeg图像都是8比特。

这里面就有一个巨大的差异:通常情况下看一个标准的摄像头,如果没有经过特殊处理,它的输出动态范围只有8比特,对应48个dB。但是在现实场景中,比如过隧道,很容易出现需要72个dB,甚至90个dB的现场动态范围。没有达到就会出现各种各样的奇怪的现象,可能是过曝的、可能是全黑的等等。

怎么来解决动态范围的问题?

不能单看一个环节,一定要把它放在整个的视觉处理链条里来看。视觉如果是一个赛道的话,更像是一个接力赛。

6a2ab63f3a267fec1c0417d5c99db713997bf521

简单来看有四棒:镜头功能、CMOS、成像处理、 AI或者GPU这样的图像识别和分析。镜头是光进光出的光学器件,CMOS是光进电出的传感器特性,成像引擎是电子信号进图像出,最后AI或者GPU是图像进结果出。

对计算机识别来讲,前三个环节加在一起决定了整个图像的效果和它的性能。

第一个环节中,由光学的特性决定,镜头的焦距、光圈大小等等,整个来讲对动态范围的影响不大。

第二个环节是CMOS光电转换的性能,它是动态范围的第一道瓶颈,后面的环节都会受它的制约。所以首先要看CMOS传感器的动态范围是多少,如果希望整个输出动态要高的话,首先要选择高动态范围的CMOS传感器。

第三个环节是成像处理,也就是从电子信号到生成输出图像,连续图像就是以视频的方式输出给到后面AI识别的环节。目前市面上基本所有相机的成像处理的动态范围能力都不够。

经常会有人问:为什么CMOS模组写的是120dB,但遇到一点点逆光就性能不好呢?其实120dB只是CMOS的性能,出现这个问题是因为成像处理的动态范围不够。

CMOS的动态范围实际上是能够解决很多种场景的问题,但目前所有做成像处理的,绝大部分能力非常有限,甚至很多都只能处理8比特的输出视频。

最后一个环节是AI算法。从理论上来讲,AI算法可以直接接CMOS出的RAW数据,不管它是多少位的,但是在过去的这些年里,深度学习架构基本上都是基于标准的以前的图像来进行处理,都是8位的。所以这个结果导致GPU上跑的能够接的就是8位的标准的jpeg图像,或者只是图像源的一部分。

传统摄像头的ISP

摄像头里面有个ISP,传统数码的ISP最大的弊端就是没办法适应传感器的动态范围。

成像处理的这个部件,它到底干些什么事?

它有三部分的功能,其中首先是一个CMOS的控制器,所有CMOS输出的是数据量很大的视觉的信号,所以没有单独的芯片,以前都是在ISP上做的。

第二部分是有很多信号处理的算法和流程在这个里面。

第三部分是形成图像以后,还要做很多图像的算法处理,这一部分比较接近计算机视觉里的图像的算法。

成像处理其实也就是成像引擎,它将这三部分融合在一起,而且它最大的特点就是实时,所以这几部分基本上都不能放在CPU和GPU里来做,成像的算法放到后端,理论上来讲也许是可行的,但实际操作并不可行。

目前所有ISP的问题,基本上都是来源于90年代日本公司做的数码相机的成像架构,最典型的就是单反。比如索尼除了做单反,同样也做用于监控的摄像头等等,这些ISP的架构都是数码相机的架构。

数码时代的成像特点就是计算能力很差,而且是八位的固有结构,固有架构不能够很好地处理弱数据。这个架构在单反里,是整个ISP里最高端的产品,所以其他都沿用了这个架构,这个架构到今天为止已经很长时间没有被改变了。

数码ISP的一个趋势就是越来越会变成SOC内部的一个IP的核。

手机相机的处理都在主芯片里,主芯片干各种各样的事情,这也是目前的趋势。在这个思路之下,在过去的十几年里,所有ISP就碰到了成像的问题。

举个例子,现在手机里面流行处理逆光和暗光能力,但是都没有改变手机主处理器里面的ISP部分,而是利用后面CPU和DSP、GPU的功能拍出多张来合成。

这样的模式会有很多副作用,这些副作用最典型的是:用多张的合成来修一张照片的模式不能用在视觉的视频分析里,视频中多张合成的模式特别容易导致拖影等问题。

单反是RAW的格式,还有个Log的格式,RAW格式要靠手工的后期去修图。在汽车里需要符合车规,成本要求也很低,对成像的品质并没有特定的要求。比如行车记录仪,倒车的影像,这些对于光线的处理都很差。

eyemore成像引擎

我们做的成像引擎不是ISP成像引擎,而是叫eyemore成像引擎。

e9ce3628bc074fb124e0184623cda53ddc8cbc88

我们目前在做的就是通过一种全新的技术架构来解决动态范围的短板。

如果ISP不行,那是因为整个ISP架构不行。这些架构是在30余年前设计的,当时根本没有考虑到现在的图像识别的需求。所以我们的成像引擎中换了一个架构,有点类似现在AI图像中的整个体系的架构。

我们首先搭建一个很强的计算平台,有从8位到14位、16位甚至20位数据的计算能力。

第二部分是有了技术能力以后,又做了很多算法,集中在降噪、动态范围处理以及算法,还包括白平衡等等一些颜色校正的算法。

第三部分是在这些算法的基础之上处理复杂光线。不仅在实验室里测试,还到几百种场景下进行复杂数据的测试,根据这个测试数据的结果再去优化算法。

把算力、算法与数据加在一起,是一个全新的成像引擎的架构。

它有强大的RAW数据的处理能力,高保真还原,基本不会损失任何CMOS的信息,输出也是标准的8位的视觉视频,也就是说后面计算机视觉和AI算法的部分,都不用担心前端输出格式的问题。

我们在动态处理上,是用单帧的机制,不使用多帧合成。目前市场上提到动态范围都会提到“多帧合成”这个词,这样的方式相对来讲比较简单。

这种方式有些场景下能用,但在汽车行业里面基本上没有任何用处。因为用这种方式很容易拖影,还有响应时间长等其他问题。

下面有三段视频,希望能够帮助大家理解动态范围,以及eyemore的成像引擎和和传统成像引擎ISP的差别。

13829408a22d4bd95f1d4319e016a9bb4248e78c

白天经过隧道的场景对比

经过隧道的场景。右边是传统相机,出现了过曝的全白的现象,这样会丢失大量识别的信息。

f58b201ba801497eb76d10208faa8a944e392885

晚上路测场景的对比

晚上路测场景的对比。右边传统相机检测到行人汽车时,会变黑;而我们的成像引擎是清楚的,包括背景的路牌。

6453ba92cc74acc7bc79af99e222c049b428e12a

完整的过长隧道的场景

完整的过长隧道的场景。在长隧道里,很像晚上的场景,可以看到路灯,隧道里的红绿灯等都很清晰;出隧道的过程中,过渡非常平滑;出隧道的时候,外面是晴天,但基本上就没有出现全白的图像,整个过程是完全平滑过渡。

这是非常典型的eyemore成像引擎处理逆光高动态范围的场景。

做图像分析和识别的时候,看到的现象是各种各样的,从源头上说,最主要的原因都是动态范围的问题,eyemore成像引擎最主要的应用就是去解决各种各样的高动态范围的自然的实时的彩色图像的处理过程。

那eyemore的成像引擎是怎么实现这种处理的?

8f4b5116a9236589259803f2038a4ca17b139f34

先定目标。我们的第一个目标是,输入和输出都是标准的8位的jpeg图像;第二个目标是所见即所得,在测试的时候看到的效果就是最后输出的效果;第三个目标是自动适应各种各样的场景。

这里面最麻烦的是,不管在前面的成像中做任何处理都会改变像素的RGB值,对其他的环节都会产生不可预知的影响,尤其在光线复杂的场景下,会产生各种不同的问题。

然后是架构上的目标:一个架构,需要适用于各种各样的应用。

最后一个目标是还原颜色。

我们的目标就是这些,目标决定了方法,传统相机里做ISP的,大家不喜欢改变ISP本身,而是改变CPU、GPU,这种方式通常会产生一些副作用。最典型的例子是在自动驾驶车里,传统的方法很难有效。

而eyemore是全新的硬件处理架构,有一些新算法和各种场景的实测数据。需要花大量的时间不断优化,包括噪声的处理等等。

最后用结果来验证。举个例子,通常不会自己简单地看CMOS的指标,要把CMOS调完了之后才知道哪些地方不行。

还有一点提一下,夜晚在道路上,感光度需要一定,但是没有需求到特别高。还是动态范围的问题,要求信噪比比较高。也就是信息量越大,噪声越小,信号源品质就越高。对后面识别的过程来说,信号源品质好,不管做什么变换处理识别都越容易。信噪比是保真度的一个基本指标。

从降噪来看,降噪也是一个系统的工程,不光是算法层面的事情,还需要硬件的支持。比如传感器,它会受到电源的干扰,结果有可能会出现噪点比较多的情况,所以我们在做传感器的电路,以及成像电路的时候会特别仔细,会做很多板来确认信号。

传感器的属性也是一样,成本、像素高、帧率高、动态范围高,这几个要素很难同时兼顾,所以传感器的属性也对结果有很大的影响的。还有一点是在处理图像的时候,实验值和理论值差别很大,全局和局部的信噪比差别也很大。

所以一定是要做高动态范围的处理。相机和人相比,最缺的也是动态范围不够。人因为是进化的结果积累的,所以能够适应绝大部分的场景和环境;而相机因为动态范围不够,所以会出现很多不足。以前是通过各种修补的方式来实现,现在在自动驾驶和AI的领域,大家需要整个方案来解决系统的问题。

我们针对汽车行业,有一个参考设计叫DX120,在这其中,CMOS的规格是车规级,支持120dB,输出8比特,也就是说后面图像识别的算法层面,不用担心图像源,图像源会是一个标准的视频和视觉图像,也可以适应现场的120dB,也就是20位的动态范围。

d77a8b5a76c5576ddf05cd276bf59aa8eb8d9f10

那我们提供什么样的方案和服务?针对以下三种情况:第一种是现场测试,我们提供即插即用的标准的成像模组,它跟工业相机一样可以直接用于测试。

第二种是系统的快速验证,图像处理后方AI的系统,成像引擎板卡与合作伙伴处理系统板卡对板卡之间的快速打通。

第三部分是深度定制,根据实际的需求,有不同的传感器、接口和参数的系统。

分别看一下这三部分,第一个即插即用的标准化自动驾驶的测试相机产品。产品比较像一个小的工业相机,镜头接口是标准的CS口,各种镜头都可以使用。

相关产品有一个系列,所有产品都具备高动态范围的特点。里面也有支持全局曝光的型号,输出接口有USB的,HDMI网口等等,这是一个工业级标准。

下面这张图是盒子拆开以后,里面有三部分,前面有三块板子,是主板、传感器板,主板上面是接口板。整机的不同型号,主板是一样,传感器板和接口板是不同的规格。

在做快速定制时,由于后端有AI处理的程序,那最快的方式就是定制一块接口板,把成像引擎的输出接到输入里去。这样的好处是打通了后端AI视觉和前端的成像。能够可以验证各种不同规格的传感器,包括接口板,实现多传感器的同步,最终实现一体化的产品和样机。

还有一种全方位的高端成像系统定制。接下来整个视觉行业发展会非常快,标准产品不一定能够满足需求,客户可能会选择不同的CMOS,不同的结构,不同的尺寸,对应需要什么帧率,什么样的全局曝光策略等等都要思考。

行业相关的一些看法

因为我们做成像的产品,所以不仅跟自动驾驶,还跟其他需要AI视觉的公司交流很多,跟大家分享一下几个看法。

第一,是AI视觉的落地其实还有挺长的路要走,做自动驾驶的同学可能体会更加深。在各种环境中的识别进步都很快,但都不完善。前几年提到AI的时候,特别强调识别的能力,但真正到落地的时候,前端的产品非常关键,落地主要靠前端源,以及源跟后面大脑的配合。

第二,大脑是不是能够做前端的事情。比如图像因为被遮挡了或者本身噪点很多,后端能否有方法补偿。这个理论上是可行的,但是大家理解的大脑和眼睛也是各司其职的,图像看不清,靠大脑脑补这种情况还原也非常有限,所以我们不要抱侥幸心理觉得靠大脑还原的方式能够跨越这个门槛。

第三,所有应用的落地,都是产业链合力的结果,需要各个环节的共同进步。从镜头到CMOS、成像到最后的AI识别,这是一个系统。哪个环节出问题,整个系统也都会出问题。

第四,我认为AI视觉更多的属于工业领域。在落地的时候,比如汽车、安防医疗机器人等等产品,需要有很高的可靠性才能够大规模落地,这是工业产品的思路。落地的时候主要是找短板,补齐短板给出的解决方案才是最重要的。

最后,在落地的时候,工程经验比理论值更加重要,还有现场的环境比实验室更加重要,这也是我们自己在各种各样的测试产品的一个最深的体会,就是一步步去优化,一步步去改进产品,让它能够稳定,各种场景下都能够适应,这才是一个可靠的产品。

Q&A

现在成像引擎市场应用情况怎么样?离手机应用还有多远?

现在我们在各种行业里面都开始有不同的场景,除了整机、快速的接口定制以及深度定制,在各个行业里主要有汽车、安防、医疗、机器人、3D打印等等场景。

然后手机是个比较特殊的市场。到目前为止,手机成像中主要PK的是拍照,可能用不上非常复杂的技术,目前拍照的功能是可以通过多张合成后面的方式来形成一张照片。

但是接下来我认为在1-2年之内,手机的PK关注点会转到拍视频上,到拍视频的时候,所有处理修图的照片的技术架构是没办法用来做视频的这个处理的。所以从这个方面来讲我们也会开始考虑合作,但应用到手机里还需要挺长的时间。

请问现在算法是已经流片了还是FPGA实现的?

现在我们是流片,目前在销售的是FPGA的模组。目前也正在流片中,这也是我们的一个市场策略,会先通过FPGA的模组去帮助我们的客户快速实现产品化,这些客户量产之后,也还是以模组的形式给大家用。因为这个芯片做出来,其实大家可能很长时间用不起来。

是不是可以快速生成3D图像,最快的处理速度达到多少?

我们是做前端成像的,3D图像就跟AI一样。我们是在各种情况下输出很更好的图像源,至于图像源怎么用两个三个来拼还是单个去测距,这是后面算法的事情。最快处理速度这个概念有点模糊,因为这跟帧率、曝光时间和分类都有关系。


原文发布时间为:2018-06-26

本文来自云栖社区合作伙伴“量子位”,了解相关信息可以关注“量子位”。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

官方博客
官网链接