本文是第一篇端到端使用神经网络来进行视频压缩的论文,
github地址:GitHub - GuoLusjtu/DVC: DVC: An End-to-end Deep Video Compression Framework, CVPR 2019 (Oral)
论文地址:https://arxiv.org/pdf/1812.00101.pdf
各个领域的第一篇,还是值得精读的~
本文最大的贡献有两点:
1,整个视频压缩框架都由神经网络完成,并能统一训练
2,损失函数考虑了率失真和压缩率,前者表示压缩恢复后视频的质量情况,后者表示压缩比
摘要
传统的视频压缩方法使用预测的编码结构,并对相应的运动信息和残差信息进行编码。本文,利用了传统视频压缩方案的经典架构和神经网络的非线性表示能力,提出了第一个端到端的视频压缩深度模型 并且同时对视频压缩的所有模块网络进行统一优化。特别的,使用光流估计网络得到运动信息并对当前帧进行重建,然后利用两个自编码器来压缩运动和残差信息。所有的模块使用一个损失函数联合训练,该损失函数同时考虑了压缩比和解码视频的质量,实验表明提出的方法超过了传统视频编码标准H.264 并且在ms-ssim损失函数上优化的模型可以和H.265相当。
1. 简介
如今,视频占据了互联网流量的80%,并且该比例还在逐步提升,因此,在有限的带宽负荷下 建立一个有效的视频压缩系统并且生成更高质量的视频帧尤为重要。此外,大多数视频相关的机器视觉任务比如视频目标检测和视频的目标追踪对压缩后的视频质量非常敏感,有效的视频压缩会对视觉任务更有益。此外,视频压缩技术对行为识别和模型压缩也有益处。
然而,在过去的几十年,视频压缩算法依赖于手动设计的模块,比如基于块的运动估计和离散余弦变换DCT,为了减少视频冗余,每个模块精心设计,整体的压缩系统不是端到端进行优化的,可以通过优化整个压缩系统来进一步提升压缩性能。
近年来,基于深度学习模型DNN的自编码器用于图像压缩领域,并且超过了传统编码性能比如JPEG,JPEG2000,BPG。一个可能的解释是基于DNN的图像压缩方法可以利用大尺度端到端的训练和高度非线性表示能力,这些都是传统方法不具备的。
不过,直接利用这些技术来进行视频压缩也是重要的。首先,生成和压缩视频压缩框架中的运动信息依然是一个开放的问题。视频压缩方法严重依赖于运动信息来减少视频序列的时间冗余,一个直观的解决方案是使用光流来表示运动信息,不过,当前的基于光流的方法目的是尽可能准确的生成光流场。但是,精确的光流对于特定视频任务不是最优的。此外,当和传统压缩系统的运动信息对比时光流数据量增长明显,并且直接应用现存的压缩方法来压缩光流值将明显增大运动信息存储的比特。第二,如何建立一个基于DNN的视频压缩系统来最小化残差和运动信息的率失真还不明朗,率失真优化(RDO)目的是当压缩的比特量给定时获取更高质量的重建帧,RDO对于视频压缩性能很重要。为了利用压缩系统端到端训练的能力,RDO的策略是优化整个系统。
本文中,提出了第一个端到端的深度视频压缩模型DVC联合训练运动估计、运动压缩和残差压缩。网络的优势可以总结如下:
- 视频压缩的所有组件,如运动估计、运动补偿、残差压缩、运动压缩、量化和比特率估计、均应用到了端到端的神经网络中;
- 视频压缩的关键是通过一个损失函数进行基于RDO的联合优化,目的是更高的压缩性能;
- 传统视频压缩方法中的组件都可以对应到DVC模型中,这项工作也给未来的研究者提供了思路,比如更好的光流估计模型和图像压缩模型可以很容易的嵌入到本框架中。
2. 相关工作
2.1. 图像压缩
近几十年提出了大量的图像压缩算法,这些方法强依赖人工设计,比如JPEG使用DCT将像素映射到另一个空间表征,并在熵编码之前进行系数量化。一个优势是这些模块是分开优化的 也许不会获得最优的压缩性能。
最近,基于DNN的图像压缩方法获取了越来越多的关注。文献[34][35][19]利用RNN建立了图像压缩框架,文献[11][12][33]利用CNN设计了自编码器网络用于图像压缩。为了优化神经网络,这些文献[34][35][19] 仅仅尝试最小化原始帧和重建帧之间的形变(均方误差), 但是它们并没有考虑压缩视频所占字节量,率失真优化技术在文献[11][12][33][21]中通过引入优化过程的字节数来用于更高的压缩效率。
2.2. 视频压缩
过去的几十年,有若干传统视频压缩算法提出,比如H.264和H.265,大多数算法遵循预编码结构。尽管提供了高效的压缩性能,他们依然需要人工设计并且无法端到端的联合优化。
视频领域,大量的DNN方法用来进行帧内预测和残差编码、模式决策、熵编码和后处理。这些方法可以用来提升传统视频压缩算法的性能,而不是建立一个端到端的压缩框架。文献[14]中,Chen提出基于块的视频压缩方法。此外,使用传统方法进行运动估计。Tsai 提出自编码器对H.264残差进行压缩,这项工作的运动估计、运动补偿和运动压缩并没有使用深度模型。
最新的相关工作是基于RNN的方法[40],其中视频压缩被看作为帧插值工作,不过,该方法中的运动信息也通过传统运动估计模块生成。换句话说,运动的估计和压缩并不是深度学习模型完成的。此外,文献[40]中的视频编码只是为了最小化原始帧和重建帧之间的形变误差,而没有考虑训练过程中的率失真。作为对比,在我们的网络中,训练完整的压缩系统同时考虑到了率失真。
2.3. 运动估计
运动估计是视频压缩系统的关键部分,传统视频编码使用基于块的运动估计算法[39],对硬件更友好。
在计算机视觉任务中,光流广泛应用来获取图像间的时序关系,最近,大量的光流估计方法[15]27[32][17][18]提出。这些方法激发我们加入光流估计。相比现存的视频压缩方法中基于块的运动估计方法,光流法可以提供像素级精确的运动信息,也可以使用端到端的方式优化。不过,通过使用传统视频压缩方法对运动信息进行光流编码需要更大的存储量。
3. 提出的方法
符号介绍
V = {,,...,,...} 指原始视频序列,
, , 分别指时刻t 的原始帧,预测帧,解码/重建帧,
是残差原始帧和预测帧之间的残差,
表示最终的解码残差,
为了去除视频帧间的时序冗余,使用基于光流估计的像素级的运动向量,
, 分别指时刻t 的原始运动向量或者光流值,解码/重建运动向量,
线性和非线性变换可以用来提升压缩效率,
因此,残差转换为, 运动信息转化为, 和 是相应的量化版本,
和 分别对应和的量化版本,
3.1 视频压缩简介
本节中,对视频压缩进行简单的介绍,更多的细节参考文献[39][31],视频压缩编码器基于当前帧生成比特流。解码器对接收的比特流重建视频帧,图2 中蓝色模块没有包含在解码侧
图2a是经典的视频压缩框架。输入帧拆分为一系列的块,比如正方形块,大小8*8,传统视频压缩算法的编码过程如下所示:
步骤1:运动估计。当前帧和上一时刻的重建帧进行运动估计,获得对应每一个块的运动向量,
步骤2:运动补偿。