VCIP2020:SCC编码工具的优化实现
Posted Dillon2015
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VCIP2020:SCC编码工具的优化实现相关的知识,希望对你有一定的参考价值。
本文来自VCIP2020文章《An Optimized Video Encoder Implementation with Screen Content Coding Tools》
SCC针对电脑生成内容提出了很多高效的工具,例如IBC、PLT等,但是这些工具在提高SCC场景编码效率的同时也极大增加了复杂度。本文提出了针对SCC工具的一些优化方法。
SCC编码工具介绍
Intra block copy (IBC)和palette mode (PLT)是SCC中增加的两个编码工具。在SCM中当开启IBC和PLT时编码时间几乎加倍。
IBC搜索
IBC需要在当前帧已编码部分为当前块搜索最优匹配块,并用BV(block vector)指向该块。包括局部搜索和针对特定尺寸(8x8和16x16)块的全局搜索。
局部搜索的搜索范围包括当前CTU的重建部分和左边一个CTU。对于每个候选BV都要计算RD cost,其中失真用亮度分量的SAD度量,码率要考虑编码BV的比特数。对于RD cost最小的4个候选BV再次计算RD cost,如下式(1)所示这次计算时失真还要包括色度分量的SAD,最终RD cost最小的候选项作为最佳BV。
全局搜索使用基于hash的搜索方法在整个帧已编码部分上进行搜索。对于8x8 PU,可以在当前图像中满足限制的区域里使用基于哈希的搜索方法寻找最优BV并按公式(2)计算一个16比特的hash值H。hash table内的每个节点表示一个BV候选项在当前图像中的位置。使用链表存储hash table中H值相同的块,每个节点的H值相同且新加入的值放在hash table的开头。hash值计算方法如式(2),
其中MSB(x,n)表示x的最高n个有效位,Grad表示8x8块的平均梯度(包括水平和垂直方向),DCi(i=0,1,2,3)表示8x8块的第i个4x4子块的均值。
在8x8块的基于hash的搜索中,编码器在链表中找到和当前块H值相同的节点,并和这个节点上的每个块计算RD cost,并对RD cost最小的4个块按(1)再次计算RD cost,将RD cost最小的BV作为最佳BV。
对于16x16 PU,只进行一维搜索,即BV中有一个分量为0,例如水平搜索或垂直搜索。
PLT模式
palette模式编码包括两部分:调色板中条目的编码和当前块像素在调色板中索引的编码。
调色板的生成分为两步,首先,使用k-means算法找出当前块的颜色簇。遍历每个像素和当前已存在的颜色簇计算距离,如果距离都大于某个阈值则该像素单独成为一个簇,否则合并入距离最小的簇。第二,得到的簇将作为调色板的条目。调色板的条目也使用预测编码,将前一个使用PLT模式块的调色板作为参考。
SCC编码优化
IBC相关的加速
-
更高效的hash table构建
在SCC中经常会出现纹理简单的平坦块,如果hash table中存在大量这样的块会导致效率降低,而且现有的帧内/帧间预测技术能很高效的编码这些块,所以IBC模式应该跳过这些块。
仅对纹理丰富的块进行hash搜索,(2)中H值的计算方法改为,前3个4x4子块的DC值(9bits)加上梯度信息(7bits)。梯度信息是将8x8块的平均梯度右移8位取低7位。当梯度信息为0时则跳过IBC计算。
-
快速hash table查找
由hash table生成过程可知最新加入的块都是放在hash table中有相同H值的链表的开头,所以CTU右下角的块通常都在链表开头。对于CTU中大部分8x8块最开始搜索的hash table中的块可能还没有编码,所以是无效的。如Fig.1所示,CTU中有10个块和当前块的H值相同,但仅链表中最后2个块是有效的。
可以构建一个look-up table来存储每个8x8块在hash table链表中对应地址。对于每个8x8块可以很轻松的在链表中找到它的位置,并且在计算时跳过链表中它前面的块。例如Fig.1链表中有10个节点,可以直接跳过前6个节点只计算当前块后面的3个节点。
-
IBC搜索区域扩展
在IBC模式中即使不使用WPP,当前图像右上角区域也不用于参考。如Fig.2所示。
将可用参考区域扩展到右上角CTU可以提高编码效率。
PLT相关加速
-
调色板生成优化
在构建调色板时,每个通道的像素值都要频繁进行比较操作,为了减少此类操作可以将YUV格式的像素值安装公式(3)封装,
对于颜色复杂的块PLT模式效率很低,因此当块的颜色簇数量超过某个阈值时提前终止PLT模式。进一步,可以对当前块进行降采样然后计算调色板。
-
利用先前的编码信息跳过PLT模式
在模式决策时首先计算帧内/帧间模式,然后才计算PLT模式。前面帧内/帧间模式的编码信息可以帮助PLT编码模式决策。
如果帧内/帧间模式编码效果好说明cost小且非零变换系数占比低。如果两个条件满足任意一条则跳过PLT模式。两个条件的阈值根据公式(4)(5)计算,
进一步,观察发现当前块的模式决策结果和其子块模式决策结果有很强相关性。当其任意一个子块最优模式不是PLT时,当前块最优模式是PLT的概率很低。使用当前块的模式决策可以在其子块之后进行,当任一个子块不是PLT模式时则当前块直接跳过PLT模式。
其他加速方法
-
快速帧内模式决策
hash table中的信息可以用于加速编码器其他模式的决策过程。对于8x8帧内编码块,需要决定是按8x8PU还是4个4x4PU进行预测,利用hash table中的信息如果当前8x8块是“平坦块”则不划分为4个子块(跳过4个4x4PU的预测)。“平坦”是用8x8块的平均梯度度量,其值在计算hash值时已经得到。
-
简化环路滤波
在SCC场景中通常是静态和动态场景交替,对静态场景使用环路滤波效率非常低。所以对于帧间预测帧,每隔一帧禁用SAO。
实验结果
实验序列如表1,包含7条YUV444序列。
感兴趣的请关注微信公众号Video Coding
以上是关于VCIP2020:SCC编码工具的优化实现的主要内容,如果未能解决你的问题,请参考以下文章
VCIP2020:相同主观质量下基于学习的UGC短视频低码率编码
Codecs系列HEVC-SCC:HM+SCM中IBC编码流程和实现分析