EasyAnimateV5 视频生成大模型原理详解与模型使用
在数字内容创作中,视频扮演的角色日益重要。然而,创作高质量视频通常耗时且昂贵。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://pai.console.aliyun.com/#/dsw-gallery/preview/deepLearning/cv/easyanimate_v5
技术报告: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 安装。
然后运行 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
评论