买芯片网
XILINX(AMD),ALTERA(INTEL),LATTICE
聚焦三大FPGA芯片品牌,强大的现货交付能力
Xilinx,Altera,Lattice
买芯片网代理Altera(英特尔)、Lattice(莱迪思)、Xilinx(赛灵思 AMD)
首页 >> Xilinx新闻 >> Xilinx FPGA 推动人群自动监测技术的发展
Xilinx FPGA 推动人群自动监测技术的发展

基于Spartan6的实时运动分类系统为人群的自动监测和监控开辟新途径。

买芯片网专注整合全球优质赛灵思代理商现货资源,是国内领先的Altera(英特尔)、Lattice(莱迪思)、Xilinx(赛灵思 AMD)芯片采购服务平台,买芯片网轻松满足您的芯片采购需求.

人群的监控与监测已经成为当前的一个重要领域。政府和安全部门都已经开始寻求在公共场所智能监测人群的更先进的方式,从而避免在来不及采取行动之前检测到任何异常活动。但是在有效达成这一目的之前还需要克服一些障碍。例如,如果需要一天24小时同时监测整个城市里所有可能的人群活动,仅靠全人工监测是不可能的,尤其在安装有数千部CCTV摄像头的情况下更是如此。

这个问题的解决方案在于开发全新的智能摄像头或视觉系统,借助先进的视频分析技术自动监测人群的活动,从而能够立即向中央控制站报告任何异常事件。

设计这种智能摄像头/视觉系统不仅需要标准的成像传感器和光学设备,还需要高性能视频处理器来执行视频分析工作。使用这种功能强大的板载视频处理器的原因在于先进视频分析技术具有较高的处理要求,大多数此类技术通常会使用计算密集型视频处理算法。

FPGA非常适合于此类高性能要求的应用。借助赛灵思Vivado®DesignSuite中高层次综合(HLS)功能实现的UltraFast™设计方法,现在可以为FPGA轻松创建理想的高性能设计。此外,赛灵思MicroBlaze™等嵌入式处理器与FPGA可重配置逻辑的完美融合,让用户现在能够将具有复杂控制流的应用方便地移植到FPGA上。

鉴于这种情况,我们使用VivadoHLS、赛灵思嵌入式开发套件(EDK)和ISE®DesignSuite中基于软件的EDA工具,设计出一种用于人群运动分类和监测系统的原型。这种设计方法基于我们所认为的软件控制和硬件加速架构。我们的设计采用低成本的赛灵思Spartan®-6LX45FPGA。我们在较短时间内即完成了总体系统设计,其在设计的实时性能、低成本和高灵活性方面均展现出颇有前景的结果。

利用加权绝对差之和(SWAD),我们计算出图像上分布的900多个运动向量。

系统设计

总体系统设计分两个阶段完成。第一阶段是开发人群运动分类算法。在这个算法的验证完成后,接下来是把它实现到FPGA中。在开发的第二阶段,我们主要关注基于FPGA的实时视频处理应用的架构设计方面。具体工作包括开发实时视频流水线、开发硬件加速器,最后将二者集成并实现到算法控制和数据流中,从而完成系统设计。

下面介绍每个开发阶段,首先从简要介绍算法设计开始,然后详细介绍如何将算法实现到FPGA平台上。

算法设计

就人群监视和监控而言,文献中提出了多种算法。大多数此类算法从在人群场景中检测(或布置)特征点开始,然后随时间推移跟踪这些特征点,采集运动统计数据。随后把这些运动统计数据投射到一些之前预先计算好的运动模型上,用来预测任何异常活动[1]。进一步改进包括聚集特征点,跟踪这些集群而非单独的特征点[2]。

本文的人群运动分类算法基于相同的概念,除了我们优先使用模板匹配方法进行运动估计,而不是采用Kanade-Lucas-Tomasi(KLT)特征跟踪器等传统方法。该模板匹配方法经验证表明,增加一些计算量能显著改善低对比度或对比度不断变化情况下的运动估计。

为将这一方法用于运动估计,我们将视频帧划分为更小矩形贴片组成的网格,然后使用基于加权绝对差之和(SWAD)的方法对每个贴片的当前图像和之前图像进行运动计算。每个贴片相应地提供一个运动向量,用于说明该特定位置两帧之间的运动范围和方向。结果就是需要在整个图像上计算超过900个运动向量。计算这些运动向量涉及的具体步骤。

图 1:计算运动向量的步骤,从图像采集开始(上)

图1:计算运动向量的步骤,从图像采集开始(上)

此外,我们使用加权高斯内核实现图像中遮挡区和零对比度区的可靠性。而且,用于计算一个运动向量的一个贴片处理工作独立于其它贴片的处理工作,因此该方法非常适合使用FPGA上的并行实现方案。

在计算完整个图像上的运动向量后,该算法随即计算它们的统计属性。这些属性包括平均运动向量长度、运动向量数量、运动的主导方向和类似指标。

另外我们还计算了运动向量方向的360度柱状图,进一步分析其标准偏差、平均偏差和偏差系数等属性。这些统计属性随后被投射到预先计算好的运动模型上,从而将当前运动分类到几大类别之一。随后我们运用多个帧来解释这些统计属性,从而确认分类结果。

预先计算好的运动模型采用加权决策树分类器的形式构建,其充分考虑了这些统计属性来对所观察到的运动进行分类。例如,如果观察到运动速度快而且场景中有动量突变,同时运动方向随机或超出图像平面,就可以分类为可能的恐慌情况。该算法的开发工作使用微软VisualC++配合OpenCV库完成。算法的完整演示请参阅本文文末提供的Web链接。

FPGA实现方案

系统设计的第二阶段是该算法的FPGA实现过程。这一步实现工作有它自己的设计难题,例如FPGA设计现在要包括视频输入/输出和帧缓存。此外,有限的资源和可用性能可能需要必要的设计优化。

鉴于这些设计特点和其它架构考虑,整个FPGA实现方案被分为三个部分。第一部分是在FPGA上开发通用的实时视频流水线,用于处理必要的视频输入/输出和帧缓存。第二部分是开发算法专用硬件加速器。最后在设计的第三阶段,我们把它们集成到一起,实现算法控制和数据流。这就完成了整个基于FPGA的系统设计。

下面对这个过程的每一阶段进行更详细的介绍。

实时视频流水线

在为FPGA平台开发任何视频处理应用时,实时视频流水线都是最重要的构建模块。这个流水线对用户隐藏了视频输入/输出和帧缓存相关的复杂存储器管理工作,而是提供了简单的访问界面以供用户处理视频帧数据。

虽然在这方面目前有几种先进的、商业许可的视频流水线[3],我们选择构建针对这个用途的定制视频流水线。我们基于赛灵思EDK构建该流水线,使用定制视频采集/显示端口处理视频输入/输出数据。这个流水线也可以方便地进行配置,从而用于其它赛灵思FPGA系列。

视频采集端口负责解码来自视频ADC的输入视频流数据并在本地缓存。随后该数据被转发至主存储器,用于创建视频帧。与此类似,视频显示端口负责对本地缓存中存储的视频帧数据进行编码,然后将其转发到视频DAC中供显示使用。视频输入输出端口连接到MicroBlaze主机处理器的主外设总线,该处理器负责处理与主存储器之间的视频数据流量。

视频端口能够生成中断,以通知MicroBlaze处理器在视频输入端口有可用的新数据或视频输入端口需要新数据。两种视频端口采用“往复式”缓存管理方案,这样即使是MicroBlaze处理器都无法立即响应视频端口,也不会发生缓存溢出或欠载。图2所示是视频端口与MicroBlaze处理器之间的互联。

图 2:视频端口及其互联

图2:视频端口及其互联

视频端口设计用于检测和生成视频行数量、场ID(如果是隔行视频)和视频输入/输出流中的其它控制信息。当有足够数量的视频数据被视频输入端口缓存,或当视频显示端口请求的数据达到足够数量时,该信息就会通过视频端口的中断服务例程(ISR)传递给MicroBlaze处理器。这些服务例程相应地通过DMA完成视频端口本地存储器和主存储器之间的视频数据传输。

除了视频端口ISR,还有我们称之为“视频帧队列API”的一套高级视频帧队列管理功能在这些ISR和用户层应用之间工作。该API负责维持多个采集帧和显示帧的队列,以支持双帧或三帧缓存方案。在MicroBlaze上运行的用户应用能轻松获得视频采集帧,或利用“视频帧队列API”功能提供视频显示帧。图3显示了在层级结构中各级别的相关功能。

图 3:视频端口 ISR 和视频帧队列 API 功能

图3:视频端口ISR和视频帧队列API功能

将MicroBlaze用作主机处理器以连接系统中的各个构建模块能产生众多优势。例如我们可以使用MicroBlaze方便地连接各种外部存储器(SRAM、SDRAM等),加载或存储来自视频端口的视频帧数据。类似地,我们可以使用EDK中的DMA控制器,在视频端口和主存储器之间传输视频数据。此外,我们还可用MicroBlaze处理器以同样方式连接定制硬件加速器。

这些“视频帧队列API”功能加上视频端口ISR和视频输入输出端口让设计中的视频处理流水线的构造更加完善。图4所示的是使用FPGA上的本视频流水线采集、处理和显示实际的视频帧。它还显示了通过计算出的运动向量缩小视图实现的画中画功能。

图 4:右下被运动向量网格覆盖的、经过 FPGA 处理后的实际帧

图4:右下被运动向量网格覆盖的、经过FPGA处理后的实际帧

基于VivadoHLS的硬件加速器

在前文介绍的人群运动分类算法中,最为耗时、计算最密集的工作是计算运动向量。另一项系统工作——进行分类——因不涉及像素级的处理,非常简单而且易于实现。注意到设计的这个方面,我们为计算运动向量构建了一个硬件加速器。我们借助赛灵思VivadoHLS,用C/C++语言在RTL中对该加速器进行了设计、测试和综合。

Vivado生成的RTL代码的关键特征之一是其在很大程度上已经过了精心优化。VivadoHSL把阵列存取(例如存储在阵列中的像素数据)综合到存储器接口中,通过分析代码自动生成所需的地址。VivadoHSL还可分析预先计算好的偏移和常量,从而非常快速地执行所谓的“跨步式”存储器访问。跨步式存储器访问从图像的多行数据访问开始(就如同在2D卷积中)。

设计基于Vivado的加速器的主要考虑因素是并行处理运动向量的计算,最大限度地提高从主存储器中的数据读取。为此目的,我们使用八个BlockRAM并行加载和存储视频帧数据。硬件加速器的内核能够并行计算四个运动向量,而且在计算中它会用到所有八个BlockRAM。从主存储器传输到这些BlockRAM的数据由MicroBlaze通过DMA加以控制。

VivadoHLS生成的硬件加速器具有部分自动生成的握手信号,这些信号对于启停硬件加速器必不可少。这些握手信号包含“启动”、“繁忙”、“闲置”、“完成”等标志。这些标志通过GPIO传送到MicroBlaze处理器以完成握手。图5所示为该硬件加速器、八个BlockRAM和MicroBlaze处理器主外设总线之间的互联。

图 5:基于 Vivado HLS 的硬件加速器及其互联

图5:基于VivadoHLS的硬件加速器及其互联

图5中分别被命名为SA1、TA1到SA4、TA4的这些BlockRAM,每个的容量为16KB。每对SA1、TA1到SA4、TA4能够保存计算一个完整行的运动向量所需的数据。因此硬件加速器在完成运行后,会输出四行运动向量写回到相同的BlockRAM存储器中。这些计算完的运动向量随即由MicroBlaze处理器读回,然后把结果以运动向量网格的形式复制到自己的主存储器中。(图4所示的是被硬件加速器计算出的运动向量网格覆盖的实际帧)

该硬件加速器在200MHz频率下工作,计算整个图像的运动向量所需的全部处理任务能够在不足10毫秒内完成,包括与存储器之间的所有数据往来传输。

算法控制和数据流

在视频流水线和硬件加速器开发就绪后,完成该系统的最后一步是把这两个单元与MicroBlaze主机处理器集成,并使用赛灵思软件开发套件(SDK_,用C/C++实现用户层应用的算法控制和数据流。在赛灵思SDK中实现算法控制和数据流能为设计带来极大的灵活性。这是因为用户可以用相同的方式设计和集成新的硬件加速器,同时还可以修改必要的控制和数据流以集成新的硬件加速器。最终得到的就是一种软件控制、硬件加速的设计,其灵活度可媲美纯软件实现方案,同时其性能可媲美纯硬件实现方案。

本文介绍的人群运动分类算法的控制和数据流从通过视频帧队列API功能采集视频帧开始。当视频帧获取完毕,用户应用把当前的和之前的视频帧数据传输到硬件加速器,完成运动向量的计算。

此时系统在软件中计算运动向量的统计属性和分类结果。这样做的原因是这些步骤不涉及任何像素级处理,只会增加很少的处理开销。当分类结果计算完成时,用屏幕显示(OSD)功能把结果和运动向量显示在处理后的帧上。这些屏幕显示功能也是在赛灵思SDK中用C/C++语言实现的。

这些构建模块(实时视频流水线、硬件加速器和算法控制/数据流)全部就绪后,总体系统设计即告完成。随后我们对基于FPGA的实现方案进行了测试,并与之前的桌面PC型实现方案比较结果的准确性。两个结果是完全一致的。我们使用来自明尼苏达大学数据库(http://mha.cs.umn.edu/proj_recognition.sht-ml)和来自www.gettyimages.com的各种测试视频对本系统进行了测试。

实现方案结果

整个设计只使用了Spartan-6-LX45FPGA上30%的SliceLUT、60%的BRAM和12%的DSP48E乘法器资源。图6所示是硬件设置(上)和实际系统输出。硬件设置由DigilentAtlysSpartan6FPGA板和定制视频接口卡组成,利用视频ADC和DAC可为FPGA提供视频输入/输出功能。如欲观看该系统的详细演示视频,敬请访问下列Web链接:

http://www.dailymotion.com/video/x2av1wo_fpga-based-real-time-hu-man-cro...

http://www.dailymotion.com/vid-eo/x23icxj_real-time-motion-vec-tors-comp...

http://www.dailymotion.com/video/x28sq1c_crowd-motion-classifica-tion-us...

图 6:硬件设置(上)和把场景分类为惊恐的实际 FPGA 处理后的帧

图6:硬件设置(上)和把场景分类为惊恐的实际FPGA处理后的帧

巨大的未来潜力

FPGA是面向实时视频处理等需要高性能的应用的理想平台。开发这种应用要求进行一定的架构考量,以充分发挥所选FPGA的性能优势。此外使用EDK和VivadoHLS等先进工具,能够以比过去高得多的效率和更短的开发时间实现总体系统设计。

因此正如我们在本文中所展示的,利用上述工具在FPGA上实现性能关键型应用有着巨大的潜力。有这样成功运行的平台作为先例,我们期望把这一成果推广用于解决更多的技术问题,例如自动化交通监测、医院中的自动病患观察等更多的应用。

参考资料

1.RaminMehran、MubarakShah,《使用社会力模型检测异常人群行为》,IEEE计算机视觉与模式识别(CVPR)国际会议,迈阿密,2009年

2.Duan-YuChen、Po-ChungHuang,《基于运动的人群异常事件检测》,《视觉计算和图像显示期刊(JournalofVisualComputationandImageRepresentation)》,2011年第2期第22卷,第178-186页

3.OmniTekOSVP:http://omnitek.tv/sites/default/files/OSVP.pdf

 

Xilinx中国海量优质的信息资源、行业资讯、最新开发方案等资讯信息平台。

Xilinx芯片今日搜索排行榜(2024年11月22日)
XC6SLX75T-N3FGG676I
嵌入式 - FPGA(现场可编程门阵列)
产品封装:676-BGA
XA7Z010-1CLG400Q
嵌入式 - 片上系统(SoC)
产品封装:400-LFBGA,CSPBGA
XC2S50-5TQ144C
嵌入式 - FPGA(现场可编程门阵列)
产品封装:144-LQFP
XC6SLX100-3CSG484C
嵌入式 - FPGA(现场可编程门阵列)
产品封装:484-FBGA,CSPBGA
XCV300E-6FG456C
嵌入式 - FPGA(现场可编程门阵列)
产品封装:456-BBGA
XC2C128-7CPG132I
嵌入式 - CPLD(复杂可编程逻辑器件)
产品封装:132-TFBGA,CSPBGA
XC3S400-4FG456I
嵌入式 - FPGA(现场可编程门阵列)
产品封装:456-BBGA
XC1736ESO8C
存储器 - 用于 FPGA 的配置 PROM
产品封装:8-SOIC(0.154,3.90mm 宽)
Xilinx产品及其应用
Xilinx公司新闻
买芯片网轻松满足您的芯片采购需求
买芯片网,独家代理渠道,专注三大品牌:XILINX(赛灵思 AMD)ALTERA(英特尔 INTEL)LATTICE(莱迪思)