AI直播换脸——DeepFaceLab 3.0模型训练与微调

前言

DeepFaceLab是一种基于深度学习的人脸合成和转换工具。它使用了深度神经网络来分析和修改图像中的人脸部分,可以实现将一个人的脸部特征应用到另一个人的照片上,或者进行面部表情、年龄、性别等特征的变换。
DeepFaceLab具备一系列核心功能,包括人脸检测、关键点定位、面部表情识别和特征提取。这些功能为其提供了生成高质量合成人脸的能力,并支持多种输入和输出格式。用户可以根据自身需求对其可配置的参数进行调整,以定制模型的训练和处理流程。此外,DeepFaceLab还充分支持GPU加速,从而显著提升处理速度。

然而,需要特别留意的是,DeepFaceLab等工具也存在被滥用的风险,用以制作虚假的图片和视频。因此,在使用这类工具时,必须严格遵守法律法规,同时秉持高度的道德准则。这类技术的滥用可能会引发伦理和法律问题,因此用户在使用时应谨慎考虑,深入了解相关法律规定,并严守道德操守。

一、DeepFaceLab安装

可以从官方网站得软件下载地址,找到对应自己GPU的版本就可以了,GPU不是RTX30头的选RTX2080Ti版本,RTX30xx以上选RTX3000这个版本。
在这里插入图片描述
下载之后直接解压到使用目录就可以了,解压完成之后像下面这样,不过有几个中文是我后加的。
在这里插入图片描述

二、数据准备

1.源视频

源视频就是用来训练模型的视频,源视频选择合适的素材是关键。要确保素材清晰、高质量,以获得最佳效果。可以使用高分辨率的相机来拍摄或选择高质量的库存视频。

  • 不同角度:拍摄素材时,考虑使用不同的角度,如近景、远景、正脸和侧脸,以提供多样性和视觉吸引力。
  • 不同视角:例如低视角或仰视角。
  • 不同光线:根据需要选择适当的时间和光线条件,以便拍摄白天和黑夜的素材。
  • 不同表情:使用面部表情、姿势和背景来传达喜怒哀乐,选择不同的情感表达。
  • 时长:源视频的时长越长越好,最短也要几分钟以上。

2.目标视频

目标视频就是最终要进行换脸的视频,⽬标视频处理⽐较简单些,正常的视角就可以了,但为了换脸丝滑,源视频和目标视频尽可能选择脸型、表情、⾓度、光源接近的。

3.数据重命名

把源视频和目标视频放到项目workspace下,源视频重新命名成data_src,目标视频重新命名成data_dst,如下图结果:
在这里插入图片描述

三、模型训练

1.源视频拆分

运行 2) extract images from video data_src.bat文件,对源视频进行拆帧:

一秒保存多少帧:

Enter FPS 一秒保存多少帧,一般保存10到15帧

保存图像的格式:

Output image format
图像格式选择:
PNG:PNG格式提供无损图像质量,适合保持图像的清晰度和细节,但文件大小较大。如果您需要高质量的图像,可以选择PNG格式
JPG:JPG格式文件大小较小,适合处理不需要极高图像质量的任务。如果对图像质量要求不高,可以选择JPG格式,以便减小文件大小。
在这里插入图片描述

2.目标视频切图

对目标视频进行拆分,运行 3) extract images from video data_dst FULL FPS.bat,选择跟源视频一样。拆分完成之后在工作目录就多了两个拆分成图像的目录。

3.源视频切脸

点击运⾏ 4) data_src faceset extract.bat 会有参数需要设置,如图:
在这里插入图片描述

  1. 选择脸型:
    有三个选项可供选择:全脸(f)、整脸(wf)和头(head)。根据您的需求,一般情况下选择默认的wf即可,因为它覆盖的面积更大,包括额头和胡子。如果只需要替换脸部到眉毛上方一点点的区域,您可以选择f。

  2. 设置最多识别的人数:
    如果视频大部分时间只有一个人,选择1;如果视频中有两个人同时出现,而且都需要处理,选择2。

  3. 设置图像大小:
    一般情况下,选择256足够了。较高的分辨率会提高图像质量,但也会增加计算资源的消耗。如果原始视频质量不高,即使选择512也不会有很大帮助。

  4. 图像质量:
    默认的图像质量设置为90,通常足够了。根据需要,您可以微调这个设置。

  5. 调试图像:
    如果出现错误或不满意的结果,可以随时删除不符合要求的图像。

6.运行脚本:
完成设置后,运行脚本。根据您的硬件,3080显卡切脸速度大概为2张/秒。

5.源视频人脸整理

运行 4.2)data_src sort.bat 脚本以对源图像进行排序。需要对源图像进行排序、筛选和处理,以获得高质量的训练素材。

  1. 源头像排序:
    选择 “5-颜色直方图排序” 以帮助识别相似的图像。

  2. 筛选图像:

    • 删除模糊的图像,这些通常不适合用于训练。
    • 删除因旋转而变形的图像,因为它们通常是由于识别失败导致的。
    • 删除残缺的图像,如部分遮挡或损坏的图像。
    • 删除有遮挡或黑边裁切的图像。
    • 删除刘海太大或与人物无关的图像。
    • 删除光照差异较大的图像,因为这些图像可能对训练产生不良影响。
    • 如果某些图像是常见的遮挡物,但资源稀缺,可以保留它们用于遮罩训练。
  3. 手动修复识别不准确的图像:

    • 如果某些图像非常宝贵,并且识别不准确,您可以手动删除 “debug” 目录中相应的错误图像,并运行 “data_src faceset extract MANUAL.bat” 脚本再次提取素材。
  4. 可选的模糊程度排序:

    • 可以运行排序脚本,将图像按照模糊程度进行排序。然后,您可以删除模糊度过高的图像。不过,有些人认为适度模糊的图像也可以用于训练,这取决于您的需求。
  5. 处理多个人脸:

    • 如果 “aligned” 目录中包含多个人脸,建议使用颜色直方图排序,然后将不同的人脸归类到不同的文件夹中以备用。或者,删除不需要进行人脸替换的人脸。您还可以使用人脸筛选工具来帮助进行分类和处理。

这些步骤有助于准备高质量的训练素材,提高DeepFaceLab的换脸效果。请根据您的具体需求和素材情况进行适当的筛选和整理。

6.目标视频切脸

运⾏ 5) data_dst faceset extract.bat 对目标视频进行切脸,参数与源视频切脸差不多。
在这里插入图片描述

7.目标视频图像整理

执行 5.2) data_dst sort 脚本对目标视频头像进行整理

  1. 推荐使用颜色直方图排序:

    • 在提取素材时,建议选择 “5-颜色直方图排序” 以帮助识别相似的图像。这有助于归类不同的人脸到不同的文件夹,或删除您不想进行人脸替换的图像,特别是模糊或无法清晰辨认的图像。
  2. 处理难以识别的图像:

    • 如果源图像包含极端仰脸、侧脸或其他难以识别的情况,可以考虑删除这些图像。您还可以复制一份到 “src” 的 “aligned” 目录,用于个人训练或尝试补充极端角度的素材。
  3. 处理有遮挡的图像:

    • 对于有遮挡的图像,不要立即删除它们,因为它们可能需要用于人脸替换。这些图像可以用于训练模型以处理遮挡情况。
  4. 修复脸部轮廓识别错误的图像:

    • 如果某些图像的脸部轮廓识别错误,您可以手动进行修复。首先,在 “Debug” 目录中删除相应的图像,然后运行 “data_dst extract faces MANUAL RE-EXTRACT DELETED RESULTS DEBUG.bat” 脚本。此脚本会提示进行区域调整,以修复脸部识别错误的问题。
  5. 注意关于"aligned"目录的重要性:

    • 请记住,“aligned” 目录下的所有人脸最终都将用于替换 “src” 目录中的人脸。如果您保留了多个人脸,可能会导致生成多胞胎效果。

三、模型训练

1. 快速训练

初学者或配置有限,可以使用轻量级训练脚本 “train Quick96.bat”。这个脚本通常不需要进行复杂的参数设置。以这个脚本通常使用默认的训练参数,适合初学者或那些希望快速进行训练的人。
如果希望进行更高级的训练,需要进行更多的参数设置和调整。对于初学者,使用 “train Quick96.bat” 是一个不错的起点,可以帮助快速了解DeepFaceLab的工作流程,但在更高级的项目中可能需要更多的自定义设置和调整。

但train Quick96.bat训练出来的模型不能导出模型应用到Deepfacelive直播换脸上。

2. SAEHD和AMP

这两种训练方式需要设置的参数很多,训练过程很缓慢,但效果是最好的。

3.迁移学习

但通常的做法是,找一个效果不错的预训练模型进行训练,以减少训练的时间与更快更好的获取训练效果,但预训练模型的缺点是不能更改分辨率。

  1. 预训练模型:

    • 初始阶段,建议使用预训练模型,以减少训练时间并提高效果。
  2. batch_size:

    • batch_size 参数控制每个训练批次的图像数量。可以根据硬件性能和需求来调整它,例如从默认值4更改为16。
  3. 模型架构选择:

    • 可以选择不同的模型架构,如DF(DeepFace)五官结构、LIAE(Light Image Augmentation Enhancement)等。每个架构有其特点,可以根据需要选择适合的。
  4. 输入的宽度:

    • 可以配置不同层的宽度,例如设置中间瓶颈层为256、编码解码层为64。遮罩层的宽度通常是解码层宽度的三分之一。
  5. Eyes and mouth priority:

    • 如果有闭眼或张嘴的素材,可以启用 “Eyes and mouth priority” 以提高生成的准确性。
  6. 学习率丢弃:

    • 在训练停滞时,可以开启 “Use learning rate dropout” 以帮助模型再次学习。
  7. Enable random warp of samples:

    • 在训练的早期阶段,可以启用 “Enable random warp of samples” 以增加训练的难度,后期可以关闭。
  8. GAN设置:

    • 可以调整配置参数,如 “GAN power” 和 “GAN dimensions” 来控制生成器对抗网络的性能。
  9. 颜色处理:

    • 使用 “color transfer” 来改善光影变化不足。您还可以考虑收集更多具有不同光影下的SRC素材。
  10. 梯度裁剪:

    • 必须开启 “Enable gradient clipping” 以防止梯度爆炸问题。
  11. Loss参数:

    • 调整 “src/dst loss” 参数以控制损失的权重。预览图中的蓝色和黄色分别代表SRC和DST。
  12. Masked training:

    • “masked_training” 设置为 True 意味着只学习蒙板内的区域。

这些设置将影响训练的结果和速度,可以根据您的具体需求进行调整。
当设置完成之后,下面开始跑出时间,就代表已在训练了:
在这里插入图片描述
在训练过程中,会显示训练的结果,按P键可以看到下一迭代的效果。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的淘汰策略

Redis是一种基于内存的高性能键值存储数据库,由于内存资源有限,当Redis中的数据量增大时,会导致内存占用过多,可能会影响系统的性能和稳定性。为了解决这个问题,Redis提供了一些淘汰策略来自动清理不再使用的key&#…

基于 ARM+FPGA+AD的高精度数据采集系统设计

随着图像处理 、 工业控制 、 无线通信等领域的飞速发 展 , 对数据采集系统的速度 、 精度等性能要求也越来越高 。 这些要求都对数据采集系统的设计和实现提出了新的挑 战 。 目前数据采集系统的设计方案通常分为以下几类 : 1 &#xff0…

分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测(自注意力机制)

分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测(自注意力机制) 目录 分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测(自注意力机制)分类效果基本描述程序设计参考资料 分类效果 基本描述 1.M…

【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表e. 压缩稀疏行(Compressed Sparse Row,CSR)矩阵结构体创建CSR矩阵元素设置初始化打印矩阵销毁…

Linux多核CPU启动内核调试(详细)总结

目录 一、综述二、调试流程简介2.1 大体流程2.2 spin-table简介 三、uboot和内核配置3.1 uboot配置3.2 timer配置3.3 GIC中断配置3.4 驱动确认3.5 SMP配置3.6 内核config配置 四、其他相关链接1、[交叉编译linux内核总结](https://blog.csdn.net/Luckiers/article/details/1245…

python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈现…

电脑监控软件哪些比较好用

电脑监控软件在当今信息化时代越来越受到人们的关注,它们可以用于保护公司的商业机密,防止员工在工作中做一些不恰当的事情,以及在家庭中监控孩子的上网行为等。 本文将介绍一些比较好用的电脑监控软件: 一、域之盾软件 这款软件…

npm更新包时This operation requires a one-time password.

[访问我的npm包](mhfwork/yt-ui - npm) 更新npm包时出现 This operation requires a one-time password.是因为需要认证 解决办法 1. 点击红线处的链接 2. 进入npm官网获取指定秘钥 3. 再次填入 one-time password 即可

Linux进程地址空间

文章目录 背景进程地址空间分页和虚拟地址空间 写时拷贝 背景 研究背景:我们在之前通过fork函数创建子进程的时候,我们发现fork的返回值有两个,且值不相同但地址确实相同的,我们知道在物理空间上这种情况是不可能存在的&#xff…

SQL中:语法总结(group by,having ,distinct,top,order by,like等等)

语法总结:group by,distinct ...... 1.分组group by、条件havinggroup byhaving 2.聚集函数count 3.order by4.对表中数据的操作:增insert、删delete、改update增insert删delete改update 5.对表中数据的操作:查select嵌套查询不相…

如何防范AI等技术带来的诈骗风险?从技术、法律、教育等多方面入手

文章目录 前言什么是AI诈骗案例案例一案例二 AI诈骗的特点如何预防和应对AI诈骗建议后记 前言 互联网是一把双刃剑,这是我们常说的一个问题。 随着人工智能技术的快速发展,AI诈骗成为当今社会面临的新兴威胁。不法分子利用人工智能技术,以更…

8.自定义组件布局和详解Context上下文

pages/index.vue layout布局运行在服务端 1、在项目的目录下新建layout文件夹,并新建一个blog.vue布局文件 2、在页面中的layout函数里,返回刚才新建布局文件的名字blog就可以使用了 export default {...layout (context) {console.log(context)retu…

在3分钟内使用AI-Chat生成精美PPT(附AI工具)

前言 在人工智能的大趋势下,AI-Chat是一款令人惊叹的技术。它用强大的自然语言处理技术帮助我们快速生成PPT,提高工作效率。本文将介绍使用ChatAI-Chat生成PPT的方法,以及使用Mindshow转换为炫酷的演示文稿。让技术为我们节省时间&#xff0c…

Ubuntu中使用yum命令出现错误提示:Command ‘yum‘ not found, did you mean:

Ubuntu中使用yum命令出现错误提示:Command ‘yum’ not found, did you mean: command ‘gum’ from snap gum (0.12.0) command ‘num’ from deb quickcal (2.4-1) command ‘yum4’ from deb nextgen-yum4 (4.5.2-6) command ‘uum’ from deb freewnn-jserver (1.1.1~a021…

Stable Diffusion系列(一):古早显卡上最新版 WebUI 安装及简单操作

文章目录 Stable Diffusion安装AnimateDiff插件适配sdxl模型适配 Stable Diffusion使用插件安装界面设置基础文生图加入lora的文生图 Stable Diffusion安装 我的情况比较特殊,显卡版本太老,最高也就支持cuda10.2,因此只能安装pytorch1.12.1&…

计算机网络【CN】介质访问控制

信道划分介质访问控制 FDMTDMWDMCDM【掌握eg即可】 随机介质访问控制 CSMA 1-坚持CSMA 非坚持CSMA p-坚持CSMA 空闲时 立即发送数据 立即发送数据 以概率P发送数据,以概率1-p推迟到下一个时隙 忙碌时 继续坚持侦听 放弃侦听,等待一个随机的时…

车载音频项目

加我微信hezkz17进数字音频系统研究开发交流答疑群(课题组) ー 1.负责此项目的音频链路的设计及其实现 在ADSP21375上实现音频链路的处理。如噪声门,压限器,高低通,PEQ、各种效果等。 2.负责DSP与MCU端SPI协议实现。M…

Builder 请进:波卡最新开发入门指南

撰文:Dennis Zoma 编译:OneBlock 社区 本文更新于 2023 年 10 月 3 日,来源:https://wiki.polkadot.network/docs/build-guide Polkadot 是一个区块链协议,有两个目标:在所有连接的平行链之间提供共享安全…

【操作系统】进程的控制和通信

文章目录 一. 实验目的二. 实验内容三. 实验步骤四. 实验结果 一. 实验目的 (1)加深对进程概念的理解,进一步认识并发执行的实质。 (2)掌握Linux 操作系统中进程的创建和终止操作。 (3)理解进程…

计算机网络-应用层(2)

一、DHCP 当需要跨越多个网段提供DHCP 服务时必须使用DHCP 中继代理, 就是在DHCP 客户和服务器之间转发DHCP 消息的主机或路由器。 DHCP 服务端使用UDP 的67号端口来监听和接收客户请求消息, 保留UDP 的68号端口用于接收来自DHCP 服务器的消息回复。 在…