视频编码器的智能化 视频编码器软件( 二 )


这个模型最大的问题是很容易会欠拟合,因为它的参数很多,输出和输入之间可能会没办法训练出很好的模型 。基于这个,有人提出在encoder之后可以做一步量化,在decoder之后做一步反量化 。此时我们看到如图公式是一个典型的RDO公式,D是输入和输出的差值,λ是拉格朗日常数,R是根据不同量化取得的值,这个公式的意义就是在量化一定的情况下保证差值最小 。


视频编码器的智能化 视频编码器软件

文章插图


Variational Auto-Encoder(VAE)是一种变形的AutoEncoder,刚刚讲到AutoEncoder是使用卷积来做,做完以后会得到一个高维的矩阵,保存了它所有的特征 。而VAE的做法则是在每个样本输入后,会得到一个均值和方差,它认为每个样本其实是正态分布的,有了均值和方差就能画出一个正态分布的函数 。那么在这个正态分布的函数里就可以采样它的变量,相当于每个
会对应出一个
,在解码器生成的时候再把
还原成一个真实的样本 。
1.3光流估计

视频编码器的智能化 视频编码器软件

文章插图


前面提到的是AutoEncoder,还有一个最近比较热门的就是光流估计 。
光流估计之前很多都是用OpenCV的方法来做,比较稀疏的光流可以用传统的图像算法来做光流估计,与传统的编解码算法有点像,编解码算法我们也会做运动补偿和运动估计,但编解码是基于宏块或者根据CU来做运动估计的 。光流估计是会对每一个像素点都会预测它的光流,因为是用一整个卷积来计算整个的光流,它认为每一个像素点都能计算出它的光流 。之前比较有名的光流估计的模型是FlowNet2,大家有兴趣的可以了解一下 。光流估计中有一个比较大的问题是如何产生有光流真值的训练图片,也就是在训练的时候如何确定训练出来的图片的光流值是对的,所以很多人会用显卡生成一些假的图像来做训练 。
1.4感知编码

视频编码器的智能化 视频编码器软件

文章插图


如图是感知编码一个比较典型的应用,在视频会议开始时只要传送每一位与会者的面部照片,后续只要告诉解码器某一与会者的头是向左转或向右转,解码端基于对抗网络就可以生成这名与会者所对应动作的视频 。在传输时只需要将关键帧用传统编码器进行编码,在解码端使用对抗网络生成图片,并用关键帧来做训练,实际输出效果与H.264相比可以降低非常多的码率 。
1.5语义编码

视频编码器的智能化 视频编码器软件

文章插图


目前存在的编码,无论是视频或是图片,它其实不仅仅是给人眼看的,有很多是直接用来输出给AI的 。我们在传输传统图片信息之外,还需要传输一些高维的特征值 。举个例子,这里有一辆车和一只狗,在编码完成之后,在decoder时不仅仅可以decoder出画面,同时也可以decoder出之前物体识别的信息结果,即图片中有一辆车和一只狗 。
未来视频质量评价的标准可能不仅仅是PSNR、SSIM,图像也会加入语义损失的判断,即图像或视频经过压缩之后是否会产生语义的损失 。
1.6传统编码工具的优化

视频编码器的智能化 视频编码器软件

文章插图


接下来介绍基于传统编码工具的优化 。如上图所示,传统编码算法无论是264还是265,一个Image输入进来,首先需要进行帧间或帧内的预测,然后要做Mode Decision确定到底选哪一种方式,然后做量化、做Transform,最后还做环内的滤波,做Entropy去编出bitrate 。


视频编码器的智能化 视频编码器软件

文章插图


在每一个编码工具的模块上面其实都会有一些AI的方法来进行优化 。如帧内预测时,有人提出用CNN优化预测模式 。标准规定的预测范围其实很小,使用CNN可以扩大预测范围;帧间预测时,双向参考块我们现在一般的做法都是采用线性的组合,乘上一个固定的比例算出当前预测块的值 。那是不是除了线性组合,我们还可以用CNN来做一些非线性的组合 。另外,插值的时候,不是简单的做一些半像素的插值,是不是可以利用CNN进行半像素插值;另外还有一个比较有意思的方向就是跨通道的预测,就是说一个YUV的视频,可能只知道Y值,怎么才能推断出它的U值和V值?在这点上,AV1有一个标准是Cfl,HEVC有一个CCP的扩展标准,来做跨通道预测 。既然是做预测,那么大家可能也会想到用CNN来做一些非线性、跨通道的预测 。