📷 EasyAnimate | 高分辨率和长视频生成的端到端解决方案
😊 EasyAnimate 是一个用于生成高分辨率和长视频的端到端解决方案。我们可以训练基于 transformer 的扩散生成器,训练用于处理长视频的 VAE,以及预处理元数据。
😊 基于类似 Sora 的结构和 DIT,我们使用 transformer 作为视频生成的扩散器。我们基于动作模块、u-vit 和 slice-vae 构建了 easyanimate。未来,我们将尝试更多的训练方案来改进效果。
😊 欢迎使用!
English | 简体中文
目录
简介
EasyAnimate 是一个基于 transformer 架构的管道,可用于生成 AI 照片和视频,训练 Diffusion Transformer 的基线模型和 Lora 模型。我们支持直接从预训练的 EasyAnimate 模型进行预测,生成不同分辨率的视频,24 fps 的 6 秒视频(1 ~ 144 帧,未来我们将支持更长的视频)。我们还支持用户训练自己的基线模型和 Lora 模型来执行特定的风格转换。
我们将支持从不同平台快速启动,请参考快速开始。
最新动态:
- 支持 ComfyUI,详情请参考 ComfyUI README。[ 2024.07.12 ]
- 更新至 v3 版本,支持最高 720p 144 帧(960x960,6秒,24fps)视频生成,并支持文本和图像生成视频模型。[ 2024.07.01 ]
- ModelScope-Sora "数据导演"创意冲刺赛已宣布,使用 EasyAnimate 作为训练骨干来研究数据预处理的影响。请访问比赛的官方网站了解更多信息。[ 2024.06.17 ]
- 更新至 v2 版本,支持最多 144 帧(768x768,6秒,24fps)的生成。[ 2024.05.26 ]
- 创建代码!现在支持 Windows 和 Linux。[ 2024.04.12 ]
功能:
这些是我们生成的结果 图库(点击下方图片查看视频):
我们的 UI 界面如下:
快速开始
1. 云端使用:AliyunDSW/Docker
a. 从 AliyunDSW
DSW 有免费的 GPU 时间,用户可以申请一次,申请后 3 个月内有效。
阿里云在 Freetier 提供免费 GPU 时间,获取后在阿里云 PAI-DSW 中使用,5 分钟内即可启动 EasyAnimate!
b. 从 ComfyUI
我们的 ComfyUI 如下,详情请参考 ComfyUI README。
c. 从 docker
如果您使用 docker,请确保您的机器上已正确安装显卡驱动和 CUDA 环境。
然后按以下方式执行命令:
EasyAnimateV3:
# 拉取镜像
docker pull mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:easyanimate
# 进入镜像
docker run -it -p 7860:7860 --network host --gpus all --security-opt seccomp:unconfined --shm-size 200g mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:easyanimate
# 克隆代码
git clone https://github.com/aigc-apps/EasyAnimate.git
# 进入 EasyAnimate 目录
cd EasyAnimate
# 下载权重
mkdir models/Diffusion_Transformer
mkdir models/Motion_Module
mkdir models/Personalized_Model
wget https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512.tar -O models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512.tar
cd models/Diffusion_Transformer/
tar -xvf EasyAnimateV3-XL-2-InP-512x512.tar
cd ../../
<details>
<summary>(已过时)EasyAnimateV2:</summary>
拉取镜像
docker pull mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:easyanimate
进入镜像
docker run -it -p 7860:7860 --network host --gpus all --security-opt seccomp:unconfined --shm-size 200g mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:easyanimate
克隆代码
git clone https://github.com/aigc-apps/EasyAnimate.git
进入EasyAnimate目录
cd EasyAnimate
下载权重
mkdir models/Diffusion_Transformer mkdir models/Motion_Module mkdir models/Personalized_Model
wget https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Diffusion_Transformer/EasyAnimateV2-XL-2-512x512.tar -O models/Diffusion_Transformer/EasyAnimateV2-XL-2-512x512.tar
cd models/Diffusion_Transformer/ tar -xvf EasyAnimateV2-XL-2-512x512.tar cd ../../
</details>
<details>
<summary>(已过时)EasyAnimateV1:</summary>
拉取镜像
docker pull mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:easyanimate
进入镜像
docker run -it -p 7860:7860 --network host --gpus all --security-opt seccomp:unconfined --shm-size 200g mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:easyanimate
克隆代码
git clone https://github.com/aigc-apps/EasyAnimate.git
进入EasyAnimate目录
cd EasyAnimate
下载权重
mkdir models/Diffusion_Transformer mkdir models/Motion_Module mkdir models/Personalized_Model
wget https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512.tar -O models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512.tar wget https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-768x768.tar -O models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-768x768.tar wget https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-960x960.tar -O models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-960x960.tar
cd models/Diffusion_Transformer/ tar -xvf EasyAnimateV3-XL-2-InP-512x512.tar tar -xvf EasyAnimateV3-XL-2-InP-768x768.tar tar -xvf EasyAnimateV3-XL-2-InP-960x960.tar cd ../../
</details>
### 2. 本地安装:环境检查/下载/安装
#### a. 环境检查
我们已在以下环境中验证了EasyAnimate的执行:
Linux详细信息:
- 操作系统: Ubuntu 20.04, CentOS
- Python版本: py3.10 & py3.11
- PyTorch版本: torch2.2.0
- CUDA版本: 11.8
- CUDNN版本: 8+
- GPU型号: Nvidia-V100 16G & Nvidia-A10 24G & Nvidia-A100 40G & Nvidia-A100 80G
我们需要大约60GB的可用磁盘空间(用于保存权重文件),请检查确认!
不同显存可以生成的视频大小包括:
| GPU显存 | 384x672x72 | 384x672x144 | 576x1008x72 | 576x1008x144 | 720x1280x72 | 720x1280x144 |
|----------|----------|----------|----------|----------|----------|----------|
| 12GB | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ❌ | ❌ |
| 16GB | ✅ | ✅ | ⭕️ | ⭕️ | ⭕️ | ❌ |
| 24GB | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| 40GB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 80GB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
✅ 表示可以在low_gpu_memory_mode=False下运行,⭕️ 表示可以在low_gpu_memory_mode=True下运行,❌ 表示无法运行。当low_gpu_memory_mode=True时,运行速度会较慢。GPU需要支持bfloat16预测。
#### b. 权重
我们最好将[权重](#model-zoo)放置在指定路径:
EasyAnimateV3:
📦 models/ ├── 📂 Diffusion_Transformer/ │ └── 📂 EasyAnimateV3-XL-2-InP-512x512/ ├── 📂 Personalized_Model/ │ └── 你训练的trainformer模型 / 你训练的lora模型 (用于UI加载)
<details>
<summary>(已过时)EasyAnimateV2:</summary>
📦 models/ ├── 📂 Diffusion_Transformer/ │ └── 📂 EasyAnimateV2-XL-2-512x512/ ├── 📂 Personalized_Model/ │ └── 你训练的trainformer模型 / 你训练的lora模型 (用于UI加载)
</details>
<details>
<summary>(已过时)EasyAnimateV1:</summary>
📦 models/ ├── 📂 Diffusion_Transformer/ │ └── 📂 PixArt-XL-2-512x512/ ├── 📂 Motion_Module/ │ └── 📄 easyanimate_v1_mm.safetensors ├── 📂 Personalized_Model/ │ ├── 📄 easyanimate_portrait.safetensors │ └── 📄 easyanimate_portrait_lora.safetensors
</details>
# 如何使用
<h3 id="video-gen">1. 推理 </h3>
#### a. 使用Python代码
- 步骤1:下载相应的[权重](#model-zoo)并将其放置在models文件夹中。
- 步骤2:在predict_t2v.py文件中修改prompt、neg_prompt、guidance_scale和seed。
- 步骤3:运行predict_t2v.py文件,等待生成结果,并将结果保存在samples/easyanimate-videos文件夹中。
- 步骤4:如果您想将其他已训练的主干网络与Lora结合使用,请根据情况修改predict_t2v.py中的predict_t2v.py和Lora_path。
#### b. 使用webui
- 步骤1:下载相应的[权重](#model-zoo)并将其放置在models文件夹中。
- 步骤2:运行app.py文件以进入图形界面。
- 步骤3:根据页面选择生成模型,填写prompt、neg_prompt、guidance_scale和seed,点击生成,等待生成结果,并将结果保存在samples文件夹中。
### 2. 模型训练
完整的EasyAnimate训练流程应包括数据预处理、Video VAE训练和Video DiT训练。其中,Video VAE训练是可选的,因为我们已经提供了预训练的Video VAE。
<h4 id="data-preprocess">a. 数据预处理</h4>
我们提供了一个通过图像数据训练Lora模型的简单演示,详情可以在[wiki](https://github.com/aigc-apps/EasyAnimate/wiki/Training-Lora)中查看。
长视频分割、清洗和描述的完整数据预处理链接可以参考视频字幕部分的[README](./easyanimate/video_caption/README.md)。
如果您想训练文本到图像和视频生成模型,需要按以下格式安排数据集:
📦 project/ ├── 📂 datasets/ │ ├── 📂 internal_datasets/ │ ├── 📂 videos/ │ │ ├── 📄 00000001.mp4 │ │ ├── 📄 00000001.jpg │ │ └── 📄 ..... │ └── 📄 json_of_internal_datasets.json
json_of_internal_datasets.json是一个标准的JSON文件。json中的file_path可以设置为相对路径,如下所示:
```json
[
{
"file_path": "videos/00000001.mp4",
"text": "一群穿着西装戴着墨镜的年轻人正在城市街道上行走。",
"type": "video"
},
{
"file_path": "train/00000001.jpg",
"text": "一群穿着西装戴着墨镜的年轻人正在城市街道上行走。",
"type": "image"
},
.....
]
您也可以将路径设置为绝对路径,如下所示:
[
{
"file_path": "/mnt/data/videos/00000001.mp4",
"text": "一群穿着西装戴着墨镜的年轻人正在城市街道上行走。",
"type": "video"
},
{
"file_path": "/mnt/data/train/00000001.jpg",
"text": "一群穿着西装戴着墨镜的年轻人正在城市街道上行走。",
"type": "image"
},
.....
]
b. Video VAE训练(可选)
Video VAE训练是一个可选选项,因为我们已经提供了预训练的Video VAE。 如果您想训练video vae,可以参考video vae部分的README。
c. Video DiT训练
如果数据预处理时数据格式为相对路径,请将scripts/train.sh
设置如下:
export DATASET_NAME="datasets/internal_datasets/"
export DATASET_META_NAME="datasets/internal_datasets/json_of_internal_datasets.json"
如果数据预处理时数据格式为绝对路径,请将scripts/train.sh
设置如下:
export DATASET_NAME=""
export DATASET_META_NAME="/mnt/data/json_of_internal_datasets.json"
然后,我们运行scripts/train.sh。
sh scripts/train.sh
(已过时)EasyAnimateV1:
如果您想训练EasyAnimateV1,请切换到git分支v1。模型库
EasyAnimateV3:
名称 | 类型 | 存储空间 | 链接 | Hugging Face | 描述 |
---|---|---|---|---|---|
EasyAnimateV3-XL-2-InP-512x512.tar | EasyAnimateV3 | 18.2GB | 下载 | 🤗链接 | EasyAnimateV3用于512x512文本和图像到视频分辨率的官方权重。使用144帧和24fps进行训练 |
EasyAnimateV3-XL-2-InP-768x768.tar | EasyAnimateV3 | 18.2GB | 下载 | 🤗链接 | EasyAnimateV3用于768x768文本和图像到视频分辨率的官方权重。使用144帧和24fps进行训练 |
EasyAnimateV3-XL-2-InP-960x960.tar | EasyAnimateV3 | 18.2GB | 下载 | 🤗链接 | EasyAnimateV3用于960x960文本和图像到视频分辨率的官方权重。使用144帧和24fps进行训练 |
(已过时)EasyAnimateV2:
| 名称 | 类型 | 存储空间 | 链接 | Hugging Face | 描述 | |--|--|--|--|--|--| | EasyAnimateV2-XL-2-512x512.tar | EasyAnimateV2 | 16.2GB | [下载](https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Diffusion_Transformer/EasyAnimateV2-XL-2-512x512.tar) | [🤗链接](https://huggingface.co/alibaba-pai/EasyAnimateV2-XL-2-512x512) | EasyAnimateV2 512x512分辨率的官方权重。使用144帧和24帧率训练 | | EasyAnimateV2-XL-2-768x768.tar | EasyAnimateV2 | 16.2GB | [下载](https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Diffusion_Transformer/EasyAnimateV2-XL-2-768x768.tar) | [🤗链接](https://huggingface.co/alibaba-pai/EasyAnimateV2-XL-2-768x768) | EasyAnimateV2 768x768分辨率的官方权重。使用144帧和24帧率训练 | | easyanimatev2_minimalism_lora.safetensors | Pixart的Lora | 485.1MB | [下载](https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/Personalized_Model/easyanimatev2_minimalism_lora.safetensors) | - | 使用特定类型图像训练的lora。图像可从[此链接](https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/easyanimate/asset/v2/Minimalism.zip)下载。 |算法详细说明
1. 数据预处理
视频切割
对于长视频切割,EasyAnimate利用PySceneDetect识别视频中的场景变化,并基于某些阈值进行场景切割,以确保视频片段主题的一致性。切割后,我们只保留长度在3到10秒之间的片段用于模型训练。
视频清洗和描述
遵循SVD的数据准备过程,EasyAnimate提供了一个简单而有效的数据处理流程,用于高质量数据过滤和标注。它还支持分布式处理以加快数据预处理速度。整体流程如下:
- 时长过滤:分析视频的基本信息,过滤掉时长短或分辨率低的低质量视频。
- 美学过滤:通过计算均匀分布的4帧的平均美学得分,过滤掉内容较差(模糊、昏暗等)的视频。
- 文本过滤:使用easyocr计算中间帧的文本占比,过滤掉文本占比较大的视频。
- 运动过滤:计算帧间光流差异,过滤掉运动过慢或过快的视频。
- 文本描述:使用videochat2和vila对视频帧进行重新描述。PAI还在开发一个更高质量的视频重描述模型,一旦完成将尽快发布使用。
2. 模型架构
我们采用了PixArt-alpha作为基础模型,并在此基础上修改了VAE和DiT模型结构,以更好地支持视频生成。EasyAnimate的整体结构如下:
下图概述了EasyAnimate的流程。它包括文本编码器、视频VAE(视频编码器和解码器)以及扩散变换器(DiT)。T5编码器用作文本编码器。其他组件的详细信息在以下各节中描述。
我们扩展了原本为2D图像合成设计的DiT框架,以适应3D视频生成的复杂性,通过引入一个名为混合运动模块的特殊运动模块块。
在运动模块中,我们采用了时间注意力和全局注意力的组合,以确保生成连贯的帧和流畅的运动过渡。
此外,参考U-ViT,它在EasyAnimate中引入了跳跃连接结构,通过结合浅层特征进一步优化更深层的特征。每个跳跃连接结构还初始化为零的全连接层,允许它作为插件模块应用于先前训练好且表现良好的DiT。
此外,它提出了切片VAE,解决了MagViT在处理长时间和大型视频时遇到的内存困难,同时在视频编码和解码阶段相比MagViT实现了更大的时间维度压缩。
更多详细信息,请参阅arxiv。
待办事项
- 支持更大参数的模型。
联系我们
- 使用钉钉搜索群组77450006752或扫描加入
- 您需要扫描图像加入微信群,或如果已过期,请先添加该学生为好友以邀请您。
参考
- magvit: https://github.com/google-research/magvit
- PixArt: https://github.com/PixArt-alpha/PixArt-alpha
- Open-Sora-Plan: https://github.com/PKU-YuanGroup/Open-Sora-Plan
- Open-Sora: https://github.com/hpcaitech/Open-Sora
- Animatediff: https://github.com/guoyww/AnimateDiff
- ComfyUI-EasyAnimateWrapper: https://github.com/kijai/ComfyUI-EasyAnimateWrapper
许可证
本项目采用Apache许可证(版本2.0)授权。