视频生成框架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使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp