摘 要:传统的图像风格迁移程序通过人工建模只能局限于单一风格迁移,且资源消耗过大。2015 年jatys 等提出了一种基于卷积神经网络的图像风格迁移算法,通过这一种算法便能生成各种具有原内容和新风格的合成图像。文章利用深度学习算法,对卷积神经网络模型和风格迁移算法进行图像风格特征提取的研究,在MXNET 深度计算引擎上开发图像风格迁移系统(Stvler),将一副图像的风格迁移到另一副图像,其成果可应用到设计、娱乐和社交等领域。
关键词:深度神经网络:图像风格迁移;卷积神经网络:VGG-19 模型
中图法分类号:TP391文献标识码:A
1 引言
艺术源于人类对生活情趣的探索,它的价值在于人类的审美意识。随着时代的进步与发展,现代人的基本物质需求已经得到了满足。所以,大多数人会通过追求艺术享受来丰富自身经历、提升生活品质。即使大部分艺术在生活中都不具备实际的功能性,大多数人却还是会爱上各种各样的艺术,甚至在有些人的心中,艺术有着不可代替的地位。从古至今,艺术绘画大师的作品吸引着千千万万的人。人们渴望自己也能够拥有同样艺术风格的图像,图像风格化这一概念由此诞生。
然而,绘制风格图像需要大批相关技术人员,并损耗大量资源。20 世纪90 年代,科研人员相继提出大量风格化算法来完成图像风格化的任务。传统图像风格化算法多采用人工建立数学和物理模型的方式来模仿图像风格,即一种图像风格对应一个数学或统计模型。这样做出来效果是不错的,但一个程序基本只能做一种风格或者只针对一个场景,程序的适用范围过于局限。本选题基于深度神经网络来解答人类如何创造和感知艺术意象并实现图像风格迁移。这样一来,用一种算法就可以实现从任意图像中提取风格并将其应用于内容完全不同的其他图像中。
2 系统总体结构设计
本系统主要包括图像输入、图像预处理和图像后处理、图像特征提取、损失函数定义、合成图像创建、模型训练6 大模块。本系统的第一步是在图像输入模块中输入内容图像和样式图像,读取任意图像后需要进行图像预处理和后处理,通过标准化处理来增强系统图像兼容性。第二步是利用VGG⁃19 网络模型的某些层来抽取内容和样式特征。第三步是定义损失函数。内容损失对比保留原始图像,样式损失对比合成样式图像,而总变差损失则优化减少合成图像中的噪点(图像颗粒感)。第四步是创建和初始化合成图像。第五步就是通过迭代来训练模型最终输出合成图像。总体结构设计如图1 所示。
其中,基于VGG⁃19 卷积神经网络的迁移方法过程如图2 所示。图中输入的内容图像为作者在旧金山渔人码头附近的街道拍摄的照片,输入的样式图像是一幅内容为树木的油画。最终输出的合成图像内容还是街景,但是样式融入了油画笔触,同时整体颜色也更加饱满鲜艳了。
3 系统实现
3.1 圖像输入模块设计
导入程序相关的包和模块,例如d2lzh,mxnet 以及time,然后调用函数分别读取任意大小与尺寸的内容图像和样式图像,获取图像的尺寸和大小。
3.2 图像预处理与后处理模块设计
设计preprocess 函数并对输入图像进行预处理,将RGB 3 个通道分别进行标准化,使其变成卷积神经网络所接受的输入格式。设计postprocess 函数后处理输出图像,把图像的像素值还原回标准化之前的格式,以方便正确输出图像。输出图像用打印函数来表示,该函数要求每个像素的浮点数值在0~1 之间,所以clip 函数用来剔除非0~1 的数(小于0 的数取0,大于1 的值分别1)。其中rgb 均值是在imageNet 数据集上学习到的。
rgb_mean = nd.array([0.485, 0.456, 0.406]
rgb_std = nd.array([0.229, 0.224, 0.225])
def preprocess(img, image_shape):
img = image.imresize(img, ∗image_shape)
img = (img.astype('float32') / 255 - rgb_mean)/ rgb_std
return img. transpose ((2, 0, 1)). expand _ dims(axis=0)
def postprocess(img):
img = img[0].as_in_context(rgb_std.context)
return (img.transpose((1, 2, 0)) ∗ rgb_std +rgb_mean).clip(0, 1)
3.3 图像特征抽取模块
本项目使用Gatys 提出的VGG⁃19 网络来抽取图像特征。