DeepFaceLab系列 3:视频换脸完整流程详解

李白

发布时间:

https://bingzhuyeyou.com/

1 软件的安装

官方原作者发布的软件以exe结尾,本质上其实就是一个用7z压缩的文件, 大家选择好合适的路径, 然后解压即可.

  1. 少数小伙伴反应被杀毒软件警报和删除文件, 导致项目文件不全, 从而报错.
    1. DeepFaceLab3是github上开源的大项目, 经过无数人使用和验证, 肯定是安全的.
    2. 不排除其他人在投毒的可能性, 这里提供的是官方作者的原版.
  2. 为软件选择一个合适的路径
    1. 不要有中文字符
    2. 不要层级过深, 方便后续操作和查看.
  3. 再强调一下几个细节.
    1. A卡用Directx12,不要用rtx3000版
    2. 更新驱动

2 源视频转图片

  1. 双击批处理文件源视频转图片 extract images from video data_src.bat
  2. 跳出黑色窗口,输入10回车,然后输入jpg回车,就会自动开始将视频分解为图片。
    1. FPS:视频有一个指标叫帧率,常见有24,30,60等,代表一秒钟有几张。第一个参数输
      入10指的是一秒钟只取10张;不输入直接回车,默认帧率是30就取30张。因为很多影视剧
      画面相对固定,没必要全部取,否则后面会浪费大量提取时间,而且模型训练压力也会加
      大。
    2. Format: 图片格式,主要是jpg和png。png是无损格式,但是JPG能在保证画质的情况下
      减少巨量的空间。所以如果不是要求特别变态,一般都用jpg。这样可以减少空间,节省时
      间。
  3. 处理完成后, 可以看到workplace/data_src下面就会出现很多图片.

3 目标视频转图片

  1. 双击批处理文件目标视频转图片 extract images from video data_dst FULL FPS.bat
  2. 因为dst必须一帧不落,所以没有FPS选项,只有图片格式这一个选项
  3. 处理完成后, 可以看到workplace/data_dst下面就会出现很多图片.

 

4 提取源头像

  1. 双击批处理文件提取源头像 data_src faceset extract.bat
  2. Face type人脸类型 ( h/mf/f/wf/head ?:help )
    1. 什么是人脸类型呢,就是从原图中截取的人脸框大小。
    2. h是半脸half face,mf是mid-half-face,f是全脸full-face,wf是整脸whole-face,head是最大的带整个头的人脸。
      wf的范围如下人脸越大,最后合成环节的可调节余地越大。但相同模型分辨率下,有效面积就越小。比如256尺寸的wf,有效的人脸范围大概只有二分之一大。
      但在显存越来越大的今天,不用担心。h是3年前deepfake刚问世时的人脸类型,当年显存小.
    3. 推荐值:推荐用wf,已经把整个脸都包含进了,而且能兼容f人脸素材。 h和mf太小,在后期合成时没调整余地。head过大,没必要浪费显存。
  3. 单张图中提取人脸数量上限 Max number of faces from image ( ?:help ) : 0
    1. 如果你提取的图片中中包含的人脸数量
    2. 可以尝试将最大值设置3,可以加快提取速度
    3. 0 – unlimited, 无限制
  4. 图片大小 Image size ( 256-2048 ?:help ) : 512
    1. 仅当原图像足够清晰,且不需要增强,才使用高于512的值.
    2. 图片越大,脸部增强效果越长.
    3. 一般512足矣.
  5. 图片质量
    1. JPEG质量选项,取值范围为1-100,JPEG质量越高,输出文件越大。
  6. 处理完成后, 可以看到\workspace\data_src\aligned\下面就会出现很多图片.
    1. 如果src素材比较复杂,就需要做一些筛选。把一些不需要的素材删除:
    2. 很模糊的可以直接删除
    3. 不是目标人物的可以直接删除
    4. 图片残缺的删除
    5. 脸部有遮挡的删除
    6. 脸部光照差异特别大的删除

 

5 提取目标头像

  1. 双击批处理文件目标头像提取 data_dst faceset extract.bat
  2. 其他细节和上一步骤类似, 这里略过.
  3. 提取的头像保存在data_dst/aligned的文件夹里, 提取完之后也要对素材进行一个筛选
    1. 一般来说文件名后缀_1的都可以删掉. dst的删除核心原则是要换的人脸留下,不要换的统统删掉.
  4. data_dst/aligned_debug 文件夹简介.
    1. 打开其中一张图片,可以看到人脸上有三种颜色的线框.
    2. 红色就是头像截取的区域,蓝色是面部区域,绿色是人脸轮廓,以及五官定位的点。其实就
      是人脸的landmark。通过debug你可以直观的看到人脸识别算法识别了哪些区域,有没有
      识别正确。

 

6 训练模型

终于到了训练模型的部分, 这是整个流程中最为耗时的部分. 新版本中主要包含三类模型,分别是Quick96, SAEHD, AMP. 这里我以Quick96为例,  优点是所需配置(显存)低,所需时间相对较短. 缺点是不能自定义,像素比较低,合成效果差一些。

  1. 双击批处理文件 训练轻量级模型 train Quick96.bat
  2. 此时便会弹出cmd
    1. 当你第一次运行时, 或者说项目内不存在模型时, 会让你输入新模型的名称, 然后回车.
    2. 如果已经存在其他模型, 可以选择已有模型继续训练, 或者新建模型.
  3. 接下来选择设备, 显然是选择显卡, 输入0, 并回车.
  4. 此时一切就绪, 等待数秒后, 可以看到cmd的变化, 我们需要这种关注最后一列的数据.
    1. [模型保存时间] [迭代次数] [单次迭代时间] [源损失] [目标损失]
      [16:25:30][#000002][0059ms][4.2341][3.7194]
      [16:32:20][#006881][0053ms][0.6054][0.3387]
    2. 目标损失的值越小越好, 但不可能达到0, 一般来说达到0.1x就差不多可以了.
  5. 接下来我们来学习预览窗口.
    1. 预览窗口怎么生成?
      1. 不需要手动生成, 前面步骤正常操作, 它会自动弹出.
    2. 为什么我的预览图没有变化? 只有一, 三列有头像?
      1. 需要将鼠标光标放到预览窗口上, 再按P键, (因为不同输入法的操作不同, 也可能需要再按回车键), 然后窗口内容才会发生更新.
      2. 预览窗口的其他操作
        1. 按 “Enter” 停止训练并保存进度
          按 “Space” 可以切换视图
          按 “P” 可以刷新预览图
          按 “S” 可以保存训练进度
      3. 可以看到随着迭代次数的增加, 损失值越来越小. 但两万次是要远远不够的, 如果从零开始训练模型, 一般而言需要100万次以上才能有较好的效果.
  6. 什么时候停止训练? 两个判断依据
    1. 目标损失的值越小越好, 但不可能达到0, 一般来说达到0.1x就差不多可以了.
    2. 通过预览图来判断, 观察第二列是否无限接近第一列,第四列是否无限接近第三列。第五列的表情是否无限接近第四列。所有列的图片是否都足够清
      晰。如果符合条件, 按回车或者直接关闭窗口,进入下一步.

 

7 应用模型

  1. 点击应用轻量级模型 merge Quick96.bat, 图片-1. 
    1. 输入参数: 图片-2
  2. 随后弹出图片-3
    1. 这个界面并没有任何功能上的用处,只显示了这个环节可以使用的快捷键。每个快捷键旁边都有中文注释,可以看个大概,具体的参数含义我会在后面的文章中做一个详细的介绍。点击这个界面,确保输入法为英文,按下键盘上的Tab,就可以进入合成预览界面。
    2. 这个环节, 或者说这个作用, 类似于Photoshop对人脸图片的处理, 让人脸看起来更加自然. 熟悉Photoshop的同学可以发现 “羽化, 亮化, 锐化, 降噪” 都和PS里的功能很像.
    3. 本教程这里注意使用了W/S,E/D.
    4. 可以发现左侧的图片, 脸部很像是直接贴过来的, 割裂感比较严重. 而右侧的图片经过处理后, 看起来显得融洽很多.
    5. 确认效果OK之后,按下快捷键shift+?(向后应用到所有帧) .
      1. 也可以通过键盘上的< 和 >进行手动切换,查看前后帧的合成. (大于号和小于号键)
    6. 然后再按下shift+>(自动合成) 就开始自动合成了。
      1. 等到进度达到100%, 即可手动关掉cmd窗口.
      2. 可以发现新增了两个文件夹

 

8 合成视频

  1. 双击批处理文件 合成 MP4 视频 merged to mp4.bat
  2. 输出码率, 将已经换好脸的图片转换成视频,并且会自动读取源视频的配置信息,包括帧率,音轨这些。这个环节只有一个输出码率的参数,一般3就够了.
  3. 执行完成后,workspace下面多了两个文件,分别是result.mp4 和 result_mask.mp4 。前者就是我们需要的最终视频,后者是遮罩视频,供后期使用。
  4. 查看结果

 

9 结语

  1. 看着很复杂很困难, 其实复杂是真的, 因为有很多细节需要处理(在最基本的流程情况下). 但是并不困难, 教程里已经把每一步需要注意的点都指出来了. 只要按着教程操作, 肯定能成功跑完一遍.
  2. 但DeepFaceLab 绝不是傻瓜软件, 一个按钮按下去过三秒钟就生成一个完美结果.
  3. 要想做出好的效果肯定是要花时间研究.
  4. 后续将会更新更多高级特征和技巧.
https://bingzhuyeyou.com/

发表评论

没有账号? 忘记密码?