基于深度卷积神经网络的图像风格迁移与神经涂鸦系统的设计与实现
基于深度卷积神经网络的图像风格迁移与神经涂鸦系统的设计与实现
【摘要】深度卷积神经网络提取图像特征的机器学习方法目前被应用到各类图像处理问题中,该方法可以很好地识别分析图像,是人工智能领域的一个重要分支。 本文中设计并实现了一款基于卷积神经网络的图像风格迁移系统,可以通过神经表示来分离和重组任意图像的内容与风格,为艺术图像的创建提供了新的算法与算法框架;本文中还实现了神经涂鸦系统作为风格迁移功能的补充,神经涂鸦系统通过使用语义注释及手动创建像素标签的方法提高了生成图像的质量,实现了图像的涂鸦风格迁移。 经测试,风格迁移系统产生的图片很好地获取了风格图片的纹理并保持内容图片的内容完整;神经涂鸦系统也能很好的转换图像的涂鸦风格。
【关键字】 图像风格迁移;神经涂鸦;深度学习;卷积神经网络
【复现论文】 Gatys, L. A. , Ecker, A. S. , & Bethge, M. . (2015). A neural algorithm of artistic style. Computer Science. https://arxiv.org/abs/1508.06576
Champandard, A. J. (2016). Semantic Style Transfer and Turning Two-Bit Doodles into Fine Artworks.(2016). arXiv preprint arXiv:1603.01768. https://arxiv.org/abs/1603.01768
【复现源码】 https://github.com/baobaotql/CCNU_CV/tree/master/style_transfer
1. 背景及现状
过去的图像风格变换系统的主要工作是直接提取风格图片中的纹理,过程是先找出纹理,再通过一系列复杂的算法找到包含纹理的像素,最终把这些像素整合到源图片当中。这一风格变换过程过于复杂,且复用性低。目前卷积神经网络被广泛应用在图像风格迁移工作中,对于图像风格迁移问题,卷积神经网络的特征提取也十分适用。通过卷积神经网络进行的图像风格迁移,是针对源图像的不断优化,使其风格逐渐接近风格图像。这一方法仅需要训练好神经网络模型,就可以复用至其他图像的风格迁移。随着卷积神经网络模型的完善,基于卷积神经网络的图像风格迁移也有了更多的提升和改进。
2. 研究方法
2.1 Neural Style Transfer算法
图像风格迁移功能主要实现算法为Neural Style Transfer算法。Neural Style Transfer算法中的Gram矩阵是比较图像风格的重要参数矩阵。Gram矩阵是一组 n维k个向量的两两内积组成的对称矩阵。向量的内积能够反映向量之间的联 系,因此 Gram矩阵能够反映一组 n维向量组中k个向量之间的两两关系,除此之外,通过Gram矩阵的对角线还能够计算出每个特征向量在图像中出现的数量,公式2.1即为Gram矩阵的计算公式,其中F为从风格图片中提取出的特征矩阵。而在图像风格迁移系统中也正是要应用到Gram矩阵的这一特性。在图像风格迁移过程中,需要不断调整源图像的风格,使其风格逐渐变得相似于风格图像的风格。这一调整风格的过程中,就需要分别计算出源图像和目标图像的特征向量(作为其风格的数学表示),再分别计算出这两组特征向量的Gram矩阵,以减小这两个Gram矩阵之间的差异作为优化目标,对源图像的特征向量进行优化,当这两个图像的Gram矩阵相类似时,就可以认为这两张图像的风格相近。
除此之外,图像风格迁移系统中需要计算损失函数来生成目标图片,损失函数由内容损失和风格损失共同加权构成。其中公式2.2为内容损失计算方法,公式2.3为内容损失函数对生成图像的特征向量求导获得梯度的计算方法,生成的梯度将在误差反向传播过程中作为梯度下降算法的输入,用于对目标图片张量进行优化,公式中p,x表示原始图像和生成图像,表示原始图像的特征向量,表示生成图像的特征向量。
风格损失的计算方法如公式2.5所示,由于卷积神经网络的不同层之间根据深度不同提取特征向量的能力也不同,较深的网络层能够针对整体风格特征进行提取,而较浅的网络层只能提取出简单的局部的特征,只用其中的某一层进行风格特征提取的方法必然是片面的,因此在公式2.5中采用参数来作为权值去平衡这些特征向量的提取。在某一层的特征提取中,选择公式2.4来计算第l层目标图片和风格图片这两个Gram矩阵的差的平方,作为单层的风格损失,最终将各层的风格损失加权得到总的风格损失。在神经网络进行优化迭代的误差反向传播过程中,将利用公式2.6计算出梯度,来进行梯度下降的优化方式。
图像的内容属于较为复杂而抽象的特征,只有在较为高层的神经网络,通过更多的卷积核带来的更强大的特征提取能力来进行提取。而图像的风格的提取也由于包含了从细节纹理到总体风格,需要既参考高层网络提取出的总体特征,也不能忽略浅层网络拥有高层网络所不具有的对像素值的精准把握能力。利用好不同网络层提取特征能力不同这一特点,综合各层神经网络提取的特征并对提取到的各个特征进行加权求和才能获得较为完整的图像风格特征。损失函数的计算是图像风格迁移系统的重要组成部分,有了损失函数的输入,神经网络才能依靠误差反向传播的方式求出损失函数对需要优化的目标图像中各个特征向量的导数,即梯度,依此得出优化后的目标图像。
将风格损失和内容损失都输入VGG19网络中,分别求出风格损失和内容损失函数与像素变量的偏导,得出的结果为梯度。再利用梯度信息通过梯度下降的方式进行反向传播,设置优化器的优化目标为总损失函数最小时目标图片的像素变量来进行迭代,迭代过程中不断改变最初设定的噪声图像,使通过其得出的总损失函数值最小,就得到了优化后的与风格图像特征匹配同时在高层次的总体特征上也与内容图像相匹配的像素变量。
对于图像合成来说,平均池化比最大池化在生成图像的效果上来说更加吸引人。这是由于最大池化舍弃了由图像提取出的不重要特征,而平均池化则顾及到了图像的各个层次的特征。因此最大池化多用于图像识别等需要突出重要特征的图像处理工作,而平均池化的方法则活跃在图像风格迁移等需要提取图像大部分特征的图像处理领域。
2.2 Neural Doodle算法
神经涂鸦算法是由 Alex J. Champandard提出的一种基于风格迁移方式的来将涂鸦转化为完整图片的算法。该算法需要输入一张风格图片来提供将涂鸦变为完整图像的素材,还需要针对输入的风格图片再输入一张以不同颜色对风格图片进行分块的图片作为风格图片的像素标签,再绘制一幅简单的涂鸦并将对应像素标签中各部分的颜色填入涂鸦的各个部分,经过卷积神经网络的训练,能够按照像素标签图片中提供的颜色分块将风格图片也分割成不同的部分,再将每一部分的风格按涂鸦颜色对应地迁移到用户绘制的涂鸦中的分块里,使涂鸦中单一的颜色块能够转化为较为复杂的风格,由此方法将用户绘制的简单涂鸦转化为完整的图片。
进行神经涂鸦工作时,需要对输入的风格图片提供像素标签。其中在实现上较为简单的方式是通过手动绘制的办法在风格图片的不同区域填充一种不同的颜色,进而将风格图片划分为不同区域。而实现起来较为复杂的方法就是利用图像的语义分割算法,通过卷积神经网络或马尔可夫随机场等深度学习方法让计算机识别出风格图像中的不同内容并进行标注,进而获得风格图像的像素标签,再按像素标签生成图片,让用户按照生成图片中色块的颜色来填充涂鸦。对用户来说,使用图像语义分割算法进行绘制比手动绘制像素标签的方式在操作上更简便,识别的内容也更加精准细致,而手动绘制的方式则可以让用户来自己决定将风格图片中的哪一部分的风格迁移至涂鸦中的哪一色块,给予用户更高的自由度来生成想要的图片。
3. 实验结果
3.1 损失函数测试结果
选择随机测试样例作为输入运行系统,观察并比较损失变化趋势,从图3.1、图3.2和图3.3可以发现,在进行大约200次迭代后,图像的各个损失函数都已基本趋于稳定,可以认为生成的图像的效果也已基本定型。而在之后的200次至 1000次迭代中生成的目标图像相比于风格图像和内容图像的总损失变化不大,其生成的图像效果即使只比之前的迭代结果略有提升但目标图像的效果依然能够被不断地优化。因此可以认为当用户使用图像风格迁移系统时,如果用户期望在短时间内生成简单的迁移结果,而不愿耗费更多时间进行等待,则可以将风格迁移系统的迭代次数设置为 200次。而如果用户希望获得一幅迁移得更加美观的图像且不惜等待更长的时间,则可以将风格迁移系统的迭代次数设置为 1000 次甚至 1000 次以上。这样的迭代次数设置方式能够帮助用户在其认为的更合理的时间内获得其希望获得的风格迁移效果。
图3.1 内容损失随迭代次数变化趋势图
图3.2 风格损失随迭代次数变化趋势图
图3.3 总损失随迭代次数变化趋势图
3.2 图像风格迁移测试结果
测试中进行的风格迁移工作为将油画(图3.2(a))的风格迁移到一张风景照(图3.2(b))上,图3.2(c)为进行迭代训练的次数为 50 次后生成的风格迁移结果,图3.2(d)的迭代次数为 300 次,图3.2(e)的迭代次数达到了 1000 次。对比 3.2 (c)、3.2 (d)、3.2 (e)三图,在迭代次数较少的图片中,出现了内容图片和风格图片中都没有的像素乱码,而在迭代次数较多的图片中这一现象得到了改善。观察迭代 1000 次后输出的图片不难发现,油画的风格较好地融入了风景图中,不仅油画中的橙色等风景图中没有的色彩出现在了风景图中,而且油画风格的纹理在结果图中也有所体现,而风景图上的原本内容则得到了很好地保留,树和围栏等物体在结果图上都仍能找到。
3.3神经涂鸦测试结果
针对神经涂鸦系统进行的一组测试为以输入的涂鸦图片(图7.3(c))生成一张风景图片。图片3.3(a)为输入的风格图片。图3.3(b)为该风格图片的像素标签,需要注意使不同区域间的颜色反差较大来防止使kmeans聚类时将像素标签上相近的颜色是为同一类颜色。 结果图3.3(d)为迭代200次的结果。
对比图 3.3(a)(b)(c)(d)四图可以发现,通过输入图3.3(b)这一对风景照的简单涂色覆盖,系统很好的采集了图3.3(a)所示的风景照中的大致划分出的 4种风格,并通过输入的图3.3(c)中的涂鸦对目标图片进行分区,将风格图片中各分区的风格对应迁移到了目标图片中。由于进行涂色覆盖产生的像素标签较为简单,没有细致分割出图3.3(a)天空中的云和海水中日光的倒影,图 3.3(d)所示的目标图片的画面中的海水和天空有一定程度的模糊,但山和海岸的迁移效果不错,整体的画面也很符合涂鸦中的绘制。总体来说神经涂鸦系统的输出结果取决于遮罩图片和涂鸦绘制的细致和精确程度,但只要这两张图片的涂色符合输入规定就能够获得良好的输出结果。
4. 结论
本文设计并实现了一个基于卷积神经网络的图像风格迁移与神经涂鸦系统,输入测试用例均得到较好的图像风格迁移结果与神经涂鸦结果。
在神经涂鸦中我们通过手动编写与像素标记的方法对输入图片进行注释,同时加入卷积神经网络利用标注信息将图像分割与图像合成联系起来。实际上神经涂鸦是图像风格迁移的延伸,实现了在模块化上的良好复用。在今后的系统优化中可以考虑将图像语义识别功能加入神经涂鸦系统,这样可实现从涂鸦到图片的完整过程