IOS Core ML 2 有什么新的变化?

  • 时间:2018-12-28 22:53 作者:无敌工程师达人 来源:无敌工程师达人 阅读:290
  • 扫一扫,手机访问
摘要:Core ML是苹果的机器学习框架。一年前发布的Core ML为开发人员提供了一种方法,可以用几行代码将强大而智能的机器学习功能集成到他们的应用程序中!今年,在WWDC 2018年大会上,苹果发布了Core ML 2.0——Core ML的下一个版本,其核心是通过优化模型的大小、改进性能,以及让开发
IOS Core ML 2 有什么新的变化?

Core ML是苹果的机器学习框架。一年前发布的Core ML为开发人员提供了一种方法,可以用几行代码将强大而智能的机器学习功能集成到他们的应用程序中!今年,在WWDC 2018年大会上,苹果发布了Core ML 2.0——Core ML的下一个版本,其核心是通过优化模型的大小、改进性能,以及让开发人员能够定制自己的Core ML模型,从而简化流程。

在本教程中,我将详情Core ML 2.0中引入的所有新特性,以及如何将其应用于机器学习应用程序!假如您是Core ML的新手,我建议您通过本教程熟习Core ML。假如您熟习它,让我们开始吧!

注意:要尝试这些技术,您需要在Mac上安装macOS Mojave。此外,您还需要安装coremltools beta.

一个快速回顾

应用程序商店中有很多很棒的应用程序,它们能够执行功能强大的任务。例如,你可以找到一个了解文本的应用程序。或者者是一个应用程序,它可以根据你的设施的运动知道你在做什么锻炼。此外,还有少量应用程序可以根据之前的图像对图像进行过滤。这些应用程序有一个共同点:它们都是机器学习的例子,所有这些应用程序都可以用Core ML模型创立。

应用程序中的Core ML模型

Core ML使开发人员可以很容易地将机器学习模型集成到他们的应用程序中。你可以创立一个能够了解对话内容或者识别不同音频的应用程序。此外,苹果还为开发人员提供了另一种方法,即通过两个框架(Vision和natural language)进行实时图像分析和自然语言了解。

使用VNCoreMLRequest API和NLModel API,您可以极大地加强应用程序的ML功能,由于视觉和自然语言都构建在核心ML之上!

视觉教程

自然语言教程

今年,苹果专注于帮助ML核心开发者的三个要点。

模型的尺寸

模型的性能

自己设置一个模型

让我们讨论这三点!

模型尺寸

Core ML的一个巨大优点是所有事情都是在设施上完成的。这样,客户的隐私永远是安全的,计算可以从任何地方进行。然而,随着使用更准确的机器学习模型,它们可以有更大的尺寸。将这些模型导入应用程序可能会占用客户设施上的大量空间。

苹果决定给开发者提供量化其Core ML模型的工具。量化模型是指以更紧凑的形式存储和计算数字的技术。在任何机器学习模型的核心,它只是一台试图计算数字的机器。假如我们要减少数字或者者以一种占用更少空间的形式存储它们,我们可以大幅度地减少模型的大小。这可以减少运行时内存的使用和更快的计算!

机器学习模型有三个主要部分:

模型数量

权重的个数

权重的大小

当我们量化一个模型时,我们正在减少权重的大小!在iOS 11中,Core ML模型存储在32位模型中。在ios12中,苹果给了我们以16位甚至8位存储模型的能力!这就是我们将在本教程中看到的内容!

假如你不熟习权重是什么,这里有一个很好的类比。假设你要从你家去超市。第一次,你可能会选择一条特定的道路。第二次,你会尝试找一条更短的路去超市,由于你已经知道去市场的路了。第三次,你会走更短的路线由于你知道前面两条路线。每次你去市场的时候,随着时间的推移,你会发现自己走的路越来越短!这种知道该走哪条路线的知识称为权重。因而,最精确的路径,就是权值最大的路径!

让我们把这个付诸实践。是时候写少量代码了!

权重量子化

作为一个例子,让我们使用一个称为Inception v3的流行机器学习模型进行演示。您可以在这里下载Core ML格式的模型。

打开这个模型,您可以看到它在94.7 MB时占用了相当大的空间。

IOS Core ML 2 有什么新的变化?

我们将使用Python包coremltools来量化这个模型。让我们来看看!

假如您的设施上没有安装python或者pip,您可以在这里学习安装过程。

首先,您需要确保安装coremltools的beta版本。打开终端,输入:

pip install coremltools==2.0b1

您应该会看到这样的输出。

IOS Core ML 2 有什么新的变化?

这个命令成功安装了Core ML工具beta 1的beta版本。接下来的几个步骤需要少量Python。不过不用担心,它真的很简单,不需要太多的代码!打开您所选择的Python编辑器,或者者在终端中进行操作。首先,让我们导入coremltools包。在终端中键入python,而后在编辑器出现后键入以下内容:

import coremltools

from coremltools.models.neural_network.quantization_utils

IOS Core ML 2 有什么新的变化?

这将导入核心ML工具包以及所有量化实用程序。接下来,让我们定义一个变量模型,并将其URL设置为Inceptionv3。mlmodel下载。

model = coremltools.models.MLModel('/PATH/TO/Inceptionv3.mlmodel')

IOS Core ML 2 有什么新的变化?

在我们对模型进行量化之前(它只要要2行!),让我给你少量神经网络的背景信息。

神经网络由不同的层组成。这些层只是数学函数,有很多参数。这些参数称为权重。

当我们量化权重时,我们取权重的最小值和最大值并映射它们。映射它们的方法有很多,但最常用的是线性和查找。线性量子化是将权重均匀地映射并减少它们。在查询表量化中,该模型构造一个表,并根据类似度对权重进行分组,并对权重进行减少。

假如这听起来很复杂,不要担心。我们所需要做的就是选择我们想要模型表示的比特数和要选择的算法。首先,让我们看看假如我们选择线性量化模型会发生什么。

lin_quant_model = quantize_weights(model, 16, "linear")

在上面的代码中,我们将Inceptionv3模型的权重量化为16位,并使用线性量化。运行这些代码会给你一个很长的列表,上面列出了程序量化的每一层。

IOS Core ML 2 有什么新的变化?

让我们保存模型,看看它与原始模型的比较。选择保存它的路径并输入以下命令。

lin_quant_model.save('Path/To/Save/QuantizedInceptionv3.mlmodel')

现在打开两个模型并比较大小。

IOS Core ML 2 有什么新的变化?

当我们以16位格式表示Inceptionv3模型时,它占用的空间更少!

然而,重要的是要记住什么是权重量化。之前,在我的类比中,我曾说过,权重越大,精确度越高。当我们量化一个模型时,我们也会随着模型的大小而降低模型的精确性。量子化是准确度的折衷。量子化模型是重量大小的近似,因而运行量子化模型并查看它们的性能总是很重要的。

理想情况下,我们希望量化模型,同时保持尽可能高的精确性。这可以通过找到合适的量化算法来实现。在前面的例子中,我们使用了线性量子化。现在让我们尝试使用查找量化,看看会发生什么。和之前一样,在终端中输入以下内容:

lut_quant_model = quantize_weights(model, 16, "kmeans")

IOS Core ML 2 有什么新的变化?

当模型完成量化时,我们需要通过少量示例数据将lin_quant_model和lut_quant_model与原始模型进行比较。通过这种方法,我们可以找出哪个量子化模型与原模型最类似。在这里下载示例图像文件夹。输入下面的行,我们可以看到哪个模型执行得更好!

compare_models(model, lin_quant_model, '/Users/SaiKambampati/Desktop/SampleImages')

这可能需要一段时间,但在这两个模型完成解决后,您将收到如下输出:

IOS Core ML 2 有什么新的变化?

我们对第一项协议感兴趣。它显示100%,这意味着它与我们的模型匹配100% !这对我们来说很好,由于我们现在有一个量子化模型,它占用的空间更少,而且精度与我们原来的模型差不多!假如需要,我们现在可以将其导入项目,但是我们也可以比较查找表量子化模型!

compare_models(model, lut_quant_model, '/Users/SaiKambampati/Desktop/SampleImages')

IOS Core ML 2 有什么新的变化?

我们收到了100%的输出,所以两个模型是兼容的!我鼓励你们尝试量化不同的模型。在上面的例子中,我们将Inceptionv3模型量化为16位模型。看看能否可以继续将模型量化为8位表示,甚至4位表示,并将其与示例数据进行比较!它体现如何?

IOS Core ML 2 有什么新的变化?

上面的图像形容了当我使用线性算法将Inceptionv3模型量化为1位表示时所发生的事情!正如你所看到的,模型的大小大大减少,但精确性!事实上,它完全不精确,精确率为0%。试着用量子化来找到一个合适的中间值。永远记得测试你的量化模型,以确保他们执行精确!

性能

苹果在Core ML 2上关注的下一点是性能。因为我们在设施上运行ML计算,我们希望它是快速和精确的。这很复杂。幸运的是,苹果为我们提供了一种改进Core ML模型性能的方法。让我们来看一个例子。

样式转换是一种机器学习应用程序,它基本上将某个图像转换为另一个图像的样式。假如你以前用过Prisma应用程序,那就是风格转移的一个例子。

IOS Core ML 2 有什么新的变化?

假如我们研究风格传递的神经网络,我们会注意到这一点。这个算法有一组特定的输入。神经网络中的每一层都对原始图像进行了肯定的变换。这意味着模型必需接收每个输入,并将其映射到输出,并据此进行预测。而后,预测有助于创立权重。在代码中会是什么样子?

// Loop over inputs

for i in 0..< modelInputs.count {

modelOutputs[i] = model.prediction(from: modelInputs[i], options: options)

}

// Loop over inputs

for i in 0..< modelInputs.count {

modelOutputs[i] = model.prediction(from: modelInputs[i], options: options)

}

在上面的代码中,您可以看到对于每个输入,我们要求模型生成一个预测,并根据少量选项生成一个输出。但是,遍历每个输入可能需要很长时间。

为理解决这个问题,苹果公司推出了全新的批解决API!与for循环不同的是,机器学习中的批解决是将所有输入输入输入到模型中,其结果是准确的预测!这可以花费更少的时间,更重要的是,更少的代码!

下面是用新的Batch Predict API编写的上面的for循环代码!

modelOutputs = model.prediction(from: modelInputs, options: options)

这是所有!只要一行代码即可以了!你可能在想,“等等!”我以前从没这么做过?这听起来很复杂。我在哪里用这个?这让我想到了最后一点,定制化。

定制

当你打开神经网络的引擎盖时,你会看到它们由许多层组成。但是,当您试图将一个神经网络从Tensorflow转换为Core ML时,可能会出现少量场景。或者者可能是将一个管道从Keras转换为Core ML。我这么说是什么意思?再举个例子。

利用卷积神经网络(CNN)建立图像识别模型。CNNs由一系列高度优化的层组成。当您将神经网络从一种格式转换为核心ML时,您正在转换每一层。但是,在少量罕见的场景中,Core ML可能不提供转换层的工具。在过去,你对此无能为力,但在iOS 12中,苹果工程师引入了MLCustonLayer协议,允许开发者快速创立自己的层。使用MLCustomLayer,您可以在核心ML模型中定义自己的神经网络层的行为。然而,值得注意的是,自己设置层仅适用于神经网络模型。

假如这听起来很复杂,不要担心。通常需要熟练的数据科学家或者机器学习工程师才能了解神经网络的所有复杂之处,并有能力编写自己的模型。这超出了本教程的范围,所以我们不会深入探讨。

结论

这总结了Core ML 2.0中的所有新变化。Core ML 2.0旨在使模型更小、更快、更可定制。我们理解了如何通过权重量化来减小核心ML模型的大小,如何通过新的批解决API来提高模型的性能,以及需要为模型编写定制层的示例。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】极客时间-数据分析实战45讲【完结】(2021-09-02 16:26)
【系统环境|windows】字节跳动前台面试题解析:盛最多水的容器(2021-03-20 21:27)
【系统环境|windows】DevOps敏捷60问,肯定有你想理解的问题(2021-03-20 21:27)
【系统环境|windows】字节跳动最爱考的前台面试题:JavaScript 基础(2021-03-20 21:27)
【系统环境|windows】JavaScript 的 switch 条件语句(2021-03-20 21:27)
【系统环境|windows】解决 XML 数据应用实践(2021-03-20 21:26)
【系统环境|windows】20个编写现代CSS代码的建议(2021-03-20 21:26)
【系统环境|windows】《vue 3.0探险记》- 运行报错:Error:To install them, you can run: npm install --save core-js/modules/es.arra...(2021-03-20 21:24)
【系统环境|windows】浅谈前台可视化编辑器的实现(2021-03-20 21:24)
【系统环境|windows】产品经理入门迁移学习指南(2021-03-20 21:23)
血鸟云
手机二维码手机访问领取大礼包
返回顶部