本教程为大家搭建好了相关环境,只需按照步骤操作即可生成个性化数字人
GeneFace 可以通过音频来驱动 3D 的人脸合成唇语讲话视频,是一种通用且高保真度的基于 NeRF 的说话人脸生成方法,可以生成与各种领域外音频相对应的自然结果。具体来说,GeneFace 在一个庞大的唇语语料库上学习了一个变分运动生成器,并引入了一个领域自适应后处理网络来校准结果。大量实验证明,与先前的方法相比,GeneFace 的方法实现了更加通用和高保真度的说话人脸生成。
启动容器后点击 API 地址即可进入 Web 界面
在运行网站的终端上输入 Ctrl + C
即可终止网站的运行。如果把终端页关闭了,选择工作空间左侧选项卡第二项,在里面可以找回被关闭的终端页面。
ß
如果一个终端正在运行一个程序,是不能运行其他命令的。可以选择终止当前的程序或者新开一个终端来运行其他命令。
以下是整理后的 Markdown 文档,保证内容整洁易懂,同时保持图像和链接位置不变。
准备好自己的数字人视频。视频宽高建议为正方形,因为训练好的视频会自动裁剪为 512 * 512
尺寸。如果视频为其他尺寸,裁剪后可能出现黑边,黑边过大会影响训练效果。视频格式需为 mp4
,将视频拖拽至网页左下角的上传区域即可上传。
注意事项:
- 视频名称不应包含中文。
- 视频背景需干净、无多余元素,最好为纯色背景。如果背景元素过多或杂乱,可能导致背景提取失败。
- 视频脸部需清晰,人脸应占据画面主题部分。建议使用肩部以上的特写画面,不使用半身视频,否则会导致人脸模糊。
示例画面如下⬇️
选择一个合适的训练步数,推荐 50000 步以上。以下是参考时间:
可在终端执行下面命令查看训练进度 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!!
如果已有训练好的模型,可以将其放置于类似的文件夹结构下直接使用。
训练模型的整个过程可以概括为:生成数据集,训练头部模型,训练肩部模型。为了避免重复部分过程或者意外中断而从头来过,在完成每一个步骤时,代码都会记录下完成步骤。对名称相同的视频,会跳过已经进行的步骤,直接进行上次未完成的步骤。
如果你希望以新的步数重新训练模型,只需要将训练好的两个文件夹删了,可以运行以下命令删除模型文件夹。如果只希望重新训练肩部模型,只需要删除 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