在数字内容创作中,视频扮演的角色日益重要。然而,创作高质量视频通常耗时且昂贵。EasyAnimate 系列旨在利用人工智能技术简化这一过程。EasyAnimateV5 建立在其前代版本的基础之上,不仅在质量上有所提升,还在多模态数据处理和跨语言支持上有了进一步的增强。
EasyAnimate 是阿里云人工智能平台 PAI 自主研发的一款基于 DiT 的视频生成框架,能够生成高质量的长视频。它具备视频数据预处理、VAE 训练、DiT 训练、Lora训练、模型推理和模型评估等功能。此外,EasyAnimate 在预训练模型的基础上,通过少量图片进行 LoRA 微调,可实现视频风格的转变,大大增强了系统的扩展性和完整性,使其在众多方案中更具竞争优势。
EasyAnimate在人工智能平台PAI上进行了集成,供用户一键训练和部署,在之前EasyAnimate版本的基础上,EasyAnimateV5重点突出了以下特点:
-
应用MMDIT结构,拓展模型规模到7B与12B。
-
支持不同控制输入的控制模型。
-
更大幅度的图生视频策略。
-
更多数据和更好的多阶段训练。
用户可以使用EasyAnimate来进行任意风格视频模型的训练和推理。目前,EasyAnimate将持续优化来达到更好的生成效果,欢迎大家持续关注。
开源地址:https://github.com/aigc-apps/EasyAnimate
DSW测试地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
技术报告:https://arxiv.org/abs/2405.18991
技术原理详解
模型规模拓展与结构更新
在我们的模型中,我们借鉴了CogVideoX与Stable Diffusion 3的方法,将文本和视频的嵌入连接起来,进一步通过自注意力机制进行特征融合,相比于原来Pixart通过Cross Attention实现文本特征融合方法,该方法不仅节省了计算次数,提高了计算效率,还让模型可以根据输入的不同条件自适应地调整注意力权重,灵活地融合多模态信息。
不过,文本和视频两种模态的特征空间存在显著差异,这可能导致它们的数值相差较大,不利于对齐。为了解决这一问题,我们参考Stable Diffusion 3,采用MMDiT架构作为基础模型。我们为每种模态设计了不同的to_k、to_q、to_v和前馈网络,并在一个自注意力机制中实现信息交互,以增强模态间的对齐。
另外,为了提高模型的理解能力,我们将模型进行了放大。参考Flux,我们模型的总参数量扩展到了7B与12B。
视频控制
EasyAnimate系列模型早在V3时便通过inpaint的方式实现了图生视频的功能,现在我们将其拓展到视频控制上。
在原始的Inpaint模型基础上,我们引入了一个新的控制信号替代了原有的mask信号。具体而言,我们将控制信号经过VAE编码后,与latent变量一起输入到patch流程中作为Guidance。
我们从26M的预训练数据中筛选出了大约443K条高质量视频,并采用不同的方法来提取控制条件,包括OpenPose、Scribble、Canny、Anime、MLSD、Hed和Depth,这些被用作训练中的条件控制信号。在训练过程中,我们根据不同的Token长度对视频进行了缩放,整个训练分为两个阶段:第一个阶段为13312(对应512x512x49的视频),第二个阶段为53248(对应1024x1024x49的视频)。
以EasyAnimateV5-12b-Control模型为例:
-
在13312阶段
-
Batch size为128,训练步数为5000。
-
在53248阶段
-
Batch size为96,训练步数为2000。
训练后的模型可以输入Control Condition对输出视频进行控制,可控生成。以下是工作原理图:
基于Token长度的模型训练
EasyAnimateV5的训练分为多个阶段,除了图片对齐VAE的阶段外,其它阶段均为视频训练,分别对应了不同的Token长度。
我们首先使用图片让VAE与Transformer快速对齐,我们使用了10M的SAM数据集,进行从0开始的文本图片对齐训练,总共训练约120K步。相比于使用视频对齐,使用图片对齐的速度更快且对目标的描述更清晰,在训练完成后,模型已经有能力根据提示词去生成对应的图片,并且图片中的目标基本符合提示词描述。
然后我们使用视频训练,我们创新的根据不同的Token长度,对视频进行缩放后进行训练。视频训练分为多个阶段,每个阶段的Token长度分别是3328(对应256x256x49的视频),13312(对应512x512x49的视频),53248(对应1024x1024x49的视频)。其中:
-
3328阶段
-
使用了全部的数据(大约26.6M)训练文生视频模型,Batch size为1536,训练步数为66.5k。
-
13312阶段
-
使用了720P以上的视频训练(大约17.9M)训练文生视频模型,Batch size为768,训练步数为30k
-
使用了最高质量的视频训练(大约0.5M)训练图生视频模型 ,Batch size为384,训练步数为5k
-
53248阶段
-
使用了最高质量的视频训练(大约0.5M)训练图生视频模型,Batch size为196,训练步数为5k。
训练时我们采用高低分辨率结合训练,因此模型支持从512到1024任意分辨率的视频生成,以13312 token长度为例:
-
在512x512分辨率下,视频帧数为49;
-
在768x768分辨率下,视频帧数为21;
-
在1024x1024分辨率下,视频帧数为9;
这些分辨率与对应长度混合训练,模型可以完成不同大小分辨率的视频生成。
图生视频策略
我们采用inpaint的方式实现图生视频,需要重建的部分和重建的参考图分别通过VAE进行编码,上图黑色的部分代表需要重建的部分,白色的部分代表首图,然后和随机初始化的latent进行concat,传入网络当中进行预测。
假设我们期待生成一个384x672x49的视频,此时的初始latent就是16x13x48x84,需要重建的参考图编码后也是4x13x48x84,另外我们对mask信息进行Resize,Resize后是1x13x48x84,三个向量concat到一起后便是33x13x48x84,传入DiT模型中进行噪声预测。
由于我们mask信息可以根据需要传入,我们不仅可以指定首图,还可以指定尾图。另外,我们还可以通过指定区域的mask实现视频编辑。
在视频生成过程中,向视频中添加噪声会对生成结果产生显著影响。参考CogVideoX和SVD的做法,我们会在非背景的参考图上加入噪声,以打破原图并追求更大的运动幅度。与CogVideoX保持一致,我们从均值为-3.0、标准差为0.5的正态分布中采样得到噪声幅度,然后取其指数确保噪声幅度在合理范围内。我们通过函数会生成与输入视频形状相同的随机噪声,并根据已计算的噪声幅度进行缩放。这些噪声只添加到需要参考的帧上,得到加噪后的视频。
模型使用
DSW实践
我们支持从DSW上快速拉起,DSW上的免费体验产品包含30GB内存,可以支持EasyAnimateV5-7b-zh与EasyAnimateV5-12b-zh使用qfloat8在512分辨率下的运行:
DLC中默认使用的是app.py拉起的gradio-ui,在选择对应模型后,我们就可以填入下方的prompt进行预测了。
本地拉起
我们同样支持通过本地拉起使用EasyAnimate。
以使用ComfyUI为例,在本机上可以通过执行如下的代码首先将EasyAnimate插件和ComfyUI-VideoHelperSuite安装。
cd ComfyUI/custom_nodes/
# Git clone the easyanimate itself
git clone https://github.com/aigc-apps/EasyAnimate.git
# Git clone the video outout node
git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git
cd EasyAnimate/
python install.py
然后运行ComfyUI软件,根据需求将EasyAnimate的comfyui文件夹下的json文件拖入ComfyUI界面中,在如下页面中,进行视频生成。
联系我们
-
钉钉交流群号: 77450006752
参考文档
-
EasyAnimate: https://github.com/aigc-apps/EasyAnimate
-
CogVideo X: https://github.com/THUDM/CogVideo/
-
Stable Diffusion 3: https://huggingface.co/stabilityai/stable-diffusion-3-medium/
-
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
-
Llava-v1.6-vicuna-7b:https://huggingface.co/liuhaotian/llava-v1.6-vicuna-7b