文章目录
- 一、项目介绍
- 二、项目部署
- 模型的权重下载
- 提取目标图像的关节点图像(这个可以先不看先用官方提供的数据集进行生成)
- 提取人脸(这个也可以先不看)
- 进行图片的生成
- 三、模型部署报错
一、项目介绍
由复旦、微软、虎牙、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以内,不然会爆内存被杀死
参考的图像
生成的结果