用 AI 搞视频编解码器,现在路子有点“野”。
插帧、过拟合、语义感知、GAN…… 你想过这些“脑洞”或 AI 算法,也能被用到编解码器上面吗?
例如,原本的算法每帧压缩到 16.4KB 后,树林开始变得无比模糊:
但在用上 GAN 后,不仅画面更清晰,每帧图像还更小了,只需要 14.5KB 就能搞定!
又例如,用插帧的思路结合神经编解码器,能让最新压缩算法效果更好……
这一系列算法的思路,背后究竟是什么原理,用 AI 搞编解码器,潜力究竟有多大?
我们采访了高通工程技术副总裁、高通 AI 研究方向负责人侯纪磊博士,了解了高通一些 AI 编解码器中的算法细节和原理。
编解码器标准逐渐“内卷”
当然,在了解 AI 算法的原理之前,需要先了解视频到底是怎么压缩的。
如果不压缩,1 秒 30 帧、8bit 单通道色深的 480p 视频,每秒就要传输 80+Mbps 数据,想在网上实时看高清视频的话,几乎是不可能的事情。
目前,主要有色度子采样、帧内预测(空间冗余)和帧间预测(时间冗余)几个维度的压缩方法。
色度子采样,主要是基于我们眼睛对亮度比对颜色更敏感的原理,压缩图像的色彩数据,但视觉上仍然能保持与原图接近的效果。
帧内预测,利用同一帧中的大片相同色块(下图地板等),预测图像内相邻像素的值,得出的结果比原始数据更容易压缩。
帧间预测,用来消除相邻帧之间大量重复数据(下图的背景)的方法。利用一种名叫运动补偿的方法,用运动向量(motion vector)和预测值计算两帧之间像素差:
这些视频压缩的方法,具体到视频编解码器上,又有不少压缩工作可以进行,包括分区、量化、熵编码等。
然而,据侯纪磊博士介绍,从 H.265 到 H.266,压缩性能虽然提升了 30% 左右,但这是伴随着编码复杂度提高 30 倍、解码复杂度提高 2 倍达成的。
这意味着编解码器标准逐渐进入了一个“内卷”的状态,提升的压缩效果,本质上是用编解码器复杂度来交换的,并不算真正完成了创新。
因此,高通从已有压缩方法本身的原理、以及编解码器的构造入手,搞出了几种有意思的 AI 视频编解码方法。
3 个方向提升压缩性能
具体来说,目前的 AI 研究包括帧间预测方法、降低解码复杂度和提高压缩质量三个方向。
“预判了 B 帧的预判”
从帧间预测来看,高通针对 B 帧编解码提出了一种新思路,论文已经登上 ICCV 2021。
I 帧:帧内编码帧(intra picture)、P 帧:前向预测编码帧(predictive-frame)、B 帧:双向预测内插编码帧(bi-directional interpolated prediction frame)
目前的编解码大多集中在 I 帧(帧内预测)和 P 帧上,而 B 帧则是同时利用 I 帧和 P 帧的双向运动补偿来提升压缩的性能,在 H.265 中正式支持(H.264 没有)。
虽然用上 B 帧后,视频压缩性能更好,但还是有两个问题:
一个是视频需要提前加载(必须提前编码后面的 P 帧,才能得到 B 帧);另一个是仍然会存在冗余,如果 I 帧和 P 帧高度相关,那么再用双向运动补偿就显得很浪费。
打个比方,如果从 I 帧→B 帧→P 帧,视频中只有一个球直线运动了一段距离,那么再用双向运动补偿的话,就会很浪费:
这种情况下,用插帧似乎更好,直接通过时间戳就能预测出物体运动的状态,编码计算量也更低。
但这又会出现新的问题:如果 I 帧和 P 帧之间有个非常大的突变,例如球突然在 B 帧弹起来了,这时候用插帧的效果就很差了(相当于直接忽略了 B 帧的弹跳)。
因此,高通选择将两者结合起来,将基于神经网络的 P 帧压缩和插帧补偿结合起来,利用 AI 预测插帧后需要进行的运动补偿:
别说,效果还确实不错,比谷歌之前在 CVPR 2020 上保持的 SOTA 纪录更好,也要好于当前基于 H.265 标准实现开源编解码器的压缩性能。
除此之外,高通也尝试了一些其他的 AI 算法。
用“过拟合”降低解码复杂度
针对编解码器标准内卷的情况,高通也想到了用 AI 做自适应算法,来像“过拟合”一样根据视频比特流更新一个模型的权重增量,已经有相关论文登上 ICLR 2021。
这种方法意味着针对单个模型进行“过拟合”,对比特流中的权重增量进行编码,再与原来的比特流进行一个比较。如果效果更好的话,就采用这种传输方式。
事实证明,在不降低压缩性能的情况下,这种方法能将解码复杂度降低 72%,同时仍然保持之前 B 帧模型达到的 SOTA 结果。
当然,除了视频压缩性能以外,单帧图像被压缩的质量也需要考虑,毕竟视觉效果也是视频压缩追求的标准之一。
用语义感知和 GAN 提高压缩质量
用语义感知和 GAN 的思路就比较简单了。
语义感知就是让 AI 基于人的视觉来考虑,选出你在看视频时最关注的地方,并着重那部分的比特分配情况。
例如你在看网球比赛时,往往并不会关注比赛旁边的观众长什么样、风景如何,而是更关注球员本身的动作、击球方法等。
那么,就训练 AI,将更多的比特放到目标人物身上就行,像这样:
从结构上来讲也比较简单,也就是我们常见的语义分割 Mask(掩膜):
这种方法能很好地将受关注的局部区域帧质量提升,让我们有更好的观看效果,而不是在视频被压缩时,看到的整幅图像都是“打上马赛克”的样子。
据高通表示,这种语义感知的图像压缩,目前已经在扩展到视频压缩上了,同样是关注局部的方法,效果也非常不错。
而基于 GAN 的方法,则更加致力于用更少的比特数生成视觉效果同样好的图像质量:
据高通表示,数据集来自 CVPR 中一个针对图像压缩的 Workshop CLIC,提供了大约 1600 张的高清图片,利用自研的模型,能在上面训练出很好的效果:
也就是开头的图片效果,即使在大小被压缩后,基于 GAN 的图像还是能取得更好的视觉质量:
期待这些技术能马上应用到手机等设备上,让我们看视频的时候真正变得不卡。