Tag: Apache MXNet


使用 Apache MXNet 和 Apple Core ML 将机器学习引入 iOS 应用程序

作者:Sebastien Menant – Amazon Web Services 的解决方案架构师;Pracheer Gupta – 帕洛阿尔托的 AWS 深度学习团队的成员 / 原文链接

利用 Apple 在 WWDC 2017 上发布的 Core ML,iOS、macOS、watchOS 和 tvOS,开发人员现在可以轻松地将机器学习模型集成到其应用程序中。这使得开发人员只需编写几行代码即可为用户带来智能的新功能。利用 Core ML,移动开发人员能够更方便地使用机器学习。它可让您进行快速原型设计,并使用不同的传感器 (如摄像机、GPS 等) 来创建具有比以往更强大的功能的应用程序。

MXNet 社区的成员 (包括来自 Apple 和 Amazon Web Services (AWS) 的参与者) 已展开合作以生成用于将使用 MXNet 构建的机器学习模型转换为 Core ML 格式的工具。利用此工具,开发人员能够轻松构建面向 Apple 设备的由机器学习支持的应用程序。借助此转换工具,您现在将获得适用于支持深度学习的应用程序的快速管道。您可以从 AWS 云中使用 MXNet 的可扩展的高效分布式模型训练迁移到 Apple 设备上的快速运行时推理。

为了支持该转换工具的发布,我们已决定构建一个出色的 iOS 应用程序。我们从上一篇 AWS AI 博客文章 在 AWS EC2 上使用 MXNet 和 Multimedia Commons 数据集估计图像的位置获得了灵感,这篇文章介绍了用于预测图片拍摄位置的 LocationNet 模型。

在这篇博客文章中,我们说明了如何设置环境以将 MXNet 模型转换为 Core ML,转换现有模型,然后将模型导入用 Swift 编写的示例 iOS 应用程序中。iOS 应用程序向模型提供图片,从而预测图片拍摄位置,然后在交互式地图上显示该位置。出于性能的考虑,我们建议您在安装了 iOS 11 测试版的物理 iOS 设备 (如 iPhone) 上运行该应用程序,但您也可以在 Xcode 9.0 测试版附带的模拟器上试用该应用程序。

请注意,在编写 Xcode 9 时,iOS 11 和 Core ML 仍为测试版,并且您需要 Apple 开发人员计划 账户来下载 Xcode 和 iOS。但是,在今年晚些时候公开发布这些产品后,您便能使用 Mac 上的应用商店和 iOS 设备上的软件更新来获取它们。

MXNet 和该转换工具的安装

已在 macOS High Sierra 10.13 测试版 8 上安装并测试该工具。但是,只要您未在 Mac 上的 Core ML 模型上运行推理,便能在 macOS El Capitan (10.11) 及更高版本上运行该转换器。

要运行该转换工具,您需要安装 Python 2.7。

运行以下命令可安装 MXNet 框架以及 mxnet-to-coreml 工具:

pip install mxnet-to-coreml

MXNet 模型的转换

已在单个 p2.16xlarge Amazon EC2 实例上使用 MXNet 来训练 LocationNet 模型,该实例包含来自 AWS Multimedia Commons 数据集的带有地理标记的图像。它会在 MXNet Model Zoo 上公开分享。

与任何 MXNet 模型一样,LocationNet 包含两个部分:

  • 一个包含模型定义的 JSON 文件
  • 一个包含参数的二进制文件

继续并下载存储在 Amazon S3 上的 .json 模型定义.params 模型参数

此外,您还将需要从 GitHub 存储库下载类文件 grids.txt,该文件包含用于训练模型的地理单元格。已使用 Google 的 S2 Geometry Library 通过训练数据创建该文件。此文本文件中的每一行都采用 S2 单元格标记、纬度和经度的形式 (例如,8644b594 30.2835162512 -97.7271641272)。iOS 应用程序中的 Swift 代码将删除 S2 单元格标记信息,并且仅使用坐标。

按 GitHub 存储库中对该转换工具的描述,我们现在将转换模型。

在将所有内容下载到同一目录中后,请运行此命令:

mxnet_coreml_converter.py --model-prefix='RN101-5k500' --epoch=12 --input-shape='{"data":"3,224,224"}' --mode=classifier --pre-processing-arguments='{"image_input_names":"data"}' --class-labels grids.txt --output-file="RN1015k500.mlmodel"

在内部,该模型首先由在内存中重新创建整个符号图的 MXNet 进行加载。转换器浏览此符号图,并将每个运算符转换为其 Core ML 等效项。提供给转换器的一些参数由 MXNet 用来生成该图,而其他参数由 Core ML 用来预处理输入 (在将输入传递到神经网络之前) 或以特定方式处理神经网络的输出。

您应看到正在处理模型的多个层的转换工具,然后通过所生成文件的名称确认 SUCCESS。在后面的阶段,您将生成的文件 RN1015k500.mlmodel 导入 Xcode 项目中。

(more…)