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之外,还有许多其他框架,例如KerasTensorFlowScikit-learn。这些框架都有自己的优点和缺点,读者可以在此处了解更多资讯。

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

编者提醒:如果读者有兴趣了解关于机器学习模型的更多讯息,可以查看此处以及这篇文章

在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  <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搜索就能给你大量的结果,几乎可以找到任何类别的数据模型,例如不同类型的汽车、植物、动物,甚至有模型可以告诉你最喜欢哪个名人,下面也提供几个连结让读者参考!

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

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

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

基于OpenCV的摄像头圆心计算

导语:这几天,小编学习到了一个好玩的摄像头图像圆心计算的程序代码。另外,小编Tom邀请你一起搞事情! 在这份程序代码中,小编在Python3下运行,使用到...

3245
来自专栏新智元

【解放程序员】MIT“创世纪”机器学习新系统,自动生成补丁修复Bug

【新智元导读】当您辛辛苦苦写了大半年程序,终于要享受一下国庆长假的时候,别让 bug 把您的假期毁了。MIT 研究团队开发了一个称为“创世纪”的系统,能够对以前...

3275
来自专栏ATYUN订阅号

使用多种工具组合进行分布式超参数优化

在这篇文章中,我介绍如何使用工具组合来加速超参数优化任务。这里提供了Ubuntu的说明,但可以合理地应用于任何*nix系统。

764
来自专栏大数据智能实战

Deeplearning4j库学习

一、基础知识(了解) 背景知识:     如官网描述,dl4j-examples含有丰富的深度学习神经网络应用案例,这是一个为Java和Scala编写的首个商...

31510
来自专栏目标检测和深度学习

最适合练手的10大机器学习开源项目,赶紧收藏!

1233
来自专栏大数据文摘

目标检测必须要OpenCV?10行Python代码也能实现,亲测好用!

本文作者和他的团队构建了一个名为ImageAI 的Python库,集成了现今流行的深度学习框架和计算机视觉库。本文将手把手教你构建自己的第一个目标检测应用,而且...

966
来自专栏机器学习算法全栈工程师

应用TF-Slim快速实现迁移学习

作者:张旭 编辑:张欢 这是一篇以实践为主的入门文章,目的在于用尽量少的成本组织起来一套可以训练和测试自己的分类任务的代码,其中就会用到迁移学习,TF-Sli...

4636
来自专栏量化投资与机器学习

强化学习(Reinforcement Learning)应用于量化投资系列专题(二)——设计一个外汇交易系统基于自适应强化学习

往期文章(点击标题查看) 强化学习(Reinforcement Learning)系列(一) 今天带来机器学习应用于量化投资系列之 强化学习(Reinforce...

22610
来自专栏CVer

开源 | 深度学习网络模型(model)可视化开源软件Netron

前两天,Amusi分享了一篇 经典卷积神经网络(CNN)结构可视化工具,该工具可用于可视化各种经典的卷积神经网络结构。如AlexNet、VGG-16、ResNe...

913
来自专栏量子位

TensorFlow 1.9.0正式版来了!新手指南全新改版,支持梯度提升树估计器

862

扫码关注云+社区