赞
踩
机器学习是一门人工智能的科学。它通过对经验、数据进行分析,来改进现有的计算机算法,优化现有的程序性能。其基本流程如下图:
如图,机器学习有三个要素:
以图片分析 App 为例,这个场景下的数据、学习算法和模型分别对应:
Core ML 是苹果为其开发者准备的机器学习框架。支持 iOS, MacOS,tvOS,和 watchOS。它由4部分组成,其结构如下图:
主要操作过程分三步:
下面我们来分别对这三个步骤进行详解:
在苹果官网上你可以直接拿到训练好的模型。目前有4个:
你也可以自己训练模型,或到第三方社区去下载别人训练好的模型。苹果提供了转换器(基于 Python,开源)用于把其它机器学习框架训练出来的模型转化
为 Core ML 适配的模型。如下图所示:
如何使用 Core ML Tools 进行转化的原理和演示详见《Core ML in Depth》文章。
直接拖拽即可。记得右侧 Target Membership 选项勾选自己的 App。你可以点击 mlmodel 文件观看它的属性。大小(Size)是 App 性能的一个重要指标,输入(Input)输出(Output)决定了如何使用这个模型。下图中输入是花朵图片,为 image 类型。输出有两个值,一个是最有可能的花朵,为 String 类型;另一个是所有可能的花朵类型即其对应的可能性,为 String 对应 Dobule 的 Dictionary 类型。
生成的接口如下:
// 输入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 }
现在 iOS 上可以运行的Core ML 的模型可以从苹果官网上下载,也可以通过第三方社区下载,Caffee,Keras,LIBSVM,scikit-learn,xgboot等开源机器学习框架训练出的模型皆可无缝转换为 Core ML 对应的模型。
同时,苹果开源并展示了如何使用它们自己的 Core ML 模型转换工具,它是用 Python 写成。你可以定制转换器和转换模型的参数。下面我们就来看看使用 Core ML 模型转换工具的步骤。
直接在终端中输入以下命令:
pip install -U coremltools
如果 Mac 上没有安装 Python,请先用命令行安装:
brew install python
假如你的模型是用 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')
确定转化好的模型能否工作(比如检测现有模型能否识别一张玫瑰图片),可以直接运行:
myTestData = Image.open('rose.jpg')
XXX.mlmodel.predict('data': myTestData)
如果能正确输出结果(预测结果应含有 rose,其预测可能性较高),那么证明模型转换没有问题。
定制转化模型的参数,我们一般用 label.txt 文件来定义,直接传入转化中即可。
// 自定义模型的接口参数
labels = 'labels.txt'
// 将 labels 设为转换的模型参数
coreml_model = coremltools.converters.caffe.convert('XXX.caffemodel', class_labels='labels')
定制转化的输入数据 data 为 image 类型:
coreml_model = coremltools.converters.caffe.convert('XXX.caffemodel', class_labels='labels', image_input_name = 'data')
指定转换模型的描述型参数(metadata):
// 指定作者信息
coreml_model.author = 'Apple Papa'
// 指定许可证
coreml_model.license = 'MIT'
// 指定输入('data')描述
coreml_model.input_description['data'] = 'An image of flower'
其他参数也类似设置。
目前苹果因为版权问题,对于 Google 的 TensorFlow 和 Amazon 的 MXNet 两大框架支持不够,但是这两个框架训练出来的模型转换成 iOS 上对应的 Core ML 模型难度并不大,除了用苹果自己的转换工具外,网上也有很多开源工具可以做到。
所谓文字情感分析,就是根据输入文字内容,机器自动判定文字表达的是正面还是负面情绪。苹果示例的 App 如下:
当什么文字都没有的时候,App 反应的是正常情感;当文字内容为开心或赞美时,App 会变为笑脸;当文字内容为伤心或抱怨时,App 会变为苦瓜脸。整个过程为即时反映,几乎无延迟。
整个 App 的原理可以分为下四步
文字情感分析 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 开发中大展拳脚。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。