GeneFace++ 数字人 Demo

GeneFace++:通用且稳定的实时音频驱动 3D 说话人脸生成技术

本教程为大家搭建好了相关环境,只需按照步骤操作即可生成个性化数字人

一、项目简介

GeneFace 可以通过音频来驱动 3D 的人脸合成唇语讲话视频,是一种通用且高保真度的基于 NeRF 的说话人脸生成方法,可以生成与各种领域外音频相对应的自然结果。具体来说,GeneFace 在一个庞大的唇语语料库上学习了一个变分运动生成器,并引入了一个领域自适应后处理网络来校准结果。大量实验证明,与先前的方法相比,GeneFace 的方法实现了更加通用和高保真度的说话人脸生成。

二、 Demo 运行方法

视频教程参考:【零基础+保姆级】揭秘克隆数字人制作全过程,GeneFace++一键启用无硬件要求,人人都能学会的数字分身教程

1. 进入网页

启动容器后点击 API 地址即可进入 Web 界面

2. 关闭网站

在运行网站的终端上输入 Ctrl + C  即可终止网站的运行。如果把终端页关闭了,选择工作空间左侧选项卡第二项,在里面可以找回被关闭的终端页面。

3ß

如果一个终端正在运行一个程序,是不能运行其他命令的。可以选择终止当前的程序或者新开一个终端来运行其他命令。

三、训练个性化模型运行方法

以下是整理后的 Markdown 文档,保证内容整洁易懂,同时保持图像和链接位置不变。

1. 准备工作

准备好自己的数字人视频。视频宽高建议为正方形,因为训练好的视频会自动裁剪为 512 * 512  尺寸。如果视频为其他尺寸,裁剪后可能出现黑边,黑边过大会影响训练效果。视频格式需为 mp4,将视频拖拽至网页左下角的上传区域即可上传。

注意事项:

  • 视频名称不应包含中文。
  • 视频背景需干净、无多余元素,最好为纯色背景。如果背景元素过多或杂乱,可能导致背景提取失败。
  • 视频脸部需清晰,人脸应占据画面主题部分。建议使用肩部以上的特写画面,不使用半身视频,否则会导致人脸模糊。

示例画面如下⬇️
meimei

训练参数建议

选择一个合适的训练步数,推荐 50000 步以上。以下是参考时间:

  • 项目提供的示例视频(May):
    视频时长约 4 分钟,制作数据集约 1 小时。训练 50000 步单个模型约需 1 小时。
    整体训练需制作两个模型,总耗时约 2-3 小时。
  • 视频长度建议:
    视频时长应为 3-5 分钟。太短的视频,即使训练良久也难以获得较好效果;太长的视频则会延长训练时间。

训练进度

可在终端执行下面命令查看训练进度 bash tail -f app.log   当显示 This Video has Trained!训练完毕! 

模型训练结果

训练完成后,可在右侧的 torso model ckpt path or directory  中找到与视频相关的两个文件夹(位于 motion2video_nerf  目录下)。选择 videoid_torso  文件夹中的模型即可使用。

注意事项:

  • 右侧的前两个模型必须选中,否则将使用默认模型。
  • 第一个模型为声音到手势的转换模型,选择 audio2motion_vae 中的模型即可。
  • 如果 torso 处选择了 head 模型,可能会报错:
    Inference ERROR: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!!

使用已训练模型

如果已有训练好的模型,可以将其放置于类似的文件夹结构下直接使用。

2. 重新训练

训练模型的整个过程可以概括为:生成数据集,训练头部模型,训练肩部模型。为了避免重复部分过程或者意外中断而从头来过,在完成每一个步骤时,代码都会记录下完成步骤。对名称相同的视频,会跳过已经进行的步骤,直接进行上次未完成的步骤。

如果你希望以新的步数重新训练模型,只需要将训练好的两个文件夹删了,可以运行以下命令删除模型文件夹。如果只希望重新训练肩部模型,只需要删除 torso 文件夹即可。

rm -r /openbayes/home/geneface_out/checkpoints/motion2video_nerf/把这里换成你的视频名称_head
rm -r /openbayes/home/geneface_out/checkpoints/motion2video_nerf/把这里换成你的视频名称_torso

四、清理数据

不打算重新训练了,可以清理掉数据集数据,运行下行脚本可以清理掉数据集的全部数据,节约空间。因为制作数据集的时间也很长,所以删除时务必考虑清楚。输入视频名称时均不用带后缀 mp4

/output/clear_video_data.sh 你的视频名称

如果想彻底清空某个视频的全部数据,可以运行以下脚本:

/output/clear_video_data.sh/output/clear_all_data.sh 你的视频名称

五、文件夹结构简介

当你新训练一个视频的时候,会在 geneface_out 下产生以下文件与文件夹,其中 VIDEO_ID 为你的视频名称。

- geneface_out

-- binary
--- videos
---- {VIDEO_ID}
----- trainval_dataset.npy # 制作好的数据集,推理和训练的时候都用它

--processed #生成数据集过程中存放数据的文件夹
--- videos
---- {VIDEO_ID} # 从视频中提取的所有数据都在这,制作好数据集(即上面的 trainval_dataset.npy)后就没用了

-- raw
--- videos
---- {VIDEO_ID}.mp4 # 存放着你上传的视频的 512*512 版本,制作好数据集后就不需要了

-- view_check # 用于访问 checkpoints 的软链接
-- checkpoints 
--- motion2video_nerf # 存放训练好的模型数据
---- {VIDEO_ID}_head
---- {VIDEO_ID}_torso