深度卷积对抗生成网络(DCGAN)实战

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


生成式对抗网络(GANs)的概念在四年前由Ian
Goodfellow
创造。古德费洛(Goodfellow)认为鉴别器(Discriminator)是艺术评论家而相对的艺术家则是生成器(Generator),它们两个就组成了GAN。艺术评论家(Discriminator)看着一幅图像,试图确定它是真的还是伪造的。一个想欺骗艺术评论家的艺术家(Generator)试图制造一个看起来尽可能真实的伪造图像。这两种模式相互“战斗” ,鉴别器使用生成器的输出作为训练数据,并且生成器也可以从鉴别器获得反馈。在这个过程中,我们想要的模型正在变得更强大,GAN也可以基于一定数量的已知输入数据(在这种情况下是图像)生成新的复杂数据。
创建一个GAN可能听起来很困难,但,在本教程中,我们将使用TensorFlow来构建一个简单的能够生成人脸图像的GAN。
1.深度卷积对抗生成网络(DCGAN)的架构
在本教程中,我们不是试图模仿简单的数字数据,而是我们试图模仿一个图像,甚至它可以去欺骗一个人。生成器将随机生成的噪声向量作为输入数据,然后使用称为反卷积的技术将数据转换为图像。
鉴别器是经典的卷积神经网络,其分类真实和假图像。


我们将使用原来的非深度卷积生成对抗网络的无监督表示学习的DCGAN体系结构它由四个卷积层作为鉴别器,四个解卷积层(反卷积层)作为发生器。
2.创建
在GitHub上访问本教程的代码和Jupyter Notebook。所有的指令都在GitHub仓库的README文件中。一个帮手指令将自动为你下载CelebA数据集,让你快速启动并运行。在这个过程中一定要安装matplotlib才能看到真正的图像和另外一定要下载数据集。如果你不想自己安装它,存储库中将包含一个Docker映像。
3.CelebA数据集
CelebFaces数据集包含超过20万个名人图像,每个图像具有40个属性注释。由于我们只是想生成随机面的图像,所以我们将忽略注释。而且数据集包括超过10,000个不同的身份,这对我们的需要来说是最佳的。


不过,尽管如此我们也要定义一个批量生成的函数。这个函数将加载我们的图像,并根据我们稍后将要设置的批量大小给我们一个图像阵列。为了获得更好的效果,我们将裁剪图像,以便只显示脸部。我们还将图像归一化,使得它们的像素值在-0.5到+0.5的范围内。最后,我们打算将图像缩小到28x28。这困难会使我们失去了一些图像质量,但它大大减少了训练时间。
4.定义网络输入
在我们开始定义我们的两个网络之前,我们首先要定义我们的输入。我们这样做是为了不让杂乱的训练过程变得比现在更加混乱。在这里,我们只是简单地定义TensorFlow占位符,用于我们真实和虚假的图像输入以及为了保存我们的学习率的值。

    inputs_real = tf.placeholder(tf.float32, shape=(None, image_width, image_height, image_channels), name='input_real')
    inputs_z = tf.placeholder(tf.float32, (None, z_dim), name='input_z')
    learning_rate = tf.placeholder(tf.float32, name='learning_rate')

    return inputs_real, inputs_z, learning_rate

TensorFlow分配变量占位符特别容易。在完成这些之后,我们可以通过稍后指定一个Feed字典来使用我们网络中的占位符。
5.创建鉴别器网络(The discriminator network
接着,我们来创建我们最重要的网络。鉴别器是“艺术评论家”,试图区分真实和虚假的图像。简单地说,这是一个用于图像分类的卷积神经网络。如果你已经有了一些深度学习的经验,那么你有可能已经建立了一个非常类似于这个网络的网络。

定义这个网络时,我们要使用一个TensorFlow变量作用域。这有助于我们稍后的训练过程,所以我们可以重复使用我们鉴别器和发生器的变量名。

def discriminator(images, reuse=False):
    """
    Create the discriminator network
    """

    with tf.variable_scope('discriminator', reuse=reuse):
        # … the model

鉴别器网络由三个卷积层组成,相对于原始架构中的四个卷积层。我们将删除最后一层来简化模型。通过这种方式,训练会进行得更快,而且不会损失太多的质量。对于网络中的每一层,我们要进行卷积,然后我们还要进行批标准化,以使网络更快,更准确,接着,我们要进行Leaky RELU进一步加快训练。最后,我们将最后一层的输出变平,并使用sigmoid激活函数来获得分类。这样我们就会获得一个可以预测图像是否是真实的网络。
6.发生器网络(The generator network
发生器是以另一种方式存在于GAN中:试图欺骗鉴别器的是“艺术家”。发生器利用去卷积层(deconvolutional),它们与卷积图层完全相反:除了将图像转换为简单的数值数据(如分类)之外,我们还将执行反卷积以将数字数据转换为图像,而不是执行卷积。正如我们在设置鉴别器网络中所做的那样,我们也将其设置在一个可变范围内。

首先,我们接受我们的输入,称为Z,并将其输入到我们的第一个解卷积层。每个解卷积层执行解卷积,然后执行批量归一化和 Leaky ReLu。然后,我们返回tanh激活函数。
注意:先训练!
在我们真正开始训练过程之前,我们需要做一些其他的事情。首先,我们需要定义所有帮助我们计算损失的变量。其次,我们需要定义我们的优化功能。最后,我们将建立一个小函数来输出生成的图像,然后训练网络。
7.损失函数
我们需要定义三个损失函数,而不是仅具有单个损失函数:发生器的损失函数,使用真实图像时鉴别器的损失函数,以及使用假图像时鉴别器的损失函数。假图像和真实图像损失的总和理应是整体鉴别器损失。
首先,我们先定义我们对真实图像的损失。为此,我们在处理真实图像时要传递鉴别器的输出,并将其与标签全部进行比较。我们在这里使用一种称为标签平滑的技术,通过将0.9乘以1来帮助我们的网络更加准确。
然后,我们为我们的假图像定义损失。这次我们在处理伪造的图像时将鉴别器的输出传递给我们的标签,如果这些标签都是0,这意味着它们是假的。
最后,对于发生器定义损失器。
8.优化和可视化
在优化的步骤中,我们正在寻找所有可以通过使用tf.trainable_variables函数进行训练的变量。既然我们之前使用了变量作用域,我们可以非常舒适地检索这些变量。然后我们使用Adam优化器来帮助我们减少损失。

def model_opt(d_loss, g_loss, learning_rate, beta1):
    """
    Get optimization operations
    """
    t_vars = tf.trainable_variables()
    d_vars = [var for var in t_vars if var.name.startswith('discriminator')]
    g_vars = [var for var in t_vars if var.name.startswith('generator')]

在我们准备的最后一步中,我们将编写一个小段程序,使用matplotlib库在笔记本上显示生成的图像。
9.训练
我们正在进行我们的最后一步!现在,我们只获取我们之前定义的输入,损失和优化器,调用一个TensorFlow会话并运行批处理。每400一个批次,我们通过显示生成的图像和生成器以及鉴别器的损失来输出当前的进度。现在向后看,看到脸部缓缓而稳定地出现。根据你的设置,此进度可能需要一个小时或更长时间。

10.结论
恭喜你!你现在知道GAN做什么,甚至知道如何使用它们生成人脸图像。这只是GAN的冰山一角,GAN还有很多其他的应用。
例如:密歇根大学和德国马克斯普朗克研究所的研究人员使用GAN从文本中生成图像。根据论文描述,他们能够产生非常真实的花鸟。这可以扩展到一些其他领域,比如警察素描或者平面设计。伯克利的研究人员也设法创建了一个GAN,增强了模糊的图像,甚至重建了损坏的图像数据。
总之,GAN是非常强大的。

作者: Dominic Monn 

Dominic Monn目前是瑞士苏黎世NVIDIA公司的深度实习生

本文由北邮@爱可可-爱生活老师推荐,阿里云组织翻译。

文章原标题《Deep convolutional
generative adversarial networks with TensorFlow》,作者:Dominic Monn,译者:虎说八道,审阅:

文章为简译,更为详细的内容,请查看原文

时间: 2024-08-22 15:00:30

深度卷积对抗生成网络(DCGAN)实战的相关文章

【明星自动大变脸】最新StarGAN对抗生成网络实现多领域图像变换(附代码)

图像到图像转化的任务是将一个给定图像的特定方面改变到另一个方面,例如,将一个人的面部表情从微笑到皱眉改变(见图1).自从生成对抗网络(GANs)的引入,这个任务经历了很大的发展,从改变发色,改变边缘图以重建照片,到改变风景图像的季节等. 图1. 通过从RaFD数据集学习转移知识,从而应用到CelebA图像转化的多域的图像到图像转化结果.第一列和第六列显示输入图像,其余列是产生的StarGAN图像.注意,图像是由一个单一模型网络生成的,面部表情标签如生气.高兴.恐惧是从RaFD学习的,而不是来自C

看了这篇文章,了解深度卷积神经网络在目标检测中的进展

近些年来,深度卷积神经网络(DCNN)在图像分类和识别上取得了很显著的提高.回顾从 2014 到 2016 这两年多的时间,先后涌现出了 R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SDP-CRC, YOLO,G-CNN, SSD 等越来越快速和准确的目标检测方法. 1. 基于 Region Proposal 的方法 该类方法的基本思想是:先得到候选区域再对候选区域进行分类和边框回归.  1.1 R-CNN[1] R-CNN 是较早地将 DCNN

使用专用硬件加速深度卷积神经网络

英文论文链接:http://research.microsoft.com/apps/pubs/default.aspx?id=240715 翻译:卜居 转载请注明出处:http://blog.csdn.net/kkk584520/article/details/47711755 [摘要] 最近在多层卷积神经网络的突破导致了识别任务(如大量图片分类和自动语音识别)准确率的大幅提升[1].这些多层神经网络很大,很复杂,需要大量计算资源来训练和评估[2].然而这些需求发生在目前这样一个尴尬的时刻,商业

能帮你更好理解分析深度卷积神经网络,今天要解读的是一款新型可视化工具——CNNVis,看完就能用!

以下为译文: 更好的理解分析深度卷积神经网络   图1 CNNVis,一个能够帮助专家理解,分析与改进深度卷积神经网络的视觉分析工具 摘要:深度卷积神经网络(CNNs)在许多模式识别任务中取得了很大的性能突破, 然而高质量深度模型的发展依赖于大量的尝试,这是由于没有很好的理解深度模型是怎么工作的,在本文中,提出了一个可视化分析系统,CNNVis,帮助机器学习专家更好的理解.分析.设计深度卷积神经网络. 关键词:深度卷积神经网络,矩形填充,矩阵排序,边缘捆绑,双聚类 1 引言 深度卷积神经网络在许

深度卷积神经网络CNNs的多GPU并行框架及其应用

[编者按]深度卷积神经网络有着广泛的应用场景,本文对深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框架做了详细的分享,通过多个Worker Group实现了数据并行,同一Worker Group内多个Worker实现模型并行.框架中实现了三阶段并行流水线掩盖I/O.CPU处理时间:设计并实现了模型并行引擎,提升了模型并行计算执行效率:通过Transfer Layer解决了数据存储访问效率问题.此框架显著提升了深度卷积神经网络训练速度,解决了当前硬件条件下训练大模型的难题. 以下为

PHP树的深度编历生成迷宫及A*自动寻路算法实例分析

 这篇文章主要介绍了PHP树的深度编历生成迷宫及A*自动寻路算法,实例分析了php实现A*寻路算法的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了PHP树的深度编历生成迷宫及A*自动寻路算法.分享给大家供大家参考.具体分析如下: 有一同事推荐了三思的迷宫算法,看了感觉还不错,就转成php 三思的迷宫算法是采用树的深度遍历原理,这样生成的迷宫相当的细,而且死胡同数量相对较少! 任意两点之间都存在唯一的一条通路. 至于A*寻路算法是最大众化的一全自动寻路算法 废话不多说,贴

PHP树的深度编历生成迷宫及A*自动寻路算法实例分析_php技巧

本文实例讲述了PHP树的深度编历生成迷宫及A*自动寻路算法.分享给大家供大家参考.具体分析如下: 有一同事推荐了三思的迷宫算法,看了感觉还不错,就转成php 三思的迷宫算法是采用树的深度遍历原理,这样生成的迷宫相当的细,而且死胡同数量相对较少! 任意两点之间都存在唯一的一条通路. 至于A*寻路算法是最大众化的一全自动寻路算法 废话不多说,贴上带代码 迷宫生成类: 复制代码 代码如下: class Maze{     // Maze Create     private $_w;     priv

“蜂网”横空出世能对抗菜鸟网络和顺丰吗?

曾经和现在的竞争对手,申通快递.圆通速递.中通快递和韵达快运最终走到一起,潜伏半年之久的蜂网投资有限公司(以下简称"蜂网")横空出世,这是一家由上述4家快递企业AA制凑钱成立的新公司,注册资金2亿元,总部设在上海. 业内人士指出,"三通一达"此次联手抱团是为了对抗菜鸟网络和顺丰.蜂网在上游的智能快递布局与菜鸟网络的智慧物流如出一辙,而在终端布局智能自助柜与顺丰正在推进的社区自助柜并无二异. 早在2013年5月底,由阿里巴巴牵头组建的菜鸟网络中,"三通一达&

2008网络营销实战宝典

国内首部具有实战意义的网络营销宝典,由实战派网络营销专家龙啸所著,书中讲述了大量中小企业实施网络营销的http://www.aliyun.com/zixun/aggregation/7565.html">成功案例,对中小企业实施网上销售具有非凡的借鉴意义.现免费提供给企业下载学习.参考.交流.祝愿所有中小企业能够在网上销售找到自己的一席之地-- 网络营销是现阶段企业经营的必由之路-- 免费下载<2008网络营销实战宝典>(上) PS:好东西要让大家来分享,别忘了把下载地址发给您