一、简介
DINet 是一个形变修复网络,专门用于解决高分辨率人脸视觉配音中的难题。它的设计目的是为了提升视觉配音的保真度和细节丰富性,特别是在少样本学习的情境下,即在训练数据较少的情况下依然能够实现较好的配音效果。
DINet的技术实现:
-
形变模块:这个模块通过自适应的空间形变,对参考人脸图像的特征图进行调整,使其与输入的音频驱动和原图中的头部姿态对齐。形变后的特征图包含了嘴部的形状信息,这对于生成自然的嘴部动作至关重要。
-
修复模块:修复模块的作用是将形变后的特征图与原图像的其它属性(如头部姿态和面部表情)进行融合,以生成逼真的视觉配音效果。特征解码器在这个过程中起到关键作用,确保嘴部动作与音频一致,同时保留整体的面部细节。
DINet 使用了自适应空间形变技术来处理高分辨率图像中的细节问题,特别是面部高频纹理的保留。通过形变修复的两阶段处理,DINet 能在视觉配音中达到细腻且自然的效果。
- 少样本学习的应用:DINet 能在少量参考图片和音频数据的基础上生成高质量的人脸视觉配音,具有实用性和可扩展性。
- 保真度高:相比前人工作,DINet 保留了更多的高频细节,生成的视觉配音效果更加真实。
- 丰富的应用前景:DINet 提供了一个强大的模型框架,可以用于需要视觉配音的领域,如影视配音、虚拟人物表情生成等。
DINet 通过空间形变与特征修复相结合,显著提升了视觉配音的效果,尤其是在高分辨率场景下,它展现了优异的性能和广阔的应用前景。
二、环境安装
https://github.com/MRzzm/DINet
conda create -n dinet python==3.9
conda activate dinet
pip install resampy==0.2.2 python_speech_features
pip install numpy==1.22
pip install --force-reinstall opencv-python
pip install scipy==1.5.4
pip install torch=1.7.1 torchvision=0.8.2 protobuf=3.20.0
由于tensorflow 已经没有 1.15.2 版本了,安装其他版本会报错如下:
ERROR: Ignored the following versions that require a different python version: 2.1.0 Requires-Python >=3.10; 2.1.0rc1 Requires-Python >=3.10; 2.1.1 Requires-Python >=3.10
ERROR: Could not find a version that satisfies the requirement keras-nightly~=2.5.0.dev (from tensorflow) (from versions: none)
ERROR: No matching distribution found for keras-nightly~=2.5.0.dev
解决:
pip install -i https://pypi.doubanio.com/simple/ tf-estimator-nightly==2.8.0.dev2021122109
pip install tensorflow-gpu==2.8.0
pip install protobuf==3.20
环境安装完成。
三、数据处理
1.准备数据集
将自己的数据放入 asserts/training_data 文件夹中 split_video_25fps 和 split_video_25fps_landmark_openface ,自己准备的视频,25帧,csv是由openface生成的。
2.从所有视频中提取帧并将帧保存在“./asserts/training_data/split_video_25fps_frame”中
python data_processing.py --extract_video_frame
3.从所有视频中提取音频并将音频保存在“./asserts/training_data/split_video_25fps_audio”中
python data_processing.py --extract_audio
4.从所有音频中提取深度语音特征并将特征保存在“./asserts/training_data/split_video_25fps_deepspeech”中
python data_processing.py --extract_deep_speech
报错:
这是由于tensorflow版本不同,导致的问题,解决:
修改/utils/deep_speech.py文件,将deepspeed/ 删除,解决问题。
5.从所有视频中裁剪脸部并将图像保存在“./asserts/training_data/split_video_25fps_crop_face”中
python data_processing.py --crop_face
6.生成训练 json 文件“./asserts/training_data/training_json.json”
python data_processing.py --generate_training_json
全部生成完成。
四、训练
python train_DINet_frame.py --augment_num=32 --mouth_region_size=64 --batch_size=24 --result_path=./asserts/training_model_weight/frame_training_64
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
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
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