前言

前一阵子,就17年12月的时候,reddit上有一个用户用深度学习把神奇女侠的脸嫁接在了小电影上。当时引起了轰动,因为效果十分真实,令人震惊!

过了1个月不到,有人整合了所有工具,整出来了一个叫FakeApp,现在已经到了2.1.0的版本。

由于好奇原理,于是前往reddit一探究竟。

原理

首先先去观摩了一下reddit上的deepfakes的板块 传送门。 已经换上了明星的大量NSFW视频已经被人上传。
排在第一位的是deepfakeapp的post。也是fakeapp的介绍帖

简单看了一遍他的实现过程。原理十分简单。

假设我们要用B头像去替换A的

  • 收集A和B的照片
  • 使用神经网络(GAN)去学习识别和生成A和B的照片
  • 然后需要替换的视频使用FFMepg把所有的帧分离
  • 使用A的模型去标注和识别出所有的帧
  • 是用B去替换A的面部
  • 再用FFMepg把所有的帧合成

原理理解后,下面我们来开始做一下实验

准备工作

我们实验的目的是用川普去替换尼古拉斯凯奇的脸。

  • 硬件和平台环境
    • python + cuda 的环境。详情可以到这里看我的配置
    • 训练的磁盘需要 3-4 GB
  • 制作的原料
    • 由于准备图片的工作需要消耗大量的时间,这里直接使用reddit上已经整理出来的尼古拉斯凯奇和川普图片各300张。
    • 一段川普演讲的视频
    • fakeapp
    • ffmpeg

对=。= 就是那么简单,几百张图片就可以生成模型。但是这里有几个要素。下面再说。

实验步骤

文件路径

  • E:\face\ #总目录
    • E:\face\data_A\ #尼古拉斯的头像
    • E:\face\data_B\ #川普的头像
    • E:\face\model\ #生成模型的地方
    • E:\20out.mp4 #要替换的视频

获取图片文件

这里fakeapp可以帮你把视频文件分解成一张张图片给你去截取头像。也就是说可以通过两个人的视频直接截取头像来进行生成,这样效果最好,因为训练和输出的数据集是一样的 。
但是因为我们替换的是名人,我们选择一种更为通用的办法,就是把两个人多角度的直接进行训练。

训练模型

  • 点击fakeapp 选择 TRAIN的按钮
  • 依次输入model,Data A 和 Data B的路径
  • 这里的设置可以选合适自己的
    • 由于是祖传的970 这里选的Batch size是64 和 Save Period是100. =。= 几乎和我上次的跳一跳设置一致。 T T 显存不够的悲剧。
    • 当然你也可以选择只用CPU来训练,但是就是非常慢。
  • 点击Train即可开始。

经过漫长的等待之后(我的环境是12个多小时)。Loss到了0.03左右,依次变化的情况,

刚开始,非常模糊只有轮廓

面部特征慢慢凸显,但是没看到明显的转变

面部特征非常明显,出现了完美换脸的情况

经过了12个小时的训练 lost到了0.3。大部分的脸都已经比较完美的替换了。

这里我们按下Q,停止训练。

生成视频

这里的视频是随便下载的一个尼古拉斯的视频,为了实验直接剪辑了10秒左右。

  • 点击Create的选项,输入模型位置,输入视频的位置,FPS选30(默认就是30)
  • 这里需要经历4个阶段
    • frames split [使用ffmepg把视频分成帧]
    • frames aligned [把每一帧的川普的面部位置识别并且裁剪出来]
    • frames converted [把裁剪后的帧替换成尼古拉斯凯奇合并到原帧上]
    • frames merged [把所有图片合并成视频]

生成结果

从开始到现在花了12个多小时的时间,效果如下

原视频

5个小时的结果

12个小时的结果

川普的面部特征基本替换成功。但是两人的毛发相差过大,看起来替换的痕迹还是很明显。

危害

只是随意300张图+12个小时就可以替换生成比较形似的视频,如果使用稍微高级一点的设备,花更长的时间训练模型,则人物的换脸程度更加逼真。(reddit上有一部生成了2个小时的视频,看下来感觉和真人演的差不多。别问我为啥知道...自己去看。)

那么如果用的是你平时的照片去生成一些恶意视频

  • 不可描述的小视频
  • 解锁你的设备:电脑,手机等
  • 解锁你的软件:支付宝,微信等
  • 通过视频直接欺骗你的父母,朋友等骗取财物

那么后果将不可设想。
所以,如果你现在还在社交网络上发照片的话!!请务必确保安全性。

  • 最好通过一些美化软件添加一点特效,遮盖眼睛,鼻子等部位,使得脸部特征减少。
  • 带点装饰品,比如帽子或者用手比V去遮挡等等

对于社交平台来说,

  • 为用户的照片添加细微的噪点用于干扰设别模型(不过这并不管用=。=,通过截图的等方式会直接去掉小噪点)
  • 防止恶意批量采集

后续的研究

  • 采集照片的方式。实验是用了300张图,但是reddit上完全仿真的用了700张甚至是更多是生成模型,个人觉得是采集方式的问题,比如一个人的脸部,斜着,侧着,正着,仰着,只要采集到360度旋转各个方向的照片,再加上明暗度,应该就可以生成一个人的模型了,不过具体还在实验,实验器材比较差,实验一次=。= 花太久时间了。

  • reddit有人提出用GAB的这个替换现在的算法会有更高效率 https://github.com/shaoanlu/faceswap-GAN 打算尝试这个自己编写生成部分

  • fakeapp的合成部分的参数设置有点问题。正和fakeapp的作者沟通。

  • 尝试直接通过摄像头去捕抓人脸用模型去替换,去绕过一些APP的认证。

最后

所以,看到这里,你还敢在社交平台上发自拍吗?

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖

先知社区


热门节点

TOC目录