公众号/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 处理图像四年来的变化(http://u6.gg/faKcY)
使用卷积神经网络进行过图像风格转移(http://u6.gg/faKeN)
使用 Pix2Pix 进行图像翻译的一个例子
https://junyanz.github.io/CycleGAN/
上面提到的所有技术都创造出了如此精彩的艺术,那为什么我最后选择了 CycleGAN 呢?简单地说,CycleGAN 能够让你训练一个网络来使用一个数据集(输入域)的形式转换图像,以获得另一个数据集(目标域)的纹理。这一点很重要:按照计算机视觉先驱 Alyosha Efros 的说法,我们 “仍处于纹理状态”(still in the texture regime.)。
我第一次邂逅 CycleGAN,是因为一个工作项目,我对它的纹理模仿能力深深着迷,所以我想将它重新用于生成艺术。CycleGAN 让你能够以相对较小的数据集进行高分辨率的绘画,而模型可以快速训练——速度非常快!
我的第一个项目是将美食摄影转移成景物花卉素描的风格。每个数据集由 300 到 500 张高分辨率图像组成。在整整一个月的时间里,我只是进行了各种实验,主要是围绕输入数据的裁剪大小。我花了几个小时筛选输出的图像,然后找出那些看起来很有趣的图像。
我的花卉素描变得非常魔幻,饮料的照片也变得有趣了……我的视觉世界爆炸了!最后,我带着一丝惶恐,将这些图像分享给了我的艺术导师。她的反应是:“我对软件一窍不通,但你一定对它很感兴趣,继续吧!”
于是我继续鼓捣。随着我对这个框架越来越熟悉,我继续尝试其他数据集的组合:从花卉素描到花卉图片,从风景写生到风光摄影等等,有些实验失败了,但其他实验则非常成功。
实用建议
以下是几个月来我在使用 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 抓取来获取数据集。但是,我的做法与他们不同:我决定使用我自己的数据集,我指的是我个人照片和绘画。这样的做法有如下明显的优势:
关于我的数据存储库的组织也值得说几句。下面是我融合使用的数据结构和处理管道:
我的固态硬盘中文件夹结构
下一步向何处发展?
至此,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/