《昇思25天学习打卡营第19天|DCGAN生成漫画头像》

DCGAN 生成漫画头像详解

深度卷积生成对抗网络(DCGAN)是一种基于生成对抗网络(GAN)的模型,因其在生成高质量图像方面的出色表现而广受欢迎。本文将详细介绍 DCGAN 的原理及其在生成漫画头像中的应用,包括网络设置、优化器选择、损失函数计算以及模型权重初始化等内容。

什么是 DCGAN

DCGAN 由 Radford 等人在 2015 年提出,是一种使用深度卷积网络(CNN)的 GAN 变体。DCGAN 的主要思想是用卷积网络代替传统 GAN 中的全连接网络,以提高生成图像的质量和稳定性。

DCGAN 的架构

DCGAN 由两个主要部分组成:生成器(Generator)和判别器(Discriminator)。

生成器

生成器的任务是将随机噪声向量转换为逼真的图像。生成器网络通常由一系列转置卷积层(Transpose Convolution)组成,以逐步将低维噪声向量上采样为高维图像。其典型架构如下:

  • 输入一个低维噪声向量 (z)(通常服从标准正态分布)。
  • 通过一系列的转置卷积层,上采样为目标图像尺寸。
  • 每个转置卷积层后接批归一化层(Batch Normalization)和 ReLU 激活函数,除了最后一层使用 Tanh 激活函数。

生成器的输出是一个与训练图像尺寸相同的图像。

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

DCGAN论文生成图像如下所示:
在这里插入图片描述

dcgangenerator

判别器

判别器的任务是区分真实图像和生成图像。判别器网络通常由一系列卷积层(Convolution)组成,以逐步将高维图像下采样为低维特征。其典型架构如下:

  • 输入一个图像(真实图像或生成图像)。
  • 通过一系列的卷积层,下采样为一个低维特征向量。
  • 每个卷积层后接批归一化层和 Leaky ReLU 激活函数。
  • 最后一层使用 Sigmoid 激活函数,输出一个概率值,表示图像为真实图像的可能性。

DCGAN 的损失函数

DCGAN 的训练目标是生成器和判别器之间的对抗过程。判别器的目标是尽可能区分真实图像和生成图像,而生成器的目标是生成逼真的图像以欺骗判别器。

判别器的损失

判别器的损失函数包括两部分:真实图像的损失和生成图像的损失。定义如下:

[ \mathcal{L}D = -\mathbb{E}{x \sim p_{data}(x)}[\log D(x)] - \mathbb{E}_{z \sim p_z(z)}[\log (1 - D(G(z)))] ]

其中,(D(x)) 表示判别器对真实图像 (x) 的预测,(D(G(z))) 表示判别器对生成图像 (G(z)) 的预测。

生成器的损失

生成器的损失函数旨在最大限度地欺骗判别器,使其认为生成图像是真实的。定义如下:

[ \mathcal{L}G = -\mathbb{E}{z \sim p_z(z)}[\log D(G(z))] ]

优化器选择

通常,DCGAN 使用 Adam 优化器来更新生成器和判别器的参数。Adam 优化器具有快速收敛和稳定训练的优点,其典型参数设置为:

  • 学习率 ( \alpha = 0.0002 )
  • 一阶矩估计的衰减率 ( \beta_1 = 0.5 )
  • 二阶矩估计的衰减率 ( \beta_2 = 0.999 )

模型权重初始化

为了确保训练的稳定性,DCGAN 通常使用 Xavier 初始化或正态分布初始化权重。具体来说,所有卷积层和转置卷积层的权重都初始化为服从均值为 0、标准差为 0.02 的正态分布。

def weights_init(m):
    classname = m.__class__.__name__
    if classname.find('Conv') != -1 or classname.find('BatchNorm') != -1:
        nn.init.normal_(m.weight.data, 0.0, 0.02)

DCGAN 的训练过程

训练 DCGAN 通常包括以下步骤:

  1. 初始化生成器和判别器:构建生成器和判别器网络,并初始化权重。
  2. 选择优化器:为生成器和判别器分别选择 Adam 优化器。
  3. 交替训练:在每个训练步骤中,首先使用真实图像和生成图像更新判别器的参数,然后使用生成图像更新生成器的参数。
  4. 循环训练:重复交替训练步骤,直到损失函数收敛。

在这里插入图片描述

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 05:22:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 05:22:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 05:22:01       57 阅读
  4. Python语言-面向对象

    2024-07-16 05:22:01       68 阅读

热门阅读

  1. 习题1 回文数 python、C++ 不同解法

    2024-07-16 05:22:01       28 阅读
  2. js的多线程示例

    2024-07-16 05:22:01       26 阅读
  3. 记一次使用vue连接rabbitMq

    2024-07-16 05:22:01       28 阅读
  4. 蓝易云 - 美国云端服务器最低成本方案揭示!

    2024-07-16 05:22:01       24 阅读
  5. vue3 学习笔记10 -- 父子传参

    2024-07-16 05:22:01       26 阅读
  6. 《C++ 入门:第一个小程序》

    2024-07-16 05:22:01       24 阅读
  7. 实验五:图像傅里叶变换

    2024-07-16 05:22:01       21 阅读