写点什么

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

  • 2019-11-08
  • 本文字数:4676 字

    阅读完需:约 15 分钟

使用 Apache MXNet 和 Apple Core ML 将机器学习引入 iOS 应用程序
_作者:Sebastien Menant – Amazon Web Services 的解决方案架构师;Pracheer Gupta – 帕洛阿尔托的 AWS 深度学习团队的成员 /


原文链接


_


利用 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 大部分的基本构建块。他在业余时间喜欢研究历史和心理学。
复制代码


TAGS:


AI


,


Apache MXNet


,


Apple Core ML


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/bring-machine-learning-to-ios-apps-using-apache-mxnet-and-apple-core-ml/


2019-11-08 08:00713

评论

发布
暂无评论
发现更多内容

精耕丝路,智胜全球 | 新华三助力中企跑好“出海”赛道

新消费日报

Win服务器图床配置

路北路陈

6 月 优质更文活动

数据分析:电子商务需要关注的重要指标有哪些?

搞大屏的小北

电子商务 销售指标

科兴未来|2023年扬中高层次人才创新创业大赛

科兴未来News

“敏捷教练进阶课程”7月22-23日 ·A-CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

敏捷教练

NFTScan | 06.05~06.11 NFT 市场热点汇总

NFT Research

NFT 热点

Java代码性能测试实战之ContiPerf

javalover123

单元测试 性能测试 压测 JUnit Java'

从分布式到微服务解密“架构”原理与实战笔记

小小怪下士

Java 程序员 分布式 微服务

电路板电镀中4种特殊的电镀方法

华秋PCB

经验 电路板 焊接 PCB板 电镀

数据可视化设计四大原则透析

搞大屏的小北

数据可视化 设计要素 大屏设计

“数字创新产品课程”7月29-30日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum

DevEco创建项目时的错误解决

路北路陈

6 月 优质更文活动

揭秘Spring依赖注入和SpEL表达式

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

赋能矿山 | KaiwuDB 智慧矿山解决方案

KaiwuDB

解决方案 智慧矿山 KaiwuDB

3 个技巧,让你像技术专家一样解决编码问题

LigaAI

程序人生 技术专家 技术人成长 问题分析及解决 企业号 6 月 PK 榜

对线面试官-线程池(四)

派大星

Java 面试题

智慧生活垃圾焚烧发电厂Web3D可视化平台

2D3D前端可视化开发

物联网 数字孪生 三维可视化 工业组态 智慧垃圾焚烧发电厂

Web网页端IM产品RainbowChat-Web的v5.0版已发布

JackJiang

网络编程 即时通讯 IM

当GaussDB遇上了毕昇编译器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Navicat Premium将关系和实体添加到概念模型的方法

背包客

macos MySQL 数据库 Mac 软件 Navicat Premium

源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

科兴未来|2023”福地句才”海外人才创业大赛

科兴未来News

MySQL 8.0.29 instant DDL 数据腐化问题分析

GreatSQL

greatsql greatsql社区

今年LED显示屏市场趋势

Dylan

商业 广告 娱乐 数字化 LED显示屏

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

BeeWorks

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

Sentinel熔断降级的规则及实现原理

互联网架构师小马

Java sentinel 熔断降级

TCMalloc 技术细节详解

KaiwuDB

KaiwuDB TCMalloc

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

百度Geek说

人工智能 百度 企业号 6 月 PK 榜

分享几款 Mac 上非常好用的的免费软件

搞大屏的小北

数据可视化 数据库工具 截图软件 视屏转 gif 视频号下载

【零售电商系列】走进亚马逊之自建仓储&物流

小诚信驿站

6 月 优质更文活动

使用 Apache MXNet 和 Apple Core ML 将机器学习引入 iOS 应用程序_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章