Core ML Tools初学者指南:如何将Caffe模型转换为Core ML格式

欢迎来到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.13
conda update 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  

当你进入文件夹,就是启动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 天

你可能感兴趣的:(Core ML Tools初学者指南:如何将Caffe模型转换为Core ML格式)