MuseV:基于视觉条件并行去噪的无限长度和高保真虚拟人视频生成。
Zhiqiang Xia *, Zhaokang Chen*, Bin Wu†, Chao Li, Kwok-Wai Hung, Chao Zhan, Yingjie He, Wenjiang Zhou (*co-first author, †Corresponding Author, benbinwu@tencent.com)
github huggingface HuggingfaceSpace project Technical report (comming soon)
我们在2023年3月相信扩散模型可以模拟世界,也开始基于扩散模型研发世界视觉模拟器。MuseV是在 2023 年 7 月左右实现的一个里程碑。受到 Sora 进展的启发,我们决定开源 MuseV。MuseV 站在开源的肩膀上成长,也希望能够借此反馈社区。接下来,我们将转向有前景的扩散+变换器方案。
我们已经发布 MuseTalk. MuseTalk是一个实时高质量的唇同步模型,可与 MuseV 一起构建完整的虚拟人生成解决方案。请保持关注!
:new: 我们新发布了MusePose。 MusePose是一个用于虚拟人物的图像到视频生成框架,它可以根据控制信号(姿态)生成视频。结合 MuseV 和 MuseTalk,我们希望社区能够加入我们,一起迈向一个愿景:能够端到端生成具有全身运动和交互能力的虚拟人物。
MuseV 是基于扩散模型的虚拟人视频生成框架,具有以下特点:
Stable Diffusion 文图生成生态系统,包括 base_model、lora、controlnet 等。IPAdapter、ReferenceOnly、ReferenceNet、IPAdapterFaceID。musev_referencenet_pose: unet, ip_adapter 的模型名字指定错误,请使用 musev_referencenet_pose而不是musev_referencenet,请使用最新的main分支。MuseV 项目和训练好的模型 musev、muse_referencenet、muse_referencenet_pose。

生成结果的所有帧直接由MuseV生成,没有时序超分辨、空间超分辨等任何后处理。
更多测试结果请看MuseVPage
以下所有测试用例都维护在 configs/tasks/example.yaml,可以直接运行复现。
project 有更多测试用例,包括直接生成的、一两分钟的长视频。
| image | video | prompt |
|
(masterpiece, best quality, highres:1),(1boy, solo:1),(eye blinks:1.8),(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),(1man, solo:1),(eye blinks:1.8),(head wave:1.3),Chinese ink painting style | |
|
(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 sea scene |
当前生成模式下,需要参考视频的首帧条件和参考图像的首帧条件对齐,不然会破坏首帧的信息,效果会更差。所以一般生成流程是
1. 确定参考视频;
2. 用参考视频的首帧走图生图、controlnet流程,可以使用MJ等各种平台;
3. 拿2中的生成图、参考视频用MuseV生成视频;
4.
pose2video
duffy 的测试用例中,视觉条件帧的姿势与控制视频的第一帧不对齐。需要posealign 将解决这个问题。
| image | video | prompt |
|
(masterpiece, best quality, highres:1) , a girl is dancing, animation | |
|
(masterpiece, best quality, highres:1), is dancing, animation |
talk的角色孙昕荧著名的网络大V,可以在 抖音 关注。
| name | video |
| talk | |
| sing |
posealign 模块。准备 Python 环境并安装额外的包,如 diffusers、controlnet_aux、mmcm。
一些第三方的整合,方便大家安装、使用,感谢第三方的工作。 同时也希望注意,我们没有对第三方的支持做验证、维护和后续更新,具体效果请以本项目为准。
netdisk:https://www.123pan.com/s/Pf5Yjv-Bb9W3.html code: glut
建议您优先使用 docker 来准备 Python 环境。
注意:我们只测试了 Docker,使用 conda 或其他环境可能会遇到问题。我们将尽力解决。但依然请优先使用 docker。
docker pull anchorxia/musev:latest
docker run --gpus all -it --entrypoint /bin/bash anchorxia/musev:latest
docker启动后默认的 conda 环境是 musev。
从 environment.yaml 创建 conda 环境
conda env create --name musev --file ./environment.yml
pip install -r requirements.txt
如果不使用 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
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
MMCM:多媒体、跨模态处理包。diffusers:基于 diffusers 修改的 diffusers 包。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 运动模块、referencenet、IPAdapter。推断 GPU 内存消耗 $\approx 12G$。unet:motion 模块,具有 Attention 层中的 to_k、to_v,参考 IPAdapter。referencenet:类似于 AnimateAnyone。ip_adapter_image_proj.bin:图像特征变换层,参考 IPAdapter。musev_referencenet_pose:这个版本基于 musev_referencenet,固定 referencenet 和 controlnet_pose,训练 unet motion 和 IPAdapter。推断 GPU 内存消耗 $\approx 12G$。t2i/sd1.5:text2image 模型,在训练运动模块时参数被冻结。majicmixRealv6Fp16:示例,可以替换为其他 t2i 基础。从 majicmixRealv6Fp16 下载。fantasticmix_v10: 可在 fantasticmix_v10 下载。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
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 中的 name 在 target_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=1,time_size = 想要的所有帧。
2. 传统的首尾相连方式:设置 time_size = context_frames = 一次片段的帧数 (12),context_overlap = 0。会首尾相连方式生成n_batch片段数,首尾相连存在误差累计,当n_batch越大,最后的结果越差。
模型参数:
支持 referencenet、IPAdapter、IPAdapterFaceID、Facein。
- referencenet_model_name:referencenet 模型名称。
- ImageClipVisionFeatureExtractor:ImageEmbExtractor 名称,在 IPAdapter 中提取视觉特征。
- vision_clip_model_path:ImageClipVisionFeatureExtractor 模型路径。
- ip_adapter_model_name:来自 IPAdapter 的,它是 ImagePromptEmbProj,与 ImageEmbExtractor 一起使用。
- ip_adapter_face_model_name:IPAdapterFaceID,来自 IPAdapter,应该设置 face_image_path。
一些影响运动范围和生成结果的参数:
- video_guidance_scale:类似于 text2image,控制 cond 和 uncond 之间的影响,影响较大,默认为 3.5。
- use_condition_image:是否使用给定的第一帧进行视频生成, 默认 True。
- 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 dance1 --fps 12 --time_size 12
**一
$ claude mcp add MuseV \
-- python -m otcore.mcp_server <graph>