介绍
什么是训练?
总览
-
编码器 -这项工作的工作是将大量人脸作为输入,并将其“编码”为“矢量”形式的表示形式。重要的是要注意,它并不是在学习您输入的每张脸的确切表示,而是在尝试创建一种算法,该算法可用于以后尽可能地重建与输入图像最接近的脸。
-
解码器 -这样做的工作是获取由编码器创建的矢量,并尝试将此表示形式变回人脸,并使其与输入图像尽可能地匹配。
-
损失 -对于输入模型的每批面孔,NN都会查看其尝试通过其当前的编码和解码算法重新创建的面孔,并将其与所输入的实际面孔进行比较。完成后,它将给自己一个分数(损失值)并相应地更新其权重。
-
权重 -模型评估了重建脸部的程度后,便会更新其权重。这些输入到编码器/解码器算法中。如果它在一个方向上调整了权重,但是感觉到重建脸部的工作比以前做得差,那么它就知道权重在朝错误的方向移动,因此它将以另一种方式进行调整。如果感觉有所改善,那么它将知道继续沿前进方向调整权重。
-
共享编码器 -训练模型时,我们将为其提供2组面孔。A集(我们要替换的原始面孔)和B集(我们要放置在场景中的交换面孔)。实现这一目标的第一步是共享A和B集的编码器。这样,我们的编码器可以为2个不同的人学习一个算法。这一点非常重要,因为我们最终将告诉我们的神经网络采用一张脸的编码并将其解码为另一张脸。因此,编码器需要查看和学习我们交换所需的两套面孔。
-
交换式解码器 -训练模型时,我们训练2个解码器。解码器A正在获取编码矢量并尝试重新创建FaceA。解码器B正在获取编码矢量并尝试重新创建FaceB。当最终交换面孔时,我们切换了解码器,因此我们将模型Face A馈给了我们,但是将其传递给解码器B。由于已经在两组面孔上训练了编码器,因此模型将对输入的A面孔进行编码,然后尝试从解码器B重构它,从而导致从模型输出交换的面孔。
-
批处理 -批处理是一组同时通过神经网络馈入的面孔。
-
批次大小 -批次大小是同时通过神经网络输入的批次的大小。批处理大小为64意味着将通过神经网络一次馈送64张脸,然后为这批图像计算损失和权重更新。较高的批次大小将训练得更快,但会导致较高的概括性。较低的批次大小将训练得较慢,但可以更好地区分面孔之间的差异。在培训的各个阶段调整批次大小会有所帮助。
-
纪元 -纪元是对通过神经网络馈送的数据的完整表示:如果您有5000个面的文件夹,则当模型看到所有5000个面时为1个纪元。当模型两次看到所有5000张面孔时,将出现2个纪元,依此类推。就Faceswap而言,Epoch实际上并不是一种有用的措施。由于模型是在2个数据集(A侧和B侧)上训练的,除非这些数据集的大小完全相同(非常不可能),所以不可能计算一个纪元,因为每个纪元都不同。
-
示例 -就Faceswap而言,示例是“ Face”的另一个名称。它基本上是一张通过神经网络传递的面孔。如果模型看到了10个示例,则它看到了10个面。
-
EG / s-这是神经网络每秒看到的示例数,或者就Faceswap而言,就是模型每秒处理的面孔数。
-
迭代 -迭代是通过神经网络处理的一个完整批处理。因此,批处理大小为64的10次迭代将意味着该模型已看到640(64 * 10)个面。
-
NN-神经网络的缩写。
训练数据
选择模型
-
轻量级(64px输入,64px输出)-这是一种精简的模型,旨在在具有<= 2GB VRAM的GPU上运行。这不是所谓的“生产就绪”,而是使具有较低端硬件的用户可以训练模型。在高端GPU上,它将非常快速地进行训练,因此对于在过渡到更繁重的模型之前快速查看掉期可能的工作情况很有用。
-
原始(输入64px,输出64px)-启动所有模型。仍然可以提供出色的结果,并且有助于您理解数据集质量实际上是交换质量的最大驱动因素之一。
-
IAE(64像素输入,64像素输出)-一个模型,其结构与其他模型略有不同。它具有一个共享的编码器和一个共享的解码器,但是位于编码器和解码器之间的3个中间层(一层代表A,一层代表B,一层共享)。它以这种方式构造,以试图更好地分离身份。可以在此处了解有关此模型的更多信息:https://github.com/deepfakes/faceswap/pull/251
-
Dfaker(64px输入,128px输出)-此模型利用了一些与原始模型不同的技术,并且着重于将输入扩展为更高的分辨率输出。尽管存在了一段时间,该模型仍然取得了不错的结果,而缺少自定义选项使其成为一种简单的“抛弃式”模型。
-
不平衡(输入64-512px,输出64-512px)-这是一个功能强大的模型,可以通过多种方式自定义和改进模型,但是需要更多的专业知识和诀窍才能获得良好的结果。可以说已经被“ RealFace”所取代。值得注意的是,此模型将更多的重点放在B解码器上,因此反转交换(即交换B> A而不是A> B)将导致效果不理想。
-
DFL- H128(128px输入,128px输出)-该模型实际上使用与Original完全相同的编码器和解码器,但随后使用128px输入而不是64px,然后尝试将图像压缩为代表原始图像一半的人脸。与原始相比,较小的“潜在空间”在质量上有一些缺点,从而抵消了较大的输入量。
-
DFL-SAE(输入64-256像素,输出64-256像素)-此模型中包含两种不同的网络结构,一种基于原始共享编码器/分离解码器模型,另一种基于IAE模型(共享中间层)。有许多自定义选项。给出很好的细节,但可能导致某些身份流失(即,A的某些功能可能仍在B中可见)。
-
反派(128px输入,128px输出)-反派可能是最详细的模型,但VRAM 占用大量资源,并且在进行有限源训练时可以提供低于标准的颜色匹配。是病毒史蒂夫·布塞米(Steve Buscemi)/珍妮弗·劳伦斯(Jennifer Lawrence)Deepfake的来源。由于此型号没有任何自定义选项(除了低内存型号之外),如果您想要更高分辨率的型号而无需调整任何设置,这是一个不错的选择。
-
Realface(输入64-128px,输出64-256px)-不平衡模型的后继者。从该模型和Dfaker中吸取教训,同时希望进一步发展它们。该模型是高度可定制的,但是当您对自己的工作以及设置的影响有所了解时,最好对选项进行调整。与不平衡模型一样,此模型将更多的重点放在B解码器上,因此反转交换(即交换B> A而不是A> B)将导致令人满意的结果。
-
Dlight(128px输入,128-384px输出)-基于dfaker变体的高分辨率模型,着重于使用自定义的upscaler放大面部。这是最新的模型,非常易于配置。
型号配置设置
-
全局 这些是适用于所有模型的选项:
-
适用于送入模型的人脸的人脸选项
-
覆盖率 -这是将输入模型的源图像的数量。按给定的数量从中心裁剪一定百分比的图像。覆盖率越高,就越能获得更多的面部。裁剪图像量的图示如下所示:
-
面罩 适用于带面罩训练的选项。
-
它将训练的重点放在面部区域,从而迫使模型对背景的重视程度降低。这可以帮助模型更快地学习,同时还可以确保它不会占用不重要的空间学习背景细节。
-
学习的掩码可以在转换阶段使用。在当前的实现中,学到的掩码在转换时是否比使用标准掩码有什么好处是有争议的,但是使用掩码进行训练可以确保您可以选择使用它。
-
面罩类型 -用于训练的面罩类型。要使用遮罩,您必须已将所需的遮罩添加到路线文件中。您可以使用遮罩工具添加/更新遮罩。看到viewtopic.php?f = 5&t = 27#extract 对于每个口罩的全面描述。
-
蒙版模糊内核 -将轻微的模糊应用于蒙版的 Edge。实际上,它去除了蒙版的硬 Edge,并从面部到背景逐渐将其融合。这可以帮助计算不正确的蒙版。是否要启用此功能以及使用什么值取决于您自己。默认值应该没问题,但是您可以使用遮罩工具进行实验。
-
遮罩阈值 -此选项不会影响基于对齐的遮罩(扩展的组件),因为它们是二进制的(即,遮罩是“打开”还是“关闭”)。对于基于NN的蒙版,该蒙版不是二进制的,并且具有不同级别的不透明度。在某些情况下,这可能会导致面膜斑点。增大阈值将使遮罩的部分接近透明,完全透明,而使遮罩的部分接近实体,完全固态。同样,这将视情况而定。
-
学习蒙版 -如前所述,学习蒙版是否有任何好处是有争议的。启用此选项将使用更多的VRAM,因此我倾向于将其关闭,但是如果您希望在转换中使用预测的掩码,则应启用此选项。
-
适用于初始化模型的初始化选项。
-
ICNR初始化 -此初始化程序仅适用于高级层。当它们在NN中放大时,标准初始化可能会在输出图像中导致“棋盘”伪影。该初始值设置项试图防止这些伪影。在本文中可以阅读有关此方法的更多信息:https://arxiv.org/abs/1707.02937
-
转换感知初始化 -卷积感知初始化应用于模型中的所有卷积层。该初始值设置项的前提是,它考虑了卷积网络的用途并相应地初始化权重。从理论上讲,这将导致更高的精度,更低的损耗和更快的收敛速度。有关此初始化程序的更多信息,请参见以下文章:https://arxiv.org/abs/1702.06295 注意:此初始化程序启动时会占用更多的VRAM,因此建议从较小的批处理大小开始,启动模型,然后以所需的批处理大小重新启动模型。 注意:此初始化程序不会在启用多GPU模式下运行,因此,如果使用多个GPU进行训练,则应在1个GPU上开始训练,停止模型,然后继续启用多GPU。
-
适用于模型中各图层的网络选项
-
亚像素放大-这是在神经网络中放大图像的另一种方法。实际上,它们只是使用不同的TensorFlow操作来完成与默认像素随机播放器层完全相同的工作。我建议只保留此选项,因为它没有任何区别(将来可能会删除)
-
反射填充 -在最终交换中,某些模型(尤其是小人)和较小程度的DFL-SAE在交换区域的 Edge周围都有明显的“灰色框”。此选项更改卷积层中使用的填充类型,以帮助减轻此伪影。我只建议为这两个模型启用它,否则我将忽略它。
-
损失 要使用的损失功能。
-
损失函数 -最受欢迎的损失方法是MAE(平均绝对误差)和SSIM(结构相似性)。我个人的喜好是使用SSIM。
-
损失的蒙版损失 -此选项决定是否应将不在面部区域内的图像区域的重要性设置为低于在面部区域内的区域的重要性。此选项应始终启用
-
与优化器有关的优化器选项。
-
学习率 -除模型崩溃(所有图像都变为纯色块,并且损失突增到无法恢复)之外,通常应将其保留下来。与该页面上的其他参数不同,可以为现有模型调整该值。 学习率决定了每次迭代可以向上或向下调整权重的程度。直觉会说学习率越高越好,但事实并非如此。该模型正在尝试学习获得尽可能低的损失值。设置过高的学习率将不断在最低值上下波动,并且永远不会学到任何东西。将学习率设置得太低,模型可能会跌至低谷,并认为它已达到最低点,并且将停止改进。 认为它是走在山下。您想触底,所以您应该一直走下去。但是,下山的路并不总是下坡的,途中有更小的丘陵和山谷。学习速度必须足够高,以能够摆脱这些较小的山谷,但又不能过高,以至于您最终无法到达下一座山峰。
-
模型 这些是特定于每个模型插件的设置:
-
lowmem-一些插件具有“ lowmem”模式。这使您可以运行模型的精简版本,占用较少的VRAM,但以降低保真度为代价。
-
输入大小 -一些插件可让您调整输入模型的输入大小。输入始终为正方形,因此这是输入模型的图像的宽度和高度的大小(以像素为单位)。不要相信更大的投入总是等于更好的质量。这并非总是如此。还有许多其他因素决定模型是否具有良好的质量。更大的输入大小需要成倍地处理更多的VRAM。
-
输出尺寸 -一些插件可让您调整模型所生成图像的尺寸。输入大小和输出大小不必相同,因此某些模型包含升频器,返回的输出图像大于输入图像。
-
培训师 配置设置页面中的最后一个选项卡适用于培训师或“数据增强”选项:
-
评估 -评估培训状态的选项。
-
预览图像 -这是在交换窗口的A边和B边的预览窗口中显示的面孔数量。
-
图像增强 -这些操作是在馈入模型的人脸上执行的。
-
缩放量 -在将脸部馈入NN之前将其放大或缩小的百分比量。帮助模型处理错位。
-
旋转范围 -面输入到NN之前顺时针或逆时针旋转的百分比量。帮助模型处理错位。
-
移位范围 -脸部被送入NN之前向左/向右上/下移动的百分比量。帮助模型处理错位。
-
翻转机会 -水平翻转面孔的机会。帮助创建更多角度供NN学习。
-
颜色增强 -这些增强可控制输入到模型中的人脸的颜色/对比度,以使NN对色差更健壮。
-
彩色亮度 -上下调整输入图像亮度的百分比。有助于应对不同的照明条件。
-
颜色AB-在L * a * b颜色空间的A / B比例上调整颜色的百分比量。帮助NN处理不同的颜色条件。
-
Color CLAHE Chance(色彩CLAHE机会) -图像将应用“对比度受限的自适应直方图均衡”的机会百分比。CLAHE是一种对比方法,试图定位对比变化。这有助于NN处理不同的对比度量。
-
颜色CLAHE最大大小 -CLAHE算法的最大“网格大小”。这被缩放到输入图像。较高的值将导致较高的对比度应用。这有助于NN处理不同的对比度量。
配置
-
面 在这里,我们将告诉Faceswap面的存储位置以及它们各自的路线文件的位置(如果需要)
-
路线A-如果您是戴着口罩训练,或者使用“经向地标”,那么您将需要一个面部路线文件。这将在提取过程中生成。如果该文件存在于您的faces文件夹中,并且名为alignments.json,则该过程将自动将其提取。必须在“面”文件夹中的每个面都在路线文件中有一个条目,否则训练将失败。您可能需要合并多个路线文件。您可以在中找到有关准备路线文件以进行培训的更多信息。提取教程。
-
路线B-如果您是戴着口罩训练,或者使用“经向地标”,那么您将需要一个面部路线文件。这将在提取过程中生成。如果该文件存在于您的faces文件夹中,并且名为alignments.json,则该过程将自动将其提取。必须在faces B文件夹中的每个单个面孔在路线文件中都有一个条目,否则训练将失败。您可能需要合并多个路线文件。您可以在中找到有关准备路线文件以进行培训的更多信息。提取教程。
-
与您将要训练的模型有关的模型选项:
-
模型目录 -将在其中保存模型文件。如果要启动新模型,则应该选择一个空文件夹,如果要从已经开始的模型恢复训练,则应该选择一个包含模型文件的现有文件夹。
-
允许增长 -[仅限NVIDIA]。启用TensorFlow GPU`allow_growth`配置选项。此选项可防止TensorFlow在启动时分配所有GPU VRAM,但可能导致更高的VRAM碎片化和较慢的性能。仅当您在培训方面遇到问题时才启用它(特别是,您遇到cuDNN错误)。
-
培训 培训特定设置:
-
批次大小 -如上所述,批次大小是一次通过模型馈送的图像数量。增加此数字将增加VRAM使用率。批量增加将使培训加速到一定程度。小批量可以提供一种有助于模型概括的法规形式。虽然大批量训练速度更快,但批量大小在8到16之间可能会产生更好的质量。关于其他形式的监管能否替代或消除这种需求,仍然是一个悬而未决的问题。
-
迭代次数-在自动停止训练之前要执行的迭代次数。这实际上仅是为了自动化,或确保一定时间后停止培训。通常,当您对预览的质量感到满意时,您将手动停止培训。
-
GPU- [仅限NVIDIA]-要训练的GPU数量。如果您的系统中有多个GPU,则最多可以利用其中8个GPU来加快培训速度。请注意,这种加速不是线性的,添加的GPU越多,退货的收益就越多。最终,它允许您通过将批处理量分配到多个GPU来训练更大的批处理量。最薄弱的GPU的速度和VRAM总是会成为您的瓶颈,因此在相同的GPU上进行训练时效果最佳。您可以阅读有关Keras multi-gpu的更多信息这里
-
变形为地标 -如前所述,数据是变形的,以便NN可以学习如何重新创建面孔。变形为地标是另一种变形方法,该方法尝试将面从另一侧随机变形为相似的面(即,对于A集,它从B集中找到一些相似的面,并应用变形并进行一些随机化处理)。是否与标准随机变形相比有任何好处/不同,尚待确定。
-
无翻转 -随机翻转图像以帮助增加NN将看到的数据量。在大多数情况下,这很好,但是脸部不对称,因此对于某些目标而言,这可能是不希望的(例如,脸部一侧的痣)。通常,应取消选中该选项,并且在开始培训时当然也应选中该选项。在会话的稍后阶段,您可能要为某些交换禁用此功能。
-
无增强颜色 -Faceswap执行颜色增强(前面有详细介绍)。这确实有助于在A和B之间匹配颜色/照明/对比度,但有时可能不希望如此,因此可以在此处禁用它。增色的影响如下所示:
-
VRAM节省 优化设置以保存VRAM:
-
内存节省梯度 -[仅限于NVIDIA]-MSG是一种优化方法,可以以计算量节省VRAM。在最佳情况下,培训时间增加20%即可使您的VRAM需求减半。这是您应该尝试的第一个选项。您可以阅读有关“内存节省梯度”的更多信息这里。
-
优化器节省 -[仅适用于NVIDIA]-通过在CPU而非GPU上执行一些优化计算,可以节省相当数量的VRAM。这样做确实以增加系统RAM使用率和降低训练速度为代价。这应该是您尝试的第二个选项。
-
乒乓球 -[仅限NVIDIA]-又称“不得已”。到目前为止,这是最差的VRAM保存选项,但可能足以满足您的需求。这基本上将模型分为两部分,并将一次训练模型的一半。这可以节省多达40%的VRAM,但将花费超过两倍的时间来训练模型。这应该是您尝试的最后一个选择。 注意:启用此选项后,TensorBoard日志记录/绘图功能将不可用。 注意:在模型的两侧都完成训练周期之前,不会显示预览。
-
保存 选项以计划保存模型文件:
-
保存间隔 -将模型保存到磁盘的频率。保存模型时,不会对其进行训练,因此您可以提高该值以在训练时略微提高速度(即,它不等待模型被频繁写入磁盘)。您可能不想将其提高得太高,因为它基本上是您的“故障保护”。如果模型在训练期间崩溃,那么您将只能从上一次保存继续。 注意:如果使用Ping Pong的内存保存选项,则不应将此值增加到100以上,因为这可能会损害最终质量。
-
快照间隔 -快照是模型在某个时间点的副本。如果您对模型的进度不满意,则可以回滚到较早的快照,如果保存文件已损坏并且没有可用的备份,则可以回滚到较早的快照。通常,此数量应该很高(在大多数情况下,默认值应该很好),因为创建快照可能会花费一些时间,并且在此过程完成时,您的模型将无法进行训练。
-
用于显示训练进度预览窗口的预览选项:
-
预览比例 -弹出预览的尺寸与训练图像的尺寸相同。如果您的训练图像为256像素,则整个预览窗口将为3072×1792。对于大多数显示器来说,这太大了,因此此选项将预览按给定的比例缩小。
-
预览 -启用以弹出预览窗口,禁用以不弹出预览窗口。对于GUI使用,通常不要选中它。
-
写入图像 -这会将预览图像写入faceswap文件夹。如果在无头系统上训练很有用。
-
延时摄影选项,用于生成一组可选的延时摄影图像:
-
缩时摄影输入A-包含要用于生成A(原始)面时间流逝的面孔的文件夹。仅使用找到的前14张脸。如果您想从训练集中选择前14张面孔,则可以将其指向“ Input A”文件夹。
-
缩时摄影输入B-一个文件夹,其中包含要用于生成B(交换)面的时间间隔的脸部。仅使用找到的前14张脸。如果您想从训练集中选择前14张脸,则可以将其指向“输入B”文件夹。
-
缩时摄影输出 -您想要保存所生成的缩时摄影图像的位置。如果您提供了A和B的来源,但将其留为空白,则默认为您选择的模型文件夹。
-
Global Global Faceswap选项:
-
Configfile-您可以指定一个自定义的train.ini文件,而不使用存储在faceswap / config文件夹中的文件。如果您想在几种不同的良好配置之间进行切换,这将很有用。
-
LOGLEVEL -该级别Faceswap将记录在。通常,应始终将其设置为INFO。仅在开发人员要求时,才应将其设置为TRACE,因为这将大大减慢培训速度并生成大量日志文件。 注意:控制台只会登录到VERBOSE级别。DEBUG和TRACE的日志级别仅写入日志文件。
-
日志文件 -默认情况下,日志文件存储在faceswap / faceswap.log中。您可以根据需要在此处指定其他位置。
监控培训
-
状态栏 它显示在右下方,并提供当前培训课程的概述。它更新每次迭代:
-
经过的时间-该培训课程已过去的时间。
-
会话迭代次数-在此培训课程中已处理的迭代次数。
-
Total Iterations-此模型的所有会话已处理的迭代总数。
-
损失A /损失B-当前迭代的损失。注意:可能会有多个损耗值(例如,面部,蒙版,多路输出等)。该值是所有损失的总和,因此此处的数字差异可能很大。
-
预览选项卡 可视化模型的当前状态。这表示模型重新创建和交换面的能力。每次保存模型时都会更新:
-
预览将显示12列。前6个是“ A”(原始面)侧,后6个是“ B”(交换面)侧。每组6列分为2组,每组3列。对于以下各列:
-
第1列是输入到模型中的不变面
-
第2列是试图重现该面孔的模型
-
第3列是试图交换面孔的模型
-
这些将以纯色或非常模糊的颜色开始,但随着时间的流逝,随着NN学习如何重新创建和交换脸部而将逐渐改善。
-
不透明的红色区域表示被遮盖的脸部区域(如果使用遮罩进行训练)。
-
如果训练的覆盖率小于100%,您将看到一个红色框的 Edge。这表示“交换区域”或NN正在训练的区域。
-
您可以使用右下角的“保存”按钮保存当前预览图像的副本。
-
可以通过取消选中右下角的“启用预览”框来禁用预览。
-
图形选项卡 -此选项卡包含一个显示随时间损失的图形。每次保存模型时都会更新,但是可以通过单击“刷新”按钮来刷新:
-
根据输出数量的不同,可能会有多个图表可用(例如,总损耗,掩模损耗,面部损耗等)。每个图都显示该特定输出的损耗。
-
您可以使用右下角的“保存”按钮保存当前图形的副本。
-
可以通过取消选中右下角的“启用预览”框来禁用图形。
-
分析选项卡 -此选项卡显示当前正在运行和以前的培训课程的一些统计信息:
-
列如下:
-
图形 -单击蓝色图形图标以打开所选会话的图形。
-
Start / End / Elapsed-每个会话的开始时间,结束时间和总训练时间。
-
批次 -每个工作阶段的批次大小
-
迭代数 -每个会话处理的迭代总数。
-
EGs /秒 – 每秒通过模型处理的面数。
-
当模型不训练时,您可以通过单击右下角的打开按钮并在模型文件夹中选择模型的state.json文件来打开先前训练过的模型的统计信息。
-
您可以使用右下角的“保存”图标将分析选项卡的内容保存到一个csv文件中。
-
单击您最近的培训课程旁边的蓝色图形图标,将弹出所选课程的培训图形。
-
选择“显示平滑”,将平滑量提高到0.99,点击刷新按钮,然后放大最后5,000-10,000次迭代:
-
现在,该图已放大,您应该能够知道损失是否仍在下降或损失是否已经“收敛”。收敛是当模型不再学习任何东西时。在此示例中,您可以看到,虽然乍一看似乎模型已经收敛,但仔细检查后,损失仍在下降:
-
转到工具 > 恢复:
-
模型目录 -包含损坏的模型的文件夹应在此处输入:
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun15649.html