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

article/2025/10/7 6:27:33

faceswap项目解析

  • 一、简介
  • 二、数据提取
  • 三、模型训练
  • 四、人脸转换
  • 五、总结

一、简介

faceswap是采用人脸encoder-decoder的方式进行换脸,先提取人脸,包括人脸分割的mask,然后将两个人的人脸用同一个encoder编码,再使用对方的decoder进行解码,从而实现换脸。具体过程参考下图:
faceswap换脸流程示意图
代码地址:https://github.com/deepfakes/faceswap

二、数据提取

我在网络上面找了wangwenbin和zhaolijian两个人的视频,使用opencv将视频保存为图片数据,放在两个文件夹中,原始图片路径~/faceswap/src_1。

# 提取图片中的人脸,提取人脸的过程包括检测、分割、对齐
python faceswap.py extract -i src_1/wangwenbin -o faces_1/wangwenbin
python faceswap.py extract -i src_1/zhaolijian -o faces_1/zhaolijian

完成后,提取的人脸数据保存在faces_1。
原工程支持视频和图片的人脸位置和mask提取,但是后期人脸转换只支持图片到图片,不支持视频到视频

三、模型训练

总共训练三个模型,两个人公用一个encoder模型,每人各自一个decoder模型。

python faceswap.py train -A faces_1/wangwenbin -B faces_1/zhaolijian -m models_1

模型每隔一段时间自动存储,按enter键停止并保存模型

四、人脸转换

使用encoder编码人脸并使用decoder解码zhaolijian的脸,转换后的人脸保存到converted文件夹中

python faceswap.py convert -i src_1/wangwenbin/ -o converted_1/ -m models_1

五、总结

  1. 工程代码更正
    亲测,git下来的faceswap.py需要把头部代码用如下代码替换
import sys
import os
import tensorflow as tf
import keras
from keras.backend.tensorflow_backend import set_session
from lib.cli import args
from lib.config import generate_configs
from tensorflow import ConfigProto
from tensorflow import InteractiveSession# tf.compat.v1.disable_eager_execution()
os.environ["CUDA_VISIBLE_DEVICES"] = "0"config = ConfigProto()
config.gpu_options.allow_growth = True
# session = InteractiveSession(config=config)
session = tf.Session(config=config)
set_session(session)
keras.backend.clear_session()
  1. faceswap不是一个前沿算法,效果也一般
    目前比较新的论文可以参考FSGAN: Subject Agnostic Face Swapping and Reenactment[4] (ICCV2019)、FaceShifter: Towards High Fidelity And Occlusion Aware Face Swapping[5] (arXiv2019)
  2. encoder-decoder在图片、视频压缩领域会不会有比较好的效果呢,不知道有没有人在研究这个方向。

http://chatgpt.dhexx.cn/article/3OHdU4dp.shtml

相关文章

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)对频谱的描绘是“全局性”的,不能反映时间维度局部区域上的特征,人们虽然从傅立叶变换能清楚地看到一整段信号包含的每一个频率的分量值…

STFT(短时傅里叶变换)音频特征提取,用于语音识别 python

在各种音频相关的任务中,不管用什么模型或网络,得到所需的音频特征肯定是必要的一步。下面简单说一下STFT特征 一、原始信号 在说STFT之前,先说一下读入的原始信号,图像是在XY二维上描述的像素点的集合,相应的&#x…

STFT原理及MATLAB代码

原文地址:http://blog.csdn.net/shengzhadon/article/details/46811923 一、先说说STFT的理论 1.概念和特点 STFT(short-time Fourier transform,短时傅里叶变换)是和傅里叶变换相关的一种数学变换,用以确定时变信号其…

nvme分区选mbr还是guid_win7安装系统硬盘模式mbr和guid选哪个?

有很多系统之家的用户,还是喜欢安装win7系统的。但是在新的硬盘里面我们要分区的话,会出现mbr和guid是硬盘分区的两个格式,很多用户在做系统的时候不知道选哪个好,其实最好根据自己的电脑的配置,下面来看看详细的介绍吧…

uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及

我们的电脑硬盘分区格式一共有两种,一种是GUID(GPT),一种是MBR。 啥是硬盘分区呢?举个例子你就明白了,很多人去买电脑的时候,比如你买的电脑只有一块硬盘,店家就会给你分区,把这一块硬盘分成好几个区,比如分成了系统,软件,文档这样三个,那么你打开【我的电脑】后就会…

nvme分区选mbr还是guid_SSD里的特例:NVME固态改MBR格式、装Win7

问题一:NVME固态是否支持MBR文件格式: 场景:前几天朋友兴致冲冲的买了个建兴T10,准备好好体验一下。但是正当他吃着火锅,唱着歌,突然就给麻匪劫了——电脑系统竟然接二连三莫名奇妙的崩溃。 于是朋友就向我求助。由于他的电脑最近除了换了硬盘,并没有添加任何其他的硬设…

guid备份分区表crc错误_硬盘GPT和MBR分区表转换方法

随着硬盘容量越来越大,传统的MBR硬盘分区模式已经不能满足发展需要,预装win8或win10系统的硬盘默认都是GPT分区表(GUID格式),GPT识别2T以上的硬盘以及UEFI启动模式。不过在对系统进行重装时,经常会遇到无法安装在GPT或MBR硬盘中的问题,那么这个时候就需要对硬盘的分区表进…