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

文档序号:9788098阅读:来源:国知局
代码。index表示当前是第几个CPU加载线程或是第几个GPU控制线程,每一个CPU加载线程对应一个GPU控制线程(每个GPU控制线程控制一个GPU的计算)。id是线程的识别号,GPUNUM为GPU线程的个数,我们的实现中,前GPUNUM个线程为CPU加载线程,后GPUNUM个线程为GPU控制线程。对每个线程来说,它遍历访问图片,多个加载线程或多个GPU控制线程将以round robin的方式来访问。以两个加载线程为例,第一个线程访问单数号的图片,第二个线程访问双数号的线程。加载线程中,int_img为加载完毕后的图片数据结构,其中包括图片的宽度、高度、和图片中每个像素点的值。像素值是一个很大的数组,若每个图片都要重新分配内存则影响性能,我们在内存优化的过程中创建了一个缓存,里面事先分配好頂GBUFSIZE个图片大小的数组,缓存中的数组是可以循环利用的,每次新建一个图片数据结构时,就将缓存中某一个数组分配给该int_img,并将数组清零即可,从而减少内存分配的时间。当数据加载完毕后,把int_img放到imgs_g这个数组中,并将对应的f lag_g置为I,imgs_g数组和f lag_g数组大小都为頂GSIZE,且能够被GPU控制线程所访问XPU控制线程按顺序访问图片,当第i张图片的flag不为I时就一直等待,等到该flag变成I,即图片已经加载完毕后,调用⑶DA方法DetDesO,需要计算的图片数据已在imgs_g[i]中。每加载一张图片loadnumber[index]++,每完成一张图片的GPU运算,processed[index]++,当loadnumber[index]- processed[index]大于缓存大小时,表明加载线程速度较快,加载线程需等待GHJ的计算。
[0036]由于GPU支持DMA异步传输的特点,和流水线相结合,可以进一步将数据传输部分的时间也重叠起来,即形成CPU计算、数据传输、以及GPU计算三个阶段的流水线。形象地说,也就是当CPU在进行第i张图片的初始化计算时,同时将第1-Ι张图片的初始化数据传到GPU内存中去,而GPU此时正在处理第1-2张图片的特征检测和描述。【具体实施方式】如上述代码所示,GPU控制线程中,若要调用CUDA方法计算第i张图片,就需第i及第i+Ι张图片都加载完毕。在06七068()方法中会用(311(^161]?^72048711(3()方法来异步传输第丨+ 1张图片的数据,从而使数据传输的时间和GPU计算时间重叠起来。
[0037]另外,本发明还充分利用了CPU的剩余资源,让多余的核也独立完成部分算法,以提高性能。假设是4核的CPU,一个核用于控制GPU及数据传输,另一个核做CPU计算,那么另外的两个核就可以独立地完成部分图片的特征提取计算,如图2所示。
[0038](4)性能测试
本发明还包括详细的测试结果,测试的主机是Intel Q8300的4核CPU,内存大小为2GB。测试使用的GPU是GeForce GTX260,它有27个SM,总共216个核,时钟率为1.24GHz,显存大小为1GB。主机操作系统为Ubuntu 8.10(linux内核版本为2.6.27-7-generic)。
[0039]如图3所示,局部图像特征提取算法在CPU串行执行时,每计算一张图片需393毫秒,也就是I秒钟处理2.56张,该速度远远小于实时处理速度。在CPU上并行地进行SURF算法(按最快的分块并行算),速度提升为14.86帧/秒。而细粒度的GPU实现,将算法提高到74.45帧/秒,是CHJ上并行版本的5X。经过GPU内存优化以及和CPU的协同工作,速度上升到84.56帧/秒和172.33帧/秒。该速度已达到实时的处理速度。
[0040]本发明还用了硬件配置为Intel 17的CI3U和GPUGTX295(480个核)做了进一步测试,测试结果表明,在该配置下,局部特征提取算法的速度高达340.47帧/秒。
【主权项】
1.一种基于GPU的图像特征提取算法的加速方法,其特征在于: 首先在GPU上细粒度地实现图像特征提取的并行算法,所谓细粒度是指在局部特征提取算法的每一个阶段分别以最小的粒度,即按每个特征点,来开发数据并行;使用CUDA编程模型,将这种细粒度的数据并行映射到GPU上计算;所述的局部特征检索算法采用检索算法SURF; 所述的局部特征检索算法检测出图像特征并对这些特征加以描述,它分为三阶段:图像初始化、特征检测和特征描述;特征检测与特征描述两个部分放在GPU上计算; 所述图像初始化,分为载入图像、计算灰度图像、计算积分图像三步; 所述特征检测,是利用积分图像检测出图像的特征点;其中,首先计算每个点的特征值;此阶段映射到GPU上时,每个点的特征值计算相对独立,每个采样像素点为一个GPU线程;具体使用0个内核循环计算来避免GPU上的分支计算,oSSURF算法中图像层数;当每个点的特征值计算完毕之后,即进入特征点定位阶段;该阶段在每8个相邻点中选取特征值最大的点作为可选的特征点;每8个点为一个GPU线程进行计算; 所述特征描述,使用特定的数据结构对找到的特征点加以描述,以方便以后对图像的处理;其中,首先对每个特征点周围的109个像素点做哈尔小波变换,该阶段每个周围的像素点为一个GHJ线程;接着,该109个周围点对特征点的42个特征方向区域进行投票,票数最多的那个方向为该特征点的方向,该阶段每个特征区域为一个GPU线程;最后,每个特征点生成一个64维特征向量,该向量的计算由特征点周围4*4的区域中计算出来,因此,每个特征点又分为16个GPU线程来计算。2.根据权利要求1所述的基于GPU的图像特征提取算法的加速方法,其特征在于:利用GPU内存即GPU纹理存储器在处理2维数据时的特点来提高算法性能,并尽可能地减少算法对内存的反复分配与释放;具体是对于S U R F算法中涉及的二维数组,用C U D A中cudaBindTexture2D方法绑定到GPU纹理存储器上; 同时,SURF算法中在存储原图像、积分图像、特征值、以及其他变量时,都在每张图像处理开始和结尾进行内存分配和释放;在批量处理图片时,在程序初始阶段就分配好固定的内存,从而减少多余的内存分配与释放。3.根据权利要求2所述的基于GPU的图像特征提取算法的加速方法,其特征在于:使CPU和GPU以异步流水线的方式协同工作; 所谓流水线的方式是指将整个算法分成两个部分,CPU处理第一部分的计算,GPU处理第二部分的计算,数据以流的方式在CHJ与GPU间传输,以实现两个硬件并行工作;其中,CPU专门做初始化数据的计算,并把数据传入GPU内存,而GPU则从内存中读出积分图像等数据,并进行特征检测与特征描述计算; 同时,由于GPU支持DMA异步传输的特点,和流水线相结合,进一步将数据传输部分的时间也重叠起来,即形成CPU计算、数据传输、以及GPU计算三个阶段的流水线。4.根据权利要求3所述的基于GPU的图像特征提取算法的加速方法,其特征在于:还利用CPU的剩余资源,让CPU多余的核也独立完成部分算法的处理。
【专利摘要】本发明属于并行处理器技术领域,具体涉及一种基于GPU的图像特征提取算法的加速方法。本发明主要对目前主流的图像特征提取算法在GPU上进行了细粒度的并行实现,同时根据GPU的特性进行了优化加速,并且采用了异步流水线的协同工作机制来使CPU与GPU可以协同计算。测试结果表明,当硬件配置为Intel?Q8300的CPU和GTX260的GPU时,算法速度为172.33帧/秒,是串行算法的67倍。而当硬件配置为Intel?I7的CPU和GTX295的GPU时,速度高达340.47帧/秒,可以较好地满足实时处理的需求。
【IPC分类】G06T1/20
【公开号】CN105550974
【申请号】CN201510915260
【发明人】张为华, 鲁云萍
【申请人】复旦大学
【公开日】2016年5月4日
【申请日】2015年12月13日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1