2018/5/18 15:02:35当前位置推荐好文程序员浏览文章

欢迎来到Core ML教程系列的第二部分。在本教程中,将学习如何设置Python虚拟环境,获取不在Core ML格式裡的数据模型,并将该模型转换为Core ML格式,最后将其集成到应使用程式中。强烈建议读者先阅读上一个教程,而后再继续阅读本篇文章。

在这个项目中,我们将构建一个花的识别应使用程式,就好像下图所示。然而,主要的重点是告诉你如何取得一个训练有素的模型,并将其转换为Core ML格式,以供iOS应使用程式开发。

flower-recognition-app-demo

注意:开发者需要用Xcode 9才可以完成以下教程,并且需要运行在iOS 11的设施,才可以测试本教程的少量功可以。最重要的是,所有的程式码都使用Swift 4和Python 2.7编写。

在我们开始前…

本教程的目的是帮助读者理解如何将各类型的数据模型转换为Core ML格式。不过,在开始之前,我应该给你少量机器学习框架的背景知识。现在有许多流行的deep learning框架,为开发者提供工具去设计、构建和训练自己的模型。我们要用的模型来自Caffe。Caffe由Bekerley人工智可以研究(BAIR)开发,它是创立机器学习模型最常使用的框架之一。

除了Caffe之外,还有许多其余框架,例如Keras,TensorFlow和Scikit-learn。这些框架都有自己的优点和缺点,读者能在此处理解更多资讯。

在机器学习中,一切都从模型开始,替系统进行预测或者识别,教电脑学习就包含透过machine learning演算法来培养数据进行学习。训练产生的输出通常称为机器学习模型,有不同类型的机器学习模型都使用来处理相同的问题(例如对象识别),但它们之间具备不同的算法。神经网络,Tree Ensembles,SVM是其中少量机器学习算法。

编者提示:假如读者有兴趣理解关于机器学习模型的更多讯息,能查看此处以及这篇文章。

在Core ML推出的时候,并不支持将这些模型在不同的框架进行转换,Apple官方以下图说明Core ML支持的模型和第三方工具。

model-supported-by-coreml-tool

要将数据模型转换为Core ML格式,我们用一个名为Core ML Tools的套件。在下一节中,我们将用Python下载这些工具并将其使用于转换。

安装Python并且进行环境设置

许多研究人员和工程师透过各种架构和数据为不同任务提供Caffe模型,这些模型被学习并应使用的领域,从简单回归到大规模视觉分类,再到图像类似性的孪生网络(Siamese Networks),语音和机器人应使用的问题。

  • Caffe Model Zoo

你能在GitHub上找到已预先训练的各式Caffe模型,为了有效共享模型,BAIR引入了model zoo框架。而且你能在这裡找到少量可使用的模型。在本教程中,我用这个Caffe模型,向读者展现如何将其转换为Core ML格式,并加以试验花朵的判定工作。

首先,请在此下载初始项目,假如你打开项目并查看程式码,能看到访问摄像头和照片库所需的程式码已经键入,你可可以发现到与先前那篇教程的差异,缺少的就是Core ML模型。

你应该还注意到在project bundle中另外3个文件:oxford102.caffemodeldeploy.prototxtclass_labels.txt。这是将使用于demo的Caffe模型和文件,稍后我们会详细探讨。

要用Core ML Tools,第一步是在Mac上安装Python。首先,下载Anaconda(选择Python 2.7版本)。Anaconda提供一个非常简单的方法,能在Mac上运行Python,而不会造成任何疑问,完成安装Anaconda后,转到终端机(terminal)并输入以下内容:

conda install python=2.7.13conda python

透过这两行程式码中,我们安装了指定的python版本,在本教程撰写的时候,Python 2的最新版本是2.7.13,以防万一,安装完Python之后,请输入第二行,以便升级到最新版本。

install-python-terminal

下一步是创立一个虚拟环境,在虚拟环境中能用不同版本的Python或者packages编写程式,要创立新的虚拟环境,请输入以下程式码。

conda create  --name flowerrec

当终端机显示提醒,

proceed  ([y]/n)?

输入“y”表示同意。恭喜你!现在你有一个名为flowerrec的虚拟环境!

最后,输入以下指令来安装Core ML Tools:

pip install  -U  coremltools

转换Caffe Model

再次打开终端机,并输入下列程式码,就会进入你设立的虚拟环境中:

source activate flowerrec

而后移动到初始项目的目录中,它包含三个文件:class_labels.txtdeploy.prototxtoxford102.caffemodel

cd  <directory>

当你进入文件夹,就是启动python的时候了,只要简单输入python,你将被带到终端机中的Python介面,第一步是import Core ML tools。

import  coremltools

下一行真的很重要,所以请注意。输入下列这一行,但不要按Enter键。

coreml_model  =  coremltools.converters.caffe.convert((oxford102.caffemodel,  deploy.prototxt),  image_input_names=data,  class_labels=class_labels.txt)

现在这是很短的一行程式码,但其中包含很多事情,接下来让我解释一下这三个档案。

  1. deploy.prototxt – 形容神经网络的结构。
  2. oxford102.caffemodel – Caffe格式的数据训练模型。
  3. class_labels.txt – 包含模型可以够识别的一律花类列表。

在上面的说明中,我们将定义一个名为coreml_model的模型,使用来当做从Caffe转到Core ML的转换器,它是coremltools.converters.caffe.convert函式的运行结果,这行程式码的最后两个参数是:

  1. image_input_names=data
  2. class_labels=class_labels.txt

这两个参数定义了我们想要Core ML模型所接受的输入和输出,让我这样说:电脑只可以了解数字。因而,假如不增加这两个参数,我们的Core ML模型将仅接受数字做为输入和输出,而不是图像和字符串做为输入和输出。

现在,你能按下ENTER并且休息一下,根据你机器的计算可以力,转换器运行需要少量时间,当转换器运行完成时,你将会看到一个简单的>>>

python-convert-ml

现在Caffe模型已经被转换,你需要将它保存下来,请输入下列所示的程式码

coreml_model.save(Flowers.mlmodel)

.mlmodel文件将保存在当前文件夹/目录中。

coreml-model-ready

将模型整合到Xcode中

现在我们来到最后一步,将刚刚转换至Xcode项目的模型进行整合。假如你有阅读我先前的教程,那麽这部分应该是很熟习的,打开初始项目,依据目前为止所学到的内容,现在我把将Core ML模型整合到应使用程式的挑战交给你。

希望读者可以够完成任务,或者是至少尝试做看看,假如你没有如愿完成它,请不要担心,继续往下阅读吧!

第一步是将Flowers.mlmodel拖放到我们的Xcode项目中,并且确认”Target Membership”栏位有被勾选起来。

xcode-target-coreml-model

现在,我们转到ViewController.swift,并定义以下内容:

var  model:  Flowers!override  func  viewWillAppear(_  animated:  Bool)  {    model  =  Flowers()}

在这两行程式码中,我们定义了数据模型,并在view出现之前对其进行初始化。

接下来,我们只要要定义一个常数prediction等于模型预测数据。在ViewController扩展(Extension)内的imageView.image = newImage后键入以下内容。

guard let  prediction  =  try?  model.prediction(data:  pixelBuffer!)  else  {    return}classifier.text  =  "I think this is a \(prediction.classLabel)."

就这麽简单!接下来请构建并运行应使用程式,你应该看到它是个相似于前一个教程中实作的图像识别应使用程式,唯一的区别是这个程式是专属花朵辨识,我们已可以将Caffe模型转换为Core ML模型,对于这结果相当满意。

结论

现在你知道如何转换数据模型,但你可可以也想知道在哪裡能找到数据模型,其实简单的Google搜索就可以给你大量的结果,几乎能找到任何类别的数据模型,例如不同类型的汽车、植物、动物,甚至有模型能告诉你最喜欢哪个名人,下面也提供几个连结让读者参考!

  • Caffe Model Zoo
  • UCI Machine Learning Repository
  • Deep Kearning Datasets

假如找不到满足你需求的模型,读者可可以会想知道能否能创立自己的数据模型,尽管能做到,但是相当不容易,假如你觉得自己能挑战看看,建议先从Scikit-Learn或者TensorFlow开始,造访它们的homepage。

以供参考,读者能看看GitHub上的完整Xcode项目。

有关转换Core ML模型的更多详细讯息,可参考以下连结:

  • Apple Developer’s Article on Conversion of Models
  • Python Documentation on Core ML
  • Coremltools Package Documentation
  • Coremltools Package Documentation on Different Converters

你对本篇教程还满意吗?假如读者喜欢这篇教程或者有任何意见,请告诉我们。

资料来源:内文精选照片源自SHTTEFAN刊登在Unsplash。

原文:A Beginner’s Guide to Core ML Tools: Converting a Caffe Model to Core ML Format

简宝玉写作群日更打卡第 27 天

网友评论