AI换脸项目faceswap研究报告

article/2025/10/6 16:18:12

缘起

deepfakes是利用AI技术换脸的开源项目,目前基于deepfakes的开源项目很多,而faceswap认可度很高,到目前为止有28.5千Star,可以说是换脸这类项目最火的了。小弟在当下有换脸需求,选取了这个项目进行研究尝试,将自己的经验和体会记录下来,希望对你有所帮助!

感谢公司、领导、一切关心支持我的人!

效果

先上一些效果,增加一些趣味性!

官方换脸效果1

官方效果2,小扎在国会舌战群儒的场景

第一次尝试换脸,演讲者左右换姿势,似乎是为不冷落两边的观众

另外一个换脸后的效果

尝试了很多此换脸,不在此一一列举。

+++++++++++++++++++++++

准备

需要一块好的nvidia显卡,最低是1080或以上,众所周知,机器学习是费时的,一块好的显卡可以帮助你节省大量的时间,我用的机器配置了4块TITAN xp显卡,这个项目训练时大部分小弟用到其中两张显卡,在训练villain模型时,用到了其中三张,villain很吃显存,基本上一天可以训练出一个比较清晰的模型。

如果只有CPU,我建议还是放弃尝试,据说训练时间是以周为单位的,训练出一个结果,可能需要数周,那就需要极大的耐性。训练中你机器CPU100%的被烧数周,不能干其他事情。而训练一个模型可能并不让人满意,每次调整参数,又的继续等待数周。大概你周游完欧洲各国后,回家一看结果还没出来!

如果在linux上运行程序,需要一些ffmpeg知识、一些shell脚本经验

该项目在windows上可以直接运行图形,我只有ssh命令行连接的ubuntu服务器,所以自己写了写脚本来处理,很羡慕GUI版本

后来突然领悟可以在我的mac笔记本上运行图形界面,用来查看配置选项。

图形界面是这样:

能运行图形界面操作起来更方便,但是如果像我一样在服务器上通过ssh登陆,也无妨。

在本地调整好参数,同步到服务器上就行啦。

安装好CUDA 10.0  和 anaconda,这个到处都是教程,在此不累叙。

安装faceswap

下载项目https://github.com/deepfakes/faceswap

需要注意的是这个项目经常更新,有时可能不稳定,所以我clone了一份在自己的github里https://github.com/hnjiakai/faceswap ,幸运的是我用clone的这个版本,训练和转换等整个过程都很顺利,没有出现论坛里讨论的各种奇奇怪怪的问题。

1、利用conda创建好运行faceswap的虚拟环境

conda create -n face tensorflow=1.14 python=3.6

2、切换到虚拟环境

conda activate face 

3、安装依赖环境

pip -r requirements.txt

conda install opencv 

这些其实已经完整99%的安装,剩下1%用到时提示缺少可以用conda install xxx安装。详细的安装过程可以参照https://github.com/deepfakes/faceswap/blob/master/INSTALL.md

人脸资源准备

A人脸,以后简称A脸,从需要变脸的视频中得到,我用ffmpeg将视频A转换成图片到A-src文件夹,然后利用faceswap抽取人脸到A-desc文件夹为后续训练做准备。

B人脸,以后简称B脸,从另外一个视频中得到,同样用ffmpeg抽取帧B-src文件夹,然后利用faceswap抽取人脸到B-desc文件夹。

抽取的配置图:

抽取人脸的配置截图中,红框部分做调整就可以,其他默认就OK

1++++抽取帧的ffmpeg命令

ffmpeg -i a_movie.mp4 -qscale:v 2 -f image2 -r 1 zhubo-src/img_%d.jpg

更多ffmpeg用法请看https://blog.csdn.net/jiakai82/article/details/103288726

2++++利用faceswap抽取人脸图片

A脸提取

faceswap.py extract -i A-src -o A-desc -D s3fd -A fan -M extended 

其中-M extended我选择是增强,其他参数选择默认就行,我尝试了很多参数,走了不少弯路,最后发现这个最适合我

B脸提取

faceswap.py extract -i B-src -o B-desc -D s3fd -A fan -M extended 

抽取时的截图:

最下方会显示抽取进度,可以看到当前进度8%。

实际操作过后,抽取思路其实比较清晰了,有上面这些其实已经够啦。

在抽取过程中您仍然可能碰到各种问题,可以在下面连接里获取更多信息

最全的人脸抽取指导在这个https://forum.faceswap.dev/viewtopic.php?f=5&t=27

个人觉得-M extended 选项最有用,可以根据自己需要调整extended或者是其他,剩余的选项其实大多默认就行

extended增强模版,用意在尽量包含眉毛。

A-src A-desc B-src B-desc 这四个目录最好换成你的工作目录路径,便于管理

我的某个模型的工作目录大概这样

目录文件一目了然,train.ini放置的是本模型训练的配置文件,my_conf.sh放置的是训练时的命令行参数配置信息,

train75-original,75表示的是比例、original表示的是模型插件名。

我使用的人脸全都是正面的,项目需求是这样安排的,视频中始终只有一人,所以不用考虑人脸清理等操作,也节省了不少时间。

下图是需要换脸的A脸其中的一张

A脸我大概收集了5000张,是从一段3分钟视频中截取

下图是B脸图片其中的一张

B脸图片大概也收集了5000张,同样是从另外一段三分钟视频中截取。

人脸准备很快就说完了,其实为了整理人脸,费了不少时间,包括人脸视频选取,下载处理,美容等。

在没有美容前,B脸偏暗,是这样的:

训练出来的结果总是灰头土脸,后来提亮肤色后,好很多。

参数调整

现在人脸图片已经准备好了,接下来就是准备训练train了。

train的最全指南在这里https://forum.faceswap.dev/viewtopic.php?f=6&t=146

+++++++++++++++++++++++++++++++++++++++++

用默认参数完全可以开始训练了,但是考虑到训练是个漫长的过程,在调整好你想要的参数后再训练,可以节省无谓的时间浪费。

train的参数大概有几十个吧,这么多参数各种组合起来数量还是很多的,如果都要实验一遍的话,可以玩很久。

+++++主要参数

train的参数有很多,包括Plugins部分的参数(Configure Train Plugins )和train阶段时用到的命令行参数,大部分参数其实默认就挺好,有些特定参数,做些调整,

从而可以训练出更好的结果。

首先说下Plugins参数

Global部分,最有调整性的是Coverage,我尝试了很多,从62%到100%都有,最后得出结果是68%到75%之间的效果最好

Coverage并不是越大越好,自己可以尝试调整。

MaskType用none,其他我也有尝试,但是并没有什么进步,还是回到none。

Train Plugins之model标签:

我最常用的是original和villain,GPU内存够用就没勾选 lowmem。

下面这些选项可以根据自己需要调整,我基本不调整他

下面是命令行参数选项卡

我更关心红色部分,这是些主要的选项

各个选项都很好理解,其中WriteImage可以将图片中间结果保存,可以随时查看训练结果,觉得满意啦就可以停止训练

图片是这样的:

在选择好你的参数后,将faceswap项目目录下的config里的几个.ini文件,拷贝到服务器上,如果是本地训练可以忽略

点击generate按钮,会生成命令行,可以粘贴到服务器上运行,如果是本地直接点击train按钮运行

训练

上面已经开始训练了,训练中可以随时查看faceswap目录下的training_preview.jpg文件,觉得不错就可以停止。

重要的事情再说一遍,看到training_preview.jpg文件,效果不错了,就可以停止了

++++++++并不是迭代次数越多越好,也不是看lose越小越好

肉眼直接看training_preview.jpg图片是最好的方法

model文件夹里的文件结构

如果中间训练时出错,无法继续训练,可以通过.bk文件还原

为了防止过分迭代,比如,可以加入-it 100000,迭代10万次会自动停止

接下来是个漫长的过程,时间长短取决于你的GPU性能。。。。。。。。。。。。。。。。

转换

在觉得训练结果已经不错,或者想看看结果如何,都可以停止训练,开始转换人脸,就是将A脸换成B脸

train是个很重要的过程,有很多参数,convert也同样挺重要,也有很多参数,不同参数影响结果也挺大

conver命令行参数:

在尝试很多参数变更后,最后回到调整红色部分的主要参数

ColorAdjustment 主要调整avg-color和seamless-clone

ColorAdjustment如果支持组合模式,我觉得可能更完美些,已经向作者提出建议

++单纯用seamless-clone五官抖动厉害,单独用其他的融合很不完美

seamless-clone效果图:

不用seamless-clone效果更不好

MaskType主要用到extended和predicted

extended能解决眉毛问题,但是下巴有问题

predicted眉毛有问题

++extended能够将眉毛包含覆盖,predicted要差些,眉毛总有问题

++++如果换脸时有多人,可以用排除法,或者包含法,避免替换了额外的人脸。

我尝试很多组合,大概训练了2位数那么多的模型,花费了无数时间,但是始终没找到完美的组合!

这些模型占用磁盘达到383GB,GPU在日夜不停的训练

所以我觉得,faceswap完成完美的替换在某些情况下还是比较困难的。

faceswap有很多参数可以选择,可玩性很强,可选很多,容易陷入选择泥团。

虽然有不完美但是faceswap是个不平凡的项目!

合成视频

转换后的图片,我通过ffmpeg合成视频,暂时没考虑语音,语音也可以通过ffmpeg后期合成

"ffmpeg -i ./converted-$convert_name/img_%0d.png -c:v libx264 -vf "fps=25,format=yuv420p" convert-movie-$convert_name-$dname.mp4"

合成了文章开头那些视频

+++++++++

总结

这次换的有瑕疵,原因有多种可能:

第一、可能是选择的AB肤色有关系,图片中女性脸都非常白,稍有差池就能看到暇疵,我觉得肤色比较黑的可能更好;

第二、可能也和算法有很大关系,期待作者出更完美的算法,包括在学习部分和脸部融合部分,在convert阶段,如果支持多种融合的组合,比如semaless-clone加vag-color组合,等,效果可能更好,我以向作者提出这个建议,他们考虑会加上,但是可能时间比较长;

第三、可能是要找到适合AB脸的参数,需要更多的尝试,比较费时,每个换脸的参数可能都不同;

第四、可能是人脸始终是正脸,光影很单调,我觉得如果是经常左右动的脸(有些演讲人会),可能更好些;

机器学习是个学习过程,没有完美答案,也不能1+1=2那么直接,更多是概率,这次没成功可能下次会成功。

时间有限,关注那些重要的参数。

小弟接触换脸时间不长,能力也有限,希望大牛不吝赐教,万分感谢!

感谢

感谢公司、感谢领导、感谢一切关心支持我的人!

后记

期待faceswap的进步,让换脸更完美!

近闻微软和北大搞出了个新的换脸算法,https://mp.weixin.qq.com/s/gGCyMq4PM_Whv-Ssiwt-HA,据说可以秒杀faceswap!目前只有论文没有代码,希望有大佬可以开发出来并开源,造福万千程序员!

 

免责声明

文中人物图片来自网络,如果有侵权行为,请留言作者删除。

 

全文结束

 

 

 

 

 


http://chatgpt.dhexx.cn/article/8IC9T2jp.shtml

相关文章

faceswap安装教程图文详解

Faceswap是一种人脸识别技术,可以将一个人的面部特征与另一个人的面部特征进行交换,从而创建出一个看起来像是两个人融合在一起的图像或视频。这项技术可以用于各种目的,包括艺术创作、电影制作、虚拟现实、安全监控等领域。Faceswap的实现方…

faceswap使用记录

1、没有显示.fs_cache文件夹 当时我是使用云gpu来运行文件代码的,里面提示我安装两个配置文件放置到.fs_cache文件夹,但是当前文件夹里面并没有显示.fa_cache文件夹 虽然不知道是什么原因,但这个文件夹其实是存在的,你下载好两个…

faceswap 工程搭建及测试

目录 1. 前言2. 2种搭建思路3. 写在前面的坑(1)版本一定要严格遵守要求;(2)下载faceswap的github源码(3)Anacoda也不是万能的(4)tensorflow 与cuda、cudnn、python、kera…

Faceswap文档之---部署安装

前言 本篇博客,记录了部署github上的明星项目faceswap的过程,和一些踩坑记录。这个项目可以很好的实现视频换脸,感兴趣同学可以试一下。 说明:本篇文章我将项目部署在linux操作系统进行使用的,因为我们公司服务器性能更…

DeepFake技术--win7下faceswap环境配置(一)(二)(三)

win7下faceswap环境配置(一)- 软件安装 By admin Deepfakes 24 Comments Deepfakes环境配置 以下以64位Win7环境下Faceswap为例,零编程基础学习deepfakes的环境搭配。 Faceswap 简介 由于Win7用openfaceswap会出现错误,所以…

深度学习换脸:faceswap项目实践

faceswap项目解析 一、简介二、数据提取三、模型训练四、人脸转换五、总结 一、简介 faceswap是采用人脸encoder-decoder的方式进行换脸,先提取人脸,包括人脸分割的mask,然后将两个人的人脸用同一个encoder编码,再使用对方的deco…

Windows下faceswap的安装

在Windows上安装Faceswap是一件轻而易举的事。除图形驱动程序外,Windows安装程序会安装您需要的所有内容。如果您使用的是显卡(强烈推荐。CPU上的换脸的速度非常慢),然后确保您的驱动程序是最新的。 下载(访问github可…

Faceswap文档之---使用手册

前言 本篇博客,记录了使用github上的明星项目faceswap的过程,和一些踩坑记录。这个项目可以很好的实现视频换脸,感兴趣同学可以试一下。 说明:本篇文章我将项目部署在linux操作系统进行使用的,因为我们公司服务器性能更…

STFT filter bank

STFT filter bank STFT根据公式不同的写法,可以推导出overlap-add和filter-bank两种不同的实现方式 X(w)∑nx(n)w(n−mR)e−jωn X ( w ) ∑ n x ( n ) w ( n − m R ) e − j ω n 先暂时讨论R 1的情况 filter bank可以用以下流程表示 分析下以上步骤&…

短时傅里叶变换(STFT)及matlab

笔记~自用版~ 短时傅里叶变换的基础理论 短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,它将信号在时间域上分成若干个短时段,对每个短时段进行窗函数加窗后再做傅里叶变换,得到每个时刻的频…

Revertable STFT

最近在做利用深度学习去噪的工作,大部分的工作都是利用spectrogram特征来做的,这就需要用到STFT, 本次利用的是python的scipy.signal模块。 在做去噪的时候,首先需要先将输入信号x利用stft转换成spectrogram: ff, tt…

时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API)

1. 引言 在信号分析中,傅里叶变换可称得上是神器。但在实际应用中,人们发现它还是存在一些不可忽视的缺陷。 为了便于叙述考察以下两种情形: Case 1 考察这样一个函数: fs 1000; t 0:1/fs:1 - 1/fs; x [10 * cos(2 * pi *…

C语言版本STFT/ISTFT

接上一篇:https://blog.csdn.net/SPESEG/article/details/101672559 注意:寡人的stft是有前提条件的,并不是完全与librosa.stft一一对应【我的版本参数是固定的,不可变,其他是一样的】,因为我的hop_length…

stft isar成像 matlab,基于STFT和FRFT的运动目标雷达三维成像方法与流程

本发明属于数字信号处理技术领域,特别涉及一种运动目标雷达三维成像方方法,可 用于对运动目标识别时,雷达ISAR对其三维成像。 背景技术: 逆合成孔径雷达ISAR是一种全天候、全天时的远程探测手段,具有对运动目标进行 成像的能力,被广泛应用于目标跟踪、目标识别、机场监视…

librosa 语音库(二)STFT 的实现

librosa是一个应用广泛的音频处理python库。 在librosa中有一个方法叫做stft,功能是求音频的短时傅里叶变换, librosa.stft 返回是一个矩阵 短时傅立叶变换(STFT),返回一个复数矩阵使得D(f,t) 当调用的形式是 np.abs( stft() ),…

python的opencv操作记录(七)——短时傅里叶变换(stft)

文章目录 DCT-傅立叶变换的局限性STFT 短时傅里叶变换从另一个角度来理解图像的“时域”数据看看fs和t这两个参数再看看怎么划分窗口最后看另外两个出参Zxx返回结构 图像的stft DCT-傅立叶变换的局限性 接上一篇DCT的文章,DCT只提取了整个信号域的频率信息&#xf…

傅里叶变换@(stft和istft)

一、窗函数之短时傅里叶变换stft 前提: 傅里叶变换是针对平稳信号的,但是很多实际应用中的信号都是非平稳的,如果要计算其傅里叶变换,需要假设其周期无限长,然后对这个无限长的信号做变换分析。但是这种无限长信号分…

scipy短时傅里叶分析STFT

scipy短时傅里叶分析 基本原理: 为了使STFT能够通过STFT逆变换反变换,信号加窗必须服从“非零重叠加”(NOLA)的约束,输入信号必须具有完整的加窗覆盖即 ( x . s h a p e [ a x i s ] − n p e r s e g ) (x.shape[axis] - nperseg) % (nper…

STFT笔记

因为不懂这个被鄙视了,调包侠来补作业。 基础知识 FFT(fast fourier transfrom)快速傅里叶变换。 推荐阅读《深入浅出的讲解傅里叶变换(真正的通俗易懂)》, 《梅尔频率倒谱系数(MFCC)》。 频谱只获得了频…

利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声

利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声 1、背景 傅里叶变换(TF)对频谱的描绘是“全局性”的,不能反映时间维度局部区域上的特征,人们虽然从傅立叶变换能清楚地看到一整段信号包含的每一个频率的分量值…