昇思Mindspore25天学习打卡Day20:DCGAN生成漫画头像


在下面的教程中,我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中,使用的动漫头像数据集共有70,171张动漫头像图片,图片大小均为96*96.

1 GAN基础原理

这部分原理介绍参考Link:GAN图像生成

2 DCGAN原理

DCGAN(深度卷积对抗生成网络,Deep Convolutional Generative Adversarial Networks)是GAN的直接扩展。不同之处在于,DCGAN会分别在判别器和生成器中使用卷积和转置卷积层。

它最早由Radford等人在论文Link:Unsupervised Representation Learning With Deep Convolutional Generative Adversarial Networks中进行描述。判别器由分层的卷积层、BatchNorm层和LeakReLU激活层组成。输入是3x64x64的图像,输出是该图像为真图像的概率。生成器则是由转置卷积层、BatchNorm层和ReLU激活层组成。输入是标准正态分布中提取出的隐向量z,输出是3x64x64的RGB图像。

本教程将使用动漫头像数据集来训练一个生成式对抗网络,接着使用该网络生成动漫头像图片。

3 数据准备与处理

首先我们将数据集下载到指定目录下并解压。示例代码如下:
在这里插入图片描述

数据处理

在这里插入图片描述
定义 create_dataset_imagenet 函数对数据进行处理和增强操作.

在这里插入图片描述
通过 create dict iterator 函数将数据转换成字典迭代器,然后使用 matplotlib 模块可视化部分训练数据。
在这里插入图片描述

4 构造网络

当处理完数据后,就可以来进行网络的搭建了。按照DCGAN论文中的描述,所有模型权重均应从 mean为0,sigma为0.02的正态分布中随机初始化。

4.1 生成器

生成器 G的功能是将隐向量z 映射到数据空间。由于数据是图像,这一过程也会创建与真实图像大小相同的 RG8 图像。在实践场景中,该功能是通过一系列
Conv2dTranspose 转置卷积层来完成的,每个层都与 BatchNorm2d 层和 ReLu 激活层配对,输出数据会经过 tanh 函数,使其返回[-1,1]的数据范围内。

DCGAN论文生成图像如下所示:

在这里插入图片描述

4.2 判别器

如前所述,判别器D是一个二分类网络模型,输出判定该图像为真实图的概率。通过一系列的 conv2d、
BatchNorm2d 和 LeakyReLu 层对其进行处理,最后通过 Sigmoid 激活函数得到最终概率。
DCGAN论文提到,使用卷积而不是通过池化来进行下采样是一个好方法,因为它可以让网络学习自己的池化特征。
判别器的代码实现如下:
在这里插入图片描述

5 模型训练

损失函数

当定义了 D和G后,接下来将使用Mindspore中定义的二进制交叉熵损失函数Link:BCELoss
在这里插入图片描述

优化器

这里设置了两个单独的优化器,一个用于D,另一个用于G。这两个都是 1r=0.8002 和 beta1 = 0.5 的Adam优化器。
在这里插入图片描述

训练模型

训练分为两个主要部分:训练判别器和训练生成器.

  • 训练判别器
    训练判别器的目的是最大程度地提高判别图像真伪的概率。按照Goodfelow的方法,是希望通过提高其随机梯度来更新判别器,所以我们要最大化
    l o g D ( x ) + l o g ( 1 − D ( G ( z ) ) logD(x)+log(1-D(G(z)) logD(x)+log(1D(G(z))的值,
  • 训练生成器
    如DCGAN论文所述,我们希望通过最小化 l o g ( 1 − D ( G ( z ) ) ) log(1- D(G(z))) log(1D(G(z)))来训练生成器,以产生更好的虚假图像,。

在这两个部分中,分别获取训练过程中的损失,并在每个周期结束时进行统计,将 fixed_noise 批量推送到生成器中,以直观地跟踪 G的训练进度.

下面实现模型训练正向逻辑:
在这里插入图片描述
循环训练网络,每经过50次迭代,就收集生成器和判别器的损失,以便于后面绘制训练过程中损失函数的图像。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6 结果展示

运行下面代码,描绘 D和G损失与训练迭代的关系图
在这里插入图片描述
可视化训练过程中通过隐向量 fixed noise 生成的图像。
在这里插入图片描述
在这里插入图片描述
从上面的图像可以看出,随着训练次数的增多,图像质量也越来越好。如果增大训练周期数,当 num_epochs 达到50以上时,生成的动漫头像图片与数据集中的较为相似,下面我们通过加载生成器网络模型参数文件来生成图像,代码如下:

7 训练结束打上标签和时间

在这里插入图片描述

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值