AI换脸项目 - faceswap 基于Centos7 的部署、配置、训练、替换教程(原创)
知识拓展:
【精选】Nvidia GPU 最新计算能力表(CUDA Compute Capability)_cuda计算能力排行_Dust_Evc的博客-CSDN博客
训练指南-deepfakes/faceswap:训练Faceswap,模型恢复和分析,手把手教学,简单快速上手! - 知乎 (zhihu.com)
环境说明:
- 系统:Centos7.9
- Intel(R) Xeon(R) CPU E5-2678 v3
- 2部署方式:CPU
- 指令集强制要求(CPU方式安装):AVX
- 软件:FFmpeg
- python版本:3.10(强制要求,非3.10,很多环境不支持)
1、编译安装 python 3.10 环境:
cd /root |
2、yum 安装 ffmpeg 环境:
- yum官方不支持ffmpeg,所以我们需要添加第三方源
# 安装epel-release,因为安装需要使用其他的repo源,所以需要epel支持: |
- ffmpeg 相关常用命令:
# 从视频input.mp4中,裁剪出从1分30秒开始的一分钟视频 |
3、部署安装 faceswap, 基于 Centos7:
- 官方文档说明:faceswap/INSTALL.md at master · deepfakes/faceswap · GitHub
- 官方项目地址:GitHub - deepfakes/faceswap: Deepfakes Software For All
# 进入root 根目录,创建一个 ai 文件夹 用来存放所有的ai文件 |
4、faceswap 项目运行:
工作流程(此处要把 gakki 的脸换成 刘亦菲):
- 1、/root/ai/AiSetFiles/gakki:
要被换脸的人原图,即从爬虫爬的图片 - 2、/root/ai/AiSetFiles/gakki_video:
要被换脸的人视频 - 3、/root/ai/AiSetFiles/gakki_ready:
要被换脸的人,原始图片/视频进行脸部特征抽取后,放置的文件夹 - 4、/root/ai/AiSetFiles/lyf:
要换成谁的脸的人原图,即从爬虫爬的图片 - 5、/root/ai/AiSetFiles/lyf_video:
要换成谁的脸的人视频 - 6、/root/ai/AiSetFiles/lyf_ready:
要换成谁的脸的人,原始图片/视频进行脸部特征抽取后,放置的文件夹 - 7、/root/ai/AiSetFiles/gakki_lyf_model:放置训练的模型文件
- 8、/root/ai/AiSetFiles/convert:放置模型跑出来的最终结果,即已经换脸后的文件
- 1、/root/ai/AiSetFiles/gakki:
1、抽取脸部特征:
# 抽取图片的脸部特征,传入的是文件夹,会保留原本的格式,即jpg文件抽取后的图片依然是jpg
python faceswap.py extract -i /root/ai/AiSetFiles/gakki -o /root/ai/AiSetFiles/gakki_ready
python faceswap.py extract -i /root/ai/AiSetFiles/lyf -o /root/ai/AiSetFiles/lyf_ready
# 抽取视频里每帧图片的脸部特征,传入的是视频文件,默认保存为png格式
python faceswap.py extract -i /root/ai/AiSetFiles/gakki_video/gakki.mp4 -o /root/ai/AiSetFiles/gakki_ready
python faceswap.py extract -i /root/ai/AiSetFiles/lyf_video/lyf.mp4 -o /root/ai/AiSetFiles/lyf_ready
# 若是从网上下了多个短视频,可以使用上面的ffmpeg命令进行视频合并
# 若传入的是视频,则提取面部特征后的图片数量一般会比较巨大,若是想自己控制输出图片的数量,可以使用ffmpeg将视频切成图片,然后当作图片进行处理。不过我的ffmpeg无法操作png格式,只能转成jpg格式,会导致丢失很多信息。png格式的文件一般要比jpg格式文件大得多,模型的效果也要好些2、人工筛选:
- 图片进行面部特征抽取后,会变成下面这种大头照。
- 这时候就需要进行人工筛选了,这一步是最耗时的,因为最后入模型的就是这些图片,因此需要仔细的筛选。

3、训练模型:
- 这里有个点要额外注意一下,我在使用
nohup进行后台运行的时候,程序直接崩了,我也没搞清楚是什么问题,如果出现了这种情况,建议使用jupyter-lab --port 9999 --allow-root开启jupyter,然后在本地windows浏览器打开jupyter的终端,然后在这里进行模型训练。就不用担心关电脑后程序自动终止。 - 模型训练没什么说的,这里的模型是手动停止的,自己觉得模型不再收敛,时间有差不多的时候,直接在命令行
敲回车就可以直接停止了
# python3 faceswap.py train -A <要被换掉人的脸的抽取面部特征的文件夹> -B <想要替换成谁的脸的面部特征文件夹> -m <训练后的model存放文件夹>
python3 faceswap.py train -A /root/ai/AiSetFiles/gakki_ready -B /root/ai/AiSetFiles/lyf_ready -m /root/ai/AiSetFiles/gakki_lyf_model/- 这里有个点要额外注意一下,我在使用
4、调用模型进行换脸:
- 对图片进行换脸:
# python faceswap.py convert -i <输入文件夹> -o <输出文件夹> -m <模型文件夹>
python faceswap.py convert -i /root/ai/AiSetFiles/gakki -o /root/ai/AiSetFiles/convert -m /root/ai/AiSetFiles/gakki_lyf_model/对视频进行换脸:
- 如果想对视频进行换脸,必须调用
ffmpeg把视频切成图片,然后再调用上面的命令,最后再自己把图片拼成视频。涉及的ffmpeg命令都在上面。 - 换脸后生成的文件是png格式,如果ffmpeg操作不了png格式图片,就需要先转成jpg
- 如果想对视频进行换脸,必须调用
from PIL import Image
img = Image.open('lyf_1.png')
img.save('lyf_1.jpg')
# 直接将png格式读进去,然后保存为jpg即可,再配合os模块即可批量转换
5、补充:
使用频繁的linux命令:
# 查看当前文件下的文件数量(仅文件)
ls -l | grep "^-" | wc -l
# 解压zip文件,可能会把一大堆文件直接解压在当前文件夹,建议在一个空文件夹内解压zip文件
unzip lyf.zip
# 压缩文件夹lyf内的所有文件
tar -zcvf lyf.tar.gz ./lyf
# 查看当前目录下所有的文件大小
du -sh *