MuseV / README-zh.md
kevinwang676's picture
Upload folder using huggingface_hub
bb46cbe verified

A newer version of the Gradio SDK is available: 5.5.0

Upgrade

MuseV English 中文

MuseV:基于视觉条件并行去噪的无限长度和高保真虚拟人视频生成。
Zhiqiang Xia *, Zhaokang Chen*, Bin Wu, Chao Li, Kwok-Wai Hung, Chao Zhan, Yingjie He, Wenjiang Zhou (*co-first author, Corresponding Author, [email protected])

github huggingface HuggingfaceSpace [project](comming soon) Technical report (comming soon)

我们在2023年3月相信扩散模型可以模拟世界,也开始基于扩散模型研发世界视觉模拟器。MuseV是在 2023 年 7 月左右实现的一个里程碑。受到 Sora 进展的启发,我们决定开源 MuseV。MuseV 站在开源的肩膀上成长,也希望能够借此反馈社区。接下来,我们将转向有前景的扩散+变换器方案。

我们已经发布 MuseTalk. MuseTalk是一个实时高质量的唇同步模型,可与 MuseV 一起构建完整的虚拟人生成解决方案。请保持关注!

概述

MuseV 是基于扩散模型的虚拟人视频生成框架,具有以下特点:

  1. 支持使用新颖的视觉条件并行去噪方案进行无限长度生成,不会再有误差累计的问题,尤其适用于固定相机位的场景。
  2. 提供了基于人物类型数据集训练的虚拟人视频生成预训练模型。
  3. 支持图像到视频、文本到图像到视频、视频到视频的生成。
  4. 兼容 Stable Diffusion 文图生成生态系统,包括 base_modelloracontrolnet 等。
  5. 支持多参考图像技术,包括 IPAdapterReferenceOnlyReferenceNetIPAdapterFaceID
  6. 我们后面也会推出训练代码。

重要更新

  1. musev_referencenet_pose: unet, ip_adapter 的模型名字指定错误,请使用 musev_referencenet_pose而不是musev_referencenet,请使用最新的main分支。

进展

  • [2024年3月27日] 发布 MuseV 项目和训练好的模型 musevmuse_referencenetmuse_referencenet_pose
  • [03/30/2024] 在 huggingface space 上新增 gui 交互方式来生成视频.

模型

模型结构示意图

model_structure

并行去噪算法示意图

parallel_denoise

测试用例

生成结果的所有帧直接由MuseV生成,没有时序超分辨、空间超分辨等任何后处理。

以下所有测试用例都维护在 configs/tasks/example.yaml,可以直接运行复现。

输入文本、图像的视频生成

人类

image video prompt
(masterpiece, best quality, highres:1),(1girl, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:{eye_blinks_factor}),(head wave:1.3)
(masterpiece, best quality, highres:1),(1girl, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:{eye_blinks_factor}),(head wave:1.3)
(masterpiece, best quality, highres:1), peaceful beautiful sea scene
(masterpiece, best quality, highres:1), peaceful beautiful sea scene
(masterpiece, best quality, highres:1), playing guitar
(masterpiece, best quality, highres:1), playing guitar
(masterpiece, best quality, highres:1), playing guitar
(masterpiece, best quality, highres:1), playing guitar
(masterpiece, best quality, highres:1),(1man, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:{eye_blinks_factor}),(head wave:1.3)
(masterpiece, best quality, highres:1),(1girl, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:{eye_blinks_factor}),(head wave:1.3)
(masterpiece, best quality, highres:1),(1man, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:{eye_blinks_factor}),(head wave:1.3)
(masterpiece, best quality, highres:1),(1girl, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:{eye_blinks_factor}),(head wave:1.3)
(masterpiece, best quality, highres:1),(1girl, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:{eye_blinks_factor}),(head wave:1.3)

场景

image video prompt
(masterpiece, best quality, highres:1), peaceful beautiful waterfall, an endless waterfall
(masterpiece, best quality, highres:1), peaceful beautiful river
(masterpiece, best quality, highres:1), peaceful beautiful sea scene

输入视频条件的视频生成

当前生成模式下,需要参考视频的首帧条件和参考图像的首帧条件对齐,不然会破坏首帧的信息,效果会更差。所以一般生成流程是

  1. 确定参考视频;
  2. 用参考视频的首帧走图生图、controlnet流程,可以使用MJ等各种平台;
  3. 拿2中的生成图、参考视频用MuseV生成视频;
  4. pose2video

duffy 的测试用例中,视觉条件帧的姿势与控制视频的第一帧不对齐。需要posealign 将解决这个问题。

image video prompt
(masterpiece, best quality, highres:1)
(masterpiece, best quality, highres:1)

MuseTalk

talk的角色孙昕荧著名的网络大V,可以在 抖音 关注。

name video
talk
talk
sing

待办事项:

  • 技术报告(即将推出)。
  • 训练代码。
  • 扩散变换生成框架。
  • posealign 模块。

快速入门

准备 Python 环境并安装额外的包,如 diffuserscontrolnet_auxmmcm

准备环境

建议您优先使用 docker 来准备 Python 环境。

准备 Python 环境

注意:我们只测试了 Docker,使用 conda 或其他环境可能会遇到问题。我们将尽力解决。但依然请优先使用 docker

方法 1:使用 Docker

  1. 拉取 Docker 镜像
docker pull anchorxia/musev:latest
  1. 运行 Docker 容器
docker run --gpus all -it --entrypoint /bin/bash anchorxia/musev:latest

docker启动后默认的 conda 环境是 musev

方法 2:使用 conda

从 environment.yaml 创建 conda 环境

conda env create --name musev --file ./environment.yml

方法 3:使用 pip requirements

pip install -r requirements.txt

准备 openmmlab

如果不使用 Docker方式,还需要额外安装 mmlab 包。

pip install--no-cache-dir -U openmim 
mim install mmengine 
mim install "mmcv>=2.0.1" 
mim install "mmdet>=3.1.0" 
mim install "mmpose>=1.1.0" 

准备我们开发的包

下载

git clone --recursive https://github.com/TMElyralab/MuseV.git

准备 PYTHONPATH

current_dir=$(pwd)
export PYTHONPATH=${PYTHONPATH}:${current_dir}/MuseV
export PYTHONPATH=${PYTHONPATH}:${current_dir}/MuseV/MMCM
export PYTHONPATH=${PYTHONPATH}:${current_dir}/MuseV/diffusers/src
export PYTHONPATH=${PYTHONPATH}:${current_dir}/MuseV/controlnet_aux/src
cd MuseV
  1. MMCM:多媒体、跨模态处理包。
  2. diffusers:基于 diffusers 修改的 diffusers 包。
  3. controlnet_aux:基于 controlnet_aux 修改的包。

下载模型

git clone https://huggingface.co/TMElyralab/MuseV ./checkpoints
  • motion:多个版本的视频生成模型。使用小数据集 ucf101 和小 webvid 数据子集进行训练,约 60K 个视频文本对。GPU 内存消耗测试在 resolution $=512*512,time_size=12
    • musev/unet:这个版本 仅训练 unet 运动模块。推断 GPU 内存消耗 $\approx 8G$。
    • musev_referencenet:这个版本训练 unet 运动模块、referencenetIPAdapter。推断 GPU 内存消耗 $\approx 12G$。
      • unetmotion 模块,具有 Attention 层中的 to_kto_v,参考 IPAdapter
      • referencenet:类似于 AnimateAnyone
      • ip_adapter_image_proj.bin:图像特征变换层,参考 IPAdapter
    • musev_referencenet_pose:这个版本基于 musev_referencenet,固定 referencenetcontrolnet_pose,训练 unet motionIPAdapter。推断 GPU 内存消耗 $\approx 12G$。
  • t2i/sd1.5:text2image 模型,在训练运动模块时参数被冻结。
    • majicmixRealv6Fp16:示例,可以替换为其他 t2i 基础。从 majicmixRealv6Fp16 下载。
  • IP-Adapter/models:从 IPAdapter 下载。
    • image_encoder:视觉特征抽取模型。
    • ip-adapter_sd15.bin:原始 IPAdapter 模型预训练权重。
    • ip-adapter-faceid_sd15.bin:原始 IPAdapter 模型预训练权重。

推理

准备模型路径

当使用示例推断命令运行示例任务时,可以跳过此步骤。 该模块主要是在配置文件中设置模型路径和缩写,以在推断脚本中使用简单缩写而不是完整路径。

  • T2I SD:参考 musev/configs/model/T2I_all_model.py
  • 运动 Unet:参考 musev/configs/model/motion_model.py
  • 任务:参考 musev/configs/tasks/example.yaml

musev_referencenet

输入文本、图像的视频生成

python scripts/inference/text2video.py   --sd_model_name majicmixRealv6Fp16   --unet_model_name musev_referencenet --referencenet_model_name musev_referencenet --ip_adapter_model_name musev_referencenet   -test_data_path ./configs/tasks/example.yaml  --output_dir ./output  --n_batch 1  --target_datas yongen  --vision_clip_extractor_class_name ImageClipVisionFeatureExtractor --vision_clip_model_path ./checkpoints/IP-Adapter/models/image_encoder  --time_size 12 --fps 12  

通用参数

  • test_data_path:测试用例 任务路径
  • target_datas:如果 test_data_path 中的 nametarget_datas 中,则只运行这些子任务。sep,
  • sd_model_cfg_path:T2I sd 模型路径,模型配置路径或模型路径。
  • sd_model_name:sd 模型名称,用于在 sd_model_cfg_path 中选择完整模型路径。使用 , 分隔的多个模型名称,或 all
  • unet_model_cfg_path:运动 unet 模型配置路径或模型路径。
  • unet_model_name:unet 模型名称,用于获取 unet_model_cfg_path 中的模型路径,并在 musev/models/unet_loader.py 中初始化 unet 类实例。使用 , 分隔的多个模型名称,或 all。如果 unet_model_cfg_path 是模型路径,则 unet_name 必须在 musev/models/unet_loader.py 中支持。
  • time_size:扩散模型每次生成一个片段,这里是一个片段的帧数。默认为 12
  • n_batch:首尾相连方式生成总片段数,$total_frames=n_batch * time_size + n_viscond$,默认为 1
  • context_frames: 并行去噪子窗口一次生成的帧数。如果 time_size > context_frame,则会启动并行去噪逻辑, time_size 窗口会分成多个子窗口进行并行去噪。默认为 12

生成长视频,有两种方法,可以共同使用:

  1. 视觉条件并行去噪:设置 n_batch=1time_size = 想要的所有帧。
  2. 传统的首尾相连方式:设置 time_size = context_frames = 一次片段的帧数 (12),context_overlap = 0。会首尾相连方式生成n_batch片段数,首尾相连存在误差累计,当n_batch越大,最后的结果越差。

模型参数: 支持 referencenetIPAdapterIPAdapterFaceIDFacein

  • referencenet_model_namereferencenet 模型名称。
  • ImageClipVisionFeatureExtractorImageEmbExtractor 名称,在 IPAdapter 中提取视觉特征。
  • vision_clip_model_pathImageClipVisionFeatureExtractor 模型路径。
  • ip_adapter_model_name:来自 IPAdapter 的,它是 ImagePromptEmbProj,与 ImageEmbExtractor 一起使用。
  • ip_adapter_face_model_nameIPAdapterFaceID,来自 IPAdapter,应该设置 face_image_path

一些影响运动范围和生成结果的参数

  • video_guidance_scale:类似于 text2image,控制 cond 和 uncond 之间的影响,影响较大,默认为 3.5
  • guidance_scale:在第一帧图像中 cond 和 uncond 之间的参数比例,,影响不大,默认为 3.5
  • use_condition_image:是否使用给定的第一帧进行视频生成。
  • redraw_condition_image:是否重新绘制给定的第一帧图像。
  • video_negative_prompt:配置文件中全 negative_prompt 的缩写。默认为 V2

输入视频的视频生成

python scripts/inference/video2video.py --sd_model_name majicmixRealv6Fp16  --unet_model_name musev_referencenet --referencenet_model_name   musev_referencenet --ip_adapter_model_name musev_referencenet    -test_data_path ./configs/tasks/example.yaml    --vision_clip_extractor_class_name ImageClipVisionFeatureExtractor --vision_clip_model_path ./checkpoints/IP-Adapter/models/image_encoder      --output_dir ./output  --n_batch 1 --controlnet_name dwpose_body_hand  --which2video "video_middle"  --target_datas dacne1 --fps 12 --time_size 12

一些重要参数

大多数参数与 musev_text2video 相同。video2video 的特殊参数有:

  1. 需要在 test_data 中设置 video_path。现在支持 rgb videocontrolnet_middle_video
  • which2video: 参与引导视频视频的参考视频部分。 如果是 video_middle,则只使用类似posedepthvideo_middle,如果是 video, 视频本身会参与视频噪声初始化。等价于img2imge
  • controlnet_name:是否使用 controlnet condition,例如 dwpose,depth, pose的话 优先建议使用dwpose_body_hand
  • video_is_middlevideo_pathrgb video 还是 controlnet_middle_video。可以为 test_data_path 中的每个 test_data 设置。
  • video_has_condition:condtion_images 是否与 video_path 的第一帧对齐。如果不是,则首先生成 condition_images,然后与拼接对齐。设置在 test_data 中。

所有 controlnet_names 维护在 mmcm

['pose', 'pose_body', 'pose_hand', 'pose_face', 'pose_hand_body', 'pose_hand_face', 'dwpose', 'dwpose_face', 'dwpose_hand', 'dwpose_body', 'dwpose_body_hand', 'canny', 'tile', 'hed', 'hed_scribble', 'depth', 'pidi', 'normal_bae', 'lineart', 'lineart_anime', 'zoe', 'sam', 'mobile_sam', 'leres', 'content', 'face_detector']

musev_referencenet_pose

仅用于 pose2video 基于 musev_referencenet 训练,固定 referencenetpose-controlnetT2I,训练 motion 模块和 IPAdapter

python scripts/inference/video2video.py --sd_model_name majicmixRealv6Fp16  --unet_model_name musev_referencenet_pose --referencenet_model_name   musev_referencenet --ip_adapter_model_name musev_referencenet_pose    -test_data_path ./configs/tasks/example.yaml    --vision_clip_extractor_class_name ImageClipVisionFeatureExtractor --vision_clip_model_path ./checkpoints/IP-Adapter/models/image_encoder      --output_dir ./output  --n_batch 1 --controlnet_name dwpose_body_hand  --which2video "video_middle"  --target_datas  dacne1   --fps 12 --time_size 12

musev

仅有动作模块,没有 referencenet,需要更少的 GPU 内存。

文本到视频

python scripts/inference/text2video.py   --sd_model_name majicmixRealv6Fp16   --unet_model_name musev   -test_data_path ./configs/tasks/example.yaml  --output_dir ./output  --n_batch 1  --target_datas yongen  --time_size 12 --fps 12

视频到视频

python scripts/inference/video2video.py --sd_model_name majicmixRealv6Fp16  --unet_model_name musev    -test_data_path ./configs/tasks/example.yaml --output_dir ./output  --n_batch 1 --controlnet_name dwpose_body_hand  --which2video "video_middle"  --target_datas  dacne1   --fps 12 --time_size 12

Gradio 演示

MuseV 提供 gradio 脚本,可在本地机器上生成 GUI,方便生成视频。

cd scripts/gradio
python app.py

致谢

  1. MuseV 开发过程中参考学习了很多开源工作 TuneAVideodiffusersMoore-AnimateAnyoneanimatediffIP-AdapterAnimateAnyoneVideoFusioninsightface
  2. MuseV 基于 ucf101webvid 数据集构建。

感谢开源社区的贡献!

限制

MuseV 仍然存在很多待优化项,包括:

  1. 缺乏泛化能力。对视觉条件帧敏感,有些视觉条件图像表现良好,有些表现不佳。有些预训练的 t2i 模型表现良好,有些表现不佳。
  2. 有限的视频生成类型和有限的动作范围,部分原因是训练数据类型有限。发布的 MuseV 已经在大约 6 万对分辨率为 512*320 的人类文本视频对上进行了训练。MuseV 在较低分辨率下具有更大的动作范围,但视频质量较低。MuseV 在高分辨率下画质很好、但动作范围较小。在更大、更高分辨率、更高质量的文本视频数据集上进行训练可能会使 MuseV 更好。
  3. 因为使用 webvid 训练会有水印问题。使用没有水印的、更干净的数据集可能会解决这个问题。
  4. 有限类型的长视频生成。视觉条件并行去噪可以解决视频生成的累积误差,但当前的方法只适用于相对固定的摄像机场景。
  5. referencenet 和 IP-Adapter 训练不足,因为时间有限和资源有限。
  6. 代码结构不够完善。MuseV 支持丰富而动态的功能,但代码复杂且未经过重构。熟悉需要时间。

引用

@article{musev,
  title={MuseV: 基于视觉条件的并行去噪的无限长度和高保真虚拟人视频生成},
  author={Xia, Zhiqiang and Chen, Zhaokang and Wu, Bin and Li, Chao and Hung, Kwok-Wai and Zhan, Chao and He, Yingjie and Zhou, Wenjiang},
  journal={arxiv},
  year={2024}
}

免责声明/许可

  1. 代码MuseV 的代码采用 MIT 许可证发布,学术用途和商业用途都可以。
  2. 模型:训练好的模型仅供非商业研究目的使用。
  3. 其他开源模型:使用的其他开源模型必须遵守他们的许可证,如 insightfaceIP-Adapterft-mse-vae 等。
  4. 测试数据收集自互联网,仅供非商业研究目的使用。
  5. AIGC:本项目旨在积极影响基于人工智能的视频生成领域。用户被授予使用此工具创建视频的自由,但他们应该遵守当地法律,并负责任地使用。开发人员不对用户可能的不当使用承担任何责任。