VTM 快速CTC测试方案

以下内容总结自JVET-T2010、JVET-T0003、JVET-B0036

VTM作为VVC的参考软件,集成了许多编码工具。尽管这些编码工具大大提升了VTM的编码效率,然而编码时间却急速上升。在JVET-T0003中给出了VTM-10.0的性能,相对于HM16.20,AI配置下,码率节省26.85%,编码时间上升2630%;RA配置下,码率节省40.06%,编码时间增加859%。

我们在进行CTC测试时,尽管有足够多的计算资源(例如多核CPU),当我们采用最小的并行工作方式(每个序列、每个QP、每个配置编一次),每个job的编码时间是不一样的,整个测试时间是取决于编码时间最长的那个序列,这样我们需要花超过一周的时间来进行通测,所以一个快速的测试方案是必须的。

JVET-B0036分别为AI和RA配置提出了快速测试方案,并纳入VTM通用测试条件(JVET-2010)中。下面对JVET-B0036做简要的介绍。

1 Parallel encoding for RA configuration

通常,对测试序列的前 1 或 2 秒内的帧进行编码被认为是 RA 配置的快速模拟方法。但是编码结果可能与编码全长序列的结果有很大不同。一方面,不同帧数的预测结构可能不同,这对压缩性能有重要影响;另一方面,全长序列不同部分的运动特性可能会有很大差异。由于存在一些针对特定运动特性的帧间预测编码工具,因此最终的编码结果容易受到影响。通过考虑这些因素,RA配置的简化模拟方法不能改变预测结构,或减少帧数。

现有RA配置中的预测结构示例如图1所示,其中与每个帧相关联的数字代表编码顺序。为了启用随机访问,I 帧被定期插入。两个连续的 I 帧之间的预测结构是相同的。除了第一个 I 帧被编码为 IDR 帧外,所有 I 帧都被编码为非 IDR I 帧(“开放 GOP”)。对于非IDR I帧,虽然有一些编码顺序在其后面的前导图片,但这些前导图片将不会被后续图片引用。以图1中的第5~12帧为例,第6~8帧为第5帧的Leading picture,在解码过程中需要参考第5帧。但是第9~12帧在解码过程中不会参考第6~8帧。这意味着,如果我们根据帧内周期将整个序列划分为一些片段,如图 1 所示,则它们之间没有帧间预测依赖性。这样整个顺序编码过程就可以分为许多子过程,可以并行执行,充分利用计算资源。

考虑到上述分析,在本方案中,根据intra period,将整个顺序编码过程分为几个随机访问段(RAS),每个RAS以一个RAP帧开始和结束(最后一个段除外,可能是以B帧结束,因为帧数可能小于一个intra周期)。这里注意RAP帧必须是Intra帧。以序列Nebuta为例,RA配置的intra period为64,则poc为0~64的帧为第一RAS,64~128的帧为第二RAS,以此类推。由于两个连续的 RAS 之间没有帧间预测相关性,这样,这些 RAS 可以并行编码。

在所有RAS的编码过程完成后,利用每个RAS的编码日志文件(属于同一个整个序列编码过程)提取整个序列编码过程的编码结果。这里请注意,有些帧将被编码两次(作为 RAS 的结束,也是后续 RAS 的开始,如 Nebuta 的第 64 帧)。但它们只会被带入提取过程一次。由于每个 RAS 的第一个 I 帧中都会存在 VPS、SPS 和 PPS 编码位,为了避免重复统计,除了第一个 RAS 之外,只有作为每个 RAS 结尾的那些 I 帧才会被纳入提取过程,因为开始和结束都将被考虑在内。最后,可以通过提出的并行模拟方法获得原始RD数据。

如果两个连续的RAS的编码过程是完全独立的,那么并行RAS编码得到的RD数据应该等于整个顺序编码过程(原始)的RD数据。但实际上,在当前的编码参考软件中,有一些工具带来了依赖性。第一个是“CABAC_INIT_PRESENT_FLAG”,它指定“cabac_init_flag”是否出现在slice header中,“cabac_init_flag”表示当前slice的上下文初始化表项,在现在的编码软件中,前一个slice的slice类型会影响当前slice的表项选择。第二个是“VCEG_AZ07_INIT_PREVFRAME”,它是“VCEG_AZ07_ECABAC”的子宏[4]。如果“VCEG_AZ07_INIT_PREVFRAME”打开,则“可以通过从先前编码的图片复制状态来初始化slice间上下文模型的初始概率状态”。第三个是“COM16_C806_ALF_TEMPPRED_NUM”,它是ALF_HM3_REFACTOR的一个子宏,这个宏表示候选ALF参数集的长度,如果这个宏大于0,可以从参数集中选择当前切片的ALF参数,导出来自先前编码的切片。这3个因素带来的不等是因为RAS的起始I帧后面的slice(例如图1中的frame9或frame17)的前一个slice类型已经改变,在原始方法中,前一个slice类型是inter,但是提出的方法是 Intra。此外,通过我们的测试,如果“SAO”的长度太短,则会将比特率不匹配(仅比特率)带入最后一个 RAS 的第二帧。那是因为“slice级 SAO 开/关决定是由hierarchy level>0层的前一帧决定的。对于具有hierarchy level = N 的当前帧,前一帧被定义为解码顺序中具有hierarchy level = (N-1) 的最后一帧。”。因此,如果最后一个 RAS 很短,则hierarchy level不连续,例如只有 0、2、3。因此,最后一个RAS中hierarchy level = 2的帧的SAO开/关决定将由前一个RAS中hierarchy level = 1的帧决定。

即使存在这些因素,来自 RAS 并行的最终 RD 数据仍然非常接近来自原始整个顺序编码过程的 RD 数据。JEM1.0 与 HM16.6 在不同仿真方法下的性能在表 1~表 3 中给出。由于我们的集群无法提供关于编码时间和解码时间的公平比较,所以下面的“EncT”和“DecT”是不准确的,下同。

从表1~表3可以看出,原始方法的总体结果为-20.01%,而提出方法的结果为-20.00%,而前2个intra period内的结果为-19.37%。因此所提方法的编码结果与原始结果非常接近。

由于序列是按照intra period划分的,近似等于帧率,所以新的RA配置仿真时间仅为原来的1/T(T为序列持续时间,单位为秒)

2 AI simulation using snapshot of full-length sequence

与RA配置不同,AI配置的编码结果不会受预测结构或运动特性的影响,而是受镜头场景的影响。一般来说,对于现有的测试序列,拍摄场景相对稳定。即使在一些测试序列中有一些场景变化,它也很慢。所以,如果将整个场景变化缓慢的测试序列切割成一些均匀的小部分,对于每个部分,仍然可以认为是一个场景稳定的小序列。对于稳定的部分,任何帧的编码结果都可以很好地代表其他帧,因此不需要对所有帧进行编码。

在这个提议中,对于每个序列,选择每个intra period的第一帧(在 RA 配置中)以形成一个新的小得多的序列,如图 3 所示。对选择方法的更直接的解释是为每个序列选择 RA 配置中的 RAP 图片。以序列Nebuta为例,RA配置中其帧内周期为64,poc等于0、64、128、192、256的帧,总共只有5帧,将被选出形成一个新的序列进行AI模拟, 比较原始完整序列的 300 帧。

即使每个序列的帧数显着减少,全长序列的编码性能仍然可以得到很好的体现。为了证实这一点,下面给出了 JEM1.0 与 HM16.6 的 3 种不同测试方法的性能。

从表4~表6,对比前1秒的编码结果(Y:-13.80%),snapshot的编码结果(Y:-13.91%)似乎更接近全长序列(Y:-13.99%), 特别是对于ClassF。

对于每个序列,由于新的较小序列仅由每个帧内周期的第一帧组成,因此新的AI配置模拟时间仅为原始配置的1/IP(IP是RA配置的帧内周期)。

在VTM中的AI配置可以通过设置TemporalSubsampleRatio来直接实现这个方案。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注