当前位置:   article > 正文

深入浅出 Core ML_coreml

coreml

Machine Learning 基本介绍

机器学习是一门人工智能的科学。它通过对经验、数据进行分析,来改进现有的计算机算法,优化现有的程序性能。其基本流程如下图:
在这里插入图片描述

如图,机器学习有三个要素:

  1. 数据(Data)
  2. 学习算法(Learning Algorith)
  3. 模型(Model)

以图片分析 App 为例,这个场景下的数据、学习算法和模型分别对应:

  1. 数据:各种花的图片。这些数据称为此次机器学习的样本(Sample)。每张图片中包含的信息,比如形状、色彩,称之为特征(Feature)。每张图片对应的花朵,比如梅花、玫瑰,称之为标签(Label)。这些图片中蕴含着某些规律,而我们人类正是依靠这些规律判断出图片对应的花朵(标签)。现在我们希望机器能够把这个规律挖掘出来。这样在面对新的样本时,机器能根据其特征,准确判断其对应标签,也就是判断图片对应的花朵。
  2. 学习算法:机器学习的算法有很多,比如神经网络、逻辑回归、随机森林等等。作为 iOS 工程师我们无需深刻理解这些算法,只要知道输入数据后执行“学习算法”就可以得到模型。
  3. 模型:即机器从样本数据中挖掘出来的规律。有了模型之后,面对新的数据,模型就可以做出相应判断,例如下图图片是郁金香还是玫瑰。
    在这里插入图片描述

Core ML 到底是什么

Core ML 是苹果为其开发者准备的机器学习框架。支持 iOS, MacOS,tvOS,和 watchOS。它由4部分组成,其结构如下图:
在这里插入图片描述

  1. 最底层性能框架层:由 Acccelerate 和 Metal Performance Shaders 两个框架组成。前者用于图形学和数学上的大规模计算,后者用于优化与加速 GPU 和图形渲染。
  2. Core ML:支持导入机器学习的模型,并生成对应高级代码(Swift, Objective-C)的框架。
  3. 专用机器学习框架:基于 Core ML,针对特殊场景进行封装和优化的框架。如上图所示,Vision 框架和 NLP 框架都是 iOS 11 最新添加:前者用于图片分析,例如人脸识别;后者用于自然语义分析,例如上下文理解。 iOS 中的 GamePlayKit 框架也属于Core ML 对应的专用框架,用于决策树(Decision Tree)模型的学习。
  4. 应用层:使用了这些框架之后构建起来的 App。应用场景(如下图)十分广泛:人脸识别,手写文字理解,类型转化,文字情感分析,自动翻译,等等。
    在这里插入图片描述

Core ML 使用说明

主要操作过程分三步:

  1. 得到 Core ML 的模型
  2. 将模型导入项目中
  3. 用生成的 Swift 接口进行编程

下面我们来分别对这三个步骤进行详解:

得到 Core ML 的模型

在苹果官网上你可以直接拿到训练好的模型。目前有4个:
在这里插入图片描述

你也可以自己训练模型,或到第三方社区去下载别人训练好的模型。苹果提供了转换器(基于 Python,开源)用于把其它机器学习框架训练出来的模型转化
为 Core ML 适配的模型。如下图所示:
在这里插入图片描述

如何使用 Core ML Tools 进行转化的原理和演示详见《Core ML in Depth》文章。

将模型导入项目中

直接拖拽即可。记得右侧 Target Membership 选项勾选自己的 App。你可以点击 mlmodel 文件观看它的属性。大小(Size)是 App 性能的一个重要指标,输入(Input)输出(Output)决定了如何使用这个模型。下图中输入是花朵图片,为 image 类型。输出有两个值,一个是最有可能的花朵,为 String 类型;另一个是所有可能的花朵类型即其对应的可能性,为 String 对应 Dobule 的 Dictionary 类型。
在这里插入图片描述

用生成的 Swift 接口进行编程

生成的接口如下:

// 输入class FlowerClassifierInput {    // 花朵图片
   var flowerImage: CVPixelBuffer
}// 输出class FlowerClassifierOutput {    // 最有可能的花朵类型
   let flowerType: String

   // 所有可能的花朵类型即其对应的可能性
   let flowerTypeProbs: [String: Dobule]
}// 模型class FlowerClassifier {
   convenience init()    // 通过输入产生输出
   func prediction(flowerImage: CVPixelBuffer) throws -> FlowerClassifierOutput
}

在实际代码中调用接口进行应用:

// 调用 modellet flowerModel = FlowerClassifier()// 利用 flower model 对输入进行分析if let prediction = try? flowerModel.prediction(flowerImage: image) {    // 得到分析的结构
   return prediction.flowerType
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Core ML 的支持和工具

现在 iOS 上可以运行的Core ML 的模型可以从苹果官网上下载,也可以通过第三方社区下载,Caffee,Keras,LIBSVM,scikit-learn,xgboot等开源机器学习框架训练出的模型皆可无缝转换为 Core ML 对应的模型。

同时,苹果开源并展示了如何使用它们自己的 Core ML 模型转换工具,它是用 Python 写成。你可以定制转换器和转换模型的参数。下面我们就来看看使用 Core ML 模型转换工具的步骤。

  • 安装 Core ML 工具

直接在终端中输入以下命令:

pip install -U coremltools
  • 1

如果 Mac 上没有安装 Python,请先用命令行安装:

brew install python
  • 1
  • 转换训练好的模型

假如你的模型是用 caffe 训练的,即现在有一个 .caffemodel 文件,以下步骤可以将其转化为苹果支持的 .mlmodel:

// 导入 core ml 工具库
import coremltools

// 利用 core ml 中对应的 caffee 转化器处理 .caffemodel 模型
coreml_model = coremltools.converters.caffe.convert('XXX.caffemodel')

// 将转化好的模型存储为 .mlmodel 文件
coreml_model.save('XXX.mlmodel')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

确定转化好的模型能否工作(比如检测现有模型能否识别一张玫瑰图片),可以直接运行:

myTestData = Image.open('rose.jpg')

XXX.mlmodel.predict('data': myTestData)
  • 1
  • 2
  • 3

如果能正确输出结果(预测结果应含有 rose,其预测可能性较高),那么证明模型转换没有问题。

  • 定制化转化的模型

定制转化模型的参数,我们一般用 label.txt 文件来定义,直接传入转化中即可。

// 自定义模型的接口参数
labels = 'labels.txt'

// 将 labels 设为转换的模型参数
coreml_model = coremltools.converters.caffe.convert('XXX.caffemodel', class_labels='labels')
  • 1
  • 2
  • 3
  • 4
  • 5

定制转化的输入数据 data 为 image 类型:

coreml_model = coremltools.converters.caffe.convert('XXX.caffemodel', class_labels='labels', image_input_name = 'data')
  • 1

指定转换模型的描述型参数(metadata):

// 指定作者信息
coreml_model.author = 'Apple Papa'

// 指定许可证
coreml_model.license = 'MIT'

// 指定输入('data')描述
coreml_model.input_description['data'] = 'An image of flower'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

其他参数也类似设置。

目前苹果因为版权问题,对于 Google 的 TensorFlow 和 Amazon 的 MXNet 两大框架支持不够,但是这两个框架训练出来的模型转换成 iOS 上对应的 Core ML 模型难度并不大,除了用苹果自己的转换工具外,网上也有很多开源工具可以做到。
在这里插入图片描述

App 使用场景

  1. 文字情感分析

所谓文字情感分析,就是根据输入文字内容,机器自动判定文字表达的是正面还是负面情绪。苹果示例的 App 如下:
在这里插入图片描述

当什么文字都没有的时候,App 反应的是正常情感;当文字内容为开心或赞美时,App 会变为笑脸;当文字内容为伤心或抱怨时,App 会变为苦瓜脸。整个过程为即时反映,几乎无延迟。

整个 App 的原理可以分为下四步

  • 用自然语义处理API统计输入文字的单词频率
  • 将单词频率输入到 Core ML 的模型中
  • Core ML 模型根据单词频率判断内容为正面或负面情绪
  • 根据情绪内容更新 UI
  1. 实时物体识别

文字情感分析 App 使用的是自然语义处理(NLP)的框架,而实时物体识别使用的是视觉(Vision)框架,他们两是基于 Core ML 的最核心的两大系统框架。

所谓实时物体识别,是指 iPhone 可以自动识别出摄像头所对准的物品,如下图所示。
在这里插入图片描述

当镜头对准餐桌时,机器自动识别出餐桌,并给出相似概率。类似 Google IO 大会上展示的 Google Lens。其原理是将所捕捉到的物体传给 Core ML 的模型,让模型实时推测出物品并更新 UI。具体的原理和代码参见《初探 iOS 上的人工智能:Core ML》,这里不再赘述。

总结

借助 Core ML,苹果将复杂的学习算法和模型训练从机器学习中剥离出来,开发者无需理解其背后深奥的逻辑和计算,只需直接调用模型、在本地实时安全的运用即可。同时为了兼顾扩展性,苹果对其他第三方机器学习框架和模型提供了 Core ML 转换接口和工具。由于现在的 Core ML 支持模型太少,且转换流程自定义空间不大,所以使用场景和应用也比较简单局限。相信在未来苹果会加快完善 Core ML,使得其能够在 App 开发中大展拳脚。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/575505
推荐阅读
相关标签
  

闽ICP备14008679号