视频生成框架EasyAnimate正式开源!

2024-06-05 11:12

本文主要是介绍视频生成框架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正式开源!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032889

相关文章

详解Java中如何使用JFreeChart生成甘特图

《详解Java中如何使用JFreeChart生成甘特图》甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配,在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图... 目录引言一、JFreeChart简介二、准备工作三、创建甘特图1. 定义数据集2. 创建甘特图3.

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D