前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】用反卷积网络合成超逼真人脸:理解深度学习如何思考

【干货】用反卷积网络合成超逼真人脸:理解深度学习如何思考

作者头像
新智元
发布2018-03-23 17:57:34
1K0
发布2018-03-23 17:57:34
举报
文章被收录于专栏:新智元新智元

【新智元导读】本文中介绍的深度学习架构能够基于选定的人的身份、情绪和方位,生成真实的脸部图像。你只要给网络提供你希望描绘的东西的原始参数,模型就能完成,但是生成的结果却是十分有趣的。

网络本身看起来能学习3D空间的概念,以及它所描绘的物体结构。并且,由于它生成的是图像而不是数字,所以它也让我们更好地理解了这一网络是如何“思考”的。真正让人惊讶的是,它似乎在根据嘴部张开或者关闭来学习脸部特征,你能看到脸颊的移动、眼球的移动等等。未来,你可以使用这一模型来模拟复杂的表情和变化。

Flynn Michael:我最受欢迎的关于深度学习的一篇论文是《利用卷积网络合成椅子、桌子和汽车》(Learningto Generate Chairs, Tables, and Cars with Convolutional Networks)。它的概念非常简单——输入想让它合成的东西的参数,它就会照做——出来的结果非常有趣。这个网络看起来是它能自己学习有关3D空间的概念以及它要画的物体的结构,由于它要生成的是图像而不是数字,它能让我们对网络如何“思考”有一个更直观的理解。 合成椅子的视频

不久前我偶然发现了Radboud人脸数据库,于是想知道类似的技术能不能用于人脸的合成和修改。

结果相当的激动人心!

网络架构

我采用了椅子论文中“1s-S-deep”模块的一个版本。在这个网络中,输入有关椅子“风格”的重要编码和方向、相机位置等参数,经过几个全连接层,在交给反卷积网络前得到要画什么的表征,最后画出图像并预测分割掩膜。在合成人脸时,我们所做的事情相似,不过我们完全省略了分割网络(因为我们没有那些的人工标志),我们输入的是人的身份、情绪和方向参数。

图表:用于合成椅子的模型(来源:Dosovitskiy et al.)

这里的反卷积网络和其它语义分割或合成模块类似。它本质上是用于分类网络的典型运算的反转。通常卷积网络包含一些卷积层,跟着是用于减少输入维度的池化层(pooling layer)。对反卷积网络来说,我们要做反向操作——先是对输入进行反池化(a.k.a. unpooling),然后应用卷积运算。

为了说明这点,下图是Noh et al的论文中有关语义分割的反卷积网络的图示:

从本质上来说,当我们反池化时,就在画布网格上打上了一些点,然后利用卷积核当做画笔涂开这些点。

我基本上能够最大化地直接应用论文上的架构,但为了得到更高分辨率的图像,同时不耗尽CPU内存,我得用每层的卷积核数量,并使用 batch normalization,以确保 Leaky ReLU 的激活。该模型在建于Theano和TensorFlow的高层深度学习框架Keras上实现。

变脸

如你所见,这个网络能根据身份和情绪参数流畅、平滑地改变脸的形态。

这种变脸相当逼真,而且也不需要依赖人为的方法例如在每个例子间进行淡化。但真正令我惊奇的是,它似乎能以某种方式“学习”脸的特征——例如,嘴巴张开和闭合时,你会看到颧骨也在移动,同时眉毛也上下变化,等等。

我们也可以把它拆解开来,看看分别改变身份和情绪时,脸会怎样变动。

到目前为止,我放弃了研究“方向”参数对变脸的影响。很不幸,这个网络还没法学会根据方向变脸。这可能是因为数据集中可得的方向参数还不足以让网络形成对3D空间的理解(数据集里只有间隔45°的方向数据),不过它选了简单些的路径,学会了根据不同的方向画脸。

这个网络所做的非常有趣而且可视化,尤其是当它尝试画下它没见过的东西,例如人的后脑勺时。也许存在其它的方法能让这个网络创造出新的、完全不对头的,但仍然是非常有趣的图像。

使用“非法”输入

到目前为止,我们输入给网络的参数多少都算是“合法”的。使用的身份和情绪矢量都使用单位长度(即:身份/情绪的一致性混合的表征),方向也一直用有效的角度来表征。那么,假如我们打破这些规则,向网络里输入一些随机值,会有怎样的结果呢?

结果相当可怕:

由于不知道怎样解码无效的方向数值,以及要同时处理很多的身份和情绪数据,网络开始以离奇的方式把脸伸长、扭曲。

通过随机改变框架参数,我们也制作了这样一个动画:

很恐怖。

用部分训练的网络合成图像

最近,我们也能利用部分训练网络创作更有趣的图像。例如,下面是一些使用AdaGrad的部分训练网络制作的随机图像:

我非常感兴趣的是,不同优化器会画出怎样不同的图像,尤其是在训练的早期阶段。例如,使用随机倾斜度的部分训练网络所合成的图像,更像是一些抽象画,而非人脸。

我想用这些网络做更多测试,看看它们是如何学习合成图像,以及不同优化器的影响(以及为什么会如此),不过我会把这些留到以后的文章中。

本文的代码可以在这里得到:https://github.com/zo7/facegen

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新智元 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档