NeurIPS 2022 | 谷歌新作:基于扩散模型的视频生成

71b969c8640e4633d0d98a9bb8fedbf5.gif

©作者 | 张旭

单位 | PaddleNLP

研究方向 | NLP/AIGC

33422e4a0bf992322f0fa64f8b597af6.png

引言

最近一段时间,扩散模型在文图生成领域可谓名声大噪。实际上,扩散模型可以应用到各类 AIGC 任务上,除文图生成为代表的图片生成外,扩散模型还可以进行音频生成、时间序列生成、3D 点云生成、文本生成。

而这篇论文,即 Video Diffusion Models,就将扩散模型用到了视频生成任务上,本文将对该论文展开讲解。该论文官方没有公开源码,但是有一些基于该论文的相关开源工作,比如 PaddleNLP 的 PPDiffusers,本文后续也会结合相关代码进行讲解。该论文一作作者为 Jonathan Ho 和 Tim Salimans,来自于谷歌,论文目前已被 NeurIPS 2022 接收。

93f2b34cb6a0f043a8c39146458011e8.png

论文标题:

Video Diffusion Models

论文来源:

NeurIPS 2022

论文链接:

https://arxiv.org/abs/2204.03458

9545b262804138acec76d8e4dd774011.png

论文贡献

论文的主要贡献如下:

这是第一个使用扩散模型进行视频生成任务的论文工作,这里的视频生成任务包括无条件和有条件两种设定。

论文针对扩散模型中的 UNet 网络结构进行修改,使其适用于视频生成任务,提出了 3D UNet,该架构使用到了 space-only 3D 卷积和时空分离注意力。这种时空分离注意力的 UNet 可以应用在可变序列长度上,因此可以在视频和图像建模目标上进行联合训练。

为了生成比训练时帧数更多的视频,论文还展示了如何使用梯度条件法进行重构指导采样,从而可以自回归地将模型扩展到更长的时间步长和更高的分辨率。


e99bd178aba8b1c0f3249e43c252303f.png


方法

3.1 3D UNet

论文提出的视频生成方法基于标准的扩散模型(即高斯扩散模型),最核心的改进在于对作为 backbone 的 UNet 网络架构的修改,从而让扩散模型适应视频生成任务。

在图像生成任务上的扩散模型所用到的 UNet 网络架构通常来自 PIXELCNN++ 改进版本,它先进空间下采样(spatial downsampling)然后进行空间上采样(spatial upsampling),其中在进行每一步空间上采样时都通过跳跃连接(skip connections)来同对应步的下采样过程的特征图进行联系。

网络上采样和下采样的基本单元都是 2D 卷积残差块(2D convolutional residual blocks),只是在改进的版本中,为了能够引入文本这类的条件信息,每个 2D 卷积残差块后面还跟着一个注意块或者说空间注意块(spatial attention block)。

论文将这一图像扩散模型架构扩展至视频,Video Diffusion Models 提出了 3D UNet 架构。具体来说,该架构将原 UNet 中的 2D 卷积替换成了 space-only 3D 卷积(space-only 3D convolution),举例来说,如果原来用的是 3x3 卷积,那么现在就要把它替换为 1x3x3 卷积(其中第一个维度对应视频帧,即时间维度,第二个和第三个维度对应帧高和帧宽,即空间维度,由于第一个维度是 1 所以对时间没有影响只对空间有影响)。

随后的空间注意块仍然保留,但只针对空间维度进行注意力操作,也就是把时间维度 flatten 为 batch 维度。在每个空间注意块之后,新插入一个时间注意块(temporal attention block),该时间注意块在第一个维度即时间维度上执行注意力,并将空间维度 flatten 为 batch 维度。

论文在每个时间注意力块中使用相对位置嵌入(relative position embeddings),以便让网络能够不依赖具体的视频帧时间也能够区分视频帧的顺序。这种先进行空间注意力,再进行时间注意力的方式,可以称为时空分离注意力(factorized space-time attention)。3D UNet 模型的整体架构如下图所示。

ce2f580dd7fbb0eb0e926f56345690eb.png

▲ 3D UNet模型整体架构

其中每个方块都代表一个四维的张量(即frames × height × width × channels),该图中每个方块的纵轴长度表示张量的长或宽大小(即 height 或width ),横轴长度表示张量的通道大小(即 channels)。

输入是噪音视频 、条件 以及 log SNR ,下采样或上采样中块与块之间的空间分辨率(即 height × width)调整比率是 2,使用通道乘子(channel multipliers) 来指定通道的数目。模型通过卷积和时空分离注意力的方式来处理每一个块,在进行每一步空间上采样时都通过跳跃连接来同对应步的下采样过程的特征图进行联系。

这种时空分离注意力的方式有一个好处是可以对视频和图片生成进行联合建模训练。就是说可以在每个视频的最后一帧后面添加随机的多张图片,然后通过掩码的方式来将视频以及各图片进行隔离,从而让视频和图片生成能够联合训练起来,论文在实验部分也对这种联合建模训练的方式其进行了探索。

3.2 重构指导采样

论文的另一个主要创新是为无条件扩散模型提供了一种条件生成的方法。这种条件生成方法称为梯度条件法(gradient conditioning method),它修改了扩散模型的采样过程,使用基于梯度优化的方式来改善去噪数据的条件损失(conditioning loss),从而可以让生成的视频通过自回归地方式扩展至更长的时间步和更高的分辨率。

由于梯度条件法中所使用的附加梯度项可以解释为一种额外的指导,而这种指导其实基于模型对条件数据的重建,因此论文将该方法称为重建引导采样(reconstruction-guided sampling),或简单地称为重建指导(reconstruction guidance)。

在训练的阶段,由于计算资源限制,往往只能在一个固定的帧数下面训练一个视频,而且这个帧数往往很短(比如论文中的 16 帧)。但是在采样(推理)阶段,我们可以先生成一个 16 帧的视频 ,然后在这个基础上拓展得到第二个视频 ,这样一来就可以通过自回归的方式拓展采样的视频到任意长度。但是这种采样方式需要我们显式地训练一个条件生成模型 ,或者通过插值的方式从无条件生成模型 近似得到。

之前的工作通常都是通过“替换法”来进行自回归视频拓展,简单来说替换法就是对两条件样本进行联合训练 ,但是在扩散模型前向的具体过程中 对应的部分保持正常的迭代更替,而 对应的部分被替换为一个固定的 或者 ,也就是始终需要参考 。

论文认为这种方式下 对应的部分的更替仅仅是 ,而真正理想的更替应该是 ,这样才能够和上一个视频有更好的一致性。论文将上述更替方案改写为 ,它使用基于梯度优化的方式来改善去噪数据的条件损失,提出的条件重构采样,其公式如下:

63b2a8211eeba28f79a9d1900b379b27.png

论文发现,在确保生成样本与条件信息的一致性方面,梯度条件法比之前的方法更加有效。下图左为利用梯度条件法通过自回归方式拓展得到的视频帧,图右为利用基线的替换(replacement)法通过自回归方式拓展得到的视频帧。可以看到,使用梯度条件法采样的视频比基线方法具有更好的时间一致性。

4a6f65f68d9c6ad646187d029bf9da74.png

▲ 梯度条件法(左)和基线“替换”法(右)在自回归扩展下生成的视频帧。与基线方法相比,使用梯度条件法采样的视频获得了更好的时间一致性。

5e6a3530030fdc6f7ee246256b1165a4.png

实验

论文在无条视频生成(Unconditional video modeling)、视频预测(Video prediction)、文本条件视频生成(Text-conditioned video generation)三个任务上进行了实验和评估。

4.1 无条件视频生成

无条件视频生成使用 Soomro 数据集。论文对该数据集的 16 帧短视频片段进行建模,并下采样到 64x64  的空间分辨率。实验对比结果如下,相比之前的模型取得了新的 SOTA 结果:

9112751c5e0229d0463e8f65dc2e80e6.png

4.2 视频预测

视频预测任务是指给定视频的第一帧预测剩余的帧,它是一个有条件的视频生成任务。论文使用前面所说的重构指导采样来进行该任务。论文在 BAIR Robot Pushing 和 Kinetics-600 两个数据集上进行实验,实验结果如下,同样达到了新的 SOTA 水平:

e1f9838b827afd16102893fea7a641a0.png

cfd3823768593e312dacc49f2def72ba.png

4.3 文本条件视频生成

在该任务中,论文使用了 1 千万的带标题视频(captioned videos)作为训练数据。论文使用 BERT-large 获取标题的词嵌入表征作为扩散模型的条件输入。论文对视频-图片联合训练(joint video-image training)、无分类器指导(classifier-free guidance)、自回归视频拓展(autoregressive video extension for longer sequences)进行了探索。

对于视频-图片联合训练,下表展示了文本条件下,16x64x64 视频的实验结果,每个视频有额外的 0、4 或 8 个独立图像帧进行联合训练。可以看到,随着添加更多独立的图像帧,采样视频和图像的样本质量明显改善。

67b636a95b872cba6092517e246a4813.png

对于无分类器指导,在文本条件视频生成任务中增加指导可以提高每帧图片的保真度(fidelity),增强条件信号的效果。下表展示了不同指导权重(guidance weight)下的指标,可以看到更高指导权重下 IS 指标上的表现有着明显的提升,而 FID 指标表现上随着指导权重的增加先提升后下降,这个结果也和之前文本条件图片生成的结果一致。

0c28a31d643722ecc45ec77c4bf46a9a.png

对于自回归视频拓展,论文对比了重构指导采样(reconstruction guidance)和替换法(replacement)生成视频的效果,并发现这种方法的确实优于替换法,对比结果如下表所示:

4ad3c31872d48e5fc2f2112554a5ad71.png

f0686ffc3ff9b44018df7bea47adc8df.png

效果展示

fc973854e05ad03328d5c6b277173bbe.gif

outside_default.png

参考文献

outside_default.png

https://arxiv.org/pdf/2204.03458.pdf

https://video-diffusion.github.io/

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/ppdiffusers

更多阅读

48a0d7de60c85b1cc56b20d4bae47b2e.png

42f8b257cad08f43de9b2c92b72841f9.png

7a5a083f083b4af5467d2e6d53f766d1.png

61653ee5dc5ba4d73fcdc72cbd7c3f82.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

3fd64e7524355c53dd7f6368fe2512de.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

c435e9428e939d35dfc0c60b3ae6e13d.jpeg

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值