当前位置: 代码迷 >> 综合 >> 论文笔记25 -- (视频压缩)OpenDVC: An Open Source Implementation of the DVC Video Compression Method
  详细解决方案

论文笔记25 -- (视频压缩)OpenDVC: An Open Source Implementation of the DVC Video Compression Method

热度:25   发布时间:2024-02-27 23:53:05.0

《OpenDVC: An Open Source Implementation of the DVC Video Compression Method》

论文:点这里
代码:点这里
知乎上有一篇介绍:点这里

Ren Yang, Luc Van Gool, Radu Timofte

DVC是首个端到端优化的深度学习视频压缩方法,在深度视频压缩领域常被视为基准算法。OpenDVC则是瑞士苏黎世联邦理工学院杨韧等人使用Tensorflow复现了DVC并开源了代码(不单是复现,还对DVC做了优化)。

DVC中仅有PSNR优化的模型,在OpenDVC开源代码中不仅复现了DVC的PSNR优化模型,还提供了MS-SSIM优化的DVC模型。

1. Introduction

在这篇技术报告中,作者介绍了深度视频压缩(DVC)[9]方法的开源Tensorflow[1]实现。DVC[9]是第一个端到端的优化学习视频压缩方法,与x265的低延迟P(LDP)very fast设置相比,具有更好的MS-SSIM性能,并且PSNR性能与x265(LDP very fast)相当。在撰写此报告时,已有几种视频压缩方法[5,6,8,15,16]优于DVC[9],但目前都还没有提供开源代码。作者希望OpenDVC代码能够为以后的开发提供一个有用的模型,并为以后对基于学习的视频压缩的研究提供便利。与原来只针对PSNR进行优化的DVC不同,本文不仅发布了以OpenDVC(PSNR)表示的PSNR优化的复现,而且还发布了MS-SSIM优化的模型OpenDVC(MS-SSIM)。OpenDVC(MS-SSIM)模型为MS-SSIM优化的方法提供了更具说服力的基线,这只能与过去的PSNR优化的DVC[9]进行比较。OpenDVC源代码和预训练的模型在https://github.com/RenYang-home/OpenDVC。

2. Implementation

在本节中,将描述OpenDVC的实现,该实现遵循图1所示的DVC[9]框架。DVC的高层架构是由手工制作的视频编码标准[13,12]驱动的,即采用运动补偿来减少时间冗余,并使用两个压缩网络分别压缩运动信息和残差信息。在下面的图1中,介绍了OpenDVC的每个模块的实现。
在这里插入图片描述
Motion estimation.
DVC利用金字塔网络[11]来估计当前帧和先前压缩帧之间的运动,如图1中的“Optical Flow Net”模块所示。金字塔结构的大接收野有利于DVC处理大的运动。在OpenDVC中,运动估计网络由Tensorflow在文件motion.py中基于金字塔网络[11]的PyTorch实现[10]。按照[11]中描述的设置使用5级金字塔网络。每级有5个kernal size为7×7的卷积层,滤波器数目分别为32,64,32,16和2。如图1所示,估计的运动vt\ v_t vt?是从金字塔网络输出的,在OpenDVC_test_video.py中表示为flow_tensor.

Motion compression.
作者按照[9]来使用[2]的自动编码器对估计的运动进行压缩。编码器部分由4个有x2下采样的卷积层组成,前三层使用GDN的激活函数[2]。在解码器部分,有4个有×2上采样的对应卷积层,并且前三层使用逆GDN[2]的激活函数。在运动压缩中,将解码器所有层(最后一层除外)的filter大小设置为3×3,filter数目设置为128,最后一层filter数目为2,以重建2通道运动向量。用于运动压缩的编码器和解码器实现为CNN_img.py中的MV_analysis和MV_synthesis函数。与采用超先验熵模型(hyperprior entropy model)[3]的DVC[9]不同,OpenDVC使用了分解式熵模型(factorized entropy model )[2]。因此,OpenDVC对输入分辨率的要求较低,即DVC要求输入的高度和宽度为32的倍数,而OpenDVC仅需要高度和宽度为16的倍数。更重要的是,替换hyperprior 模型为factorized模型不会导致性能明显下降(详见第4节)。

Motion compensation.
如DVC[9]中所述,首先通过压缩的运动信息flow_hat转换参考帧,然后运动补偿网络将参考帧Y0_com、转换的参考帧Y1_warp(In OpenDVC, we use the backward warping, which is implemented as tf.contrib.image.dense image warp in Tensorflow 1.12.)和压缩的运动信息flow_hat作为输入来生成运动补偿帧 Y1_MC。OpenDVC中的运动补偿网络按照附录(https://arxiv.org/abs/1812.00101.)[9]中所示的体系结构。详细的网络如图2所示,其中所有层的filter size均为3×3。除最后一层的filter数目为3之外,其余每层的filter数目均设置为64。↑\ \uparrow  2和↓\ \downarrow  2表示步长为2的上采样和下采样,?\ \bigoplus ?表示逐元素相加。
在这里插入图片描述
Residual compression.
在运动补偿之后,可以将残差作为补偿后的参考帧与当前原始帧之间的差来获得。在OpenDVC中,使用与运动压缩相同的方法压缩残差。唯一的区别是,在自动编码器中使用大小为5×5的filters进行残差压缩,而不是在运动压缩中使用的3×3。原因是残差比运动[9]包含更多的信息并且消耗更多的比特率,并且更大的filter size提高了自动编码器的表示能力。最后,将残差加到补偿后的参考帧上,得到重构后的压缩帧。

3. Training

在此技术报告中,使用与DVC[9]相同的符号,如图1所示。这些符号的定义及其在OpenDVC代码OpenDVC_test_video.py中的相应变量名称在表1中列出。
在这里插入图片描述
OpenDVC网络在Vimeo-90k[14]数据集上以渐进方式进行训练。首先,使用下面损失函数训练运动估计网络
LME=D(xt,W(x^t?1,vt)),(1)\ L_{ME}=D(x_t,W(\hat{x}_{t-1},v_t)), (1)  LME?=D(xt?,W(x^t?1?,vt?)),(1)
其中W\ W W是backward warping操作。在运动估计网络收敛之后,进一步将运动压缩网络加入训练,其损失包括被压缩运动warped的参考帧的失真和用于压缩m ^ t的比特率,即

损失包括由于压缩运动而warped的参考帧的失真以及用于压缩m^t\ \hat{m}_t m^t?的比特率,即
LM=λ?D(xt,W(x^t?1,v^t))+R(m^t),(2)\ L_{M}=λ\cdot D(x_t,W(\hat{x}_{t-1},\hat{v}_t))+R(\hat{m}_t), (2)  LM?=λ?D(xt?,W(x^t?1?,v^t?))+R(m^t?),(2)
其中λ来平衡速率和失真,R代表由熵模型估计的比特率[2]。 然后,运动补偿网络的训练通过下面损失
LMC=λ?D(xt,xˉt)+R(m^t),(3)\ L_{MC}=λ\cdot D(x_t,\bar{x}_t)+R(\hat{m}_t), (3)  LMC?=λ?D(xt?,xˉt?)+R(m^t?),(3)
LMC\ L_{MC} LMC?会合时,整个网络将以端到端的方式联合训练,而损失是
L=λ?D(xt,x^t)+R(m^t)+R(y^t),(4)\ L=λ\cdot D(x_t,\hat{x}_t)+R(\hat{m}_t)+R(\hat{y}_t), (4)  L=λ?D(xt?,x^t?)+R(m^t?)+R(y^?t?),(4)
对于所有损失函数(1),(2),(3)和(4),学习率最初设置为10?4\ 10^{?4} 10?4。当通过最后的损失(4)训练整个网络时,学习率在收敛后降低10倍,直到10?6\ 10^{?6} 10?6

在OpenDVC中,首先按照DVC[9]训练PSNR优化模型,其中失真D为均方误差(MSE),λ=256,512,1024和2048。然后,仅使用最终损失函数(4)(D=1-MS-SSIM)对MS-SSIM模型进行微调。分别从预先训练的λ=256,512,1024和2048的PSNR模型中微调了λ=8,16,32和64的MS-SSIM模型。注意,使用BPG[4]压缩OpenDVC中PSNR模型的I帧,并使用学习的图像压缩方法[7]压缩MS-SSIM模型的I帧。具体而言,将QP=37,32,27和22的BPG用于λ=256,512,1024和2048的PSNR模型。λ=8,16,32和64的MS-SSIM模型使用[7],质量等级分布为2,3,5和7。

4. Performance

与DVC论文中的结果相比,OpenDVC的率-失真性能如图3所示[9]。可以看出,OpenDVC (PSNR) 模型在 PSNR 和 MS-SSIM 性能上均与 DVC 基本相当,OpenDVC (MS-SSIM) 模型在 MS-SSIM 性能上明显优于原 DVC 方法。 注意,图3直接使用DVC的结果,[9]中报告了x265(very fast)和x264(very fast)。
在这里插入图片描述

5. Our latest works

作者的课题组专注于深度学习视频压缩方法的研究,在该领域也有一些最新的研究成果:

  • Hierarchical Learned Video Compression (HLVC) [2] 发表于 CVPR 2020, 论文链接:https://arxiv.org/abs/2003.01966, 项目主页:https://github.com/RenYang-home/HLVC
  • Recurrent Learned Video Compression (RLVC) [3], 论文链接:https://arxiv.org/abs/2006.13560,RLVC 方法的性能也于上面图3中展示。
  相关解决方案