关于帧内预测技术的一些梳理和思考

6 篇文章 0 订阅
2 篇文章 0 订阅

预测的本质

预测在中文的解释是:预先测定或推测,即为在所有已知条件下,推测未知的信息。在视频编码里的预测技术分为两种,如果预测过程信息源来自当前帧,则称之为帧内预测(intra prediction),如果预测信息源来自其他帧,则称之为帧间预测(inter prediction)。对编码器来讲,它们都有着一样的输入、输出和结果目标:

•输入:所有之前已重构完成的内容(范围加一定约束),以及当前被编码单元的实际内容。•输出:预测之后与实际内容的残差。•结果目标:使预测误差从rate distortion的角度尽可能小,以便在后续流程里使用尽可能少的比特进行表达,以达到压缩的效果。

说白了,就是用最小的表达代价猜当前这个预测单元是什么。以H.266/VVC编码器为例,帧内编码在整个编码算法的位置如下图红框所示。

图片

而对一个待编码单元当前块,周边A、B、C、D、E、F区域为预测点(已编码重构完成,VVC支持多行参考,之前的标准都是单行,会简单一些)。

而解码器则是利用这个表达,将图像重构的过程。

帧内预测问题的定义

理解了预测的目标,剩下的就是算法的问题了,不同的标准有不同的算法逻辑,归根到底都是猜方块儿,是个不存在标准答案的游戏。从H.261开始预测我个人认为一共可以分为三代技术。

H.264/AVC以前的时代

H.264/AVC以前的时代,基本上所有的标准算法都是基于频域的帧内预测,在空域上不做任何预测处理。帧内编码时,在DCT转换之前没有任何处理,直接进入频域转换,因为大部分内容能量集中在低频部分,因此只能DC分量进行差分预测,并将差分量写入码流,供解码器进行还原。这样的结构非常简单,以Luma元素为例,每个宏块可以切为4个8x8的DCT模块,则每转换完一个8x8就用前面转换的DC分量对该块进行差分,完成编码,过程非常简单。这类方法直到VC-1时还在用着。

说白了就是JPEG的编码方法。

H.264/AVC时代

从这个阶段开始,帧内预测开进入空域预测时代,这个阶段是质的提升,在方法论上有了明显的优化。每个待预测单元都使用它周边的信息对该块进行预测。因为编码顺序是光栅扫描的,因此每个编码块的顶部和左边的像素是已被重构的,所以预测过程就由这部分已知像素来完成。而预测的算法基本上就是对该块纹理可能性的猜测,最后判断哪种猜测的表达最优,写入码流供解码器用同样的预测方法进行复用。

图片

H.264/AVC以后的时代

之后的HEVC, VVC等标准对空域预测进行了大量的模式添加,原理当然可想而知,预测的纹理方向越多,从中取得一个非常优的预测模式的可能性越高。这样对于设计一个较优的编码器的要求自然提高,但是解码器的压力因为只需要处理一个模式的还原,因而提升则非常有限。这样问题就在于如何设计一个快速模式选择算法,因此可以看到大量针对编码器intra prediction mode decision的论文来研究这个话题。

下图为HEVC的预测模式:

图片

VVC时,可以看到预测的方向已经有90余种之多了,孔雀开屏也就最多这个效果,另外预测像素可以从周边四层里选择。看着这个复杂度,称得上是对摩尔定律的致敬了。

图片

具体预测的算法不赘述了,逻辑很简单,拿把尺按预测方向画条线,用预测点进行绘制就是预测过程了,可以参考标准、代码或是其他的文章。

未来帧内预测还会如何发展

向来我们的特点就是不负责任地进行大胆猜想,给出一些有的或没有可能性,供大家参考和讨论。所以继续这个特点,发起一些思考。

帧内预测这件事,本质上是一个有ground truth的最优化问题,其实在计算视觉中有大量与之相应的问题,比如image restoration, image inpainting,甚至superresolution,猜嘛,所有能猜的算法理论上都可以试试,所以我们列举一些可行的思路。

non-local vs. local

non-local帧内预测的核心假设是图像内部是有大量重复或关联元素的,比如重复的纹理、明暗变化的色块等。因此可以使用一些类帧间预测的方法,从当前帧的重构区域里可以找一块,直接预测当前块,这样对于很多编码块就会有超过local算法的机会。

事实上这个方向并不新,从2006年开始就一直有人在上面尝试,方法基本上可以分成两类:

一类是使用块匹配的算法,使用当前编码块在已重构区域进行匹配运算,将最优预测结果的偏移量作为写入码流。解码器取得这个向量后,找到对应的数据,完成预测,可以精确重构。

另一类是使用当前编码块的周边一圈像素,做为一个模板,在已重构区域进行匹配,这样可以匹配到一个全局最小误差的块,使用该块进行预测。这样只需要记一个模式,而不需要向第一类算法一样,写偏移量。

其实还可以有一些其他的思路可以挖掘,看大家打开脑洞有啥想法。

non-raster vs. raster

对于帧内预测是否使用光栅化的方法,内心一直是有执念的。考虑拼图的过程,你有所有的答案,但你只能使用拼好的部分来完成拼图,是不是也有点像帧内预测?

那拼图的话,也一定是从四个边开始,然后逐渐向中心拼过去。这跟帧间编码的基础想法也是一样的。但是如果像拼图一样,从各个方向出发,并逐渐向中心围拢,并找出围拢的最佳路径,势必对很多块的预测时,周边的像素比光栅化方法会多不少。那对预测者而言,周边的信息越多,则猜得越准,这个结论应该是可以有的(试想一下,如果一个块周边所有的块都已重构,那空域预测的准确度会有多高),因此有机会总体上优化出一大截。

但是这样编码器一定会复杂,复杂蛮多的。似乎我们在以另外一种方法向摩尔定律致敬。但相信总有一些聪明的头脑,会想到一些有趣的解法,从架构层面胜出现在的算法框架。

基于AI的预测方法

任何算法都值得用AI再做一次。如果你做一个记图片的机器,它会怎么做?

最近看到不少超分的效果,的确已经令人发指了。以一个精度非常低的或马赛克处理的图片,通过DL,可以还原出清晰度极高的图片。这是否已经让一些谍战电影的监控场景里表现的一些人脸清晰化的技术变为现实了呢?

如果我们把超分的算法用在帧内预测和编码,会怎么样呢?

我们给一个思想模型:如果我们使用一个四到五层小波,把图片的最低频信息抽出来,并使用传统方法进行编码存储;再使用超分算法把图像撑大到原大小,是否这个图片变成对原图的全局帧内预测,这样可以使用几种超分方法作为预测模式选优,直接生成全部残差,送给编码,大幅度提升编码效率。

图片

写在最后

Intra prediction基本上是进入这个行业后,第一块深入研究的方向了,也写过几篇优化的paper、专利(毕竟一上来,第一个环节就是它,想象的空间也蛮大的)。其实如果不太考虑商业化,只是做为一个研究课题,会是个极有意思的课题。

另外Intra frame编码就相当于图片编码,不仅对视频质量提升帮助很大,对图片压缩的帮助也是直接的,近些年观察行业的优化仍然没有离开老模式,期待有一天有一些新的考虑和验证结果出来,给予一些新的视角。本文我们提到的一些思路,也只是我对这个方向的一些个人思考,一些已经求证过,可以有相当幅度的编码质量提升,另外一些还是纯想法,没有经过验证。

世界留给梦想家,即使只是一个小的算法,也够玩一辈子。它没有标准答案呀,谁又能拒绝一个猜方块儿的游戏呢?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiheng_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值