TCSVT2020:基于新型SAD计算的HEVC低功耗运动估计

155 篇文章 138 订阅
66 篇文章 23 订阅

 

本文来自TCSVT2020文章《A Low-Power Motion Estimation Architecture for HEVC Based on a New Sum of Absolute Difference Computation》

在HEVC中,运动估计(ME)是编码器功耗最高的部分,而SAD的计算又占据ME的50%的功耗。本文通过一种新型的SAD计算方法来降低功耗。(注:文中功耗等同于计算复杂度)

两阶段快速IME

两阶段快速整数运动估计(integer motion estimation,IME)可以并行处理CU内的PU。通常来说一个大块的最优MV在一个矩形区域中,这个矩形区域由组成这个大块的各个小块的最优MV的最大值和最小值决定,如Fig.1所示。

可以看见大块的搜索窗口被限定在矩形区域中,搜索空间较小降低了计算量。基于此可以使用两阶段算法进行运动估计。第一阶段,对CU的所有4x4子块进行全搜索(Full Search,FS)。每个子块的搜索起点即MVP由AMVP列表的候选MV决定,如Fig.2所示。搜索窗口为起始MVP周围64个像素点。为了降低计算复杂度,提高水平方向数据重用率,第一阶段只搜索搜索窗口的每一行。

第二阶段可以使用前面计算的4x4子块的MV来限定更大PU的运动搜索范围(即Fig.1中的矩形区域),大块PU的运动搜索直接在限定的矩形区域中进行。第二阶段的搜索窗口由前一阶段的4x4PU的运动估计结果自适应决定。第二阶段,使用并行IME(用全搜索算法)来同时计算各大块PU的cost,大块PU的cost由组成它的小块PU的SAD相加得到。

通过在HM13.0上进行实验,测试序列为classB到classE,配置为LDP,QP={22,27,32,37},第一阶段搜索范围为[-64,64]。实验结果显示大块PU在第二阶段IME的平均搜索点数为70。

通常的AMVP候选列表的构建需要利用相邻CU的运动信息,这导致一个CTU中的各个CU无法并行处理。而本文方法可以解决这个问题,如Fig.1所示,第一阶段已经准备好了第二阶段IME所需的运动信息(大块PU搜索窗口的位置和大小)。此外,第一阶段获得的4x4PU的MV可以在第二阶段作为AMVP候选项,即CTU中的256个4x4块的MV作为MVP候选项,形成超级AMVP(super advanced motion vector prediction,SAMVP)。首先,这256个MVP用于决定CTU中所有PU的搜索中心。从SAMVP列表中选择使64x64 SAD cost最小的候选项作为第二阶段IME的搜索中心。第二,SAMVP列表中的MVP可以用于运动信息编码。通常用大块PU左上角4x4子块的MV作为其MVP。例如Fig.3中的8x16PU使用MV11作为其MVP。

SAMVP中有256个MVP,通过重用小块PU的SAD来计算大块PU的cost这样一共只需要计算256个SAD。

SAMVP除了可以达到更高的编码效果外,使用两阶段并行IME还可以达到更高是数据重用率。在第一阶段对于每个新的搜索点只需要加载4个像素,第二阶段只需要加载64个像素。由于第二阶段搜索窗口平均包含70个搜索点,所以加载开销很小。通过实验比较传统的一阶段并行IME算法和本文的两阶段并行IME算法可知传统方法的参考像素加载量是本文算法的6倍。

SAD的低复杂度计算方法

本文提出了新的SAD计算方法可将复杂度降低大约50%。

当前帧中(l,k)位置处的MxN的块与参考帧中候选块间的SAD计算方法如下:

其中(i,j)是参考块与当前块间的位移。公式(1)可以做如下变换:

其中第2、3项分别是当前块和参考块的像素和,分别记为Sc,SR(i,j)。第1项是当前块像素小于参考块像素时的差值,记为SDCR(i,j)。为了简化符号表示,去掉公式中的(l,k),格式(2)重写如下:

当前块和位移为(i+1,j)的参考块的SAD为:

比较公式(4)和(3),可以发现一些计算是重复的。首先,Sc对所有(i,j)都是相同的,在寻找最小SAD的过程中不需要重复计算。只需要计算-2SDCR(i+1,j)-SR(i+1,j)的最小值。

第二,SR(i+1,j)可以重写如下:

当计算某个搜索点的SR时,可以利用其相邻搜索点已计算的SR。因此原先需要MxN-1次加法计算,现在只需要2M次加/减法。

最后,还可以减少计算相邻搜索点的SDCR的操作次数。SDCR只包含两种基本操作:比较和加法。比较可以通过减法和符号位检查实现。只有当(C-R)为负时(即符号位=1)才需要将其加到最终结果中。

使用一个一维的例子来展示计算过程,假设(C0,C1...CN-1)当前一行的N个像素,(R0,R1...RS+N-1)是包含S个搜索点的参考像素行。为了计算SDRC,必须进行N次比较操作。但是,可以通过预计算重用前面搜索点的计算结果。例如如果已知C0>=C1,在计算第1个搜索点后得到C1>=R1,那么可以直接得到C0>=R1不需要进行比较操作。如Fig.4所示。

假设Ti,i=0,1...S表示第i个搜索点。Ci和Ci+1的预计算结果表示为CiCi+1,如Fig.4所示(注意CiCi+1对当前帧只需要在开始的时候计算一次)。可以利用Ci+1和Ri+1的计算结果以及CiCi+1来得到CiRi+1的比较结果。当比较结果为1表示差值为负,否则非负。如果CiCi+1=0且Ci+1Ri+1=0则可以直接得到Ci>=Ri+1不需要进行额外的比较。

假设Ci>=Ci+1,Ci+1>=Ri+1的联合概率为P。在第1个搜索点完成N次比较后,对剩下(S-1)个搜索点每个需要1+(1-P)(N-1)次比较操作。如果再包括当前像素最右边像素的(N-1)个预比较操作(如Fig.4中的C7R7,C7R8,C7R9,...C7R12),则总共需要的比较次数为:

将上面的结论扩展到二维情况,假设当前块为MxN,搜索窗口为SxS,进行全搜索。则总共需要的比较次数为:

当获得比较结果后,只需要将(C-R)为负的结果加到SDCR中。假设结果为负的概率为Q。则计算SDCR需要的加法操作数为:

则计算SDCR需要的总操作数为:

计算SR时对每个搜索点需要2M次加法操作,共SxS个搜索点,则总的加法次数为:

最后,计算当前块最小SAD需要的操作次数为:

传统方法计算最小SAD需要MNxSxS次比较,(MN-1)xSxS次加法,总共需要的操作次数为:

则本文算法减少的操作次数比率为:

减少的操作次数比率取决于像素的统计结果。为了检验本文算法的效率,使用HM13.0编码参考序列classB到classE,配置为LDB,QP=22,搜索窗口为±64 ,最大CU为64x64。因此M=N=64,S=129。通过实验模拟获得所有序列的平均P=0.47,Q=0.51。基于这个概率值和公式(6)可得减少的操作次数比率大约为0.45。这意味着可以减少SAD计算的大约45%的复杂度。

感兴趣的请关注微信公众号Video Coding

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值