风格迁移一直是机器学习领域内的一项重要任务,很多研究机构和研究者都在努力打造速度更快、计算成本更低的风格迁移机器学习系统,比如《怎么让你的照片带上艺术大师风格?李飞飞团队开源快速神经网络风格迁移代码》、《谷歌增强型风格迁移新算法:实现基于单个网络的多种风格实时迁移 》。今天,Facebook 又在其官方博客上宣布了一种可以用在移动设备实现实时风格的深度学习系统 Caffe2Go,自称能在眨眼之间完成处理的任务,而且还能实现高质量的视频风格迁移。Facebook 还表示该项目将会在未来几个月内进行部分开源。
随着视频通话逐渐成为人们交流的主要方式,Facebook 希望创造最新的视频创意工具来帮助人们表达自我。最近,他们在手机 app 中测试了新的相机应用,实时在视频中添加艺术元素。这项技术被称为「风格转换」。它可以将一张图片中的艺术风格,例如梵高的画作,加入普通的图片或视频中去。这是以往技术上难以实现的事,通常这需要将参考图和要处理的数据发送到数据中心,通过大型服务器进行处理。Facebook 最新开发的移动端深度学习平台第一次摆脱了信号塔的束缚,可以实时捕捉、分析和处理图像,将最新技术放进人们的手中。这一新程序被称为 Caffe2Go,是一个完整的深度学习系统,它的架构已经嵌入手机 app 中。通过将处理图片和视频的人工智能模型压缩至百分之一大小,Facebook 现在已经可以在 iOS 和安卓系统中高效运行深度学习网络。最终,Facebook 公司的应用可以在部分手机中以不到 50 毫秒的速度完成人工智能任务的处理,而人眨眼需要的时间大约需要 300 毫秒。
相机风格转换工具是两种技术的结合:Caffe2Go 运行环境与风格转换模型。Facebook 的人工智能团队一直在处理算法与大规模系统,他们一直在致力于开发新模型,让风格转换更加快速稳定。于是,现在你拿起手机,开始摄像,梵高的绘画风格变得无处不在了。
Caffe2Go 项目在三个月前开始,目前没有其他公司的产品能够做到这样的效果:让人工智能风格转换变成创作工具。不仅如此,Facebook 做到了更多,他们让这种应用可以在手机中实时处理图像。该项目的研究者跨越产品、技术和研究者。FAIR 团队的 Justin Johnson 是一篇描述该项目技术基础论文(Perceptual Losses for Real-Time Style Transfer and Super-Resolution )的作者,他们在前人的努力基础之上开发了新的技术;应用机器学习团队则通过努力将 AI 引擎塞进手机设备中;相机团队负责满足用户需求;正是因为所有人的努力,这些团队构建了运行在移动设备上的高效神经网络。我们将解释如何思考和开发这一应用技术的,从 Caffe2Go 开始。
人工智能对计算机科学产生了深远的影响,但它的应用一直被局限在大型数据中心里,距离普通用户存在很长一段距离。大多数时候,人工智能「实时处理」应用将数据发送到远端数据中心,通过那里的 GPU 来处理,物理距离造成了不可避免的延迟。我们认为使用超级计算机进行实时处理是不实际的,于是我们转换思路,努力让人工智能在移动设备的 CPU 中运行。
手机可以拍照,通话,也可以实时理解用户所需,不需要连接远端服务器,但它们的性能有限。尽管近年来硬件设备的发展让移动设备的计算能力有了很大改进,手机 CPU 现在已经可以在一秒钟内进行数十亿次运算,但智能软件在设计中还要面对诸如功率,存储器和计算能力的各种资源限制。因此,移动设备环境对机器学习系统提出了机遇和挑战。
面对这些挑战,我们的解决方案是设计超轻量级模块化框架。为此,我们以开源的 Caffe2 项目为基础,遵循 Unix 理念开发了 Caffe2Go。我们确保了用于声明和连接组件的核心架构的轻量化,允许多种组件与其连接——包括对于移动设备的专用优化。我们保留了一个精巧的算法框架,允许工程人员将抽象概念描述成有向无环图(DAG),同时确保没有约束被强加在图中执行节点的输入和输出上。这允许我们的工程团队能够在不同平台上实现和优化模块,同时可以轻松地连接各种模块。当图像实时输入时,通过硬件功能进行自我实例化可以达到最大处理速度。
速度是计算密集型移动应用的关键,特别是对于图像和视频处理而言,框架的轻量级设计允许我们为特定的运算符执行平台进行特定的优化。NNPack 库是其中一个例子,Caffe2 集成在移动运行环境中时,通过使用移动 CPU 中被称为 NEON 的功能,可以显著提高运算速度。在 iOS 设备上,我们也正在着手集成加速功能如 Metal 语言。所有这些都是通过模块化设计完成的,无需改变一般模型定义。因此,算法端和运行环境可以互相依靠,不必担心兼容性的问题。
Caffe2 是我们的第一个产业级深度学习平台,它可以在服务器 CPU、GPU、iOS 和安卓四种平台上运行,使用同一种代码。因为我们的模块化设计,这种架构在不同平台上都使用同一种语言,但对每个平台都有优化。这是一个开发人员不必担心的细节;例如,可以在移动端 NNPack(iOS 和安卓)和服务器 GPU 的 CUDNN 中进行选择。在 Caffe2 中,算法开发者可以专注于算法,无需考虑如何运行卷积。
快速的部署设计也能使开发者受益。从开发者的角度看,调试移动设备的运行时间可能是一项挑战,因为移动端工具链(toolchain)并不如桌面的和服务器的工具链那么先进。我们通过从硬件上抽象神经网络的数学而解决了这个问题——一个 Caffe2go 中的串行化网络(serialized network)在被应用于移动手机和服务器时可以得到相同的数值输出。其结果是,我们可以将大部分工作(模型训练、性能评估、用户体验研究)移动到服务器环境中进行;当结果看起来不错了之后,就可以实现在移动环境中的一键式部署了。
风格迁移(style transfer)并不是什么新概念。它最早是由研究人员在发表于 2015 年 8 月的一篇题为《A Neural Algorithm for Artistic Style》的论文中引入的。但是,当时这项技术的速度还很慢,而且需要强大的服务器。后面的几个月,研究社区改进了这项技术,将其速度提升了几个数量级,但也还是需要依赖服务器上的大量计算能力。
Caffe2go 成功使人工智能实现了高速处理,并且可以集成到你手上的移动设备中。但该风格迁移模型仍然还需要优化,这样才能在确保实时体验的同时还能保证得到高质量、高分辨率的图像。
传统的风格迁移研究得到的模型(甚至只是前馈变量)是很大(在参数的数量方面)很慢的。我们的目标是创造能够运行新的、更小的、更高效的模型的风格迁移应用——能够在 iPhone 6s 或以上的手机上不掉帧地提供 20 FPS 的高质量视频。
为了减小该模型的尺寸,我们应用了 3 种主要的方法:优化了卷积层的数量(这是处理中最耗时间的部分)、优化了每一层的宽度、以及调整了处理过程中的空间分辨率(spatial resolution)。卷积层的数量和宽度是可用于调整处理时间的单独指标——即调整图像有哪些方面需要处理,或调整一个单独的处理过程需要多少时间。对于空间分辨率,我们可以调整中间层中图像实际被处理的大小。通过较早地使用池化(pooling,缩小正被处理的图像的大小),我们可以加速处理时间,因为系统不再需要处理那么多的数据了。我们还发现,使用这些技术,我们可以极大地减少该网络的宽度和深度,同时还能保持合理的质量。
图像质量是主观的,非常难以测量——尤其是对于风格迁移这样的东西。因此我们打造了一些可视化工具,其中包括 A/B tests;并训练了不同的模型以确保我们可以得到最高质量的图像结果。我们的大型 GPU 集群由 FBLearner Flow 驱动,让我们可以快速扫描大范围的超参数(比如模型架构、内容/风格权重、和下采样),从而找到满足我们的性能目标同时能保持和提升质量的训练良好的前向风格(feedforward style)。
在提升质量方面还有很多其它的技巧——比如,应用实例规范化(instance normalizatio)而不是常用的批规范化(batch normalization)能有助于多种风格,同样避免卷积层中的零填充(zero padding)可以减少伪像,也可以将不同的预处理或后处理过滤器应用到风格或内容图像上。但在我们的测试中,我们发现这些方法往往在一些风格上效果良好,在另一些风格上则效果不佳。
凭借在这项风格迁移技术上的速度和质量优化,使用 Caffe 2 框架,我们就可以将一种实时图像处理系统应用到移动设备上。
Caffe2go,加上 Torch 这样的研究工具链,是 Facebook 的机器学习产品的核心。因为其在大小、速度和灵活性上的优势,我们正在将 Caffe2go 推广到整个 Facebook 的 stack 中。
我们还在致力于和社区分享我们的软件和设计,从而让我们可以学习更好地利用多种硬件平台和算法设计的特性,这在跨平台机器学习系统中是尤其重要的。在未来的几个月,我们将会部分开源该人工智能框架。
随着我们的进步,你可以想象出设备上实时运行的人工智能可以如何帮助世界更加开放、人们更加互连。我们手中的智能设备将继续颠覆我们对「智能(intelligence)」的认知方式。有了像 Caffe2go 这样精巧的机器学习系统,我们将致力于为人们带来更赞的人工智能和增强现实体验——让你在拍视频的时候,设备里还有一把梵高的画刷。