基于VideoReTalking+GFPGAN的AI数字人

慈云数据 8个月前 (03-12) 技术支持 169 0

VideoReTalking 是一个新颖的系统,用于根据输入音频编辑真实世界中的说话头部视频,生成具有不同情感的高质量和唇部同步的输出视频。

该系统将此目标分解为三个顺序任务:

  1. 具有规范表情的人脸视频生成;
  2. 音频驱动的唇部同步;
  3. 用于提高照片真实感的人脸增强。

wav2lip和VideoReTalking超分后效果对比

文章目录

  • 基本原理
  • 准备工作
    • 创建虚拟环境
    • 激活虚拟环境
    • pip安装匹配版本
    • 模型预测对口型
      • 必要的数据准备
      • 命令行预测
      • 参数解释
      • 其他使用方法
      • WebUI预测

        基本原理

        1. 人脸视频生成:使用表情编辑网络修改每一帧的表情,使其与相同的表情模板相匹配,从而生成具有规范表情的视频。
        2. 音频驱动的唇部同步:将该视频与给定的音频一起输入唇部同步网络,生成唇部同步视频。
        3. 人脸增强:通过身份感知的人脸增强网络和后处理来提高合成人脸的照片真实感。

        所有这些步骤都使用基于ML和DL学习的方法,并且可以在没有任何用户干预的情况下按顺序进行。

        准备工作

        从github上下载源码,下载完毕之后下载模型 pre-trained models。

        在这里插入图片描述

        模型分这么多种类,将全部模型复制到 checkpoints 中。

        创建虚拟环境

        切记这个里面有编译的环境在里面,不要移动创建好的虚拟环境,除非你能自己修改源码修改对应的路径文件。

        conda create -n VideoReTalking python=3.8
        

        激活虚拟环境

        在GIT环境目录下激活,这里是我的路径,修改成你自己的。

        conda activate VideoReTalking 
        

        pip安装匹配版本

        确保安装了所有必要的依赖项,可以通过requirements.txt文件进行安装。

        这里会有个问题要根据显卡选择torch版本,我的显卡是RTX4090,我选择这个安装命令。

        pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
        pip install -r requirements.txt
        

        其他显卡根据情况自行安装。

        pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
        pip install -r requirements.txt
        

        模型预测对口型

        必要的数据准备

        事先还要准备好素材视频和音频文件,这里分别放置原始的图片,音频以及视频文件。

        其中音频和视频文件放在项目目录下的./examples/audio和 ./examples/face中即可。

        在这里插入图片描述

        命令行预测

        使用预训练模型进行快速推理,可以测试任何说话的人脸视频,无需手动对齐。

        \VideoReTalking\python.exe inference.py --face examples/face/1.mp4 --audio examples/audio/1.wav --outfile results/1_1.mp4
        python inference.py --face examples/face/1.mp4 --audio examples/audio/1.wav --outfile results/1_1.mp4
        

        推理总共分6步,依次执行后会在result文件夹下生成对应的视频文件。在这里插入图片描述

        参数解释

        基础参数设置base_options.py

        参数类型默认值解释
        –namestr‘face_recon’实验名称,决定样本和模型存储的位置
        –gpu_idsstr‘0’GPU的ID,例如:0、0,1,2、0,2。使用-1表示CPU
        –checkpoints_dirstr‘./checkpoints’模型存储的目录
        –vis_batch_numsfloat1用于可视化的图像批次数
        –eval_batch_numsfloatinf用于评估的图像批次数,设置为inf表示所有图像都参与评估
        –use_ddpboolTrue是否使用分布式数据并行
        –ddp_portstr‘12355’DDP端口
        –display_per_batchboolTrue是否使用批次显示损失
        –add_imageboolTrue是否将图像添加到Tensorboard中
        –world_sizeint1分布式数据并行的总批次数
        –modelstr‘facerecon’选择要使用的模型
        –epochstr‘latest’要加载的模型的训练轮数,设置为’latest’表示使用最新的缓存模型
        –verbosebool如果指定,则打印更多调试信息
        –suffixstr‘’自定义后缀,将添加到opt.name中,例如:{model}_{netG}_size{load_size}

        推理工具参数设置inference_utils.py

        参数名类型默认值描述
        DNet_pathstr‘checkpoints/DNet.pt’DNet模型的路径
        LNet_pathstr‘checkpoints/LNet.pth’LNet模型的路径
        ENet_pathstr‘checkpoints/ENet.pth’ENet模型的路径
        face3d_net_pathstr‘checkpoints/face3d_pretrain_epoch_20.pth’face3d模型的路径
        facestrNone包含要使用的人脸的视频/图像的文件路径,此参数必填
        audiostrNone要用作原始音频源的视频/音频文件的文件路径,此参数必填
        exp_imgstr‘neutral’表情模板。可以是’neutral’,‘smile’或图像路径。默认为’neutral’
        outfilestrNone要保存结果视频的路径
        fpsfloat25.0只有当输入为静态图像时可以指定的帧率,默认为25.0
        padslist[0, 20, 0, 0]填充(上、下、左、右)。请确保至少包含下巴区域
        face_det_batch_sizeint4人脸检测的批处理大小
        LNet_batch_sizeint16LNet的批处理大小
        img_sizeint384图像的大小(宽度和高度相等)
        croplist[0, -1, 0, -1]将视频裁剪为较小的区域(上、下、左、右)。在resize_factor和rotate参数之后应用。如果有多个人脸,这很有用。 -1表示根据高度、宽度自动推断值
        boxlist[-1, -1, -1, -1]为人脸指定一个固定的边界框。如果人脸检测失败,请仅在万不得已时使用此选项。仅在人脸几乎不移动时有效。 语法:(上、下、左、右)
        nosmoothboolFalse在短时间窗口内阻止平滑人脸检测
        staticboolFalse指定输入是否为静态图像
        up_facestr‘original’人脸朝向的方向。可以是’original’或其他用户指定的方向
        one_shotboolFalse一次处理整个视频而不是逐帧处理
        without_rl1boolFalse不使用相对l1损失
        tmp_dirstr‘temp’保存临时结果的文件夹路径
        re_preprocessboolFalse重新预处理视频(例如,检测新的人脸)

        模型训练参数设置train_options.py,训练模型根据实际情况调整。

        训练数据参数数据类型默认值解释说明
        data_rootstr./数据集根目录
        fliststrdatalist/train/masks.txt训练集掩膜文件名列表
        batch_sizeint32批处理大小
        dataset_modestrflist选择数据集加载方式。[None
        serial_batchesbool如果为True,按顺序获取图像以形成批次;否则随机获取图像。
        num_threadsint4加载数据的线程数
        max_dataset_sizeintinf数据集允许的最大样本数。如果数据集目录包含的样本数超过max_dataset_size,则仅加载子集。
        preprocessstrshift_scale_rot_flip加载时图像的缩放和裁剪方式。[shift_scale_rot_flip
        use_augboolTrue是否使用数据增强
        验证参数数据类型默认值解释说明
        flist_valstrdatalist/val/masks.txt验证集掩膜文件名列表
        batch_size_valint32验证集的批处理大小
        可视化参数数据类型默认值解释说明
        display_freqint1000在屏幕上显示训练结果的频率
        print_freqint100控制台上显示训练结果的频率
        网络保存和加载参数数据类型默认值解释说明
        save_latest_freqint5000保存最新结果的频率
        save_epoch_freqint1在每个epoch结束时保存检查点的频率
        evaluation_freqint5000评估的频率
        save_by_iterbool是否按迭代保存模型
        continue_trainbool继续训练:加载最新模型
        epoch_countint1起始epoch计数,我们按,+,…保存模型
        phasestrtrain训练、验证、测试等
        pretrained_namestrNone从其他检查点继续训练
        训练参数数据类型默认值解释说明
        n_epochsint20初始学习率的epoch数
        lrfloat0.0001Adam的初始学习率
        lr_policystrstep学习率策略。[linear
        lr_decay_epochsint10每lr_decay_epochs个epoch乘以一个gamma

        脸部对焦参数配置facerecon_model.py,这些参数默认即可。

        网络结构参数数据类型默认值解释说明
        net_reconstr‘resnet50’网络结构
        init_pathstr‘checkpoints/init_model/resnet50-0676ba61.pth’初始化路径
        use_last_fcboolFalse是否对最后一个全连接层进行零初始化
        bfm_folderstr‘BFM’BFM文件夹路径
        bfm_modelstr‘BFM_model_front.mat’BFM模型
        渲染器参数参数数据类型默认值解释说明
        focalfloat1015.焦距
        centerfloat112.中心点
        camera_dfloat10.相机参数d
        z_nearfloat5.近截面
        z_farfloat15.远截面
        训练参数数据类型默认值解释说明
        net_recogstr‘r50’人脸识别网络结构
        net_recog_pathstr‘checkpoints/recog_model/ms1mv3_arcface_r50_fp16/backbone.pth’人脸识别网络的权重文件路径
        use_crop_faceboolFalse是否使用裁剪掩码来计算照片损失
        use_predef_MboolFalse是否使用预定义的M矩阵来处理预测的人脸特征 (M矩阵用于三维形状预测)
        数据增强参数参数数据类型默认值解释说明
        shift_pixsfloat10.0像素平移大小
        scale_deltafloat0.1尺度缩放因子的变化范围
        rot_anglefloat10.0旋转角度的变化范围 (单位:度)
        损失权重参数数据类型默认值解释说明
        w_featfloat0.2特征损失权重
        w_colorfloat1.92颜色损失权重
        w_regfloat3.0e-4形状正则化损失权重
        w_idfloat1.0身份正则化损失权重
        w_expfloat0.8表情正则化损失权重
        w_texfloat1.7e-2纹理正则化损失权重
        w_gammafloat10.0Gamma矫正损失权重
        w_lmfloat1.6e-3关键点坐标损失权重
        w_reflcfloat5.0反照率损失权重

        其他使用方法

        表情控制参数操作,可以通过添加以下参数来控制表情:

        参数解释
        –exp_img预定义的表情模板。默认为"neutral"(中性表情)。可以选择"smile"(微笑)或提供一个图片路径。
        –up_face可以选择"surprise"(惊讶)或"angry"(愤怒)来使用 GANimation 修改上半部分脸部的表情。

        WebUI预测

        项目中自带WebUI启动文件,是基于gradio开发的页面。

        由于代码中素材文件是写死的如果想更换素材并且在页面中显示必须进行一些修改。

        添加音频和视频文件的路径目录。

        audio_list = os.listdir("./examples/audio")
        video_list = os.listdir("./examples/face")
        

        添加路径并遍历文件到对应的文件位置。

                    with gradio.Row():
                        gradio.Examples(
                            label="Face Examples",
                            examples=[
                                os.path.join(os.path.dirname(__file__), "examples/face/" + str(i)) for i in video_list
                            ],
                            inputs=[v],
                            fn=convert,
                        )
                    with gradio.Row():
                        gradio.Examples(
                            label="Audio Examples",
                            examples=[
                                os.path.join(os.path.dirname(__file__), "examples/audio/" + str(i)) for i in audio_list
                            ],
                            inputs=[a],
                            fn=convert,
                        )
        

        然后启动webUI.py文件,然后在浏览器中就可以看到自己添加好的对应文件啦。

        在这里插入图片描述

        最终出来的结果是这样的,视频效果呢个人感觉比wav2lip强一些,如果视频分辨率不大的话无所谓,如果原始分辨率大的话需要进行超分操作。

        在这里插入图片描述

        来看一下和wav2lip的对比吧。虽然处理效率慢了一点淡出出来的效果更佳清楚。

        请添加图片描述

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon