作者|浩克匠心(邮箱:arctanxy@126.com) 作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作卷积神经网络风格迁移。 这不是“暮光女”克里斯丁的研究方向吗?!连好莱坞女星都开始搞人工智能发paper,真是热的可见一斑! 这篇文章中讲述了如何用深层卷积神经网络来将一张普通的照片转化成一幅艺术风格的画作(比如梵高的星夜),可以看做是DL(deep learning)在NPR(非真实渲染non photography rendering)领域的一次革命(不难想象以后DL这种跨领域的革命会越来越多)。 论文地址:A Neural Algorithm of Artistic Style 算法解析 (对算法不感兴趣的童鞋,可以直接跳过这一部分,看最终实验结果) 【总流程】 如上,a有个别名是 首先他定义了两个loss,分别表示最终生成的图x和style图a的样式上的loss,以及x和content图p的内容上的loss,α,β是调节两者比例的参数。最终的loss function是两者的加和。通过optimize总的loss求得最终的x。 所用的CNN网络是VGG-19,利用了它16个卷积层和5个pooling层来生成feature。实际指的是Conv+ReLU的复合体。 当然,使用其他pre-trained的model也是完全可以的,比如GoogLet V2,ResNet,VGG16 都是可以的(作者这哪是以VGG19为例)。 【内容损失函数】
求内容损失函数梯度下降如下: 【风格损失函数】
【总损失】 实验结果 下面是内容图,风格图,以及迭代10次,100次,500次,1000次,10000次,10万次的计算结果及分析: 【原图】 原图片如果尺寸过大,导致input层的batch size过大,会大大增加程序计算量(从而延长计算时间),容易引起程序不稳定,而对最终效果并没有明显提升,因此建议把图片尺寸尽量缩小(在像素不失真的前提下),推荐值:800 ppi x 600 ppi. 【风格图】 风格图不需要和内容图尺寸一致。可以适当裁剪,保留风格最突出的部分。 【迭代10次】 由于原始的输入是一张白噪声图片,因此,在迭代次数较少时,仍然没有形成内容图的轮廓。 【迭代100次】 天安门的轮廓初现 【迭代500次】 已经基本接近最终效果,既能看到天安门的形状,又有梵高“星夜”的线条风格和颜色搭配。 【迭代1000次】 500次到1000次,画面构成的变化已经不剧烈,基本趋于平稳。 【迭代500次,重复执行三次】 重复计算了三次,使用相同的图片,相同的卷积神经网络模型,相同的迭代次数(500次),却得到了区别明显的三张结果图。这是非常有意思的地方! (a) (b) (c) 最近看完一本书,叫《随机漫步的傻瓜》,主要讨论随机性这个概念,随机性中隐藏着不可预测的风险,也蕴含着无限的可能性。没有随机变异,生物进化可能还处在单细胞阶段。 如果计算机只是一个工具,让它解一个方程组,如果已知数确定,计算条件确定,无论计算多少次,结果都是同一个。 这个例子中,结果出现了差异,说明这个系统中一定有随机的成分存在。 机器学习中随机性出现的部分通常如下:1. 训练样本的乱序操作;2. 随机梯度下降;3. 模型随机赋初始值。 本例中还多一条:初始输入的白噪声图像是随机生成的。 【迭代10000次】 可以看到画面右上部分,内容渐渐丢失,呈现灰色化。 推测原因:由于卷积神经网络中的若干pooling层,实际是对图像进行了均值处理,导致了边缘细节的丢失。 pooling层示意图: 那么,迭代100000次是什么样子的呢? 【迭代十万次】 画面朝着两极化趋势发展,灰色区域更加暗淡,彩色区域更加明亮,两者之间的界限更加分明,失去了过渡。 End. 2017 鸡 年 大 吉 HAPPY NEW YEAR |
|