face2face怎么换脸,face2face ai变脸
以下是教程:
获取deepfakes工具包
git克隆https://github.com/deep假货/face swap.git
2.补充依赖包:
pip安装tqdm
pip安装cv2
pipinstallopencv-contrib-python
Pip安装数据库
Pip安装密钥
安装pip传感器流量
安装张量流-gpu(例如,如果机器上有gpu)
pip安装面部识别
3.收集样本:
这里选取的是怡和的蘑菇样品。花了半天时间。我拍了100张照片:
另一个样本是快速电源,找图像确实比较麻烦,所以直接截取了《The Great Gatsby》的视频,用ffmpeg转换成图像。大概有70张。
抓住你的脸
收集完样本后,使用。/face swap . py extractive input _ folder/ooo output _ folder/command捕捉带有人脸的样本图像。
之所以这样做,是因为我们主要以换脸为主,只得到五官,其他环境因素对换脸影响不大。
人脸捕捉过程完成后,就可以得到所有的人脸图像了。在这里,可以手动筛选并移除不正确的样本(下图中的49_1.jpg)。
5.人脸检测算法HOG:
这里,简要描述面部特征提取算法HOG(histogramooriented gradient)。
严格来说,HOG其实是一种特征,是一种用于通过计算机视觉和图像处理进行物体检测的特征描述因子。
HOG特征结合SVM分类器在图像识别中得到广泛应用。
这里人脸检测的简单流程如下。
A.首先,通过用黑色和白色表示图像来简化过程。不需要颜色数据来检测面部。
B.依次扫描图像上的每个像素点。对于每个像素,找到与其直接相邻的像素。然后围绕这个点找到黑暗变化的方向。
比如下图所示,点周围由亮到暗的方向是从左下角到右上角,那么斜坡方向就是下面的箭头所示。
C.前一步完成后,图像中的所有像素都可以用相应的梯度来表示。这些箭头显示了整个图像从亮到暗的趋势。
如果直接分析这些像素(也就是通过颜色分析),非常亮的点和非常暗的点之间肯定会有很大的数值差异(RGB值)。
而我们只关注亮度变化的方向,所以即使有彩色图像和黑白图像,最后的结果也是一样的,可以大大简化解题的过程。
D.但是,存储所有这些渐变是一个消耗存储的过程,所以我们把整个图像分成若干个小方块,计算有多少个不同的渐变。
然后,这个小方块的梯度方向用梯度最一致的方向来表示。这样就可以将原始图像转换成非常简单的表示,以更简单的方式把握人脸的基本结构。
E.计算出一幅图像的HOG特征后,可以和大量图像训练得到的HOG特征进行对比。如果相似度超过某个阈值,则认为检测到面部。
6开始训练。
提取两个人脸的面部信息后,直接用下面这个命令开始训练模型。/face swap . py train-AFA CEA _ folder/-BFA CEB _ folder-m车型/
其中-m指定保存的模型所在的文件夹。还可以在命令中添加-p参数来打开预览模式。
在训练过程中,你可以随时输入停止训练,模型将被存储在目标文件夹中。
用于训练的深度学习框架是tensorflow,它提供了存储检查点的机制(当然必须在代码中使用)。
停止训练后,可以随时使用上述命令读取之前训练的重量参数,继续训练。
7.改变人们的面貌
训练模型后,如果损失值较低,可以使用以下命令来更改目标图形:/face swap . pyi input _ images _ folder/-o output _ images _ folder/-m型号/
这里有一个要查找的视频示例,因此您可以首先使用以下命令将视频转换为具有特定频率的图像:
ffmpegI video.mp4输出/视频帧-%d.png
然后进行人脸转换操作。最后,将转换后的人脸图片组合成一个视频:
ffmpeg-I视频帧。png -c:v libx264 -vf "fps=25,format=YUV 420 p " out.mp4
下面是两张变脸图(样本A 110张,样本B 70张,训练时间6小时):
嗯…效果不怎么样…建议你可以加大样本量,延长训练时间。
8.转换面的过程
先简单说一下人脸转换的过程。
这里用的是AutoEncoder(一种卷积神经网络),它会根据输入的图片重建这张图片(即根据这张图片重新生成这张图片):
AutoEncoder模型在这里做的是:首先用编码器对一张图片进行处理(卷积神经网络提取特征),用压缩的方式表示图片。然后解码器恢复这个图像。
在特定的deepfakes中,它使用一个编码器和两个解码器。在训练部分,它实际上训练了两个神经网络。两个神经网络共用一个编码器,但它们都有不同的解码器。
首先,编码器将一张图片转换成面部特征(通过卷积神经网络提取面部细节)。然后解码器通过该面部特征数据恢复图像。
这里有一个误差函数(损失函数)来判断这个转换是好是坏。模型训练的过程就是最小化这个损失函数(值)的过程。
第一个网络只训练图片A,第二个网络只训练图片b,编码器学习如何将一张图片转换成面部特征值。
解码器A用来学习如何通过面部特征值重构图片A,解码器B用来学习如何通过面部特征值重构图片B。
因此,在训练过程中,我们会将两幅图片发送到同一个编码器,但使用两个不同的解码器来恢复图片。
最后我们用图片B得到的人脸,用编码器提取特征,再用A的解码器还原,就会得到A的人脸和B的表情。
结束
欢迎、贡献/合作:dashuju36@qq.com
如果你觉得文章不错,分享到朋友圈吧~