别人家的高中生:入大学前,Ta详细梳理了GAN的发展脉络

2024-06-17 15:58

本文主要是介绍别人家的高中生:入大学前,Ta详细梳理了GAN的发展脉络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://www.jiqizhixin.com/articles/19062302

https://blog.floydhub.com/gans-story-so-far/

有人「高考」完还在学习,说出来你可能不信。

昨天,reddit 上出现了一个关于梳理 GAN 发展脉络的博客,作者在博客中详细梳理了过去几年的 GAN 发展历程,包含众多 SOTA 论文及其代码和对应的学习资源。难能可贵的是,博客作者三月份才刚高中毕业,然后利用上大学之前的时间完成了这篇文章。

目前,作者已被伊利诺伊大学香槟分校(University of Illinois at Urbana-Champaign)录取并将于今年秋天入学。

如果你是一名 GAN 的入门学习者,那么这份材料可以帮你迅速理 GAN 发布以来的研究进展。

博客地址:https://blog.floydhub.com/gans-story-so-far/

作者在梳理过程中发现,GAN 的确是一个发展迅速的领域,短短五年就从模糊的灰度像素阵列发展到高度逼真的生成图像,让人无法一眼识别是真是假。

但领域越火,「水」论文的人可能就越多,因此从众多所谓「SOTA」论文中挑出真正做出实质性改进的「SOTA」就显得非常有必要。

一位读者在看完博客后表示,「比起那些最新 SOTA 文章,我更欣赏这种回顾性质的 SOTA 梳理……经常有人抱怨说,有些人只是对 GAN 进行了微小的调整,在 SOTA 基础上前进了一小步,然后就把论文发出去了,并声称『这是最新的 SOTA!』。这其实只是对别人研究的一种重复。因此,如果有更多这种 SOTA 的回顾性文章,就可以过滤掉那些水论文。通过这种回顾可以更加容易地评价那些新出现的研究。」

从 GAN 到 StyleGAN

首先,作者以发展路线图的形式梳理了这几年出现的比较有影响力的 GAN,从最初的 Goodfellow 版 GAN 到近来大火的 BigGAN、StyleGAN 等,博客的后续内容也是按照这张图的顺序进行的。

GAN 路线图。

Goodfellow 版 GAN

GAN 是由 Goodfellow 等人于 2014 年提出的(目前公认的说法)。其基本思想可以概括为:

GAN 包含两个神经网络,一个神经网络尝试生成真实的数据(主要是图片,也可能是其他数据的分布),而另一个网络尝试判别真实的和生成的数据。

标准的生成对抗网络结构。

这场「猫捉老鼠」的游戏会一直继续下去,直到系统达到所谓的「平衡」,即生成器生成的数据以假乱真到判别器无法判别。

Goodfellow 等人 2014 年提出的 GAN 生成的图像。

  • 论文地址:https://arxiv.org/abs/1406.2661

  • 代码实现地址:https://github.com/goodfeli/adversarial

  • 其他资源:https://arxiv.org/abs/1701.00160

DCGAN: 深度卷积生成对抗网络

DCGAN 的思路可以简单概括为:

  • 卷积神经网络=处理图像效果好

  • 生成对抗网络=生成数据效果好

  • ⟹卷积神经网络+生成对抗网络=生成图像效果好

标准的 GAN 使用多层感知机作为网络结构。但是考虑到卷积神经网络在获取图像特征方面的效果,DCGAN 采用了它作为主要网络结构。同时,DCGAN 稍微做了一些调整,使用了转置卷积操作(transposed convolution operation),它的另一个名字是 Deconvolution。转置卷积帮助图像从低清晰度向高清晰度转换,同样的,采用多层转置卷积可以使图像变得生动多彩。

卷积核的工作原理。通过卷积方式将稀疏的图像矩阵转换为密集矩阵。

DCGAN 生成的图片。较 GAN 更清晰,有更多色彩。

  • 论文地址:https://arxiv.org/abs/1511.06434

  • 代码实现地址:https://github.com/floydhub/dcgan

  • 其他资源:https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

CGAN: 条件生成对抗网络

原始的 GAN 从噪声中生成图片。因此,如果训练的是一类图(例如,狗),其能生成这一类图片。但是,如果训练中同时有很多类(例如,狗和猫都有)图片,则生成的图片是这些图片模糊的混合。而 CGAN 可以让用户指定生成的图片分类。

具体的,CGAN 将 one-hot 向量 y 和随机噪声向量 z 拼接,组成如下的结构:

使用 CGAN 可以生成指定的 MNIST 数字。

  • 论文地址:https://arxiv.org/abs/1411.1784 (https://arxiv.org/abs/1511.06434)

  • 代码实现地址:https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras (https://github.com/floydhub/dcgan)

  • 其他资源:https://wiseodd.github.io/techblog/2016/12/24/conditional-gan-tensorflow/

CycleGAN

利用 GAN 变体 CycleGAN 进行风格迁移。

GAN 不仅可以用来生成图像,还可以创造「马+斑马」这种叠加效果的图像,CycleGAN 解决的就是这种问题,即图像到图像的转换。

CycleGAN 包含两个生成器(G 和 F)和两个判别器(D_X 和 D_Y)。G 从 X 中得到一张图像,并尝试将其映射到 Y 中的某个图像。判别器 D_Y 预测一张图像究竟是由 G 生成的还是 Y 中的真实图像。

F 也进行类似的操作,即从 Y 中得到一张图像,并尝试将其映射到 X 中的某个图像。判别器 D_X 预测一张图像究竟是由 F 生成的还是 X 中的真实图像。

所有四个网络都是用普通 GAN 的方式训练的,直到得到强大的生成器 G 和 F,生成的图像分别骗过 D_X 和 D_Y。

CycleGAN 的结构。

利用 CycleGAN 将画家的画风移植到照片上。

  • 论文地址:https://arxiv.org/abs/1703.10593v6

  • 代码实现地址:https://github.com/junyanz/CycleGAN

CoGAN:成对(Coupled)生成对抗网络

想要更好的结果?为什么不试试两个 GAN?

CoGAN 的原作者这样解释:

「在这个系统中,有两个队伍,每个队伍有两个队员。生成模型是其中一个队,生成一个不属于一类图片的图片对来迷惑判别器队。判别器队尝试将图片的类,以及是否是训练数据或生成数据都判别出来。两个队伍共享权重。」

CoGAN 的结构。

CoGAN 的效果。相比 DCGAN 清晰度更高,更为真实。

  • 论文地址:https://arxiv.org/abs/1606.07536

  • 代码实现地址:https://github.com/mingyuliutw/CoGAN 

  • 其他资源:https://wiseodd.github.io/techblog/2017/02/18/coupled_gan/ 

ProGAN

训练 GAN 有很多问题,其中最大的问题是训练的不稳定性。

有时候,判别器和生成器无法从彼此学习数据。有时候,生成的图片变得非常奇怪。

ProGAN 可以通过逐层提高生成图片的分辨率来用来稳定 GAN 的训练。

这一逻辑是:生成 4x4 的图片比生成 1024x1024 图片要更简单。同时,从 16x16 的图片映射到 32x32 比从 2x2 的图片映射更容易。

因此 ProGAN 首先训练一个 4x4 的生成器和一个 4x4 的判别器,并在训练进程中逐渐增加层数,提高分辨率。

ProGAN 逐渐加深训练的过程。随着网络层数变深,图像越来越清晰。

  • 论文地址:https://arxiv.org/abs/1710.10196

  • 代码实现地址:https://github.com/tkarras/progressive_growing_of_gans 

WGAN:Wasserstein 生成对抗网络

WGAN 中的「W」指的是 Wasserstein。WGAN 提出了一种新的代价函数。

过去 GAN 的 minimax 目标函数

而 WGAN 使用:

GAN 的判别器和 WGAN 的判别器在学习区分高斯分布数据的情况。GAN 可能会出现梯度消失,但 WGAN在空间内始终保持稳健的梯度变化。

新的代价函数在数学上可以防止梯度消失的情况,因此具有更好的训练稳定性。

WGAN(左)和 DCGAN(右)生成房子图片的效果对比。WGAN 更稳健,出错更少。

  • 论文地址:https://arxiv.org/abs/1701.07875v3

  • 代码实现地址:https://github.com/eriklindernoren/Keras-GAN

SAGAN:自注意力生成对抗网络

虽然使用转置卷积的 GAN 可以「扫描」图片的特征映射,但是其只能获得附近的信息。

SAGAN 使用自注意力机制,在全局图像中关注需要注意的特征信息。

SAGAN 使用注意力机制,高亮部位为注意力机制关注的位置。

  • 论文地址:https://arxiv.org/abs/1805.08318v1

  • 代码实现地址:https://github.com/heykeetae/Self-Attention-GAN 

BigGAN:大型生成对抗网络

BigGAN 由 DeepMind 提出,由于生成效果高度逼真而被誉为「史上最强 GAN 图像生成器」。

DeepMind 在研究 GAN 时尝试了前无古人的事情。他们用强大的深度学习技术训练 GAN 的网络。

首先,DeepMind 使用 SAGAN 作为基线,并添加了光谱特征作为输入。其次,他们将批大小提升了 50%,通道数提升了 20%。同时,研究人员使用了截断方法来提升样本的质量。最终,他们在新的数据集 JFT-300 上进行训练,这是一个类似于 ImageNet 的数据集,但是有 3 亿张图片。

BigGAN 生成的高清晰图片,包含各种类别。

  • 论文地址:https://arxiv.org/abs/1809.11096v2 

  • 代码实现地址:https://github.com/huggingface/pytorch-pretrained-BigGAN 

StyleGAN:基于风格的生成对抗网络

StyleGAN 来自英伟达的一项研究,关注的是损失函数、稳定性、架构等。

因此,StyleGAN 没有专注于生成更加逼真的图像,而是致力于提高 GAN 对生成图像的精确控制能力。

为了达到图像风格级别的控制,StyleGAN 使用了适应实例归一化(Adaptive instance normalization)、潜在向量映射网络、不断学习的输入等已有技术。

英伟达 StyleGAN 生成的图像。

  • 论文地址:https://arxiv.org/abs/1812.04948

  • 代码实现地址:https://github.com/NVlabs/stylegan

这篇关于别人家的高中生:入大学前,Ta详细梳理了GAN的发展脉络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069886

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push