使用 Apache MXNet 和 Apple Core ML 将机器学习引入 iOS 应用程序
- 2019-11-08
本文字数:4676 字
阅读完需:约 15 分钟
利用 Apple 在 [](https://developer.apple.com/videos/play/wwdc2017/703/) 上发布的 [](https://developer.apple.com/machine-learning/),iOS、macOS、watchOS 和 tvOS,开发人员现在可以轻松地将机器学习模型集成到其应用程序中。这使得开发人员只需编写几行代码即可为用户带来智能的新功能。利用 Core ML,移动开发人员能够更方便地使用机器学习。它可让您进行快速原型设计,并使用不同的传感器 (如摄像机、GPS 等) 来创建具有比以往更强大的功能的应用程序。
MXNet 社区的成员 (包括来自 Apple 和 Amazon Web Services (AWS) 的参与者) 已展开合作以生成用于将使用 MXNet 构建的机器学习模型转换为 Core ML 格式的工具。利用此工具,开发人员能够轻松构建面向 Apple 设备的由机器学习支持的应用程序。借助此转换工具,您现在将获得适用于支持深度学习的应用程序的快速管道。您可以从 AWS 云中使用 MXNet 的可扩展的高效分布式模型训练迁移到 Apple 设备上的快速运行时推理。
为了支持该转换工具的发布,我们已决定构建一个出色的 iOS 应用程序。我们从上一篇 AWS AI 博客文章 [](https://amazonaws-china.com/blogs/ai/estimating-the-location-of-images-using-mxnet-and-multimedia-commons-dataset-on-aws-ec2/)获得了灵感,这篇文章介绍了用于预测图片拍摄位置的 LocationNet 模型。
在这篇博客文章中,我们说明了如何设置环境以将 MXNet 模型转换为 Core ML,转换现有模型,然后将模型导入用 Swift 编写的示例 iOS 应用程序中。iOS 应用程序向模型提供图片,从而预测图片拍摄位置,然后在交互式地图上显示该位置。出于性能的考虑,我们建议您在安装了 iOS 11 测试版的物理 iOS 设备 (如 iPhone) 上运行该应用程序,但您也可以在 Xcode 9.0 测试版附带的模拟器上试用该应用程序。
_请注意,在编写 Xcode 9 时,iOS 11 和 Core ML 仍为测试版,并且您需要_ [](https://developer.apple.com/programs/) _账户来下载 Xcode 和 iOS。但是,在今年晚些时候公开发布这些产品后,您便能使用 Mac 上的应用商店和 iOS 设备上的软件更新来获取它们。_
### MXNet 和该转换工具的安装
_已在 macOS High Sierra 10.13 测试版 8 上安装并测试该工具。但是,只要您未在 Mac 上的 Core ML 模型上运行推理,便能在 macOS El Capitan (10.11) 及更高版本上运行该转换器。_
要运行该转换工具,您需要安装 Python 2.7。
运行以下命令可安装 MXNet 框架以及 [](https://pypi.python.org/pypi/mxnet-to-coreml) 工具:
Bash
pip install mxnet-to-coreml
### MXNet 模型的转换
已在单个 p2.16xlarge Amazon EC2 实例上使用 MXNet 来训练 LocationNet 模型,该实例包含来自 [](https://amazonaws-china.com/public-datasets/multimedia-commons/)的带有地理标记的图像。它会在 [](https://mxnet.incubator.apache.org/model_zoo/) 上公开分享。
与任何 MXNet 模型一样,LocationNet 包含两个部分:
* 一个包含模型定义的 JSON 文件
* 一个包含参数的二进制文件
继续并下载存储在 Amazon S3 上的 [](https://s3.amazonaws.com/mmcommons-tutorial/models/RN101-5k500-symbol.json)和 [](https://s3.amazonaws.com/mmcommons-tutorial/models/RN101-5k500-0012.params)。
此外,您还将需要从 GitHub 存储库下载类文件 [](https://github.com/multimedia-berkeley/tutorials),该文件包含用于训练模型的地理单元格。已使用 [](https://code.google.com/archive/p/s2-geometry-library/) 通过训练数据创建该文件。此文本文件中的每一行都采用 S2 单元格标记、纬度和经度的形式 (例如,8644b594 30.2835162512 -97.7271641272)。iOS 应用程序中的 Swift 代码将删除 S2 单元格标记信息,并且仅使用坐标。
按 GitHub 存储库中对该[](https://github.com/apache/incubator-mxnet/tree/master/tools/coreml)的描述,我们现在将转换模型。
在将所有内容下载到同一目录中后,请运行此命令:
Bash
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 项目中。
![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/AppleCoreML_1.png)
安装 Xcode 后,如果您双击此模型文件,则可以获得有关此文件的更多信息 (例如,文件的大小、名称和参数),这些信息通常将在您的 Swift 代码中使用:
![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/AppleCoreML_2.png)
### 下载并配置 iOS 应用程序的代码
_示例 iOS 应用程序是在运行 macOS Sierra 10.12.6 的 Mac 上通过 Xcode 9 测试版 6 用 Swift 编写的。__已在运行 iOS 11 测试版 8 的 iPhone 7 上测试该应用程序。_
我们已决定使用 Apple 的新 [](https://developer.apple.com/documentation/vision)来方便使用 Core ML 处理图像,因为该框架会自动将图像转换为 Core ML 模型要求的格式和大小。Vision 通过一致的界面提供解决计算机视觉难题的方法,其功能包括人脸跟踪、人脸检测、标记、文本检测、矩形检测、条形码检测、对象跟踪和图像配准。
我们使用了以下资源来开始操作:
* [](https://developer.apple.com/documentation/coreml/integrating_a_core_ml_model_into_your_app)
* 来自 Matthijs Hollemans 的 [](https://github.com/hollance/CoreMLHelpers) 的 Apple Vision 框架代码示例
现在,让我们开始构建该应用程序!
继续并从此 GitHub 存储库下载 iOS 示例应用程序源代码:[](https://github.com/awslabs/MXNet2CoreML_iOS_sample_app)。
使用 Xcode 打开 **MXNet2CoreML.xcodeproj**。
将您之前生成的 **RN1015k500.mlmodel** 文件拖放到您的 Xcode 项目导航器中 (如下图右侧所示),并确保为当前项目选中 **Target Membership** 复选框。
如果您未安装该转换工具,并且只是想试用该 iOS 应用程序,我们在此处上传了 Core ML 模型 **[](https://s3.amazonaws.com/aws-bigdata-blog/artifacts/RN1015k500/RN1015k500.mlmodel)**。下载该文件,然后将其拖放至 Xcode 项目导航器中。
![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/AppleCoreML_3_2.png)
### 运行该应用程序,查看一些神奇的地方
正如之前所述,我们建议您在运行 iOS 11 的物理设备上测试该应用程序 (在编写文本时仍为测试版)。
您也可以在 Xcode Simulator 中运行该应用程序,但性能和动画效果不会很好,特别是当您在地图区域中平移或缩放时。
如果您决定在物理 iOS 设备上运行该应用程序,请记得使用您的 **Team** 账户标记它,如以下屏幕截图所示。
正如我们的首项附注中所述,您将需要一个 Apple 开发人员账户才能执行此操作。
![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/AppleCoreML_4_2.png)
按 **play** 以构建您的应用程序并在 iPhone 上运行它。
![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/AppleCoreML_5_2.png)
该应用程序将安装到 iPhone 上,并且您应看到以下屏幕。
它包含 3 个部分:
* **顶部部分**显示在世界上的某个地方拍摄的图片。向左或向右轻扫图片可显示 3 张内置图像之一。虽然用人眼识别这些位置会相对容易一些,但该模型能够在这些图像中未嵌入任何 GPS 数据的情况下准确预测位置还是令人印象深刻。
* **中间部分**显示 3 个实时预测,其中“1”表示最有可能的位置,可能性较高。我们特意决定仅显示该模型产生的数百个预测中的前 3 个预测。
* **底部部分**显示一个交互式地图,其中包含针对该模型预测的 3 个位置的图钉。您可以在闲暇时执行缩放和平移操作来探究图钉所在的区域。
屏幕截图 1:
![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/AppleCoreML_6_2.png)
屏幕截图 2:
![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/AppleCoreML_7_2.png)
### 总结
正如本博客文章所述,您现在可以在 AWS 上使用 MXNet 构建和训练先进的机器学习模型,使用 **MXNet 到 Core ML 转换工具**将这些模型转换为 Core ML 格式,然后将它们快速导入 Xcode 中。现在,您可以在适用于 iOS 或其他 Apple 设备的应用程序中开始试用并创建新的出色功能。
### 接下来做什么?
如果您想使用您在计算机上保存的自己的图片来试用该应用程序,只需将您的图片重命名为 **1.jpg**,从 Xcode **项目导航器**中删除现有文件,然后拖放它即可。我们在此部分中讨论了如何在 Core ML 模型上执行此操作。
您也可以通过实施可让您在应用程序中拍摄图片或从相册加载图片的摄像机功能来进一步开发示例应用程序,然后对您已拍摄的图像或将在现场拍摄的图像执行实时位置预测。
我们很高兴地发现这篇博客文章将通过其他方式激励您。如果您有任何问题、评论或建议,请将其发布到下方的**备注**部分中。
享受乐趣!
---
### 补充阅读
了解如何[](https://amazonaws-china.com/blogs/ai/estimating-the-location-of-images-using-mxnet-and-multimedia-commons-dataset-on-aws-ec2/)。
[](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/08/08/estimating_location_1-300x122.gif)](https://amazonaws-china.com/blogs/ai/estimating-the-location-of-images-using-mxnet-and-multimedia-commons-dataset-on-aws-ec2/)
---
作者介绍:
**![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/seb.jpg)Sebastien Menant 是 Amazon Web Services 的解决方案架构师。**他起初与悉尼的企业客户合作,现在帮助旧金山港湾区的客户进行 AWS 创新。他曾在 Apple 公司工作过,在那里,他培养了对 iOS 软件开发和 Swift 编程语言的兴趣。
**![](https://d2908q01vomqb2.awsstatic-china.com/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/09/06/guptapra.jpg)Pracheer Gupta 是帕洛阿尔托的 AWS 深度学习团队的成员。**他目前是 Apache MXNet 应用程序的技术负责人,帮助客户基于 MXNet 构建智能应用程序。在过去,他致力于构建一种基于 Paxos 的分布式锁管理器,该管理器成为了 AWS 大部分的基本构建块。他在业余时间喜欢研究历史和心理学。
本文转载自 AWS 技术博客。
原文链接:
更多内容推荐
使用 QuTrunk+Amazon ParallelCluster3 进行并行计算
1.丘秉宜;2.邵伟;3.黄文;4.郭梦杰;5.刘利;6.刘波
2022-12-27
【4.14-4.21】写作社区优秀技术博文一览
为了让更多的创作者有展示自己的舞台,为了让更多优质内容有发光发热的机会,InfoQ 官方写作社区会时不时向大家推荐近期发布在社区的优质作品。
2023-04-21
Trace 大盘点
李老板: 奋飞呀,最近老听别人说Trace一下,啥是Trace呀?
2022-03-16
Deutsch-Jozsa Algorithm
The Deutsch-Jozsa algorithm, first introduced in Reference, was the first example of a quantum algorithm that performs better than the best classical algorithm. It showed that there can be advantages to using a quantum computer as a comput
2021-12-11
冠军!天翼云在国际 AI 顶会大模型挑战赛中拔得头筹!
6月7日,国际人工智能顶会CVPR 2023举办的第一届大模型挑战赛(CVPR 2023 Workshop on Foundation Model:1st foundation model challenge)落下帷幕,本次比赛吸引了来自全球著-名高校和知名企业的1024名参赛者。经过为期2个月的激烈角逐,天翼云AI团队(队名
2023-06-19
2020java 面试题 -chukou-chengzhang
[https://blog.csdn.net/baidu_32932571/article/details/51546276?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158454115519724845045677%2522%252C%2522scm%2522%253A%252220140713.130056874..%2522%257D&request_id=158454115519724845045
2022-05-09
4. 结果集处理:总结与面试要点
2023-09-26
加餐一 | 这 5 本关于物联网的好书,值得一读
今天,我会为你推荐5本非常值得读的书,如果你想从事物联网行业,一定不要错过。
2020-12-09
Snappy 你脱了马甲我照样认识你
通常压缩比高的占用空间小,但解压缩慢,反之亦然,常用的压缩格式有:GZIP、BZIP2、Snappy
2022-07-11
好好活就是做有意义的事,有意义的事就是好好活
好好活就是做有意义的事,有意义的事就是好好活。——许三多
2022-08-01
07- 热门技术栈 SpringCloud
2023-09-25
如何打开 plist 文件
plist 文件是一种用于存储应用程序配置信息的文件格式,其中包含应用程序的各种设置和数据。在过去,plist 文件通常是以.plist 格式存储的。然而,随着时间的推移,人们开始使用.plistx 格式来存储更复杂的数据结构和数据。如果您需要将.plist 文件打开,可以
2023-04-12
3. ORM 框架概览:GORM 和 Ent 分析
2023-09-26
再说绩效考核
绩效考核 自评 非物质奖励
2021-12-24
软件测试 / 测试开发丨 Pytest 参数化用例学习笔记
本文为霍格沃兹测试开发学社学员学习笔记分享,文末附原文链接。
2023-06-02
青云万里——10 分钟带你了解 Serverless 平台
2022-03-29
Introduction Schema-based 实现 - <aop:declare-parents/>
2021-03-25
Binder 驱动
Binder IPC 正是基于内存映射(mmap)来实现的,但是 mmap() 通常是用在有物理介质的文件系统上的。
2022-07-09
推荐阅读
看完了
2023-12-01
Topaz Video AI 4.0.2 视频增强和修复工具
2023-11-03
24|提示语工程(六):超越智能,让你的 AI 系统成为全知超人
2023-10-13
Topaz Video AI for mac(视频增强和修复工具) 4.0.2 完整激活版
2023-11-02
「支持 M1/M2」Topaz Video AI for mac 4.0.3
2023-11-04
直播回放|AI 绘画发展脉络与 LoRA 模型训练实战
2023-11-23
未来人工智能的璀璨星辰
2023-09-08
电子书
大厂实战PPT下载
换一换 张明 | 永辉超市 高级架构师
王国梁 | 腾讯 专家工程师
金发华 | EMQ 映云科技 联合创始人兼 CPO
评论