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://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界面中,在如下页面中,进行视频生成。

联系我们

  • 项目开源地址:https://github.com/aigc-apps/EasyAnimate

  • 钉钉交流群号: 77450006752

参考文档

  • EasyAnimate: https://github.com/aigc-apps/EasyAnimate

  • CogVideo X: https://github.com/THUDM/CogVideo/

  • Flux: https://github.com/black-forest-labs/flux

  • Stable Diffusion 3: https://huggingface.co/stabilityai/stable-diffusion-3-medium/

  • SVD: https://arxiv.org/abs/2311.15127

  • 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

  • Llava-v1.6-vicuna-7b:https://huggingface.co/liuhaotian/llava-v1.6-vicuna-7b

  • SAM: [PDF] Segment Anything | Semantic Scholar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/928698.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈volatile

volatile有三个特性: (1)可见性 (2)不保证原子性 (3)禁止指令重排 下面我们一一介绍 (一)可见性 volatile的可见性是说共享变量只要修改,就可以被其他线…

深入理解AVL树:结构、旋转及C++实现

1. AVL树的概念 什么是AVL树? AVL树是一种自平衡的二叉搜索树,其发明者是Adelson-Velsky和Landis,因此得名“AVL”。AVL树是首个自平衡二叉搜索树,通过对树的平衡因子进行控制,确保任何节点的左右子树高度差最多为1&…

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项

网络练级宝典-> UDP传输层协议

目录 传输层 端口号 端口号和进程的关系 UDP协议 UDP协议格式 UDP数据封装: UDP数据分用: 面向数据报 UDP的缓冲区 UDP的缺点 基于UDP的应用层协议 传输层 端口号 我们知道端口号对应的其实就是一个进程的pid,在操作系统中二者的…

基于飞腾S2500处理器的全国产加固服务器

近日,西安康德航测电子科技有限公司凭借其深厚的行业底蕴和创新精神,正式推出了基于飞腾S2500处理器的全国产加固服务器。这一产品的问世,不仅标志着我国在信息技术领域的自立自强迈出了坚实的一步,更以其卓越的性能、坚固的设计和…

移植NIOS10.1工程,NIOS10.1路径修改

移植NIOS10.1工程,NIOS10.1路径修改 因工程的需要,使用的NIOS10.1,比较老,这个版本的路径是使用的绝对路径,导致移植工程市回报路径的错误,在13.1之后改为了相对路径,不存在这个问题。 需要修…

`pnpm` 不是内部或外部命令,也不是可运行的程序或批处理文件(问题已解决,2024/12/3

主打一个有用 只需要加一个环境变量 直接安装NodeJS的情况使用NVM安装NodeJS的情况 本篇博客主要针对第二种情况,第一种也可参考做法,当然眨眼睛建议都换成第二种 默认情况下的解决方法:⭐⭐⭐ 先找到node的位置,默认文件夹名字…

FFmpeg:强大的音视频处理工具指南

FFmpeg:强大的音视频处理工具指南 1. FFmpeg简介2. 核心特性2.1 基础功能2.2 支持的格式和编解码器 3. 主要组件3.1 命令行工具3.2 开发库 4. 最新发展5. 安装指南5.1 Windows系统安装5.1.1 直接下载可执行文件5.1.2 使用包管理器安装 5.2 Linux系统安装5.2.1 Ubunt…

openEuler卸载 rpm安装的 redis

停止 Redis 服务 sudo systemctl stop redis禁用 Redis 服务 sudo systemctl disable redis 卸载 Redis 软件包 sudo yum remove redis查找并删除 Redis 的残留文件 find / -name red*删除 Redis 配置文件 删除 Redis 数据文件 sudo rm -rf /var/lib/redis检查 Redis 是否…

1.kettle保姆级安装教程

1 配置java 1.1 安装jdk 1.双击软件(kettle要用jdk 1.8版本) 2.选择安装路径地址,可以选择默认。要记好安装路径地址,等会要用 1.2 配置环境变量 1.右击计算机,属性 2.高级系统设置 3.环境变量 4.系统变量 – 新建 …

【Elasticsearch】实现分布式系统日志高效追踪

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

K8s 十年回顾(Ten Year Review of K8s)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。Kubernetes 十年回顾 起源与…

大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Lambda表达式提取字段名

文章目录 前言例子原理writeReplace反序列化对象缓存元数据 写一个工具 前言 实体类:方法这种方式获取字段名&#xff0c;摒弃了字符串拼接方式&#xff0c;避免拼接出现的问题&#xff0c;提高框架维护性和可修改性。 例子 引入Mybatis-Plus <dependency><groupId…

Dataset用load_dataset读图片和对应的caption的一个坑

代码&#xff1a; data_files {} if args.train_data_dir is not None:data_files["train"] os.path.join(args.train_data_dir, "**")dataset load_dataset("imagefolder",data_filesdata_files,cache_dirargs.cache_dir,) 数据&#xff1…

git查看本地库对应的远端库的地址

git查看本地库对应的远端库的地址 git remote -v 如果想要查看特定的远端库的url地址&#xff0c;可以使用如下命令&#xff0c;其中origin是默认的远端库的名称&#xff0c;可以使用其他远端库的名称 get remote get-url origin

传统PID和模糊控制在matlab仿真效果的对比

通过学习汇总和复现&#xff0c;利用matlab和simulink进行对传统PID和添加了模糊控制器的仿真效果进行对比&#xff1a; 上图中红色信号为传统PID仿真信号&#xff0c;比直接作用到对象的信号拟合度好很多PID的积分和比例的作用&#xff0c;直接作用到对象相当于只通过了二阶函…

网络编程(JavaEE)

前言&#xff1a; 熟悉了网络的基本概念之后&#xff0c;接下来就需要针对网络进行一系列的编程&#xff0c;其中可能涉及到新的一些编程操作&#xff0c;需要我们进一步探索&#xff01; 网络编程套接字&#xff1a; 套接字其实是socket的翻译。 操作系统给应用程序(传输层给…

算法第一弹-----双指针

目录 1.移动零 2.复写零 3.快乐数 4.盛水最多的容器 5.有效三角形的个数 6.查找总价值为目标值的两个商品 7.三数之和 8.四数之和 双指针通常是指在解决问题时&#xff0c;同时使用两个指针&#xff08;变量&#xff0c;常用来指向数组、链表等数据结构中的元素位置&am…

Linux-虚拟环境

文章目录 一. 虚拟机二. 虚拟化软件三. VMware WorkStation四. 安装CentOS操作系统五. 在VMware中导入CentOS虚拟机六. 远程连接Linux系统1. Finalshell安装2. 虚拟机网络配置3. 连接到Linux系统 七. 虚拟机快照 一. 虚拟机 借助虚拟化技术&#xff0c;我们可以在系统中&#…