欢迎来到Core ML教程系列的第二部分。在本教程中,将学习如何设置Python虚拟环境,获取不在Core ML格式裡的数据模型,并将该模型转换为Core ML格式,最后将其集成到应用程式中。强烈建议读者先阅读上一个教程,然后再继续阅读本篇文章。
在这个项目中,我们将构建一个花的识别应用程式,就如同下图所示。然而,主要的重点是告诉你如何获得一个训练有素的模型,并将其转换为Core ML格式,以供iOS应用程式开发。
注意:开发者需要使用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支持的模型和第三方工具。
要将数据模型转换为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.caffemodel
,deploy.prototxt
和class_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之后,请输入第二行,以便更新到最新版本。
下一步是创建一个虚拟环境,在虚拟环境中可以使用不同版本的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.txt
,deploy.prototxt
和oxford102.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')
现在这是很短的一行程式码,但其中包含很多事情,接下来让我解释一下这三个档案。
-
deploy.prototxt
– 描述神经网络的结构。 -
oxford102.caffemodel
– Caffe格式的数据训练模型。 -
class_labels.txt
– 包含模型能够识别的全部花类列表。
在上面的说明中,我们将定义一个名为coreml_model
的模型,用来当做从Caffe转到Core ML的转换器,它是coremltools.converters.caffe.convert
函式的运行结果,这行程式码的最后两个参数是:
image_input_names='data'
class_labels='class_labels.txt'
这两个参数定义了我们想要Core ML模型所接受的输入和输出,让我这样说:电脑只能理解数字。因此,如果不添加这两个参数,我们的Core ML模型将仅接受数字做为输入和输出,而不是图像和字符串做为输入和输出。
现在,你可以按下ENTER并且休息一下,根据你机器的计算能力,转换器运行需要一些时间,当转换器运行完成时,你将会看到一个简单的>>>
。
现在Caffe模型已经被转换,你需要将它保存下来,请输入下列所示的程式码
coreml_model.save('Flowers.mlmodel')
.mlmodel
文件将保存在当前文件夹/目录中。
将模型整合到Xcode中
现在我们来到最后一步,将刚刚转换至Xcode项目的模型进行整合。如果你有阅读我先前的教程,那麽这部分应该是很熟悉的,打开初始项目,依据目前为止所学到的内容,现在我把将Core ML模型整合到应用程式的挑战交给你。
希望读者能够完成任务,或是至少尝试做看看,如果你没有如愿完成它,请不要担心,继续往下阅读吧!
第一步是将Flowers.mlmodel
拖放到我们的Xcode项目中,并且确认”Target Membership”栏位有被勾选起来。
现在,我们转到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 天