An efficient hardware architecture of integer motion estimation based on early termination and data
Zhang, Jun, Yu Zhang, and Hao Zhang. “An efficient hardware architecture of integer motion estimation based on early termination and data reuse for versatile video coding.” Expert Systems with Applications 242 (2024): 122706.
一、现存问题分析
1、由于降低搜索复杂度而降低搜索精度
目前已有的一些整数运动估计算法(如三步和四步搜索算法)通过简化搜索模板来降低运动估计的复杂度。然而,减少搜索点的数量和使用更小的搜索窗口会导致搜索算法陷入局部最优而不是全局最优,从而降低运动搜索的准确性。
2、由于增强搜索精度而导致高计算复杂度和资源消耗
另一种类型的整数运动估计算法(例如菱形搜索算法)采用复杂的搜索模板并增加搜索窗口内的搜索点的数量以提高搜索精度。复杂的运动搜索过程和额外的计算数据导致在视频编码期间显著的计算和存储资源消耗,这是以高成本来实现的。
二、论文提出的方法
1、基于搜索窗口划分的数据重用算法
TZ搜索过程中,搜索窗口重复调用参考像素比例较大,论文提出划分策略。
分析了TZ搜索算法搜索窗口中搜索点的分布,将单元块的大小设置为8×8。较大的块可以被分成几个8×8的子块。搜索窗口被分成两部分:距离大于4的区域称为稀疏区域,距离不大于4的区域称为密集区域。当距离小于或等于4时,满足提前终止以高概率提前结束复杂的搜索过程。搜索点太密集而不能分成8×8个子块。并且对于所有PU大小,仅当步长小于或等于4时才使用搜索窗口中的所有参考像素。
第一个搜索起点被分成四个8×8的子块:A、B、C、D,第二个搜索起点被分成四个8×8的子块:E、F、G、H。当读取参考像素时,不同子块中的重复像素被分配给相应的子块。

直观展示不同搜索点下的数据重复使用。

分析了不同尺寸CU在TZ搜索过程中,数据重复使用的占比情况。

论文想要解决的是从片外重复读取数据这部分消耗,但是片上重新组装的资源消耗是不变的,并没有节省下来。 16×16×8=2KB这个区域分配后就是4KB,大约就有一半是重复的。
参考像素的输入采用的是行输入,但每一次输入的是一行像素,而不是一个完整的8×8块。这些像素会被分配到多个8×8子块中,策略是输入一行,然后first-stage给每个8×8子块分类缓冲,等到一个完整的8×8子块拼接完成输入给下一个阶段进行比较处理。【这里的存储容量的计算感觉有问题,4KB、272bits、80KB的问题都没有说清楚。】核心目的是期望获得一个没有重复调用的8×8子块,然后根据8×8子块进行SAD计算等,那么这个地方根据CU尺寸的不同,扫描顺序就成了一个问题,IME的硬件架构设计也有点问题,上面的SAD Cal不应该只有8个8*8,这样的话并不支持128×128。而且从这个角度来看,需要缓存完整的一个参考像素来做计算,片上资源消耗问题也就出来了。【我现在算出来他的4KB是64×64×8,也就是说缓存一个64×64的参考】

2、稠密区域/稀疏区域
- 稠密区域策略:
- 按行读取和数据复用:参考像素按行读取,并分配到8×8的子块中,以提高数据复用率,减少从外部存储器读取数据的次数。
- 突发传输:由于像素在行中是连续的,使用突发传输来提高数据传输效率。
- 提前终止:在搜索过程中,如果SAD值小于等于阈值Tn,则提前终止搜索,减少计算复杂度。
- 8×8子块划分:稠密区域的搜索窗口被划分为8×8的子块,以便于数据复用和SAD计算。
- 稀疏区域策略:
- 按距离分段读取:参考像素按距离从小到大读取,以提高效率。
- 可变大小子块划分:根据PU的大小,将参考像素划分为四个可变大小的稀疏区域搜索窗口。
- 数据复用:稀疏区域的搜索窗口也被划分为8×8的子块,以便于数据复用和减少存储资源的消耗。
- 提前终止:在搜索过程中,如果SAD值小于等于阈值Tn,则提前终止搜索,减少计算复杂度。