在Prisma的应用下载评论区看到这么一句好玩的话:世界一半人在用《PokemonGO》抓精灵,另一半人在用这个软件修图。
图像编辑软件早就数不胜数,比如胶片风的VSCO,拼图美颜的拍立得、美图秀秀,二次元卡通的魔漫相机、脸萌,自拍美颜的PICSPLAY、美颜相机,主打滤镜相机的Roookie Cam、MIX滤镜大师等等,这些现象级产品在这个快速迭代的时代层出不穷,那么Prisma凭什么在这样的环境下杀出重围?连俄罗斯总理梅德韦杰夫都特地“翻牌”了。
首先,Prisma不是简单地在原图上转换色调或者环境风格,也不只是利用普通的滤镜来改变图像的光线、颜色或者重叠图片,它会根据你提供的图片内容和你要求的风格图片的样式重新“画出”一张新的图片,它并不一定使你变美,但它一定让你遇见全新的自己(如下,左一为原图)。
那么,Prisma与人工智能算法Neural art到底怎么回事?Prisma与CNN的具体结合、生成图片的过程又是怎样的呢?
| Prisma与人工智能算法Neural art
Prisma的所做的风格转换是机器视觉领域一直在研究的一个问题,称为texture transfer (纹理转换),其目标为将源图片的风格合成进目标图片中同时保留目标图片的语意内容。
本质上来说,将图片的内容和风格分离并不一定是一个定义明确的问题(Well-defined problem),这是因为并不能准确定义出图片中的哪部分属于内容,哪部分属于风格,很有可能内容与风格是交织在一起,没有办法进行分离。
所以图片的内容和风格是否可以完全分离这还是一个待解的问题,如果可以,那么用什么样的方法呢?
Prisma背后的技术
Prisma背后的技术基于一篇今年CVPR oral文章“Image Style Transfer Using Convolutional Neural Networks”。
其实早在Prisma引爆大众市场的半年前,此方法的巧妙及其惊人效果已经引起在学术界引起了广泛关注。众所周知在如今的人工智能领域引起革命的深度学习技术已经将众多任务推向了实用的水平,而Prisma用的技术也不出意外的基于深度神经网络,它的系统核心是利用神经表征来分离,再组合随机图片的内容和风格,以此来实现一个可用来描绘艺术图像的算法。它的基本想法是利用一个多层的卷积神经网络(CNN)抽象出给定绘画作品里一些高级的隐藏特征用来模仿绘画风格,并把这个绘画风格应用到一个新的图片上。
而在纹理转换领域,之前传统方法之所以没能取得这么惊人的效果,其本质原因在于之前非深度学习的方法只能获取到目标图片低层次的图片特征,这导致这些方法无法独立的对图片的语意内容和风格的变化进行有效地建模,从而无法很好地对两者进行解耦和合成。
而深度神经网络之所以可以在众多领域中取得惊人效果,正是由于其可以抽取出高层次的信息表征。Prisma所使用的方法之所以能成功,就是很巧妙地利用了深度神经网络抽取高层图片表达的能力,能在几十秒内把一张普通的照片转变成一副极具艺术特色的现代画作或者西方名画风格作品。
奥妙在哪里?
下面将采用论文中的两个示意图完整剖析其中的奥妙。
正如上文所说,风格转换需要对图片的内容和风格进行单独地表示,上图中的分别将源图(风格提供方)和目标图(内容提供方)输入到由多层卷积层和池化层组成的深度神经网络中。对于目标图直接使用卷积的响应在每一层中进行重建,可视化的结果为红色框中的结果,可以看出在低层的重建图像几乎和目标图一致,而越高层网络重建出来的图像的一些细节的像素被丢弃而那些图片高层次的语意内容被保留。而源图计算每一层的卷积的特征图(feature maps)的相关系数来重建出风格的特征表示,从绿色框的可视化结果可以看出,这种抽取风格表示的方式在不同网络层成功提取出不同尺度的风格特征。
上图讲解了深度神经网络如何对风格和内容表示进行单独的建模,接下去就可以使用监督学习的深度神经网络进行风格的转换了。
图中左右两边的网络用于抽取源图的风格表示和目标图的内容表示,而中间的网络用于对风格进行合成,论文使用的是白噪声图片作为启始图,思想是通过左右两个网络提供的风格和内容表征进行监督学习,使得输入图片每一层抽取出来的风格表征和高层抽取出来的内容表征和左右两个网络相应网络层重建出来的表征越来越一致,如此通过标准的随机梯度下降算法,不断迭代使得白噪声图片变成最终想要的合成图。
使用数学表达去描述上述思想就是需要构造一个损失函数(红框所示),此损失函数是由风格损失项和内容损失项两者线性组成,其中alpha和belta分别代表风格和内容的权重比例,若alpha/belta高则生成图会更凸显出内容而风格化会少一些,低则生成图会风格化强烈但是内容被稀释,这也是Prisma提供用户调节的原理所在。(风格损失项和内容损失项的具体细节可以参见论文。)当有了损失函数,就可以对图像向量求解梯度,进而使用后项传递算法就可以对输入的图像不断进行更新从而进行风格转换(绿框所示)。
另外,通过在提取图像风格特征之前先改变图像的大小,可以通过控制-style_scale参数该从图像中提取哪种艺术特征。(三幅图像从左到右,-style_scale=2.0、1.0、0.5)
除此之外,Prisma还可以使用超过一种风格图像来混合多种艺术风格。(下图分别为:"The Starry Night" + "The Scream", "The Scream" + "Composition VII")
本文来源:不详 作者:佚名