端到端视频编码:DVC

article/2025/10/15 17:47:56

本文来自CVPR 2019论文《DVC: An End-to-end Deep Video Compression Framework》

官方开源代码地址:https://github.com/GuoLusjtu/DVC

DVC是一个端到端的视频编码模型,之前也有过一些基于DNN的视频编码方法,但是通常是使用DNN模型替换视频编码的某个模块,整体的训练流程不是端到端的。

DVC将传统的基于块的编码框架的所有模块都使用神经网络替换,图1(a)是传统的视频编码框架,图1(b)是DVC框架。

图1

符号定义

  \begin{equation*} \nu =\{x_{1} ,x_{2} ,...x_{t} ,...\} \end{equation*} 表示视频序列, \begin{equation*} x_{t} \end{equation*} 是第t帧,\begin{equation*} \overline{x_{t}} \end{equation*}  是对应的预测帧,\begin{equation*} \widehat{x_{t}} \end{equation*}  是重建/解码帧。 \begin{equation*} r_{t} =x_{t} -\overline{x_{t}} \end{equation*} 表示残差,\begin{equation*} \widehat{r_{t}} \end{equation*}  是残差的重建/解码值。 \begin{equation*} v_{t} \end{equation*} 是运动向量, \begin{equation*} \widehat{v_{t}} \end{equation*} 是对应的重建值。由于编码过程中还会进行变换量化,\begin{equation*} r_{t} \end{equation*}  变换的结果为 \begin{equation*} y_{t} \end{equation*} , \begin{equation*} v_{t} \end{equation*} 变换结果是\begin{equation*} m_{t} \end{equation*}  。

DVC架构

运动估计和压缩

使用CNN进行光流估计,得到的结果作为运动信息\begin{equation*} v_{t} \end{equation*}  。其中运动信息还会经过MV编解码网络进行压缩。如图1(b)中Optical Flow Net、MV Encoder Net、MV Decoder Net。

运动补偿

运动补偿网络motion compensation network主要根据前面获得的光流计算预测帧  \begin{equation*} \overline{x_{t}} \end{equation*}

变换、量化和反变换

和传统的DCT、DST变换不同,这里使用残差编解码网络进行非线性变换。残差  \begin{equation*} r_{t} \end{equation*}非线性变换的为  \begin{equation*} y_{t} \end{equation*}, \begin{equation*} y_{t} \end{equation*} 量化为 \begin{equation*} \widehat{y_{t}} \end{equation*} 。\begin{equation*} \widehat{y_{t}} \end{equation*}  通过残差解码网络可以得到重建的残差值  \begin{equation*} \widehat{r_{t}} \end{equation*}

熵编码

量化的运动信息  \begin{equation*} \widehat{m_{t}} \end{equation*} 和残差\begin{equation*} \widehat{y_{t}} \end{equation*}  要编码为比特流,为了估计比特数,使用Bit rate estimation net获取  \begin{equation*} \widehat{m_{t}} \end{equation*} 和 \begin{equation*} \widehat{y_{t}} \end{equation*} 的分布。 

帧重建

帧重建过程和传统编码框架一样。

MV编解码网络

图2 MV编解码网络

图2是MV的编解码网络,Conv(3,128,2)表示卷积操作,卷积核为3x3,输出128通道,步长2。GDN/IGDN是非线性变换函数。

如果输入光流  \begin{equation*} v_{t} \end{equation*}的尺寸是MxNx2,MV编码网络的输出 \begin{equation*} m_{t} \end{equation*} 的尺寸则为M/16 x N/16 x 128, \begin{equation*} m_{t} \end{equation*} 量化为 \begin{equation*} \widehat{m_{t}} \end{equation*} 。MV解码网络将 \begin{equation*} \widehat{m_{t}} \end{equation*} 解码为\begin{equation*} \widehat{v_{t}} \end{equation*}  。此外, \begin{equation*} \widehat{m_{t}} \end{equation*} 还要用于熵编码过程。

运动补偿网络

给定前一帧的重建帧 \begin{equation*} \widehat{x_{t-1}} \end{equation*} 和\begin{equation*} \widehat{v_{t}} \end{equation*}  ,运动补偿网络可以生成当前帧的重建帧\begin{equation*} \widehat{x_{t}} \end{equation*}  ,如图3。

图3 运动补偿网络

这里的运动补偿是像素级的,所以可以提供更精准的时域信息,避免了传统的基于块的运动补偿的块效应等,所以不需要环路滤波。网络详细情况请参考论文。

残差编解码网络

残差信息通过图1中的残差编解码网络进行编码,这个网络是高度非线性的,和传统的DCT等相比可以更充分的挖掘非线性变换的能力。

训练策略

损失函数

 \begin{equation*} \lambda D+R=\lambda d\left( x_{t} ,\widehat{x_{t}}\right) +\left( H\left(\widehat{m_{t}}\right) +H\left(\widehat{y_{t}}\right)\right) \ \ ( 1) \end{equation*}

训练的目标是减小失真的同时降低码率。其他d(.)计算失真的函数,用MSE计算失真,H(.)表示估计码率。如图1所示,重建帧、原始帧和估计的码率都会输入损失函数。

量化

残差和运动向量都需要量化后才能进行熵编码,但是量化本身是不可微的,所以论文在训练阶段通过加一个均匀噪声来代替量化。

  \begin{equation*} \widehat{y_{t}} =y_{t} +\alpha \ \ ( 2) \end{equation*}

其中alpha是均匀噪声。

在推理阶段直接使用取整操作,

  \begin{equation*} \widehat{y_{t}} =round( y_{t}) \ \ ( 3) \end{equation*}

码率估计

为了平衡码率和失真,需要在编码过程中估计残差和运动向量的码率,估计码率需要求得数据的熵,即要获取数据的分布,论文通过一个CNN实现。

缓存历史帧

由于在运动估计和运动补偿中需要用到参考帧,参考帧是网络输出的前一帧的重建帧,即第t帧需要第t-1帧的重建帧,第t-1帧需要第t-2帧的重建帧,以此类推需要在GPU中保存所有帧,当t非常大时这是不可能的。论文提出在线更新策略,每个迭代更新一帧。

实验设置

数据集

论文使用Vimeo-90K数据集进行训练,它包含89800个视频序列。使用UVG数据集和HEVC标准序列进行验证。

评价指标

使用PSNR和MS-SSIM评价失真,使用bpp衡量码率。

实现细节

使用4个lambda(256、512、1024、2048)分别训练了4个模型,每个模型使用Adam优化器训练,初始学习率设为0.0001,beta1设为0.9,β2设为0.999。当loss稳定后学习率除以10,mini-batch设为4。训练图像分辨率是256x256。使用tensorflow框架训练,在两张Titan X GPU上耗时7天完成训练。

实验结果

图4 部分实验结果

图4是部分实验结果,可以看见在大部分数据集上论文方法比H264在PSNR和MS-SSIM上都更优。和H265相比,中MS-SSIM指标上性能相近。论文使用MSE计算失真,如果MS-SSIM则质量会进一步提高。

总结

论文使用DNN模型将传统视频编码框架的每个部分都进行了替换实现了端到端的编码,从而可以整体进行训练。关于各个模型的具体信息可以参考论文和开源实现https://github.com/GuoLusjtu/DVC

感兴趣的请关注微信公众号Video Coding

 


http://chatgpt.dhexx.cn/article/MFdfTY7O.shtml

相关文章

主流视频编码压缩技术基本概念(二) 算法分析

主流视频编码压缩技术基本概念(二) 算法分析 一、MPEG-1技术介绍1、 MPEG-1的层次及语法结构①、运动补偿序列(Sequence)②、图片组(GOP)③、 图片(Picture)④、 图片切片(Slice)⑤、…

视频编码解码基本知识

最近在做摄像头视频的数据处理,得到了网络相机的.h264格式的数据,需要做解码处理,由于对视频的编码解码原理不太了解,因此查找资料总结一下 为什么要进行视频编码? 视频编码又称为视频压缩,伴随着用户对高…

FFMpeg 实现视频编码、解码

FFMpeg 作为音视频领域的开源工具,它几乎可以实现所有针对音视频的处理,本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例:编码、解码、封装、解封装、转码、缩放以及添加水印。 接下来会由发现问题->分析问题->解决问题->实现方案,循序渐进的完成。…

感知视频编码

感知视频编码就是在视频编码的过程中,将HVS应用进去,挖掘主观视频感知冗余,进一步提高视频编码压缩效率。 1.Computational visual perception:三种视觉感知计算模型 (1)视觉敏感模型 (2)视觉注…

Android视频编码的坑

视频开发是一个核心方向,那Camera开发一直是Android的一个核心,笔者做过Camera HAL,也做过Camera App, 同时也开发过Camera 滤镜,这个过程中也遇到和解决过很多棘手的问题,也一直想总结一篇,看到这篇后感觉…

视频编码未来简史

首先我们回顾一下视频编码的历史,视频编码起源于广播电视,在很长一段时间里视频编解码的变革主要推动力是来自于广播电视。当然,今天我们看互联网的视频编码是速度越来越快,昨天在ICET2017年世界大会上,ICET的主席还说…

PCS2021:针对游戏内容的视频编码工具分析和数据集

本文来自PCS2021论文《Video Coding Tool Analysis and Dataset for Gaming Content》 随着近几年游戏市场的逐渐壮大,新的游戏形态(AR、VR、云游戏等)逐渐发展。和传统的摄像机内容和屏幕内容相比,游戏内容有着不同的特点导致对于…

视频编码综述

你用手机、电脑看电影追剧时,是看的高清还是标清?我想只要网速够得上应该没有人愿意再看标清了吧!毕竟高清视频的高分辨率和清晰画质总是能让人有更好的观影体验。 伴随着用户对高清视频的需求量的增加,视频多媒体的视频数据量也在…

混合视频编码方法

参考文献: IP网络视频传输:技术、标准和应用 朱秀昌,唐贵进。--北京:人民邮电出版社,2017.9 预测编码和变换编码是混合编码的基础,当然除此之外还有运动估计、运动补偿、量化、熵编码、去方块滤波等。下面…

【视频编解码-02】视频编码的目的、条件和目标

视频编码,是视频处理中的一个核心技术。 现代我们所看到的所有视频,包括电视、互联网、手机等等,几乎所有的视频都会被编码、解码。 整个视频技术的基本流程是:视频数据的采集、视频数据的编码、视频数据的传输、视频数据的解码、…

【视频】视频文件格式和视频编码

我们经常在电脑、电视、手机或者其他终端产品看视频,我们对视频有个大概了解,比如清晰度、大小、视频类型等,但是对于视频内部结构我们应该一无所知,现在我们来一步一步解开视频的神秘面纱。 首先大家要清楚两个概念,视…

H.265视频编码原理总结

H.265视频编码原理总结 转载地址 1 概述 H.265(HEVC High Efficiency Video Coding)是现行H.264标准于2003年实现标准化以来时隔10年推出的新标准,将成为支撑未来十年的影像服务和产品的视频压缩技术。其特点是,支持1080p以上的…

视频编码流程详解

1、视频编码整体流程 2、FFmpeg视频编码详细流程 从本地读取YUV数据编码为H264格式的数据,然后再存入到本地,编码后的数据有带startcode。 与FFmpeg示例音频编码的流程基本一致。 3、关键函数说明 (1)avcodec_find_encoder_by_n…

视频编码知识

记录一下学习视频编码的过程和自己的理解 视频 数字图像在计算机中的表示:二维矩阵,或三维矩阵(彩色)。 矩阵中的每个点为像素,数值的大小反应色彩的强度,颜色深度需要使用一定数据空间存储,每…

视频的专业基础知识(一)常用的编码格式和参数

1. 常用的编码格式 编码格式:一个视频文件本身,通常由音频和视频两部分组成。例如视频文件,就是由avc视频编码AAC音频编码组成的,常见的视频编码格式有Xvid,AVC/H.264,MPEG1,MPEG2 等&#xff…

常见视频编码格式解析

常见视频编码格式解析 文章目录 常见视频编码格式解析1、MPEG2-TS编码技术1.1. MPEG-TS简介1.2. 基本概念及TS流概述1.3. 基本流程1.4. TS流传输包(简称TS包)结构分析1.4.1. TS包包头1.4.2. TS包净荷部分1.5. PS节目流2、MPEG-4编码技术2.1. MPEG-4概述2.2. MPEG-4各部分2.3.…

视频编码全流程

视频编解码用到的一些算法: 正反傅里叶变换、fft算法 dct变换、快速dct变换 如何自己实现一个视频编解码器: (1)取一帧作为I帧,类似jpeg压缩编码,也就是 rgb转yuv,然后dct去除高频信息。因为这种压缩会造成边界bloc…

视频编码技术详解

1、引言 如今我们所处的时代,是移动互联网时代,也可以说是视频时代。从快播到抖音,从“三生三世”到“延禧攻略”,我们的生活,被越来越多的视频元素所影响。 而这一切,离不开视频拍摄技术的不断升级&#x…

FIO源码解读测试

在磁盘测试中,fio是最常用的测试的工具,其下载网址为https://github.com/axboe/fio; 对于fio,其测试命令有许多,这个大家很容易就可以查到,此处不讲解具体的测试命令, 而是讲一下大概的源码框架。 Fio的入口函数在fio.…

fio引发的一些问题

fio引发的一些问题 奇怪的255扇区在nvme驱动中插入打印语句直接编译模块加载源码编译内核 查找内核源码 奇怪的255扇区 由于块设备驱动项目需要测试读写速度,故使用fio工具,没想着深入了解,简单测个速就可以 使用tldr命令得到测试磁盘读写的…