基于卷积神经网络风格迁移在iOS上的应用
2019-12-05罗可昕
罗可昕,邢 晨
(浙江水利水电学院 信息与艺术工程学院,浙江 杭州 310018)
0 引 言
图像风格迁移,就是把图像A的风格迁移到图像B中去,得到新的图像C。其中C中既包含图像B的内容,也包含图像A的风格。这项技术,已经运用在我们的日常生活中,像prisma,style2paints,neuralstyler,ostagram等照片编辑软件就是运用神经网络和风格迁移,把普通的照片变成其他艺术风格,从而实现艺术价值的提升。
在人工智能深度学习实现之前,人们通常利用图片纹理手动建模来实行风格迁移,这样合成的图片往往要根据不用的场景而改变,且人工建模成本巨大。这种方法在提取图像底层特征时,因只能提取颜色、纹理和形状这几种特征组合,所以最终合成的图片效果十分粗糙,不能很好的满足人们更高的艺术需求,同时该方法合成效率较低[1]。随着深度学习的兴起,GATYS等人提出了利用VGG卷积神经网络进行风格迁移[2]。该方法的核心是利用卷积层提取内容图像和风格图像的中间特征值,借助梯度下降算法,利用这些特征值来合成新风格的图像[3]。
如图1所示,图1(a)的内容图像是埃菲尔铁塔,图1(b)的风格图像是蒙克的名作《呐喊》,图1(c)是由计算机生成的一张新的图像,既保留了埃菲尔铁塔建筑的形状信息,也兼具《呐喊》风格的图片。本文基于Johnson[4]等人提出的快速图像风格迁移方法实现了基于VGG网络的图像风格迁移,再运用Apple公司提供的转换工具coremltools导出成iOS支持的coreML格式,帮助用户可以在移动端短时间内实现图片风格迁移合成的目的。
图1 图像风格迁移展示
1 图片风格转换算法
1.1 基于神经网络的风格迁移
为了计算不同过滤器通道之间的相关性,通过计算两个过滤器激活向量之间的点积,得到gram矩阵,公式为:
Gl∈RNl×Nl
总风格损失为:
代价函数公式可以表示如下:
1.2 快速迁移风格
前文提到的算法每当生成一张图片时都需要进行一次风格迁移训练,整个过程比较耗时。2016年,斯坦福大学的JOHNSON等人提出了快速风格转移算法,只需要训练一个网络模型就可以对任意一张图片进行风格迁移。快速转移算法包含两个网络。一个为图片转换网络(image transform network),一个为损失网络(loss network)[4]。图片转换网络是一个多层卷积神经网络,它将一张输入的原始图片转换成为一张生成图片。损失计算网络是一个VGG-16网络,用于计算图片转换网络生成图片对于输入的风格图和原图之间的损失大小。该算法在训练阶段利用大量内容图片进行训练以得到某个风格特定模型,在测试阶段将将内容图片经过模型就能实时得到一张经过该风格渲染之后的合成图片[7]。
如图2所示,图像S为风格图像,C为内容图像。图片X为需要进行风格迁移的图像,将其丢入网络F进行风格迁移。K表示风格迁移后的图片,即风格迁移的结果图。右侧是一个已被训练好的VGG-16网络,它能够很好地提取输入图像的内容特征和风格特征,当S、C以及K被输入后,该网络将提取它们的特征用于计算左侧网络对X进行风格迁移后的损失[8]。
图2 快速风格迁移网络模型
基于同一风格,如果运用GATYS的模型进行图像风格迁移,每生成一张图片,就相当于要训练一次模型,这中间可能会迭代几百几千次,会造成图像制作成本和效率上的不足。而运用JOHNSON的网络技术模型,在进行图片风格转换时,相对GATYS的模型,生成图的速度快上三个数量级。原因在于:快速风格迁移又重新训练了一个神经网络,如图2风格迁移网络F,这个网络是一个深度残差网络,每当向该网络输入内容图像训练集,通过计算生成图与原图的内容损失以及生成图与风格图的风格损失大小来判断生成图的质量。通过不断迭代计算来减少损失,反向传播到图片转换网络并对其进行优化,最终得到合格的图片风格转换模型。训练完成后,只需要输入任意的图像x在风格迁移网络中前向传播一次,便可在几秒内内合成出一张不错的风格迁移图像;而GATYS等人提出的风格迁移方法中不存在一个如图2所示的风格迁移网络F,只存在图2的右半部分,其中,K为一张白噪声图,对内容图c与风格图s进行合成的过程即是通过不断地迭代K来减小风格迁移损失的过程,迭代结束后,y便为合成后的图像。而我们每次对一张图像进行风格迁移都需要经过这样的步骤,这无疑会耗费大量的时间。
2 实现在iOS系统上的应用
2.1 Core ML简介
通常情况下,开发人员可以应用python开发web service来实现客户端。但自从iOS 11在2017年推出新的机器学习框架core ML之后,开发者可以直接通过core ML将已经训练好的机器学习模型集成到应用程序APP中。本文使用了Apple公司提供的一个跨框架机器学习模型,既MLModel。它可以协助开发者封装机器学习模型的预测方法、配置和模型描述。一个MLModel文件通常情况下会包括输入、输出、模型各层的描述三个方面,用户将数据封装成为输出文件并交付给MLModel,模型会进行结果预测并输出预测结果的输出文件,而后再将预测的结果转换成为使用者需要的数据类型。
2.2 系统功能的实现
本文利用python和tensorflow。首先,把输入的图像调整成预定的格式和大小。首先定义了一个内容损失和风格损失,前者为风格图像和输出图像之间的距离,后者为输入图像和输出图像之间的距离。然后运用定义的总损失函数来创建优化器[9],具体流程图(见图3)。
图3 定义损失函数流程图
当设置了内容损失,风格损失和总损失函数之后,就可以将风格转移过程转化为优化问题。为了最大限度地减少全局损失,本文采用一张随机生成的白噪声图片进行训练,迭代更新风格化图像[4]。在每次迭代中,将会创建一个输出图像,以便最小化相应像素输出图像和输入图像样式之间的距离(差异)[10]。最后输出可视化图像,具体流程图(见图4)。
为了获取最好的模型效果,本文选择了不同迭代次数来获取风格图片,为了防止出现过拟合与欠拟合的现象(见图5)。
如果直接在手机上运行模型,将会消耗大量的手机内存,且用户等待时间较长。所以本文选择用apple公司提供的core ML框架来封装已经训练好的模型,以提高执行效率。通过导入core ML tools转换器,并根据对应模型的第三方工具包converters.caffe.convert,将已经训练好的模型通过调用转换器工具将结果保存为core ML模型格式(.mlmodel),大致流程图如图6所示。然后在xcode上集成,实现其他相关视图组件。
图4 训练过程流程图
图5 不同迭代次数后得到的风格图
图6 MLmodel结构
用户能够通过该APP从相册或者拍照获取图片,将该照片裁剪成预设图片格式大小,之后利用选择的风格模式在后台进行风格转换,最后将结果图返回给用户。
2.3 系统功能测试
在对移动端进行测试时,选择电脑配置为处理器1.6 GHz Intel Core i5+4 GB内存+1 600 MHz DDR3,并且选择xcode9.2版本,iPhone 8plus,iOS系统为11.1为移动客户端进行测试。对传入的图片进行测试时,能在2 s内获得风格迁移图片,测试结果(见图7)。
图7 图像合成结果
3 结 语
本文实现了在python中运用tensorFlow进行神经风格迁移的算法,并成功运用到移动端上。但因为系统后台迭代的次数是已经确定的,所以生成的图片偶尔会迁移过度或者迁移风格不够的情况,还需改进。通过相关实验测试,此方法能够在iOS系统的手机实现较好的风格迁移效果。