十分钟使用苹果机器学习框架CoreML进行图片识别(Swift版)

前几天WWDC上,苹果发布了机器学习框架CoreML 。借助 Core ML,您可以将已训练好的机器学习模型,集成到自己的应用当中,根据文档,Core ML是基于Metal和Accelerate开发的,在性能效率上有很高的保证。

十分钟使用苹果机器学习框架CoreML进行图片识别(Swift版)

在 CoreML 中, Apple 定义了一套自己的模型格式,后缀名为: mlmodel,通过 CoreML 框架,以及模型库,可以在 App 层面进行机器学习的功能研发。

一、下载Xcode9.0beta、苹果官网提供的demo

使用Core ML需要最新的Xcode9.0beta,而最低版本OS需要10.12.4。
下载地址:https://developer.apple.com/download/

以及苹果提供的官方项目:https://docs-assets.developer.apple.com/published/51ff0c1668/IntegratingaCoreMLModelintoYourApp.zip

十分钟使用苹果机器学习框架CoreML进行图片识别(Swift版)

下载下来 Run 了一下,不得不说,Apple 对开发者还是非常友好的,直接将模型文件拖到项目中,Xcode 会自动生成接口文件:

十分钟使用苹果机器学习框架CoreML进行图片识别(Swift版)

可以看到,主要是定义了输入,输出以及预测的格式,调用的时候,也非常简单,传参即可。

但是这些接口文件并没有在 XCode 左边的文件树中出现。

查了一下,是生成在 DerivedData 目录下,估计是想开发者使用起来更简洁。

运行一下,可以看到,主要功能是对价格进行预测。

好像稍微有点儿不那么高大上啊,官网提供的四个模型库,我们还没用呢,当然要看下能用来干啥,看了一下,貌似主要是物体识别,基于苹果提供的图像识别模型,本文将构建一个动物图像识别的Demo,项目要用到官网提供的图像模型库,下载地址:https://developer.apple.com/machine-learning/

二、配置完beta版开发完环境,下载完模型库Resnet50后开始coding,首先创建一个新的swift项目,将下载好的模型库拖进去:

十分钟使用苹果机器学习框架CoreML进行图片识别(Swift版)

从描述里面能看出来,这是一个神经网络的分类器,输入是一张像素为 (224 * 224) 的图片,输出为分类结果。自动生成上述接口文件(Model Class)

OK,要照片,而且是 CVPixelBuffer 类型的。

但是每次从相册选太烦了,所以我们直接找了一张本地的图片,读取UIImage,然后改下大小,再转回 CVPixelBuffer

 

OK ,Run起来

十分钟使用苹果机器学习框架CoreML进行图片识别(Swift版)

识别成 斑猫 虎斑猫,瞬间感觉高大上了啊

再来一个秋田犬试试…

十分钟使用苹果机器学习框架CoreML进行图片识别(Swift版)

北极犬、哈士奇……我笑出了声

 

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

如果您已经使用了第三方机器学习工具来创建和训练模型,只要这个工具是受支持的,那么就可以使用 Core ML Tools (https://developer.apple.com/machine-learning)来将这些模型转换为 Core ML 模型格式。下方表格 列出了支持的模型和第三方工具。

 

注意
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.2
广义线性模型 (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’)

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

代码后期会改进成在真机上运行,用相机拍照,识别照片中的物体,后期将上传OC版以及苹果其他模型库demo的操作文章

https://pan.baidu.com/s/1hsacwfi

最后代码奉上…玩的开心

更多人工智能教程推荐:

 

揭秘“图像识别”的工作原理

深度学习中的怪圈

 

本文为ATYUN(www.atyun.com)编译作品,ATYUN专注人工智能。请扫码或微信搜索ATYUN订阅号及时获取最新内容

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值