StableAnimator模型的部署:复旦微软提出可实现高质量和高保真的ID一致性人类视频生成

文章目录

  • 一、项目介绍
  • 二、项目部署
    • 模型的权重下载
    • 提取目标图像的关节点图像(这个可以先不看先用官方提供的数据集进行生成)
    • 提取人脸(这个也可以先不看)
    • 进行图片的生成
  • 三、模型部署报错

一、项目介绍

由复旦、微软、虎牙、CMU的研究团队提出的StableAnimator框架,实现了高质量和高保真的ID一致性人类视频生成。
当前的人类图像动画扩散模型很难确保身份 (ID) 的一致性。本文介绍了 StableAnimator,这是第一个端到端保留 ID 的视频扩散框架,它无需任何后处理即可合成高质量视频,以参考图像和一系列姿势为条件。 StableAnimator 以视频扩散模型为基础,包含精心设计的模块,用于训练和推理,力求身份一致性。特别是,StableAnimator 首先分别使用现成的提取器计算图像和面部嵌入,并通过使用全局内容感知面部编码器与图像嵌入交互来进一步细化面部嵌入。然后,StableAnimator 引入了一种新颖的分布感知 ID 适配器,可防止时间层造成的干扰,同时通过对齐保留 ID。在推理过程中,我们提出了一种新颖的基于 Hamilton-Jacobi-Bellman (HJB) 方程的优化,以进一步提高人脸质量。我们证明,求解 HJB 方程可以集成到扩散去噪过程中,所得解约束去噪路径,从而有利于 ID 保留。多个基准测试的实验在定性和定量上都证明了 StableAnimator 的有效性。
在这里插入图片描述

github项目地址

二、项目部署

浏览器下载pytorch、torchvision、torchaudio
下载pytorch相关的网页
下载后用命令安装

pip install torchaudio-2.5.1+cu124-cp310-cp310-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

模型的权重下载

将huggingface下的模型权重下的权重文件按照如下的文件目录进行下载
StableAnimator/
├── DWPose
├── animation
├── checkpoints
│ ├── DWPose
│ │ ├── dw-ll_ucoco_384.onnx
│ │ └── yolox_l.onnx
│ ├── Animation
│ │ ├── pose_net.pth
│ │ ├── face_encoder.pth
│ │ └── unet.pth
│ ├── SVD
│ │ ├── feature_extractor
│ │ ├── image_encoder
│ │ ├── scheduler
│ │ ├── unet
│ │ ├── vae
│ │ ├── model_index.json
│ │ ├── svd_xt.safetensors
│ │ └── svd_xt_image_decoder.safetensors
│ └── inference.zip
├── models
│ │ └── antelopev2
│ │ ├── 1k3d68.onnx
│ │ ├── 2d106det.onnx
│ │ ├── genderage.onnx
│ │ ├── glintr100.onnx
│ │ └── scrfd_10g_bnkps.onnx
├── app.py
├── command_basic_infer.sh
├── inference_basic.py
├── requirement.txt

提取目标图像的关节点图像(这个可以先不看先用官方提供的数据集进行生成)

将参考图像,需要提取关节点的图像放在target_images里,命名为frame_i
在这里插入图片描述
运行如代码从target_images中提取关节点的信息

python DWPose/skeleton_extraction.py --target_image_folder_path="/media/dell/DATA/RK/StableAnimator-main/inference/test/target_images" --ref_image_path="/media/dell/DATA/RK/StableAnimator-main/inference/case-1/reference.png" --poses_folder_path="/media/dell/DATA/RK/StableAnimator-main/inference/test/pose"

提取结果报错在pose文件夹里
在这里插入图片描述

提取人脸(这个也可以先不看)

需要将以下模型权重下载到指定文件夹里
Downloading: “https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth” to /home/dell/anaconda3/envs/stableanimator/lib/python3.10/site-packages/facexlib/weights/detection_Resnet50_Final.pth
Downloading: “https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth” to /home/dell/anaconda3/envs/stableanimator/lib/python3.10/site-packages/facexlib/weights/parsing_parsenet.pth
Downloading: “https://github.com/xinntao/facexlib/releases/download/v0.2.0/parsing_bisenet.pth” to /home/dell/anaconda3/envs/stableanimator/lib/python3.10/site-packages/facexlib/weights/parsing_bisenet.pth

运行一下带代码,从一个包含图片的文件夹中提取每张图片的人脸掩码,存储到当前同级文件夹的face文件夹里

python face_mask_extraction.py --image_folder="/media/dell/DATA/RK/StableAnimator-main/inference/case-1"

进行图片的生成

bash command_basic_infer.sh

将以下文件夹的一些参数修改为你自己的参数

CUDA_VISIBLE_DEVICES=0 python inference_basic.py \--pretrained_model_name_or_path="path/checkpoints/SVD/stable-video-diffusion-img2vid-xt" \--output_dir="/media/dell/DATA/RK/StableAnimator-main/inference/output" \--validation_control_folder="/media/dell/DATA/RK/StableAnimator-main/inference/test/pose" \--validation_image="path/inference/case-1/reference.png" \--width=576 \--height=1024 \--guidance_scale=3.0 \--num_inference_steps=25 \--posenet_model_name_or_path="path/checkpoints/Animation/pose_net.pth" \--face_encoder_model_name_or_path="path/checkpoints/Animation/face_encoder.pth" \--unet_model_name_or_path="path/checkpoints/Animation/unet.pth" \--tile_size=16 \--overlap=4 \--noise_aug_strength=0.02 \--frames_overlap=4 \--decode_chunk_size=4 \--gradient_checkpointing

三、模型部署报错

①OSError: Can’t load image processor for ‘/media/dell/DATA/RK/StableAnimator-main/checkpoints/SVD/stable-video-diffusion-img2vid-xt’. If you were trying to load it from ‘https://huggingface.co/models’, make sure you don’t have a local directory with the same name. Otherwise, make sure ‘/media/dell/DATA/RK/StableAnimator-main/checkpoints/SVD/stable-video-diffusion-img2vid-xt’ is the correct path to a directory containing a preprocessor_config.json file
模型的路径写错了,/media/dell/DATA/RK/StableAnimator-main/checkpoints/SVD 应该写这个,刚刚的路径最后一个文件夹根本不存在

② Error no file named model.fpl6.safetensors found in directory /media/dell/DATA/RK/StableAnimator-main/checkpoints/SVD.
读取不了图像编码器的权重
OSError: Error no file named pytorch_model.bin, tf_model.h5, model.ckpt.index or flax_model.msgpack found in directory /media/dell/DATA/RK/StableAnimator-main/checkpoints/SVD/image_encoder.

将inference_basic.py文件中的第226行左右的模型加载代码进行修改
这里是原来的

 image_encoder = CLIPVisionModelWithProjection.from_pretrained(args.pretrained_model_name_or_path, subfolder="image_encoder", revision=args.revision)

将其修改为以下

 image_encoder = CLIPVisionModelWithProjection.from_pretrained("/media/dell/DATA/RK/StableAnimator-main/checkpoints/SVD/image_encoder", revision="fp16",variant="fp16")

注意这两个要一起加才能识别模型的权重

revision="fp16",variant="fp16"

revision=“fp16” 会告诉系统加载 FP16 精度的模型,而 variant=“fp16” 则指定推理或训练过程中的精度
两者协同作用,确保你在运行时使用的是 FP16 精度的模型,避免错误或不一致的精度设置
其他的vae和unet 的加载也要改成类似的

③模型运行后直接被杀死了
在这里插入图片描述

可能是内容爆掉了
我把unet的加载放到了 cuda里,就正常运行了,但是爆别的错误④
在这里插入图片描述
④IndexError: list index out of range
在这里插入图片描述
我选择将输入的数据换成官方的数据试试
官方下载权重的文件夹里面的有一个inference的zip的压缩包
在这里插入图片描述

可以跑起来了,显存占用15个G
在这里插入图片描述

⑤RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 30 but got size 29 for tensor number 1 in the list.

注意这个问题是由于我自己输出的图像的长宽不是32的整数(宽为904)倍导致的。

四、模型的生成结果
生成的流程
用官方提供的姿势文件夹(pose)
用自己的参考图像一张(png)
然后进行生成

用官方提供的第一个case的pose(包含15张图片)(如果pose的帧数太多很容易被杀死)
这是官方的512 * 512 的像素的
在这里插入图片描述
推理需要一分钟的时间,生成图片的大小改为768*1024
(官方的代码里给的是576 * 1024)
生成的结果①
在这里插入图片描述
②参考图像用的自己的
生成图片的大小改为512 * 512的
(官方的代码里给的是576 * 1024,感觉生成的图像有些扭曲)
注意,参考图像需要和pose的比例一致(比如pose是全身的,参考图像是半身的话,生成的内容会不一致。)
参考图像用的这张

生成的结果
在这里插入图片描述
可以看到角色的一致性还是有些问题,需要调整一些参数

③我用动漫的角色作为参考图像的话生成的效果并不保真

④将输入图像裁剪为和实力图像一样的大小:512 * 512 或者 512 * 904
pose 的帧数选择20以内,不然会爆内存被杀死

参考的图像
在这里插入图片描述

生成的结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中的闭包和上下文

变量提升 和 函数提升 这里要提到一个提升的概念,即在JS中,在解析代码之前还有一个预处理的过程,这个过程中会把部分变量和函数声明提前到代码的最顶部, 会在其他所有代码之前执行。虽然当我们按照规范(严格模式或者T…

从百度云网盘下载数据到矩池云网盘或者服务器内

本教程教大家如何快速将百度云网盘数据集或者模型代码文件下载到矩池云网盘或者服务器硬盘上。 本教程使用到了一个开源工具 BaiduPCS-Go,官方地址 : https://github.com/qjfoidnh/BaiduPCS-Go 这个工具可以实现“仿 Linux shell 文件处理命令的百度网…

基于Fastapi搭建API服务实践案例

文章目录 前言服务框架结构app.pyrun_app_server.shrouters/upload.pyrouters/query_result.pyutils/utils.pyutils/tasks.py 总结 前言 本文讲述了如何使用fastapi搭建一个属于自己的服务,整个服务使用fastapi框架搭建,celery管理任务队列,…

【每日学点鸿蒙知识】hvigor升级、Dialog动画、LocalStorage无效、页面与子组件的生命周期、cookie设置

1、HarmonyOS 编译工具hvigor如何升级到"hvigorVersion": "4.2.0"版本? 可以手动更新到指定版本,参考链接如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-plugin-V5 2、HarmonyOS…

【AI学习】DeepSeek-V3 技术报告学习:总体架构

翻了一下DeepSeek-V3 技术报告学习,太长,只是大概翻了一下,其中Multi-Token Prediction的技术就很亮眼。 摘要 本文介绍了DeepSeek-V3,这是一个拥有671B总参数的强大混合专家(MoE)语言模型,每…

总结-常见缓存替换算法

缓存替换算法 1. 总结 1. 总结 常见的缓存替换算法除了FIFO、LRU和LFU还有下面几种: 算法优点缺点适用场景FIFO简单实现可能移除重要数据嵌入式系统,简单场景LRU局部性原理良好维护成本高,占用更多存储空间内存管理,浏览器缓存L…

手机联系人 查询 添加操作

Android——添加联系人_android 添加联系人-CSDN博客 上面连接添加联系人已测试 是可以 Android : 获取、添加、手机联系人-ContentResolver简单应用_contentresolver 添加联系人-CSDN博客

【黑马头条训练营】day01-黑马头条整体构成与App登录

目录 描述app端从登录请求到首页显示的全部流程 描述用户微服务的组成及登录业务及实现逻辑 自己编写用户微服务登录关键逻辑 描述app端从登录请求到首页显示的全部流程 从浏览器发起请求访问app前端 通过nginx请求到我们app前端 在app端我们输入手机号及密码登录 发起请求…

一文大白话讲清楚javascript浮点数精度丢失和解决策略

文章目录 一文大白话讲清楚javascript浮点数精度丢失和解决策略1.问题的来源北京2. 浮点数的存储二进制存储3.精度丢失解决方案 一文大白话讲清楚javascript浮点数精度丢失和解决策略 1.问题的来源北京 我们先看一个经典javascript问题,关于等值判断 let num0.10…

C语言-数据结构-图

目录 一,图的概念 1,图的定义 2,图的基本术语 二,图的存储结构 1,邻接矩阵 2,邻接表 三,图的遍历 1,深度优先搜索 2,广度优先搜素 四,生成树和最小生成树 1,生成树的特点: 2,最小生成树 (1)普利姆算法Prim (2)普里姆算法思路 五,最短路径 1,Dijkstra算法 2,Fl…

C语言-数据结构-查找

目录 一,查找的概念 二,线性查找 1,顺序查找 2,折半查找 3,分块查找 三,树表的查找 1,二叉排序树 (1)查找方式: (2)、二叉排序树的插入和生成 (3)、二叉排序树的删除 2,平衡二叉树 (1)、什么是平衡二叉树 (2)、平衡二叉树的插入调整 (1)L…

【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训

升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…

线程池基础知识

线程池: 顾名思义就是管理一系列线程的资源池。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。 使用线程池的好处 降低资源消耗:通过重复利用已创建的线程降…

ARM 架构--通用寄存器状态寄存器控制寄存器特殊用途寄存器

目录 一?ARM 架构中的寄存器 ARM 架构中的寄存器 通用寄存器 状态寄存器 控制寄存器 特殊用途寄存器 总结 二 通用寄存器 ARM 架构中的通用寄存器 ARMv7 架构 ARMv8 架构 实例 ARMv7 架构 ARMv8 架构 三 状态寄存器 ARM 架构中的状态寄存器 状态寄存器 详细…

macrodroid通过http请求控制手机运行宏

macrodroid adb命令 adb shell pm grant com.arlosoft.macrodroid android.permission.WRITE_SECURE_SETTINGS例:http请求手机播放指定MP3文件 声音素材_电量过低提醒 新建一个宏 添加触发器-连接-http服务器请求 路径随意填,最好不要有特殊符号,不然浏览器识别链接会出错,…

【CSS in Depth 2 精译_098】17.3:CSS 动画延迟技术与填充模式设置 + 17.4:通过 CSS 动画传递意图的秘诀

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 17 章 动画】 ✔️ 17.1 关键帧17.2 3D 变换下的动画设置 17.2.1 添加动画前页面布局的构建17.2.2 为布局添加动画 17.3 动画延迟与填充模式 ✔️17.4 通过动画传递意图…

慧集通客户案例:致远OA与熵基考勤机集成方案

本原型公司是一家专注大健康产业的综合性高新科技形实体企业,按照单位的战略业务布局,围绕“做强做优、世界一流”的目标,加快内外部资源整合、加强业务协同、优化资源配置,有序推进大健康及相关产业的有机融合,加快构…

深度学习笔记(6)——循环神经网络RNN

循环神经网络 RNN 核心思想:RNN内部有一个“内部状态”,随着序列处理而更新 h t f W ( h t − 1 , x t ) h_tf_W(h_{t-1},x_t) ht​fW​(ht−1​,xt​) h t h_t ht​是new state, h t − 1 h_{t-1} ht−1​是old state, x t x_t xt​是当前时间步的输入,所有时间步共享 f W…

电脑卡顿救星,Mem Reduct 智能清理 10%以上内存

作为一款专业的内存优化工具,Mem Reduct凭借其强大的功能和极致的性能表现,成为众多用户管理系统内存的首选软件。它采用先进的内存管理算法,通过调用系统底层API接口,能够智能识别并清理各类内存占用,包括但不限于系统…

kibana启动报错:Invalid character in header content [“kbn-name“]

启动时候kibana报错: 打开 kibana配置文件,config/kibana.yml,配置上server.name即可,如下: