雷锋网按:本文作者系图普科技工程师。
在 Prisma 的应用下载评论区看到这么一句好玩的话:世界一半人在用《PokemonGO》抓精灵,另一半人在用这个软件修图。
图像编辑软件早就数不胜数,比如胶片风的 VSCO,拼图美颜的拍立得、美图秀秀,二次元卡通的魔漫相机、脸萌,自拍美颜的 PICSPLAY、美颜相机,主打滤镜相机的 Roookie Cam、MIX 滤镜大师等等,这些现象级产品在这个快速迭代的时代层出不穷, 那么 Prisma 凭什么在这样的环境下杀出重围?连俄罗斯总理梅德韦杰夫都特地“翻牌”了。
首先,Prisma 不是简单地在原图上转换色调或者环境风格,也不只是利用普通的滤镜来改变图像的光线、颜色或者重叠图片,它会根据你提供的图片内容和你要求的风格图片的样式重新“画出”一张新的图片,它并不一定使你变美,但它一定让你遇见全新的自己(如下,左一为原图)。
那么,Prisma 与人工智能算法 Neural art 到底怎么回事?Prisma 与 CNN 的具体结合、生成图片的过程又是怎样的呢?
Prisma 与人工智能算法 Neural art
本质上来说,将图片的内容和风格分离并不一定是一个定义明确的问题 (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")
或者在使用多个风格图像的时候,可以控制混合的程度来呈现不同的图像类型。
还可以在保留颜色的前提下改变图像风格,比如说,如果你设置参数-original_colors 1,系统输出的图片会保留原图的颜色(如下图)。
以上就是 Prisma 背后的全部技术原理,当我们剖析一下发现其实里面的原理并不复杂,对于熟悉深度学习的人来说,不出一周就可以复现出其中的算法。
利用 AI 算法修图虽酷,但 Prisma 也有一定的缺陷
比如说,一定要在有网络状态较好、网络较快的状态下才可以使用顺畅,因为需要在线加载绘画风格图像以及用户提供的内容图片需要发送到远程的服务器上进行人工智能计算后再传回来,所以,相对其他修图软件,它的图片编辑速度慢很多,一般都需要等待几十秒才可以看到预览效果。
另外,因为所有的图片处理都是在云端完成,所以会有少部分用户遇到使用人数过多,服务器过载的情况。
一样使用深度学习,deepart.io 为何不像 Prisma 一样火?
在 Prisma 出现之前,也有过一款基于深度学习技术的修图应用:deepart.io,但是 deepart 却无法取得像 Prisma 一样的成功。
而 Prisma 通过优化了算法,相对缩短了一大部分的操作时间,并且用户不需要到网页提交照片、不需要注册即可免费使用 35 种不同绘画风格的滤镜,在这个移动互联网的时代,这样的移动 App 更受大众欢迎。
最近,Prisma 推出了 Android 版,这无疑会带来更大的用户量,日活跃度有可能超越 200 万人次。据透露,“视频滤镜”已经进入内测阶段,大约在一周后会发布,此外,还有可能会推出“GIF 艺术滤镜”、“视频直播”等功能,创造出“流动的油画”。
还记得在两年前,波兰画家兼导演 dorota kobiela 以及奥斯卡获奖制片人 hugh welchman 开始筹备一部专门向梵高致敬的手绘油画电影《loving vincent》,近百名画师经高强度训练并每日模仿梵高风格,目前已完成超过 5.6 万幅绘画作品。在这部片里,每一幅静止的画都是模仿梵·高绘画风格的油画,电影每一秒都将用到 12 幅这样的画,然后一系列静止的画组合在一起快速播放,形成动态的效果。
如果把 Neural art 的技术成功应用到视频上,这部梵高的电影再不需要如此高投入,甚至还“拍摄”任意绘画风格的电影,将电影与艺术糅合,把自己封印在艺术品里,是件很美的事,就像蒙娜丽莎,在达芬奇的画中,她的微笑是永恒的。人对美和永恒的追求,这也许是 Prisma 能这样迅速夺取人心的深层次原因。
Prisma 的意义在于以艺术的名义用流行的方式把深度学习的能力展现给了大众。虽然如今众多的人工智能公司使用 AI 技术去服务大众,但像 Prisma 这样如此火热的引爆大众对于如今人工智能技术的惊讶还十分少见。
但我想这只是一个开始,人工智能技术正在向各个领域进发,无论是高科技领域如自动驾驶,机器人,还是一些偏门的领域,如艺术,社会公益,都会不断看到人工智能带来的实惠和惊喜。
也许你第一次使用 Prisma 的时就被其效果深深的折服。我想说的是,你的惊讶才刚刚开始。