加速传感器融合嵌入式视觉应用
传感器在我们的世界经历了快速的推广,事实上,传感器现在已经非常普遍,以至于我们每个人日常所使用的手机里都有好几种不同类型的传感器。这些传感器能检测压力、温度、加速度和重力的简单变化,还有更高级的传感器,例如 GPS、RADAR、LIDAR 和图像传感器。 传感器融合是指从几种不同的传感器中提取数据,以生成靠单个传感器无法提供的信息。随后,可以对该信息做进一步处理和分析。并根据最终应用,必要时还可用传感器来制定决策。传感器融合分为两大类: 实时传感器融合 – 提取并融合传感器数据,并根据得到的信息实时制定决策。 离线传感器融合 – 这种方案是提取并融合传感器数据,但在过后的某个时间制定决策。 就嵌入式视觉系统和传感器融合应用而言,大部分应用适合实时传感器融合。 嵌入式视觉应用 嵌入式视觉应用正在经历迅猛增长,涉及领域广泛,从机器人、高级驾驶员辅助系统 (ADAS) 到增强现实,不一而足。这些嵌入式视觉应用对最终应用的成功运行有很大帮助。将嵌入式视觉系统提供的信息与来自不同传感器或多个传感器的信息进行融合,有助于更好理解环境,从而提升所选应用的性能。 很多嵌入式视觉应用只使用一个图像传感器来监控一个方向,例如只监测汽车的前方。利用这样的图像传感器能够检测、分类和跟踪物体。然而,由于只使用一个传感器,因此就无法测量与图像中对象的距离。也就是说,我们可以检测和跟踪到另一个车辆或行人,但如果不借助另一个传感器,我们就无法确定是否存在碰撞风险。本例中,我们还需要另一个能提供与检测到的对象的距离的传感器,如 RADAR 或 LIDAR。由于这种方法能够将来自多个不同类型传感器的信息融合,因此称为异构传感器融合。 图 1- ADAS异构传感器融合实例 另一种方案是提供第二个图像传感器,以实现立体视觉。这种方案是让两个图像传感器朝着相同方向,但分开一小段距离,就像人的两个眼睛那样,通过视差确定对象在视场中的深度。像这样使用多个相同类型的图像传感器,称为同构传感器融合。 当然,本例中的应用针对所用的架构和所选的传感器类型确定驾驶要求。这包括深度感的范围、测量精度、环境光和天气条件、实现成本以及实现复杂程度。 嵌入式视觉不仅可用于对象检测和汽车防撞,还可以作为导航系统的一部分,用来识别交通标志信息。未来还可融合更多种不同图像,例如医用 X 光、MRI(核磁共振成像)和 CT,或者安防和观察应用的可见图像和红外图像。 我们通常认为嵌入式视觉应用只使用可见电磁光谱,其实很多嵌入式视觉应用能融合来自可见电磁光谱以外的数据。 器件选择 在嵌入式视觉系统中,通常使用 All Programmable Zynq-7000 或 Zynq UltraScale MPSoC 器件来实现图像处理流水线。如果这些器件能用于传统的嵌入式视觉应用,那么也适用于嵌入式视觉融合应用。处理器系统与可编程逻辑的紧密结合能消除传统 CPU/GPU 实现方案中出现的瓶颈、确定性降低和时延增加问题。可编程逻辑 IO 结构的灵活性支持实现到高带宽接口(如图像传感器、RADAR 和 LIDAR 等)的任意连接。 图 2 - 传统 CPU/GPU 方案与 All Programmable Zynq-7000 / Zynq UltraScale MPSoC 的对比 对于嵌入式视觉传感器融合应用,我们可进一步利用处理器系统提供连接众多低带宽传感器的接口。例如,加速计、磁力仪、陀螺仪和 GPS 传感器都配有串行外设接口 (SPI) 和内部集成电路 (i2c) 接口,都得到 All Programmable Zynq-7000 和 Zynq UltraScale MPSoC 器件的支持。这使软件能够快速、简便地从多种不同类型的传感器中获取所需信息,并提供给可扩展架构。需要一种方法能够利用行业标准框架(如 OpenXV、OpenCV 和 Caffe)开发传感器融合应用,这时可使用 reVISION 堆栈。 reVISION 堆栈 reVISION 堆栈使开发人员能够实现计算机视觉和机器学习技术。在这里,针对 Zynq-7000 和 Zynq UltraScale MPSoC 的高级框架和库同样适用。为此,reVISION 将支持平台、应用和算法开发的多种资源完美结合在一起。该堆栈分为三个不同等级: 1. 平台开发 – 这是堆栈的最底层,也是其余堆栈层的构建基础。该层为 SDSoC 工具提供平台定义。 2. 算法开发 – 堆栈的中间层,为实现所需算法提供支持。该层还可为在可编程逻辑实现图像处理和机器学习推断引擎加速提供支持。 3. 应用开发 – 堆栈的最高层,为行业标准框架提供支持。这样能够开发出可利用平台开发层和算法开发层的应用。 堆栈的算法层和应用层旨在支持传统图像处理流程和机器学习流程。在算法层,支持使用 OpenCV 库开发图像处理算法。这包括:能将多种 OpenCV 功能(包括 OpenVX 内核子集)在可编程逻辑中实现加速。为支持机器学习,算法开发层提供几种可以放在 PL 中用以实现机器学习推断引擎的预定义硬件功能。然后,应用开发层访问并使用这些图像处理算法和机器学习推理引擎,以创建最终应用并为高级框架(例如 OpenVX 和 Caffe)提供支持。 图 3- reVISION 堆栈 reVISION 堆栈的功能提供所有必要元素,用以实现传感器融合应用所需的算法。 架构实例 开发之前介绍的对象检测和距离算法时,利用 reVISION 堆栈来演示同构和异构方案。这使传感器融合算法能够在高层面实现。然后,可找出算法的性能瓶颈,并在可编程逻辑中实现加速。 要想利用 reVISION 堆栈,我们首先要创建一个可提供接口和基础可编程逻辑设计的平台定义,以便将图像和其他传感器数据发送到处理器系统的存储空间。 要实现同构对象检测系统需要使用相同的传感器类型,这里是 CMOS 图像传感器。这样做的优势是只需要开发一条图像处理链。这个图像处理链可以为两个图像传感器在可编程逻辑架构中实例化两次。 同构架构实现立体视觉系统的条件之一是要求两个图像传感器同步。在可编程逻辑架构中并行实现两个图像处理链并使用具有适当约束的相同时钟,这样有助于满足这一苛刻的要求。 由于视差计算需要进行大量处理,因而两次实现相同的图像处理链能够大幅节省开发成本。 图 4- All Programmable FPGA 中的同构传感器融合 上图给出了同构方案的架构,其中两条图像处理链主要基于可用的 IP 模块。使用定制的传感器接口 IP 模块捕捉图像数据,并从并行格式转换为 AXI 数据流。这样能实现轻松可扩展的图像处理链;我们可使用高性能 AXI 互连以及视频 DMA 将结果从图像处理链传送到处理器系统 DDR。 当我们考虑采用不同传感器类型的异构实例时,可将以上介绍的图像传感器对象检测架构与 RADAR 距离检测相结合。对于 RADAR 的实现,我们有两个选择:脉冲方案(多普勒)或连续波。具体选择哪种方案取决于最终应用要求,不过,这两种方法大同小异。 图 5- 异构传感器融合 RADAR 方案的架构可分成两部分:信号发生和信号接收。信号发生端负责产生要传送的连续波信号或脉冲。两种方案都需要信号发生 IP 模块来连接高速数模转换器。 信号接收端需要使用高速模数转换器来捕捉接收到的连续波或脉冲信号。说到信号处理,这两种方案都需要使用通过可编程逻辑架构实现的 FFT 分析方法;同样,我们可使用 DMA 将得到的数据集传送到 PS DDR。 无论选择哪种实现架构,只要我们创建了可由处理器系统访问的传感器数据以及 reVISION 平台,我们就可以利用 reVISION 堆栈更高级的算法层和应用层来开发传感器融合系统。 在这些更高层级上,我们可利用高级语言和行业标准框架开发应用。reVISION 能为嵌入式视觉和机器学习应用提供可随时加速的库和预定义的宏,以实现应用加速。这里采用平台设计中未使用的资源,这要得益于将高层次综合与连接框架相结合的 SDSoC 系统优化编译器。 以采用两个图像传感器的异构方案为例,标准开发方法是创建用来确定深度信息的立体视差图。通常,这通过 OpenCV 的立体快匹配(Stereo Block Matching) 功能来实现。reVISION 提供一个能加速的立体快匹配(Stereo Block Matching) 功能,可在可编程逻辑中实现加速。该功能可将两个图像结合,以生成构成异构实例核心的视差和深度信息。 图 6- reVISION 加速的 StereoLBM 功能 结论 传感器融合已经扎根,同时,嵌入式视觉系统正在迅速增长,传感器快速推广和普及。reVISION 允许利用行业标准框架在更高层面开发应用,因此一旦开发出基础平台,就能更快速地开发传感器融合。 |