简单的模型训练和推理,不涉及源码等的修改,超级简单!!!!

示例1
示例2

数据集准备

几段录好的人物说话的视频,要求:

  1. 人物口型清晰
  2. 视频帧数统一调整为 25 fps
  3. 视频录得多一点
  4. 找不到的可以使用 AVSpeech 数据集,自行百度

需要下载的文件和工具

  1. OpenFace
    x64_github
    x86_github
    用于人脸关键点的检测,训练和推理的时候都需要

  2. asserts.zip
    将该文件放在项目的根目录,并解压到 asserts 文件夹

本来想分享阿里云盘的,但是不让分享,下载的网络问题各位自行解决吧在这里插入图片描述

数据集预处理

打开 OpenFaceOffline.exe(下载的我提供的网盘文件,不然要先运行 download_models.ps1 下载模型文件,下载不动的自行解决网络问题)’=

!!!!必须先进行如下设置再进行接下来的操作!!!!
在这里插入图片描述

设置完成后,点击 File ===> Open Video(s),采集自己的视频,完成后会在 processed 文件夹下生成如下三个文件

在这里插入图片描述

我们只需要 .csv 文件,将其放在

./DINet/asserts/training_data/split_video_25fps_landmark_openface/

将你的数据集视频(不是这里的 .avi 文件)放在

./DINet/asserts/training_data/split_video_25fps/

依次运行以下代码进行数据处理

从所有视频中提取帧并将帧保存在“./asserts/training_data/split_video_25fps_frame”中
python data_processing.py --extract_video_frame

从所有视频中提取音频并将音频保存在“./asserts/training_data/split_video_25fps_audio”中
python data_processing.py --extract_audio

从所有音频中提取深度语音特征并将特征保存在“./asserts/training_data/split_video_25fps_deepspeech”中
python data_processing.py --extract_deep_speech

从所有视频中裁剪面部并将图像保存在“./asserts/training_data/split_video_25fps_crop_face”中
python data_processing.py --crop_face

生成训练 json 文件“./asserts/training_data/training_json.json”
python data_processing.py --generate_training_json

处理完成后目录
在这里插入图片描述

模型训练

分为 Frame trainingClip training 两步。

首先,以 104x80(嘴部区域为 64x64)分辨率训练 DINet。

python train_DINet_frame.py --augment_num=32 \
	--mouth_region_size=64 --batch_size=24 \
	--result_path=./asserts/training_model_weight/frame_training_64

当损失收敛时,您可以停止训练(我在 274 epoch 时停止)。

注:关于收敛判断,可以观察输出日志中的学习率参数 lr_g 当它到原来的 50% 就差不多了,下同

加载预训练模型(面部:104x80 和嘴巴:64x64)并以更高分辨率训练 DINet(面部:208x160 和嘴巴:128x128)

python train_DINet_frame.py --augment_num=100 \
	--mouth_region_size=128 --batch_size=80 --coarse2fine \
	--coarse_model_path=./asserts/training_model_weight/frame_training_64/xxxxxx.pth \
	--result_path=./asserts/training_model_weight/frame_training_128

当损失收敛时,您可以停止训练(我在 266 epoch 时停止)


加载预训练模型(面部:208x160 和嘴巴:128x128)并以更高分辨率训练 DINet(面部:416x320 和嘴巴:256x256)

python train_DINet_frame.py --augment_num=20 \
	--mouth_region_size=256 --batch_size=12 --coarse2fine \
	--coarse_model_path=./asserts/training_model_weight/frame_training_128/xxxxxx.pth \
	--result_path=./asserts/training_model_weight/frame_training_256

当损失收敛时,您可以停止训练(我在 396 epoch 时停止)。


加载上面预训练的 256x256 的模型、预训练的 syncnet 模型(嘴巴:256x256),执行以下代码进行最终训练 DINet 模型。

python train_DINet_clip.py --augment_num=3 --mouth_region_size=256 \
	--batch_size=3 --pretrained_syncnet_path=./asserts/syncnet_256mouth.pth \
	--pretrained_frame_DINet_path=./asserts/training_model_weight/frame_training_256/xxxxx.pth \
	--result_path=./asserts/training_model_weight/clip_training_256

当损失收敛时,您可以停止训练(我在 276 epoch 时停止)

最终训练完成,目录结构如下,其中 clip_training_256 中我们推理要使用的模型。
在这里插入图片描述


推理

上传自己视频音频.csv 文件
执行以下代码

python inference.py \
    --mouth_region_size=256 \
    --source_video_path=./DINet/inputs/video/test.mp4 \
    --source_openface_landmark_path=./DINet/inputs/csv/test.csv \
    --driving_audio_path=./DINet/inputs/audio/007537.wav \
    --pretrained_clip_DINet_path=./asserts/training_model_weight/clip_training_256/netG_model_epoch_276.pth
Logo

尧米是由西云算力与CSDN联合运营的AI算力和模型开源社区品牌,为基于DaModel智算平台的AI应用企业和泛AI开发者提供技术交流与成果转化平台。

更多推荐