利用reVISION? 堆栈实现应用算法
作者:Nick Ni 和 Adam Taylor
监控系统严重依靠嵌入式视觉系统提供的功能加速在广泛市场和系统中的部署。这些监控系统的用途非常广泛,包括事件和流量监控、安全与安防用途、ISR 和商业智能。用途的多样性也带来了几大挑战,需要系统设计人员在解决方案中加以解决。它们是:
● 多摄像头视觉 – 能够连接多个同类或异类传感器类型。
● 计算机视觉技术 - 能够使用高级库和框架(例如 OpenCV 和 OpenVX)进行开发。
● 机器学习技术 – 能够使用框架(例如 Caffe)来实现机器学习推断引擎。
● 提高分辨率和帧率 – 提高每个图像帧所需的数据处理。
根据用途,监控系统会实现相应算法(例如光流法)以检测图像内的运动。立体视觉提供图像内的深度知觉,也使用机器学习技术来检测和分类图像中的对象。
图 1 - 实例应用(上:面部检测与分类,下:光流)
异构系统器件,例如 All Programmable Zynq®-7000 和 Zynq® Ultrascale+™ MPSoC,正越来越多地应用于监控系统的开发。这些器件是可编程逻辑(PL)架构与高性能 ARM® 内核处理器系统(PS)的完美结合。
与传统方案相比,PL 与 PS 的紧密耦合使得创建的系统具有更强的响应能力、可重配置能力以及更高的能效。基于 CPU/GPU 的传统 SoC 需要使用系统存储器将图像从一个处理阶段传送到下个阶段。这会降低确定性并增大功耗和系统响应时延,因为多个资源需要访问同一个存储器,造成处理算法瓶颈。该瓶颈随帧率和图像分辨率增加而加重。
当解决方案采用 Zynq-7000 或 Zynq UltraScale+ MPSoC 器件实现时,就会打破这个瓶颈。这些器件允许设计人员在器件的 PL 中实现图像处理流水线。在 PL 中创建真正的并行图像流水线,其中一个阶段的输出被传送到另一个阶段的输入。这样能获得确定的响应时间,缩短时延,实现功耗最佳解决方案。
利用 PL 实现图像处理流水线,还能获得比传统 CPU/GPU SoC 方案更宽的接口能力,而后者只能获得固定接口。PL IO 接口的灵活特性允许任意连接,支持 MIPI、Camera Link、HDMI 等行业标准接口。这种灵活特性还能实现定制传统接口,而且能进行升级以支持最新接口标准。利用 PL,还可以让系统并行连接多个摄像头。
不过,最关键的是实现应用算法,而且无需用硬件描述语言(例如 Verilog 或 VHDL)重新编写所有高级算法。这正是 reVISION™ 堆栈的用武之地。
图 2 - 传统 CPU/GPU 方案与 Zynq-7000/Zynq UltraScale+ MPSoC 的对比
reVISION 堆栈
reVISION 堆栈使开发人员能够实现计算机视觉和机器学习技术。在这里,针对 Zynq-7000 和 Zynq UltraScale+ MPSoC 的高级框架和库同样适用。为此,reVISION 将支持平台、应用和算法开发的多种资源完美结合在一起。该堆栈分为三个不同等级:
-
平台开发 - 这是堆栈的最底层,是剩余堆栈层的构建基础。该层为 SDSoC™ 工具提供平台定义。
-
算法开发 – 这是堆栈的中间层,为所需算法的实现提供支持。该层有助于图像处理和机器学习推断引擎加快向可编程逻辑中转移。
-
应用开发 – 这是堆栈的最高层,可提供行业标准框架支持。该层用来开发应用,以便利用平台开发和算法开发层。
堆栈的算法和应用层支持传统图像处理流程和机器学习流程。在算法层中,支持用 OpenCV 库开发图像处理算法。这包括:能将多种 OpenCV 功能(包括 OpenVX 内核子集)加速放在可编程逻辑中实现。为支持机器学习,算法开发层提供几种可以放在 PL 中用以实现机器学习推断引擎的预定义硬件功能。然后,由应用开发层访问这些图像处理算法和机器学习推断引擎,用以创建最终应用,并为 OpenVX 和 Caffe 等高级框架提供支持。
图 3 - reVISION 堆栈
reVISION 堆栈能提供所有必要元素,用以实现高性能监控系统所需的算法。
在 reVISION 中加速 OpenCV
算法开发层的最重要优势之一是能够加速多种 OpenCV 功能。该层中,可加速的 OpenCV 功能被分成四个高级类别。
-
计算 – 包括的功能有:两个帧的绝对偏差、像素运算(加、减和乘)、梯度和积分运算。
-
输入处理 &n
- 4G LTE技术很成功,对5G设计有何意义?(05-05)
- 物联网的承诺:下一个重大应用(02-16)
- Xilinx在2017嵌入式世界大会上展示响应最快且可重配置的视觉导向智能系统(02-17)
- 基于赛灵思FPGA的端到端广播平台解决方案的实现(10-27)
- 基于赛灵思(Xilinx) FPGA的DisplayPort设计与实现(10-23)
- 玩转赛灵思Zedboard开发板(3):基于Zynq PL的流水灯(11-05)