写点什么

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

——使用 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:533858
用户头像

发布了 172 篇内容, 共 118.0 次阅读, 收获喜欢 211 次。

关注

评论

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

网络入侵检测系统之Suricata(七)--DDOS流量检测模型

于顾而言

网络安全 suricata

流计算中的Windows计算

孤衫

大数据 流计算 9月月更

DPDK源码分析之网络基础知识

于顾而言

网络协议 DPDK

网络入侵检测系统之Snort(一)--snort概览

于顾而言

网络安全 ips

【云原生 | 从零开始学Docker】七丶实战提交自己的镜像以及docker网络

泡泡

Docker 云计算 容器 云原生 9月月更

【指针内功修炼】深度剖析指针笔试题(三)

Albert Edison

C语言 9月月更 指针数组 数组指针

网络入侵检测系统之Suricata(一)--概览

于顾而言

网络安全 suricata

网络入侵检测系统之Suricata(十一)--TCP重组实现详解

于顾而言

网络安全 suricata

网络入侵检测系统之Suricata(十四)--匹配流程

于顾而言

网络安全 suricata

双活数据建设方案

阿泽🧸

双活 9月月更

网络入侵检测系统之Suricata(四)--初始化模块代码详解

于顾而言

网络安全 suricata

网络入侵检测系统之Suricata(六)--规则加载模块代码详解

于顾而言

网络安全 suricata

[Maven进阶]聚合和继承

十八岁讨厌编程

maven 后端开发 9月月更

网络入侵检测系统之Suricata(二)--运行模式及数据流图

于顾而言

网络安全 suricata

网络入侵检测系统之Suricata(五)--Worker Model线程调度详解详解

于顾而言

网络安全 suricata

网络入侵检测系统之Suricata(八)--Option实现详解

于顾而言

网络安全 suricata

[Maven进阶]属性与版本管理

十八岁讨厌编程

maven 后端开发 9月月更

DPDK源码分析之l2fwd

于顾而言

DPDK

网络入侵检测系统之Snort(三)--优劣势与性能指标

于顾而言

网络安全

【Meetup预告】OpenMLDB+37手游:一键查收实时特征计算场景案例及进阶使用攻略

第四范式开发者社区

机器学习 数据库 实时计算 特征平台 特征工程

【云原生 | 从零开始学Docker】六、如何写出自己的镜像——Docker file

泡泡

Docker 云计算 容器 云原生 9月月更

网络入侵检测系统之Suricata(十)--ICMP实现详解

于顾而言

网络安全 suricata

2022-09-17:一个字符串s,表示仓库的墙 与 货物,其中‘|‘表示墙,‘*‘表示货物。 给定一个起始下标start和一个终止下标end, 找出子串中 被墙包裹的货物 数量。 比如: s = “

福大大架构师每日一题

算法 福大大

网络入侵检测系统之Suricata(三)--日志代码详解

于顾而言

网络安全 suricata

[Maven进阶]多环境配置与应用

十八岁讨厌编程

maven 后端开发 9月月更

网络入侵检测系统之Suricata(九)--Storage实现详解

于顾而言

网络安全 suricata

二叉树的概念及三种遍历方法(C语言)

孤衫

后端 C语言 9月月更

网络入侵检测系统之Snort(二)--数据流图与环境搭建

于顾而言

网络安全 ips

网络入侵检测系统之Suricata(十二)--TCP重组优化

于顾而言

网络安全 suricata

网络入侵检测系统之Suricata(十三)--网络安全威胁及攻击手段总览

于顾而言

网络安全 suricata

网络入侵检测系统之Suricata(十五)--IPOnly/Radix Tree详解

于顾而言

网络安全 suricata

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