DeepFaceLab进阶:H128,DF,SAE模型有何不同?哪个最好?

本文深入解析了H64、H128、DF、LIAEF128和SAE等换脸模型的特点与区别,涵盖了模型的速度、效果、兼容性及系统要求等方面,帮助读者理解如何根据自身需求选择最合适的换脸模型。
部署运行你感兴趣的模型镜像

整个换脸过程中模型是最重要的一部分,耗时久,调优难,很多人虽然一直在跑模型,却并不知道每个模型的特点。

我也常常被问及:

到底用哪个模型换脸效果最好?

H128和DF有什么差别?

H64和H28有什么不同?

SAE是最好的吗?

全脸和半脸是什么意思?

等等问题。

今天,就专门写一篇文章,来统一解答这些疑问。

首先,来说说每个模型的特点。

 

H64模型

H64模型也被称为经典模型/原始模型(original),DeepFakes早期就是靠这个模型名震江湖,后来的FaceSwap,DeepFaceLab,Fakeapp都包含这个模型。

相比其他模型,这个模型速度最快,对系统的要求最低,但是同时效果也是比较差的一个。其中64代表的是头像的大小为64px *64px。 这是什么意思呢?这个意思就是,如果你需要替换的头像大小为64像素那么就刚刚好,如果你的视频脸特别大,那么不管你练多久,最终合成视频脸部肯定是模糊的。 H64轻量级最低显存要求为2G,H64默认参数需要3G。

 

H128模型

这个模型和H64的内部结构是完全一样的,唯一的差别就是像素不一样,简而意之就是能处理脸的大小不一样。这个模型对应的像素为128*128,能应对大部分远景和中景镜头,部分特写镜头也能勉强处理。所以他的好处非常明显,缺点嘛自然是需要更久的时间,更大的显存。H128轻量级需要4G显存,H128默认参数需要6G显存(5G+)。

 

DF模型

DF的结构和H64以及H128其实也是一样的。唯一不同的地方是DF为全脸模型(Full Face),像素为128*128 ,  使用该模型换出来的脸一般来说比H128更像,因为脸部面积大,但是兼容性更差,边缘问题突出。 显存要求为5G+

 

LIAEF128模型

LIAEF128模型的大小和DF一致,同样为全脸模型。但是内部结构有所不同,所以这个模型和前面的模型有本质的不同。LIAEF128能使换脸目标发生一定的形变,以解决换脸生硬的问题,以及一些边缘问题,和轻微遮挡的问题。但是形变容易导致相似度降低,你可能会看不出来谁换了谁。

 

SAE模型

各大换脸软件基本都是基于以上模型。但是DeepFaceLab却多出了一个模型SAE。按作者的说法,这是一个超级模型。其实从本质上来说,这并不是一个独立的模型,这是一个建立在上面所有模型之上的模型。通过SAE的参数配置,可以配置出以上各种模型。

也就是SAE最大的优势在于“参数可以配置” 。这个模型是DFL主打的模型,可玩性非常高,参数非常多,可以调优的空间也非常大。你可以自定义模型(DF/H/LIAEF,脸型(Half/Full),像素(64/128/256,稍微魔改可以512) ,还有N多参数可探索。

同时有几个缺点,容易崩溃,默认参数合成效果不理想(面具),跑起来特别慢,对系统要求最高。

 

看了几个模型的异同,大家应该有一个比较好的认识了。关于如何选择模型,你可以参考一下几个点。

  1.  我的配置,不同配置选不同模型。
  2.  我的耐心,不同耐心选不同模型。
  3.  我的追求,不同追求选不同模型。
  4.  我的场景,不同长选择不同模型。

这几点,不展开说了,其实就是从,时间,配置,效果之间做一个权衡。也就是说没有绝对好的模型,也没有绝对差的模型,只有合适的模型。这也是为什么有那么多模型并存的原因。

当然,不管你用什么模型,训练起来都不是那么简单,都需要有极大的耐心和恒心。

 

全脸和半脸的差别

最后来说说全脸(Full Face)和半脸(Half Face)。 对于这个概念很多人一知半解,很多人有根本性的误解,其实主要是怪这个名字取得不好。说真像之前,先来说说两种误解。

第一种: 全脸包含眉毛,半脸不包含眉毛,所以为了换眉毛我选DF

第二种:全脸是整张脸, 半脸是左边一半脸或者右边一半脸。

这两种都是错的,一个认为是垂直方向的一半,一个认为是水平方向的一半,都是被这个名字给误导了。

其实他是从内向外的一半。曾经有一个灵魂画手用一张图解释了两者的差别。

我不擅长画画,我就用齐天大圣孙悟空来做一个解说吧。所谓半脸就是猴哥“不长毛”的部分,全脸就是整张脸(不包括额头)。 就是这么简单!!!

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

不同的编码方法对机器学习模型预测方剂功效性能有着不同的影响,以下是几种常见编码方法及其影响分析: ### 药物名称编码 - **独热编码**:独热编码为每个药物名称创建二进制向量,能够清晰地表示每个药物,使得模型可以直接区分不同的药物。但当药物种类较多时,会导致特征维度急剧增加,可能引发维度灾难问题,增加模型的训练时间和计算资源消耗,还可能导致过拟合。例如,若有 `n` 种药物,每种药物用长度为 `n` 的向量表示,当 `n` 很大时,模型复杂度会显著提高。 ```python import pandas as pd data = {'药物名称': ['白术', '甘草', '人参', '白术']} df = pd.DataFrame(data) encoded_df = pd.get_dummies(df, columns=['药物名称']) ``` - **哈希编码**:哈希编码使用哈希函数将药物名称映射到固定长度的整数向量,可处理大量未知药物名称。不过,可能存在哈希冲突,即不同的药物名称被映射到相同的编码,这可能会使模型混淆不同的药物,影响预测的准确性。 ```python from category_encoders.hashing import HashingEncoder encoder = HashingEncoder(cols=['药物名称']) hashed_df = encoder.fit_transform(df) ``` ### 性味归经编码 - **多标签二进制编码**:将所有可能的性味和归经分别列出,为每个性味和归经创建一个二进制特征。能直观地反映药物的性味归经信息,让模型了解药物的特性。但在处理大量性味归经组合时,会导致特征维度过高,增加模型的复杂度和训练难度,可能降低模型的泛化能力。 ```python import numpy as np import pandas as pd nature_list = ['寒', '热', '温', '凉', '平'] meridian_list = ['心', '肝', '脾', '肺', '肾'] data = {'药物名称': ['药1'], '性味': [['寒', '温']], '归经': [['心', '脾']]} df = pd.DataFrame(data) def encode_nature_meridian(row): nature_encoding = [1 if nature in row['性味'] else 0 for nature in nature_list] meridian_encoding = [1 if meridian in row['归经'] else 0 for meridian in meridian_list] return np.concatenate([nature_encoding, meridian_encoding]) df['性味归经编码'] = df.apply(encode_nature_meridian, axis=1) ``` - **嵌入编码**:使用嵌入层将性味和归经映射到低维向量空间,可捕捉它们之间的语义关系,有助于模型更好地理解药物的性味归经信息,提高预测的准确性。但嵌入层的训练需要大量的数据和计算资源,若数据不足,可能无法学习到有效的嵌入表示。 ### 剂量编码 - **标准化**:使剂量均值为 0,标准差为 1,能消除不同剂量尺度的影响,让模型更公平地对待不同药物的剂量信息。但如果数据存在异常值,标准化可能会受到异常值的影响,导致结果不准确。 ```python from sklearn.preprocessing import StandardScaler data = {'剂量': [10, 20, 30, 40]} df = pd.DataFrame(data) scaler = StandardScaler() df['剂量标准化'] = scaler.fit_transform(df[['剂量']]) ``` - **归一化**:将剂量缩放到 `[0, 1]` 区间,能将剂量值限制在一个固定的范围内,避免某些大剂量药物对模型产生过大的影响。但当数据的分布不均匀时,归一化可能会使数据失去原有的分布特征,影响模型的性能。 ```python from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['剂量归一化'] = scaler.fit_transform(df[['剂量']]) ``` ### 君臣佐使编码 - **独热编码**:能清晰地表示药物的君臣佐使角色,让模型明确药物在方剂中的地位。但同样会增加特征维度,可能导致模型过拟合。 ```python data = {'君臣佐使': ['君', '臣', '佐', '使']} df = pd.DataFrame(data) encoded_df = pd.get_dummies(df, columns=['君臣佐使']) ``` - **顺序编码**:将君臣佐使角色赋予不同的数值,能体现角色的顺序关系。但这种编码方式假设角色之间存在线性关系,可能不符合实际情况,影响模型的准确性。 ```python role_mapping = {'君': 1, '臣': 2, '佐': 3, '使': 4} df['君臣佐使编码'] = df['君臣佐使'].map(role_mapping) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值