QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

如何用机器学习生成拟真人脸图片?

——使用 DCGAN 技术生成真实人脸

  • 2019-09-09
  • 本文字数:1748 字

    阅读完需:约 6 分钟

如何用机器学习生成拟真人脸图片?

本文中的用于生成虚拟人脸图片的机器学习网络是 Generative Adversarial Networks(GAN)生成对抗网络中的一个应用,Deep Convolutional Generative Adversarial Networks (DCGAN)深度卷积生成式对抗网络。



首先来看一个问题,以下这些面孔中,有哪些是真实存在的?



他们是真的吗?


答案将在文末揭晓,首先先让我们看看如何利用对抗网络生成的虚拟人脸。


深度卷积生成式对抗网络(DCGANs)


作者另一篇文章,利用对抗网络完成卡通图片生成,包含了对抗网络 GAN 的一些基本知识,方便初学者查看。作者同时将这个研究项目分享到了GitHub,以及可以云端运行的Kaggle


本文中提到的人脸图片生成与卡通图片生成技术都是依据 Redford 等人在 2015 年发布的论文《深度卷积生成网络的无监管学习》。具体模型大致如下



作为机器学习过程中重要的一环,原始数据集,作者选用了CelebA中真实明星照片,并进一步进行裁剪加工为 128x128 大小、仅留下人脸部分的照片。


这项实验研究的目的可以描述为,通过机器学习的不断训练,使生成器与判别器形成一种类似“竞争”的关系,两个网络互相抗衡损失,最终到达一个完美的平衡点。那么对于下列损失函数来说,这样的平衡点在哪里呢?


def model_loss(input_real, input_z, output_channel_dim):    g_model = generator(input_z, output_channel_dim, True)
noisy_input_real = input_real + tf.random_normal(shape=tf.shape(input_real), mean=0.0, stddev=random.uniform(0.0, 0.1), dtype=tf.float32) d_model_real, d_logits_real = discriminator(noisy_input_real, reuse=False) d_model_fake, d_logits_fake = discriminator(g_model, reuse=True) d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real, labels=tf.ones_like(d_model_real)*random.uniform(0.9, 1.0))) d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.zeros_like(d_model_fake))) d_loss = tf.reduce_mean(0.5 * (d_loss_real + d_loss_fake)) g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.ones_like(d_model_fake))) return d_loss, g_loss
复制代码


在理想的状态下,最终的均衡状态应满足:


  1. 生成的样本图像最够真实并且接近于真实图像分布。

  2. 判别器收敛到 0.5-50%的正确率使得判别器分辨不出样本是生成的还是真实的。

  3. 生成器收敛到 1.0-100%的正确率使得所有生成图片都足够真实,可以骗过判定器。


训练过程


根据最终状态可以得出以下的超参数:


DATASET_SIZE = 100000IMAGE_SIZE = 128NOISE_SIZE = 100LR_D = 0.00004LR_G = 0.0002BATCH_SIZE = 64EPOCHS = 60BETA1 = 0.5WEIGHT_INIT_STDDEV = 0.02EPSILON = 0.00005
复制代码


经过 60 个训练周期后,最终损失情况如下:



训练结果并不完美,但是依然可以看出判别器的损失接近于 0.5,而生成器的损失平均接近于 1.0,并且,随着训练周期的增加,生成的样本图片质量也有显著的提高。这 60 个训练周期是在特斯拉 K80 GPU(Kaggle 云端)上进行的,总共运行时长约为 100 小时。


结论


最终生成的的高保真的样本图片如下,



大部分的人脸看起来拟真度都相当的高,只有一少部分显得有些畸形,在眼镜等一些细节上也有些瑕疵,但总体来说,在考虑训练过程中资源有限的情况下,它的表现还是非常令人满意的。


展望未来


通过这个人脸生成的研究项目,可以证明使用生成对抗网络生成逼真的人脸图片是绝对有可能的。即使是在这种训练资源有限的情况下,还是可以生成足以以假乱真的图片。那么在更大、更先进的研究实验室里,完全可以生成质量更高、分辨率更清晰的图片。


题外话,科技的发展让这些拟真度非常高的虚假人脸生成更加容易,在面对这些面孔的时候我们也应该抱有更高的警戒心。


回到文初的问题,这几张图片全部都是由尖端科技 StyleGAN 生成的虚假照片。


原文链接:


Face Generator - Generating Artificial Faces with Machine Learning


2019-09-09 14:533823
用户头像

发布了 171 篇内容, 共 115.6 次阅读, 收获喜欢 210 次。

关注

评论

发布
暂无评论
发现更多内容

“InfoQ 的朋友们-Geek青年说·北京站”即将开讲,快来!

InfoQ写作社区官方

GEEK 话题讨论 InfoQ 的朋友们 热门活动

ARST- 日常打卡 4

pjw

成长

ES_her0

5月日更

背靠背,脸对脸

zhoo299

随笔杂谈 5月日更

狗尾续貂之Neutron网络部署架构的第N+1种方式

焱融科技

容器 云原生 高性能 部署 网络架构

综资全生命周期管理助力网络运营更高效

鲸品堂

软件开发生命周期 应用 资源管理

程序员的基础技能

风翱

程序员 5月日更 基础技能

5分钟速读之Rust权威指南(一)

wzx

rust

Crontab 的特殊字符

耳东@Erdong

Linux crontab linux运维 5月日更

Hive改表结构的两个坑|避坑指南

数据社

大数据 hive 面试 5月日更

Dubbo 事件通知

青年IT男

dubbo

Stacking集成学习算法

容光

《2021中国开源发展蓝皮书》发布——中国开源接近世界先进水平

禅道项目管理

开源 开发 报告

如何让网络音频或本地音频文件发布到频道中

anyRTC开发者

音视频 WebRTC RTC sdk

生态十年,禾之三变

脑极体

灵隐寺也没能拯救的“爱情”

徐说科技

爱情 情感 初恋

网络攻防学习笔记 Day13

穿过生命散发芬芳

5月日更 网络攻防

学习笔记:03 | 判断与循环:给你的程序加上处理逻辑

Nydia

学习

数据

顿晓

数据 5月日更

区块链将开启新一轮颠覆式创新

CECBC

区块链

PaaS容器化部署思考

lenka

5月日更

职场中低调的老实人,该如何表现自己的亮点

小天同学

成长 职场成长 工作体会 5月日更

浅谈实时语音质量监控系统

攻城先森

音视频 nlp 实时语音 引航计划

“新内容 新交互”全球视频云创新挑战赛复赛启幕

阿里云CloudImagine

音视频

有道技术沙龙 | JAVA下午茶

有道技术团队

Java

Python 分支结构详解

若尘

分支 Python编程 5月日更

谈谈“鸡娃”现象

石云升

教育 5月日更

路上,小胖问我:Redis 主从复制原理是怎样的?

一个优秀的废人

redis redis集群 主从复制

自动化下载文件(IE浏览器)

IT蜗壳-Tango

5月日更

Git命令: add、cherry pick

程序员架构进阶

git 自我提升 28天写作 5月日更 工作流程

【音视频专题】音频质量评估方法那些事

Hanson

音视频

如何用机器学习生成拟真人脸图片?_AI&大模型_Greg Surma_InfoQ精选文章