使用深度网络创造艺术:CAN, creative adversarial networks

来源:互联网 发布:宝日龙梅 知乎 编辑:程序博客网 时间:2024/05/20 16:40

1. 论文信息

论文名称:CAN: Creative Adversarial Networks, Generating “Art” by Learning About Styles and Deviating from Style Norms
发表在:the eighth International Conference on Computational
Creativity (ICCC), held in Atlanta, GA, June 20th-June 22nd, 2017.
原文链接:https://arxiv.org/abs/1706.07068

2. 成果展示

先放一些最终成果,都是使用机器生成的作品(个人觉得还是比较成功的,毕竟只要有几个看上去差不多的作品就很厉害了):
result1
result2

3. 模型简介

文章主旨其实是通过更改GAN(生成对抗神经网络,Generative Adversical Networks)的目标函数来学习生成style融合的艺术作品。

3.1. 艺术的探讨

一句话总结即为:论文中通过引用许多心理学方面的结论,把艺术(create art)的合格性、有效性和arousal(觉醒度)做关联,不能太无味,又不能太刺激;进而对觉醒度做分析,认为画风(style)融合可以很好的增强模型的觉醒度。
论文首先在Introduction的部分探讨作画过程:1. 画家肯定要吸收观看其他的作品(为模型中使用艺术品数据库做铺垫)2. 一个有创造性的画家是尽量增加作品的arousal potential(能够给观赏者带来的潜在觉醒度),并且增加的不能过多,遵循least effort原则。3. 画风突破具有重要作用。
然后又在2.1. Background部分对Arousal展开,先给了arousal的定义(困倦、放松的时候arousal低,暴怒、激动的情况下arousal高);然后解释了arousal potential源于novelty, suprisingness, complexity, ambiguity and puzzlingness,并对几个概念展开;又再次引入了least effort的原则,并使用Wundt curve佐证。
通过一系列的心理学结论的引用和推导,最终说明了学习生成画风(style)融合的作品可以产生艺术品。

3.2. 对抗生成网络,GAN

回忆GAN的功能,是输入一堆数据,然后通过学习使得模型能够生成和输入数据分布大致相同的数据。具体地,GAN分为两个部分,分别是生成器(Generator,G)和判别器(Discriminator, D)。生成器的作用就是生成数据,通过学习尽可能是生成的数据和原数据分布相同;判别器则是用于判断输入数据是原有数据集内部的,还是使用生成器生成的。一个笔者比较喜欢的比喻是:可以把生成器看做假币制造工厂,而判别器看做验钞机/警察;那验钞机的任务就是区分真币和假币,而假币制作工厂的任务就是制造出难以被验钞机识别的假币;可以想象,随着验钞机的不断更新换代(采用更加先进的技术等等),假币制造工厂生产的假币变得难以流通,从而迫使假币制造工厂制造出更好的假币来鱼目混珠,进而迫使验钞机继续更新自己的技术去区分真币和更厉害的假币;这个互相竞技的过程最终会结束,即假币和真币已经一模一样的时候,验钞机变得再也无法区分真币和假币;而此时假币制造工厂已经可以制造出和真币一模一样的假币,任何其生产的货币都可以看做真币。论文中将这种关系比作两个玩家(G和D)的竞技过程,GAN论文中验证了该游戏存在一个纳什均衡的解(即G产生的数据和输入数据分布相同)。(但是由于GAN的难以训练和神经网络本身使用SGD只能求取近似解等特性,使得其效果差强人意,这也是很多论文加以改进的点)
在本问题里面,论文中认为GAN在理想情况下只能学习生成和原有作品集内部一样的作品,不具有新颖性,从而arousal potential不够,进而不能产生艺术品。论文中称GAN的结果为Emulation(模仿)。

3.3. 创意生成网络,CAN

论证了GAN的不足之后,就需要对其进行修改。修改的方向即为增强生成作品的arousal potential,而论文中采取的方法即为增强生成作品的画风融合程度。
model
具体模型如上图,注意到与GAN相同,其大概可以分为生成器(Generator, G)、判别器(Discriminator,D)和损失函数(Loss)三个部分。最终需要使用的部分只是生成器,所以我们从生成器开始看起。神经网络训练都需要有损失函数指导,从而计算梯度值,进而利用梯度值对权重矩阵进行更新,进行学习。蓝色线表示的就是Generator使用的损失函数,分为两个部分:是否为艺术品(Art/Not art)和画风融合的程度(Style Ambiguity)。已经存在和GAN不同的地方了,原有GAN只使用第一个部分作为损失函数,从而学习到都是和原数据分布相近的生成数据;而CAN中加入了Style Ambiguity从而要求生成器生成的数据还要尽可能的对style进行融合。而Style Ambiguity的衡量不是使用某种定死的损失函数,是通过学习一个对画风(style)进行分类的神经网络(Art-style classification)来得到的,而这个部分就是属于分类器学习的部分。
综上,CAN里面的判别器部分学习两个分类器:是否为艺术品(Art/Not art)、画风分类(Art-style classification)。而这两个部分可以指导生成器生成和输入艺术品近似的数据(Art/Not art),并且难以判别具体的画风(Style Ambiguity)。

4. 技术细节

4.1. CAN的损失函数

回顾GAN的损失函数为:
GAN loss
这两项其实(Art/Not art)分类器指导的。
而CAN的损失函数为:
CAN loss
注意到损失函数中对于原有数据集的部分加入了正确分类的概率Dc(c=c^|x);而生成的数据G(z)的部分加入了Dc与uniform分布的交叉熵。分别对应于(Art-style classification)和(Style Ambiguity)。
对于(Style Ambiguity)的衡量,论文比较了entropy和cross entropy两种方式,两者曲线如图(蓝色为交叉熵,红色为熵):
entropy
发现两者的趋势大致相同,即都对接近于0或1的概率做惩罚;但是可以看到交叉熵对于0或1的惩罚力度远大于熵,从而可以期待更加难以区分类别的结果。

4.2. CAN的模型结构

分类器模拟的是DCGAN,为多层deconv的结合,如下图中文字所示:
Generator model
判别器包括两个分类器,分别是(Art/Not art)和(Art-style classification)。这两个判别器共享CNN部分,为六层使用Leaky ReLU的卷积层;然后两个分类器对应于CNN输出之后接的两个头:(Art/Not art)为一层全连接,输出概率;(Art-style classification)为三层全连接,最后输出各个类别的概率。具体如下图所示:
Discriminator model

4.3. CAN的训练算法

algorithm
基本算法如上。和GAN相同,都是分别对判别器部分和生成器部分进行训练,然后不断迭代。判别器部分对原始数据使用loss_d_1指导,对应于期待两个分类器都得到较好的效果;而对于生成器生成的数据则使用loss_d_2指导,对应于期待分类器可以识别出输入是由生成器生成的。而生成器的部分则是使用
loss_g
指导,对应于期待生成器生成的样板能够不被判别器区分出是假的,并且类别判断也要尽可能模糊。

4.4. CAN的实现细节

包括初始化、模型设计技巧、优化算法、数据增广等等。
details


大多数和CAN模型相关的部分都在前面描述完毕,后面就是一些模型比较、作者思考等部分,可以选择性跳过。

5. Baseline模型

论文中还提到了三种基础模型,用于模拟GAN的效果。具体地,分别是完全模拟GAN,但分辨率不同的前两个模型,Art-trained-GAN 64x64和Art-trained-GAN 256x256;以及加入了类别判断分类器,但不用于指导生成器的模型,style-classification-CAN。三种模型的实验结果由上到下如下图所示:
baseline model
可以看出从上到下,结果逐渐变好;第二个模型已经可看出对比度、形状、纹路等等;第三个模型已经可以看到可以识别的物体场景等等。(须注明这些图片都是人为挑选出来的结果)
比较第一个和第二个模型,第二个模型更改了生成器的部分,增加了两层deconv,使得生成的图片分辨率增强(同时模型参数也增加了),但得到的结果反而更好了。(笔者一直工作在小数据集上,所以忽略了模型复杂度不足也有可能导致较差的实验结果,所以觉得这个还是有必要注明一下。)
第三个模型对比于第二个模型,增添了一个画风分类器,具体描述如下:
style-CAN
可以看到,对于生成器模型来说,仍然是被Dr影响指导,但最终结果却变好了。说明判别器里面的Art/Not art分类器的性能增强了,而这个增强是通过加入Dc实现的。也就是说虽然原问题里面没有涉及画风信息的部分,但是通过使得DrDc两个分类器共享卷积层,然后训练Dc,也提高了Dr的性能。这就为融合数据库内的多种信息提供了道路(即便该信息与原问题无关,可以看做是迁移学习的一种)。

6. 比较值得借鉴的部分

  1. 设计损失函数很巧妙,提到了entropy和cross entropy的区别。
  2. 因为设计损失函数过程是有的放矢,所以训练过程也只使用有效部分:判别器训练的部分没有加入对画风融合交叉部分的损失,从而使得判别器可以专注于区分画风(/区分画风的部分不能受生成数据的影响)。
  3. 复杂模型可以得到比简单模型更好的效果,取决于具体问题形成的关卡位置(64x64 GAN的结果反而差于256x256 GAN的结果)。
  4. Leaky ReLU的应用,有时间可以看看相关论文
  5. 即使只是想要学习到和原数据相似的分布,但对于额外信息也可以通过训练两个权重共享的分类器来融合信息,改善结果:比较Art-trained-GAN 256x256和style-classification-CAN模型,发现后者相比于前者的改变在于为判别器添加了一个新的分类器,Art-style classification;而这个分类器和Art/Not art分类器是共享CNN层的权重的;最终指导生成器的只是Art/Not art的分类器,在不共享权重的情况下,添加一个新的分类器对生成器没有影响;但因为共享权重,所以通过训练Art-style classification分类器,为判别器加入画风这个额外信息,并且通过共享权重进行了融合;训练Art-style classification分类器使得Art/Not art的分类器结果更好,进而改善分类器的效果。
阅读全文
2 0
原创粉丝点击