---
orphan: True
---

# 一个新的换脸软件FaceFusion

```{warning}
2024年2月6日

今天仔细看了一下FaceFusion默认的内置模型，是inswapper_128.onnx. 这是个基于扩散模型的换脸模型。类似于Stable Diffusion里的图生图功能。我之前关于它主要是使用3D重建技术的推测应该是错的。其实这一点从它的名字 FaceFusion 也可以看出来，拥有和Stable Diffusion一样的 -fusion 后缀。
```

```{card}
写于2023年12月24日
^^^
昨天在Github上游荡，突然发现一个全新的换脸软件。名字叫[FaceFusion](https://github.com/facefusion/facefusion).

```

```{figure} ./1224/image.png
---
width: 90%
figclass: margin-caption
name: facefusion_demo
---
图片来自FaceFusion官方doc
```

Slogan非常的嚣张，“Next generation face swapper and enhancer”! 什么实力啊。

作为一名老AIGC爱好者，曾在7年前就用FaceSwap对当时刚拍完流浪地球1的赵金麦进行了换脸(纯绿色健康)，很快啊，我啪的一下就下载安装了这个Next generation的FaceFusion。

## AI换脸的His-story.

话说上古时期(大约是2015前后)，当时算力还不怎么充足，但一些AI研究课题组和公司已经做出了不小的成就。例如翻译，人脸识别，AlphaGo之类的。

突然有一天，一个很特殊的应用领域**换脸**闯入了大家生活。当时给社会公众的震撼不亚于最近第一次GPT-3出来。刚高中毕业的我，犹记得首先被换的就是刘亦菲和迪丽热巴，可见程序员心中的女神大概是什么样的。

现在还有人以此为证据说，迪丽热巴因为是换脸领域的No.1，所以理所应当是最漂亮的(或说符合男性审美的)。其实我以为不然，仔细考据可以发现，主要是中文Ai换脸领域的大佬[滚石](https://dfldata.cc/?1)带头训练了一个迪丽热巴的模型。众所周知，模型是可以复用的，这个(以及随后的几个版本)的迪丽热巴模型被广泛使用，造成了迪丽热巴泛滥。在各种换脸领域你都能看到迪丽热巴。

这件事也可以告诉我们，做研究不一定要随大流，当时我训练的赵金麦模型因为我硬件烂，也没什么经验精力，最后就放弃了。不然说不定现在会有人说赵金麦就是国内第一女神。

关于迪丽热巴模型的效果，可见如下图和链接。图中第一列为原脸，第三列为用AI模型生成的脸:

```{figure} ./1224/133140nz3y548y5yjd4sv9.jpg
---
width: 60%
figclass: margin-caption
name: dlrb_face_model
---
图片来自下方第二个链接，如有侵权请联系我删除，无任何商业目的
```

- [【重磅】万能模型-直接能换迪丽热巴的模型](https://dfldata.cc/forum.php?mod=viewthread&tid=248)
- [惊叹！实测滚石大佬的liae结构的迪丽热巴万能模型](https://dfldata.cc/forum.php?mod=viewthread&tid=5217)
- [众女星换脸冯宝宝，谁更适配呢？COVER：王影璐](https://www.bilibili.com/video/BV1wy4y1K7qb/?spm_id_from=333.337.search-card.all.click&vd_source=fe3c3898a4e09df9b86bc84183811008)

话说回技术，其实换脸并不算一个特殊的神经网络模型，而应当认为是一系列模型的组合使用。因此，如果你尝试了AI换脸，你会需要以下技术：人脸识别(确定脸的位置)，图像分割(把脸和头发丝，眼镜等分开)，3D重建，GAN(做进一步的细化)，外加上一些图像处理、视频剪辑的技巧。

最早把这些技术集成的两开源团队，便是[FaceSwap](https://github.com/deepfakes/faceswap)和[DeepFaceLab](https://github.com/iperov/DeepFaceLab)(以下简称DFL)，FaceSwap的安装和使用相对小白一些，有GUI(用户图形界面)；DFL则主要用bash脚本或bat脚本(取决于平台)来使用。如果你问专业人士，大部分会建议你用DFL，因为它效果好，并且可操作性高。可以这样来理解——因为AI换脸并不是一项成熟的技术，其中的各个组分都可以再做升级，因此，如果有某个大神改进了一些方面，你可以把它集成到DFL里面，或者，把一些好用的工具仅作为外部软件，配合DFL使用。对FaceSwap则不然，因为它集成度相对高，不利于直接DIY。另外，有不少评测指出FaceSwap的效果不如DFL，在此则不赘述了。

```{figure} ./1224/mulan.png
---
width: 80%
figclass: margin-caption
name: mulan-model
---

高手玩家bug4dfldata和其团队制作的***木兰***模型，效果令人震撼，来自[DFL论坛](https://dfldata.cc/forum.php?mod=viewthread&tid=12280)，侵删

```

如上图中的[木兰模型](#mulan-model)所示，bug4dfldata团队提供了一系列的**ICE**算法，从其结果图来看确实有不错的效果。

## 换脸的近期情况

然而，从另一方面来说，DFL已经有两年没有重大更新了，这几天查看甚至仓库已经归档了，issue里足有500多个没有close的讨论。而FaceSwap则保持着每隔几个月还有一些更新的动作。

尽管在这期间在arXiv上时常有一些新的论文出来，不过公开了源代码的却寥寥无几，点名批评有些在摘要里说**Source code and weights will be publicly available**, 但实际上翻来翻去啥也没有的[^1]。我想这其中并不只是工程化的问题，因为再不济，把文中自己跑数据的source code放出来总还是可以的，也许他们真的只是想写论文，而没有想把乐趣分享给每一个人。

[^1]: 例如上周刚看见的*https://arxiv.org/abs/2312.10843v1*, 当然可能是我菜了没看见...如果朋友们找到了可以戳我一下。

目前而言，除了DFL和FaceSwap以外，DeepFakes, FaceShifter, SimSwap, HifiFace等有官方或非官方的可供使用的代码，值得一试。不过基本上打不过DFL。从我个人的浅薄经验来说，DFL能够制胜的原因很大程度来自它每一个细节都可以调试，所以用户可以从网上找到很好的模型，再站在巨人的肩膀上前进。比如一些很好的图像分割模型[^2]，可以相当精细的把眼睛，头发(甚至是很碎的碎发)，反光，小贴纸，甚至是半透明液体从脸上分割开来。然后换脸的时候只需要脸对脸更换，保证了脸部训练集的低噪声。另外DFL是“单人单模型”，在有大量优质数据的前提下结果肯定不错。有一些“通用大模型”的换脸，基本上基于3D重建技术，只需要一张照片就能换，上限相对来说较低。

[^2]: 通常叫做Xseg模型。

```{figure} ./1224/hififace.png
---
width: 80%
figclass: margin-caption
name: hifi_face_res
---
来自HifiFace的[一个非官方实现](https://github.com/maum-ai/hififace)中的结果。HifiFace是典型的“一图流”换脸。
```

## FaceFusion简介

FaceFusion实际上是Roop(也是一个换脸软件，我没用过)原班人马搞的，今年10月份前后，Roop突然宣布不干了，原因是“有内部成员发布了不当的视频但没有和团队交流，被认为是严重失信”，随后，FaceFusion又很快推出，让人不得不觉得这背后水很深。实际上，不管是Roop还是FaceFusion，都是一图流的换脸，一般来说，对新人小白比较友好。但是并非对高玩就毫无意义，我认为它对数据集缺少的补充效果是大于DFL的。

根据官方教程，成功安装好FaceFusion(Windows版本)之后，发现它提供了一个很不错的WebUI(网页用户界面)。

```{figure} ./1224/facefusion_web.png
---
width: 100%
figclass: margin-caption
name: ff_web
---
FaceFusion成功安装后的界面。
```

左边是相对重要的主选项，包括硬件选择(我只安装了CPU版本，但CUDA版本并不难搞)，模型选择，线程数等等。值得注意的是，它集成了不少现有的模型(比如前面提到的SimSwap)，从某种角度来说它做到了一种统一，也许某一天它能够把DFL的模型无缝衔接上去，那一天很多零散的生态可能就会像AI绘图一样联合起来的[^3]。

[^3]: 注意绘图的InPaint功能也可以通过LoRA模型换脸。

中间是主要的原参考图和将被替换的图。

右上角是结果预览。再下方是一些合成细节，主要涉及面部识别和合成模式。可以选择从哪个地方开始找面部，识别框大小，合成时边缘是否模糊等等。

不整那些花活，默认的就是坠吼的，我直接简单测试一下。输入是赵金麦在电视剧《开端》[^4]中的剧照，输出是一个360度无死角的3D建模人脸[^5]，表情丰富，适合做测试用。

[^4]: 这个电视剧确实好看，对我也有重要意义。
[^5]: 来自DFL论坛大佬无敌小金鱼的[基础模型库](https://dfldata.cc/forum.php?mod=viewthread&tid=4327)

初步一测，效果感觉不错，一图流技术独有的优势，原图赵金麦并不是仰头，因此没有鼻孔数据，但是合成图很好的重构了鼻孔。这一点胜DFL和Inpaint远矣。不过，注意左边的模型我选的是一个128\*128的面部模型，而一般的2k视频中人脸的大小有时也能到512\*512。这个模型的大小显然不够，尽管能够通过超分辨率提升一点，但肯定不如原生模型。FaceFusion提供了其他模型，如SimSwap模型有上至512分辨率的，不过效果欠佳。目前看来最好的还是官方模型**inswapper_128**。希望官方努力更新，早点提供“**FaceFusion inswapper XL**”[^6]

[^6]: 知名的画图软件Stable Diffusion在今年推出了大尺寸模型SD XL，效果非常给劲。

## 测试效果

话不多说，虽然已经说了很多。直接把对FaceFusion的测试结果放上来，大家一看便知。这里仍然是选取的赵金麦一张《开端》剧照做输入，输出使用的仍是上面提到的金鱼数据库。我会提出一些个人见解，仅供参考。

### 正常角度范围
```{subfigure} ABC|DEF|GHI
:gap: 6px
:name: facefusion_multiangle

![](./1224/swap_res/normal_range1.png)
![](./1224/swap_res/normal_range.png)
![](./1224/swap_res/normal_range2.png)
![](./1224/swap_res/normal_range3.png)
![](./1224/swap_res/normal_range4.png)
![](./1224/swap_res/normal_range5.png)
![](./1224/swap_res/normal_range6.png)
![](./1224/swap_res/normal_range7.png)
![](./1224/swap_res/normal_range8.png)

在正常角度范围内，FaceFusion表现不错。
```

如上图所示，使用一些正常范围内的角度[^7]替换，效果一般较好，左上角的眉毛处有时会有阴影，大概是因为做分割时没有很好的把刘海做区分，合成时两张脸有时候覆盖的不好。所以也可以侧面证明换脸工作流中，光是一环做的好不行，有木桶效应。不过FaceFusion看上去有大一统的念头，祝他们成功！

[^7]: 我的定义是眼睛鼻子之类的都能看得到。

### 极限角度

```{subfigure} AAB|AAC|DE.
:gap: 6px
:name: facefusion_extrem

![](./1224/swap_res/extrem_angle2.png)
![](./1224/swap_res/extrem_angle1.png)
![](./1224/swap_res/extrem_angle3.png)
![](./1224/swap_res/extrem_angle4.png)
![](./1224/swap_res/extrem_angle5.png)

极限角度下，FaceFusion表现普通。
```

我们总是期待基于3D重建技术的换脸能在极限角度下带来一些新的高度，但是可惜，大部分的出图是不能用的，有一张侧脸看似可用，但结果其实仍是睫毛长在了眼珠子上。

### 表情学习能力

```{subfigure} AB|CD|EF|GH|IJ|KL|MN|OP
:gap: 6px
:name: facefusion_emo
:subcaptions: below

![绷](./1224/swap_res/emotional1.jpg)
![](./1224/swap_res/emotional1.png)
![](./1224/swap_res/emotional2.jpg)
![急](./1224/swap_res/emotional2.png)
![乐](./1224/swap_res/emotional3.jpg)
![](./1224/swap_res/emotional3.png)
![](./1224/swap_res/emotional4.jpg)
![喜](./1224/swap_res/emotional4.png)
![怒](./1224/swap_res/emotional5.jpg)
![](./1224/swap_res/emotional5.png)
![](./1224/swap_res/emotional6.jpg)
![屑](./1224/swap_res/emotional6.png)
![盲](./1224/swap_res/emotional7.jpg)
![](./1224/swap_res/emotional7.png)
![](./1224/swap_res/emotional8.jpg)
![蔑](./1224/swap_res/emotional8.png)

形容词不够了，还是玩的梗太少。
```

表情上，不得不说学的还有两把刷子，强在嘴的学习能力上，该张张该闭闭，眼睛确实是难度最高的地方，虽然没有该张张该闭闭，但大致保持了这么个事。总体来说，表情学了个7成功力。

## 总结

总的来说，未来可期，因为毕竟看到了inswapper模型的潜力。未来搞个分辨率更高的“大”模型肯定是很有用的。现在呢，也有点小用。要知道这个项目如果不说在Roop上的积累，算是只迭代了不到半年，很不错了。

我更喜欢它这个WebUI框架，希望以后api能更广泛的开放。尽管现在也能魔改，把其他的模型接上来，不过当然还是等一手官方靠谱。

最后，官方文档过于简单了，开局一句 **Be aware, the installation needs technical skills and is not for beginners** 尽显高傲，再联想到FaceFusion的slogan和之前Roop的突然解散，不得不猜测团队leader有不同寻常的价值观和道德感。我对此表示担忧。希望以后他们有人能好好写文档，毕竟分享才能带来喜悦。就像我这篇Blog一样。

平安夜了，独自测试软件，略感寂寥。打游戏去，今晚瓦必上黄金。