更快的iOS和macOS神经网络

原作者提供的服务之一是将神经网络转换为在iOS设备上运行。

因为神经网络本质上执行大量计算,所以它们在移动设备上尽可能高效地运行是很重要的。一个高效的模型能够在实时视频上获得实时结果 - 无需耗尽电池或使手机变热,就可以在其上煎鸡蛋。

传统的神经网络,如VGGNet和ResNet要求太高,我通常建议切换到MobileNet。有了这种架构,即使是超过200层的机型也可以在较旧的iPhone和iPad上以30 FPS运行。

MobileNetV2分类器和物体检测器在实时摄像机上进行

我已经为iOS和macOS 创建了一个源代码库,可快速实现MobileNet V1和V2,以及SSDLiteDeepLabv3 +

该库使您可以非常轻松地将基于MobileNet的神经网络添加到您的应用程序中,以执行以下任务:

  • 图像分类
  • 实时物体检测
  • 语义图像分割
  • 作为特征提取器,它是自定义模型的一部分

现代神经网络通常具有基础网络或“骨干”,在顶部具有用于执行特定任务的附加层。MobileNet是一个很好的支柱。我帮助客户在基础MobileNet层之上实现了实时对象跟踪和人体姿势识别模型,取得了巨大成功。

这是一个经过验证的经过实战检验的代码库,可在App Store中的应用程序中运行。

这是从运行MobileNetV2 + SSDLite的iPhone 7录制的视频(YouTube链接):

为制作此视频,我只是将手机指向我在Mac 播放的YouTube视频,并使用Quicktime Player录制iPhone的屏幕。相机以30 FPS运行,神经网络可以轻松跟上,即使在这款旧手机上也是如此。(这个版本的SSDLite是在COCO上训练的。要在你的应用程序中使用它,你通常会在你自己的数据集上重新训练它。)

为何选择MobileNet?

许多研究论文提出了不适合在移动设备上使用的神经网络架构。通常,诸如VGGNet之类的大型模型被用作特征提取器,并且在顶部添加了新功能。

VGGNet,ResNet50和Inception等体系结构的问题在于它们具有数千万个参数,并且需要通过网络进行数十亿次计算。研究论文中的模型通常是在非常强大的GPU集群上进行培训。iPhone和iPad根本没有这种计算能力。

MobileNet架构旨在在移动设备上高效运行。它使用“仅”最多400万个参数,这比VGG的130M参数和ResNet50的25M参数要少得多。它也可以减少计算:300 MFLOPs与4 GFLOPs或更多这些大型模型。MobileNet的准确性与VGGNet类似,因此它是一个很好的替代品。

如果您正在考虑创建用于移动设备的神经网络架构,或者您正在从研究论文转换架构,请考虑使用MobileNet作为基础网络,为模型的其余部分提供提取的功能。

有关MobileNet如何工作的更多详细信息,请参阅以下博文:

库中包含的模型

源代码库包括以下模型的快速实现:

  • MobileNet V1
    • 特征提取器
    • 分类
    • 使用SSD进行物体检测
  • MobileNet V2
    • 特征提取器
    • 分类
    • 使用SSDSSDLite进行对象检测
  • DeepLab v3 +用于语义分割

分类器模型可以适应任何数据集。如果您正在使用任何流行的培训脚本,那么使您的模型使用此库只需要运行转换脚本。

如何使用MobileNet V2分类器的示例:

这比使用Core ML模型所需的代码更少。?

该库支持所有常见的iOS图像格式:

  • UIImageCGImageCIImage
  • CMSampleBufferCVPixelBuffer
  • Metal(RGB,BGR,YCbCr)

分类器使用MobileNet作为特征提取器,并在顶部添加分类层。该库还可以轻松地将特征提取器与分类器之外的其他模型集成。以下是如何使用MobileNet V1作为基础网络作为更大型号的一部分的示例:

您可以指定要从哪些图层中提取要素图,并使用这些输出作为模型其他图层的输入。这正是SSDLite等高级模型中发生的情况。

性能测量

本节显示了包含的MobileNet模型性能的几个指标。影响性能的因素有两个:

  • “深度倍增器”。这个超参数可以让您平衡模型大小,推理速度和准确性之间的权衡。具有较小深度倍增器的模型执行较少的计算,因此更快,但也更不准确。以下测量适用于深度乘数= 1.0的标准模型。
  • 输入图像的大小。由于它是一个完全卷积网络,因此MobileNet接受任何大小的输入图像。但是,使用大图像比使用较小图像慢得多。使用224×224像素的标准图像进行测量。

速度(每秒帧数)

下表显示了在一系列224×224图像上运行推理的分类器模型的最大FPS(每秒帧数):

iPhone 7

iPhone X.

iPad Pro 10.5

MobileNet V1

118

162

204

MobileNet V2

145

233

220

注意:测试是在iOS 11.2和11.3上进行的。将图像从其原始大小调整为224×224的时间不包括在这些测量中。测试使用三重缓冲来获得最大吞吐量。分类器在ImageNet数据集上进行训练,并输出1000个类别的预测。

物体检测的FPS结果是:

iPhone 7

iPhone X.

iPad Pro 10.5

MobileNet V1 + SSD

53

74

82

MobileNet V2 + SSDLite

63

98

108

注意:物体检测测试是在300×300图像上进行的。没有应用后处理(非最大抑制),因此这些分数仅测量运行神经网络所需的原始时间。SSD模型在COCO数据集上进行训练。

用于语义分割的FPS结果是:

iPhone 7

iPhone X.

iPad Pro 10.5

DeepLabv3 +

8.2

12.5

15.1

注意:分割模型将513x513图像作为输入,并生成513x513分割蒙版。该模型在Pascal VOC数据集上进行了20个等级的培训。如您所见,分割比其他任务慢很多!

准确性

下表显示了ImageNet测试集上分类器的准确性:

前1名准确度

前5名准确度

MobileNet V1

70.9

89.9

MobileNet V2

71.8

91.0

注意:这是原始TensorFlow模型的精确度,而不是转换后的Metal模型。(我将很快更新此表,其中包含在ImageNet验证集上运行Metal模型的结果。)

大小和计算

下一个表格显示了分类器模型的大小以及它们在单个224×224图像上进行推理的多次乘法累加运算:

MAC(百万)

参数(百万)

MobileNet V1

569

4.24

MobileNet V2

300

3.47

库将权重存储为16位浮点数。将MobileNet V2加入您的应用程序会为您的应用程序包增加大约7 MB的空间。

为什么不选择Core ML或TensorFlow Lite?

Core ML很棒,我是粉丝。如果您使用Keras,Caffe或MXNet训练模型,将模型转换为Core ML文件并将其嵌入您的应用程序非常容易。如果您使用TensorFlow训练模型,TF Lite是一个不错的选择。

这些选项(相当)方便,但不幸的是它们没有那么高效。TensorFlow目前不是GPU加速的,Core ML往往比手动优化的Metal模型慢。

下表比较了Core ML和MetalNet版本的最大FPS:

iPhone 7

iPhone X.

iPad Pro 10.5

Core ML

45

53

110

Core ML 2

-

-

120

Metal

118

162

204

速度差异

2.6×

1.8倍

注意:在iOS 11.2和11.3上测试了Core ML和Metal。Core ML 2使用iOS 12 beta 2测试。由于它仍处于测试阶段,因此Core ML 2的报告结果可能比最终版本慢。

是的,我也不敢相信:Core ML真的要慢得多。为了测量Core ML模型的速度,我使用224×224 CVPixelBuffer作为输入,具有三重缓冲。我还通过Vision框架测试了模型,但这通常比直接使用Core ML慢。

与MobileNet V2相同的比较:

iPhone 7

iPhone X.

iPad Pro 10.5

Core ML

41

50

-

Core ML 2

-

-

84

Metal

145

233

220

速度差异

3.5×

4.6×

2.6×

出于某种原因,使用Core ML,MobileNet V2的运行速度低于V1。V2模型具有更少的参数但更多的层,这可能是Core ML更慢的原因。

使用Core ML的另一个缺点是它不如Metal灵活。Core ML仅支持有限数量的模型和图层类型。如果您正在使用新图层或激活功能进行前沿工作,Core ML可能无法帮助您。虽然现在可以创建自定义Core ML图层,但我发现使用Metal实现整个模型更容易。

我建议使用Core ML快速迭代你的模型,但对于进入你的应用程序的最终版本,没有什么比Metal代码的原始功能更好。

你得到了什么?

使用此库,您可以获得MobileNet V1和V2 的完整Swift源代码,以及SSD,SSDLite和DeepLabv3 +。

代码使用Metal和Metal Performance Shaders框架编写,以充分利用GPU。

还包括:

  • 转换脚本。这些脚本从TensorFlow,Keras,Caffe等读取经过训练的模型,并转换权重,以便将它们加载到模型的Metal版本中。
  • 方便的帮助程序类,可以轻松地将模型放入您自己的应用程序并解释其预测。
  • 预先训练好的模型可以快速入门。
  • 有关如何使用API​​的文档
  • 示例应用。这些应用程序展示了如何使用iPhone相机,照片库,ARKit等实时视频的模型。

该库与iOS 11兼容,可在具有A8处理器或更高处理器(iPhone 6及更高版本)的设备上运行。

注意:由于iOS的限制,当应用程序在后台时,无法使用GPU。如果您的应用需要在应用程序后台运行时运行神经网络,则无法使用此库。在这种情况下,使用Core ML或TF Lite是更好的选择。或者,如果Core ML或TensorFlow不是合适的解决方案,我可以将您的模型转换为使用高度优化的CPU例程,以尽可能地挤出最大速度。

原文:http://machinethink.net/faster-neural-networks/ 作者:Matthijs Hollemans

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

iOS 11: CORE ML—浅析

导语:在刚刚过去的WWDC上,苹果发布了Core ML这个机器学习框架。现在,开发者可以轻松的使用Core ML把机器学习功能集成到自己的应用里,让应用变得更加...

38880
来自专栏数据派THU

独家 | 一文读懂如何用深度学习实现网络安全

本文简要介绍深度学习以及它支持的一些现有信息安全应用,并提出一个基于深度学习的TOR流量检测方案。

14220
来自专栏AI研习社

论文推荐 | 商汤 ECCV 2018 精选论文:人脸识别的瓶颈在于数据集噪声

Wang Fei /Chen Liren /Li Cheng /Huang Shiyao /Chen Yanjie /Qian Chen /Loy Chen C...

23930
来自专栏新智元

MXNet 作者李沐:用深度学习做图像分类,教程+代码

24550
来自专栏大数据挖掘DT机器学习

车辆目标检测

85540
来自专栏机器学习算法原理与实践

强化学习(六)时序差分在线控制算法SARSA

    在强化学习(五)用时序差分法(TD)求解中,我们讨论了用时序差分来求解强化学习预测问题的方法,但是对控制算法的求解过程没有深入,本文我们就对时序差分的在...

14120
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/4/29

链接:https://machinelearning.apple.com/2018/04/16/personalized-hey-siri.html?utm_c...

10720
来自专栏PPV课数据科学社区

R语言中的情感分析与机器学习

利用机器学习可以很方便的做情感分析。本篇文章将介绍在R语言中如何利用机器学习方法来做情感分析。在R语言中,由Timothy P.Jurka开发的情感分析以及更一...

39960
来自专栏机器人网

技术猿 | 10种经典的软件滤波方法 基础必读

---- 限幅滤波法(又称程序判断滤波法) A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新...

22030
来自专栏生信技能树

第5篇:对ATAC-Seq/ChIP-seq的质量评估(二)——ChIPQC

第4篇:对ATAC-Seq/ChIP-seq的质量评估(一)——phantompeakqualtools

61130

扫码关注云+社区

领取腾讯云代金券