DeepFaceLab训练效果不好,很多人第一反应是调参数、换架构,折腾半天SBAD分辨率还是上不去,脸部细节糊得像打了马赛克。其实绝大多数情况下,问题出在数据集上。源脸数据不够、质量不齐、角度单一,模型再怎么训也只能在小样本里打转。这篇文章就来系统讲讲,当DeepFaceLab数据集不足时,如何采集数据、如何清洗数据,把你的数据集从勉强能用提升到优质水平。

一、数据不足对模型训练的真实影响
在动手补数据之前,先要搞清楚数据不足到底影响了什么。DeepFaceLab的SAEHD、AMP等主流模型本质上都是卷积神经网络,它们的能力上限很大程度上由见过的样本决定。当源脸数据只有几百张时,模型会很快过拟合,训练集上loss降得很漂亮,但换到新帧上就露馅:侧脸崩坏、闭眼出错、嘴巴动作僵硬。这是因为它只在有限的表情和角度上学习过,没见过的姿态完全不知道怎么还原。
数据不足还会带来另一个隐性问题:样本分布不均衡。比如你的素材大部分是正面照,只有零星几张侧面,那么模型对正脸的还原会越来越好,侧脸却始终停留在粗糙状态,最终成片里人物一转头就穿帮。所以补数据不只是凑数量,更要考虑角度、光照、表情、遮挡这四个维度的覆盖度。
一般来说,一个可用的换脸数据集至少要有2000到5000张对齐后的人脸图,想要训练高分辨率模型或者使用AMP架构,建议奔着上万张去准备。数量只是一个门槛,下面我们看看数据可以从哪里来。
二、多渠道采集高质量人脸数据
1. 从视频中批量提取素材
最常用的方式是用ffextract(DeepFaceLab自带的视频抽帧工具)从高清视频里批量提取人脸。选择素材时有几个硬性标准:优先选1080P及以上分辨率的原片,避免二压严重的资源;优先选光线均匀的场景,大逆光和大阴影画面提取出来的人脸一半亮一半暗,训练时反而是噪声;尽量挑选包含丰富表情和头部转动的片段,比如访谈、影视剧中的对话镜头。
操作上,把视频文件放到workspace\data_src目录,运行ffextract.bat,工具会自动抽帧并输出到data_src文件夹。抽帧密度可以自己控制,如果视频里人物长时间静止,隔帧提取会产生大量几乎相同的图片,这部分重复样本对训练帮助有限,反而拖慢数据整理的效率。
2. 合理利用公开数据集
学术界有不少开放的人脸数据集可以用来补充,比如CelebA、VGGFace2、FFHQ等。FFHQ的图像质量普遍很高,分辨率也足够,非常适合补充源脸特征。不过要注意两点:一是授权协议,确认数据集允许用于你的用途;二是风格差异,公开数据集多为摆拍照,光线和妆容风格与视频素材差别较大,混入比例过高可能导致模型学到的风格不稳定。实践中建议公开数据占比控制在三成以内。
3. 自录素材补充角度盲区
如果源人物是你自己或者可以接触到的人,自录素材是最可控的方式。用一个固定的相机或者手机,录制多组视频:正面平视、左右30度和60度转头、抬头低头、说话、大笑、闭眼等动作各来一遍。录制环境尽量模拟目标成片的光照,这样模型学到的肤色和光影过渡会更贴近实际使用场景。自录素材的好处是角度覆盖可以按需设计,哪里缺补哪里。
三、数据清洗的完整流程
1. 对齐之后先粗筛
采集来的原始数据要经过对齐处理才能进入训练。DeepFaceLab的data_src extract流程会自动检测人脸、对齐、裁剪,但S3FD检测器偶尔会把背景、手部或者其他人误判成目标脸,所以对齐完成后第一件事是人工粗筛,把明显不是目标人物、严重模糊、遮挡面积过大的图片删掉。可以按住方向键快速翻页浏览,这个环节虽然枯燥但回报极高。
2. 去重与去模糊
连续视频帧会产生大量近似重复的图片,如果全部保留,相当于给某几个姿态加了过高的权重。可以借助XnView、digikam等工具按相似度去重,或者写个简单的脚本计算图片哈希值来批量筛除。模糊图片同样要处理,运动模糊、失焦的画面会教模型生成模糊的纹理,用类似Laplacian算子计算图片清晰度的脚本就能批量过滤,示例如下:
import cv2
import os
src_dir = r"C:\workspace\data_src\aligned"
threshold = 80.0 # 清晰度阈值,可按素材情况调整
for name in os.listdir(src_dir):
path = os.path.join(src_dir, name)
img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
if img is None:
continue
# 计算Laplacian方差,数值越低说明画面越模糊
score = cv2.Laplacian(img, cv2.CV_64F).var()
if score < threshold:
os.remove(path)
print(f"已删除模糊图片: {name}")
阈值不要一刀切,先用一小批图片试跑,观察被删除的图片是不是真的模糊,再逐步调整,避免误删眨眼瞬间这类有价值的样本。
3. 遮挡与极端样本的处理
墨镜、口罩、手部遮挡、夸张阴影这类样本是新手最容易纠结的部分。原则上,轻微遮挡可以保留,它能让模型学会处理不完整信息;但大面积遮挡如果占比过高,会拉低整体质量。另外要专门保留一部分闭眼、张嘴大笑、侧脸的样本,这些恰恰是换脸最容易穿帮的场景,宁可少删不可错删。清洗完成后,建议用DeepFaceLab自带的训练预览功能观察几个epoch的效果,如果轮廓明显改善,说明清洗方向是对的。
四、数据量、分辨率与多样性的平衡建议
补齐数据后还有一个常见误区:盲目堆数量。数据集不是越大越好,如果新增的都是重复姿态,训练时间翻倍但效果提升甚微。更合理的做法是先统计现有数据的角度分布,比如用对齐文件中的yaw值粗略分类,看看哪些角度区间样本稀少,再有针对性地补充,这样几百张精准补充的素材,效果可能胜过几千张随机的堆料。
分辨率方面,数据集的原始分辨率至少要达到你训练的目标分辨率的两倍以上。比如打算训练512的模型,源数据最好能有1024以上的清晰度,否则上采样时细节无从谈起。最后提醒一点,dst数据(目标视频)同样需要清洗,低质量的目标帧会让模型在编码阶段的输入就不稳定。把源数据集当成作品来打磨,训练出来的模型自然配得上更好的成片效果。
DeepFaceLab数据集数据清洗修改时间:2026-09-04 14:42:51