视频生成框架EasyAnimate正式开源!
近期,Sora模型的热度持续上涨,社区中涌现了一些类Sora的开源项目,这些项目均基于Diffusion Transformer结构,使用Transformer结构取代了UNet作为扩散模型的基线,旨在生成更长、更高分辨率、且效果更好的视频。EasyAnimate是阿里云人工智能平台PAI自主研发的DiT-based视频生成框架,它提供了完整的高清长视频生成解决方案,包括视频数据预处理、VAE训练、DiT训练、模型推理和模型评测等。在预训练模型的基础上,EasyAnimate可通过少量图片的LoRA微调来改变生成视频的风格,相比已有方案具有更好的扩展性和完整性。EasyAnimate在人工智能平台PAI上进行了集成,供用户一键训练和部署,其支持以下功能:
-
最大分辨率768x768,最长144帧的视频推理 (512x512分辨率可在A10 24G上推理)
-
DiT 基线模型的训练
-
DiT LoRA模型的训练(512x512分辨率可在A10 24G上训练图片Lora)
-
VAE模型的训练和推理
-
视频预处理
用户可以使用EasyAnimate来进行任意风格视频模型的训练和推理。目前,EasyAnimate项目仍处在初期,并将持续优化来达到更好的生成效果,欢迎大家持续关注~开源地址:GitHub - aigc-apps/EasyAnimate: 📺 An End-to-End Solution for High-Resolution and Long Video Generation Based on Transformer Diffusion技术报告:https://arxiv.org/abs/2405.18991
效果展示

上图包含了EasyAnimate部分测试视频的第一帧图像。更多结果可以参考EasyAnimate/scripts/Result_Gallery.md at v2 · aigc-apps/EasyAnimate · GitHub。
数据预处理
a、视频分割
对于较长的视频分割,EasyAnimate使用PySceneDetect以识别视频内的场景变化并基于这些转换,根据一定的门限值来执行场景剪切,以确保视频片段的主题一致性。切割后,我们只保留长度在3到10秒之间的片段用于模型训练。
b、视频清洗与描述
参考SVD的数据准备流程,EasyAnimate提供了一条简单但有效的数据处理链路来进行高质量的数据筛选与打标。并且支持了分布式处理来提升数据预处理的速度,其整体流程如下:

-
时长过滤: 统计视频基本信息,来过滤时间短/分辨率低的低质量视频
-
美学过滤: 通过计算视频均匀4帧的美学得分均值,来过滤内容较差的视频(模糊、昏暗等)
-
文本过滤: 通过easyocr计算中间帧的文本占比,来过滤文本占比过大的视频
-
运动过滤: 计算帧间光流差异来过滤运动过慢或过快的视频。
-
文本描述: 通过videochat2和vila对视频帧进行recaption。PAI也在自研质量更高的视频recaption模型,将在第一时间放出供大家使用。
模型结构
EasyAnimate使用了PixArt-alpha作为基础模型进行开发,并在此基础上修改了VAE和DiT的模型结构来更好地支持视频的生成。EasyAnimate的整体结构如下:

为了引入特征点在时间轴上的特征信息,EasyAnimate引入了运动模块(Motion Module),以实现从2D图像到3D视频的扩展。为了更好的生成效果,其联合图片和视频将Backbone连同Motion Module一起Finetune。在一个Pipeline中即实现了图片的生成,也实现了视频的生成。另外,参考U-ViT,其将跳连接结构引入到EasyAnimate当中,通过引入浅层特征进一步优化深层特征,并且0初始化了一个全连接层给每一个跳连接结构,使其可以作为一个可插入模块应用到之前已经训练的还不错的DIT中。同时,其提出了Slice VAE,用于解决MagViT在面对长、大视频时编解码上的显存困难,同时相比于MagViT在视频编解码阶段进行了时间维度更大的压缩。我们将在下面的部分对所使用的视频VAE,视频Diffusuion Transformer进行简单介绍,更多算法细节可查看技术报告。
a、视频VAE

视频VAE的一个著名例子是MagViT,大家均认为其被用于Sora框架。EasyAnimateV2版本采用MagViT进行探索研究。MagViT采用Casual 3D Conv。在使用普通3D Conv之前,该块在时间轴前引入填充,从而确保每一帧可以利用它先前的信息来增强因果关系,同时不考虑到后帧的影响。另外MagViT还允许模型同时处理图像和视频。尽管它在视频编码和解码方面很优雅,但在超长视频序列上进行训练时,它仍面临挑战,这主要是GPU VRAM的限制。当视频增大时,MagViT所需的内存往往甚至超过A100 GPU的可用内存,这使得对大视频(例如1024x1024x40)进行一步解码变得不可行。这个挑战突出了分批处理的必要性,它有助于增量解码,而不是试图一步解码整个序列。对于分批处理,其首先在空间维度上(宽度和高度上)试验切片机制。然而,这可能导致一个视频不同块上有不一致的光照。因此,其转向沿时间维度(时间上)进行切片。通过这种方法,一组视频帧被分为几个部分,每个部分都被单独编码和解码,如图所示。但由于MagViT的独特机制,3D Conv前需要进行前向填充,对应的潜在latent中,每个部分的第一个latent由于填充特征仅包含较少的信息。这种不均匀的信息分布是一个可能阻碍模型优化的方面。此外,MagViT使用这种批处理策略还影响处理过程中视频的压缩率。总结上述的结果,MagViT在处理极长视频序列的训练过程中面临挑战,对于一些大且长的视频序列,直接对完整视频序列编解码的编解码显存开销极大,因此需要用到批处理来进行改善。基于此,EasyAnimate 引入了一种切片机制到MagViT中,提出了Slice VAE,该VAE在面临不同输入时使用不同的处理策略,当输入的是视频帧时,则在高宽与时间轴上进行压缩,当输入为512x512x8的视频帧时,将其压缩为64x64x2的潜在latent;当输入的是图片时,则仅仅在高宽上进行压缩,当输入为512x512的图片时,将其压缩为64x64x1的潜在latent。所提出的Slice VAE的架构如上图所示。为了进一步提高解码的性能,EasyAnimate 在时间维度进行切片并引入了特征共享机制,从而获得时空更一致的特征,并在时间维度实现更高的压缩率。通过这种方式,编码的特征封装了时间信息,从而节省了计算资源,并同时提高了生成结果的质量。参考Stable Diffusion,EasyAnimate分两阶段训练了所提出的VAE,在第一阶段共同训练视频的编码器和解码器,在第二阶段仅对解码器进行微调来更好地提升解码视频的效果。Slice VAE的与相关Diffusion Transformer权重会在近期开源。
b、视频Diffusion Transformer

在图像DiT的基础上,EasyAnimate首先引入了Motion Module 在时序维度上引入注意力机制来让模型学习时序信息,以进行连续视频帧的生成。同时,利用额外的网格计算(Grid Reshape),来扩大注意力机制的input token数目,从而更多地利用图像的空间信息以达到更好的生成效果。运动模块专门设计用于嵌入时间信息。通过在时间维度上集成注意力机制,该模型获得了时间轴上的先验知识,这对生成视频运动至关重要。另外,由于观察到深层DIT的训练经常是不稳定的,模型的损失有时候会从0.05急剧增加到0.2,最终增加到1.0。为了加强模型优化过程,避免DIT层反向传播过程中的梯度坍塌,EasyAnimate在训练过程中引入了U-VIT,在相应的Transform Block之间使用了跳连接,这种基于UNet的框架对于Stable Diffusion模型来说是有效的。为了将这种修改无缝集成到现有的扩散变换器架构中,而无需进行全面的再训练,EasyAnimate初始化了几个具有零填充权重的完全连接层,如上图(c)中的灰色块。
训练过程
EasyAnimate的DiT模型训练分为三阶段。

首先,在图像数据上训练DiT模型来快速适应新训练的VAE模型。其次,融合了大量的图像和视频数据集来训练motion module模块,将DiT模型从图像生成迁移到视频生成上来。仅训练motion module的条件下,模型能够生成微动的视频,但生成的画面质量和运动范围有限。因此,在最后一个阶段,用进一步筛选后的高质量数据集对整个DiT模型进行微调来达到更好的模型效果。首先训练256x256x144的视频模型,然后扩展到512x512x144的视频模型,最后扩展到768x768x144的视频模型。
可扩展性(微调训练)
EasyAnimate不仅支持整个模型的基线训练,同时支持Lora训练,具有良好的可扩展性。以Lora训练为例,其可以支持使用视频数据或者图片数据对Backbone进行Lora训练,以引入期望运动的信息。EasyAnimate提供了一个Minimalism极简主义图片数据集,其中的demo图像如下所示:

参考Training-Lora-Wiki,完成Lora模型的微调后,可以进入页面中选择对应的Lora模型进行预测。

联系我们
-
项目开源地址:GitHub - aigc-apps/EasyAnimate: 📺 An End-to-End Solution for High-Resolution and Long Video Generation Based on Transformer Diffusion
-
钉钉交流群号: 77450006752

-
微信交流群:

参考文档
-
GitHub - aigc-apps/EasyAnimate: 📺 An End-to-End Solution for High-Resolution and Long Video Generation Based on Transformer Diffusion
-
magvit: GitHub - google-research/magvit: Official JAX implementation of MAGVIT: Masked Generative Video Transformer
-
PixArt: GitHub - PixArt-alpha/PixArt-alpha: PixArt-α: Fast Training of Diffusion Transformer for Photorealistic Text-to-Image Synthesis
-
Open-Sora-Plan: GitHub - PKU-YuanGroup/Open-Sora-Plan: This project aim to reproduce Sora (Open AI T2V model), we wish the open source community contribute to this project.
-
Open-Sora: GitHub - hpcaitech/Open-Sora: Open-Sora: Democratizing Efficient Video Production for All
-
Animatediff: GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff.
-
https://huggingface.co/liuhaotian/llava-v1.6-vicuna-7b
-
GitHub - baofff/U-ViT: A PyTorch implementation of the paper "All are Worth Words: A ViT Backbone for Diffusion Models".
相关文章:
视频生成框架EasyAnimate正式开源!
近期,Sora模型的热度持续上涨,社区中涌现了一些类Sora的开源项目,这些项目均基于Diffusion Transformer结构,使用Transformer结构取代了UNet作为扩散模型的基线,旨在生成更长、更高分辨率、且效果更好的视频。EasyAnim…...
【微机原理与汇编语言】并行接口8255实验
一、实验目的 掌握可编程并行接口芯片8255的工作原理及初始化方法掌握8255在实际应用中的硬件连接及编程应用 二、实验要求 根据实验室现有条件,针对实验任务,设计实验方案并进行实现。 三、实验内容 启动0#计数器,每计5个数(…...
Oracle表分区的基本使用
什么是表空间 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称为表空间 什么是表分区 表分区就是把一张大数据的表,根据分区策略进行分区,分区设置完成之后,…...
6月5号作业
设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象p1,设计这两个类的构造函数、析构函数 #include <iostream>using namespace std; class Slu { priv…...
中继器、集线器、网桥、交换机、路由器和网关
目录 前言一、中继器、集线器1.1 中继器1.2 集线器 二、网桥、交换机2.1 网桥2.1.1 认识网桥2.1.2 网桥的工作原理2.1.3 生成树网桥 2.2 交换机2.2.1 交换机的特征2.2.2 交换机的交换模式2.2.3 交换机的功能 三、路由器、网关3.1 路由器的介绍3.2 路由器的工作过程3.2.1 前置知…...
揭秘相似矩阵:机器学习算法中的隐形“纽带”
在机器学习领域,数据的处理和分析至关重要。如何有效地从复杂的数据集中提取有价值的信息,是每一个机器学习研究者都在努力探索的问题。相似矩阵,作为衡量数据之间相似性的数学工具,在机器学习算法中扮演着不可或缺的角色。 相似矩…...
攻防世界—webbaby详解
1.ssrf注入漏洞 ssrf(服务端请求伪造)是一种安全漏洞,攻击者通过该漏洞向受害服务器发出伪造的请求,从而访问并获取服务器上的资源,常见的ssrf攻击场景包括访问内部网络的服务,执行本地文件系统命令&#…...
MySQL中:cmd下输入命令mysql -uroot -p 连接数据库错误
目录 问题cmd下输入命令mysql -uroot -p错误 待续、更新中 问题 cmd下输入命令mysql -uroot -p错误 解决 配置环境变量:高级系统设置——环境变量——系统变量——path编辑——新建——MySQL.exe文件路径(如下图所示) phpstudy2018软件下&am…...
【开发利器】使用OpenCV算子工作流高效开发
学习《人工智能应用软件开发》,学会所有OpenCV技能就这么简单! 做真正的OpenCV开发者,从入门到入职,一步到位! OpenCV实验大师Python SDK 基于OpenCV实验大师v1.02版本提供的Python SDK 实现工作流导出与第三方应用集…...
基础数学-求平方根(easy)
一、问题描述 二、实现思路 1.题目不能直接调用Math.sqrt(x) 2.这个题目可以使用二分法来缩小返回值范围 所以我们在left<right时 使 mid (leftright)/21 当mid*mid>x时,说明right范围过大,rightright-1 当mid*mid<x时,说明left范…...
c语言项目-贪吃蛇项目2-游戏的设计与分析
文章目录 前言游戏的设计与分析地图:这里简述一下c语言的国际化特性相关的知识<locale.h> 本地化头文件类项setlocale函数 上面我们讲到需要打印★,●,□三个宽字符找到这三个字符打印的方式有两种: 控制台屏幕的长宽特性&a…...
力扣2831.找出最长等值子数组
力扣2831.找出最长等值子数组 思路:用二维数组存每个数字的出现下标 遍历所有数字求结果当前子数组大小:pos[i] - pos[j] 1;当前相同数个数:i - j 1;需要删去的数的个数:pos[i] - pos[j] - i j; class Solution {public:int…...
17K star,一款开源免费的手机电脑无缝同屏软件
导读:白茶清欢无别事,我在等风也等你。 作为程序员,在我们的工作中经常需要把手机投票到电脑进行调试工作,选择一款功能强大的投屏软件是一件很必要的事情。今天给大家介绍一款开源且免费的投屏软件,极限投屏ÿ…...
正则表达式二
修饰符 i:将匹配设置为不区分大小写,即A和a没有区别 var str"Google Runoob taobao runoob"; var n1str.match(/runoob/g); //runoob var n2str.match(/runoob/gi); //Runoob,runoobg:重找所有匹配项࿰…...
我的创作纪念日--我和CSDN一起走过的1825天
机缘 第一次在CSDN写文章,是自己在记录学习Java8新特性中Lambda表达式的内容过程中收获的学习心得。之前也有记录工作和生活中的心得体会、难点的解决办法、bug的排查处理过程等等。一直都用的有道笔记,没有去和大家区分享的想法,是一起的朋…...
递归书写树形图示例
大叫好,今天书写了一个扁型转换为树型的例子,使用的是递归,请大家食用,无毒 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" conte…...
【python】IndexError: Replacement index 1 out of range for positional args tuple
成功解决“IndexError: Replacement index 1 out of range for positional args tuple”错误的全面指南 一、引言 在Python编程中,IndexError: Replacement index 1 out of range for positional args tuple这个错误通常发生在使用str.format()方法或者f-string&am…...
Spring自带定时任务@Scheduled注解
文章目录 1. cron表达式生成器2. 简单定时任务代码示例:每隔两秒打印一次字符3. Scheduled注解的参数3.1 cron3.2 fixedDelay3.3 fixedRate3.4 initialDelay3.5 fixedDelayString、fixedRateString、initialDelayString等是String类型,支持占位符3.6 tim…...
代码随想录算法训练营第二十九天|LeetCode491 非递减子序列、LeetCode46 全排列、LeetCode47 全排列Ⅱ
题1: 指路:491. 非递减子序列 - 力扣(LeetCode) 思路与代码: 对于这个题我们应该想起我们做过的子集问题,就是在原来的问题上加一个去重操作。我们用unordered_set集合去重,集合中使用过的元…...
初识C++ · 优先级队列
目录 前言: 1 优先级队列的使用 2 优先级队列的实现 3 仿函数 前言: 栈和队列相对其他容器来说是比较简单的,在stl里面,有一种容器适配器是优先级队列(priority_queue),它也是个队列&#…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
