42

使用 Gan 网络生成名人照片

 5 years ago
source link: https://www.leiphone.com/news/201808/8I7LOB3kGzqaS1Ze.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

雷锋网按:本文为 AI 研习社编译的技术博客,原标题 Celebrity Face Generation using GANs,作者为 SHIVAM BANSAL。

翻译 | 江舟      校对 | 吴晓曼      整理 | MY

生成式对抗网络(GANs)是深度学习中最热门的话题之一。生成式对抗网络是一类用于无监督学习算法的人工算法,由两个神经网络组成的系统实现

  1. 生成器

  2. 鉴别器

两个神经网络都在零和游戏框架中相互竞争。生成式对抗网络(GANs)是一组模型,他们基本上学习创建与其给出的输入数据类似的合成数据。

EnAjAjm.jpg!web

鉴别器的任务是确定给定图像是否看起来自然(即是来自数据集的图像)还是看起来它是人工创建的。生成器的任务是创建与原始数据分布类似的自然外观图像,这些图像看起来足够自然以欺骗鉴别器网络。首先给生成器一个随机噪声,使用它产生假图像,然后将这些假图像与原始图像一起发送到鉴别器。

鉴别模型的任务是确定给定图像看起来是自然的(来自数据集的图像)还是人工创建的。这基本上是一个二元分类器,它采用普通卷积神经网络(CNN)的形式。生成器的任务是创建与原始数据分布类似的自然外观图像。

生成器试图蒙骗鉴别器,而鉴别器试图不被生成器蒙骗。当模型通过交替优化训练时,两种方法都被改进到“假图像与数据集图像无”法区分的点。

生成对抗式网络的数学方程:

jyARzeI.jpg!web

我们可以认为这个方程由两部分组成,第一部分是从原始数据分布中采样的数据,第二部分是从噪声数据分布中采样的数据。

第一部分

鉴别者总是希望最大化其图像分类的正确率。这里的图像是从原始数据分布中采样的,原始数据分布是真实数据本身。D(x)是显示图像是真实的概率,所以鉴别器总是想要最大化 D(x),因此 log(D(x))应该最大化并且在这一部分内容中必须最大化。

第二部分

'z'是随机噪声样本,G(z)是使用噪声样本生成的图像。这个术语的解释和之前很相似。生成器总是希望最大化鉴别器被生成的图像蒙骗的概率。这意味着,生成器想要最大化 D(G(z)),因此它应该最小化 1-D(G(z))也意味着(1-D(G(z)))最小化。

使用 GANs 生成名人图像

RF3mEz3.jpg!web

名人图片数据集:

CelebA 数据集是超过 200,000 个带注释的名人面部图像的集合。因为在这个博客中,我只是想生成面孔所以我没有考虑注释。

1)获取数据: 

muqQjay.jpg!web

我创建了 helper.py 文件,你可以通过该文件下载 CelebA 数据集图像。在运行此代码片段时,它将下载 CelebA 数据集。(源代码链接如下)。

2)预处理图像:

由于我仅在面部图像上工作,为获得良好的效果所以我将其调整到 28 * 28。我裁剪了图像中不包含图像部分的部分。

QJFJnaa.jpg!web

由于生成式对抗网络很难训练(你可以查看此链接,以了解 为什么生成式对抗网络的训练如此困难 ?)

为了获得准确的结果,我们应该拥有一个良好的 GPU(4GB 或更高版本),通过运行此代码片段,你可以了解是否使用自己的 GPU 安装了 tensorflow。

VFZzaeY.jpg!web

3)模型输入和网络结构

我将图像的宽,高,channel 和噪声参数作为模型的输入,随后生成器也会使用它们生成假图像。

生成器结构:

JbArmyR.jpg!web

在解卷积层之后,生成器结构具有致密层和全连接层(除输出层外每一层都有批量标准化,leaky ReLu 和 dropout)。生成器将随机噪声向量 z,之后把它重塑为 4D 形状并把它传递给一系列上采样层。每个上采样层都代表一个转置卷积运算,即反卷积运算。

所有转置卷积的深度从 1024 一直减少到 3,它表示 RGB 彩色图像。最后一层通过双曲正切(tanh)函数输出 28x28x3 张量。

鉴别器结构:

jeiuUv6.jpg!web

鉴别器的工作是识别哪个图像是真实的,哪个是假的。鉴别器也是具有批量归一化、lekeay Relu 的 4 层 CNN(输入层除外)。鉴别器接收输出图像(大小为 28 * 28 * 3)并对其进行卷积。最后,鉴别器使用 Logistic Sigmoid 函数显示用于表示图像是真或假的输出概率。

当鉴别器看到图像中的差异时,它将梯度信号发送到生成器,此信号从鉴别器流向生成器。

4)生成器损失和鉴别器损失: 

鉴别器从训练图像和生成器两者接收图像,因此在计算鉴别器的损失时,我们必须增加由于真实图像和假图像造成的损失。两个网络被同时训练,所以我们需要将生成器和鉴别器都进行优化。如果图像是真实的,我们希望从鉴别器输出接近 1 的概率,如果图像是假的,则输出接近 0 的概率。

RzMvuuU.jpg!web

训练和结果

......

想要继续阅读,请移步至我们的AI研习社社区: https://club.leiphone.com/page/TextTranslation/777

更多精彩内容尽在 AI 研习社。

不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。

雷锋网雷锋网(公众号:雷锋网 (公众号:雷锋网) (公众号:雷锋网(公众号:雷锋网)))

雷锋网原创文章,未经授权禁止转载。详情见 转载须知

vQnueq3.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK