Open-Sora 计划
该项目旨在创建一个简单且可扩展的代码库,以复现 Sora(OpenAI,但我们更喜欢称其为“闭源AI”)。我们希望开源社区能够为该项目贡献力量。欢迎提交Pull request!当前代码支持使用华为昇腾AI计算系统进行完整的训练和推理。在华为昇腾上训练的模型也能够输出与行业标准相媲美的视频质量。
本项目希望通过开源社区的力量复现Sora,由北大-兔展AIGC联合实验室共同发起,当前版本离目标差距仍然较大,仍需持续完善和快速迭代,欢迎Pull request!目前代码同时支持使用国产AI计算系统(华为昇腾)进行完整的训练和推理。基于昇腾训练出的模型,也可输出持平业界的视频质量。
如果你喜欢我们的项目,请在GitHub上为我们点赞 ⭐ 以获取最新更新。
📣 新闻
- [2024.07.24] 🔥🔥🔥 v1.2.0 版本发布!采用3D全注意力架构代替2+1D。我们发布了一款在4秒720p视频上的视频扩散模型。请查看我们最新的 报告。
- [2024.05.27] 🎉 我们推出了Open-Sora Plan v1.1.0版,大幅提升了视频质量和长度,并且完全开源!请查看我们最新的 报告。感谢 ShareGPT4Video 的能力注释长视频。
- [2024.04.09] 🤝 很高兴分享我们最新的变形延时视频生成探索:MagicTime,从延时视频中学习真实物理知识。
- [2024.04.07] 🎉🎉🎉 今天,我们很高兴地推出了Open-Sora-Plan v1.0.0版本,大大提升了视频生成质量和文本控制能力。查看我们的 报告。感谢华为NPU的支持。
- [2024.03.27] 🚀🚀🚀 我们发布了 VideoCausalVAE 报告,它支持图片和视频。以下是我们的重建视频演示。文本到视频模型即将推出。
- [2024.03.01] 🤗 我们启动了复现Sora的计划,称为Open-Sora计划!欢迎 观看 👀 这个仓库以获取最新的更新。
😍 画廊
93×1280×720文本到视频生成。为了在GitHub上播放,视频质量已被压缩。
😮 亮点
Open-Sora计划在视频生成方面表现出色。
🔥 高性能CausalVideoVAE,但训练成本更低
- 高压缩比,性能优异,能够 将视频压缩256倍 (4×8×8)。因果卷积支持同时对图像和视频进行推理,但只需要 1个节点来训练。
🚀 基于3D注意力的视频扩散模型,联合学习时空特征。
- 使用 3D全注意力架构 而不是2+1D模型,3D注意力能够更好地捕捉联合的时空特征。
🤗 演示
Gradio 网络界面
强烈推荐通过以下命令尝试我们的网络演示。
python -m opensora.serve.gradio_web_server --model_path "path/to/model" --ae_path "path/to/causalvideovae"
ComfyUI
即将推出...
🐳 资源
版本 | 架构 | 扩散模型 | CausalVideoVAE | 数据 |
---|---|---|---|---|
v1.2.0 | 3D | 93x720p, 29x720p[1], 93x480p[1,2], 1x480p | Anysize | Annotations |
v1.1.0 | 2+1D | 221x512x512, 65x512x512 | Anysize | Data and Annotations |
v1.0.0 | 2+1D | 65x512x512, 65x256x256, 17x256x256 | Anysize | Data and Annotations |
[1] 请注意,v1.2.0 29×720p和93×480p的权重训练于Panda70M,尚未经过最终高质量数据微调,因此可能会出现水印。
[2] 我们从93×720p微调了3.5k步以获得93×480p供社区研究使用。
[!警告]
🚨 对于1.2.0版本,我们不再支持2+1D模型。
⚙️ 要求和安装
- 克隆此仓库并导航到Open-Sora-Plan文件夹
git clone https://github.com/PKU-YuanGroup/Open-Sora-Plan
cd Open-Sora-Plan
- 安装所需包 我们推荐如下要求。
- Python >= 3.8
- Pytorch >= 2.1.0
- CUDA Version >= 11.7
conda create -n opensora python=3.8 -y
conda activate opensora
pip install -e .
- 安装用于训练的附加包
pip install -e ".[train]"
- 安装可选要求,如静态类型检查:
pip install -e '.[dev]'
🗝️ 训练与验证
🗜️ CausalVideoVAE
数据准备
训练数据的组织很简单。我们只需将所有视频递归放入一个目录中。当使用多个数据集训练时,这会使训练更加方便。
训练数据集
|——子数据集1
|——子子数据集1
|——视频1.mp4
|——视频2.mp4
......
|——子子数据集2
|——视频3.mp4
|——视频4.mp4
......
|——子数据集2
|——视频5.mp4
|——视频6.mp4
......
|——视频7.mp4
|——视频8.mp4
训练
bash scripts/causalvae/train.sh
我们介绍训练的重要参数。
Argparse | 用途 |
---|---|
训练大小 | |
--num_frames | 用于训练视频的帧数 |
--resolution | 输入到VAE的分辨率 |
--batch_size | 每个GPU的本地批大小 |
--sample_rate | 加载训练视频时的帧间隔 |
数据处理 | |
--video_path | 数据集的路径 |
加载权重 | |
--model_config | 模型配置文件的路径。如果您想从头开始训练,请使用此参数。 |
--pretrained_model_name_or_path | 包含模型检查点及其配置的目录。使用此参数将仅加载权重,但不会加载优化器的状态 |
--resume_from_checkpoint | 从检查点恢复训练过程,包括权重和优化器的路径。 |
推理
bash scripts/causalvae/rec_video.sh
我们介绍推理的重要参数。
Argparse | 用途 |
---|---|
输出视频大小 | |
--num_frames | 生成视频的帧数 |
--height | 生成视频的分辨率 |
--width | 生成视频的分辨率 |
数据处理 | |
--video_path | 原始视频的路径 |
--rec_path | 生成视频的路径 |
加载权重 | |
--ae_path | 模型目录的路径。一个包含用于推理的VAE检查点的目录及其模型配置文件。 |
其他 | |
--enable_tilintg | 使用平铺处理高分辨率和长时间的视频 |
--save_memory | 保存推理时的内存,但会轻微影响质量 |
评估
对于评估,您应该使用 --output_origin
保存原始视频片段。
bash scripts/causalvae/prepare_eval.sh
我们介绍推理的重要参数。
Argparse | 用途 |
---|---|
输出视频大小 | |
--num_frames | 生成视频的帧数 |
--resolution | 生成视频的分辨率 |
数据处理 | |
--real_video_dir | 原始视频的目录。 |
--generated_video_dir | 生成视频的目录。 |
加载权重 | |
--ckpt | 模型目录的路径。一个包含用于推理的VAE检查点的目录及其模型配置文件。 |
其他 | |
--enable_tilintg | 使用平铺处理高分辨率和长时间的视频。 |
--output_origin | 输出输入到VAE的原始视频片段。 |
然后,我们开始评估。我们介绍评估脚本中的重要参数。
bash scripts/causalvae/eval.sh
Argparse | 用途 |
---|---|
--metric | 度量标准,如psnr、ssim、lpips |
--real_video_dir | 原始视频的目录。 |
--generated_video_dir | 生成视频的目录。 |
📜 文本到视频
数据准备
我们使用一个 data.txt
文件来指定所有的训练数据。文件中的每一行由 DATA_ROOT
和 DATA_JSON
组成。 data.txt
的示例如下。
/path/to/data_root_1,/path/to/data_json_1.json
/path/to/data_root_2,/path/to/data_json_2.json
...
然后,我们介绍注释json文件的格式。数据的绝对路径是 DATA_ROOT
和注释json文件中 "path"
字段的连接。
对于图像
图像注释文件的格式如下。
[
{
"path": "00168/001680102.jpg",
"cap": [
"xxxxx."
],
"resolution": {
"height": 512,
"width": 683
}
},
...
]
对于视频
视频注释文件的格式如下。更多详情请参见 HF dataset。
[
{
"path": "panda70m_part_5565/qLqjjDhhD5Q/qLqjjDhhD5Q_segment_0.mp4",
"cap": [
"A man and a woman are sitting down on a news anchor talking to each other."
],
"resolution":
我们引入了一些关键参数以便定制您的训练过程。
| Argparse | 使用方法 |
|:---|:---|
|_训练大小_||
|`--num_frames 61`|用于训练不同时长的视频,例如:29,61,93,125...|
|`--max_height 640`|用于训练不同分辨率的视频|
|`--max_width 480`|用于训练不同分辨率的视频|
|_数据处理_||
|`--data /path/to/data.txt`|指定您的训练数据。|
|`--speed_factor 1.25`|加速1.25倍的视频。|
|`--drop_short_ratio 1.0`|如果不想在动态时长视频上进行训练,则丢弃所有帧数不等于`--num_frames`的视频数据。|
|`--group_frame`|如果您想在动态时长视频上进行训练,我们强烈推荐同时指定`--group_frame`,它能提高训练期间的计算效率。|
|_多阶段迁移学习_||
|`--interpolation_scale_h 1.0`|当训练基础模型(例如240p,`--max_height 240`,`--interpolation_scale_h 1.0`),并且您需要从240p的权重初始化更高分辨率的模型(如480p,高度480),您需要调整`--max_height 480`,`--interpolation_scale_h 2.0`,并将`--pretrained`设置为您的240p权重路径(path/to/240p/xxx.safetensors)。|
|`--interpolation_scale_w 1.0`|同`--interpolation_scale_h 1.0`相同|
|_加载权重_||
|`--pretrained`|通常用于在各阶段加载预训练权重,例如使用240p权重初始化480p训练。或在更换数据集时,不希望使用之前的优化器状态。|
|`--resume_from_checkpoint`|将从`--output_dir`中的最新检查点恢复训练过程。通常我们设置`--resume_from_checkpoint="latest"`,它在训练过程中意外中断时非常有用。|
|_序列并行_||
|`--sp_size 8 --train_sp_batch_size 2`|表示在8张GPU(同一个节点上的8张GPU)上运行一个批量大小为2的训练。|
> [!警告]
> <div align="left">
> <b>
> 🚨 我们有两种加载权重的方法:`--pretrained`和`--resume_from_checkpoint`。后者将会覆盖前者。
> </b>
> </div>
### 推理
我们提供了多种推理脚本以支持各种需求。我们推荐配置`--guidance_scale 7.5 --num_sampling_steps 100 --sample_method EulerAncestralDiscrete`进行采样。
**在93×720p上的推理**,我们报告了在H100上的速度。
| 大小 | 1 GPU | 8 GPUs (sp) |
|---|---|---|
|29×720p|420s/100步|80s/100步|
|93×720p|3400s/100步|450s/100步|
#### 🖥️ 1 GPU
如果您只有一张GPU,它将对每个样本依次进行推理,一个一个来。
bash scripts/text_condition/gpu/sample_t2v.sh
#### 🖥️🖥️ 多GPU
如果您想批量推理大量样本,每个GPU将推理一个样本。
bash scripts/text_condition/gpu/sample_t2v_ddp.sh
#### 🖥️🖥️ 多GPU & 序列并行
如果您想快速推理一个样本,它将利用所有GPU同时推理那个样本。
bash scripts/text_condition/gpu/sample_t2v_sp.sh
## 🖼️ 图像到视频
### 数据准备
即将推出...
### 训练
即将推出...
### 推理
即将推出...
# 💡 如何贡献
我们非常感谢您为“Open-Sora Plan”开源社区做出的贡献,帮助我们使其变得更加优越!
有关更多详情,请参阅[贡献指南](docs/Contribution_Guidelines.md)。
# 👍 致谢
* [Latte](https://github.com/Vchitect/Latte):一个优秀的2+1D视频生成模型。
* [PixArt-alpha](https://github.com/PixArt-alpha/PixArt-alpha):用于逼真文本到图像合成的扩散Transformer的快速训练。
* [ShareGPT4Video](https://github.com/InternLM/InternLM-XComposer/tree/main/projects/ShareGPT4Video):通过更好的字幕提高视频理解和生成。
* [VideoGPT](https://github.com/wilson1yan/VideoGPT):使用VQ-VAE和Transformers进行视频生成。
* [DiT](https://github.com/facebookresearch/DiT):可扩展的Transformer扩散模型。
* [FiT](https://github.com/whlzy/FiT):用于扩散模型的灵活视觉Transformer。
* [位置插值](https://arxiv.org/abs/2306.15595):通过位置插值扩展大语言模型的上下文窗口。
# 🔒 许可证
* 请参阅[许可证](LICENSE) 获取更多详情。
# ✏️ 如何引用
## BibTeX
```bibtex
@software{pku_yuan_lab_and_tuzhan_ai_etc_2024_10948109,
author = {PKU-Yuan Lab and Tuzhan AI etc.},
title = {Open-Sora-Plan},
month = apr,
year = 2024,
publisher = {GitHub},
doi = {10.5281/zenodo.10948109},
url = {https://doi.org/10.5281/zenodo.10948109}
}