当前位置:AIGC资讯 > AIGC > 正文

AIGC专栏15——CogVideoX-Fun详解 支持图&文生视频 拓展CogVideoX到256~1024任意分辨率生成

AIGC专栏15——CogVideoX-Fun详解 支持图&文生视频 拓展CogVideoX到256~1024任意分辨率生成

学习前言 项目特点 生成效果 相关地址汇总 源码下载地址 CogVideoX-Fun详解 技术储备 Diffusion Transformer (DiT) Stable Diffusion 3 EasyAnimate-I2V 算法细节 算法组成 InPaint模型 基于Token长度的模型训练 Resize 3D Embedding 项目使用 项目启动 文生视频 图生视频 视频生视频

学习前言

这段时间正在训练EasyAnimateV4.5,发现总有一些问题解决不了,开始怀疑是自己的训练框架有问题。

恰逢清华开源了CogVideoX,这是个很优秀的文生视频模型,可惜没有图生视频,还固定了分辨率,于是试着将CogVideo修改到我们的框架中,发现其实效果还不错。

项目特点

支持 图 和 文 生视频; 支持 首尾图 生成视频 最大支持720p 49帧视频生成; 无限长视频生成; 数据处理到训练完整pipeline代码开源。

生成效果

CogVideoX-Fun的生成效果如下,分别支持图生视频和文生视频。与EasyAnimate类似,通过图生视频的能力,我们还可以进行视频续写,生成无限长视频。





相关地址汇总

源码下载地址

https://github.com/aigc-apps/CogVideoX-Fun

感谢大家的关注。

CogVideoX-Fun详解

技术储备

Diffusion Transformer (DiT)

DiT基于扩散模型,所以不免包含不断去噪的过程,如果是图生图的话,还有不断加噪的过程,此时离不开DDPM那张老图,如下:

DiT相比于DDPM,使用了更快的采样器,也使用了更大的分辨率,与Stable Diffusion一样使用了隐空间的扩散,但可能更偏研究性质一些,没有使用非常大的数据集进行预训练,只使用了imagenet进行预训练。

与Stable Diffusion不同的是,DiT的网络结构完全由Transformer组成,没有Unet中大量的上下采样,结构更为简单清晰。

Stable Diffusion 3

在2024年3月,Stability AI发布了Stable Diffusion 3,Stable Diffusion 3一个模型系列,参数量从 800M 到 8B 不等。相比于过去的Stable Diffusion,Stable Diffusion 3的生图质量更高,且更符合人类偏好。

Stable Diffusion 3做了多改进,比如文本信息注入的方式,DiT模型在最初引入文本时,通常使用Cross Attention的方法结合文本信息,如Pixart-α、hunyuan DiT等。Stable Diffusion 3通过Self-Attention引入文本信息。相比于Cross Attention,使用Self-Attention引入文本信息不仅节省了Cross Attention的参数量,还节省了Cross Attention的计算量。

Stable Diffusion 3还引入了RMS-Norm。,在每一个attention运算之前,对Q和K进行了RMS-Norm归一化,用于增强模型训练的稳定性。

同时使用了更大的VQGAN,VQGAN压缩得到的特征维度从原来的4维提升到16维等。

EasyAnimate-I2V


在EasyAnimate中,需要重建的部分和重建的参考图分别通过VAE进行编码,上图黑色的部分代表需要重建的部分,白色的部分代表首图,然后和随机初始化的latent进行concat,假设我们期待生成一个384x672x144的视频,此时的初始latent就是4x36x48x84,需要重建的部分和重建的参考图编码后也是4x36x48x84,三个向量concat到一起后便是12x36x48x84,传入DiT模型中进行噪声预测。

这样模型就可以知道视频的哪些部分需要重建,通过inpaint的方式实现图生视频。

算法细节

算法组成

我们使用了CogVideoX作为基础模型,并在此基础上重新训练。

在CogVideoX-FUN中,我们基于CogVideoX在大约1.2m的数据上进行了训练,支持图片与视频预测,支持像素值从512x512x49、768x768x49、1024x1024x49与不同纵横比的视频生成。另外,我们支持图像到视频的生成与视频到视频的重建。

引入InPaint模型,实现图生视频功能,可以通过首尾图指定视频生成。 基于Token长度的模型训练。达成不同大小多分辨率在同一模型中的实现。

InPaint模型


我们以CogVideoX作为基础结构,参考EasyAnimate进行图生视频的模型训练。

在进行视频生成的时候,将参考视频使用VAE进行encode,上图黑色的部分代表需要重建的部分,白色的部分代表首图,与噪声Latents一起堆叠后输入到Transformer中进行视频生成。

我们对被Mask的区域进行3D Resize,直接Resize到需要重建的视频的画布大小。

然后将Latent、Encode后的参考视频、被Mask的区域,concat后输入到DiT中进行噪声预测。获得最终的视频。

基于Token长度的模型训练

我们收集了大约高质量的1.2m数据进行CogVideoX-Fun的训练。

在进行训练时,我们根据不同Token长度,对视频进行缩放后进行训练。整个训练过程分为三个阶段,每个阶段的13312(对应512x512x49的视频),29952(对应768x768x49的视频),53248(对应1024x1024x49的视频)。

以CogVideoX-Fun-2B为例子,其中:

13312阶段,Batch size为128,训练步数为7k 29952阶段,Batch size为256,训练步数为6.5k。 53248阶段,Batch size为128,训练步数为5k。

训练时我们采用高低分辨率结合训练,因此模型支持从512到1280任意分辨率的视频生成,以13312 token长度为例:

在512x512分辨率下,视频帧数为49; 在768x768分辨率下,视频帧数为21; 在1024x1024分辨率下,视频帧数为9;
这些分辨率与对应长度混合训练,模型可以完成不同大小分辨率的视频生成。

Resize 3D Embedding

在适配CogVideoX-2B到CogVideoX-Fun框架的途中,发现源码是以截断的方式去得到3D Embedding的,这样的方式只能适配单一分辨率,当分辨率发生变化时,Embedding也应当发生变化。

参考Pixart-Sigma,我们采用positional embeddings Interpolation对3D embedding进行Resize,positional embeddings Interpolation相比于直接生成cos sin的embedding更易收敛。

项目使用

项目启动

推荐在docker中使用CogVideoX-Fun:

# pull image
docker pull mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:cogvideox_fun

# enter image
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:cogvideox_fun

# clone code
git clone https://github.com/aigc-apps/CogVideoX-Fun.git

# enter CogVideoX-Fun's dir
cd CogVideoX-Fun

# download weights
mkdir models/Diffusion_Transformer
mkdir models/Personalized_Model

wget https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/cogvideox_fun/Diffusion_Transformer/CogVideoX-Fun-2b-InP.tar.gz -O models/Diffusion_Transformer/CogVideoX-Fun-2b-InP.tar.gz

cd models/Diffusion_Transformer/
tar -xvf CogVideoX-Fun-2b-InP.tar.gz
cd ../../

python app.py

到这里已经可以打开gradio网站了。

文生视频

首先进入gradio网站。选择对应的预训练模型,如"models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512"。然后在下方填写提示词。

然后调整视频高宽和生成帧数,最后进行生成;

图生视频

图生视频与文生视频有两个不同点:

1、需要指定参考图; 2、指定与参考图类似的高宽;

CogVideoX-Fun的ui已经提供了自适应的按钮Resize to the Start Image,打开后可以自动根据输入的首图调整高宽。

视频生视频

视频生视频与文生视频有两个不同点:

1、需要指定参考视频; 2、指定与参考视频类似的高宽;

CogVideoX-Fun的ui已经提供了自适应的按钮Resize to the Start Image,打开后可以自动根据输入的视频调整高宽。

总结

### 文章总结:《CogVideoX-Fun详解》
#### 一、学习前言
作者在训练EasyAnimateV4.5过程中遇到问题,转而关注并尝试将清华开源的CogVideo模型融入自己的框架中,以增强文生视频功能并扩展至图生视频和多分辨率支持,最终成功开发了CogVideoX-Fun。
#### 二、项目特点
- **多模态支持**:支持图和文生成视频,并提供首尾图生成视频的能力。
- **高清晰度**:最大支持720p 49帧视频生成。
- **无限长视频**:实现视频续写功能,可生成无限长的视频。
- **完整开源**:包含数据处理到训练完整pipeline代码的开源。
#### 三、生成效果
CogVideoX-Fun生成效果展示了图生视频和文生视频的能力,类似于EasyAnimate,但具有更高的灵活性和分辨率支持,允许用户生成多样化、高质量的视频内容。
#### 四、相关技术
- **Diffusion Transformer (DiT)**:基于扩散模型,使用Transformer结构,简化模型复杂度,提升生成效果。
- **Stable Diffusion 3**:增强生图质量和人类偏好程度,通过Self-Attention和RMS-Norm等技术改进模型训练。
- **EasyAnimate-I2V**:通过VAE编码参考图和视频,结合随机初始化的Latent,实现图生视频的重建。
#### 五、算法细节
- **基础模型**:以CogVideoX为基础进行重新训练,支持多分辨率和多种类型的视频生成。
- **InPaint模型**:引入InPaint模型,用于图生视频中的区域重建,通过首尾图指定视频生成。
- **Token长度训练**:采用不同Token长度训练,支持从512到1024任意分辨率的视频生成。
- **Resize 3D Embedding**:采用positional embeddings Interpolation进行3D Embedding的大小调整,增强模型对不同分辨率视频的适应性。
#### 六、项目使用
- **环境搭建**:推荐在Docker环境中运行,通过拉取Docker镜像、克隆代码、下载预训练模型等步骤进行项目启动。
- **功能操作**:
- **文生视频**:在Gradio网站上选择预训练模型,填写提示词生成视频。
- **图生视频**:指定参考图和所需高宽生成视频,支持自适应调整。
- **视频生视频**:指定参考视频和所需高宽重构视频,提供自适应调整功能。
通过CogVideoX-Fun,用户可以灵活生成多样化的高质量视频内容,满足个性化创作需求。

更新时间 2024-09-20