超简单掌握CoreML 开发
2017-10-16编译张含阳
□编译/张含阳
超简单掌握CoreML 开发
□编译/张含阳
CoreML是2017年苹果WWDC发布的最令人兴奋的功能之一。它可用于将机器学习整合到应用程序中,并且全部脱机。
CoreML允许你将各种机器学习模型类型集成到你的应用程序中。除了支持30多种类型广泛的深度学习外,它还支持诸如树集成、SVM(支持向量机)和广义线性模型之类的标准模型。由于它是建立在像Metal和Accelerate这样的低级技术之上的,所以Core ML无缝利用CPU和GPU,以提供最高的性能和效率。你可以在设备上运行机器学习模型,因此数据不需要离开要进行分析的设备。
当你想要深入了解预测如何发生,在哪儿发生时,你就会发现CoreML的重要性。到目前为止,所有人都习惯于将机器学习整合到应用程序中,预测过程则发生在托管服务器中。如果是对象识别应用程序,则必须从设备中捕获帧,将数据发送到预测引擎,然后等待图像完全上传到服务器,最后得到输出。 这种方法主要有两个问题——网络延迟和用户隐私。现在,所有这些处理都可以简单地发生在设备中,从而减少了这两个问题。
在CoreML之前,架构是这样的:
从零开始
我们可以尝试使用CoreML,从而实现在一个简单的设备上解决方案的设想。
我将重点介绍iOS以及Swift的基础知识。首先我们要做的是获得iOS 11设备和Xcode 9。如果你不熟悉机器学习,可以先简要了解一下机器学习的相关知识,以便进一步探索该课题。
机器学习
该技术使计算机能够在没有明确编码问题解决方案的情况下学习。这里有两个过程——训练和预测。训练是我们给模型不同的输入集(和相应的输出)以便从模式中学习的过程。这个训练过的模型被馈送了一个之前没有看到的输入,然后从之前的观察中预测出来。
选择模型
所以我们要做的第一件事是为你的项目选择一个很好的模型。有许多预训练的模型可用于图像识别。或者你还可以训练自己的模型来获得更好的体验。
Xcode模型查看器显示的Inceptionv2.mlmodel
来自苹果机器学习的CoreML有很多很好的模型(下载网址https://developer.apple.com/machine-learning/), 或者如果你有自己的模型,可以使用Apple提供的CoreML工具将其转换为支持CoreML的模型(网址:https://pypi.python.org/pypi/coremltools)。我选择了苹果中提供的Inception V3库。
Inception V3——从一组1000个类别(如树木、动物、食物、车辆、人物等)中检测出图像中的目标物体。
创建iOS项目
你可以使用带有单视图控制器的swift创建一个基本的iOS项目,包括视频预览图层和标签。
从视频预览中获取帧
我们可以像往常一样获取当前帧,这是我们已经知道的。这在这篇invasivecode的文章中有所解释。
使用Inception V3进行预测
在提供输入图像时,将我们的初始模型视为黑盒子,可以预测出其知道的一组类别中的一个概率。
从Apple的门户下载模型,拖动它(Inceptionv3.mlmodel)到你的项目。你可以从Xcode中看到模型描述。
你可以看到该模型以299×299像素的图像作为输入,并给出输出:
图像最可能的类别;
每个类别的概率列表;
我们可以利用这些参数中的任何一个来确定类别。我使用的第一个是一个绳子,并直接打印在屏幕上。
你还可以看到,Xcode直接从mlmodel对象中创建一个swift模型(Inceptionv3.swift)。你不必为此做任何额外的更改。
用法
我们可以利用Xcode生成预测API,如下所示:
预测则很简单:
但它需要用CVPixelBuffer的对象而不是UIImage进行预测,这是由hackingwithswift.com在“机器学习与远景”一节中精通这些的人介绍的,文章……(https://www.hackingwithswift.com/whats-new-inios-11)。
我已经创建了UIImage类别,并将其与resize API一起进行提取。
最后的架构
结果
该应用程序能够从几乎所有提供的输入中正确识别结果。
张含阳本刊编辑