基于cuda技术的背景建模加速方法

文档序号:7751501阅读:668来源:国知局
专利名称:基于cuda技术的背景建模加速方法
技术领域
本发明涉及模式识别,特别涉及基于视频的背景建模加速。
背景技术
随着人们安全意识的提高,视频监控系统已经越来越多的应用于各种场合,比如 银行、地铁、体育场馆、交通监管和监狱等地方。传统的视频监控系统往往需要很多人力物 力,并且需要视频监控人员长时间持续监视视频,分析视频中的异常情况,将异常信息记录 存储下来,并相应的做出决策,以处理异常情况。这项工作具有枯燥性和持续性的特点。监 控者长时间工作下来,身体和精神极易产生疲劳感,会导致大量漏报、误报的情况,给安全 提出极大的挑战。因此,开发出具有实际意义的智能视频监控系统日益变得迫切和必要。所谓智能视频监控,就是指在没有人工干预的情况下,计算机自动从各种视频监 控设备中获取图像序列,然后对场景信息进行分析,完成对场景信息的理解,自动监控各种 异常情况的发生,对异常情况进行记录和存储,并根据预先设定好的策略进行决策。对视频图像进行背景建模对智能视频监控有重大的意义。背景建模的方法因为实 现简单并且能够提供较多的特征,被广泛的应用于运动目标检测中。而运动目标检测在智 能监控中起着基础性作用。只有完成了运动目标检测,才能进行目标分类和目标追踪,进而 完成对监控场景的理解。目前已经有很多算法对视频图像的背景模型进行研究,但它们往往着眼于获取更 为精确的背景模型和提供更多的特征,不致力于改进算法的效率。在实际使用环境中,往往 同时有几路至几十路的监控设备,这些监控设备会在极短的时间内产生大量的图像数据。 在面对海量数据时,已有的背景建模算法往往达不到实时的速度。背景建模算法处于智能 视频监控的最底层,当背景建模算法速度达不到实时,计算机对整个场景的分析理解也随 之延迟。那么,不仅监控系统中已有的算法无法正常运行,而且当使用需求增加时还无法集 成更多的算法。这样,算法的应用受到了很大的限制。近年来,GPU的通用编程能力和浮点运算能力飞速发展,并且价格低廉,为算法 的加速提供了一种新的解决手段。英伟达公司针对其GPU的特点,提出一种利用GPU进 行通用计算的平台CUDA。图1为CUDA的体系结构。虽然不同型号GPU含有的流处理器 (Multiprocessor)数量不同,但它们有其它很多共同点。每个流处理器含有8个处理核心 (Processor),8192个寄存器,16KB大小的共享内存(Shared Memory),一定数量的全局内 存(Global Memory),一定数量的常缓冲(Constant Cache)和纹理缓冲(Texture Cache)。 全局内存比共享内存大,可以存储较多的数据,但访问速度却较为缓慢。每个流处理器支持 最多达768个活动线程(thread)。与CPU线程不同,CUDA线程可以互不干扰的并行计算, 并且较CPU线程更加轻量级,线程切换消耗更少的资源和时间。多个线程都组成一个线程 块(thread block),而多个线程块又组成一个线程块栅格(block grid)。当执行运算时,同 一个线程块只能在一个流处理器上执行,也即是每个线程块最多能利用16KB的共享内存。现有技术的背景建模算法往往着眼于获取更为精确的背景模型和提供更多的特征数据,不致力于算法效率的改进提升。这样当有很多路监控设备时,会产生海量的图像数 据,已有的背景建模算法无法达到实时的运行速度。

发明内容
为了解决现有技术的问题,本发明的目的是提供一种基于CUDA技术的背景建模 加速方法。在不改变背景建模算法效果的情况下,大大提升背景建模算法的效率。为了实现上述目的,一种背景模型算法加速方法,包括步骤
对导入到GPU中的图像进行滤波;每个线程为对应的像素建立高斯模型,其中,把当前线程块需要的高斯模型的参 数数据写入共享内存,计算完毕后,将计算结果从共享内存写入全局内存。本发明具有普遍的适用性。无论是在车流量大的场景,还是流量小的场景,都可以 获得基本一致的加速。本发明应用于智能视频监控领域,用于提高背景建模算法的效率, 从而使系统面对较大数据量时能保证实时运行,并且可以将多余的资源分配给其它算法使 用,给其它功能的改善提供了一定的空间。本发明应用于计算机视觉领域的物体聚类。加 速物体的聚类过程,减少大量等待时间。


图1示出CUDA体系结构;图2示出CPU和GPU浮点运算能力比较;图3示出CPU和GPU带宽大小比较;图4示出混合高斯模型算法实现步骤;图5a示出园区监控视频CPU处理和GPU处理效果对比;图5b示出某公路监控视频CPU处理和GPU处理效果对比。
具体实施例方式下面结合附图详细说明本发明方案中所涉及的各个细节问题。应指出的是,所描 述的实施例仅旨在便于对本发明的理解,而对其不起任何限定作用。传统的背景建模方法虽然效果不错,但是在处理海量数据时达不到实时计算速 度,给其应用带来了很大的限制。因此,需要对背景建模算法进行加速。基于CUDA技术的 背景建模算法加速利用了 GPU并行能力强、浮点运算速度快和带宽大的特点。图1是CUDA 架构图,说明CUDA具有天生的并行能力。图2和图3分别示出CPU和GPU的浮点运算能力 和带宽能力比较。从这三个图可以看出CUDA技术可以大大提高背景建模算法的效率。本 发明利用CUDA技术对混合高斯模型算法进行加速。图4示出了混合高斯模型算法的流程 框图,主要包括滤波去噪、更新高斯模型和OpenGL渲染三个过程。所述的滤波预处理并不属于背景建模算法。但由于在实际中,视频设备所采集得 到的图像质量有很多噪点,如果不对图像进行预处理,将会对后续的背景建模算法造成较 大的影响,因此往往需要进行滤波处理。分析滤波运算可以发现每个像素的滤波结果只依 赖于周围像素的RGB颜色值,却与其它像素的滤波结果无关。因此像素间的滤波运算可以 并行进行。本发明利用CUDA的并行性,减少滤波运算消耗的时间。
所述的模型建立更新过程包括步骤判断当前帧图像RGB值是否同已建立的高斯模型匹配和更新已建立的高斯模型。对高斯模型的更新取决于当前帧图像RGB值是否匹配 已建立的高斯模型。这种依赖关系决定对一个像素更新高斯模型为串行计算。但每个像素 的高斯模型匹配更新运算与其它像素的计算结果无关,因此像素间的高斯模型匹配更新运 算可以并行进行。本发明利用CUDA的并行计算特性和存储介质的特性,让若干个像素的高 斯模型匹配更新运算并行运算。虽然背景建模算法不包括背景图像的渲染绘制,但为了将结果展示出来,这里利 用OpenGL直接读取存储在GPU中的背景数据进行渲染绘制。本发明包括三个过程图像预处理去噪加速过程,背景建模算法加速过程和 OpenGL渲染过程。下面对本发明的方法中三个过程所涉及的关键步骤进行逐一详细说明。图像预处理去噪加速过程滤波算法具有如下两个特点(1)每个像素的滤波结果依赖于周围像素RGB值;(2)每个像素的滤波结果与周围像素的滤波结果无关。本步骤根据上述两个特点,将去噪运算并行化。将每幅图像划分成一个氏· 8,大 小的二维线程块栅格,每个线程块大小为Dx · Dy。其中的每个CUDA的每个线程和一个像素 对应。假设图像高h、宽w,那么图像像素数目和线程块栅格关系满足式(1)和式(2)。(Bx-I) · Dx < w < Bx · Dx (1)(By-I) · Dy < h < By · Dy (2)因为每个线程块具有的共享内存较少,而且每幅图像数据很大,所以只能存储在 全局内存上。以一个320X240大小的图像为例,每个像素具有RGB三通道,每个通道至少 需要1个字节的空间。那么存储这幅320X240大小的图像需要225KB大小的空间。但是 CUDA每个线程块最多只有16KB的共享内存,因此图像数据不能存储于共享内存。虽然需要 将图像存储于全局内存,但是可以利用共享内存提高访问速度。因为每个线程块只需使用 一幅图像的某一部分,所以可以将所需的图像数据从全局内存读取,写入到共享内存中,以 后的计算只访问共享内存。通常一个像素使用3个字节存储,那么对于本步骤,每个thread block 需要 share memory 大小为 Bx · By · 3 字节。背景建模算法加速过程背景建模算法具有如下两个特点(1)对各个像素的高斯模型更新方案取决于当前帧图像像素RGB值是否与已经建 立的高斯模型匹配。(2)每个像素的高斯模型更新过程与其它像素的RGB值无关。本步骤根据上述两个特点,将背景建模算法进行并行化。在图像预处理去噪加速 过程中,已经分配了许多线程同像素一一对应。对每帧图像的所有像素去噪完毕后,让每个 线程为对应的像素建立高斯模型,各个线程之间并行计算。同样的,为一幅图像所有像素 建立的高斯模型参数也存储在共享内存中。但计算时,首先把当前线程块需要的参数数据 写入共享内存,然后对共享内存进行访问。待计算完毕后,再将计算结果从共享内存写入全 局内存,保证对下帧图像计算时,高斯模型数据正确性。假设为每个像素建立的K个高斯模 型共需存储空间M字节。那么本步骤每个线程块需要Bx ·、· M字节。结合图像预处理去噪加速过程,每个线程块共需要Bx · By · (M+3)字节。考虑到每个线程块最多具有16KB的 share memory,因此满足需要式(3)限制条件。Bx · By · (M+3) < 16KB (3) 虽然本发明利用共享内存访问速度快的优势来解决全局内存访问速度慢的问题, 但依然需要对全局内存进行访问。如果对全局内存的访问不恰当,会造成全局内存访问速 度进一步的下降。要使全局内存访问速度达到最快,必须满足两个限制条件。第一,每次存 取的数据必须是4,8或16字节的倍数;第二连续存取,即如果第一次读取数据所处的地址 为1至4,那么第二次读取地址必须为5至8的数据。在满足连续存取的基础上,每次存取 4字节速度最快,每次存取16字节速度最慢。考虑到本发明处理的对象为图像,而很多图 像通常用3个字节来存储一个像素的信息,如果直接将图像像素数据直接存储在全局内存 上,显然不能达到全局内存访问速度最优。为此,本发明在全局内存上为每个像素分配4个 字节的存储空间。虽然存储每个像素浪费了 1个字节的空间,但却获得速度的提升。与全局内存类似,共享内存也需要按照一定的规则访问才能获得速度最优。为了 达到高内存带宽,共享内存被划分成大小为4字节的内存模块,称之为bank。共享内存按照 线性的方式映射到bank,bank共16个。即共享内存中数据,第1至第4字节映射到第1个
bank,第5至第8字节映射到第2个bank,第η个字节映射到第j 个bank。按照CUDA
的执行方式,线程以每次执行16个的方式执行。如果每次执行的16个线程中有任意两个 或两个以上的线程同时访问同一个bank,就会造成bank冲突(bank conflict),影响共享 内存存取速度。例如,有一段数据连续存放在共享内存上,第1个线程所需的数据存储在共 享内存的第1至第4字节,第2个线程所需的数据存储在共享内存的第65至第68字节,第 k个线程所需的数据存储在共享内存的(k-l)*64+l至第(k-l)*64+4字节。根据上面描述 的共享内存和bank映射关系,那么所有的16个线程同时访问了第1个bank,造成严重的 bank冲突。本发明为了解决这种冲突造成的速度下降,将数据进行非连续存储,每存储64 字节数据就空出4个字节然后接着存储。那么第1个线程读取第1至第4字节,第2个线 程读取第69至72字节,第k个线程读取第(k-l)*68+l至(k_l) *68+4字节。线性映射到 bank,即第k个线程读取16个bank,避免了 bank冲突。本发明的这种共享内存利用 方案,最大化利用了共享内存的速度优势。OpenGL 渲染过程因为混合高斯模型算法在智能视频监控的环境中是用来分析帧图像信息,建立背 景模型,所以每帧图像的像素RGB颜色值从内存传输到GPU中,这是不可避免的开销。针对 每帧图像,CUDA进行背景建模,会得到背景的像素值。这些像素RGB颜色值从GPU传输到内 存中,需要一定的时间。但这个像素RGB颜色值的传送时间是可以避免的。避免数据传送 的原因主要基于以下考虑。如果后续算法需要用到这些像素RGB颜色值,完全可以考虑对 这些算法用CUDA优化,那么数据就没有必要传输至内存中。GPU的带宽虽然较大,但与GPU 的浮点运算能力比较,依然是计算速度的瓶颈。因此减少数据传输,有利于提高运算速度。实施例基于CUDA技术的背景建模算法加速方法,包括对图像预处理去噪加速,对背景 建模算法加速和OpenGL渲染三个过程。为了展示该发明的算法运算速度提高效果和说 明其具有普遍的适用性,这里选取车流量相差较大的两段视频,并使用显卡NVIDIA teslacl060和CPUIntel Core 2DU0T71001. 8GHz进行分别进行实施。第一段视频来自中科院自 动化研究所的园区监控视频,车流量较小;第二段视频来自某公路监控视频,车流较大。视 频具体参数如表1所示。表 1 从图5a、图5b可以看到,无论使用CPU还是GPU处理视频,均获得了基本一致的背 景模型,这表明了并不会因为使用GPU加速而带来精度的下降。从表2中可以看出,NVIDIA tesla cl060处理车流不同的视频,获得了基本相同 的加速,优化后的速度均超过原速度的45倍,说明应用CUDA优化后的算法可以应用于车流 量不同的各种情况。虽然CPU处理视频1的平均帧率为19. 48fps,但是它的最低帧率却只 有11. 20fps,速度缓慢,系统基本不可能承受更多的功能。但用GPU处理视频1时,即使最 低帧率也达到了 820.88fps,速度非常快。在实际使用中,系统可以将GPU空闲的时间用来 进行其它的运算。不同于视频1来自校园监控录像,车流量小,视频2拍摄于公路,车流量 非常大。但GPU处理视频2时,依然获得了大约为45倍的加速。表2 从上面的实施例子可以看出,本发明对背景建模取得了良好的加速比,并且具有 普遍的适用性。本发明对提高智能视频监控的分析速度具有重要的作用。以上所述,仅为本发明中的具体实施案例,但本发明的保护范围并不局限于此,任 何熟悉该技术的人在本发明所揭露的技术范围内,可理解想到的变换或替换,都应涵盖在 本发明的包含范围之内,因此,本发明的保护范围应该以权利要求书的保护范围为准。
权利要求
一种背景模型算法加速方法,包括步骤对导入到GPU中的图像进行滤波;每个线程为对应的像素建立高斯模型,其中,把当前线程块需要的高斯模型的参数数据写入共享内存,计算完毕后,将计算结果从共享内存写入全局内存。
2.根据权利要求1所述的方法,其特征在于还包括利用OpenGL直接读取存储在GPU中的背景数据进行渲染绘制。
3.根据权利要求1所述的方法,其特征在于所述对导入到GPU中的图像进行滤波包括将每幅图像划分成一个Bx · By大小的二维线程块栅格,每个线程块大小为Dx · Dy。
4.根据权利要求3所述的方法,其特征在于图像像素数目和线程块栅格关系满足以下 公式(Bx-I) · Dx < w < Bx · Dx (By-I) · Dy < h < By · Dy。
5.根据权利要求1所述的方法,其特征在于每个线程块所需存储空间满足下式 Bx · By · (M+3) < 16KB。
6.根据权利要求1所述的方法,其特征在于当对全局内存进行访问时,每次存取的数 据是4、8或16的倍数。
7.根据权利要求1所述的方法,其特征在于当对全局内存进行访问时,存取数据需连 续存取。
8.根据权利要求7所述的方法,其特征在于为每个象素分配4个字节的存储空间。
9.根据权利要求1所述的方法,其特征在于共享内存采用数据非连续存储。
10.根据权利要求9所述的方法,其特征在于每存储64个字数据后空出4个字节。
全文摘要
一种背景模型算法加速方法,包括步骤对导入到GPU中的图像进行滤波;每个线程为对应的像素建立高斯模型,其中,把当前线程块需要的高斯模型的参数数据写入共享内存,计算完毕后,将计算结果从共享内存写入全局内存。本发明具有普遍的适用性。无论是在车流量大的场景,还是流量小的场景,都可以获得基本一致的加速。本发明应用于智能视频监控领域,用于提高背景建模算法的效率,从而使系统面对较大数据量时能保证实时运行,并且可以将多余的资源分配给其它算法使用,给其它功能的改善提供了一定的空间。本发明应用于计算机视觉领域的物体聚类,加速物体的聚类过程,减少大量等待时间。
文档编号H04N7/18GK101882311SQ20101019992
公开日2010年11月10日 申请日期2010年6月8日 优先权日2010年6月8日
发明者谭铁牛, 饶超, 黄凯奇 申请人:中国科学院自动化研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1