ColossalAI open-sora 1.0 项目技术报告 (视频生成)

2024-05-25 15:12

本文主要是介绍ColossalAI open-sora 1.0 项目技术报告 (视频生成),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目信息

  • 项目地址:https://github.com/hpcaitech/Open-Sora
  • 技术报告:
    • Open-Sora 1:https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_01.md
    • Open-Sora 1.1:https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_02.md
  • 项目介绍:
    • Open-Sora 是潞晨科技 (ColossalAI) 团队实现的一个致力于高效生产高质量视频的开源项目,旨在让所有人都能够访问先进的视频生成技术。该项目遵循开源原则,不仅使视频生成技术的访问民主化,还提供了一个简化和用户友好的平台,以简化视频制作的复杂性。Open-Sora 的目标是在内容创作领域激发创新、创造力和包容性。
    • 目前发布了两个版本
      • Open-Sora 1.0:生成 512x512 的 2s 视频
      • Open-Sora 1.1:生成 2s~15s, 144p to 720p, any aspect ratio,支持 text-to-video, image-to-video, video-to-video, infinite time generation 等模式

Open-Sora 1.0 技术报告

效果展示

text prompt: A serene night scene in a forested area. […] The video is a time-lapse, capturing the transition from day to night, with the lake and forest serving as a constant backdrop.

请添加图片描述
从生成的效果来看指令跟随能力一般,day to night 的效果一般

VAE 选择

  • 为了降低计算成本,希望利用现有的 VAE 模型。Sora 使用空间-时间 (spatial-temporal) VAE 来减少时间维度。然而,我们发现没有开源的高质量空间-时间 VAE 模型。 MAGVIT 的 4x4x4 倍数下采样 VAE 没有开源,而 VideoGPT 的 2x4x4 VAE 在我们的实验中质量较低。因此,我们决定在我们第一个版本中使用 2D VAE(来自Stability-AI)。

attention

  • 视频训练涉及大量的 token。考虑到 24 帧/秒的 1 分钟视频,我们有 1440 帧。通过 VAE 下采样 4 倍和补丁大小下采样 2 倍,我们有 1440x1024≈1.5M token。对 1.5M token 进行完全关注 (full attention) 将导致巨大的计算成本。因此,我们遵循 Latte 的方法使用空间-时间注意力 (spatial-temporal attention) 来降低成本。

  • 如图所示,我们在 STDiT(ST 代表空间-时间)的每个空间注意力之后插入了一个时间注意力。这类似于 Latte 论文中的变体 3。然而,我们没有为这些变体控制类似数量的参数。尽管 Latte 的论文声称他们的变体比变体 3 更好,但我们在 16x256x256 视频上的实验表明,在相同数量的迭代下,性能排名为:DiT(完整)> STDiT(顺序)> STDiT(并行)≈ Latte。因此,出于效率考虑,我们选择了STDiT(顺序)。

    • STDiT(顺序) 如下图所示,就是现在空间维度做 attention,然后再在时间维度上做 attention
      在这里插入图片描述
  • 与直接在 DiT 上应用全注意力相比,随着帧数的增加,STDiT 更加高效。训练速度在应用加速技术后的8块H800 GPU上测量,GC 表示梯度检查点 (gradient checkpointing)。

ModelSettingThroughput (sample/s/GPU)Throughput (tokens/s/GPU)
DiT16x256 (4k)7.2029k
STDiT16x256 (4k)7.0028k
DiT16x512 (16k)0.8514k
STDiT16x512 (16k)1.4523k
DiT (GC)64x512 (65k)0.085k
STDiT (GC)64x512 (65k)0.4025k
STDiT (GC, sp=2)360x512 (370k)0.1018k

随着 Video-VAE 对时间维度进行4倍下采样,一个每秒 24 帧的视频有 450 帧。STDiT(每秒 28k 个token)在视频上与 DiT 在图像上的速度(最高每秒 45k 个token)之间的差距主要来自 T5 和 VAE 编码以及时间注意力。

图像模型初始化

  • 为了专注于视频生成,我们希望基于一个强大的图像生成模型来训练模型。PixArt-α 是一个训练效率高、质量高的图像生成模型,具有 T5-conditioned 的 DiT 结构。我们用 PixArt-α 初始化我们的模型,并用零初始化插入的时间注意力的投影层。这种初始化在开始时保留了模型的图像生成能力,而 Latte 的架构则不能。插入的注意力将参数数量从 580M 增加到 724M。
    在这里插入图片描述

训练分辨率

借鉴 PixArt-α 和 Stable Video Diffusion 的成功,我们还采用了渐进式训练策略:在 366K 预训练数据集上进行 16x256x256 的训练,然后在 20K 数据集上进行 16x256x256、16x512x512 和 64x512x512 的训练。通过缩放位置嵌入,这种策略大大降低了计算成本。

时间下采样

我们还尝试在 DiT 中使用 3D 块嵌入器。然而,在时间维度上 2 倍下采样后,生成的视频质量较低。因此,我们将下采样留给我们下一版本的空间 VAE。目前,我们每 3 帧采样一次,进行 16 帧训练,每 2 帧采样一次,进行 64 帧训练。

数据是高质量的关键

我们发现,数据的数量和质量对生成视频的质量有很大的影响,甚至比模型架构和训练策略的影响还要大。目前,我们只准备了来自 HD-VG-130M 的第一批分割(366K视频片段)。这些视频的质量差异很大,而且 caption 也不够准确。因此,我们进一步从 Pexels 收集了 20k 相对高质量的视频, Pexels 提供免费许可的视频。我们使用 LLaVA(一个图像标题生成模型)对视频进行 caption 标注,使用三个帧和一个设计好的 prompt。通过设计好的 prompt,LLaVA可以生成高质量的标题。
在这里插入图片描述

训练细节

由于训练预算有限,我们只进行了一些探索。我们发现学习率 1e-4 过大,后来降低到 2e-5。当以大批量训练时,我们发现 fp16 比 bf16 不稳定,可能导致生成失败。因此,我们切换到 bf16 进行 64x512x512 的训练。对于其他超参数,我们遵循了之前的工作

  • loss 降的似乎不太好
    在这里插入图片描述在这里插入图片描述

总结

  • open sora 1.0 做到的效果和 sora 还有显著差距,不过其实通过借助开源的 SD VAE 工作等基本把整个视频生成的框架走通了,包括 STDiT、高质量数据生成等各个环节。后续对各个模块进一步更新可以实现更好的效果

这篇关于ColossalAI open-sora 1.0 项目技术报告 (视频生成)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001859

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Ollama整合open-webui的步骤及访问

《Ollama整合open-webui的步骤及访问》:本文主要介绍如何通过源码方式安装OpenWebUI,并详细说明了安装步骤、环境要求以及第一次使用时的账号注册和模型选择过程,需要的朋友可以参考... 目录安装环境要求步骤访问选择PjrIUE模型开始对话总结 安装官方安装地址:https://docs.

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项