基于生成对抗网络(GAN)的人脸变形(附链接) | CSDN博文精选
扫码参与CSDN“原力计划”
翻译 | 张一豪
校对 | 吴金笛
来源 | 数据派THU
*点击阅读原文,查看「CSDN原力计划」详细说明。
本文详细介绍了生成对抗网络(GAN)的知识,并用其变换人脸,并探寻如何利用StyleGAN生成不同属性(如年龄、微笑等)的人脸。
概述
直到最近,我才开始探索深度学习的全部内容,并在计算机视觉中遇到了这些有趣的想法和项目。
即使我的知识和经验有限,我也希望这可以帮助其他一些初学者对该领域产生兴趣并尝试一些令人兴奋的新事物。
我找到一个非常棒的YouTube频道,叫做Arxiv Insights(或者简称AI,这是个巧合吗?我看不是)。在这个频道,我发现其中一个视频是相当有趣的:如何使用生成对抗网络对人脸变形!本文是对我从上述视频中学到的知识的总结,我希望到结束时您对这个想法有一个很好的了解,并且可能想自己尝试一下。
上图中的人在现实生活中并不存在,他们是计算机生成的。朋友们,那就是GAN的力量。果这引起了您的注意,请继续阅读以了解更多信息。
第一部分:GAN是什么
GAN有一个非常简单的任务要做,就是从头开始生成数据,而这种数据甚至可以欺骗人类。
该模型由Ian Goodfellow及其同事于2014年发明,由两个神经网络组成(生成器和判别器),它们相互竞争,从而产生了一些真实的内容。
使用两个网络的目的可以概括为尽可能多地学习输入数据的基础结构,并利用该知识来创建相似的内容,该内容拟合了所有参数以适应同一类别。
如上所示,输入的是人脸,GAN准确地学习到怎样生成人脸或人。利用这种理解,它会生成随机的人脸,这些人脸也可能是真实的。
让我们详细了解一下:
GAN的基本结构
这张图是简化后的GAN模型结构,但它捕获了该概念的完整本质。
这是在GAN的一次迭代中发生的情况:
1. 生成器
生成器将随机噪声矢量作为输入;
生成器将执行多次转置卷积,以对噪声进行上采样,最终生成图像。
2. 判别器
它从现实世界样本(真实样本)或生成的图像样本(假样本)中获取随机输入;
顾名思义,判别器只干一件事:判别输入的“真是样本”还是“假样本”。
作为用户,我们知道它是来自真实样本还是伪造样本,并利用此知识使用反向传播(BP)训练损失,以使判别器更好地完成其工作。
但是众所周知,生成器也是神经网络,因此我们可以一直传播到随机样本噪声,从而帮助生成器生成更好的图像。这样,判别器和生成器都可以使用相同的损失函数。
诀窍在于在训练过程中平衡这两个网络。如果做得正确,判别器将学会区分即使是很小的异常,同时发生器将学会产生最真实的输出。
对GAN工作原理的技术理解:
生成器和判别器处于最小-最大博弈中。
生成器试图最小化真实图像和伪图像之间的差距,以欺骗判别器;
判别器试图最大化对真实图像的理解,以便区分假样本。
在上面的图像中,D(x)只是图像为“真实样本”的概率。
这里有另一个函数G(z)是生成器的输出,z是随机隐变量输入。生成“真实样本”的概率由判别器D(G(z))计算得。
对于判别器,我们希望:
正确识别实样本图像,因此D(x)必须接近1;
同时,同样正确识别假图像,因此D(G(Z))必须接近1。
对于生成器:
生成器与D(x)的准确度无关,只有D(G(z))必须被标识为真实样本,因此其必须尽可能接近1。
GAN的目标函数
只有当两个网络之间取得很好的平衡,这种损失函数才是GAN体系结构的基础,我们才能获得高性能的生成器和判别器。
对于那些对详细了解GAN感兴趣的人:
这是Ian Goodfellow的原始论文链接。
https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf
这是“GAN-GAN系列(从开始到结束)”—— 由Jonathan Hui撰写可以深入了解GAN及其应用的最佳资料之一。
https://medium.com/@jonathan_hui/gan-gan-series-2d279f906e7b
第二部分:有趣部分
该模型背后的原理:
训练完生成器后,其隐变量已充分了解了数据集的底层结构。
在我们的示例中,我们将使用的模型已经了解了人脸的结构。该模型是由NVIDIA研究人员开发的StyleGAN。
https://en.wikipedia.org/wiki/StyleGAN
我们的目标是利用这种结构并操纵它生成有趣的东西。
您应该知道,在像素域中处理图像非常繁琐且困难,因此,我们将在隐向量中处理图像。
然后,我们的第一个障碍来到了,怎么做?对于任何给定的图像,我们能否始终找到该图像对应的潜向量?正如下图所示:
流程:
对于我们的第一个障碍,以下解决方案最有效:
通过生成器生成随机面孔;
使用这些图像作为数据集,训练ResNet从源图像到其潜在的矢量代码(初步估计值);
我们将使用经过预训练的ResNet,可以找到查询图像的潜代码(粗略估算);
然后,以该图像为起点,计算与“原始图像”的L2损失,并相应地更新隐矢量代码(同时固定发生器本身的权重)。
这是第二部分的视频——更新估计的隐代码
在视频的后半部分,由于隐代码估计收敛到查询的真实图像的代码,因此更新很难观察到。
第三部分. 时间变形
好吧,也许不是这个。
计划:
我们需要另一个数据集,然后再次生成随机面孔数据库。
我们应用预训练的属性分类器来获取诸如“性别”,“年龄”,“微笑”等属性。
这样做是为了让我们可以将潜在代码映射到图像属性以找到相应的模式。
我们需要了解,StyleGAN的潜在空间是一个高度复杂的512维空间。
StyleGAN的隐空间
在这里,每个点都代表一张图片,我们需要在该空间中找到一个图案。例如,在该空间中沿某个方向移动将如何更改生成的图像?
可以观察到,在隐空间中,这些属性可以很容易地通过“线性超平面”来分离。
沿该平面取法线将为我们提供改变该属性的方向。
最后,我想展示另一个示例,我更改了Emma Watson图像的“ age”属性。
这是我尝试过的GitHub存储库的链接,视频是其实际输出。
https://github.com/rudraina/Face-Morph
再次感谢Arxiv Insight涵盖了如此有趣的话题。
https://github.com/rudraina/Face-Morph
加油,大家可以自己尝试一下。
原文标题:
Face-Morphing using Generative Adversarial Network(GAN)
原文链接:
https://medium.com/swlh/face-morphing-using-generative-adversarial-network-gan-c751bba45095
编辑:王菁
校对:林亦霖
技术的道路一个人走着极为艰难?
一身的本领得不施展?
优质的文章得不到曝光?
别担心,
即刻起,CSDN 将为你带来创新创造创变展现的大舞台,
扫描下方二维码,欢迎加入 CSDN 「原力计划」!
(*本文为AI科技大本营转载文章,转载请联系作者)
◆
精彩推荐
◆
开幕倒计时9天|2019 中国大数据技术大会(BDTC)即将震撼来袭!豪华主席阵容及百位技术专家齐聚,十余场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读。6.6 折票限时特惠(立减1400元),学生票仅 599 元!
推荐阅读
通俗易懂:8大步骤图解注意力机制
神龙飞天,国士王坚
迁移学习与图神经网络“合力”模型:用DoT-GNN克服组重识别难题
15篇论文全面概览BERT压缩方法
2097352GB地图数据,AI技术酷炫渲染,《微软飞行模拟器》游戏即将上线
用Go重构C语言系统,这个抗住春晚红包的百度转发引擎承接了万亿流量
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
华为电脑终于又能搭载正版 Windows 系统了!
网易患病员工被保安赶出公司,程序员该如何应对中年危机?
看完这篇还不了解Nginx,那我就哭了!
你点的每个“在看”,我都认真当成了AI
相关文章:

Jmeter连接Oracle数据库
一、Jmeter要连接oracle数据库,就必须复制JDBC驱动jar包文件ojdbc14.jar到Jmeter的lib目录下二、进入Jmeter的bin目录运行Jmeter.bat,启动Jmeter三、Jmeter软件配置如下:1、添加线程组右击线程组,选择“添加--配置元件--JDBC Conn…

swift3.0友盟分享
经过(一)的讲解,大家应该可以按照友盟提供的测试账号可以集成友盟分享了,友盟目前集合了18个APP共27种分享,可以授权的有10个App:微信、QQ、新浪微博、腾讯微博、人人网、豆瓣、Facebook、Twitter、Linkedi…

C++11中std::future的使用
C11中的std::future是一个模板类。std::future提供了一种用于访问异步操作结果的机制。std::future所引用的共享状态不能与任何其它异步返回的对象共享(与std::shared_future相反)( std::future references shared state that is not shared with any other asynchronous retur…
给算法工程师和研究员的「霸王餐」| 附招聘信息
现在的算法工程师真的是太难了!要让AI会看人眼都分辨不清的医疗影像!数据又不够,还得用前沿技术!好不容易学会看片,还要让AI会分析病理!然后模型搞出来了,还要把几十种模型,做N次计算…

swift3.0三种反向传值
一 :通知 1.通知传值所用方法 // MARK: - private methods(内部接口) let NotifMycation NSNotification.Name(rawValue:"MyNSNotification") func tempbuttonAction() { //这个方法可以传一个值 NotificationCenter.default.post(name: NotifMycation, object: &q…

C++11中std::shared_future的使用
C11中的std::shared_future是个模板类。与std::future类似,std::shared_future提供了一种访问异步操作结果的机制;不同于std::future,std::shared_future允许多个线程等待同一个共享状态;不同于std::future仅支持移动操作…
聊聊抖音、奈飞、Twitch、大疆、快手、B站的多媒体关键技术
随着5G牌照发放,5G终端正在迎来集中上市潮,对于5G带来的变革一触即发。目前互联网上超过七成的流量来自多媒体,未来这个比例将超过八成。音视频就像空气和水一样普及,深度到每个人的生活和工作中。同时,深度学习技术则…

Linux安全事件应急响应排查方法总结
Linux安全事件应急响应排查方法总结 Linux是服务器操作系统中最常用的操作系统,因为其拥有高性能、高扩展性、高安全性,受到了越来越多的运维人员追捧。但是针对Linux服务器操作系统的安全事件也非常多的。攻击方式主要是弱口令攻击、远程溢出攻击及其他…

C++11中std::packaged_task的使用
C11中的std::packaged_task是个模板类。std::packaged_task包装任何可调用目标(函数、lambda表达式、bind表达式、函数对象)以便它可以被异步调用。它的返回值或抛出的异常被存储于能通过std::future对象访问的共享状态中。 std::packaged_task类似于std::function,…

Swift3.0和OC桥接方法
1.直接在工程中commandn,出现如图,点击Header File创建桥接文件Bridging-Header.h,如图: 2.点击next,出现如图画面,一定要记得勾选第一项,再点击create创建完成。 3.配置桥接文件,点击target - …

量子算命,在线掷筊:一个IBM量子云计算机的应用实践,代码都有了
整理 | Jane 出品| AI科技大本营(ID:rgznai100) “算命”,古今中外,亘古不衰的一门学问,哪怕到了今天,大家对算命占卜都抱着一些”敬畏“的信任心理,西方流行塔罗牌,国…

rails应用ajax之二:使用rails自身支持
考虑另一种情况: 1. 页面上半部分显示当前的所有用户,页面下半部分是输入新用户的界面; 2. 每当输入新用户时,页面上半部分会动态更新新加用户的内容; 我们还是用ajax实现,不过这次用rails内部对ajax的支持…

C++11中std::async的使用
C11中的std::async是个模板函数。std::async异步调用函数,在某个时候以Args作为参数(可变长参数)调用Fn,无需等待Fn执行完成就可返回,返回结果是个std::future对象。Fn返回的值可通过std::future对象的get成员函数获取。一旦完成Fn的执行&…
BAT数据披露:缺人!110万AI人才缺口,两者矛盾,凉凉了!
人工智能到底有多火?近日国内首份《BAT人工智能领域人才发展报告》新鲜出炉,此次报告是针对国内人工智能领域的人才争夺情况进行了梳理。并把研究对象锁定在BAT三大巨头的身上。来源:《BAT人工智能领域人才发展报告》其中得出最为核心的结论&…

swift3.0最新拨打电话方法
let alertVC : UIAlertController UIAlertController.init(title: "是否拨打报警电话:10086", message: "", preferredStyle: .alert) let falseAA : UIAlertAction UIAlertAction.init(title: "取消", style: .cancel, handler: nil) let tr…

关于手机已处理里重复单据的处理办法
更新视图 VWFE_TASK去掉 union TWFE_TASK_BAK 的部分,原因是因为后面做了流程预演导致的问题转载于:https://blog.51cto.com/iderun/1602828

swiftswift3.0自己封装的快速构建页面的方法
//#param mark 控件 func creatLabel(frame:CGRect,text:String,textColor:UIColor,textFont:CGFloat,textAlignment:NSTextAlignment) -> UILabel { let label UILabel.init(frame: frame) label.text text label.textColor textColor label.font UIFont.systemFont(of…
Google是如何做Code Review的?| CSDN原力计划
作者 | 帅昕 xindoo 编辑 | 屠敏出品 | CSDN 博客我和几个小伙伴一起翻译了Google前一段时间放出来的Google’s Engineering Practices documentation(https://github.com/google/eng-practices),翻译后的GitHub仓库:https://gith…

从FFmpeg 4. 2源码中提取dshow mjpeg code步骤
之前在https://blog.csdn.net/fengbingchun/article/details/103735560 中介绍过在Windows上通过vs2017编译FFmpeg源码进行单步调试的步骤,为了进一步熟悉FFmpeg这里以提取FFmpeg dshow mjpeg源码为例介绍其实现过程及注意事项: FFmpeg是用C实现的&…

ControlButton按钮事件
#ifndef __HControlButton_H__#define __HControlButton_H__#include "cocos2d.h"#include "cocos-ext.h"USING_NS_CC;USING_NS_CC_EXT; //用于标识当前按钮的状态typedef enum{ touch_begin, touch_down, touch_up,}tagForTouch;class HControlB…

swift3.0UIAlertController使用方法
let alertVC : UIAlertController UIAlertController.init(title: "添加照片", message: "", preferredStyle: .actionSheet) let cleanAction UIAlertAction(title: "取消", style: UIAlertActionStyle.cancel,handler:nil) let photoActi…

Doxygen使用介绍
Doxygen的主页为http://doxygen.nl/,它的license为GPL,最新发布版本为1.8.17,源代码存放在https://github.com/doxygen/doxygen,它支持的语言包括C、C、Objective-C、C#、Java、Python等,它支持的系统平台包括Winodws、…
云计算软件生态圈:摸到一把大牌
作者 | 老姜编辑 | 阿秃出品 | CSDN云计算(ID:CSDNcloud)“我觉得我摸着了一把大牌。”软件领域的新锐企业——有赞公司创始人兼CEO白鸦在转向SaaS领域的一个细分市场时,曾对天使投资人这样说。而老牌软件企业金蝶创始人徐少春在2…

iOS封装HTTPS双向和单向验证
1.HttpsUtil (1) 对双向和单向验证的封装 #import <Foundation/Foundation.h> #import "AFNetworking.h" interface HttpsUtil : NSObject // 双向认证 (void)configHTTPSessionManager:(AFHTTPSessionManager *)manager serverCers:(NSArray *) serverCerNam…

开源库BearSSL介绍及使用
BearSSL是用C语言实现的SSL/TLS协议,它的源码可直接通过git clone https://www.bearssl.org/git/BearSSL 下载,它的license是MIT,最新版本为0.6。 BearSSL的主要特性是: (1). 正确且安全:对不安全的协议版本和算法选…
个推CTO安森:我所理解的数据中台
作者 | 个推CTO安森来源 | 个推技术学院(ID:ID: getuitech)引言在前面两篇文章(《数据智能时代来临:本质及技术体系要求》和《多维度分析系统的选型方法》)之中,我们概括性地阐述了对于数据智能的理解&…

玩弹珠手游-杂想
前言 为什么会写这个杂想呢? 因为最近这一个月来,我有点太沉迷怪物弹珠这个游戏了,每天下班回来的时间和上下班路途都在玩这个游戏,占据了我大部分的业余时间,也该是时候放一放玩游戏了。 为什么会玩这个游戏呢&#x…

OC封装时间选择器
#import <UIKit/UIKit.h> protocol TimeDatePickerViewDelegate <NSObject> //必须实现的两个协议 required - (void)changeTime : (NSDate *)date;//当时改变时出发 - (void)daterMine : (NSDate *)date;//更确定时间 end interface TimeDatePickerView :UIView /…
银行卡大小的充电宝,买就送耳机!
每个人的朋友圈和微博上似乎都有那么几个活得让人羡慕的朋友他们的生活看起来不仅精致,还很丰富多彩从早上第一刻就开始了↓出门旅游新一天的穿搭逆天朋友团咖啡馆到书店逼格十足的日料夜景太迷人忍不住发个小视频最后一定不要错过傍晚的夕阳,真的好上镜…