IT思维

文章页右侧顶部广告

GAN:艺术家眼里生成作品的创作利器

2018-11-17 13:56:53 0 人工智能 | , ,

公众号/AI前线

作者 | Helena Sarin

译者 | Sambodhi

编辑 | Vincent

AI 前线导读:如果仔细观察艺术家与科学家利用计算机所做的事情,那就是让赋予计算机自主性,设计了一定的规则让它们自由发挥,从而得到了无法复制、美丽的结果。最终,这种艺术创作方式被称为 “生成艺术”(Generative Art)。这一分类下的艺术品,都是集合了人类智慧,以及机器劳动的成果。今天,神经网络已经可以进行艺术创作了。GAN,即生成对抗网络(Generate Adversarial Network)就是其中的佼佼者。让我们看看艺术家、程序员双重身份的 Helena Sarin 是怎么使用 GAN 来进行生成艺术创作的。

更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)

美国艺术家 Jackson Pollock 说过:“所有的一切,都是一场建筑游戏,有的人用刷子,有的人用铲子,还有的人用钢笔。”

而有些人,包括我自己,选择了神经网络。我是一名艺术家,但同时也一直开发商业软件。在我的生活中,艺术和编程曾是风马牛不相及的事物。平时除了偶尔使用 Processing 和计算摄影进行生成艺术的处理外,我所有的艺术作品都是模拟的…… 直到我遇见 GAN(生成对抗网络,Generative Adversarial Networks,GAN)。

自从 2014 年生成对抗网络问世以来,机器学习社区已经涌现了许多关于该技术有深度的、技术性的贡献(比如 http://u6.gg/faJFS)。虽然我没有为此做出贡献,但是,我愿意跟读者分享我的心得:为什么 GAN 是优秀的艺术工具,以及我如何利用 GAN 进行生成艺术创作的方法。

首先,请先看看我的艺术作品,就是本文即将讨论的一些具体例子:

艺术家眼中的 GAN

那么,GAN 究竟是什么,又是什么原因让艺术家对 GAN 如此青睐呢?

我们可以把艺术创作的过程想象成一种游戏。这场游戏是在艺术工作室进行的,有两个玩家:评论家和学徒。学徒的目标是,在不抄袭大师原作的情况下,以大师的风格来创作作品。而评论家的目标则是判断他所看到的艺术作品是由学徒还是大师创作的。如此一轮又一轮的判断,学徒和评论家互相博弈。随着学徒越来越擅长模仿大师的风格,评论家被迫更善于分辨出作品是大师还是学徒创作的;当评论家更容易辨别作品时,学徒也必须更加贴合大师的风格。

GAN 就是这种模拟这一过程的神经网络架构;评论家的角色扮演的是判别器网络 D,学徒的角色扮演的是生成器网络 G。随着游戏一轮接着一轮地进行,生成器网络模仿大师的风格(即输入数据集的内容)就越来越逼真。

那你的角色是什么呢?嗯,你就负责调整游戏规则(网络超参数),同时也是一名策展人。作为策展人,你必须从 GAN 的输出中进行选择,因为 GAN 会生成不同结构、颜色和纹理组合的大量图像,与训练过的图像有不同程度的差异。策展是一项很困难的工作:你会发现自己沉浸在有趣的图像中,想保留所有这些图像!

但是,用 GAN 进行创作特别令人振奋。有了 GAN,你就有了新的模型和新的数据集,就可以开始新的探索了。与其他任何数字工具不同,GAN 总是给人一种惊喜的感觉,它可以创作出更特别的效果,远远超过 Instagram 滤镜或者普通的风格转移。

为什么选择 CycleGAN?

用来生成艺术的深度学习技术有许多种类。最受欢迎的是:

  • GAN/DCGAN,如上所述的原始方法:

GAN 处理图像四年来的变化(http://u6.gg/faKcY)

  • 神经风格转移,将一张图像的风格应用到另一张图像的内容:

使用卷积神经网络进行过图像风格转移(http://u6.gg/faKeN)

  • 成对图像翻译技术,如 Pix2Pix,需要一个带有成对的源图像和目标图像的数据集进行训练:

使用 Pix2Pix 进行图像翻译的一个例子

  • 不成对图像翻译技术,如 CycleGAN,就不像成对图像翻译技术那样训练:

https://junyanz.github.io/CycleGAN/

上面提到的所有技术都创造出了如此精彩的艺术,那为什么我最后选择了 CycleGAN 呢?简单地说,CycleGAN 能够让你训练一个网络来使用一个数据集(输入域)的形式转换图像,以获得另一个数据集(目标域)的纹理。这一点很重要:按照计算机视觉先驱 Alyosha Efros 的说法,我们 “仍处于纹理状态”(still in the texture regime.)。

我第一次邂逅 CycleGAN,是因为一个工作项目,我对它的纹理模仿能力深深着迷,所以我想将它重新用于生成艺术。CycleGAN 让你能够以相对较小的数据集进行高分辨率的绘画,而模型可以快速训练——速度非常快!

我的第一个项目是将美食摄影转移成景物花卉素描的风格。每个数据集由 300 到 500 张高分辨率图像组成。在整整一个月的时间里,我只是进行了各种实验,主要是围绕输入数据的裁剪大小。我花了几个小时筛选输出的图像,然后找出那些看起来很有趣的图像。

我的花卉素描变得非常魔幻,饮料的照片也变得有趣了……我的视觉世界爆炸了!最后,我带着一丝惶恐,将这些图像分享给了我的艺术导师。她的反应是:“我对软件一窍不通,但你一定对它很感兴趣,继续吧!”

于是我继续鼓捣。随着我对这个框架越来越熟悉,我继续尝试其他数据集的组合:从花卉素描到花卉图片,从风景写生到风光摄影等等,有些实验失败了,但其他实验则非常成功。

实用建议

以下是几个月来我在使用 CycleGAN 时学到的一些技巧:

  • 正如最初的 CycleGAN 论文所指出的,“训练数据的转换通常比测试数据的转换更有吸引力。” 所以在很多情况下,我使用训练数据的子集进行推理:我的目标并非泛化,而是创造引人入胜的艺术。
  • 通常,我会在较大的数据集中开始对模型进行初始训练,然后在较小的子集上对其进行微调,以达到特定的效果。此处有一个例子:这些图像是日本俳句书籍封面上精心调整的风景模型生成的。

  • 当模型训练时,仪表板值得一看。CycleGAN 的偏好设置可以设置显示频率,我设置了相当高的频率。对我来说,这一过程就像冥想一样,盯着 visdom 的 UI 界面,进入物我两忘的境界。

  • 随着训练的进展,结果变得越来越有趣,检查点的保存频率增多。
  • 保存实验的所有参数,以便稍后可以重新创造它们。(不过说实话,如果我不能重现一些实验结果,那也没什么大不了的,因为新的实验会带来新的兴奋!)
  • 在推理过程中,目标集中的图像不会影响生成的图像的样子。这并不意味着你不需要在乎在目标集里有什么图像。记住,你有两个生成器。不要让第二个生成器空闲——可能会出现有趣的伪影,比如重现图像,其中生成器尝试重建输入的图像。
  • 在默认情况下,CycleGAN 使用实例归一化和批大小为 1。但是一旦你学会了这些规则,你就可以打破这一限制。如果你使用批归一化和更大的批大小会怎样?
  • 另一项值得探索的技术是 CycleGAN 链:训练一个模型并使用结果训练另一个模型。

下面的图片是最后两项的插图——我使用了一组花卉和一组肖像素描。第一个模型使用批归一化在这两个模型之间进行灰度转换。第二个模型对第一个模型的结果进行了放大和着色。

  • 小心额外的纹理,尤其是在贴图训练时。我最初的实验是把食物变成静物画,然后大部分情况下变成像粥一样的画;所以花点时间来整理训练数据集是值得的。

AI 前线注:纹理是指高分辨率重复图案,如砖墙中的线条或链环栅栏中的线条。

另一方面,正如我的水彩老师曾经说过的: Let the medium do it. 是的,我的素描只是提供了基础,然后我让网络做它的事情;我不干涉,我所做的只是不断调整 #brushGAN 工具包(由保存的经过训练的模型、输入数据集等组成)。

这就引入了下一点:如果磁盘空间允许的话,保存尽可能多的模型。使用这些模型来进行个人风格的转移:这样的结果每次都会超过标准的 “Starry Nights” 转换。

考虑一下这个列表,你就可以开始探索 CycleGAN 和其他 GAN 了。这些技巧只是粗略的指导,在你的艺术旅程中,我相信你会根据数据集、艺术敏感性和目标来提出自己的技巧。最重要的是要注意你的 GAN 生成的图像,这样你就可以调整训练过程。

工具的使用

到目前为止,我们已经介绍了常规步骤:收集一些数据,然后开始使用它。现在我们来谈谈工具的使用。

不管你为生成艺术选择什么样的神经网络,深度学习的设置或多或少都是一样的。在过去一年左右的时间里,我所有的工作都是在我自己构建的服务器上完成的。我最初的设置是在 AWS 上运行的,尽管它在计算方面更便宜,但存储是一个非常头疼的问题——我浪费了大量时间将数据从卷到 S3 来回移动,而忘记断开卷的连接。现在我运行我自己的服务器,配备 GTX1080 GPU、275GB SSD 和两个 1TB 硬盘,虽然我仍然不断地耗尽空间,但是我对存储的额外控制是值得的。

然后就是超参数,其中最重要的无疑是图像的大小。CycleGAN 设置允许你指定图像裁剪,但最大的可能分辨率取决于你的硬件。在我的 GTX1080 上,用于训练的最大分辨率是 400×400。通过推理,最大分辨率还可以更高,但结果往往会受到影响。为了让第一次实验变得简单,你可能只需用 CycleGAN 的默认设置,其中图像被加载并重新缩放到 278×278,随机裁剪到 256×256。我在 1024/800/400 的不同分辨率下训练过模型,有时从头开始,有时从某个尺寸开始,然后随着训练的进行而改变。

关于数据

不要忘记数据集!众所周知,要训练任何深度学习网络,都需要大量的数据。许多 AI 艺术家都是使用 Web 抓取来获取数据集。但是,我的做法与他们不同:我决定使用我自己的数据集,我指的是我个人照片和绘画。这样的做法有如下明显的优势:

  • 将赋予你的艺术独特性和凝聚力,无论是在风格和题材上。
  • 无需担心版权问题。
  • 无需大量预处理即可得到高分辨率图像。
  • 使用摄像头,可以很轻松创建特定颜色和构图的数据集。

关于我的数据存储库的组织也值得说几句。下面是我融合使用的数据结构和处理管道:

  • 常规预处理:从智能手机上下载并调整照片。
  • 数据集组成:根据主题、内容、颜色、纹理等对照片进行区分。
  • 三种存储类型:
    • 远程存储(像 Flickr 这样的云服务):用于存储原始图像。Flickr 非常适合用来组织图片,提供了很不错的编辑器和无限的存储空间。
    • 硬盘:用来未使用的数据集和权重的长期存储。
    • 固态硬盘:用来数据集和权重的中短期存储。我的固态硬盘建了几个文件夹,包括一个用于原始图像的通用存储库和预处理图像的 GAN 特定存储库。
  • GAN 特定批处理:我在通用数据集 repo 中使用 Jupyter notebook,带有用于图像切割、Canny 边缘检测(针对 Pix2Pix)、图像分类的实用程序等等。

我的固态硬盘中文件夹结构

下一步向何处发展?

至此,CycleGAN 已成为我的艺术家工具包的重要组成部分。即使我开始尝试新类型的 GAN,CycleGAN 仍然是生成管道的一部分:现在我将 GAN 输出连接到 CycleGAN,以便于传统的 CV 技术一起进行去模糊、超分辨率和着色等处理。下面是使用 CycleGAN 将 SNGAN 的输出从 128×128 提高到 512×512 的例子:

你可以现在安装 CycleGAN 并试用一番。我一直在用 CycleGAN 团队的 PyTorch 实现(也可以同样的代价获得 Pix2Pix)。使用 CycleGAN 是一件非常愉快的事情,因为它的代码干净、文档完整、组织良好,而且它的训练仪表板非常出色。

对我来说,这些实验最好的部分就是让我的视觉世界更加丰富,让我更多地观察和欣赏颜色和纹理,让我有了新的灵感和新的项目,促使我更想绘画、摄影。

原文链接:

https://thegradient.pub/playing-a-game-of-ganstruction/

IT思维

IT思维(itsiwei.com)是互联网首个定位在科技与电商“思维”韬略的平台,我们时刻关注互联网电商行业新动向; 诚邀行业资深从业者加入“思维客家族”!

发表留言

Return to Top ▲Return to Top ▲