概览

借助 Core ML,您可以将已训练好的机器学习模型,集成到自己的应用当中。

所谓已训练模型 (trained model),指的是对一组训练数据应用了某个机器学习算法后,所生成的一组结果。举个例子,通过某个地区的历史房价来训练出一个模型,那么只要指定房间有几卧几卫,就有可能对未来该房间的房价做出预测。
Core ML 是领域特定 (domain-specific) 框架和功能的基础所在。Core ML 为 Vision 提供了图像处理的支持,为 Foundation 提供了自然语言处理的支持(例如 NSLinguisticTagger 类),为 GameplayKit 提供了对学习决策树 (learned decision tree) 进行分析的支持。Core ML 本身是基于底层基本类型而建立的,包括 Accelerate、BNNS 以及 Metal Performance Shaders 等。

Core ML 针对设备的性能进行了优化,最大限度地减少内存占用和功耗。通过在设备上运行的严格要求,不仅保护了用户数据隐私,而且当网络连接丢失的时候,还能够保证应用能正常工作和响应。

获取 Core ML 模型

获取 Core ML 模型,以便能在您的应用当中使用。

Core ML 支持多种机器学习模型,其中包括了神经网络 (Neural Network)、组合树 (Tree Ensemble)、支持向量机 (Support Vector Machine) 以及广义线性模型 (Generalized Linear Model)。Core ML 的运行需要使用 Core ML 模型格式(也就是以 .mlmodel 扩展名结尾的模型)。

Apple 提供了一些常见的开源模型供大家使用,这些模型已经使用了 Core ML 模型格式。您可以自行下载这些模型,然后就可以开始在应用中使用它们了。此外,其他的研究机构和大学都发布了不少机器学习模型和训练数据,这些往往都不是以 Core ML 模型格式发布出来的。如果您打算使用这些模型的话,需要对它们进行转换,具体内容详见「将已训练模型转换为 Core ML」。

将 Core ML 模型集成到应用中

向应用中添加一个简单的模型,然后向模型中传入输入数据,并对模型的预测值进行处理。

点击此处下载示例应用。

概述

本示例应用使用了一个已训练模型 MarsHabitatPricer.mlmodel,用以预测火星上的殖民地价值。

将模型添加到 Xcode 项目中

要想将模型添加到 Xcode 项目当中,只需要将模型拖曳进项目导航器 (project navigator) 当中即可。

您可以通过在 Xcode 中打开这个模型,从而来查看它的相关信息,其中包括有模型类型以及其预期输入和输出。模型的输入为太阳能板和温室的数量,以及殖民地的规模大小(以英亩为单位)。模型的输出则是对这个殖民地价值的预测。

用代码创建模型

Xcode 同样也会使用模型的输入输出信息,来自动为模型生成一个自定义的编程接口,从而就可以在代码当中与模型进行交互。对于这个 MarsHabitatPricer.mlmodel 而言,Xcode 会生成相应的接口,来分别表示模型本身(MarsHabitatPricer)、模型输入 (MarsHabitatPricerInput) 以及模型输出 (MarsHabitatPricerOutput)。

使用所生成的 MarsHabitatPricer 类的构造器,便可以创建这个模型:

let model = MarsHabitatPricer()

获取输入值以传递给模型

示例应用使用了  UIPickerView ,以便从用户那里获取模型的输入值。

func selectedRow(for feature: Feature) -> Int {return pickerView.selectedRow(inComponent: feature.rawValue)
}let solarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels), feature: .solarPanels)
let greenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses), feature: .greenhouses)
let size = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)

使用模型来进行预测

MarsHabitatPricer 类会生成一个名为 prediction(solarPanels:greenhouses:size:) 方法,从而就可以根据模型的输入值来预测价值,在本例当中,输入值为太阳能板的数量、温室的数量以及殖民地的规模大小(以英亩为单位)。这个方法的结果为一个 MarsHabitatPricerOutput 实例,这里我们将其取名为 marsHabitatPricerOutput

guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels, greenhouses: greenhouses, size: size) else {fatalError("Unexpected runtime error.")
}

通过读取 marsHabitatPricerOutput 的 price 属性,就可以获取所预测的价值,然后就可以在应用的 UI 当中对这个结果进行展示。

let price = marsHabitatPricerOutput.price
priceLabel.text = priceFormatter.string(for: price)

注意
所生成的 prediction(solarPanels:greenhouses:size:) 方法会抛出异常。在使用 Core ML 的时候,您大多数时候遇到的错误通常是:传递给方法的输入数据类型与模型预期的输入类型不同——例如,用错误格式表示的图片类型。在示例应用当中,预期的输入类型为 Double。所有的类型不匹配错误都会在编译时被捕获,如果遇到了某种错误,那么示例应用就会弹出一个致命错误。

构建并运行 Core ML 应用

Xcode 会将 Core ML 模型编译到资源当中,从而进行优化并能够在设备上运行。优化过的模型表征会包含在您的应用程序包当中,在应用在设备上运行的时候,就可以用之来进行预测。

将已训练模型转换为 Core ML

将由第三方机器学习工具所创建的已训练模型,转换为 Core ML 模型格式。

概述

如果您已经使用了第三方机器学习工具来创建和训练模型,只要这个工具是受支持的,那么就可以使用 Core ML Tools 来将这些模型转换为 Core ML 模型格式。表 1 列出了我们支持的模型和第三方工具。

注意
Core ML Tools 是一个 Python 包 (coremltools),并挂载在 Python Package Index (PyPI) 上。要了解关于 Python 包的更多信息,请参阅 Python Packaging User Guide。

模型类型 支持的模型 支持的工具
神经网络 (Neural network) 前馈 (Feedforward)、卷积 (Convolutional)、循环 (Recurrent) Caffe / Keras 1.2.2
组合树 (Neural networks) 随机森林 (Random Forests)、提升树 (Boosted Trees)、决策树 (Decision Trees) scikit-learn 0.18 / XGBoost 0.6
支持向量机 (Support vector machines) 标量回归 (Scalar Regression)、多级分类 (Multiclass classification) scikit-learn 0.18 / LIBSVM 3.22
广义线性模型 (Support vector machines) 线性回归 (Linear Regression)、逻辑回归 (Logistic Regression) scikit-learn 0.18
特征工程 (Feature engineering) 稀疏向量矢量化 (Sparse Vectorization)、稠密向量矢量化 (Dense Vectorization)、分类处理 (Categorical Processing) scikit-learn 0.18
管道模型 (Pipeline models) 顺序链模型 (Sequentially Chained Models) scikit-learn 0.18

模型转换

您可以使用 Core ML 转换器,并根据对应的模型第三方工具,来对模型进行转换。通过调用转换器的 convert 方法,然后再将结果保存为 Core ML 模型格式 (.mlmodel)。
例如,如果您的模型是使用 Caffe 来创建的,您可以将 Caffe 模型 (.caffemodel) 传递给 coremltools.converters.caffe.convert 方法。

import coremltools
coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')

然后将结果保存为 Core ML 模型格式。

coreml_model.save('my_model.mlmodel')

根据您模型的不同,您可能会需要更新输入、输出以及相关的参数标签,或者您还可能会需要声明图片名称、类型以及格式。转换工具内置了更详细的文档,因为可用的选项因工具而异。

或者,还可以编写自定义的转换工具

如果您需要转换的格式不在表 1 当中,那么您可以创建自己的转换工具。

编写自定义的转换工具,包括了将模型的输入、输出和架构表示转换为 Core ML 模型格式。您可以通过将每一层模型架构,以及层之间的连接关系进行定义,来实现这个操作。您可以通过 Core ML Tools 所提供的转换工具作为参考;它们演示了如何将各种第三方工具创建的模型类型,转换为 Core ML 模型格式。

注意
Core ML 模型格式由一系列 Protocol Buffer 文件所定义,具体信息请参见 Core ML Model Specification。

Core ML API

直接使用 Core ML API,从而支持自定义工作流以及更为高级的用例。

在绝大多数情况下,您只需要与模型动态生成的接口进行交互即可,也就是说当您将模型添加到 Xcode 项目当中的时候,这个接口就由 Xcode 自动创建完毕了。您可以直接使用 Core ML API,以便支持自定义工作流或者更为高级的用例。举个例子,如果您需要将输入数据异步收集到自定义结构体,从而来执行预测的话,那么您就可以让这个结构体实现 MLFeatureProvider 协议,从而来为模型提供输入功能。

具体的 API 列表请参见 Core ML API。

原文地址:

http://www.jianshu.com/p/6c2dff59eaaf

sample code

https://docs-assets.developer.apple.com/published/51ff0c1668/IntegratingaCoreMLModelintoYourApp.zip

开源模型

有时间我来比较一下Core ML和TensorFlow Lite的性能。

Core ML介绍 (Apple机器学习框架)相关推荐

  1. 移动应用AI化成新战场?详解苹果最新Core ML模型构建基于机器学习的智能应用...

    Google刚刚息鼓,苹果又燃战火!这一战,来自移动应用的AI化之争. 近日,苹果发布专为移动端优化的Core ML后,移动开发者对此的需求到底有多强烈?去年大获成功的AI应用Prisma又能告诉我们 ...

  2. iOS 11: CORE ML—浅析

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/OWD5UEiVu5JpYArcd2H9ig 作者:l ...

  3. 了解机器学习框架CoreML

    代码地址如下: http://www.demodashi.com/demo/11972.html CoreML是iOS 11新推出的机器学习框架,是人工智能的核心内容,他可以在训练好的机器学习模型应用 ...

  4. iOS 11 : CORE ML—浅析

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

  5. ios 11 CORE ML 学习入门

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

  6. Core ML 文档翻译

    概览 借助 Core ML,您可以将已训练好的机器学习模型,集成到自己的应用当中. 所谓已训练模型 (trained model),指的是对一组训练数据应用了某个机器学习算法后,所生成的一组结果.举个 ...

  7. 获取 Core ML 模型

    文章 获取 Core ML 模型 获取要在 app 中使用的 Core ML 模型. 概览 Core ML 支持多种机器学习模型,包括神经网络.树集成.支持向量机和广义线性模型.Core ML 要求使 ...

  8. 手把手教你在应用里用上iOS机器学习框架Core ML

    2017-06-10 Cocoa开发者社区 2017年的WWDC上,苹果发布了Core ML这个机器学习框架.现在,开发者可以轻松的使用Core ML把机器学习功能集成到自己的应用里,让应用变得更加智 ...

  9. 苹果WWDC学习框架Core ML的发布,正式嵌入终端设备

    Core ML 苹果全球开发者大会周一低调宣布将推出 Core ML,移动设备上的机器学习编程框架,可应用于 Apple的如 Siri,Camera和 QuickType等产品上.它允许开发人员将训练 ...

最新文章

  1. 穿了个GUI马甲的PyInstaller
  2. Java实现二维码QRCode的编码和解码
  3. python中的几种copy用法_Python3中copy模块常用功能及其他几种copy方式比较
  4. python from sys import argv_笨方法学python之import sys与from sys import argv的区别
  5. 在计算机系统中引入通道结构,第5-6章习题讲解.doc
  6. 分布式改造剧集三:Ehcache分布式改造
  7. linux 轻量化图形界面,YOXIOS 入门教程--基于Linux的 轻量化GUI图形系统和硬件平台(41页)-原创力文档...
  8. Win7系统Office卸载不干净无法安装怎么办
  9. 守护线程 java 1615478655
  10. Android 系统(81)---Android permission 动态申请、授权
  11. 记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程
  12. ring0检测隐藏进程
  13. EI/scopus推荐-智能交通与智慧城市会议
  14. mysql安全补丁,Oracle发布了本季安全补丁,包含了mysql在内的高危漏洞补丁
  15. matlab图片客观评价,图像质量评价(一):IQA介绍
  16. 实验:用科来软件进行抓包
  17. css 实现一个尖角_css 实现一个带尖角的正方形
  18. Aquariusの瓶子的眼泪
  19. 利用WorkBook实现excel到list的转换
  20. 单独运行thingsboard ui

热门文章

  1. mongodb数据迁移2种方式比较
  2. 深入浅出之正则表达式(二)(转载)
  3. 域名到期续费删除的相关规则
  4. 2021HDU多校7 - 7054 Yiwen with Formula(分治MTT优化dp)
  5. CodeForces - 1373D Maximum Sum on Even Positions(最大连续子段和)
  6. (十二)boost库之多线程高级特性
  7. Python 获取指定文件夹下的目录和文件
  8. 当我们在谈论cpu指令乱序的时候,究竟在谈论什么?
  9. 一文掌握 Redis 常用知识点 | 图文结合
  10. RabbitMQ之TTL(Time-To-Live 过期时间)