详细解读开源版Sora视频生成模型

Diffusion Models专栏文章汇总:入门与实战

前言:OpenAI的视频生成模型Sora一经发布就广受全世界的瞩目,上海人工智能实验室最近推出了一个基于Diffusion Transformer的结构的模型Latte,堪称最接近Sora原理的视频生成模型。这篇博客就详细解读Latte,并从中窥探Sora的神秘面纱。

目录

贡献概述

方法详解

backbone

是否预训练模型开始训练?

patch embedding方法:uniform frame patch embedding和compression frame patch embedding

Timestep-class 信息注入方式

Temporal positional embedding

论文和代码

个人感悟


贡献概述

论文提出了一种基于Transformer的视频扩散模型结构Latte。Latte首先从输入视频中提取时空标记,然后采用一系列Transformer块对潜在空间中的视频分布进行建模。为了对从视频中提取的大量标记进行建模,从分解输入视频的空间和时间维度的角度引入了四个有效的变体。作者详细比较了四种有效变体之间的利弊。

方法详解

backbone

latte采用视频transformer作为骨干。Latte 使用预训练的变分自动编码器将输入视频编码到潜在空间中的特征中,其中tokens是从编码特征中提取的。然后应用一系列 Transformer 块来编码这些tokens。

最主要的backbone,作者探索了如下图所示的四种方法:

1. 变体1:这个变体的Transformer骨干由两种不同类型的Transformer块组成:空间Transformer块和时间Transformer块。空间Transformer块专注于捕捉具有相同时间索引的token之间的空间信息,而时间Transformer块则采用“交错融合”的方式在时间维度上捕捉信息。

2. 变体2:与变体1中的“交错融合”设计不同,变体2采用了“后期融合”方法来结合时空信息。这个变体同样包含与变体1相同数量的Transformer块,输入形状与变体1相似,但在融合时空信息的方式上有所不同。

3. 变体3:专注于分解Transformer块中的多头注意力(multi-head attention)。这个变体首先在空间维度上计算自注意力,然后是时间维度,从而使得每个Transformer块都能捕捉到时空信息。

结论:变体 1 随着迭代次数的增加表现最好;变体4由于计算效率较高,尽管性能稍逊,但在资源受限的情况下可能是一个不错的选择。详见下表:

是否预训练模型开始训练?

大多数的视频生成模型都是从图片生成模型当中初始化开始学习的。

作者研究了两种学习策略:使用预训练模型(ImageNet预训练)和图像-视频联合训练(image-video joint training)。使用预训练模型可以利用ImageNet上学习到的图像生成知识,而图像-视频联合训练则通过在每个视频样本后附加随机选择的视频帧来提高模型的多样性和性能。

使用在ImageNet上预训练的模型作为初始权重可以帮助视频生成模型更快地学习,但随着训练的进行,模型可能会遇到适应特定视频数据集分布的挑战。这可能导致性能在达到一定水平后趋于稳定,不再显著提高。

patch embedding方法:uniform frame patch embedding和compression frame patch embedding

作者探索了两种视频片段嵌入方法:均匀帧补丁嵌入(uniform frame patch embedding)和压缩帧补丁嵌入(compression frame patch embedding)。

  • 均匀帧补丁嵌入是将每个视频帧单独嵌入到token中,类似于ViT(Vision Transformer)的方法。
  • 压缩帧补丁嵌入考虑捕获时间信息,然后将 ViT patch 嵌入方法从 2D 扩展到 3D,随后沿着时间维度提取,通过按一定步长提取时间序列中的“管状”结构,然后映射到token。

结论:均匀帧补丁嵌入在某些情况下表现更好,因为它可能更好地保留了视频的时空信息。使用压缩帧补丁嵌入方法会导致时空信号的丢失,这使得Transformer主干很难学习视频的分布。

Timestep-class 信息注入方式

  1. S-AdaLN架构:S-AdaLN(Scalable Adaptive Layer Normalization)架构是一种特殊的自适应层归一化方法。它通过线性回归计算两个参数γc(缩放因子)和βc(偏移量),然后将这些参数应用到Transformer块的隐藏嵌入上。这样做的目的是为了适应性地编码时间步长或类别信息,从而使模型能够更好地理解和处理这些信息。

  2. Vanilla Transformer块:在图(a)和(b)中使用的是标准的Transformer块(通常称为vanilla transformer blocks),这些块包含多层感知机(MLP)和多头注意力(MHA)。多层感知机是一种简单的神经网络结构,用于非线性变换和特征学习;而多头注意力机制则允许模型在不同的表示子空间中并行地学习输入之间的关系。

结论:S-AdaLN方法更有效。

Temporal positional embedding

为了让模型能够理解时间信号,作者探索了两种时间位置嵌入方法。绝对位置编码使用不同频率的正弦和余弦函数来为每个时间步长生成唯一的位置编码。相对位置编码则使用旋转位置编码(RoPE),这是一种更高级的位置编码方法,能够捕捉连续帧之间的相对时间关系,从而提供更丰富的时间动态信息。

结论:绝对位置编码在某些情况下能提供稍微更好的结果。

论文和代码

Latte: Latent Diffusion Transformer for Video Generation

个人感悟

1、说实话从DiT发布很久很久了,图像领域用的比较早,视频领域的DiT探索比较晚,相信Sora带来的这股热浪能够很快将DiT带火的。

2、看论文的排版,应该是投了eccv 2024。实验是真的扎实,给ailab长脸了。

3、最近有open sora的工作,结合latte更有启发性,之后会专门出博客进行讲解。

4、目前latte这个工作只是处于学术阶段,只能小数据集上验证有效性,如果不是sora爆火,可能也不会得到这么多的关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/563021.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS-ForEach:循环渲染

ForEach基于数组类型数据执行循环渲染。 说明: 从API version 9开始,该接口支持在ArkTS卡片中使用。 接口描述 ForEach(arr: Array,itemGenerator: (item: Array, index?: number) > void,keyGenerator?: (item: Array, index?: number): string …

备战蓝桥杯---牛客寒假算法基础集训6

1.并查集数学 分析: 首先我们知道算数基本定理,如果两个数有大于1的质因子,那么我们就需要把他们放在同一个集合,因此我们可以用欧拉刷出1e6范围内的素数,然后依次看输入的数。 拿202*2*5举例子,我们在求…

在Sequence中缓存Niagara粒子轨道

当Sequence中粒子特效较多时,播放检查起来较为麻烦,而使用Niagara缓存功能可将粒子特效方便的缓存起来,并且还可以更改播放速度与正反播放方向,便于修改。 1.使用Niagara缓存需要先在插件里打开NiagaraSimCaching 2.创建一个常…

【计算机网络篇】数据链路层(3)差错检测

文章目录 🥚误码🍔两种常见的检错技术⭐奇偶校验⭐循环冗余校验🎈例子 🥚误码 误码首先介绍误码的相关概念 🍔两种常见的检错技术 ⭐奇偶校验 奇校验是在待发送的数据后面添加1个校验位,使得添加该校验…

[MAUI]集成高德地图组件至.NET MAUI Blazor项目

文章目录 前期准备:注册高德开发者并创建 key登录控制台创建 key获取 key 和密钥 创建项目创建JS API Loader配置权限创建定义创建模型创建地图组件创建交互逻辑 项目地址 地图组件在手机App中常用地理相关业务,如查看线下门店,设置导航&…

python环境搭建及特定操作系统注意事项

文章目录 搭建Python环境通用的流程:**1. 下载并安装Python解释器****2. 验证安装****3. 安装包管理器(pip)****4. 安装必要的开发工具****5. 创建虚拟环境(推荐)****6. 安装项目所需的库****7. 配置IDE/编辑器** 特定…

简单易用的Nginx代理管理工具:体验便捷配置、高效管理

今天在浏览 GitHub 的时候,我发现了一个用于管理 Nginx 代理服务器的开源工具项目——Nginx Proxy Manager。作为一名后端开发人员,这个项目对我来说无疑是一个非常不错的发现。以往,当我们部署一些开源工具或者自己编写的小项目和小网站时&a…

【深度学习】四种天气分类 模版函数 从0到1手敲版本

引入该引入的库 import torch import torch.nn as nn import matplotlib.pyplot as plt import torch.nn.functional as F import torchvision import torch.optim as optim %matplotlib inline import os import shutil import glob os.environ["KMP_DUPLICATE_LIB_OK&q…

Docker搭建LNMP环境实战(02):Win10下安装VMware

实战开始,先安装 VMware 虚拟机。话不多说,上手就干! 1、基本环境检查 1.1、本机Bios是否支持虚拟化 进入:任务管理器- 性能,查看“虚拟化”是否启用,如果已启用,则满足要求,如果未…

string类的详细模拟实现

string类的模拟实现 文章目录 string类的模拟实现前言1. 类的框架设计2. 构造函数与析构函数3. 拷贝构造与重载赋值运算符函数4. 运算符重载5. 成员函数6. 迭代器的实现7. 非成员函数8. 单元测试总结 前言 ​ 在现代编程中,字符串处理是每个程序员都会遇到的基本任…

亚稳态及其解决办法

异步电路 亚稳态 亚稳态亚稳态的产生原因什么是同步异步信号怎么消除亚稳态 亚稳态 在数字电路中,每一位数据不是1(高电平)就是0(低电平)。当然对于具体的电路来说,并非1(高电平)就是…

【JavaEE初阶系列】——带你了解volatile关键字以及wait()和notify()两方法背后的原理

目录 🚩volatile关键字 🎈volatile 不保证原子性 🎈synchronized 也能保证内存可见性 🎈Volatile与Synchronized比较 🚩wait和notify 🎈wait()方法 💻wait(参数)方法 🎈noti…