亚马逊AWS官方博客

算法改变世界 - 从Prisma 的走红说开去

假设你是一个摄影爱好者,估计最近这几天应该正忙着用一款热门的手机App去修图并晒到朋友圈里面。原因很简单,用这款软件提供的滤镜处理过的照片看起来更像是个艺术品,而不是那种常见的苍白的脸蛋和色彩失真的风景。这款爆红的程度可媲美Pokémon Go 的App的名字叫做Prisma。对于这个现象级的App,一个笑话是这样说的,“全球有一半的人正在用Pokémon GO抓皮卡丘玩,另一半的人则用Prisma在修图”。

6月24日,俄罗斯总理梅德韦杰夫在自己拥有230万粉丝的Instagram上传了一张莫斯科风景照,解说文字是“滤镜里的莫斯科”。这张照片使用了Prisma的其中一款滤镜,让整张照片呈现出浓郁的铅笔画效果,获得了超过7.8万个点赞。

Prisma 面世是在今年的6月11日,是由一个不足9人的名为Prisma Lab的俄罗斯团队在一个半月以内开发出来。一经面世就引起了轰动,在发布短短4天后就成了年轻人的新宠,10个国家的App Store榜首,两周内下载量超过160万。这个数字也创造了一个App下载的新的记录。

 

包括我在内的许多人喜欢这款应用的原因是因为它所提供的30多款滤镜完全不同于VSCO、Snapseed 以及Instagram 这些成名已久的的软件,经它处理过的图片看起来就像是我们熟悉的毕加索、梵高、爱德华.蒙克的作品,或者是强烈的线条、简洁概括夸张的造型,或者是用色阴暗的紫、绿色调的蚀刻风格,又或者是粗旷而狂野的印象派。总之,一幅色彩暗淡、构图不佳的照片一经处理就变成了大师范的艺术品。这样的软件如何不让像我这样的低级别的摄友痴狂呢。

 

如果仅仅是几个还算不错的滤镜也难逃昙花一现的结局,就如同曾经大热过许多款软件一样。但是如果你可以了解这些滤镜的来源,恐怕你会和我一样会大吃一惊了。不同与传统的设计出来的滤镜,Prisma 有自己一套独特的方法。当用户上传照片时,Prisma系统会使用基于神经网络的人工智能算法,获取著名绘画大师和主要流派的艺术风格,然后对你的照片进行智能化处理。也就是说,它所提供的每一个滤镜,都是模仿过去伟大艺术家的风格而对你的照片进行智能分析和重绘而产生的。

 

作为一个程序员,这个励志故事却有着不一样的味道。通常情况下,我们总是习惯于在我们熟悉的领域去捕捉灵感,并将这种灵光乍现的想法都过程序变成一个个具体的应用。但是如果你已经读过上面的故事,你应该也会与我一样蹦出来这样的一个想法,人工智能或许可以可以让我们跳出这样的思维的局限。让我们可以在跟更广阔的领域去发掘新的需求。

 

为了验证这个想法,我打算复制Prisma 核心算法的实现。当然,这种实现并不是你想像的那么高深莫测。在一篇名为“Neural networks with artistic talent” 的博客文章里面,我大致梳理出来了这个算法的脉络。早在2015年9月在ariV 上面就刊出了德国学者的一篇名为”A Neural Algorithm of Artistic Style“论文。在这片文章里面,了如何使用神经网络学习一副画的绘画风格,并把这种风格用于处理一幅照片使之具有了该种艺术风格。而这篇论文所提出的算法据说所就是Prisma 的核心。

看到这里我想许多人都会产生实现这个算法的冲动。且慢下手,因为有意境找到了一个更简洁的方法。斯坦福大学的Justin Johnson 已经在github 上面为我们提供了一个很好的框架,而基于这个项目的成果实现这个算法就变得轻而易举。

实现这个深度学习的算法需要具备一定的条件,重要的就是计算的性能。而目前解决这个问题的通常思路就是使用GPU来提高处理能力。对于普通程序员来说,我们通常并不具备这一类的资源。但解决问题的思路已经有人给出了。早在2014年2月Netflix 久通过他们的技术博客分享过一篇实现分布式神经网络的文章,文章的题目是“Distributed Neural Networks with GPUs in the AWS Cloud“。

于是我的尝试就从AWS 提供的云计算的环境 。我需要的仅仅是启动一个AWS EC2 的实例,EC2这个服务可以理解为一个托管的虚拟服务器。 Amazon EC2 提供多种经过优化,适用于不同使用案例的实例类型,而适合于深度计算的类型无疑就是G2这个 具有GPU 加速能力的实例。而AWS云计算的好处在这个时候尽显无余,我只需要在控制台上做简单的选择一个完整的计算环境就可以准备就绪。而这一切所需要的时间不过几分钟。

接下来的操作和设置就是照本宣科的过程,

1、安装Torch,这是一个基于Lua语言实现的深度学习的框架。今年年初击败李世石九段的Alpha Go就是基于这个框架

2、安装Load Caffe networks,将Caffe 这个框架加载到 Torch,需要注意的是这个框架依赖于protobuf

3、下载下载Neural Style的实现,这包括了训练好的神经网络模型VGG-19和它的改进型,VGG-19为缺省的设置

最后就是执行你的程序,验证一下你的的成果的时刻了。

也许你会认为Prisma 不过是一个好玩的App,不会真的对这个世界带来多大的影响。但是上面的小小的实验可以证明这一个结论,通过一个好的算法就可以让计算机通过学习以往的经验和积累而迅速成为这个领域的最顶级的专家。今天Prisma 可以让我们称为梵高,明天的一款智能应用也可以让我们我们具有贝多芬、李世石、莫言甚至是爱因斯坦、牛顿一样的能力。我相信这个日期不回很远。

我很喜欢那一本谈论算法的通俗读物《How Algorithms came to rule our world》》。在那本书的最后一段,作者克里斯托弗.斯坦纳有过这样一段描写,我想有这段话做为这篇短文的结尾。

“未来,会编写代码的人有许多事情可以做。如果你还能构思并构造出复杂精妙的算法,那就更好了- 你很有可能通知世界,如果没有机器人抢在你的前头的话。”

作者简介

费良宏

亚马逊AWS首席云计算技术顾问,拥有超过20年在IT行业以及软件开发领域的工作经验。在此之前他曾经任职于Microsoft、Apple等知名企业,任职架构师、技术顾问等职务,参与过多个大型软件项目的设计、开发与项目管理。目前专注于云计算以及互联网等技术领域,致力于帮助中国的开发者构建基于云计算的新一代的互联网应用。