0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用reVISION™ 堆栈实现应用算法

C29F_xilinx_inc 来源:未知 作者:佚名 2017-09-20 17:40 次阅读

作者: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 将支持平台、应用和算法开发的多种资源完美结合在一起。该堆栈分为三个不同等级:

  1. 平台开发 - 这是堆栈的最底层,是剩余堆栈层的构建基础。该层为 SDSoC™ 工具提供平台定义。

  2. 算法开发 – 这是堆栈的中间层,为所需算法的实现提供支持。该层有助于图像处理和机器学习推断引擎加快向可编程逻辑中转移。

  3. 应用开发 – 这是堆栈的最高层,可提供行业标准框架支持。该层用来开发应用,以便利用平台开发和算法开发层。

堆栈的算法和应用层支持传统图像处理流程和机器学习流程。在算法层中,支持用 OpenCV 库开发图像处理算法。这包括:能将多种 OpenCV 功能(包括 OpenVX 内核子集)加速放在可编程逻辑中实现。为支持机器学习,算法开发层提供几种可以放在 PL 中用以实现机器学习推断引擎的预定义硬件功能。然后,由应用开发层访问这些图像处理算法和机器学习推断引擎,用以创建最终应用,并为 OpenVX 和 Caffe 等高级框架提供支持。

图 3 - reVISION 堆栈

reVISION 堆栈能提供所有必要元素,用以实现高性能监控系统所需的算法。

在 reVISION 中加速 OpenCV

算法开发层的最重要优势之一是能够加速多种 OpenCV 功能。该层中,可加速的 OpenCV 功能被分成四个高级类别。

  1. 计算 – 包括的功能有:两个帧的绝对偏差、像素运算(加、减和乘)、梯度和积分运算。

  2. 输入处理 – 支持位深度转换、通道运算、直方图均衡化、重新映射和尺寸重调整。

  3. 滤波 - 支持多种滤波器,包括 Sobel、自定义卷积和高斯滤波器。

  4. 其他 – 提供多种功能,包括 Canny/Fast/Harris 边缘检测、阀值以及 SVM 和 HoG 分级器。

这些功能构成了 OpenVX 子集的核心功能,能够针对 OpenVX 与应用开发层紧密集成。开发团队可利用这些功能在可编程逻辑中创建算法流水线。以此方式在逻辑中实现这些功能,这样能显著提高算法实现性能。

reVISION 中的机器学习

reVISION 提供与 Caffe 的集成,能够实现机器学习推断引擎。与 Caffe 的集成发生在算法开发层和应用开发层。Caffe 框架在 C++ 库中为开发人员提供大量函数库、模型和预训练的权重,以及 Python™ 和 MATLAB® 捆绑程序。该框架使用户能够创建和训练网络,以执行所需的运算,无需重新开始。为便于模型重用,Caffe 用户可通过模型库(model zoo)共享模型;库中提供多个网络模型,用户可针对专门的任务实现和更新网络模型。在 prototxt 文件中定义这些网络和权重,当在机器学习环境中部署时,使用该文件来定义推断引擎。

reVISION 提供 Caffe 集成功能,使机器学习推断引擎的实现非常简单,只需提供 prototxt 文件即可;剩下的工作由框架来完成。然后,使用这个 prototxt 文件来配置处理系统以及可编程逻辑中的硬件优化库。可编程逻辑用来实现推断引擎,并包含 Conv、ReLu、Pooling 等功能。

图 4 - Caffe 流程集成

机器学习推断引擎中的数字表达对性能也起到重要作用。机器学习越来越多地使用更为高效、降低精度的定点数字系统,例如 INT8 表达法。与传统的浮点 32 (FP32)方法相比,定点降精度数字系统不会造成较大精度损失。与浮点相比,定点运算更易于实现,因此改用 INT8 后能实现更高效、快速的解决方案。可编程逻辑解决方案最适合使用定点数字,reVISION 能在 PL 中使用 INT8 表达法。采用 INT8 表达法后,可在 PL 中使用专用 DSP 模块。有了这些 DSP 模块的架构,当使用相同的内核权重时,可同时执行两个 INT8 乘法累积运算。这样不仅能获得高性能实现方案,而且可以降低功耗。凭借可编程逻辑的灵活特性,也可以轻松实现精度更低的定点数字表达形式。

结论

reVISION 使开发人员能够利用 Zynq-7000 和 Zynq UltraScale+ MPSoC 器件所提供的功能。而且,即使不是专家也能利用可编程逻辑来实现算法。这些算法和机器学习应用可通过高级的行业标准框架来实现,从而缩短系统开发时间。这使开发人员能够提供响应性和可重配置能力更强而且功耗更加优化的系统。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 赛灵思
    +关注

    关注

    32

    文章

    1794

    浏览量

    130512
  • reVISION
    +关注

    关注

    0

    文章

    3

    浏览量

    4076

原文标题:借助 reVISION 加速监控系统的开发

文章出处:【微信号:xilinx_inc,微信公众号:赛灵思】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    reVISION堆栈宣告Xilinx进入视觉导向机器学习终端市场

    Xilinx可重配置加速堆栈面向云,reVISION堆栈面向端,它可使得没有或很少硬件专业知识的嵌入式软件和系统工程师,也可以很轻松、很快速地开发视觉导向的机器学习应用。
    发表于 03-16 09:47 2824次阅读

    《Visual C# 2008程序设计经典案例设计与实现》---利用希尔算法实现从大到小排序

    《Visual C# 2008程序设计经典案例设计与实现》---利用希尔算法实现从大到小排序
    发表于 05-17 13:27

    如何使用Zedboard运行reVision堆栈

    /revision-overview.pdf,第6页,也没有提到过:http://forums.xilinx.com/t5/Xcell-Daily-Blog
    发表于 10-10 06:25

    如何利用FPGA来实现RC6算法的设计?

    RC6的工作原理是什么?如何利用FPGA来实现RC6算法的设计?
    发表于 05-08 06:50

    如何利用FPGA设计实现GNSS信号的频域快速捕获算法

    如何利用FPGA设计实现GNSS信号的频域快速捕获算法
    发表于 05-20 06:40

    如何利用查理复用算法Charlieplexing实现数码管?

    如何利用查理复用算法Charlieplexing实现数码管?
    发表于 02-09 07:14

    利用KNN算法实现基于系统调用的入侵检测技术

    算法来自一种文本分类算法-KNN 算法,文中给出了用该算法实现的入侵检测系统模型.利用
    发表于 06-13 11:01 18次下载

    HT MCU 软件堆栈的应用

    HT MCU 软件堆栈的应用介绍:对于 Holtek 八位元单片机来说,堆栈资源往往是有限的。例如,HT48R10A-1 就只有两级堆栈。本文将介绍如何利用软件
    发表于 03-26 08:33 16次下载

    利用FFT IP Core实现FFT算法

    利用FFT IP Core实现FFT算法 摘要:结合工程实践,介绍了一种利用FFT IP Core实现FFT的方法,设计能同时对两路实数序
    发表于 01-16 10:04 6727次阅读
    <b class='flag-5'>利用</b>FFT IP Core<b class='flag-5'>实现</b>FFT<b class='flag-5'>算法</b>

    利用FPGA来实现RC6算法的设计与研究

    利用FPGA来实现RC6算法的设计与研究 引 言   RC6是作为AES(Advanced Encryption Standard)的候选算法提交给NIST(美国国家标准局)的一
    发表于 12-28 09:20 1037次阅读
    <b class='flag-5'>利用</b>FPGA来<b class='flag-5'>实现</b>RC6<b class='flag-5'>算法</b>的设计与研究

    堆栈指针sp的内容是什么

    堆栈是一块保存数据的连续内存。一个名为堆栈指针(SP)的寄存器指向堆栈的顶部。 堆栈的底部在一个固定的地址。堆栈的大小在运行时由内核动态地调
    发表于 11-13 09:04 3.3w次阅读
    <b class='flag-5'>堆栈</b>指针sp的内容是什么

    reVISION堆栈为视觉导向应用铺路

    全新的reVISION堆栈能够支持更广泛的没有或者很少硬件设计专业知识的嵌入式软件和系统工程师,使其也可以使用赛灵思技术更轻松,更快速地开发视觉导向的智能系统。 传统的高端消费市场,汽车,工业
    的头像 发表于 11-22 06:23 2529次阅读

    利用FFT算法实现快速傅里叶变换

    简 介: 利用FFT算法实现快速傅里叶变换, 在理论、工程中具有非常广泛的应用。除了能够在合适的计算平台完成FFT算法,同时还需要注意到它在频谱分析中可能带来的频率混叠以及频率泄露等问
    的头像 发表于 07-10 09:07 2696次阅读

    F2911 数据表-Revision O

    F2911 数据表 - Revision O
    发表于 07-07 20:13 0次下载
    F2911 数据表-<b class='flag-5'>Revision</b> O

    F1978 数据表 Revision O

    F1978 数据表 Revision O
    发表于 07-07 20:17 0次下载
    F1978 数据表 <b class='flag-5'>Revision</b> O