嵌入式系统中的视觉处理技术怎样选择
扫描二维码
随时随地手机看文章
嵌入式系统可以是任何基于微处理器的系统,它们完成特定的工作,且随处可见,例如:汽车、厨房、消费电子、医疗器械等等;计算机视觉则使用数字处理和智能算法去理解图像或者视频,它是一个已经被研究很久,但仍然方兴未艾的领域。
“嵌入式视觉”这一名词是指在嵌入式系统中使用计算机视觉技术。换句话说,“嵌入式视觉”是指从视觉输入中提取出其背后含义的嵌入式系统。与过去10年中无线通信技术的流行相类似,嵌入式视觉技术有望在今后10年得到广泛应用。
很明显,嵌入式视觉技术能够为多种应用带来巨大的价值(图1)。两个例子是,Mobileye基于视觉的辅助驾驶系统,用于帮助防止车辆事故的发生;以及MG国际公司的泳池安全系统,旨在防止游泳溺水。还有一些纯粹的怪才发明,Intellectual Ventures的激光灭蚊枪,设计用于防止人们感染疟疾等。
图1.嵌入式视觉是从计算机视觉应用开始的,这些应用包括,装配线检查、光学字符识别、机器人技术、监控和军事系统等。但是,最近几年,对降低成本提高性能的需求加速了这一技术在各种其他市场上的广泛应用。
正如同高速无线互联是从高成本新奇技术起步一样,目前为止,嵌入式视觉技术一般只用于复杂昂贵的系统中,例如,毛发移植的手术机器人,制造业的质量控制检查系统等。
数字集成电路的发展是高速无线技术从新奇发展到主流的关键因素。芯片速度足够快,成本足够低,能效足够高时,高速无线技术便成为市场主流技术。今天,人们能够以不到100美元的价格购买宽带无线调制解调器。
同样的,数字芯片技术的进步为嵌入式视觉的大批量应用铺平了道路(图2)。与无线通信相似,嵌入式视觉需要很强的处理能力——特别是,越来越多的应用采用了高分辨率摄像机,开始使用多台摄像机。以足够低的成本实现这类处理能力,从而促进大批量应用,这是一个很大的挑战。事实是嵌入式视觉应用需要很强的可编程能力,进一步增大了这一挑战的难度。在无线应用中,标准意味着不同手机之间的基带算法不会有太大的变化,与之相比,在嵌入式视觉应用中,通过独特的算法,有可能得到更好的结果——实现更有价值的功能。
图2.嵌入式视觉辅助系统涉及到硬件、半导体和软件元器件供应商,子系统开发人员、系统集成商,以及最终用户,还有实现未来突破的基础研究等。本文主要关注图中显示的嵌入式视觉算法处理技术。
采用嵌入式视觉,业界进入了一种“良性循环”,这是很多其他数字信号处理(DSP)应用领域的特点。目前虽然很少有专门用于嵌入式视觉应用的芯片,但是,这些应用越来越多的采用了针对其他应用开发的高性能、高性价比处理芯片,包括,数字信号处理器、CPU、FPGA和GPU等。这些芯片单位成本、单位功率的可编程性能越来越高,因此,能够支持实现大批量嵌入式视觉产品。这些大批量应用也相应的引起了硅片提供商更多的关注,他们会提供更好的性能、更高的效率和可编程处理能力。
处理选择
如前所述,视觉算法通常需要很强的计算能力。当然,所有的嵌入式系统一般都受限于严格的成本和功耗要求。在其他DSP应用领域,例如,数字无线通信等,芯片设计人员使用专用协处理器和加速器来完成应用所要求的苛刻的处理任务,同时满足了高性能、低成本和低功耗需求,从而解决了这一难题。但是,芯片用户一般不能对这些协处理器和加速器进行编程。
无线应用通常能够接受这些优缺点,无线应用标准意味着不同设备设计人员使用的算法之间有很强的共性。然而在视觉应用中,对算法的选择并没有标准约束。相反,一般可以选择很多方法来解决某一特殊的视觉问题。因此,视觉算法是非常多样的,往往随着时间的变化而迅速变化。结果,与数字无线和以压缩技术为主的消费类视频设备等应用相比,视觉应用并不倾向于采用非可编程加速器和协处理器。
但是很难同时实现高性能、低成本和低功耗以及可编程功能。专用硬件通常能够以低成本实现高性能,但是可编程能力较弱。通用CPU具有可编程能力,但是性能较差,性价比不高,能效也较低。要求较高的嵌入式视觉应用通常结合使用多个处理单元,例如,可能会包括:
●通用CPU,用于启发式复杂判决、网络访问、用户接口、存储管理和总体控制等。
●高性能数字信号处理器,用于实时中等速率处理,不太复杂的算法等。
●用于简单算法像素速率处理的一个或者多个高度并行的引擎。
任何处理器在理论上都可以用于嵌入式视觉,目前最有可能的类型是:
●高性能嵌入式CPU
●专用标准产品(ASSP)与CPU相结合
●具有CPU的图形处理单元(GPU)
●具有加速器以及CPU的数字信号处理器
●移动“应用处理器”
●具有CPU的现场可编程门阵列(FPGA)
各类处理器,及其在嵌入式视觉应用上的关键优缺点
高性能嵌入式CPU
在很多情况下,嵌入式CPU不能提供足够的性能实现要求较高的视觉算法——也不能够以可以接受的价格或者功耗来满足性能要求。通常,存储器带宽是关键性能瓶颈,因为视觉算法通常使用大量的数据,不会重复访问相同的数据。嵌入式CPU的存储器系统无法设计适应这类数据流。然而,与大部分处理器相类似,随着时间的推移,嵌入式CPU的性能在逐渐增强,在某些情况下,能够提供足够的性能。
在可能的情况下,有足够的理由在CPU上运行视觉算法。首先,大部分嵌入式系统需要CPU来实现各种功能。如果所需要的视觉功能能够通过这种CPU来实现,那么,相对于多处理器解决方案相比,这降低了系统的复杂度。而且,大部分视觉算法一开始是在PC上开发的,使用了通用CPU及其相关的软件开发工具。PC CPU和嵌入式CPU (及其相关的工具)之间的相似性意味着,与其他类型的嵌入式视觉处理器相比,一般比较容易在嵌入式CPU上通过嵌入方式实现视觉算法。最后,嵌入式CPU使用起来通常比其他类型的嵌入式视觉处理器更简单,这是因为其相对直观的体系结构、成熟的工具以及其他的应用开发基础支持平台等,例如,操作系统。
结合了CPU的ASSP
ASSP是专用、集成度很高的芯片,定制用于特殊应用或者专业应用。ASSP可以采用CPU,或者使用单独的CPU芯片。凭借专业化,与其他类型的处理解决方案相比,ASSP通常具有优异的成本和能效。在其他技术中,ASSP通过使用专用协处理器和加速器来提高效率。而且,由于ASSP主要集中在专业应用上,因此,通常需要大量的应用软件。
这种专业化使得ASSP能够实现很高的效率,但是,也带来了很大的局限:缺乏灵活性。设计用于某一应用的ASSP一般不能用于其他应用,甚至目标应用相关的应用。ASSP使用唯一的体系结构,与其他类型的处理器相比,更难进行编程。实际上,某些ASSP并不支持用户编程。另一方面的考虑是风险问题。ASSP通常由小供应商提供,这可能会增加难以提供芯片的风险,或者无法提供后续产品以帮助系统设计人员更新其设计,设计人员不得不从头开始进行设计。
具有CPU的GPU
GPU主要是用于3D图形,并且越来越多的用于实现其他功能,例如,视觉应用等。目前,个人计算机的GPU倾向于可编程,除了3D图形还能完成其他功能。这类GPU被称为“通用GPU”,或者“GPGPU”。GPU有很强的并行处理能力。它们在个人计算机上是独一无二的。可以免费使用GPU软件开发工具,从GPGPU开始进行编程并不是很复杂。出于这些原因,在PC上第一次开发其计算机视觉算法的开发人员通常采用GPU作为并行处理引擎,他们出于仿真或者原型开发的目的,需要加速算法的执行。
GPU紧密集成了通用CPU,有时候是在同一芯片上。然而,GPU芯片的一种局限是目前能够集成的CPU类型有限,而且支持这类集成的CPU操作系统也很有限。目前,可以提供设计用于智能电话和平板电脑等产品的低成本、低功耗GPU。但是,这些GPU一般不是GPGPU,因此,除了3D图形之外,将其用在其他应用中有很大的难度。
具有加速器以及CPU的数字信号处理器
数字信号处理器是专门用于信号处理算法和应用的微处理器。对于视觉应用核心的信号处理等任务,这种专业化使得数字信号处理器的效率要远远高于通用CPU。而且,与其他类型的并行处理器相比,数字信号处理器相对比较成熟,使用起来更方便。
但是,虽然数字信号处理器在视觉算法上的性能和效率要高于通用CPU,但仍然难以提供足够的性能来满足算法要求。出于这一原因,DSP一般需要一个或者多个辅助协处理器。因此,视觉应用中一个典型的DSP芯片包括了CPU、数字信号处理器以及多个协处理器。这种异质结合能够产生很好的性能和很高的效率,但也难以编程。实际上,DSP供应商一般不支持用户对协处理器进行编程;而是让协处理器运行芯片供应商开发的软件函数库。
移动“应用处理器”
移动“应用处理器”是集成度非常高的芯片系统,一般主要设计用于智能电话,而不是其他应用。应用处理器通常包括高性能CPU内核,以及各种特殊的协处理器,例如,数字信号处理器、GPU、视频处理单元(VPU)、2D图形处理器,以及图像采集处理器等。
这些芯片专门针对电池供电应用进行了设计,因此,能效非常高。而且,由于围绕智能电话和平板电脑的应用越来越重要,因此,移动应用处理器一般有很强的软件开发基础支持平台,包括,低成本开发电路板、Linux和Android端口等。然而,正如前面章节对数字信号处理器的讨论,应用处理器中的专用协处理器一般不是用户可编程的,限制了它们在视觉应用中的发展。
具有CPU的FPGA
FPGA是灵活的逻辑芯片,可以在门级和模块级进行重新配置。这一灵活性使得用户能够随时实现定制满足应用需求的计算结构。它还支持选择满足应用需求的I/O接口和片内外设。能够定制计算结构,结合现代FPGA中大量的资源,同时实现了高性能和良好的性价比和能效比。
但是,使用FGPA实际上是硬件设计功能,而不是软件开发工作。一般在寄存器传送级(RTL)使用硬件描述语言(Verilog或者VHLD)来进行FPGA设计,寄存器传送级是很低的抽象级。与使用本文讨论的其他类型的处理器相比,这使得FPGA设计非常耗时,成本也高。
虽然如此,使用FPGA越来越方便了,这是由多种因素造成的。首先,是所谓的“IP模块”库——可重用FPGA设计组件库,其功能越来越强大了。在某些情况下,这些库能够直接满足视觉算法要求。在其他一些应用中,它们还支持视频I/O端口或者扫描线缓冲等功能。而且,FGPA供应商及其合作伙伴提供了越来越多的参考设计——采用了FPGA的可重用系统设计,面向专业应用。最后,利用高级综合工具,设计人员使用高级语言,在FPGA中实现视觉和其他算法,而且效率越来越高。用户可以在FPGA中实现性能相对低一些的CPU。而且,在少量的应用中,FPGA制造商在器件中集成了高性能CPU。