神经绘画的喜悦
快速学习神经画家!使用pytorch和fast.ai
-
博客文章提供更多详细信息:神经绘画的喜悦
-
该实现在一组笔记本中分解,以减轻探索和理解
-
这种神经画家的实施是集体杜鹃花在Cueva画廊的Art+AI收集剩余的核心技术。
我敢肯定,您知道鲍勃·罗斯(Bob Ross)和他的节目《绘画的乐趣》(Taking of Painting),他教成千上万的观众如何以一种简单而有趣的方式绘制美丽的风景,结合颜色和笔触,以很快取得出色的成果。您还记得他教授当时如何绘制像素吗?当然不是!
但是,当前的大多数生成AI艺术方法仍然集中在教机中如何在像素级“绘画”以实现或模仿某些绘画样式,例如基于gans的方法和样式转移。这可能是有效的,但不是很直观,特别是在向熟悉颜色和笔触的艺术家解释这一过程时。
在Libre AI,我们已经开始了一项创意AI计划,其目标是使AI的进步更容易成为不一定具有技术背景的艺术家团体。我们想探讨如何通过创意人与创意机器之间的互动来丰富创作过程。
作为第一步,我们需要教一台机器如何绘画。它应该学会像人类一样绘画:使用笔触和在画布上结合颜色。我们研究了最先进的作品,尽管做了出色的作品,但实际上并没有一张纸来满足我们的要求,直到我们找到神经画家:雷伊希罗·纳卡诺(Reiichiro Nakano)生成的笔触绘画的一种有学到的可区分约束[1]。这一发现令人耳目一新。
修补神经画家
神经画家[1]是一类模型,可以将其视为对特定非差异绘画程序的完全可区分的模拟,换句话说,通过连续生成笔触(即,定义了笔触的动作)来“绘制”,并将它们应用于canvas,就像一名艺术家一样。
作者在此Github存储库中可用的一系列Google的合作式笔记本中提供了可用于复制实验的代码,并且使用的数据集可在Kaggle中获得。该实现使用TensorFlow,这在性能方面非常好,但是让我们面对现实吧,消化Tensorflow的代码(特别是没有Keras;)并不是很有趣。
教学机是学习机器学习的最佳方法 – Ed A.
我们玩了提供的笔记本,它们对于理解论文并生成精美的样品绘画非常有用,但是我们决定为了真正学习并掌握神经画家,我们需要通过我们自己的实现来实验和复制论文的结果。为此,我们决定将Pytorch和Fast.AI作为深度学习框架而不是TensorFlow作为论文的参考实现,以进行一些修补,并希望在此过程中提供更易于访问的代码。
更快地学习神经画家
甘斯是出色的生成模型,但众所周知,它们很难训练,特别是由于需要大量数据,因此需要大量的GPU计算能力。他们需要大量的训练时间,并且对小型高参数变化敏感。确实,我们确实在论文之后尝试了纯粹的对抗训练,但是尽管我们通过实施获得了一些不错的结果,但就笔触质量而言,使用了一两天的时间,只需一两天才能使用一个GPU使用合同的笔记本和完整的数据集到达那里。
为了克服这些已知的gan限制并加快神经画家的训练过程,我们利用了转移学习的力量
转移学习是机器学习中非常有用的技术,例如,受过分类器训练的成像类模型在很大程度上被用作强大的图像特征提取器,在NLP,单词嵌入中,学习的无监督或最少的监督(例如,试图在同一上下文中预测单词),在更复杂的语言模型中非常有用。在推荐系统中,可以通过协作过滤来学习项目(例如,书籍,电影,歌曲)或用户的表示形式,然后不仅将其用于个性化排名,还将其用于自适应用户界面。基本的想法是在任务上学习模型或功能表示,然后将知识转移到另一个相关任务,而无需从头开始,只进行一些微调以调整该任务的模型或表示参数。
更确切地说,由于甘恩主要组成部分是生成器,批评家的想法是独立预培训,这是以非对抗性的方式进行的,并在预训练后将其连接在一起并进行对抗性培训,即进行对抗性培训,即gan模式。该过程已显示出出色的结果[2],并且是我们在这里遵循的结果。
主要步骤如下所述:
-
使用特征损失(也称为感知损失)预先训练发电机,例如,例如,损失非对抗性损失。 (01_neural_painter_x_training_generator_non_adversarial.ipynb)
-
冻结预训练的发电机重量
-
使用预训练的发电机(在带有冷冻模型权重的评估模式下)将评论家作为二进制分类器(即非对抗性)预先培训。也就是说,评论家应该学会区分真实图像和生成的图像。此步骤使用标准的二进制分类损失,即二进制跨熵,而不是gan损失。 (02_neural_painter_x_training_critic_non_adversarial.ipynb)
-
进行对抗训练的转移学习(GAN模式) :在GAN环境中继续发电机和评论家培训。快点! (03_neural_painter_x_training_gan_mode.ipynb)
让我们油漆: 04_neural_painter_x_painting.ipynb
详细详细:
(1)预先培训发电机,具有非对抗性损失
训练集由标记的示例组成,其中输入对应于动作向量以及相应的笔触图像与目标。输入动作向量通过发电机,该发电机由完全连接的层(增加输入维度)和连接到其连接的深卷积神经网络组成。发电机的输出是笔触的图像。图像之间计算的损耗是[3]中引入的特征损失(也称为感知损失[4])。该过程如图1所示。
图1。使用(非对抗性)特征损失预先训练发电机。
(2)冻结预训练的发电机
在使用非对抗性损失的发电机预训练后,笔触看起来像图2中描绘的损失。生成了一组笔触图像,这将帮助我们在下一步中预先培训评论家。
图2。从发电机进行的样品笔触,并通过非对抗性损失进行了预训练。
(3)将评论家作为二进制分类器预先培训。
我们将评论家训练为二进制分类器(图3),也就是说,评论家已经预先训练了识别真正与生成的笔触图像的任务(步骤(2))。我们使用的是二进制交叉熵作为此步骤的二进制损失。
图3。将评论家作为二进制分类器预先培训。
(4)对抗训练的转移学习(GAN模式)
最后,我们继续在GAN环境中进行发电机和评论家的培训,如图4所示。最后一步要快得多,比从头开始训练发电机和批评家。
图4。转移学习:继续在GAN环境中继续进行发电机和评论家培训。快点。
可以从图2观察到,预训练的发电机正在做一个不错的工作学习笔触。但是,与数据集中的真实笔触相比,仍然存在某些缺陷。
图5显示了在完成在训练阶段中获取的知识后完成单个GAN训练时发电机的输出。我们可以观察到如何更精致的笔触,尽管与真正的笔触略有不同,但它们具有有趣的纹理,这使得它们非常吸引您的笔触绘画。
图5。对抗训练(GAN模式)后,发电机的样品笔触。
从笔触到绘画
发电机训练过程完成后,我们将拥有一台能够将动作向量转换为笔触的机器,但是我们如何教机器像鲍勃·罗斯(Bob Ross)的学徒一样绘画?
给定一个灵感的输入图像,例如,一张美丽的风景照片,机器应该能够为该图像创建笔触绘画。为了实现这一目标,我们将冻结发电机模型的权重,并学习一组动作向量,当输入发电机会产生笔触时,一旦结合起来,它将产生这样的绘画,看起来应该与给定的图像相似,但当然是绘画:)
神经画家论文[1]引入了一个称为固有样式转移的过程,精神与神经风格转移相似[6],但不需要样式图像。直观地,内容输入图像和神经画家产生的特征应相似。使用VGG16 [7]网络作为特征提取器提取图像功能,在图6中表示为CNN,该特征描绘了整个过程。
图6。使用固有样式转移的神经画家绘画。
请注意,优化过程是针对学习动作的张量的,而其余的模型权重没有更改,即神经画家和CNN模型的权重。我们使用与以前相同的功能损失[3]。
笔记
- 为了将笔触混合,我们遵循一种线性的混合策略来将产生的笔触结合在画布中,在一个非常好的帖子中详细描述了这个过程,标题为“教学代理人”,以在他们自己的梦中绘制Reiichiro Nakano [5]。我们目前正在探索一个替代过程,该过程使用Alpha通道进行混合。
致谢
我们要感谢Nakano Reiichiro Nakano在实施神经画家以及他的支持和鼓励的评论和反馈时帮助我们澄清了疑问。非常感谢Reiichiro! @reiinakano。
参考
[1]神经画家:用于产生笔触绘画的一种学到的可区分约束。 Reiichiro Nakano Arxiv预印型ARXIV:1904.08410,2019。Github repo。
[2]降低,去淘金和超级分辨率。 Jason Antic(Deoldify),Jeremy Howard(Fast.ai)和Uri Manor(Salk Institute)https://www.*fa**st.ai/2019/05/03/decrappify/,2019年。
[3] Fast.AI MOOC第7课:从头开始重新注册; u-net;生成(对抗)网络。 https://course.f***ast.ai/videos/?lesson=7;笔记本:https://nbviewer.jupyter.org/github/fastai/fastai/course-v3/blob/master/nbs/nbs/dl1/lesson7-superres.ipynb [访问:2019-08]
[4]实时样式转移和超分辨率的感知损失。贾斯汀·约翰逊(Justin Johnson),亚历山大·阿拉希(Alexandre Alahi),li fei-fei https://arxiv*.*org*/abs/1603.08155,2016
[5]教代理人在自己的梦中画画。 Reiichiro Nakano。 https://*r**eiinakano.com/2019/01/27/world-painters.html,2019年
[6]一种艺术风格的神经算法。 Leon A. Gatys,Alexander S. Ecker,Matthias Bethge。 https://*a*rxiv.or*g/abs/1508.06576,2015
[7]非常深的卷积网络,用于大规模图像识别。 Karen Simonyan,Andrew Zisserman。 https://a*rx**iv.org/abs/1409.1556,2014
