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以内,不然会爆内存被杀死

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】Java DL4J基于 CNN 构建车辆识别与跟踪模型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

如何在短时间内读懂复杂的英文文献?

当我们拿起一篇文献开始阅读时,就像是打开了一扇通往未知世界的大门。但别急着一头扎进去,咱们得像个侦探一样,带着疑问去探险。毕竟,知识的海洋深不可测,不带点“装备”怎么行?今天就聊聊,平时…

uniapp中Nvue白屏问题 ReferenceError: require is not defined

uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…

Elasticsearch:使用 Ollama 和 Go 开发 RAG 应用程序

作者:来自 Elastic Gustavo Llermaly 使用 Ollama 通过 Go 创建 RAG 应用程序来利用本地模型。 关于各种开放模型,有很多话要说。其中一些被称为 Mixtral 系列,各种规模都有,而一种可能不太为人所知的是 openbiollm,这…

SpringBoot(Ⅱ)——@SpringBootApplication注解+自动装配原理+约定大于配置

1. SpringBootApplication注解 SpringBootApplication标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就通过运行这个类的main方法来启动SpringBoot应用; 并且Configuration注解中也有Component注解,所以这个主启动类/主配置类…

指针与数组:深入C语言的内存操作艺术

数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组…

Python的数字类型

python的数字类型包括:整数,浮点数,复数。 整数 python的整数没有长度限制,无限大,有无限的精度 python的整数除法,即便能整除,结果也是小数,小数 在python中用float类型表示&…

【连续学习之SS-IL算法】2021年CPVR会议论文Ss-il:Separated softmax for incremental learning

1 介绍 年份:2021 期刊: 2021CPVR Ahn H, Kwak J, Lim S, et al. Ss-il: Separated softmax for incremental learning[C]//Proceedings of the IEEE/CVF International conference on computer vision. 2021: 844-853. 本文提出的SS-IL&#xff08…

3.BMS系统原理图解读

一、BMS电池板 (1)电池的连接关系:串联 (2)采样控制点:CELL0 - CELL5 (3)端子P1和P3:BAT和BAT- (4)开关S1:控制充放电回路的机械开关 二、BMS控制板 (1)主控MCU 电源 复位 晶振 (2)LED指示灯:4电量指示 1调试指…

洛谷P5250 【深基17.例5】木材仓库(c嘎嘎)

题目链接:P5250 【深基17.例5】木材仓库 - 洛谷 | 计算机科学教育新生态 题目难度:普及/提高 解题心得:本题借鉴了大佬的做法(因为没想多好的处理方法~~),本题可以用map,对于操作1,存的话直接另…

pyqt和pycharm环境搭建

安装 python安装: https://www.python.org/downloads/release/python-3913/ python3.9.13 64位(记得勾选Path环境变量) pycharm安装: https://www.jetbrains.com/pycharm/download/?sectionwindows community免费版 换源: pip config se…

ArcGIS Pro地形图四至角图经纬度标注与格网标注

今天来看看ArcGIS Pro 如何在地形图上设置四至角点的经纬度。方里网标注。如下图的地形图左下角经纬度标注。 如下图方里网的标注 如下为本期要介绍的例图,如下: 图片可点击放大 接下来我们来介绍一下 推荐学习:GIS入门模型构建器Arcpy批量…

深度学习与图像处理(国产深度学习框架——飞桨官方指定教材)

计算机视觉从小白到大师之路 《深度学习与图像处理(PaddlePaddle版)》这一本就够了 1.引言 随着人工智能技术的飞速发展,各行各业对深度学习、图像处理相关领域的人才需求日益迫切。本书旨在通过系统的理论讲解与丰富的实战案例&#xff0…

Bluetooth Spec【0】蓝牙核心架构

蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…

代码随想录Day51 99. 岛屿数量,99. 岛屿数量,100. 岛屿的最大面积。

1.岛屿数量深搜 卡码网题目链接(ACM模式)(opens new window) 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接…

【机器学习与数据挖掘实战】案例06:基于Apriori算法的餐饮企业菜品关联分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

突破传统,探索单页网站的强大潜力!

单页网站简单、直接,而且设计通常令人惊叹,非常适合展示关键信息而不会让访问者不知所措。 然而,构建单页网站有其自身的挑战,尤其是在 SEO 方面。由于内容数量有限且针对特定关键字的页面较少,可能很难在 SERP 中进行…

攻防世界web新手第四题easyphp

<?php highlight_file(__FILE__); $key1 0; $key2 0;$a $_GET[a]; $b $_GET[b];if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){if(isset($b) && 8b184b substr(md5($b),-6,6)){$key1 1;}else{die("Emmm...再想想&quo…

Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 比赛信息管理 看板展示 系统管理 摘要 本文使用Python与…

【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。

起因&#xff1a; pyinstaller加上 --icon 参数打包时报错。 命令如下&#xff1a; 解决&#xff1a; 关闭 Windows 的病毒防护即可&#xff0c;步骤如下。 点屏幕右下角通知栏&#xff0c;进入“病毒和威胁防护”&#xff1a; 打开&#xff1a; 关闭实时保护&#xff08…