视频压缩:谷歌基于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

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2