视频压缩:谷歌基于GAN实现

2023-11-08 06:30
文章标签 实现 谷歌 gan 视频压缩

本文主要是介绍视频压缩:谷歌基于GAN实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器之心编译  编辑:陈萍

来自谷歌的研究者提出了一种基于生成对抗网络 (GAN) 的神经视频压缩方法,该方法优于以前的神经视频压缩方法,并且在用户研究中与 HEVC 性能相当。

通常,视频压缩的目标是通过利用时间和空间冗余来降低存储视频所需的比特率,同时保留视觉内容,目前广泛使用的方法是非神经标准编解码器(例如 H.264/AVC 、H.265/HEVC)。一些研究表明,神经网络在学习视频压缩方面取得了更好的进展,最新的方法在峰值信噪比(PSNR)方面可以与 HEVC 相媲美,或者在 MS-SSIM 方面优于 HEVC。然而,因为很少有研究者发布重制后的视频,这些方法尚未在主观视觉质量方面进行评估。

来自谷歌的研究者提出了一种基于生成对抗网络 (GAN) 的神经视频压缩方法,该方法优于以前的神经视频压缩方法,并且在用户研究中与 HEVC 性能相当。研究者提出了减少时间累积误差的方法,该累积误差由递归帧压缩引起,该方法使用随机移位和非移位,由频谱分析驱动。论文详细介绍了网络设计的选择以及重要性,并阐述了在用户研究中评估视频压缩方法的挑战。

论文地址:https://arxiv.org/pdf/2107.12038.pdf

本文主要贡献包括:

  • 该研究提出了首个在视觉质量方面与 HEVC 具有竞争性的神经压缩方法,这是在用户研究中衡量的。研究表明,在 PSNR 方面具有竞争力的方法在视觉质量方面的表现要差得多;

  • 该研究提出了一种减少展开时时间误差累积的技术,该技术通过随机移动残差输入,然后保持输出不变,激励频谱分析,研究表明该技术在系统和 toy 线性 CNN 模型中具备有效性;

  • 该研究探索了由用户研究测量的视觉质量与可用视频质量指标之间的相关性。为了促进未来的研究,研究者发布了对 MCL-JCV 视频数据集的重建以及从用户研究中获得的所有数据(附录 B 中的链接)。

研究方法

下图为该研究使用的网络架构,其中 x = {x_1, x_2, . . . } 为帧序列,x_1 为初始帧 (I)。该研究在低延迟模式下操作,因此可以从先前的帧中预测后续 (P) 帧,设是重建视频。

灰色框是中间张量的可视化结果。灰线左侧是 I-frame 分支(蓝色代表用 CNN 学习),右侧是 P-frame 分支(绿色代表用 CNN 学习)。虚线在解码期间没有被激活,判别器 D_I、D_P 仅在训练期间激活。CNN 的大小粗略地表明了它们的容量。SG 是停止梯度操作,Blur 是尺度空间模糊,Warp 是双三次扭曲, UFlow 是冻结光流模型。

研究者采用以下策略来获得高保真重建视频:

  • 在 I-frame 中合成可信的细节;

  • 尽可能清晰地传递这些可信细节;

  • 对于出现在 P-frame 中的新内容,研究者希望能够合成可信细节。

论文中的公式是基于 HiFiC 的。使用条件 GAN,其中生成器和判别器都可以访问额外的标签:公式假设数据点 x 和标签 s 遵循联合分布 p(x, s)。生成器将样本 y ∼ p(y) 映射到分布 p(x|y),而判别器用来预测给定对 (x, s) 是否来自 p(x|s) 而不是来自生成器。

在设置中需要处理帧序列和重建。在 HiFiC 之后,研究者在潜在 y 上调节生成器和判别器,对于 I-frame,y = yI,对于 P-frame,y = y_t,r。为了简化问题,该研究的目标是对每帧分布进行匹配,即对于 T 长度的视频序列,目标是获得一个模型 s.t.:

通过随机移位展开时防止错误累积

正如文中所提到的,「低延迟」设置的循环性质在时域中的泛化具有挑战性,这可能会发生错误传播。理想情况下,只要研究评估的内容至少 T = 60 帧,就可以使用序列进行训练,但实际上由于内存限制,这在当前硬件上是不可行的。虽然我们最多可以将 T = 12 放入加速器中,但这样会使训练模型会变得非常慢。

为了加速原型设计和训练新模型,以及防止展开(unrolling)问题,该研究采用以下训练方案。 

1) 仅在随机选择的帧上训练 E_I 、 G_I 、 D_I ,1 000000 step。

2) 冻结 E_I、G_I、D_I ,并从 E_I 、G_I 初始化 E_res、G_res 权重。使用分阶段展开( staged unrolling )训练 E_flow、G_flow、E_res、G_res、D_P 450000step,即使用 T = 2 直到 80k step,T = 3 直到 300step,T = 4 直到 350step,T = 6 直到 400k,T = 9 直到 450k。 

该研究将其分为步骤 1) 和 2),因为经过训练的 E_I、 G_I 可以重新用于 P-frame 分支的许多变体,并且跨运行共享 E_I、 G_I 使其更具可比性。

使用比例控制器在训练期间控制速率:超参数 λ_R 用来控制比特率和其他损失项(例如 GAN 损失等)之间的权衡。 

实验结果

数据集:训练数据包括大约 992000 个时间 - 空间裁剪视频集,每个视频集长度 T 为 12 帧,每帧画面大小为 256×256,从 YouTube 的公开视频中获取。这些视频的分辨率至少为 1080p,长宽比至少为 16:9,帧率至少为 30 fps。

模型和基准:基线称为「MSE-only」,并且该基准使用了与研究所用一样的架构和训练过程,但没有使用 GAN 损失。实验还与尺度空间流(Scale-Space Flow,SSF)进行了比较,这是最近的神经压缩方法,在 PSNR 方面与 HEVC 相当。最后,该研究与无学习的 HEVC 进行了比较。

研究者在图 1 中总结了评分者偏好,并在图 7 中展示了性能指标。该研究与三种比特率下的 HEVC 进行了比较,结果证明该研究所用方法与 HEVC 在 0.064 bpp 下具有可比性 (14vs12),在 0.13bpp 下效果更佳(18vs9),在 0.22bpp 下性能也不错(16vs9)。

为了评估 GAN 损失对视觉质量的影响,研究者在低速率 (≈ 0.064 bpp) 下将 GAN 损失与 MSE-only 和 SSF 进行了比较。如图 1 所示,在 MSE-only 下,在 30 次结果中只有 4 次结果较好,4 次平局,结果表明了 GAN 损失的重要性,并且 SSF 没有一次是首选、没有平局。研究者强调 MSE-only 仅在 PSNR 方面与 HEVC 相当(图 7),但在视觉质量方面明显更差。

研究发现,下列组件对性能的提升至关重要:不使用「free latent」会引起模糊的重建效果,这类似于 MSE-only 基线产生的效果,如图 3 顶部所示。研究发现,使用「free latent」而不使用条件判别器也会导致模糊的重建效果。当信息不传递给 UFlow 时,实验结果会得到前后不一致的流,当信息传递给 UFlow 时,但没有使用流损失正则化(即公式 6),实验结果也不理想。因此,删除任何一个组件都会损害时间一致性,参见图 3 底部。

总体来说,没有一个指标能够预测图 1 中的结果,但是 PIM 和 LPIPS 对一些比较进行了正确的排序。在神经图像压缩领域已经观察到了这种结果,其中最好的方法是由人类来排序的,因为目前还没有一种度量标准能够根据主观质量来准确地对这些方法进行排序。

猜您喜欢:

等你着陆!【GAN生成对抗网络】知识星球!  

CVPR 2021 | GAN的说话人驱动、3D人脸论文汇总

CVPR 2021 | 图像转换 今如何?几篇GAN论文

【CVPR 2021】通过GAN提升人脸识别的遗留难题

CVPR 2021生成对抗网络GAN部分论文汇总

经典GAN不得不读:StyleGAN

最新最全20篇!基于 StyleGAN 改进或应用相关论文

超100篇!CVPR 2020最全GAN论文梳理汇总!

附下载 | 《Python进阶》中文版

附下载 | 经典《Think Python》中文版

附下载 | 《Pytorch模型训练实用教程》

附下载 | 最新2020李沐《动手学深度学习》

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 | 超100篇!CVPR 2020最全GAN论文梳理汇总!

附下载 |《计算机视觉中的数学方法》分享

这篇关于视频压缩:谷歌基于GAN实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/368367

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

PyQt6/PySide6中QTableView类的实现

《PyQt6/PySide6中QTableView类的实现》本文主要介绍了PyQt6/PySide6中QTableView类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录1. 基本概念2. 创建 QTableView 实例3. QTableView 的常用属性和方法

PyQt6/PySide6中QTreeView类的实现

《PyQt6/PySide6中QTreeView类的实现》QTreeView是PyQt6或PySide6库中用于显示分层数据的控件,本文主要介绍了PyQt6/PySide6中QTreeView类的实现... 目录1. 基本概念2. 创建 QTreeView 实例3. QTreeView 的常用属性和方法属性

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服