Open Sora 1.1 升级版本发布!

[图片]

前段时间发布的开源项目 Open Sora 悄悄升级了 1.1 版本,这是 Colossal-AI 团队的一个完全开源的视频生成项目,致力于高效制作高质量视频,通过采用开源原则,Open-Sora 不仅实现了先进视频生成技术的低成本普及,还提供了一个精简且用户友好的方案,简化了视频制作的复杂性。

Open Sora 团队这次带来了它们的 1.1 版本发布报告。

模型训练报告

在 Open-Sora 1.1 版本中,我们使用更好的 STDiT 架构在 10M 数据上训练 700M 模型(Open-Sora 1.0 在 400K 数据上训练)。我们实现了sora报告中提到的以下功能:

  • 可变的持续时间、分辨率、纵横比(采样灵活性、改进的取景和构图)
  • 使用图像和视频进行提示(动画图像、扩展生成的视频、视频到视频编辑、连接视频)
  • 图像生成能力

为了实现这个目标,我们在预训练阶段使用多任务学习。对于扩散模型来说,使用不同采样时间步长的训练已经是多任务学习。我们进一步将这个想法扩展到多分辨率、宽高比、帧长度、fps 以及用于图像和视频条件生成的不同掩模策略。我们在 0s~15s、144p 到 720p、各种宽高比的视频上训练模型。尽管由于训练 FLOP 数的限制,时间一致性的质量不是那么高,但我们仍然可以看到该模型的潜力。

模型架构修改

我们对原始 ST-DiT 进行了以下修改,以获得更好的训练稳定性和性能(ST-DiT-2):

  • 用于时间注意力的绳嵌入:遵循LLM的最佳实践,我们将正弦位置编码更改为用于时间注意力的绳嵌入,因为它也是一个序列预测任务。
  • AdaIN 和 Layernorm 用于时间注意力:我们用 AdaIN 和 Layernorm 包装时间注意力作为空间注意力来稳定训练。
  • 使用 RMSNorm 进行 QK 归一化:在 SD3 之后,我们将 QK 归一化应用于所有注意力,以获得更好的半精度训练稳定性。
  • 动态输入尺寸支持和视频信息条件:为了支持多分辨率、宽高比和 fps 训练,我们使 ST-DiT-2 接受任何输入尺寸,并自动缩放位置嵌入。扩展 PixArt-alpha 的想法,我们以视频的高度、宽度、长宽比、帧长度和 fps 为条件。
  • 将 T5 标记从 120 扩展到 200:我们的标题通常少于 200 个标记,我们发现该模型可以很好地处理更长的文本。

支持多时间/分辨率/宽高比/fps训练

正如 sora 的报告中提到的,使用原始视频的分辨率、长宽比和长度进行训练可以提高采样灵活性并改善取景和构图。我们找到了实现这一目标的三种方法:

  • NaViT:通过屏蔽支持同批次内的动态大小,效率损失很小。然而,该系统实现起来有点复杂,并且可能无法从闪存关注等优化内核中受益。
  • Padding(FiT、Open-Sora-Plan):通过padding支持同一批次内的动态大小。然而,将不同分辨率填充到相同大小的效率并不高。
  • Bucket(SDXL、PixArt):通过分桶的方式支持不同批次的动态尺寸,但同一批次内尺寸必须相同,且只能应用固定数量的尺寸。在批次中具有相同大小的情况下,我们不需要实现复杂的屏蔽或填充。

为了实现的简单性,我们选择bucket方法。我们预先定义一些固定的分辨率,并将不同的样本分配到不同的桶中。下面列出了分桶的关注点。但我们可以看到,在我们的案例中,这种担忧并不是一个大问题。

[图片]

如图所示,一个桶是 (resolution, num_frame, aspect_ratio) 的三元组。我们提供不同分辨率的预定义宽高比,涵盖了大多数常见的视频宽高比。在每个纪元之前,我们对数据集进行洗牌,并将样本分配到不同的桶中,如图所示。我们将样本放入具有最大分辨率和小于视频帧长度的桶中。

考虑到我们的计算资源有限,我们进一步为每个 (resolution, num_frame) 引入两个属性 keep_prob 和 batch_size ,以降低计算成本并实现多阶段训练。具体来说,高分辨率视频将以 1-keep_prob 的概率下采样到较低分辨率,每个桶的批量大小为 batch_size 。这样,我们就可以控制不同桶中的样本数量,并通过为每个桶寻找合适的批量大小来平衡 GPU 负载。

Masked DiT 作为图像/视频到视频模型

Transformer 可以轻松扩展以支持图像到图像和视频到视频任务。我们提出了一种掩模策略来支持图像和视频调节。 mask策略如下图所示。
[图片]

通常,我们会揭开要针对图像/视频到视频条件进行调节的帧。在 ST-DiT 转发期间,未屏蔽的帧将具有时间步 0,而其他帧保持不变 (t)。我们发现直接将该策略应用于训练模型会产生较差的结果,因为扩散模型没有学会在训练期间处理一个样本中的不同时间步长。

受 UL2 的启发,我们在训练过程中引入了随机掩码策略。具体来说,我们在训练过程中对帧进行随机解锁,包括解锁第一帧、前k帧、最后一帧、最后k帧、前k帧和后k帧、随机帧等。基于Open-Sora 1.0,应用掩蔽的概率为 50%,我们看到模型可以学习处理 10k 步骤的图像调节(而 30% 的能力较差),文本到视频的性能略有下降。因此,对于 Open-Sora 1.1,我们使用掩蔽策略从头开始预训练模型。

下面给出了推理中使用的屏蔽策略配置的说明。五元组在定义掩码策略方面提供了极大的灵活性。通过对生成的帧进行调节,我们可以自动生成无限帧(尽管误差会传播)。
[图片]

数据收集和管道

正如我们在 Open-Sora 1.0 中发现的那样,数据数量和质量对于训练一个好的模型至关重要,我们努力扩展数据集。首先,我们按照 SVD 创建一个自动管道,包括场景剪切、字幕、各种评分和过滤以及数据集管理脚本和约定。
[图片]

我们计划使用panda-70M等数据来训练模型,大约是30M+的数据。然而,我们发现磁盘 IO 同时成为训练和数据处理的瓶颈。因此,我们只能准备一个 10M 的数据集,并没有经历我们构建的所有处理管道。最后,我们使用包含 970 万视频 + 260 万图像的数据集进行预训练,使用 560k 视频 + 160 万图像进行微调。

培训详情

由于计算资源有限,我们必须仔细监控训练过程,如果我们推测模型学习得不好,我们就必须改变训练策略,因为没有用于消融研究的计算。因此,Open-Sora 1.1的训练包含多个变化,因此没有应用ema。

  1. 首先,我们使用 Pixart-alpha-1024 检查点中不同分辨率的图像微调 6k 步。我们发现该模型很容易适应生成不同分辨率的图像。我们使用 SpeeDiT (iddpm-speed) 来加速扩散训练。
  2. [第 1 阶段] 然后,我们使用梯度检查点对模型进行 24k 步的预训练,这在 64 个 H800 GPU 上需要 4 天。尽管模型看到的样本数量相同,但我们发现与较小的批量大小相比,模型学习速度较慢。我们推测,在早期阶段,步数对于训练来说更为重要。大多数视频都是240p分辨率,配置与stage2.py类似。视频看起来不错,但模型对时间知识了解不多。我们使用10%的掩模比例。
  3. [第 1 阶段] 为了增加步数,我们切换到较小的批量大小,而不使用梯度检查点。此时我们还添加了 fps 调节。我们训练了 2 天 40k 步。大多数视频都是144p分辨率,配置文件是stage1.py。我们使用较低的分辨率,因为我们在 Open-Sora 1.0 中发现模型可以以相对较低的分辨率学习时间知识。
  4. [第一阶段]我们发现模型无法很好地学习长视频,并发现生成结果有噪声,推测是 Open-Sora 1.0 训练中发现的半精度问题。因此,我们采用QK归一化来稳定训练。与 SD3 类似,我们发现该模型快速适应 QK 归一化。我们还将 iddpm-speed 切换为 iddpm,并将掩模比率增加到 25%,因为我们发现图像条件学习效果不佳。我们训练了 14 小时 17k 步。大多数视频都是144p分辨率,配置文件是stage1.py。第一阶段训练持续约一周,总步数81k。
  5. [阶段 2] 我们切换到更高分辨率,其中大多数视频都是 240p 和 480p 分辨率 (stage2.py)。我们在所有预训练数据上训练了一天 22k 步。
  6. [阶段 3] 我们切换到更高分辨率,其中大多数视频的分辨率为 480p 和 720p (stage3.py)。我们用高质量的数据训练了 4k 一天。我们发现加载前一阶段的优化器状态可以帮助模型更快地学习。

总而言之,Open-Sora 1.1 的训练需要在 64 个 H800 GPU 上大约 9 天。

限制和未来的工作

随着我们距离复制 Sora 又近了一步,我们发现当前模型存在许多局限性,而这些局限性也指向了未来的工作。

  • 生成失败:我们在很多情况下(特别是当总 token 数量很大或者内容很复杂时),我们的模型无法生成场景。时间注意力可能会崩溃,我们已经在代码中发现了一个潜在的错误。我们正在努力修复它。此外,我们将在下一版本中增加模型大小和训练数据以提高生成质量。
  • 噪声生成和影响:我们发现生成的模型有时有噪声并且不流畅,尤其是对于长视频。我们认为问题是由于没有使用时间 VAE 造成的。由于 Pixart-Sigma 发现适应新的 VAE 很简单,因此我们计划在下一版本中为模型开发时间 VAE。
  • 缺乏时间一致性:我们发现该模型无法生成具有高时间一致性的视频。我们认为问题是由于缺乏训练失败造成的。我们计划收集更多数据并继续训练模型以提高时间一致性。
  • 糟糕的人类生成:我们发现该模型无法生成高质量的人类视频。我们认为问题是由于缺乏人类数据造成的。我们计划收集更多的人类数据并继续训练模型以改善人类的生成。
  • 审美得分低:我们发现模特的审美得分不高。该问题是由于缺少审美评分过滤,由于IO瓶颈而没有进行。我们计划通过审美得分来过滤数据,并对模型进行微调以提高审美得分。
  • 较长的视频生成质量较差:我们发现在相同的提示下,较长的视频质量较差。这意味着图像质量不能同等地适应不同长度的序列。

最新 demo 展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目开源地址:Open Sora,感兴趣的同学可以自行前往探索。

Open Sora 发布!开源的高效复现类 Sora 视频生成方案
Udio 开放内测!免费的 ai 音乐创作平台
如何注册与订阅 Patreon

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值