专栏首页AI研习社刷爆朋友圈的 deepfakes 视频人物换脸是怎样炼成的?

刷爆朋友圈的 deepfakes 视频人物换脸是怎样炼成的?

最近,一个名叫deepfakes的技术火了,这是一个可以给视频人物换脸的技术。

这张图片源自雷神三预告片索尔大战浩克的片段,将索尔的脸替换为了Trump的,这个表情实在是......

当然,最令人害怕的是,这个技术火的原因不是恶搞,竟然是有人把明星的脸换到了某些不可描述的小电影的主角上:)而且推出了一个桌面应用,使得使用门槛进一步下降。

不过这不是我们今天讨论的话题(正经脸),我们在RussellCloud上复现了一个换脸的实例——尼古拉斯-凯奇和特朗普的换脸人生。这里我们会阅读一些项目的代码让增进对这个项目的技术了解。

模型部分

模型部分在model.py中,使用keras框架,这是一个类Auto-Encoder模型。具体的Encoder和Decoder设计代码如下:

def Encoder():
    input_ = Input( shape=IMAGE_SHAPE )
    x = input_
    x = conv( 128)(x)
    x = conv( 256)(x)
    x = conv( 512)(x)
    x = conv(1024)(x)
    x = Dense( ENCODER_DIM )( Flatten()(x) )
    x = Dense(4*4*1024)(x)
    x = Reshape((4,4,1024))(x)
    x = upscale(512)(x)
    return Model( input_, x )def Decoder():
    input_ = Input( shape=(8,8,512) )
    x = input_
    x = upscale(256)(x)
    x = upscale(128)(x)
    x = upscale( 64)(x)
    x = Conv2D( 3, kernel_size=5, padding='same', activation='sigmoid' )(x)
    return Model( input_, x )其定义的卷积(conv)层使用LeakyReLU函数激活:
def conv( filters ):
    def block(x):
        x = Conv2D( filters, kernel_size=5, strides=2, padding='same' )(x)
        x = LeakyReLU(0.1)(x)
        return x
    return block

还使用了一个低分辨率特征映射(upscale)层,这是一种类似解决超分辨率问题的亚像素卷积层(sub-pixel convolution layer)的层。这里一个upscal层包括子像素卷积层用LeakyReLU函数激活,再通过一层「像素洗牌」(pixel shuffle)。

def upscale( filters ):
    def block(x):
        x = Conv2D( filters*4, kernel_size=3, padding='same' )(x)
        x = LeakyReLU(0.1)(x)
        x = PixelShuffler()(x)
        return x
    return block

总体的大概模型图如下:

Auto Encoder模型

RussellCloud复现

复现前准备:

  • 注册 RussellCloud 账号(http://russellcloud.com/#register)

如果你没有邀请码,可以到RussellCloud社区发帖,每位注册的用户也有5枚邀请码。

RussellCloud社区:本站新帖 - RussellCloud - Powered by phpwind

(http://forum.russellcloud.com/)

  • 安装 russell-cli 终端工具
  • Clone 项目文件,Git地址RussellCloud/deepfakes_faceswap (https://github.com/RussellCloud/deepfakes_faceswap)
# clone代码$ git clone https://github.com/RussellCloud/deepfakes_faceswap

使用命令行登录:

# 使用russell login命令$ russell login

输入y,网页登录后在网页端拷贝账户的Token,粘贴进终端,回车。如果你使用Windows的命令行,可能会出现粘贴不进的情况,请右键窗口粘贴。

成功登录输出:

Login Successful as XXX

新建项目:

来到RussellCloud主页,进入控制台,新建一个项目。项目名随便起一个,默认容器环境一定要选择:tensorflow-1.4 。

网页创建项目

初始化项目:

项目创建完成后记得在项目主页复制概览ID,用于项目初始化。

# 绑定远程项目,此处<project_id>是在网页上复制的项目概览 ID$ russell init --id <project_id>

初始化成功输出:

Project "XXX" initialized in current directory

运行项目:

# 一句命令挂载我们准备好的数据集,运行此项目$ russell run --data f3fadfadf6ac417e9f20813603187344:data "python run.py"

成功运行提示

一分钟以后就可以在该项目的网页端检查输出啦!

网页任务页查看输出

小记

最后我们可以看到很多经过转化的图像:

三个效果还不错的输出例子

不过可能会有人觉得:你这个图片中间为啥这么模糊呢,感觉很影响效果。如果你看代码的话可以知道我们的AutoEncoder是采集64*64的像素,我们的图片是256*256。我们训练及生成的时候都做了一个截取,把最中间的160*160的区域认定为脸部,将其压缩为64*64。

最终在生成的时候,我们生成的也是64*64的数据。为了显示出来,我们使用opencv变换为160*160替换原图中间的图像。低分辨率转换得来,所以中间的图像有些模糊。

换脸对比

换脸技术是有很多实现方法的,也许AutoEncoder并不是一个效果很好的方案。但我们看到我们实验的效果中的川普脸部还是比较显著的换上了凯奇的一些特征:眉毛变得颜色深一些,眼睛也睁的更大一点显得眼神比较柔和,还有鼻子和笑容都有所改变。

闲谈

换脸的应用早早就有,例如在速度与激情7拍摄中,保罗沃克遭遇车祸使得未完成的拍摄无法由他本人完成。所以最后是替换替身演员的脸部图像最终完成的拍摄(据说渲染所花费的美金高达5000万)。在国内比较知名的还有:

真是难为后期了~

而深度学习使得我们用这些技术的门槛大大下降——相比于5000万美金,你可能只需要一台有可以计算深度学习的显卡的工作站以及足够的时间就可以完成。

但是科技的进步还是会给我们带来一些担忧。在换脸技术上,如果人人能够使用,那就可以低成本制作各种假视频。

我们都知道视频在当前社交媒体下极快的传播速度,“朋友圈”流通的各种小视频非常火爆。如果利用这个技术低门槛地制作低成本假视频,这可能会带来巨大的社会信任危机。你怎么看?

本文分享自微信公众号 - AI研习社(okweiwu),作者:魏鸿鑫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于模型可解释性的深入思考:从哪里来,到哪里去?

    AI 研习社:本文作者 Cody Marie Wild,不仅是一位机器学习领域的数据科学家(目前任职 phos 公司),在生活中还是名不折不扣的猫咪铲屎官,她钟...

    AI研习社
  • 机器学习经典算法优缺点总结

    决策树:判别模型,多分类与回归,正则化的极大似然估计 特点: 适用于小数据集,在进行逐步应答过程中,典型的决策树分析会使用分层变量或决策节点,例如,可将一个给定...

    AI研习社
  • 不可错过的TensorFlow工具包,内含8大算法,即去即用!

    这是来自谷歌的工程师Ashish Agarwal2017 TensorFlow开发者峰会在的演讲,主题是《ML Toolkit》。他认为TensorFlow 是...

    AI研习社
  • http性能测试点滴

    在服务上线之前,性能测试必不可少。本文主要介绍性能测试的流程,需要关注的指标,性能测试工具apache bench的使用,以及常见的坑。

    WeTest质量开放平台团队
  • http性能测试点滴

    原文链接:https://wetest.qq.com/lab/view/410.html

    WeTest质量开放平台团队
  • 从云原生看企业云的未来

    引语:云原生是一个不断丰富的理念和技术体系,它在基础架构、应用程序和管理上都将深刻的影响和改变企业云的未来!

    孙杰
  • 通用系统设计之优惠卷

    本应该继续连载手撸框架系列文章的。但最近有一个需求 -> 优惠卷,之前很多朋友让我出一篇优惠卷相关的文章。这不,本章应了大伙的愿。开始我自己的表演 ??

    CrazyCodes
  • vsan的容量设备故障和缓存设备故障分析

    引语:云原生是一个不断丰富的理念和技术体系,它在基础架构、应用程序和管理上都将深刻的影响和改变企业云的未来!

    孙杰
  • Eventbus3代码分析(六):SubscriberMethodFinder类

    这里,我们可以发现, 除了 构造 和 findSubscriberMethods方法 是 public对外的 其他,都是 private 的 也就是,我们...

    dodo_lihao
  • tensorflow学习笔记(四十二):输入流水线

    ensorflow 如何读取数据 tensorflow有三种把数据放入计算图中的方式: 通过feed_dict 通过文件名读取数据:一个输入流水线 在计算图的开...

    ke1th

扫码关注云+社区

领取腾讯云代金券