赞
踩
目前比较接近sora的开源路线是:Stable Video Diffusion(关于SVD的介绍请看此文的第4部分]) + Stable Diffusion3的结构(SD3的详细介绍见此文的第4部分)
另,注意 如果此前对sora原理并不了解的,请先看本sora系列的上一篇文章:视频生成模型Sora的全面解析:从AI绘画、ViT到ViViT、DiT、VDT、NaViT等(含sora复现)「下文提到此文时会简称为:sora全面解析一文」,避免一脸懵
24年1月5日,受DiT、U-ViT在图像生成领域的成功,上海AI实验室的一个团队推出了把“DiT/U-ViT架构用到视频生成领域”的类sora开源系统Latte(其对应论文为:Latte: Latent Diffusion Transformer for Video Generation,其对应的GitHub地址为:GitHub - Vchitect/Latte: Latte: Latent Diffusion Transformer for Video Generation.)
通过本博客之前的文章可知,stable diffusion所基于的潜在扩散模型(Latent Diffusion Models, LDMs),通过在潜在空间而不是像素空间中进行扩散过程
LDMs首先利用预训练的变分自动编码器的编码器将输入数据样本压缩成较低维度的潜在编码。随后,它通过两个关键过程学习数据分布:扩散和去噪
而Latte将LDMs扩展到视频生成,具体为:
主干网络:考虑到输入视频的空间和时间信息之间的固有差异以及从输入视频中提取出大量标记,如下图所示:从分解输入视频的空间和时间维度的角度,设计了4种高效的基于Transformer的模型变体(有没发现,下图的变体3类似于sora全面解析一文介绍过的VDT),以有效捕获视频中的时空信息
首先是单注意力机制模块,每个模块中只包含时间或者空间注意力
接下来是,多注意力机制模块,每个模块中同时包含时间与空间注意力机制 (Open-sora所参考变体)
输出:在Transformer主干之后,一个关键的过程涉及解码视频token序列,以得到预测的噪声和预测的协方差。 这两个输出的形状与输入相同
对于视频patch的嵌入,有如下两种方法
很明显,第二种方法融入了时空信息,因此还需要使用3D转置卷积对“输出的潜在视频”进行时间维度的上采样,随后是标准线性解码器和重塑操作(an additional step entails integrating a 3D transposed convolution for temporal up sampling of the output latent videos, following the standard linear decoder and reshaping operation)
Timestep 以及 class 信息 注入到模型采用了两种方式:
时序位置编码方式一般有两种选择,比如绝对位置编码和相对位置编码RoPE(实验证明两种方式区别不大),至于空间位置就是使用默认方式
Latte 使用了DiT 在 ImageNet 上的预训练模型,并作了一些改进
模型采用了上面介绍过的 Diffusion Transformer(DiT)架构
具体来说,整个架构包括一个预训练好的 VAE,一个文本编码器,和一个带有空间-时间注意力机制的STDiT模型(Spatial Temporal Diffusion Transformer,说白了,就是给DiT加上时空注意力,类似sora全面解析一文介绍过的VDT),STDiT的初始化版本则相当于给PixArt-alpha 加上时间注意力
整个模型的训练和推理流程如下
再进一步阐述下STDiT,下图左侧为STDiT 每层的结构(看图时从下往上看),下图右侧是上面2.4节介绍过的带Cross Attention的VDT,这两个结构的区别在于各个注意力层的组织顺序不同,但不影响本质是一样的
Open-Sora 的复现方案参考了Stable Video Diffusion的工作,共包括三个阶段,分别是:
作者团队表示,在 Open-Sora 的复现流程中,他们使用了 64 块 H800 进行训练。第二阶段的训练量一共是 2808 GPU hours,约合 7000 美元,第三阶段的训练量是 1920 GPU hours,大约 4500 美元。经过初步估算,整个训练方案成功把 Open-Sora 复现流程控制在了 1 万美元左右
且每个阶段都会基于前一个阶段的权重继续训练。相比于从零开始单阶段训练,多阶段训练通过逐步扩展数据,更高效地达成高质量视频生成的目标
为了进一步降低 Sora 复现的门槛和复杂度,Colossal-AI 团队在代码仓库中还提供了便捷的视频数据预处理脚本,让大家可以轻松启动 Sora 复现预训练,包括公开视频数据集下载,长视频根据镜头连续性分割为短视频片段,使用开源大语言模型 LLaVA [https://github.com/haotian-liu/LLaVA] 生成精细的提示词
作者团队提到他们提供的批量视频标题生成代码可以用两卡 3 秒标注一个视频,并且质量接近于 GPT-4V。最终得到的视频 / 文本对可直接用于训练。借助他们在 GitHub 上提供的开源代码,我们可以轻松地在自己的数据集上快速生成训练所需的视频 / 文本对,显著降低了启动 Sora 复现项目的技术门槛和前期准备
作者团队表示,他们对Open-Sora 1.0中的STDiT架构进行了关键性改进,比如
根据Open-Sora 技术报告指出,Open-Sora 采用了一种多阶段训练方法,每个阶段都会基于前一个阶段的权重继续训练。相较于单一阶段训练,这种多阶段训练通过分步骤引入数据,更高效地实现了高质量视频生成的目标
作者团队表示,基于Transformer的特性,可以轻松扩展 DiT 架构以支持图像到图像以及视频到视频的任务。他们提出了一种掩码策略来支持图像和视频的条件化处理。通过设置不同的掩码,可以支持各种生成任务,包括:图生视频,循环视频,视频延展,视频自回归生成,视频衔接,视频编辑,插帧等
作者团队表示,受到UL2[Ul2: Unifying language learning paradigms]方法的启发,他们在模型训练阶段引入了一种随机掩码策略
具体而言,在训练过程中以随机方式选择并取消掩码的帧,包括但不限于取消掩码第一帧、前k帧、后k帧、任意k帧等。作者还向我们透露,基于Open-Sora 1.0的实验,应用50%的概率应用掩码策略时,只需少量步数模型能够更好地学会处理图像条件化。在Open-Sora 最新版本中,他们采用了从头开始使用掩码策略进行预训练的方法
此外,作者团队还贴心地为推理阶段提供了掩码策略配置的详细指南,五个数字的元组形式在定义掩码策略时提供了极大的灵活性和控制力
OpenAI Sora的技术报告[3]指出,使用原始视频的分辨率、长宽比和长度进行训练可以增加采样灵活性,改善帧和构图。对此,作者团队提出了分桶的策略
具体怎么实现呢?通过深入阅读作者发布的技术报告,我们了解到,所谓的桶,是(分辨率,帧数,长宽比)的三元组。团队为不同分辨率的视频预定义了一系列宽高比,以覆盖大多数常见的视频宽高比类型。在每个训练周期epoch开始之前,他们会对数据集进行重新洗牌,并将样本根据其特征分配到相应的桶中。具体来说,他们会将每个样本放入一个分辨率和帧长度均小于或等于该视频特性的桶中。
作者团队进一步透露,为了降低计算资源的要求,他们为每个keep_prob和batch_size引入两个属性(分辨率,帧数),以减少计算成本并实现多阶段训练。这样,他们可以控制不同桶中的样本数量,并通过为每个桶搜索良好的批大小来平衡GPU负载。作者在技术报告中对此进行了详尽的阐述,感兴趣的小伙伴可以阅读作者在GitHub上发布的技术报告来获取更多的信息:https://github.com/hpcaitech/Open-Sora
在Open-Sora 1.0的开发过程中,他们意识到数据的数量和质量对于培育一个高效能模型极为关键,因此他们致力于扩充和优化数据集。
他们建立了一个自动化的数据处理流程,该流程遵循奇异值分解(SVD)原则,涵盖了场景分割、字幕处理、多样化评分与筛选,以及数据集的管理系统和规范。同样,他们也将数据处理的相关脚本无私地分享至开源社区。对此感兴趣的开发者现在可以利用这些资源,结合技术报告和代码,来高效地处理和优化自己的数据集
// 待更
更多则在该课里见:视频生成Sora的原理与复现 [全面解析且从零复现sora缩略版],和七月团队一同复现sora缩略版
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。