图书前言

  生成对抗网络(Generative Adversarial Networks,GAN)被学术界和工业界的专家们誉为“深度学习中最重要的创新之一”。Facebook的人工智能研究主管、图灵奖得主杨立昆(Yann LeCun)甚至表示GAN及其变体是“过去20年来深度学习中最酷的想法”。GAN的创立来自“GAN之父”伊恩·古德费罗(Ian Goodfellow)的突发奇想。据说,2014年蒙特利尔大学的博士生Ian Goodfellow在一家酒吧与朋友讨论学术问题时,突然想到一种让神经网络教会机器如何生成逼真照片的AI技术,并连夜在电脑上完成GAN的代码。GAN的设计非常优雅:第一个AI尝试创造它认为的真实图像,第二个AI分析结果并尝试判断图像的真假。

  至今,GAN已经在理论上突飞猛进地发展了10年,各种GAN在不同领域中的应用在遍地开花。在计算机视觉中的应用包括图像和视频的生成、图像与图像或文字之间的翻译、目标检测、语义分割等。除了图像领域,GAN 还广泛应用于文本、语音等领域。

  尽管GAN技术非常吸引人,但要掌握GAN并不容易,因为学习相关知识(诸如判别器、生成器、神经网络、卷积神经网络和各种GAN理论)具有一定的难度,同时掌握PyTorch等深度学习工具也很困难。因此,一本容易上手的生成对抗网络入门图书肯定会对GAN初学者有很大的帮助,本书就是专门为初学者精心编写的。

  初学者学习生成对抗网络理论与PyTorch编程技术一般都会面临三个“拦路虎”。第一个“拦路虎”是必须具备一定的深度学习理论基础知识。深度学习包含很多需要掌握的基本概念,如神经元、激活函数、全连接、Dropout、权重初始化、代价函数、批量归一化、优化算法、卷积神经网络、卷积层和池化层、残差网络、Inception网络等,学习这些概念需要花费大量的时间和精力,而且学习周期漫长。第二个“拦路虎”是生成对抗网络理论。必须阅读近10年来的很多经典论文,才能了解GAN领域的研究动态;如果无人引路,光靠一个人在黑暗中长期摸索,无疑会白白浪费很多精力。第三个“拦路虎”是GAN模型复现。众所周知,PyTorch是一个非常庞大的开源平台,拥有一个包含各种工具、库和社区资源的良好生态系统,要在短时间内掌握这些编程技能较为困难,更别说直接去复现GAN论文。比较棘手的问题在于很多经典GAN论文是使用TensorFlow或其他框架实现的,即便使用PyTorch实现,也有可能将多个功能混杂在一起,难以阅读和学习,或者仅仅因为API升级而无法运行,这对初学者来说极为不友好,因此迫切需要重新按照简单化的原则重新编码,提供专门的供学习用的复现版本。

  本书就是为了让GAN的初学者顺利入门而设计的。首先,通过本书了解基本的GAN架构和原理之后,可以逐步深入研读经典论文,考虑如何解决实际问题。其次,本书精心选择一些生成对抗网络架构和训练方法的经典案例,读者能亲身体会如何将生成对抗网络的理论应用到实践中,并加深对GAN算法的理解,提高编程能力,逐步掌握生成对抗网络的原理和编程技能,拉近理论与实践的距离。

  本书共分8章。第1章介绍生成对抗网络和PyTorch的基本概念,以及GAN架构和常用数据集;第2章为简单全连接GAN的基础编程,使用PyTorch来实现能生成1001模式的GAN和能生成MNIST数据的GAN;第3章为深度卷积GAN,主要内容有DCGAN简介,包括DCGAN网络结构、卷积、反卷积、批规范化的基本概念,并使用PyTorch实现一个DCGAN实例;第4章为Wasserstein GAN,主要内容包括WGAN介绍、WGAN基础、WGAN实现和WGAN-GP实现;第5章为条件GAN,首先介绍条件GAN的基本概念,包括条件生成、可控生成、Z空间的向量运算、类别梯度上升和解耦合,然后使用PyTorch分别实现cGAN和可控生成GAN;第6章为StyleGAN,首先简单介绍StyleGAN,然后讲述StyleGAN架构,包括StyleGAN生成器结构、渐进式增长、噪声映射网络、样式模块AdaIN、样式混合和随机噪声等概念,最后讲解如何使用PyTorch框架来实现StyleGAN;第7章为Pix2Pix,首先讲述匹配图像转换的概念,然后讲述PatchGAN、U-Net等基本原理,最后使用PyTorch编程实现Pix2Pix;第8章为CycleGAN,首先讲述非匹配图像转换的概念,然后讲述CycleGAN架构,最后使用PyTorch框架来编码实现CycleGAN。

  由于深度学习软件更新得很快,新开发的代码在旧版本环境下不一定能够兼容运行,为便于读者参考,在此列出本书代码的开发调试环境:Python 3.10.9、PyTorch 1.13.1、CUDA 11.6、torchvision 0.14.1。本书配套源代码,读者可扫描右侧二维码进行下载。

  感谢昆明理工大学提供的研究和写作环境;感谢清华大学出版社的编辑老师在出版方面提出的建设性意见和给予的无私帮助;感谢读者群的一些未见面的群友,你们对作者以前的著作提出了宝贵的建议并鼓励作者撰写更多、更好的技术类书籍,虽然我无法一一列举姓名,但你们的帮助我会一直铭记在心;最后感谢购买本书的朋友。作者在写作中付出很多精力和劳动,但限于作者的学识、能力和精力,书中难免会存在一些错误,敬请各位读者批评、指正,你们的批评与建议都会受到重视,并在将来再版中改进。