AIGC专栏16——CogVideoX-Fun V1.1版本详解 支持图&文生视频与更大的动态性 为文生视频添加控制
- 学习前言
- 相关地址汇总
- 源码下载地址
- HF测试链接
- CogVideoX-Fun V1.1详解
- 技术储备
- Diffusion Transformer (DiT)
- Stable Diffusion 3
- EasyAnimate-I2V
- 算法细节
- V1.1特点
- 参考图片添加Noise
- 添加控制信号的CogVideoX-Fun
- 项目使用
- 项目启动
- 文生视频
- 图生视频
- 视频生视频
- 控制生视频
学习前言
前段时间开源了CogVideoX-Fun,发现第一版有些时候图生视频不太动,观察了原版的SVD和原版的CogVideoX-I2V,应该要给参考图片添加一些Noise会更好。并且重构了动作更大的数据集,目标动的也就越开心。
另外,筛选了一批带有Pose的视频,训练了带有控制的CogVideoX-Fun模型。
相关地址汇总
源码下载地址
https://github.com/aigc-apps/CogVideoX-Fun
HF测试链接
https://huggingface.co/spaces/alibaba-pai/CogVideoX-Fun-5b
感谢大家的关注。
CogVideoX-Fun V1.1详解
技术储备
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的方式实现图生视频。
算法细节
V1.1特点
在CogVideoX-FUN v1.1中,我们在之前的数据集中再次做了筛选,选出其中动作幅度较大,而不是静止画面移动的视频,数量大约为0.48m。模型依然支持图片与视频预测,支持像素值从512x512x49、768x768x49、1024x1024x49与不同纵横比的视频生成。我们支持图像到视频的生成与视频到视频的重建。
另外,我们还发布了添加控制信号的训练代码与预测代码,并发布了初版的Control模型。
对比V1.0版本,CogVideoX-FUN V1.1突出了以下功能:
- 在5b模型中,给参考图片添加了Noise,增加了视频的运动幅度。
- 发布了添加控制信号的训练代码与预测代码,并发布了初版的Control模型。
参考图片添加Noise
在原本CogVideoX-FUN V1.0的基础上,我们参考CogVideoX和SVD,在非0的参考图向上添加Noise以破环原图,追求更大的运动幅度。
我们5b模型中添加了Noise,2b模型仅使用了新数据进行了finetune,因为我们在2b模型中尝试添加Noise之后,生成的视频运动幅度过大导致结果变形,破坏了生成结果,而5b模型因为更为的强大生成能力,在运动中也保持了较为稳定的输出。
另外,提示词对生成结果影响较大,请尽量描写动作以增加动态性。如果不知道怎么写正向提示词,可以使用smooth motion or in the wind来增加动态性。并且尽量避免在负向提示词中出现motion等表示动态的词汇。
添加控制信号的CogVideoX-Fun
在原本CogVideoX-FUN V1.0的基础上,我们使用Pose控制信号替代了原本的mask信号,将控制信号使用VAE编码后作为Guidance与latent一起进入patch流程,
我们在0.48m数据中进行了筛选,选择出大约20000包含人像的视频与图片进行pose提取,作为condition控制信号进行训练。
在进行训练时,我们根据不同Token长度,对视频进行缩放后进行训练。整个训练过程分为两个阶段,每个阶段的13312(对应512x512x49的视频),53248(对应1024x1024x49的视频)。
以CogVideoX-Fun-V1.1-5b-Pose为例子,其中:
- 13312阶段,Batch size为128,训练步数为2.4k
- 53248阶段,Batch size为128,训练步数为1.2k。
工作原理图如下:
项目使用
项目启动
推荐在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,打开后可以自动根据输入的视频调整高宽。
控制生视频
首先调整model type到Control。
然后选择对应的带有控制的Model。
可修改prompt如下:
A person wearing a knee-length white sleeveless dress and white high-heeled sandals performs a dance in a well-lit room with wooden flooring. The room's background features a closed door, a shelf displaying clear glass bottles of alcoholic beverages, and a partially visible dark-colored sofa.
然后修改为根据参考视频自动resize。
最后上传控制视频,进行生成。