发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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

——使用 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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-09-09 14:533429
用户头像

发布了 138 篇内容, 共 73.4 次阅读, 收获喜欢 190 次。

关注

评论

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

模块一:课后作业

iHai

架构实战营

空中交警:借你一双“慧眼”,让你看透这飞机的“黑色十分钟”

华为云开发者联盟

modelarts yolo 华为云ModelArts 模型开发 华为开发者大会2021

区块链农产品溯源平台,为农产品质量安全护航

13828808769

区块链 区块链+

善盾SD币是什么?

飞亚科技

复杂度分析

奈奈奈奈

Java

Prometheus2.25新特性讲解

远鹏

Prometheus cncf openmetrics

架构实战营模块一作业

陈俊

架构实战营

手把手教你写一个spring IOC容器

华为云开发者联盟

spring 容器 ioc spring框架

花费一月时间吐血整理程序员必读书单,建议收藏

Silently9527

程序员

3w 字长文爆肝 Java 基础面试题!太顶了!!!

cxuan

Java 面试 后端

架构实战营 模块1作业

唐江

架构实战营

旋转木马案例

赫鲁小夫

4月日更

Rust从0到1-结构体-一个例子

rust struct

使用 lxrunoffline 管理运行wsl

模块一作业

chenmin

手摸手教你阅读和调试大型开源项目 ZooKeeper

HelloGitHub

Java zookeeper 源码分析 ZooKeeper原理

年薪百万是社会认同,更是自身价值体现

博文视点Broadview

初识Nginx(一)

书旅

nginx

智慧平安社区建设,创建“三零平安社区”

13530558032

区块链电子合同--助推合同数字化管理

13530558032

架构实战营 模块1 课后作业

༺NPE༻

Spark数据倾斜方案实战(二)

小舰

4月日更

盘点 15 个好用的 API 接口管理神器

Java小咖秀

工具 工具分享

python 调用 cmd 而不显示黑框的方法

一代咩神

Python cmd

Spring IOC 特性有哪些,不会读不懂源码!

小傅哥

Java spring 小傅哥 控制反转IOC

Golang 字符串分组

一代咩神

Go 语言

区块链产业园区服务平台开发,搭建区块链园区运营平台

13828808769

区块链+ #区块链#

模块一-学生管理系统架构设计

华仔架构训练营

架构实战营作业:模块一

心晴雨亦晴(~o~)

LeetCode题解:剑指 Offer 49. 丑数,二叉堆,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

马特量化交易机器人,炒币24小时不停歇

飞亚科技

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