Big GAN

2025年3月17日 | 阅读 12 分钟

BigGAN 是一种生成对抗网络(GAN),能够生成超高分辨率、高保真度的图像。它是原始 GAN 框架的扩展,该框架包含相互竞争的神经网络。生成器创建人工图像,而判别器则评估其真实性。

它主要基于经验结果,并执行条件生成任务。在特定类别的情况下生成结果。它非常适合生成动物图像,但其他一些图像则有些随意。

这是一种结合了一系列新的优秀实践来教育类别条件图像的技术。它扩大了批次大小和模型参数数量。它正在考虑在光合作用方面达到新的艺术水平。

Big Gan 的应用

BigGAN 是一种强大的生成模型,已在各种领域找到应用。以下是 BigGAN 的一些常见用途和应用程序:

  • 图像合成: BigGAN 被广泛用于生成高质量的合成图像。给定一组潜在向量作为输入,它可以跨多个类别生成多样化且逼真的图像。这通常用于创意应用程序、艺术创作或计算机视觉任务的数据增强。
  • 数据增强: 在深度学习的背景下,BigGAN 可用于数据增强。生成更逼真的训练样本有助于提高模型的鲁棒性和泛化能力,尤其是在训练数据有限的情况下。
  • 风格迁移: BigGAN 可应用于风格迁移。通过操作潜在向量输入,用户可以控制生成图像的视觉风格。这通常用于创意项目或创建视觉上吸引人的内容。
  • 条件图像生成: BigGAN 的条件性质允许用户指定生成图像的特定属性或条件。例如,生成特定类别或具有特定视觉特征的图像。
  • 域适应: BigGAN 可用于域适应任务。在与目标域非常相似的合成数据上进行训练,可以提高模型在应用于真实世界数据时的整体性能。
  • 异常检测: 在异常检测场景中,BigGAN 可用于生成数据的正常或预期示例。与这些生成样本的偏差随后可被诊断为异常。
  • 视觉概念探索: 研究人员和艺术家可以使用 BigGAN 来探索和可视化潜在空间。通过操作潜在向量,用户可以研究向量的各种变化如何影响生成的图像,从而能够探索视觉原理。

现在,为了更好地理解 Big GAN,我们将构建一个能够生成狗的图像的模型。

代码

导入库

输出

Big GAN

读取数据集

现在,我们可以通过 PATH 精确地加载和处理目录中放置的一组狗的图片。变量 img_filenames 将包含这些图片的filenames列表,并通过计算此列表的长度来确定特定目录中有多少张图片。

输出

Big GAN

输出

Big GAN

输出

Big GAN

输出

Big GAN
Big GAN

现在,我们将定义 bounding_box 和 bounding_box_ratio,它们用于从与图像相关的 XML 文档中提取边界框信息。这些函数以图片filenames为输入,并返回边界框坐标列表或边界框尺寸和比例的列表。


我们将根据图片的长宽比过滤图片,并提供有关原始图片数量和过滤后图片数量的信息。

输出

Big GAN

输出

Big GAN

data_preprocessing 函数接受图片路径和边界框索引,使用 PIL (Python Imaging Library) 读取图片,将其裁剪到提供的边界框,然后返回裁剪后的图片。

输出

Big GAN

我们将创建 DogDataset 类,这是一个处理狗图片的自定义数据集类。它接受图片路径列表,转换图片,并根据品种映射为它们打标签。

使用 PyTorch 的 transforms 包,我们将定义两组用于图像处理的转换:

  • transform1: 将图片调整到提供的 img_size (64x64 像素)。
  • transform2: 将图片随机裁剪到 img_size (64x64 像素)。
  • 使用 0.5 的概率进行随机水平翻转。将图片转换为 PyTorch 张量。根据提供的均值和标准差对像素值进行归一化。

输出

Big GAN

输出

Big GAN

输出

Big GAN

检查 GPU 是否可用。

输出

Big GAN

模型

现在,我们将构建我们的模型,包括其用于条件生成对抗网络(cGAN)的实用函数和模块。实用函数提供卷积层和权重初始化。Attention 模块提供自注意力机制,提高了模型有效捕获空间关系的能力。ConditionalNorm,一个条件归一化模块,将批归一化与嵌入层结合起来,使用条件信息(如类别标签)执行归一化。

现在,我们将深入研究条件生成对抗网络(cGAN),该网络具有结合了 BigGAN 和 Leaky ReLU 激活函数的修改后的架构。生成器由残差块(ResBlock_G)组成,这些残差块包含条件归一化和注意力模块。其目标是从随机噪声和类别标签生成高质量的图像。判别器 Discriminator 使用修改后的残差块(ResBlock_D),该残差块具有谱归一化和 Leaky ReLU 激活,同时考虑类别信息来区分真实和生成的图像。Attention 模块(Attention)提高了生成器和判别器的特征捕获能力。该代码强调了谱归一化、Leaky ReLU 和注意力方法在有效 cGAN 训练和生成中的重要性。

训练

在本节中,我们将使用 Leaky ReLU 激活函数训练具有 BigGAN 架构的条件生成对抗网络(cGAN)。为了实现有效的训练和生成,生成器(Generator)和判别器(Discriminator)使用条件归一化、注意力模块和谱归一化。训练循环包括对判别器和生成器的更新,以及可选的生成器参数的指数移动平均(EMA)。




输出

Big GAN
Big GAN
Big GAN
Big GAN
Big GAN

判别器损失(DLoss)和生成器损失(GLoss)是评估生成对抗网络(GAN)训练期间性能的重要指标。DLoss 反映了判别器区分真实样本和生成样本的能力,而 GLoss 则显示了生成器创建能够欺骗判别器的样本的能力。

输出

Big GAN

我们的判别器损失(DLoss)正在下降,而生成器损失(GLoss)正在增长,这表明您的生成器在欺骗判别器方面变得更加擅长。这是在 GAN 训练过程正常运行时常见的现象。

现在,我们将循环遍历生成的图像,并使用 matplotlib 显示它们。我们使用的是由原始生成器(netG)或带有指数移动平均(EMA)的生成器生成的图像。

输出

Big GAN
Big GAN

这些是我们模型生成的图像,看起来很不错。如果您需要提高模型的准确性,那么我们就必须在大量数据上训练我们的模型。


下一主题Sarimax