全球有一半的人正在用 Pokémon GO 抓皮卡丘玩,另一半的人则在用 Prisma 修图 最近一个月最火爆的 App 有哪些?毫无疑问,非 Pokémon Go 和 Prisma 莫属!而且这两款 App 的背后,都离不开云计算的身影
今天,我们就请亚马逊 AWS 首席云计算技术顾问费良宏老师,跟大家聊聊如何用亚马逊 AWS,复制 Prisma 核心算法的实现! 费良宏 亚马逊 AWS 首席云计算技术顾问,拥有超过 20 年在 IT 行业以及软件开发领域的工作经验
在此之前他曾经任职于 Microsoft、Apple 等知名企业,担任架构师、技术顾问等职务,参与过多个大型软件项目的设计、开发与项目管理
目前专注于云计算以及互联网等技术领域,致力于帮助中国的开发者构建基于云计算的新一代的互联网应用
假设你是一名摄影爱好者,估计最近这几天应该正忙着用一款热门的手机 App 去修图并晒到朋友圈里面
原因很简单,用这款软件提供的滤镜处理过的照片看起来更像是幅艺术品,而不是那种常见的苍白脸蛋和色彩失真的风景
这款爆红程度可媲美 Pokémon Go 的 App 叫做 Prisma
对于这个现象级的 App,一个笑话是这样说的:“ 全球有一半的人正在用 Pokémon GO 抓皮卡丘玩,另一半的人则在用 Prisma修图 ”
6 月 24 日,俄罗斯总理梅德韦杰夫在自己拥有 230 万粉丝的 Instagram 上传了一张莫斯科风景照,解说文字是“滤镜里的莫斯科”
这张照片使用了 Prisma 的其中一款滤镜,让整张照片呈现出浓郁的铅笔画效果,获得了超过 7.8 万个点赞
Prisma 面世是在今年的 6 月 11 日,是由一个不足 9 人的名为 Prisma Lab 的俄罗斯团队在一个半月以内开发出来
这款 App 一经面世就引起了轰动, 在发布短短 4 天后就成了年轻人的新宠,10 个国家的 App Store 榜首,两周内下载量超过 160 万
这个数字也创造了一个 App 下载的新记录
包括我在内的许多人喜欢这款应用的原因是因为它所提供的 30 多款滤镜,完全不同于 VSCO、Snapseed 以及 Instagram 这些成名已久的的软件, 经它处理过的图片看起来就像是我们熟悉的毕加索、梵高、爱德华.蒙克的作品:强烈的线条、简洁概括夸张的造型,抑或色阴暗的紫、绿色调的蚀刻风格,又或者是粗旷而狂野的印象派
总之,一幅色彩暗淡、构图不佳的照片一经处理就变成了大师范的艺术品
这样的软件如何不让像我这样低级别的摄友痴狂呢
如果仅仅是几个还算不错的滤镜也许无法帮助这款 App 逃离昙花一现的结局,就如同许多款曾经大热过的软件一样
但是如果你可以了解这些滤镜的来源,恐怕你会和我一样大吃一惊了
大多数 App 的滤镜基于内置算法,受限于移动端处理性能,其能实现的效果比较有限,Prisma 则有自己一套独特的方法
当用户上传照片时,Prisma 系统会使用基于神经网络的人工智能算法,获取著名绘画大师和主要流派的艺术风格,然后对你的照片进行智能化处理
也就是说,它所提供的每一个滤镜,都是模仿过去伟大艺术家的风格而对你的照片进行智能分析和重绘而产生的
作为一个程序员,这个励志故事却有着不一样的味道
通常情况下,我们总是习惯于在我们熟悉的领域去捕捉灵感,并将这种灵光乍现的想法通过程序变成一个个具体的应用
但是如果你已经读过上面的故事,你应该也会与我一样蹦出来这样的一个想法,人工智能或许可以让我们跳出这样的思维局限,让我们可以在更广阔的领域去发掘新的需求
为了验证这个想法,我打算复制 Prisma 核心算法的实现
当然,这种实现并不是你想象的那么高深莫测
在一篇名为“Neural networks with artistic talent” 的博客文章里面,我大致梳理出来了这个算法的脉络
早在 2015 年 9 月 ariV 上面就刊出了德国学者的一篇名为“A Neural Algorithm of Artistic Style”论文
在这篇文章里面,介绍了如何使用神经网络学习一副画的绘画风格,并把这种风格用于处理一幅照片使之具有了该种艺术风格
而这篇论文所提出的算法据说所就是 Prisma 的核心 看到这里我想许多人都会产生实现这个算法的冲动且慢下手,因为有人已经找到了一个更简洁的方法
斯坦福大学的 Justin Johnson 已经在 GitHub 上面为我们提供了一个很好的框架,而基于这个项目的成果,实现这个算法就变得轻而易举
(具体可以参考 Justin Johnson 关于 neural-style 的相关内容,请访问:https://github.com/jcjohnson/neural-style) 实现这个深度学习的算法需要具备一定的条件,重要的就是计算性能
而目前解决这个问题的通常思路就是使用 GPU 来提高处理能力
对于普通程序员来说,我们通常并不具备这一类的资源但解决问题的思路已经有人给出了
早在 2014 年 2 月 Netflix 就通过他们的技术博客分享过一篇实现分布式神经网络的文章,文章的题目是“Distributed Neural Networks with GPUs in the AWS Cloud”
于是我就开始使用 AWS 提供的云计算环境
我需要的仅仅是启动一个 AWS EC2 的实例,EC2 这个服务可以理解为一个托管的虚拟服务器
Amazon EC2 提供多种经过优化,适用于不同使用案例的实例类型,而适合于深度计算的类型无疑就是 G2 这个具有 GPU 加速能力的实例
而 AWS 云计算的好处在这个时候尽显无余,我只需要在控制台上做简单的选择,一个完整的计算环境就可以准备就绪
接下来的操作和设置就是照本宣科的过程, 安装 Torch,这是一个基于 Lua 语言实现的深度学习的框架
今年年初击败李世石九段的 Alpha Go 就是基于这个框架 安装 Load Caffe networks,将 Caffe 这个框架加载到 Torch,需要注意的是这个框架依赖于 protobuf 下载下载 Neural Style 的实现,这包括了训练好的神经网络模型VGG-19和它的改进型,VGG-19 为缺省的设置 最后就是执行你的程序,验证一下你的成果的时刻了
也许你会认为 Prisma 不过是一个好玩的 App,不会真的对这个世界带来多大的影响
但是上面的小小实验足以证明一个结论: 通过一个好的算法,计算机就可以通过学习以往的经验和积累而迅速成为这个领域最顶级的专家
今天 Prisma 可以让我们成为梵高,明天的一款智能应用也可以让我们具有贝多芬、李世石、莫言甚至是爱因斯坦或者牛顿一样的能力
我相信这个日期不会很远! 我很喜欢一本谈论算法的通俗读物《How Algorithms came to rule our world》》
在这本书的最后一段,作者克里斯托弗·斯坦纳有过这样一段描写,我想以这段话作为这篇短文的结尾
“未来,会编写代码的人有许多事情可以做
如果你还能构思并构造出复杂精妙的算法,那就更好了- 你很有可能统治世界,如果没有机器人抢在你的前头的话
” ——克里斯托弗.斯坦纳《How Algorithms came to rule our world》 Prisma 的创意并不是唯一 实际上,运用人工智能算法,我们不仅仅可以用它来美化图片,我们甚至可以通过大数据和算法去学习大师的作品,然后凭空创造出一幅可以以假乱真的大师“真迹”! JWT 荷兰分公司就受客户委托,发起了名为“下一个伦勃朗”活动,运用大数据、深度学习、人工智能算法和面部识别技术,学习伦勃朗的真迹,然后通过 3D 打印技术模仿伦勃朗的笔迹,创作出一幅全新的伦勃朗作品,并于 2016 年 4 月 5 日在阿姆斯特丹展出,震惊了艺术界! 我们找到一个短片,揭秘了这个活动背后的全过程
有兴趣的同学可以看一下,说不定对你下一个项目有所启发
Prisma 的未来,还需努力 就在 Prisma 的 Android 版发布没几天,大概是因为过于火爆的关系,整个 Prisma 服务器就崩溃了…… 可见, Prisma 也是一款非常依赖服务器运算能力的 App
那么问题来了,为了避免 Prisma 再次出现崩溃的情况, 如果你对亚马逊AWS 感兴趣,并想通过亚马逊AWS 来创造超越 Prisma 的成功,欢迎「点击阅读原文」报名参加 AWS技术峰会2016 · 北京! 这里有关于亚马逊 AWS 的一切,与云共舞,精彩不容错过!