本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

码报:如何用CoreML在苹果上开发「实时对象识别器」?

时间:2017-08-06 18:58来源:118论坛 作者:118KJ 点击:
「机器人圈」编译:BaymaxZ CoreML是2017年苹果WWDC发布的最令人兴奋的功能之一。它可用于将机器学习整合到应用程序中,并且全部脱机。 以下是来自苹果的官方机器学习文档:(https

「机器人圈」编译:BaymaxZ

CoreML是2017年苹果WWDC发布的最令人兴奋的功能之一。它可用于将机器学习整合到应用程序中,并且全部脱机。

以下是来自苹果的官方机器学习文档:(https://developer.apple.com/machine-learning)

CoreML允许你将各种机器学习模型类型集成到你的应用程序中。除了支持30多种类型的广泛的深度学习外,它还支持诸如树集成、SVM(支持向量机)和广义线性模型之类的标准模型。由于它是建立在像Metal和Accelerate这样的低级技术之上的,所以Core ML无缝利用CPU和GPU,以提供最高的性能和效率。你可以在设备上运行机器学习模型,因此数据不需要离开要进行分析的设备。

当深入了解预测如何发生,在哪儿发生,你就会发现CoreML的重要性。到目前为止,所有人都习惯于将机器学习整合到应用程序中,预测过程则发生在托管服务器中。如果是对象识别应用程序,则必须从设备中捕获帧,将数据发送到预测引擎,等待图像完全上传到服务器,最后得到输出。 这种方法主要有两个问题——网络延迟和用户隐私。现在,所有这些处理都可以简单地发生在设备中,j2直播,从而减少了这两个问题。

在coreML之前,架构是这样的

从零开始

我们可以尝试使用CoreML,并为此实现一个简单的设备上解决方案。

我将重点介绍iOS或Swift的基础知识。首先我们要做的是获得iOS 11设备和Xcode 9。如果你不熟悉机器学习,请在这里看一下简单介绍,或者你可以从这里获得高级别概述。

机器学习

该技术使计算机能够在没有明确编问题解决方案的情况下学习。这里有两个过程——训练和预测。训练是我们给模型不同的输入集(和相应的输出)以便从模式中学习的过程。这个训练过的模型被传送了一个从之前没有看到的输入,从之前的观察中预测出来。

选择模型

所以我们要做的第一件事是为你的项目选择一个很好的模型。有许多预训练的模型可用于图像识别。或者你甚至可以训练自己的模型来获得更好的体验。

来自苹果机器学习的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中看到模型描述。

Xcode模型查看器显示的Inceptionv2.mlmodel

你可以看到该模型以299x299像素的图像作为输入,并给出输出:

图像最可能的类别

每个类别的概率列表

我们可以利用任何这些参数来确定类别。我使用的第一个是一个绳子,并直接打印在屏幕上。

你还可以看到,Xcode直接从mlmodel对象创建一个swift模型(Inceptionv3.swift)。你不必为此做任何额外的更改。

用法

我们可以利用Xcode生成的预测API,j2直播,如下所示:

/**

Make a prediction using the convenience interface

- parameters:

- image: Input image to be classified as RGB image buffer, 299 pixels wide by 299 pixels high

- throws: an NSError object that describes the problem

- returns: the result of the prediction as Inceptionv3Output

*/

func prediction(image: CVPixelBuffer) throws -> Inceptionv3Output {

let input_ = Inceptionv3Input(image: image)

return try self.prediction(input: input_)

}

/// Model Prediction Output Type

class Inceptionv3Output : MLFeatureProvider {

/// Probability of each category as dictionary of strings to doubles

let classLabelProbs: [String : Double]

/// Most likely image category as string value

let classLabel: String

// Class has other APIs and properties.

// ...

}

预测则很简单:

var model = Inceptionv3()

let output = try? model.prediction(image: pixelBuffer)

let prediction = output?.classLabel ?? “I don’t know! ”

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容