基于gpu的图像特征提取算法的加速方法

文档序号:9788098阅读:1075来源:国知局
基于gpu的图像特征提取算法的加速方法
【技术领域】
[0001]本发明属于并行处理器技术领域,具体涉及一种是图像特征提取算法的加速方法。
【背景技术】
[0002]随着人类进入数字时代,每天都有大量来自不同领域的数据产生。其中,多媒体数据类型,如图像、视频等,已经成为主要的数据类型之一。如何在日益增多的图像/视频数据中有效筛选信息已经受到了越来越多的研究关注。相比于传统的文本类应用,以多媒体数据为中心的应用,如检索引擎、过滤系统、拷贝检测等,有着越来越广泛的实用需求。其中,图像特征提取算法作为图像/视频信息检索筛选的一个重要基础算法,能有效地提取出图像或视频中关键帧的信息以供图像或视频间的比较,在这类系统应用中作为主要算法被广泛地使用。
[0003]从计算过程上讲,图像检索算法可以分成特征提取阶段和特征匹配阶段。特征提取阶段根据特征提取算法将图像的特征提取出来,包括图像的颜色特征,纹理特征,或是图像中的特征点(如特别亮的点)等。特征匹配阶段以比较两幅图像的特征来判断两幅图像是否匹配。从精确性上讲,基于局部特征的算法使用成百上千个特征代表一个图像(如图像中的特征点),因而精确性高,已被越来越多的应用系统所使用。现今主流的局部特征算法有SIFT、SURF算法等。但是,由于这种算法不但需要处理的数据量十分巨大,而且算法本身也很复杂,因而在处理速度上受到了很大的限制,在一些应用中则不能满足用户的实时需求。因此,如何有效提升局部特征提取算法的处理速度成为当前体系结构和检索领域的一个研究热点。
[0004]最近几年,随着半导体技术的发展和多核技术的普及,各种并行计算系统逐渐成为应用设计的主流。随着图像处理单元GPlXgeneral purpose processors)通用性和可编程性的增强,它也成为其中一个不可或缺的组成部分。现代GPU不仅仅是一个单纯的图像处理引擎,更是一个高度并行的可编程处理器。相比于(PU来说,在相同晶体管数量的情况下,GPU用更多的晶体管来进行计算。高度数据并行的本质使GPU有着更为强大的算术处理能力,同时,它也有着更高的存储器带宽和更加便宜的价格,这为它在高性能计算领域带来了极大的竞争力。
[0005]图像检索中的局部特征提取算法存在多种并行方式,这为它在GPU上的并行实现提供了可能。同时,GPU的强大计算能力,为提高局部特征提取算法的性能提供了强有力的基础。因此,本发明致力于利用GPU来对基于局部特征提取算法的图像检索算法进行优化加速。

【发明内容】

[0006]本发明的目的在于对目前主流的图像特征提取算法提供一种优化加速的方法。
[0007]本发明提供的对图像特征提取算法进行优化加速的方法,主要利用了GPU技术。即本发明对图像特征提取算法在GPU上予于细粒度地并行实现,并根据GPU的特性进行优化;同时,采用异步流水线的协同工作机制使(PU与GPU协同工作,从而进一步提高处理效率。
[0008]本发明首先在GPU上细粒度地实现图像特征提取的并行算法,所谓细粒度是指在局部特征提取算法的每一个阶段分别以最小的粒度,如按每个特征点,来开发数据并行。细粒度的并行能更充分地发挥GPU的并行计算能力。本发明使用CUDA (Compute UnifiedDevice Architecture)编程模型,将这种细粒度的数据并行映射到GPU上计算。所选取的局部特征检索算法为目前主流的检索算法SURF(Speeded_Up Robust Features)。在描述具体的并行实现之前,我们先介绍一下局部特征检索算法的主要算法过程,然后再说明每一个阶段是怎样在GHJ上得以实现的。
[0009]局部特征检索算法检测出图像特征并对这些特征加以描述,它主要分三阶段:图像初始化、特征检测和特征描述,如图1所示。
[0010]图像初始化,其过程中分为载入图像、计算灰度图像、计算积分图像三步。特征检测部分,则利用积分图像检测出图像的特征点(比如说暗点中特别亮的点)。接着特征描述部分使用特定的数据结构对找到的特征点加以描述,以方便以后对图像的处理。在局部特征检索算法中,主要的计算时间集中在特征检测与特征描述两个部分,所以本发明将这两个部分放在GPU上计算。
[0011]所述的特征检测,首先要计算每个点的特征值。SURF算法中,采用采样的概念避免计算每一个像素点的特征值。此阶段映射到GPU上时,由于每个点的特征值计算相对独立,因此,每个采样像素点为一个GPU线程(GPU上各阶段线程个数如图1圆括号中所示)。由于该阶段中有较多判断语句,会影响GPU的性能,所以,本发明使用0个内核循环计算来避免GPU上的分支计算,oSSURF算法中图像层数。当每个点的特征值计算完毕之后,即进入特征点定位阶段。该阶段在每8个相邻点中(包括2个图像层)选取特征值最大的点作为可选的特征点。因此,每8个点为一个GPU线程进行计算。
[0012]所述的特征描述,可分为计算哈尔小波值、计算特征方向、创建特征窗口三步。首先SURF算法中定义对以特征点为圆心,6*scale为半径的圆内所有的点计算Harr小波变换,因此每个特征点周围有109个点,我们映射到GPU上时每个线程对应计算一个点的Haar小波变换。接着,SURF算法在计算特征方向时以0.15弧度为方向区域大小,得到2*V0.15 ? 42个特征方向区域,109个周围点对该42个特征区域进行投票,票数最多的那个方向即为该特征点的方向。在该阶段中每个特征区域为一个GPU线程。最后,每个特征点将生成一个64维特征向量,该向量的计算是由特征点周围4*4的区域中计算出来的,因此,每个特征点又分为
16个GPU线程来计算。
[0013]在细粒度并行的基础上,本发明还利用GPU的特性,进一步进行优化加速。具体是利用GPU内存即GPU纹理存储器在处理2维数据时的特点来提高算法性能,并尽可能地减少算法对内存的反复分配与释放。
[0014]GPU纹理存储器在硬件上提供对于二维,三维局部性的支持。即对于纹理内存上的二维数组,当访问一个像素点时,其上下左右的像素点都会同时被放入纹理内存的缓存上。SURF算法中存在大量快速近似积分的计算,这些计算需要访问积分数组,并且该访问有明显的二维局部性。利用GPU的纹理存储器对二维数据的内存访问有很好的性能提升。将具体的二维数组绑定到GHJ纹理存储器上,可以用CUDA中cudaBindTexture2D方法。
[0015]同时,算法中在存储原图像、积分图像、特征值、以及其他变量时,都是在每张图像处理开始和结尾进行内存分配和释放。在批量处理图片时,这样的分配和释放GPU内存是冗余并且影响性能的。本发明在程序初始阶段就分配好固定的内存,从而减少多余的内存分配与释放。
[0016]本发明还使CPU和GPU以异步流水线的方式协同工作。在传统情况下CPU和GPU协同计算的流程是:(I)CPU计算需要提供的数据;(2)CPU将数据从CPU内存传到GPU内存;(3)GPU进行计算。在这样的流程中,GPU在进行计算时,CPU资源是被闲置的,同样地,GPU也总是要等待CPU计算并传输完数据后才能进行处理。相当于CPU计算,数据传输和GPU计算以串行的方式在进行。为了使三部分执行时间能够重叠从而进一步提高性能,本发明利用异步流水线的方式来实现。
[0017]所谓流水线的方式是指将整个算法分成两个部分,CPU处理第一部分的计算,GPU处理第二部分的计算,数据以流的方式在CPU与GPU间传输,达到两个硬件并行工作的目的。也就是说,CPU在做后一张图片的计算时,GPU能够同时处理前一张图片的计算,以此达到并行计算的效果。本技术的具体实现中,CHJ专门做初始化数据的计算,并把数据传入GPU内存,而GPU则从内存中读出积分图像等数据,并进行特征检测与特征描述计算。由于CPU初始化图像的速度与GPU特征检索与描述的速度大致相当,因此CPU与GPU能有效地保持并行计算。同时,由于GPU支持DMA异步传输的特点,和流
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1