摘要:在人工智能的浪潮中,语言模型已经取得了令人瞩目的成就,但视觉智能,尤其是生成和模拟我们所看到的世界的视频生成技术,却远远落后。想象一下,如果每个人都能轻松生成高质量的视频内容,那将会是怎样的场景?由HPC-AI Tech研发团队开发的Open-Sora正是为此
在人工智能的浪潮中,语言模型已经取得了令人瞩目的成就,但视觉智能,尤其是生成和模拟我们所看到的世界的视频生成技术,却远远落后。想象一下,如果每个人都能轻松生成高质量的视频内容,那将会是怎样的场景?由HPC-AI Tech研发团队开发的Open-Sora正是为此而生。作为一个开源视频生成模型,Open-Sora不仅支持文本到图像、文本到视频、图像到视频等多种视觉生成任务,还通过先进的深度学习架构和训练/推理技术,实现了灵活的视频合成。
论文地址:https://arxiv.org/abs/2412.20404
Github: https://github.com/hpcaitech/Open-Sora
视频生成模型领域近年来发展迅速,基于UNet的架构展示了卓越的性能。随着OpenAI的Sora模型展示了令人印象深刻的结果,基于Transformer的模型如DiT也展示了扩展扩散模型的潜力。在此背景下,Open-Sora应运而生,成为最早复现Sora的项目之一,取得了显著成果并引起了广泛关注。
Open-Sora项目为训练视频生成模型提供了全面的支持,包括从数据处理到训练代码和模型权重的完整套件,所有资源都向社区开放,以促进其发展。研发团队成功复现了Sora报告中提到的几乎所有技术,能够生成长达16秒、分辨率高达720p的视频,并支持文本到视频和图像到视频任务中的可控运动动态。图1展示了Open-Sora生成的视频示例。
Open-Sora经历了三个主要更新,分别对应1.0(2024年3月)、1.1(2024年4月)和1.2(2024年6月)版本。每个版本都在仓库中有在线报告。除非另有说明,Open-Sora特指1.2版本。本文全面介绍了这些版本背后的技术,并重点展示了1.2版本的性能。第2节讨论了数据组成和预处理方法,第3节聚焦于模型架构,第4节详细介绍了训练过程。
为了使模型训练完全可复现,研发团队所使用的数据集全部开源。总共生成了30M个视频片段,时长从2秒到16秒不等,总时长为80k小时。Webvid-10M包含来自股票素材网站的10M视频-文本对,视频分辨率较低且有水印。Panda-70M是一个大规模数据集,包含70M视频-字幕对,研发团队使用了20M高质量子集进行训练。HD-VG-130M包含130M文本-视频对,字幕由BLIP-2生成,但场景和文本质量较差。MiraData是一个高质量数据集,包含77k个长视频,主要来自游戏和城市探索。Vript是一个密集注释的数据集,包含400k个视频。Inter4K是一个包含1K个4K分辨率视频片段的数据集。
此外,研发团队从Pexels、Pixabay和Mixkit获取了免费许可的视频。这些网站的大部分视频质量都很高。研发团队非常感谢这些伟大的平台和贡献者。
用于与视频一起训练的图像数据集总共包含约3M张图像。LAION是一个大规模开放数据集,研发团队使用了美学评分大于6.5的子集。Unsplash-lite数据集包含25k张自然主题的Unsplash照片,涵盖了广泛的用途和背景。
高质量的数据对于训练好的生成模型至关重要。为此,研发团队建立了一个完整的数据处理管道,可以将原始视频无缝转换为高质量的视频-文本对。管道如图2所示。数据预处理管道的开始,研发团队使用PySceneCut检测场景并将视频切割成片段。
对于高质量视频过滤,研发团队主要遵循SVD数据预处理管道。美学评分衡量视频帧的美学偏好,研发团队使用LAION的评分器,并使用三个采样帧的平均评分。光流评分衡量视频的动态尺度,可用于过滤低运动视频,研发团队使用UniMatch模型进行此任务。一些视频是密集文本场景,如新闻广播和广告,这些视频不适合训练。光学字符识别(OCR)识别视频中的文本,文本过多的视频被移除,研发团队使用MMOCR实现的DBNet++模型。
为了为视频提供良好的字幕,研发团队使用了GPT-4V和PLLaVA。前者提供API,后者是开源的,可以由研发团队部署。尽管存在一定程度的幻觉,结果足以训练文本到视频模型。在实践中,研发团队使用预训练的PLLaVA 13B模型,并从每个视频中选择4帧进行字幕生成,空间池化形状为2*2。然而,字幕模型很难生成关于相机运动的信息。因此,研发团队使用光流检测相机运动,并将文本附加到字幕中。
图4展示了最后阶段训练中使用的视频数据的一些统计数据。研发团队展示了持续时间、分辨率、美学评分和光流评分的分布。研发团队还从视频字幕中提取了对象和动作的标签,并统计了它们的频率。
研发团队的视频生成框架遵循Sora的报告。视频首先通过视频压缩网络(即3D自动编码器)进行压缩。文本编码器对文本进行编码。然后,类似DiT的Transformer处理视频和文本潜在表示。
在Open-Sora 1.0和1.1中,研发团队使用了Stability-AI的2D VAE(84M参数),通过8x8的空间压缩视频。为了减少时间维度,研发团队通过每三帧提取一帧进行下采样。然而,这种方法由于生成的FPS减少而导致时间流畅性较低。为了解决这一限制,Open-Sora 1.2引入了受OpenAI Sora启发的视频压缩网络,实现了时间维度上的4倍压缩。这消除了帧提取的需要,使视频生成能够以原始FPS进行。
鉴于训练3D VAE的高计算需求,研发团队旨在利用2D VAE中嵌入的知识。在2D VAE压缩后,研发团队观察到时间上相邻的特征仍然高度相关。基于这一观察,研发团队开发了一个简单但有效的视频压缩网络,首先通过8x8进行空间压缩,然后通过4x进行时间压缩。网络架构如图5所示。
研发团队使用SDXL的预训练VAE初始化2D VAE。对于3D VAE,研发团队采用了Magvit-v2的VAE架构,包含300M参数。结合2D VAE,视频压缩网络的总参数为384M。3D VAE在Pexels和Pixabay的视频上训练了1.2M步,本地批量大小为1。训练数据主要由分辨率为256×256的17帧片段组成。为了提高图像重建精度,3D VAE中使用了因果卷积。
研发团队的训练过程分为三个阶段:阶段1(0-380k步)在8个GPU上训练,2D VAE权重冻结。目标包括重建2D VAE压缩特征,并应用身份损失以对齐3D VAE和2D VAE的特征。身份损失使收敛更快,并提高了初始图像重建质量。阶段2(380k-640k步)移除了身份损失,3D VAE被训练以细化其时间理解。阶段3(640k-1.2M步)发现2D VAE特征的重建不足以进一步改进,因此损失被替换为直接重建原始视频。此阶段使用24个GPU,并通过随机化视频长度(最多34帧)进行混合视频长度训练,提高了对不同视频时长的鲁棒性。
在前两个阶段,数据集由80%的视频和20%的图像数据组成。对于视频训练,使用17帧片段,而图像数据则通过零填充匹配输入格式。然而,研发团队发现这种方法导致非标准长度视频的模糊。阶段3中的混合长度训练有效解决了这一问题。
堆叠的VAE架构在推理过程中需要最小的内存,因为输入已经被压缩。为了提高效率,输入视频被分割成17帧片段。与另一个开源的3D VAE相比,研发团队的模型在显著降低计算成本的情况下实现了可比的性能。
研发团队的模型架构基于PixArt,一个图像扩散Transformer,其中文本使用T5文本编码器编码,并在视频和文本潜在表示之间应用交叉注意力。为了实现高效的视频生成,研发团队采用了空间-时间注意力机制,即空间-时间扩散Transformer(STDiT),灵感来自Latte,替换了对所有标记的完全注意力。具体来说,空间自注意力应用于每帧内,而时间注意力应用于相同空间位置的帧之间。
为了专注于视频生成,研发团队设计了模型以基于强大的预训练图像生成模型。模型使用PixArt-α初始化,这是一个T5条件的DiT结构,优化了高质量和高效的图像生成。新引入的时间注意力的投影层初始化为零,保留了模型在训练开始时的原始图像生成能力。时间注意力的引入使参数数量从580M翻倍到1.1B。
为了提高训练稳定性和性能,研发团队引入了几个修改。遵循大型语言模型的最佳实践,研发团队将时间注意力的正弦位置编码替换为旋转位置嵌入(RoPE),因为这更符合视频生成任务的序列预测性质。此外,受SD3启发,研发团队对所有注意力机制应用了QK归一化,以提高训练稳定性,特别是在半精度训练下。研发团队使用小epsilon(1×10^-15)进行QK归一化,这在避免训练尖峰和确保平滑优化方面非常有效。这些增强功能与空间-时间注意力机制相结合,使研发团队的模型能够从高质量图像生成无缝过渡到高效视频生成,同时在整个训练过程中保持稳定性和性能。
虽然文本到视频生成非常通用,但某些应用需要更大的控制。Transformer本质上具有适应性,可以扩展以支持图像到图像和视频到视频生成等任务。为了实现这种条件,研发团队提出了图像和视频输入的掩码策略,如图7所示。
在此策略中,指定用于条件的帧未被掩码。在前向传递过程中,这些未被掩码的帧被分配时间步为0,而其他帧保留其扩散时间步。然而,直接将此策略应用于预训练模型通常会产生次优结果,因为扩散模型尚未训练以管理单个样本中的混合时间步。
受UL2启发,研发团队通过在训练期间引入随机掩码策略来解决此问题。具体来说,帧以诸如第一帧、前k帧、最后一帧、最后k帧、前k帧和最后k帧的组合或完全随机帧的模式随机未被掩码。使用Open-Sora 1.0作为基线,研发团队实验了在50%的训练样本上应用掩码,并观察到模型在10k步后有效地学习了图像和视频条件能力,对文本到视频性能的影响最小。较低的掩码概率(例如30%)导致条件效果降低。因此,研发团队从头开始预训练模型时采用了此掩码策略。
为了进一步增强模型的控制能力,研发团队将分数附加到字幕中,将其作为额外的条件输入。这些分数包括美学评分、运动评分和相机运动描述符。例如,一个视频的美学评分为5.5,运动评分为10,检测到的相机运动为“向左平移”的字幕将格式化为:[原始字幕] 美学评分:5.5,运动评分:10,相机运动:向左平移。在推理过程中,这些分数也可以调整以影响视频生成。对于相机运动条件,研发团队手动标记了13,000个高置信度片段。
这种方法为模型提供了对条件输入的细致理解,提高了其在各种任务中生成高质量、上下文感知视频的能力。
训练视频生成模型需要大量的计算资源。为了优化效率,研发团队适应了预训练的图像生成模型到视频生成模型,并采用了多阶段训练策略。具体来说,研发团队使用流匹配,学习率为5×10^-5。整个训练过程跨越68k步,需要大约35,000 H100 GPU小时。这些方法显著降低了训练成本,同时实现了高质量的视频生成性能。
正如Sora报告中所强调的,使用原始分辨率、宽高比和视频长度进行训练可以提高采样灵活性,并增强构图和取景。为了实现这一目标,研发团队评估了三种方法:
NaViT:此方法通过掩码支持同一批次内的动态大小,效率损失最小。然而,其实现复杂,可能无法充分利用Flash Attention等优化内核。填充(FiT):此方法通过将较小分辨率填充到最大分辨率来支持同一批次内的动态大小。虽然简单,但填充会导致不同分辨率的低效内存使用。桶(SDXL,PixArt):此方法通过将样本分组到预定义的“桶”中来支持不同批次间的动态大小。在每个批次内,分辨率、帧数和宽高比是固定的。桶化避免了掩码或填充的复杂性,并受益于对统一大小输入的优化操作。然而,它限制了灵活性到一组固定的大小。为了简单和高效,研发团队采用了基于桶的方法。研发团队预定义了一组固定的分辨率、宽高比和帧长度,并相应地将样本分配到桶中。每个桶定义为(分辨率、帧数、宽高比)的三元组,覆盖大多数常见的视频格式。在每个训练周期之前,数据集被洗牌,样本被分配到适合其分辨率和帧长度的最大桶。
为了进一步优化计算资源,研发团队为每个桶引入了两个额外属性:保留在桶中的概率和批量大小。根据概率,高分辨率视频被下采样到较低分辨率,有效降低了计算成本。批量大小按桶调整以平衡GPU负载,确保高效的资源利用。通过微调这些参数,研发团队实现了样本在桶中的平衡分布,并提高了整体训练效率,同时保持了高质量的视频生成。
这种基于桶的策略在实现简单性和计算效率之间提供了实用的权衡,使得能够灵活训练多样化的视频分辨率和宽高比。
研发团队从PixArt-Σ 2K检查点开始,这是一个在更高分辨率下使用DDPM和SDXL VAE训练的模型。通过在较小数据集上进行微调,模型被高效地适应到视频生成任务。适应过程包括几个顺序阶段,所有阶段都在8个H100 GPU上进行。
多分辨率图像生成:训练模型处理从144p到2K的分辨率,20k步。QK归一化集成:添加QK归一化以提高稳定性,18k训练步。过渡到整流流:从离散时间DDPM转移到连续时间整流流,10k训练步。增强整流流训练:结合logit-norm采样和分辨率感知时间步采样,训练33k步。较小的AdamW epsilon:遵循SD3,使用减小的epsilon(1×10^-15)与QK归一化以提高稳定性,训练8k步。新VAE和FPS条件:用Open-Sora的VAE替换原始VAE,将FPS条件添加到时间步条件中,训练25k步。对每个通道进行归一化被证明对整流流训练至关重要。时间注意力块:添加零初始化的时间注意力块,最初在图像上训练3k步。时间块的掩码策略:使用掩码策略专注于视频的时间注意力块,训练38k步。完成此适应后,模型保留了生成高质量图像的能力,同时获得了视频生成的多个好处。
加速训练和推理:整流流将采样步数从100减少到30,显著减少了推理时间。增强稳定性:QK归一化使优化更加激进,提高了训练效率。高效时间压缩:新VAE将时间维度压缩4倍,降低了计算成本。分辨率灵活性:模型可以生成从144p到2K的多种分辨率的视频,支持多样化的用例。这种全面的适应不仅增强了模型的视频生成能力,还确保了高效和可扩展的训练,为开源扩散基视频生成设定了新标准。
为了在有限的计算预算内优化性能,研发团队仔细组织了训练数据的质量,并将训练过程分为三个阶段。模型在12x8 GPU设置上训练了大约两周,完成了约70k步。
在第一阶段,模型在Webvid-10M数据集(40k小时视频)上训练了30k步(2个周期)。该数据集主要包含分辨率低于360p且有水印的视频,非常适合初始训练。研发团队专注于分辨率为240p和360p、时长为2到16秒的视频。使用原始数据集字幕进行训练。
在第二阶段,研发团队在Panda-70M数据集上训练模型。鉴于该数据集的质量参差不齐,研发团队使用了官方的30M子集,过滤后仅保留美学评分高于4.5的视频,结果得到20M子集(41k小时)。训练主要集中于360p和480p分辨率,训练23k步,相当于0.5个周期。尽管此训练阶段未完全完成,但它为模型的更广泛使用提供了足够的改进。
最后阶段涉及来自不同来源的约2M高质量视频片段,总时长为5k小时。MiraData和Vript的视频包括由GPT生成的字幕,其他来源则使用PLLaVA生成字幕。此阶段专注于更高分辨率(720p和1080p),以增强模型处理更大分辨率的能力。训练期间应用了25%的掩码比率,训练15k步(约2个周期)。
为了验证,研发团队从Pixabay采样了1k个视频来评估模型的性能。计算了不同长度(2s、4s、8s、16s)和不同分辨率(144p、240p、360p、480p、720p)的图像和视频的评估损失。损失在每个配置的10个等距时间步上平均。
研发团队还跟踪了训练期间的VBench分数。VBench是一个用于评估短视频生成的自动化基准。分数使用240p 2秒视频计算,提供了模型进展的额外验证。评估损失和VBench分数都证实了模型性能在整个训练过程中的持续改进。训练期间的VBench分数和验证损失如图9所示。
更多视频生成样本可在https://hpcattech.github.io/Open-Sora/ 查看。表2展示了各种模型的VBench分数,表明Open-Sora在开源模型中实现了最先进的视频生成性能。
Open-Sora代表了开源视频生成的重要一步,提供了一个包括数据处理、训练代码和模型权重的全面框架。通过成功复现Sora报告中的关键技术,并实现生成长达16秒、分辨率高达720p且具有可控运动动态的高质量视频,Open-Sora使先进的视频生成技术民主化。这一举措不仅促进了社区合作,还为该领域的未来进步奠定了基础。
试用Demo地址:https://huggingface.co/spaces/hpcai-tech/open-sora
不过好像服务挂了,等过两天再试吧。
可以去Gallery看看,效果很不错的:https://hpcaitech.github.io/Open-Sora/
来源:北方的郎