基于EasyAnimate模型的视频生成最佳实践

2024-06-19 16:04

本文主要是介绍基于EasyAnimate模型的视频生成最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EasyAnimate是阿里云PAI平台自主研发的DiT的视频生成框架,它提供了完整的高清长视频生成解决方案,包括视频数据预处理、VAE训练、DiT训练、模型推理和模型评测等。本文为您介绍如何在PAI平台集成EasyAnimate并一键完成模型推理、微调及部署的实践流程。

背景信息

本文为您介绍以下两种视频生成的方式:

  • 方式一:使用DSW

DSW是为算法开发者量身打造的一站式AI开发平台,集成了JupyterLab、WebIDE、Terminal多种云端开发环境,其中,Gallery提供了丰富的案例和解决方案,帮助您快速熟悉研发流程。您可以打开DSW Gallery中的案例教程,实现一键式运行Notebook,完成基于EasyAnimate的视频生成模型的推理和训练任务,也可以进行模型推理和微调等二次开发操作。

  • 方式二:使用快速开始

快速开始集成了众多AI开源社区中优质的预训练模型,并且基于开源模型支持零代码实现从训练到部署再到推理的全部过程,您可以通过快速开始一键部署EasyAnimate模型并生成视频,享受更快、更高效、更便捷的AI应用体验。

费用说明

  • 如果您的账号为DSW或EAS的新用户,可以免费试用相应产品。关于免费试用的额度、领取方式及注意事项等详细信息,请参见新用户免费试用。

说明:在本教程中,仅支持使用DSW免费资源类型ecs.gn7i-c8g1.2xlarge。

  • 如果您的账号非新用户,使用DSW和EAS会产生相应费用。更多计费详情,请参见交互式建模(DSW)计费说明、模型在线服务(EAS)计费说明、快速开始(QuickStart)计费说明。

前提条件

  • 创建PAI工作空间。具体操作,请参见开通PAI并创建默认工作空间。
  • (可选)开通OSS或NAS。具体操作,请参见开始使用OSS、NAS入门概述。

方式一:使用DSW

步骤一:创建DSW实例

  1. 进入DSW页面。
    1. 登录PAI控制台。
    2. 概览页面选择目标地域。
    3. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击目标工作空间名称,进入对应工作空间内。
    4. 在工作空间页面的左侧导航栏选择模型开发与训练>交互式建模(DSW),进入DSW页面。
  2. 单击创建实例
  3. 配置实例向导页面,配置以下关键参数,其他参数保持默认即可。
参数说明
实例名称本教程使用的示例值为:AIGC_test_01
资源规格选择GPU规格下的ecs.gn7i-c8g1.2xlarge,或其他A10、GU100规格。
镜像选择官方镜像easyanimate:1.1.4-pytorch2.2.0-gpu-py310-cu118-ubuntu22.04
挂载配置(可选)单击添加,单击创建数据集,创建OSS或NAS数据集。
  1. 单击确定

步骤二:安装EasyAnimate模型

  1. 打开DSW实例。
    1. 登录PAI控制台。
    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击目标工作空间,进入对应工作空间。
    3. 在页面左上方,选择使用服务的地域。
    4. 在左侧导航栏,选择模型开发与训练>交互式建模(DSW)
    5. 单击目标DSW实例操作列下的打开,进入DSW实例的开发环境。
  2. Notebook页签的Launcher页面,单击快速开始区域Tool下的DSW Gallery,打开DSW Gallery页面。
  3. 在DSW Gallery页面中,搜索EasyPhoto: 基于EasyAnimate的AI视频生成示例,单击在DSW中打开,即可自动将本教程所需的资源和教程文件下载至DSW实例中,并在下载完成后自动打开教程文件。

image.png

  1. 下载EasyAnimate相关代码和模型并进行安装。

在教程文件easyanimate.ipynb中,单击image.png运行环境安装节点命令,包括定义函数下载代码下载模型。当成功运行一个步骤命令后,再顺次运行下个步骤的命令。

步骤三:推理模型

方式一:使用代码进行推理

单击image.png运行模型推理>使用代码进行推理节点的命令进行模型推理。您可在**/mnt/workspace/demos/easyanimate/EasyAnimate/samples/easyanimate-videos**目录中查看生成结果。
您可以修改不同的参数来达到不同的效果,参数说明:

参数名说明类型
prompt用户输入的正向提示词。string
negative_prompt用户输入的负向提示词。string
num_inference_steps用户输入的步数。int
guidance_scale引导系数。int
sampler_name采样器类型。在生成风景类animation时,采样器 (sampler_name) 推荐使用DPM++和Euler A。在生成人像类animation时,采样器推荐使用Euler A和Euler。string
width生成视频宽度。int
height生成视频高度。int
video_length生成视频帧数。int
fps保存的视频帧率。int
save_dir保存视频文件夹 (相对路径)。string
seed随机种子。int
lora_weightLoRA模型参数的权重。float
lora_path额外的LoRA模型路径。用于生成人物视频可以修改为预置的模型路径:models/Personalized_Model/easyanimate_portrait_lora.safetensorsstring
transformer_pathtransformer模型路径。用于生成人物视频可以修改为预置的模型路径:models/Personalized_Model/easyanimate_portrait.safetensorsstring
motion_module_pathmotion_module模型路径。string
方式二:使用WebUI进行推理
  1. 单击image.png运行模型推理>UI启动节点的命令,进行模型推理。
  2. 单击生成的链接,进入WebUI界面。

image.png

  1. 在WebUI界面选择预训练的模型路径、微调后的基模型和LoRA模型,设置LoRA权重,其它参数按需配置即可。

image.png

  1. 单击Generate(生成),等待一段时间后,即可在右侧查看或下载生成的视频。

image.png

步骤四:微调LoRA

EasyAnimate提供了丰富的模型训练方式,包括DiT模型的训练(LoRA微调和基模型的全量微调)和VAE的训练。关于Gallery中内置的LoRA微调部分,更多信息,请参见EasyAnimate。

准备数据

单击image.png执行模型训练>数据准备节点的命令,即可下载示例数据,用于模型训练。您也可以按照如下格式要求自行准备数据文件。
文件数据格式如下。

project/
├── datasets/
│   ├── internal_datasets/
│       ├── videos/
│       │   ├── 00000001.mp4
│       │   ├── 00000002.mp4
│       │   └── .....
│       └── json_of_internal_datasets.json

其中,JSON文件数据格式和参数说明如下。

[{"file_path": "videos/00000001.mp4","text": "A group of young men in suits and sunglasses are walking down a city street.","type": "video"},{"file_path": "videos/00000002.mp4","text": "A notepad with a drawing of a woman on it.","type": "video"}.....
]
参数说明
file_path视频/图片数据的存放位置(相对路径)。
text数据的文本描述。
type视频为video,图片为image。
训练模型
  1. 将对应的训练脚本中的DATASET_NAME及DATASET_META_NAME设置为训练数据所在目录及训练文件地址。
export DATASET_NAME=“” # 训练数据所在目录
export DATASET_META_NAME=“datasets/Minimalism/metadata_add_width_height.json” # 训练文件地址
  1. 单击image.png执行启动训练>LoRA训练节点的命令。
  2. 训练完成后,将生成的模型移动至models/Personalized_model文件夹,即可在UI界面中选择,或单击image.png执行LoRA模型推理节点的命令,指定lora_path进行视频生成。

方式二:使用快速开始

步骤一:部署模型

  1. 进入快速开始页面。
    1. 登录PAI控制台。
    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面单击目标工作空间名称,进入对应工作空间内。
    3. 在左侧导航栏单击快速开始,进入快速开始页面。
  2. 在快速开始页面,搜索EasyAnimate 高清长视频生成,然后单击部署,配置相关参数。

EasyAnimate目前仅支持使用bf16进行推理,请选择A10及其以上的显卡。
image.png

  1. 单击部署,在弹出的计费提醒对话框中,单击确定,页面将自动跳转到服务详情页面。

状态变为运行中时,即表示模型部署成功。

步骤二:使用模型

模型部署完成后,您可以使用WebUI及API两种方式调用服务来生成视频。

WebUI方式
  1. 服务详情页面,单击查看WEB应用

image.png

  1. 在WebUI界面选择预训练的模型路径,其它参数按需配置即可。

image.png

  1. 单击Generate(生成),等待一段时间后,即可在右侧查看或下载生成的视频。

image.png

API方式
  1. 服务详情页面的资源详情区域,单击查看调用信息,获取调用服务所需的信息。

image.png

  1. 通过接口更新Transformer模型,可在DSW实例或本地Python环境中执行。

如果已经在WebUI中选择模型,则无需发送请求重复调用。如遇请求超时,请在EAS日志中确认模型已加载完毕。加载完成,日志中将提示Update diffusion transformer done。
Python请求示例如下。

import json
import requestsdef post_diffusion_transformer(diffusion_transformer_path, url='http://127.0.0.1:7860', token=None):datas = json.dumps({"diffusion_transformer_path": diffusion_transformer_path})head = {'Authorization': token}r = requests.post(f'{url}/easyanimate/update_diffusion_transformer', data=datas, headers=head, timeout=15000)data = r.content.decode('utf-8')return datadef post_update_edition(edition, url='http://0.0.0.0:7860',token=None):head = {'Authorization': token}datas = json.dumps({"edition": edition})r = requests.post(f'{url}/easyanimate/update_edition', data=datas, headers=head)data = r.content.decode('utf-8')return dataif __name__ == '__main__':url = '<eas-service-url>'token = '<eas-service-token>'# -------------------------- ##  Step 1: update edition# -------------------------- #edition = "v2"outputs = post_update_edition(edition,url = url,token=token)print('Output update edition: ', outputs)# -------------------------- ##  Step 2: update edition# -------------------------- ## 默认路径不可修改diffusion_transformer_path = "/mnt/models/Diffusion_Transformer/EasyAnimateV2-XL-2-512x512"outputs = post_diffusion_transformer(diffusion_transformer_path, url = url, token=token)print('Output update edition: ', outputs)

其中:

  • :替换为步骤1中查询到的服务访问地址。
  • :替换为步骤1中查询到的服务Token。
  1. 调用服务,生成视频或图片。
  • 服务输入参数说明
参数名说明类型默认值
prompt_textbox用户输入的正向提示词。string必填。无默认值
negative_prompt_textbox用户输入的负向提示词。string“The video is not of a high quality, it has a low resolution, and the audio quality is not clear. Strange motion trajectory, a poor composition and deformed video, low resolution, duplicate and ugly, strange body structure, long and strange neck, bad teeth, bad eyes, bad limbs, bad hands, rotating camera, blurry camera, shaking camera. Deformation, low-resolution, blurry, ugly, distortion.”
sample_step_slider用户输入的步数。int30
cfg_scale_slider引导系数。int6
sampler_dropdown采样器类型。stringEluer
在 [Eluer, EluerA, DPM++, PNDM, DDIM] 中选择
width_slider生成视频宽度。int672
height_slider生成视频高度。int384
length_slider生成视频帧数。int144
is_image是否是图片。boolFALSE
lora_alpha_sliderLoRA模型参数的权重。float0.55
seed_textbox随机种子。int43
lora_model_path额外的LoRA 模型路径。stringnone
若有,则会在请求时带上lora。在当次请求后移除。
base_model_path需要更新的transformer模型路径。stringnone
motion_module_path需要更新的motion_module模型路径。stringnone
  • Python请求示例

服务返回base64_encoding,为base64结果。
您可以在**/mnt/workspace/demos/easyanimate/**目录中查看生成结果。

import base64
import json
import sys
import time
from datetime import datetime
from io import BytesIOimport cv2
import requests
import base64def post_infer(is_image, length_slider, url='http://127.0.0.1:7860',token=None):head = {'Authorization': token}datas = json.dumps({"base_model_path": "none","motion_module_path": "none","lora_model_path": "none", "lora_alpha_slider": 0.55, "prompt_textbox": "This video shows Mount saint helens, washington - the stunning scenery of a rocky mountains during golden hours - wide shot. A soaring drone footage captures the majestic beauty of a coastal cliff, its red and yellow stratified rock faces rich in color and against the vibrant turquoise of the sea.", "negative_prompt_textbox": "Strange motion trajectory, a poor composition and deformed video, worst quality, normal quality, low quality, low resolution, duplicate and ugly, strange body structure, long and strange neck, bad teeth, bad eyes, bad limbs, bad hands, rotating camera, blurry camera, shaking camera", "sampler_dropdown": "Euler", "sample_step_slider": 30, "width_slider": 672, "height_slider": 384, "is_image": is_image,"length_slider": length_slider,"cfg_scale_slider": 6,"seed_textbox": 43,})r = requests.post(f'{url}/easyanimate/infer_forward', data=datas, headers=head,timeout=1500)data = r.content.decode('utf-8')return dataif __name__ == '__main__':# initiate timenow_date    = datetime.now()time_start  = time.time()  url = '<eas-service-url>'token = '<eas-service-token>'# -------------------------- ##  Step 3: infer# -------------------------- #is_image = Falselength_slider = 27outputs = post_infer(is_image, length_slider, url = url, token=token)# Get decoded dataoutputs = json.loads(outputs)base64_encoding = outputs["base64_encoding"]decoded_data = base64.b64decode(base64_encoding)if is_image or length_slider == 1:file_path = "1.png"else:file_path = "1.mp4"with open(file_path, "wb") as file:file.write(decoded_data)# End of record timetime_end = time.time()  time_sum = (time_end - time_start) % 60 print('# --------------------------------------------------------- #')print(f'#   Total expenditure: {time_sum}s')print('# --------------------------------------------------------- #')

其中:

  • < eas-service-url>:替换为步骤1中查询到的服务访问地址。
  • < eas-service-token>:替换为步骤1中查询到的服务Token。

这篇关于基于EasyAnimate模型的视频生成最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用Javassist动态生成HelloWorld类

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

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

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

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

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat