一种基于gpu的运动估计方法

文档序号:7794875阅读:362来源:国知局
一种基于gpu的运动估计方法
【专利摘要】本发明公开了一种基于GPU的运动估计方法,具体流程为:CPU将图像数据送入GPU,然后计算N×N块的SAD,合成2N×2N的CU块中其他模式PU块的SAD值,求得各PU块的最佳SAD,GPU将图像的各PU块的最佳SAD传回CPU,CPU根据CU的尺寸更新当前N×N?PU块的SAD信息,将得到帧间预测最佳划分模式以及最小cost和运动矢量。通过本发明方法能够加速运动估计运算效率,提高编码速度。
【专利说明】—种基于GPU的运动估计方法
【技术领域】
[0001]本发明涉及视频编码【技术领域】,尤其涉及一种基于GPU的运动估计方法。
【背景技术】
[0002]随着人们对视频压缩标准的要求不断提高,从2010年开始,IS0/IEC与ITU-T开始联合在全球征集下一代视频压缩标准的提案,该视频标准命名为HEVC(High efficiencyVideo Coding),同时建立了其测试模型HM。新标准已于2013年发布,它的目标是在相同视频质量(PSNR)下码率降低到H.264的40%_50%左右,这将使高清视频传输对带宽的要求进一步降低。不过HEVC的优越性能均是以增加编解码的复杂度的代价获得的,与H.264相t匕,HEVC的复杂度达到前者的3倍以上。因此为了实时应用,如何加速视频编码器成为问题的关键。在现阶段,为了加速视频编解码器,人们采用了 CPU的SSE等多媒体指令集、FPGA硬件电路以及DSP芯片等方法进行编解码器加速的研究,获得了相对理想的加速效果。不过这些方法都增加了 PC机的成本,同时其性能提升也有很大的瓶颈。
[0003]1999年NVIDIA公司发布了第一颗GPU的图形处理芯片Geforce256,其强大的浮点计算能力以及优异的并行计算能力从发布开始就受到了业界的关注。同时随着GPU的不断发展,GPU的应用已不仅仅局限于图形显示,它在通用计算方面也展现了极大的潜力。在国内外,已经有些公司以及研究机构开始将GPU应用于其专业领域,如航空、生物、气象、金融等等,并且都取得了很好的效果。特别是对于一些数据量大、平行性比较好的项目取得了高达几十倍的加速,应GPU加速将大大缩短项目的研发周期,同时也将带来相当大的经济效益。
[0004]当前,不论是H.264/AVC还是AVS都将GPU并行作为编解码加速的一个研究热点,并且都取得了良好的成果。很多基于CUDA的视频处理软件,如Badaboom和Mediacoder的应用也有效证明了 GPU并行的可行性。

【发明内容】

[0005]本发明的目的是为了克服现有技术的缺陷,提供一种基于GPU的运动估计方法,该方法通过借助于CUDA与GPU的结合来选择最佳的SAD,从而提高加速运动估计运算效率,具体流程为:CPU将图像数据送入GPU,然后计算NXN块的SAD,合成2NX 2N的⑶块中其他模式PU块的SAD值,求得各PU块的最佳SAD,GPU将图像的各I3U块的最佳SAD传回CPU,CPU根据CU的尺寸更新当前NXN PU块的SAD信息,将得到帧间预测最佳划分模式以及最小cost和运动矢量。
[0006]优选地,该方法的递归方向与HM中的递归方向相反,这是因为只有求得当前CU更深一层的⑶块的运动估计信息时才能够更新当前NXN PU块的SAD信息。
[0007]优选地,计算NXN块的SAD时,将当前帧数据以及参考帧传入到设备端,即GPU中,并且使用纹理内存进行绑定。
[0008]优选地,该方法使用了归约合并的方法分别对各块的搜索范围窗口中的SAD进行比较,得到每种块模式下最小SAD的运动矢量,即该块模式下的最佳运动矢量。
[0009]优选地,当⑶块已经是最小深度的⑶块时不需要对NXN PU的SAD进行更新。
[0010]优选地,⑶块尺寸越大,网格中的块个数也就越少,加速比显著增加。
[0011]本发明技术方案带来的有益效果:
[0012]本发明为了加速运动估计运算效率,提出了基于GPU的运动估计方法,通过借助于CUDA与GPU的结合来选择最佳的SAD,从而加速运动估计运算效率,提高编码效率。
【专利附图】

【附图说明】
[0013]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0014]图1是本发明的实施例中CU块中PU块的合成树图;
[0015]图2是本发明的实施例中SAD搜索范围内的归约合并图;
[0016]图3是本发明的实施例中最佳划分方式比较图;
[0017]图4是本发明的基于GPU的运动估计方法流程图;
[0018]图5是本发明的⑶块运动估计CPU算法与GPU算法加速比比较图。
【具体实施方式】
[0019]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0020]运动估计即搜索窗边内寻找与当前块最匹配的数据块,这样就存在着如何判断两个块是否匹配的问题,所以必须定义一个匹配准则,常用的匹配方法有最小均方差(MSE)、最小平均绝对值误差(MAD)、阈值差别计数(NTD)以及常用的绝对差值和(SAD)。得到整个搜索范围的SAD后,必须对所有的SAD进行选择,得到一个最佳的SAD。本发明提出了一种基于GPU的运动估计方法,该方法通过借助于CUDA与GPU的结合来选择最佳的SAD,从而加速运动估计运算效率,提高编码效率。
[0021]由于HEVC编码采用递归的方法进行编码,所以编码器也将采用递归的方法对64X64到8X8的CU块进行运动估计。不过需要注意的是,该算法的递归方向应该与HM中的递归方向相反,这是因为只有求得当前CU更深一层的CU块的运动估计信息时才能够更新当前NXN PU块的SAD信息。下面将以8X8的CU块为例说明算法的流程。
[0022]Stepl先计算图像中所有4X4块的SAD值;
[0023]将当前帧数据以及参考帧传入到设备端,即GPU中,并且使用纹理内存进行绑定。调用Kerne_SAD函数计算4X4块的SAD值,其中kernel_SAD的网格(Grid)维度为 dim3 (ffidth/N, Height/N, I),网格中 block 的线程维度为 dim3 (2 X Search_Range, 2X Search_Range, I),其中 Search_Range 为运动估计的搜索范围,Width 和 Height分别为图像的宽度与高度。[0024]St印2合成其它I3U块的SAD值;
[0025]在⑶块的尺寸大小为8时,此时为最小编码树深度,I3U块的模式有4X4、4X8、8X4和8X8。在上面一步中求得了所有4X4块的SAD,其它块的合并过程如图1所示。两个横向的4 X 4的SAD值合并成一个8 X 4的SAD,两个纵向的4 X 4的SAD值合并成一个4X8的SAD,最后将两个4X8的SAD值合并成一个8X8的SAD值。
[0026]St印3求得各模式I3U块的搜索范围内的最小SAD值;
[0027]在算法中,本文使用了归约合并的方法分别对4X4、4X8、8X4以及8X8四种PU块的搜索范围窗口中的SAD进行比较,得到每种块模式下最小SAD的运动矢量,即该块模式下的最佳MV。下面将对该过程进行说明,假设搜索范围为8,则搜索点的数目达到了 256,其归约合并过程如图2所示。先对256个SAD对半划分,得到128组,进行两两比较得到128个相对最小的SAD。依次类推,再将128进行对半分为64组,比较得到32个最小的SAD,总共经过7次归约合并就可得到该搜索范围内的最佳运动矢量。
[0028]St印4CPU处理过程;
[0029]CPU的处理过程包括更新当前NXN PU块的最佳SAD信息以及选择帧间预测最佳划分模式,同时得到最小cost和相应的运动矢量。对于8 X 8⑶运动估计,求出4种PU块的搜索范围内的最小SAD以及最佳运动矢量以后,因为该CU块已经是最小深度的CU块了,所以不需要对NXN 的SAD进行更新。接下来直接对块的四种划分模式进行比较以得到⑶块的最佳PU划分方式。具体如图5所示,其中4X 8模式SAD值是两个4X 8块SAD值之和,同样8x4模式SAD值是两个8X4块SAD之和,最后4X4模式SAD值是4个4X4块SAD值相加。然后对这四种模式SAD进行比较,得到一个最佳的预测块(PU)划分方式以及最佳运动矢量(MV)。
[0030]对于其他尺寸的⑶块的运动估计,所不同的是,该⑶块的kerne 1_SAD函数的网格维度变为dim3 (ffidth/N, Height/N, I),对16X 16CU块来说,其尺寸就为dim3 (ffidth/8, Height/8, I);同时,对于其他大于8 X 8的CU块来说,CPU处理过程必须先更新NXN PU块的SAD信息。下面以16X 16⑶块为简单说明,16X 16⑶块的PU块有4种的分块模式为16X 16、16X8、8X 16以及8X8,在计算比较16X 16⑶块的划分过程中,先更新8 X 8块的信息。在比较过程中,16 X 16块中四个8 X 8分块采用的SAD值为8X8的多种划分模式比较得到的最小SAD值。处理完16X16⑶块后,则将信息传递回编码器。这里信息包括整幅图像中所有16X 16⑶和8X8⑶的划分方式以及其相应的最小SAD值。
[0031]本发明方法的总流程如图4所示,具体为:CPU将图像数据送入GPU,然后计算NXN块的SAD,合成2NX 2N的⑶块中其他模式I3U块的SAD值,求得各PU块的最佳SAD,GPU将图像的各I3U块的最佳SAD传回CPU,CPU根据⑶的尺寸更新当前NXN PU块的SAD信息,将得到帧间预测最佳划分模式以及最小cost和运动矢量。
[0032]基于GPU的运动估计算法在以下的环境中进行了测试:CPU: Inter?'Core?i7-26003.40GHz ;内存 16.0GB ;显卡:NVIDIA GeForce GTX460 (1024MB 显存);系统 windows7spl+Microsoft visual studio2010 ;CUDA 工具:CUDA driver4.1、CUDAtoolkit4.1和 CUDA SDK4.1for windows7。
[0033]图5是各尺寸⑶以及各视频尺寸CPU运动估计方法与GPU运动估计方法加速比对比图。从图5中可以看出,GPU算法与CPU算法的加速比随着序列尺寸的增加而递增。而图像中,⑶块尺寸越大,那么网格(grid)中的块个数也就越少,加速比显著增加。
[0034]以上对本发明实施例所提供的一种基于GPU的运动估计方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种基于GPU的运动估计方法,其特征在于,该方法通过借助于CUDA与GPU的结合来选择最佳的SAD,从而提高加速运动估计运算效率,具体流程为:CPU将图像数据送入GPU,然后计算NXN块的SAD,合成2NX 2N的⑶块中其他模式I3U块的SAD值,求得各PU块的最佳SAD,GPU将图像的各I3U块的最佳SAD传回CPU,CPU根据⑶的尺寸更新当前NXNPU块的SAD信息,将得到帧间预测最佳划分模式以及最小cost和运动矢量。
2.根据权利要求1所述的方法,其特征在于,该方法的递归方向与HM中的递归方向相反,这是因为只有求得当前⑶更深一层的⑶块的运动估计信息时才能够更新当前NXN PU块的SAD信息。
3.根据权利要求1所述的方法,其特征在于,计算NXN块的SAD时,将当前帧数据以及参考帧传入到设备端,即GPU中,并且使用纹理内存进行绑定。
4.根据权利要求1所述的方法,其特征在于,该方法使用了归约合并的方法分别对各PU块的搜索范围窗口中的SAD进行比较,得到每种块模式下最小SAD的运动矢量,即该块模式下的最佳运动矢量。
5.根据权利要求1所述的方法,其特征在于,当CU块已经是最小深度的CU块时不需要对NXN PU的SAD进行更新。
6.根据权利要求1所述的方法,其特征在于,CU块尺寸越大,网格中的块个数也就越少,加速比显著增加。
【文档编号】H04N19/51GK103747262SQ201410009541
【公开日】2014年4月23日 申请日期:2014年1月8日 优先权日:2014年1月8日
【发明者】梁凡, 刘海军 申请人:中山大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1