Caffe2 是我们的第一个产业级深度学习平台,它可以在服务器 CPU、GPU、iOS 和安卓四种平台上运行,使用同一种代码。因为我们的模块化设计,这种架构在不同平台上都使用同一种语言,但对每个平台都有优化。这是一个开发人员不必担心的细节;例如,可以在移动端 NNPack(iOS 和安卓)和服务器 GPU 的 CUDNN 中进行选择。在 Caffe2 中,算法开发者可以专注于算法,无需考虑如何运行卷积。 快速的部署设计也能使开发者受益。从开发者的角度看,调试移动设备的运行时间可能是一项挑战,因为移动端工具链(toolchain)并不如桌面的和服务器的工具链那么先进。我们通过从硬件上抽象神经网络的数学而解决了这个问题——一个 Caffe2go 中的串行化网络(serialized network)在被应用于移动手机和服务器时可以得到相同的数值输出。其结果是,我们可以将大部分工作(模型训练、性能评估、用户体验研究)移动到服务器环境中进行;当结果看起来不错了之后,就可以实现在移动环境中的一键式部署了。 训练风格迁移模型 风格迁移(style transfer)并不是什么新概念。它最早是由研究人员在发表于 2015 年 8 月的一篇题为《A Neural Algorithm for Artistic Style》的论文中引入的。但是,当时这项技术的速度还很慢,而且需要强大的服务器。后面的几个月,atv,研究社区改进了这项技术,将其速度提升了几个数量级,但也还是需要依赖服务器上的大量计算能力。 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 框架,我们就可以将一种实时图像处理系统应用到移动设备上。 展望下一步 (责任编辑:本港台直播) |