一种运动估计方法

文档序号:7664761阅读:198来源:国知局
专利名称:一种运动估计方法
技术领域
本发明涉及图像处理领域,具体涉及视频编码的运动估计方法。
背景技术
图形处理器(GPU,Graphic Processing Unit)的处理速度在最近几年得到了快速 的发展,其计算能力以每年2. 8倍的速度增长,高于CPU (Central Processing Unit,中央 处理器)的发展速度。GPU在并行数值处理能力上要远高于CPU。为了合理的利用GPU的 通用计算资源,统一计算设备架构(CUDA,Compute Unified Device Architecture)应运而 生。CUDA是一种由Nvidia公司(英伟达公司)推出的通用并行计算架构,该架构使GPU能 够更有效的解决复杂计算问题。现有的主流视频压缩算法都是基于运动估计块匹配的,如H. 264/AVC.H. 263.AVS, VC-I等。其中,H. ^4/AVC标准是由ITU-T和IS0/IEC联合开发的,定位于覆盖整个视频应 用领域,包括低码率的无线应用、标准清晰度和高清晰度的电视广播应用、Internet上的视 频流应用,传输高清晰度的DVD视频以及应用于数码相机的高质量视频应用等;H. 263是国 际电联ITU-T的一个标准草案,是为低码流通信而设计的;AVS是我国具备自主知识产权的 第二代信源编码标准,是《信息技术先进音视频编码》系列标准的简称,其包括系统、视频、 音频、数字版权管理等四个主要技术标准和符合性测试等支撑标准;VC-I是由美国微软公 司提出并开发的一种视频编码标准。在现有的视频编码方法中,大都采用以宏块为单位的运动估计(ME,Motion Estimation)来实现帧间压缩。其主要功能是,对当前帧图像中的一个被编码像素块在参 考帧图像中的一个指定窗口中搜索与之相差最小的像素块最为最佳匹配。运动估计中需要 得到两个值一个是运动矢量(MV,Motion Vector),被编码的像素块相对于参考帧中最佳 匹配像素块的偏移;另一个是被编码像素块与匹配像素块的残差绝对值之和SAD (Sum of Absolute Difference).这部分的计算占了整个编码过程计算量的很大比重。在编码算法中运动估计对编码质量和编码器实现效率有着重要的影响。如H. 264 编码算法中采用了 1/4像素精度的运动估计算法,以提高编码效率。这必然导致编码复杂 度的增加。运动估计的计算复杂度占到H.沈4的编码器计算复杂度的30%以上。考虑到运 动估计在视频编码中的重要性,高效的运动估计算法实现成为视频编码器实现中的最关键 的部分。

发明内容
本发明所要解决的技术问题是提供一种基于CUDA的高效的运动估计方法,以提 升运动估计的运算效率。本发明解决上述技术问题的技术方案如下 一种运动估计方法,基于CUDA并行计算架构,包括 步骤1 利用CUDA流,将图像数据从内存复制到显存;
3步骤2 对复制到显存的图像数据进行七种分块模式的SAD计算; 步骤3 对步骤2中得到的七种分块模式的SAD值分别取优。本发明的有益效果是采用CUDA并行计算架构,对图像数据进行并行处理,有效 的提升了整个运动估计的运算效率。在上述技术方案的基础上,本发明还可以做如下改进。进一步,步骤1中,利用不同的CUDA流从内存向显存复制同一图像数据的不同部 分。采用上述进一步方案的有益效果是,通过利用CUDA流,采用异步操作能够提高数 据从内存传输到显存的效率,相对传统非异步复制数据的效率提高了近30%。进一步,步骤2中,所述七种分块模式分别为4x4、4x8、8x4、8x8、8xl6、16x8和 16x16,其中,所述4x8、8x4、8x8、8xl6、16x8和16x16分块模式SAD值的计算均通过4x4分 块模式的SAD值合并而成。采用上述进一步方案的有益效果是,通过所述4x4分块模式的SAD值合并计算出 4x8,8x4,8x8,8x16,16x8和16x16分块模式的SAD值,可以减少过多的计算过程,提高计算效率。进一步,步骤3中,采用并行归约的方式对每种分块模式的SAD值进行取优。采用上述进一步方案的有益效果是,采用并行归约进行取优可以提升最优SAD值 选取的计算速度,提高计算效率。


图1为本发明提供的运动估计方法流程图2为利用多CUDA流将图像数据从CPU内存GPU显存的示意图; 图3为针对运动估计方法的SAD值合并示意图; 图4为最优SAD值选取计算中采用的并行归约方式的示意图。
具体实施例方式以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并 非用于限定本发明的范围。以下实施例提供了一种基于CUDA的全新的高效的运动估计算法的GPU实现方法 (运动估计方法),参照图1,主要包括如下的三个步骤
1.基于CUDA流处理的数据准备;
2.高效的针对ME算法的SAD计算优化;
3.基于归约的高效的分块模式SAD值的合并。此方法从数据准备、SAD计算和合并等方面均针对运动估计算法进行专门优化设 计,从而有效的提升了整个运动估计的运算效率,也构成了本发明的高效的基于CUDA的运 动估计方法。基于CUDA流处理的数据准备
GPU在处理有规律的并行数据上有很大速度的提升,但是从主机内存复制数据到显存 上的速度却比较消耗时间。为了让GPU以最高的效率进行处理,在从主机内存到GPU显存的数据准备上采用了 CUDA流处理的方法。 每个CUDA流是按顺序执行的一系列操作,而不同的CUDA流之间是乱序执行的。通 过对CUDA流的并行管理,可以实现不同CUDA流有序的并发执行。不同的CUDA流对应不同数据块位置的起始点,采用异步操作能够提高数据从主 机内存传输到GPU显存的效率。如图2所示,流1处理图像的上半部分,流2处理图像的下 半部分,两个部分在多CUDA流中进行异步的并行操作,从而很大的提高了效率。具体实施时,先在程序中声明一个⑶DA流的结构数组 cudaStream—t cpystream[2]
然后对其进行初始化,如下 for( int i = 0 ; i < 2 ; ++i ) cudaStreamCreate(&scpystream[i]);
CUDA流初始化后就可对其进行复制操作,复制过程按照图2分布所示用流1复制上 半部分,用流2复制下半部分,操作如下
for( int i = 0 ; i < 2 ; ++i )
{
cudaMemcpyAsyc( HostBuf + i * size / sizeof (float),
DevBuf + I * size,size , cudamemcpydevicetohost,&stream[i]);
ι
上面多CUDA流复制数据的操作,相对传统非异步复制数据的效率提高了近30%。高效的针对运动估计方法的SAD计算的优化
将主机上的内存数据传输到GPU上之后,需要对4x4分块模式的SAD值进行计算。运动 估计要求实现七种不同分块模式的3々0值,分别是414、418、814、818、8116、1618和16x16。 由于每个分块模式SAD值的计算都可以通过4x4分块模式的SAD值合并进行计算。为了减 少了过多的计算过程,在求出4x4分块模式的SAD值后,可以通过合并得到其余6种不同分 块模式的SAD值。考虑到每个源图上的4x4块都有一个16x16的搜索范围,这里线程块的 最大线程数设为16x16,这样线程块里每个线程就可以对应于16x16搜索范围的一个点来 进行并行的计算,从而省去很多定位的工作。合并的过程参照图3所示,图3中每个字母对应一个4x4的块,故整体为16x16。先 将虹8的块合并出来,一共有8个块,分别是AE、IM、BF、JN、CG、K0、DH、LP。然后再求8x4 的块,一共有8个块,分别是AB、⑶、EF、GH、IJ、KL、丽、0P。求完8x4的块后,将其求得的 值再次合并成8x8的4个块,分别是ABEF、⑶GH、IJMN, KL0P。8x8的块求出后,再根据8x8 的四个块求出16x8、8xl6和16x16的块。其中,16x8的块为ABCDEFGH禾口 IJKLMN0P, 8x16的 块为ABEFIJMN和CDGHKL0P,16x16的块为ABCDEFGHIJKLMNOP。上面的一对字母合并代表着 两个4x4块的合并。由于最大的子块是16x16,所以线程块分为图像的宽/16,图像的高/16。由于一 个源图上的4x4块都有一个16x16的搜索范围,所以16个块就是一个64x64的矩阵,为了 达到合并矩阵的最佳效果,将64x64的矩阵块读入GPU的共享内存中。基于CUDA的设计架 构,6虹64的矩阵块正好能够使CUDA的并行度达到最佳,从而可以让GPU在进行合并计算时 发挥最大的效率。
基于并行归约的高效的分块模式SAD值合并
上述计算完成后,需将计算得来的七个分块模式SAD值分别取优。这里将每个矩阵块 放在单独的GPU内核中,通过七个流进行并行计算,充分利用GPU的运算资源,减小计算的 等待时间,以提高计算效率。每个块的计算过程是通过并行归约的方式进行的,如图4所
7J\ ο并行归约存储空间大小必须为2的整数次方,否则将出现比对不均的情况,这会 加大GPU处理的负担。GPU物理结构中每个纯线程块最优上限是256字节的共享内存,如果 超出上限,该部分将被分配到其它块上,而其它块也会继续向后传递分配,导致GPU核心计 算部分的速处理度下降,从而影响性能。因此,这里选用256字节的共享内存为并行归约计 算时的存储空间大小。如图4所示,第一次循环将相邻两个数相加,并将值保存在“被加数”的索引位置 上;第二轮循环,由于相邻两个数已加过,这时增大加数索引,如图4所示,这里为1、3相加, 5、7相加,9、11相加;后面以此类推,最后索引1的位置就是加后的总和。这种操作充分利 用了 CUDA并行的优点,从而提升了在GPU中加法的速度。上述运动估计方法充分利用了 CUDA的特性,有效的提升了运动估计算法的运算 效率,同时保证了运动估计算法的效果。上述运动估计方法能够有效地应用于基于块运动 估计的视频编码算法系统中,为系统提供高效的运动估计算法实现。该方法从CPU到GUP 实现数据传输的方法充分利用了 CUDA的流特性,高效地完成了运动估计所需的数据传输 需求;利用基于CUDA线程结构进行有效的块合并,实现了全部分块模式SAD值的高效运算; 基于并行归约的最优分块模式SAD值的选择,有效地减少了最优分块模式SAD值选择所需 的时间。 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和 原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种运动估计方法,基于CUDA并行计算架构,其特征在于,包括 步骤1 利用CUDA流,将图像数据从内存复制到显存;步骤2 对复制到显存的图像数据进行七种分块模式的SAD计算; 步骤3 对步骤2中得到的七种分块模式的SAD值分别取优。
2.根据权利要求1所述的运动估计方法,其特征在于步骤1中,利用不同的CUDA流, 并采用异步操作从内存向显存复制同一图像数据的不同部分。
3.根据权利要求1所述的运动估计方法,其特征在于步骤2中,所述七种分块模式分 别为 4x4、4x8、8x4、8x8、8xl6、16x8 和 16x16,其中,所述 4x8、8x4、8x8、8xl6、16x8 和 16x16 分块模式的SAD值均通过4x4分块模式的SAD值合并而成。
4.根据权利要求1所述的运动估计方法,其特征在于步骤3中,采用并行归约的方式 对每种分块模式的SAD值进行取优。
全文摘要
本发明涉及一种运动估计方法,包括步骤1利用CUDA流,将用于ME算法的图像数据从内存复制到显存;步骤2基于CUDA并行计算架构,对复制到显存的数据进行七种分块模式的SAD计算;步骤3基于CUDA并行计算架构,对步骤2中得到的七种分块模式的SAD值分别取优。本发明采用CUDA并行计算架构,对图像数据进行并行处理,有效的提升了整个运动估计的运算效率。
文档编号H04N7/26GK102143365SQ20111012317
公开日2011年8月3日 申请日期2011年5月13日 优先权日2011年5月13日
发明者张浩佚, 武宇文, 王彤 申请人:万辉视讯(北京)科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1