博客
关于我
AIGC专栏11——EasyAnimateV2结构详解与Lora训练 最大支持768x768 144帧视频生成
阅读量:799 次
发布时间:2023-04-15

本文共 4300 字,大约阅读时间需要 14 分钟。

AIGC专栏11——EasyAnimateV2结构详解与Lora训练 最大支持768x768 144帧视频生成


研究背景

研究了好长时间的文生视频,EasyAnimate到了V2版本,我们将vae修改成了magvit,同时支持图片和视频的训练与预测,另外还引入了U-vit提高训练的稳定性并加快收敛。现在EasyAnimate最大支持768x768 144帧的视频生成,FPS为24,最长6秒。本文主要进行EasyAnimateV2的算法详解,并且介绍一下如何通过EasyAnimate训练自己的Lora。


源码下载地址

感谢大家的关注。


EasyAnimate V2简介

技术储备

EasyAnimate参考AnimateDiff使用Motion Module保证视频的连续性。Motion Module只关注特征点在时间轴上的特征信息,以提炼出合理的运动先验,在AnimateDiff中只更新了运动模块的参数,所以Motion Module是一个可插入的结构,可以用在不同的微调backbone中。在EasyAnimate中,我们连同motion module一起finetune,同时联合图片和视频一起finetune。

Diffusion Transformer (DiT)

DiT基于扩散模型,不免包含不断去噪的过程。如果是图生图的话,还有不断加噪的过程,此时离不开DDPM那张老图。DiT相比于DDPM,使用了更快的采样器,也使用了更大的分辨率,与Stable Diffusion一样使用了隐空间的扩散,但可能更偏研究性质一些,没有使用非常大的数据集进行预训练,只使用了imagenet进行预训练。与Stable Diffusion不同的是,DiT的网络结构完全由Transformer组成,没有Unet中大量的上下采样,结构更为简单清晰。在EasyAnimate中,我们将Motion Module网格化后引入到DIT中,借助DIT的强大生成能力,生成视频效果也还不错。

Motion Module

AnimateDiff是一个可以对文生图模型进行动画处理的实用框架,其内部设计的Motion Module无需进行特定模型调整,即可一次性为大多数现有的个性化文本转图像模型提供动画化能力。EasyAnimate参考AnimateDiff使用Motion Module保证视频的连续性。Motion Module只关注特征点在时间轴上的特征信息,以提炼出合理的运动先验。我们在EasyAnimate中,为了更好的生成效果,将backbone连同motion module一起finetune,同时联合图片和视频一起finetune。

U-vit

在训练过程中,我们发现纯DIT结构在训练视频时不算稳定,常常存在损失突然上升的情况。参考U-vit,我们将跳连接结构引入到EasyAnimate当中,通过引入浅层特征进一步优化深层特征,并且我们0初始化了一个全连接层给每一个跳连接结构,使其可以作为一个可插入模块应用到之前已经训练的还不错的DIT中。

Lora

由《LoRA: Low-Rank Adaptation of Large Language Models》提出的一种基于低秩矩阵的对大参数模型进行少量参数微调训练的方法,广泛引用在各种大模型的下游使用中。EasyAnimate有良好的拓展性,我们可以对文生图模型训练Lora后应用到文生视频模型中。


算法细节

算法组成

我们使用了作为基础模型,并在此基础上引入额外的运动模块(motion module)来将DiT模型从2D图像生成扩展到3D视频生成上来。其框架图如下:包括Text Encoder、Video VAE(视频编码器和视频解码器)和Diffusion Transformer(DiT)。T5 Encoder用作文本编码器。其他组件将在以下部分中详细说明。

视频VAE

在早期的研究中,基于图像的VAE已被广泛用于视频帧的编码和解码,如AnimateDiff、ModelScope2V和OpenSora。在Stable Diffusion使用VAE实现将每个视频帧编码为单独的潜在特征,从而将帧的空间维度显著缩小到宽度和高度的八分之一。但这种编码技术忽略了时间信息,将视频降级为静态图像表示。传统的基于图像的VAE的一个显著问题是它无法在时间维度上进行压缩,这不仅无法关注到细微的帧间信息,并且导致潜在的latent的shape很大,进一步导致GPU VRAM的激增。

视频DIT

参考AnimateDiff,我们设计了Motion Module运动模块,运动模块专门设计用于嵌入时间信息。通过在时间维度上集成注意力机制,该模型获得了时间轴上的先验知识,这对生成视频运动至关重要。另外,我们在EasyAnimateV2中引入了U-VIT,在训练过程中,我们观察到深层DIT的训练经常是不稳定的,模型的损失有时候会从0.05急剧增加到0.2,最终增加到1.0。为了加强模型优化过程,避免DIT层反向传播过程中的梯度坍塌,我们在相应的Transform Block之间使用了跳连接,这种基于UNet的框架对于Stable Diffusion模型来说是有效的。为了将这种修改无缝集成到现有的扩散变换器架构中,而无需进行全面的再训练,我们初始化了几个具有零填充权重的完全连接层,如上图(c)中的灰色块。


数据处理

对于大模型而言,数据准备很多时候比模型本身更加重要,EasyAnimate的训练包括图像数据和视频数据。下文详细介绍了视频数据处理方法,包括三个主要阶段:视频分割、视频过滤和视频描述。

视频分割

对于较长的视频分割,我们使用以识别视频内的场景变化并基于这些转换,根据一定的门限值来执行场景剪切,以确保视频片段的主题一致性。切割后,我们只保留长度在3到10秒之间的片段用于模型训练。

视频筛选

我们从三个方面对视频数据进行过滤,即运动过滤、文本过滤和美学过滤。运动过滤:在视频生成模型的训练过程中,确保视频显示运动感,将其与静态图像区分开来,这一点至关重要。同时,保持动作的一致性至关重要,因为过于不稳定的动作会削弱视频的整体稳定性。为此,我们利用RAFT以指定的每秒帧数(FPS)计算帧之间的运动分数,并用合适的运动分数对视频进行滤波,以微调动态。文本过滤:视频数据往往包含特定的文本信息(如字幕),这不利于视频模型的学习过程。为了解决这个问题,我们使用光学字符识别(OCR)来确定视频中文本区域的比例面积。对采样的帧进行OCR以表示视频的文本分数。然后,我们过滤掉文本所占区域超过视频帧1%的任何视频片段,确保剩余视频对模型训练保持最佳状态。美学过滤:此外,互联网上有许多低质量的视频。这些视频可能缺乏主题焦点,或者过于模糊。为了提高我们训练数据集的质量,我们计算了美学分数并保存高分视频,为我们的视频生成获得视觉吸引力的训练集。

视频描述

视频字幕的质量直接影响生成视频的结果。我们对几种大型多式联运模型进行了全面比较,权衡了它们的性能和运营效率。经过仔细考虑和评估,我们选择VideoChat2和VILA作为视频数据字幕的任务,因为它们在我们的评估中表现出了卓越的性能,表明它们在实现具有细节和时间信息的视频字幕方面特别有前景。


模型训练

总共,我们使用大约1200万个图像和视频数据来训练视频VAE模型和DiT模型。我们首先训练视频VAE,然后使用三阶段粗到细训练策略将DiT模型适应于新的VAE。

视频VAE

MagViT:我们使用了β=(0.5,0.9)、学习率为1e-4的Adam优化器进行训练,总共训练了350k个步骤。我们的总批量是128。Slice VAE:我们根据上述MagViT初始化Slice VAE的权重。然后分两个阶段训练切片VAE。首先,我们在200k步内使用Adam优化器,β=(0.5,0.9),批量大小=96,学习率为1e-4训练整个VAE。接下来,参考Stable Diffusion的程序,我们只在100k步的第二阶段训练解码器,以更好地提高解码视频的保真度。

视频DIT

最初,在引入新的视频VAE时,我们开始将DiT参数与该VAE对齐,此时仅使用图像数据。随后,我们使用大规模视频数据集和图像数据来预训练运动模块(Motion Module),从而引入DiT的视频生成能力。在此处,我们引入了数据集分桶策略用于以不同的视频分辨率进行训练。目前,虽然该模型能够生成具有基本运动的视频,但输出的质量往往不太理想。最后,我们使用高质量的视频数据来完善整个DiT模型,以增强其生成性能。该模型是从较低分辨率到较高分辨率逐步训练的,这是节省GPU内存和减少计算时间的有效策略。


EasyAnimate V2的Lora训练

数据集准备

我们提供了一个可供EasyAnimate V2进行Lora训练的图文数据集。这是一个人物极简风的数据集,共包含约20张图片,数据集中已经提供了标注信息。我们可以将其放置在datasets目录下,如下图所示。在这里我们即可使用相对路径也可以使用绝对路径,为了不同机器的使用方便,这里我使用了相对路径。

训练sh文件修改

训练Lora权重需要使用到scripts/train_t2iv_lora.sh文件,我们主要修改其中的DATASET_NAME和DATASET_META_NAME。DATASET_NAME指向了数据集相对路径的根目录,以本文的摆放路径为例,直接指定EasyAnimate的根目录即可,即"./" DATASET_META_NAME指向了数据集对应的json文件,指向Minimalism下的json文件,即"datasets/Minimalism/metadata_add_width_height.json"即可。为满足更低的显卡需求,我们开启low_vram减少显存需求,当前最低显存要求为24G,对应A10、3090、4090、4090D显卡。

开始训练

开始训练的流程较为简单,在配置好的环境下直接sh scripts/train_t2iv_lora.sh即可。

训练结果预测

我们首先将训练好的Lora移动到指定的文件夹,然后python app.py启动webui,在页面上进行选择。点击下方的生成即可获得结果。


以上内容详细介绍了EasyAnimateV2的结构及其Lora训练方法,希望对大家的研究有所帮助!

转载地址:http://cwgfk.baihongyu.com/

你可能感兴趣的文章
Mysql-触发器及创建触发器失败原因
查看>>
MySQL-连接
查看>>
mysql-递归查询(二)
查看>>
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
MySQL5.6的zip包安装教程
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>