Create ML - 图像分类(创建图像分类模型)

训练一个机器学习模型来实现图像分类。


1.概述

图像分类器是一个被训练用来识别图像的机器学习模型。当你给他一个图像,它针对这个图像反馈一个文本。

通过显示许多贴过标签的示例图像来训练图像分类器。例如,您可以通过显示如大象、长颈鹿、狮子等多种图像训练一个图像分类器来识别野生动物。

2.准备数据

首先准备用于训练和评估分类器的数据。从每个标签的80%的图像中创建一个训练数据集合。用剩下的图片创建一个测试数据集。确保任何给定的图像只存在于两个集合的其中一个。
接下来,将磁盘上的数据组织为与MLImageClassifier.DataSource类型之一兼容。一个方法是创建一个名为Training Data的文件夹,另一个命名为Testing Data。在每个文件夹中,用您的标签作为名字创建子文件夹。然后将图像排列到每个数据集的相应子文件夹中。


确切的标签字符串并不重要,只要它们对您有意义。比如,可以使用“Cheetah”标签来表示所有猎豹的图像。您不必用任何特定的方式命名图像文件或者向其添加元数据。您只需要讲他们放入正确标签的文件夹即可。每个标签至少使用10张图像作为训练集,当然越多越好。此外要平衡每个标签图像的数量。比如,不要使用10张图像用于"猎豹",而"大象"给了1000张。
图像可以是统一格式标志符符合“public.image”的任意格式。包括像JPEG和PNG这样的常见格式。图像不必统一相同的尺寸,也不用使用任何特定尺寸。但是,最好使用大于等于299x299像素的图像。如果可以,使用与收集图像进行预测相似的方式训练您收集的图像。也就是说,如果您的应用程序在室外设置中对从设备的相机拍摄的图像进行分类,则使用类似相机在户外拍摄的图像训练您的模型。
提供多样性的图像。例如,使用显示来自许多不同角度和不同光照条件的动物图像。对于给定标签用差不多相同图像训练出来的分类器,相比较于用更多样化的图像集训练出来的分类器,性能更差。


分类器使用“scene print feature extractor”来加速训练过程。这回影响适合训练图像的种类。详细可参考MLImageClassifier.FeatureExtractorType.scenePrint(revision:)

创建模型的两种方式

方式一、在 Playground 中显示 Image Classifier Builder(通过Playground创建)

准备好您的数据,使用Mac OS创建一个新的Xcode playground。使用playground创建MLImageClassifierBuilder实例并且在实时视图中展示它:

// Import CreateMLUI to train the image classifier in the UI.
// For other Create ML tasks, import CreateML instead.
import CreateMLUI 

let builder = MLImageClassifierBuilder()
builder.showInLiveView()

在Xcode中显示助手编辑器,并运行playground。当你运行它时,实时视图会展示一个图像分类器:

训练图像分类器

将训练数据文件夹从Finder拖拽到实时视图指定的位置。当您这么做时,训练处理开始并且图像分类器显示其进度:

作为训练过程的一部分,图片分类器自将自动将训练数据分成训练集和验证集。它们都会影响训练,但方式不同。因为分离是随机进行的,所以每次训练模型时会得到不同的结果。

当训练结束时,实时视图显示训练和验证的准确度。这个反映了训练模型从相应数据集分类图像的效果如何。因为模型是在这些图像上训练的,所以它通常能很好地对它们进行分类。

评估分类器的性能

接下来,用模型从没有见过的图形来测试它,以评估训练模型的性能。为此,使用开始训练之前创建的测试数据集。拖拽测试数据文件夹到实时视图,就像拖拽训练数据时一样。

该模型处理所有的图像,并对每一个图像做出预测。因为这是被标记的数据,该模型可以检测它自己的预测结果。然后,它将总体评估精度作为UI中的最终度量。

如果评估性能不够好,您可能需要更多的数据重新训练——例如,通过引入图像增强——或者更改一些其他培训配置。有关如何进行更详细的模型评估以及改进模型性能的策略的信息,请参阅Improving Your Model’s Accuracy

保存Core ML 模型

当你的模型运行得足够好时,将它保存下来,这样你就可以在你的应用程序中使用它了。

给分分类器起一个有意义的名字。在UI中用AnimalClassifier作为名字替换默认的ImageClassifier。您也可以添加更多关于模型的信息,像作者和简短描述。点击展开三角按钮来显示元数据栏位并填写详细信息

点击Save。该模型以.mlmodel格式的文件写入到Where字段指定的目录。

将模型添加到应用

现在,将训练过的模型添加到现有支持Core ML的应用程序中。您可以使用该模型替换来自Classifying Images with Vision and Core ML样例代码项目中附带的模型。如果您这样做了,该样例app的工作原理与之前完全形同,只是它根据您定义的标签识别和分类动物。

在Xcode中打开样例代码项目并将您的模型文件拖入导航面板。一旦该模型成为项目的一部分,Xcode向您显示模型元数据以及其他信息,比如Model Class

使用新得模型,您只需要更改一行代码。项目附带的MobileNet模型在ImageClassificationViewController类的一个地方被实例化:
let model = try VNCoreMLModel(for: MobileNet().model)
将这一行改为使用新的模型类:
let model = try VNCoreMLModel(for: AnimalClassifier().model)
该模型可以被互换是因为他们都获取一个图像作为输入并输出一个标签。替换之后,样例应用程序与之前一样对图像进行分类,只是用了您的模型及其关联的标签。

实现图像分类器制作过程自动化

如果您在编程或机器学习方面没什么经验,可以按照以上部分所述,使用MLImageClassifierBuilder实例来训练有用的图像分类器。然而,如果需要用脚本编写模型训练过程,请改为使用MLImageClassifier实例。这些步骤本质上是一样的:准备数据、训练模型、评估性能并保存结果到Core ML模型文件中。不同之处在于,一切都是通过编程完成的。例如,您不是将测试数据拖到实时视图来评估模型的表现,而是初始化 MLImageClassifier.DataSource 实例并将它提供给分类器的 evaluation(on:) 方法。

方式二、Create an Image Classifier Project(通过Xcode工具创建)(Xcode升版本后可用)

用Create ML创建一个图像分类项目。打开Xcode,按住Control建并单击Xcode的Dock图标,然后选择Open Developer Tool> Create ML。或者,从Xcode菜单中选择Open Developer Tool> Create ML。
Create ML中,选择File->New以查看模型模板列表。选择Image Classifier,然后单击Next

给分类器赋予一个有意义的名字。在UI上用AnimalClassifier替换默认的MyImageClassifier作为项目名称。您也可以已添加更多关于模型的信息,像作者和简短描述。

配置训练输入数据

将训练数据文件夹从Finder拖入到项目窗口的Traininig Data位置。


从Finder将测试数据文件夹拖到项目窗口中的Testing Data位置。

自定义训练参数或者添加图像增强(可选)

训练图像分类器

在项目窗口工具栏上点击播放按钮开始训练。图像分类器在从训练图像中学习时显示其进度。


了解培训和验证过程

作为培训过程的一部分,Create ML会自动将您的培训数据分成训练集和验证集。模型从训练集迭代地学习,并且在每次迭代时,模型使用验证集检查其自身的准确性。因为Create ML将数据随机分成这两组,所以每次训练模型时可能会得到不同的结果。

评估分类器的准确性

培训结束后,Create ML显示培训和验证准确性分数。这些报告了训练模型对相应集合中的图像进行分类的程度。因为模型训练这些图像,所以通常可以很好地对它们进行分类。在该示例中,训练的模型正确地识别训练集中的所有图像和验证集中的97%的图像。



UI显示了每次训练迭代时模型的准确度进度图表,以及每个图像类别的精度和召回详细信息。

精确度是真阳性的数量除以真阳性和假阳性的总和。召回是真阳性的数量除以真阳性和假阴性的总和。

测试分类器的性能

使用您的测试数据集Create ML测试您训练模型的性能,测试数据集包含模型以前从未见过的图像。

该模型处理所有图像并对每个图像进行预测。Create ML将每个预测与正确的标签进行比较,并在UI中显示整体测试准确性。


如果评估绩效不够好,您可能需要重新培训更多不同的培训数据。例如,您可以为图像分类器启用图像增强选项。有关如何进行更详细的模型评估以及提高模型性能的策略的信息,请参阅提高模型的准确性

保存模型

当您的模型运行良好时,请将其保存,以便您可以在应用中使用它。将模型图标从Output选项卡拖动到Finder中的目录,以将模型保存为.mlmodel格式的文件。


将模型添加到您的应用程序

现在将训练的模型添加到使用Core ML的应用程序。您可以使用此模型替换Vision with Vision和Core ML示例代码项目附带的模型。如果您这样做,示例应用程序的工作原理与之前完全相同,只是它根据您定义的标签识别和分类动物。

在Xcode中打开示例代码项目,然后将模型文件拖到导航窗格中。一旦模型成为项目的一部分,Xcode就会显示模型元数据以及模型类等其他信息。


要在代码中使用新模型,只需要更改一行代码即可。项目附带的 MobileNet 模型仅在 ImageClassificationViewController 类中的一个位置进行实例化:

let model = try VNCoreMLModel(for: MobileNet().model)

请将这一行更改为使用新的模型类:

let model = try VNCoreMLModel(for: AnimalClassifier().model)

这些模型都以图像为输入并输出标签,因此可以互换。替换后,示例 app 会像之前一样对图像进行分类,不同的地方是它会使用您的模型及关联的标签。

实现图像分类器制作过程自动化 (同上)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260