我们设计并实施了Open-Sora,这是一项致力于高效制作高质量视频的计划。我们希望让所有人都能使用模型、工具和所有细节。通过采用开源原则,Open-Sora 不仅使高级视频生成技术的使用变得民主化,而且还提供了一个简化且用户友好的平台,简化了视频生成的复杂性。借助 Open-Sora,我们的目标是在内容创作领域促进创新、创造力和包容性。
[中文文档] [潞晨云|OpenSora镜像|视频教程]
- [2024.06.22] 🔥我们在潞晨云上发布了Open-Sora1.2镜像,并在B站上传了详细的使用教程
- [2024.06.17] 🔥我们发布了Open-Sora 1.2,其中包括3D-VAE,整流流和得分条件。视频质量大大提高。[模型权重] [技术报告] [公众号文章]
- [2024.04.25] 🤗 我们在 Hugging Face Spaces 上发布了 Open-Sora的Gradio演示。
- [2024.04.25] 我们发布了Open-Sora 1.1,支持2s~15s、144p 到 720p、任意比例的文本转图片、文本转视频、图片转视频、视频转视频、无限时间生成。此外,还发布了完整的视频处理管道。 [模型权重] [技术报告][公众号文章]
- [2024.03.18] 我们发布了 Open-Sora 1.0, 一个完全开源的视频生成项目。Open-Sora 1.0 支持完整的视频数据预处理流程、加速训练 、推理等。我们的模型只需 3 天的训练就可以生成 2 秒的 512x512 视频。 [模型权重] [公众号文章] [技术报告]
- [2024.03.04] Open-Sora 提供培训,成本降低 46%。 [公众号文章]
🔥 您可以在HuggingFace上的 🤗 Gradio应用程序上体验Open-Sora. 我们的画廊中提供了更多示例.
4s 720×1280 | 4s 720×1280 | 4s 720×1280 |
---|---|---|
OpenSora 1.0 Demo
视频经过降采样以.gif用于显示。单击查看原始视频。提示经过修剪以用于显示,请参阅此处查看完整提示。
- 📍 Open-Sora 1.2 发布。模型权重可在此处查看。有关更多详细信息,请参阅我们的**技术报告 v1.2** 。
- ✅ 支持整流流调度。
- ✅ 训练我们的 3D-VAE 进行时间维度压缩。
- 📍 Open-Sora 1.1发布。模型权重可在此处获得。它针对0s~15s、144p 到 720p、各种宽高比的视频进行训练。有关更多讨论,请参阅我们的**技术报告 v1.1** 。
- 🔧 数据处理流程 v1.1发布,提供从原始视频到(文本,视频片段)对的自动处理流程,包括场景剪切$\rightarrow$过滤(美学、光流、OCR 等)$\rightarrow$字幕$\rightarrow$管理。使用此工具,您可以轻松构建视频数据集。
- ✅ 改进的 ST-DiT 架构包括 rope 位置编码、qk 范数、更长的文本长度等。
- ✅ 支持任意分辨率、纵横比和时长(包括图像)的训练。
- ✅ 支持图像和视频调节以及视频编辑,从而支持动画图像,连接视频等。
- 📍 Open-Sora 1.0发布。模型权重可在此处获得。仅使用 400K 视频片段和 200 个 H800 天(相比稳定视频扩散中的 152M 样本),我们就能生成 2s 512×512 视频。有关更多讨论,请参阅我们的**技术报告 v1.0**。
- ✅从图像扩散模型到视频扩散模型的三阶段训练。我们为每个阶段提供权重。
- ✅ 支持训练加速,包括加速 Transformer、更快的 T5 和 VAE 以及序列并行。Open-Sora 在 64x512x512 视频上训练时可将训练速度提高55%。详细信息位于训练加速.md。
- 🔧 数据预处理流程 v1.0,包括 下载, 视频剪辑, 和 字幕 工具. 我们的数据收集计划可在 数据集.md中找到.
查看更多
✅ 我们发现VideoGPT的 VQ-VAE质量较低,因此采用了Stability-AI中的更好的 VAE 。我们还发现时间维度的修补会降低质量。有关更多讨论,请参阅我们的**技术报告v1.0**。 ✅ 我们研究了不同的架构,包括 DiT、Latte 和我们提出的 STDiT。我们的STDiT在质量和速度之间实现了更好的平衡。请参阅我们的 **技术报告v1.0**以了解更多讨论。 ✅ 支持剪辑和T5文本调节。 ✅ 通过将图像视为单帧视频,我们的项目支持在图像和视频上训练 DiT(例如 ImageNet 和 UCF101)。有关更多说明,请参阅commands.md 。 ✅ 支持使用DiT, Latte, 和 PixArt.的官方权重进行推理。 ✅ 重构代码库。查看structure.md以了解项目结构以及如何使用配置文件。
查看更多
- 训练视频 VAE 并使我们的模型适应新的 VAE
- 缩放模型参数和数据集大小
- 纳入更好的调度程序(整流流程)
- 评估流程
- 完成数据处理流程(包括密集光流、美学评分、文本-图像相似度等)。有关更多信息,请参阅数据集
- 支持图像和视频调节
- 支持可变的纵横比、分辨率和持续时间
下面列出了其他有用的文档和链接。
- 报告: 技术报告 v1.2, 技术报告 v1.1, 技术报告 v1.0, 训练加速.md
- Repo 结构: 结构.md
- 配置文件说明: config.md
- Useful commands: commands.md
- 数据处理管道和数据集: datasets.md
- 每个数据处理工具的 README: dataset conventions and management, scene cutting, scoring, caption
- 评估: eval
- 画廊: gallery
对于 CUDA 12.1,您可以使用以下命令安装依赖项。否则,请参阅安装以获取有关不同 cuda 版本的更多说明以及数据预处理的其他依赖项。
# create a virtual env and activate (conda as an example)
conda create -n opensora python=3.9
conda activate opensora
# install torch, torchvision and xformers
pip install -r requirements/requirements-cu121.txt
# download the repo
git clone https://github.com/hpcaitech/Open-Sora
cd Open-Sora
# the default installation is for inference only
pip install -v . # for development mode, `pip install -v -e .`
(Optional, recommended for fast speed, especially for training) To enable `layernorm_kernel` and `flash_attn`, you need to install `apex` and `flash-attn` with the following commands.
```bash
# install flash attention
# set enable_flash_attn=False in config to disable flash attention
pip install packaging ninja
pip install flash-attn --no-build-isolation
# install apex
# set enable_layernorm_kernel=False in config to disable apex
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings "--build-option=--cpp_ext" --config-settings "--build-option=--cuda_ext" git+https://github.com/NVIDIA/apex.git
运行以下命令从提供的Dockerfile 构建docker 镜像。
docker build -t opensora .
运行以下命令以交互模式启动docker容器。
docker run -ti --gpus all -v .:/workspace/Open-Sora opensora
分辨率 | 模型大小 | 数据 | 迭代次数 | 批次大小 | 网址 |
---|---|---|---|---|---|
Diffusion | 1.1B | 30M | 70k | 动态大小 | 🔗 |
VAE | 384M | 3M | 1M | 8 | 🔗 |
请参阅我们的**report 1.2**以了解更多信息。
查看更多
分辨率 | M | Data | #iterations | Batch Size | URL |
---|---|---|---|---|---|
mainly 144p & 240p | 700M | 10M videos + 2M images | 100k | dynamic | 🔗 |
144p to 720p | 700M | 500K HQ videos + 1M images | 4k | dynamic | 🔗 |
请参阅我们的 报告 1.1 以了解更多信息。
查看更多
| 分辨率 | 模型大小 | 数据 | 迭代次数 | 批量大小 | GPU 天数 (H800) | 网址 | ---------- | ---------- | ------ | ----------- | ---------- | --------------- | | 16×512×512 | 700M | 20K HQ | 20k | 2×64 | 35 | 🔗 | | 16×256×256 | 700M | 20K HQ | 24k | 8×64 | 45 | 🔗 | | 16×256×256 | 700M | 366K | 80k | 8×64 | 117 | 🔗 |
训练流程: 16x256x256
我们的模型权重部分由 PixArt-α初始化,参数数量为724M.更多信息请参阅 技术报告v1.0。数据集相关信息请参阅数据集文件. HQ 表示高质量.
🔥 您可以在Hugging Face 上的🤗 Gradio 应用程序上在线体验Open-Sora。【由于GPU资源不足,已失效】
如果您想在本地部署 gradio,我们还在这个存储库中提供了一个Gradio 应用程序 ,您可以使用以下命令启动一个交互式 Web 应用程序来体验使用 Open-Sora 生成视频。
pip install gradio spaces
python gradio/app.py
这将在您的本地主机上启动 Gradio 应用程序。如果您想了解有关 Gradio 应用程序的更多信息,可以参考Gradio README。
要启用提示增强和其他语言输入(例如中文输入),您需要OPENAI_API_KEY在环境中进行设置。查看OpenAI的文档以获取您的 API 密钥。
export OPENAI_API_KEY=YOUR_API_KEY
在 Gradio 应用程序中,基本选项如下:
生成视频最简单的方式是输入文本提示,然后点击“生成视频”按钮(如果找不到,请向下滚动)。生成的视频将显示在右侧面板中。勾选“使用 GPT4o 增强提示”将使用 GPT-4o 来细化提示,而“随机提示”按钮将由 GPT-4o 为您生成随机提示。由于 OpenAI 的 API 限制,提示细化结果具有一定的随机性。
然后,你可以选择生成视频的分辨率、时长、长宽比。不同的分辨率和视频长度会影响视频生成速度。在 80G H100 GPU 上,生成速度和峰值内存使用量为:
分辨率 | 图像 | 2秒 | 4秒 | 8秒 | 16秒 |
---|---|---|---|---|---|
360p | 3s, 24G | 18s, 27G | 31s, 27G | 62s, 28G | 121s, 33G |
480p | 2s, 24G | 29s, 31G | 55s, 30G | 108s, 32G | 219s, 36G |
720p | 6s, 27G | 68s, 41G | 130s, 39G | 260s, 45G | 547s, 67G |
注意,除了文本转视频,你还可以使用图片转视频。你可以上传图片,然后点击“生成视频”按钮,生成以图片为第一帧的视频。或者,你可以填写文本提示,然后点击“生成图片”按钮,根据文本提示生成图片,然后点击“生成视频”按钮,根据同一模型生成的图片生成视频。
然后您可以指定更多选项,包括“运动强度”、“美学”和“相机运动”。如果未选中“启用”或选择“无”,则不会将信息传递给模型。否则,模型将生成具有指定运动强度、美学分数和相机运动的视频。
对于美学分数,我们建议使用高于 6 的值。对于运动强度,较小的值将导致更平滑但动态性较差的视频,而较大的值将导致更动态但可能更模糊的视频。因此,您可以尝试不使用它,然后根据生成的视频进行调整。对于相机运动,有时模型无法很好地遵循指令,我们正在努力改进它。
您还可以调整“采样步数”,这是去噪的次数,与生成速度直接相关。小于 30 的数字通常会导致较差的生成结果,而大于 100 的数字通常不会有明显的改善。“种子”用于可重复性,您可以将其设置为固定数字以生成相同的视频。“CFG 比例”控制模型遵循文本提示的程度,较小的值会导致视频更随机,而较大的值会导致视频更遵循文本(建议为 7)。
对于更高级的用法,您可以参考Gradio README.
基础的命令行推理:
# text to video
python scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p --aspect-ratio 9:16 \
--prompt "a beautiful waterfall"
您可以向命令行添加更多选项来定制生成。
python scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p --aspect-ratio 9:16 \
--num-sampling-steps 30 --flow 5 --aes 6.5 \
--prompt "a beautiful waterfall"
对于图像到视频生成和其他功能,API 与 Open-Sora 1.1 兼容。请参阅[此处]](commands.md)了解更多说明。
如果您的安装不包含 apex
和 flash-attn
, 则需要在配置文件中或通过以下命令禁用它们。
python scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p \
--layernorm-kernel False --flash-attn False \
--prompt "a beautiful waterfall"
要启用序列并行,您需要使用 torchrun
来运行推理脚本。以下命令将使用 2 个 GPU 运行推理。
# text to video
CUDA_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 scripts/inference.py configs/opensora-v1-2/inference/sample.py \
--num-frames 4s --resolution 720p --aspect-ratio 9:16 \
--prompt "a beautiful waterfall"
我们发现 GPT-4o 可以细化提示并提高生成视频的质量。利用此功能,您还可以使用其他语言(例如中文)作为提示。要启用此功能,您需要在环境中准备您的 openai api 密钥:
export OPENAI_API_KEY=YOUR_API_KEY
然后您可以用 --llm-refine True
启用GPT-4o进行提示细化以完成推理。
查看更多
由于 Open-Sora 1.1 支持动态输入大小的推理,因此您可以将输入大小作为参数传递。
# text to video
python scripts/inference.py configs/opensora-v1-1/inference/sample.py --prompt "A beautiful sunset over the city" --num-frames 32 --image-size 480 854
如果您的安装不包含apex
和 flash-attn
,则需要在配置文件中或通过以下命令禁用它们。
python scripts/inference.py configs/opensora-v1-1/inference/sample.py --prompt "A beautiful sunset over the city" --num-frames 32 --image-size 480 854 --layernorm-kernel False --flash-attn False
请参阅此处了解更多说明,包括文本转图像、图像转视频、视频转视频和无限时间生成。
查看更多
我们还提供了离线推理脚本。运行以下命令生成样本,所需的模型权重将自动下载。要更改采样提示,请修改传递给的 txt 文件--prompt-path。请参阅此处以自定义配置。
# Sample 16x512x512 (20s/sample, 100 time steps, 24 GB memory)
torchrun --standalone --nproc_per_node 1 scripts/inference.py configs/opensora/inference/16x512x512.py --ckpt-path OpenSora-v1-HQ-16x512x512.pth --prompt-path ./assets/texts/t2v_samples.txt
# Sample 16x256x256 (5s/sample, 100 time steps, 22 GB memory)
torchrun --standalone --nproc_per_node 1 scripts/inference.py configs/opensora/inference/16x256x256.py --ckpt-path OpenSora-v1-HQ-16x256x256.pth --prompt-path ./assets/texts/t2v_samples.txt
# Sample 64x512x512 (40s/sample, 100 time steps)
torchrun --standalone --nproc_per_node 1 scripts/inference.py configs/opensora/inference/64x512x512.py --ckpt-path ./path/to/your/ckpt.pth --prompt-path ./assets/texts/t2v_samples.txt
# Sample 64x512x512 with sequence parallelism (30s/sample, 100 time steps)
# sequence parallelism is enabled automatically when nproc_per_node is larger than 1
torchrun --standalone --nproc_per_node 2 scripts/inference.py configs/opensora/inference/64x512x512.py --ckpt-path ./path/to/your/ckpt.pth --prompt-path ./assets/texts/t2v_samples.txt
速度是在 H800 GPU 上测试的。有关使用其他型号进行推理,请参阅此处 了解更多说明。要降低内存使用量,请vae.micro_batch_size
在配置中设置较小的值(略低采样速度)。
高质量的数据对于训练良好的生成模型至关重要。为此,我们建立了完整的数据处理流程,可以将原始视频无缝转换为高质量的视频-文本对。流程如下所示。有关详细信息,请参阅数据处理。另请查看我们使用的数据集。
训练过程与Open-Sora 1.1相同。
# one node
torchrun --standalone --nproc_per_node 8 scripts/train.py \
configs/opensora-v1-2/train/stage1.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
# multiple nodes
colossalai run --nproc_per_node 8 --hostfile hostfile scripts/train.py \
configs/opensora-v1-2/train/stage1.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
查看更多
在文件中准备好数据后csv
,运行以下命令在单个节点上启动训练。
# one node
torchrun --standalone --nproc_per_node 8 scripts/train.py \
configs/opensora-v1-1/train/stage1.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
# multiple nodes
colossalai run --nproc_per_node 8 --hostfile hostfile scripts/train.py \
configs/opensora-v1-1/train/stage1.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
查看更多
在文件中准备好数据后csv
,运行以下命令在单个节点上启动训练。
# 1 GPU, 16x256x256
torchrun --nnodes=1 --nproc_per_node=1 scripts/train.py configs/opensora/train/16x256x256.py --data-path YOUR_CSV_PATH
# 8 GPUs, 64x512x512
torchrun --nnodes=1 --nproc_per_node=8 scripts/train.py configs/opensora/train/64x512x512.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
要在多个节点上启动训练,请根据ColossalAI准备一个主机文件,并运行以下命令。
colossalai run --nproc_per_node 8 --hostfile hostfile scripts/train.py configs/opensora/train/64x512x512.py --data-path YOUR_CSV_PATH --ckpt-path YOUR_PRETRAINED_CKPT
有关训练其他模型和高级用法,请参阅此处获取更多说明。
我们支持基于以下方面的评估:
- 验证损失
- VBenchh分数
- VBench-i2v 分数
- 批量生成以供人工评估
所有评估代码均发布在
eval
文件夹中。查看README了解更多详细信息。我们的 技术报告还提供了有关训练期间评估的更多信息。下表显示 Open-Sora 1.2 大大改进了 Open-Sora 1.0。
模型 | 总得分 | 质量得分 | 语义得分 |
---|---|---|---|
Open-Sora V1.0 | 75.91% | 78.81% | 64.28% |
Open-Sora V1.2 | 79.23% | 80.71% | 73.30% |
我们训练一个由空间 VAE 和时间 VAE 组成的 VAE 管道。有关更多详细信息,请参阅VAE 文档。在运行以下命令之前,请按照我们的安装文档安装 VAE 和评估所需的依赖项。
如果您想训练自己的 VAE,我们需要按照数据处理流程在 csv 中准备数据,然后运行以下命令。请注意,您需要根据自己的 csv 数据大小相应地调整配置文件中的训练epochs
数量。
# stage 1 training, 380k steps, 8 GPUs
torchrun --nnodes=1 --nproc_per_node=8 scripts/train_vae.py configs/vae/train/stage1.py --data-path YOUR_CSV_PATH
# stage 2 training, 260k steps, 8 GPUs
torchrun --nnodes=1 --nproc_per_node=8 scripts/train_vae.py configs/vae/train/stage2.py --data-path YOUR_CSV_PATH
# stage 3 training, 540k steps, 24 GPUs
torchrun --nnodes=3 --nproc_per_node=8 scripts/train_vae.py configs/vae/train/stage3.py --data-path YOUR_CSV_PATH
为了评估 VAE 的性能,您需要首先运行 VAE 推理来生成视频,然后计算生成的视频的分数:
# video generation
torchrun --standalone --nnodes=1 --nproc_per_node=1 scripts/inference_vae.py configs/vae/inference/video.py --ckpt-path YOUR_VAE_CKPT_PATH --data-path YOUR_CSV_PATH --save-dir YOUR_VIDEO_DIR
# the original videos will be saved to `YOUR_VIDEO_DIR_ori`
# the reconstructed videos through the pipeline will be saved to `YOUR_VIDEO_DIR_rec`
# the reconstructed videos through the spatial VAE only will be saved to `YOUR_VIDEO_DIR_spatial`
# score calculation
python eval/vae/eval_common_metric.py --batch_size 2 --real_video_dir YOUR_VIDEO_DIR_ori --generated_video_dir YOUR_VIDEO_DIR_rec --device cuda --sample_fps 24 --crop_size 256 --resolution 256 --num_frames 17 --sample_rate 1 --metric ssim psnr lpips flolpips
感谢以下出色的贡献者:
如果您希望为该项目做出贡献,请参阅Contribution Guideline。
这里我们仅列出了部分项目,其他研究成果及数据集请参考我们的报告。
- ColossalAI: 强大的大型模型并行加速与优化系统。
- DiT: 带有 Transformer 的可扩展扩散模型。
- OpenDiT: DiT 训练的加速器。我们从 OpenDiT 中采用了有价值的训练进度加速策略。
- PixArt: 一个基于 DiT 的开源文本转图像模型。
- Latte: 尝试高效地训练视频的 DiT。
- StabilityAI VAE: 一个强大的图像 VAE 模型。
- CLIP: 一个强大的文本图像嵌入模型。
- T5: 强大的文本编码器。
- LLaVA: 基于Mistral-7B 和 Yi-34B. 的强大图像字幕模型。
- PLLaVA: 一个强大的视频字幕模型。
- MiraData:具有长持续时间和结构化字幕的大规模视频数据集。
我们感谢他们的出色工作和对开源的慷慨贡献。
@software{opensora,
author = {Zangwei Zheng and Xiangyu Peng and Tianji Yang and Chenhui Shen and Shenggui Li and Hongxin Liu and Yukun Zhou and Tianyi Li and Yang You},
title = {Open-Sora: Democratizing Efficient Video Production for All},
month = {March},
year = {2024},
url = {https://github.com/hpcaitech/Open-Sora}
}