Core ML框架详细解析(五) —— 一个Core ML简单示例(一)

版本记录

版本号 时间
V1.0 2018.08.16

前言

目前世界上科技界的所有大佬一致认为人工智能是下一代科技革命,苹果作为科技界的巨头,当然也会紧跟新的科技革命的步伐,其中ios API 就新出了一个框架Core ML。ML是Machine Learning的缩写,也就是机器学习,这正是现在很火的一个技术,它也是人工智能最核心的内容。感兴趣的可以看我写的下面几篇。
1. Core ML框架详细解析(一) —— Core ML基本概览
2. Core ML框架详细解析(二) —— 获取模型并集成到APP中
3. Core ML框架详细解析(三) —— 利用Vision和Core ML对图像进行分类
4. Core ML框架详细解析(四) —— 将训练模型转化为Core ML

开始

首先说一下本文的环境。

本文的写作环境是:Swift 4.2, iOS 12, Xcode 10

创建ML证明Apple致力于让您更轻松地在您的应用中使用机器学习模型。 在这篇文章中,您将学习如何通过改进数据来加速工作流程以改善模型,同时通过在Xcode和Swift中轻松完成所有操作来平滑学习曲线。

同时,您将熟悉ML工具集和术语。 不需要数学! 您不需要知道如何编写编译器来使用Swift,并且您不需要能够编写新的ML算法来使用分类器。

Apple ML的简史:

  • Core ML:2017年WWDC宣布,并已得到每个主要ML平台的支持,以转换现有模型。 但现有模型往往过于庞大和/或过于笼统。

  • Turi Create:在WWDC 2017之后的某个时候被Apple收购,它允许您使用自己的数据自定义现有模型。。

  • IBM Watson Services:2018年3月发布。您可以自定义IBM Watson的可视识别模型,以识别您自己的数据。 拖放您的数据,无需编码,但您必须导航IBM Cloud,并且Core ML模型包含在Watson API中。

  • Create ML:在WWDC 2018宣布。在Xcode和Swift中ML! 目前仅包括Turi Create的七个以任务为中心的工具包中的两个,以及通用分类器和回归器以及数据表。

您将使用Create ML技巧开始此Create ML教程:您将使用来自 Kaggle Cats and Dogs Dataset的图像在GUI中构建图像分类器。然后,您将与使用相同数据集的Turi Create示例进行比较。正如您所看到的,Turi Create更具手动性,但它也更灵活,而且并不神秘!对于更基于代码的示例,您将比较Create MLTuri Create的文本分类器代码。

然后,我将向您展示如何快速设置环境以使用Turi Create。 Apple甚至修改了Xcode playgrounds,使其更像Jupyter notebooks,因此编码环境会让人感到熟悉!要尝试一下,你将在Jupyter笔记本中使用Turi Create来为相同的猫狗数据集构建图像相似性模型。

您可以等待并希望Apple将其余的Turi Create移动到Create ML,但您会发现使用Create ML作为直接使用Turi Create的踏脚石并不难。一旦您对开发环境感到满意,ML就拥有丰富的起点,一切都可供您使用。

注意:Swift 用于TensorFlow怎么样? 对于Swift人来说,Create ML就是ML,而对于ML人来说,Swift对于TensorFlow就是Swift —— 该项目旨在提供更好的编程语言,并提供编译器支持。

要开始这个教程,你需要:

  • Mac运行macOS 10.14 Mojave beta
  • Xcode 10.x beta

关于本工程的文件,主要包含:

  • Pets-100, Pets-1000 和 Pets-Testing:这些包含猫和狗的图像;你将使用这些来训练和评估猫狗分类器。
  • ClassifyingImagesWithVisionAndCoreML:Apple的CoreML示例项目;您将使用您在Create ML中训练的模型替换MobileNet模型。
  • good-dog.png:额外的狗图片。
  • turienv.yaml:您将使用此文件创建一个可以运行Turi Create代码的环境。

Create ML Image Classifier - Create ML图像分类器

首先,准备你的数据 - 你将训练一个图像分类器模型来识别猫和狗的图像。当您给模型展示一个图像时,它将返回标签CatDog。要训​​练模型,您需要一个带有猫图像的Cat文件夹和一个带有狗图像的Dog文件夹。理想情况下,每个类文件夹中的图像数量应该相同 - 如果您有30张猫图像和200张狗图像,该模型将偏向于将图像分类为狗。并且不包括任何包含两种动物的图像。

每类有多少张图片?至少10个,但更多的图像将训练模型更准确。 Kaggle Cats and Dogs Dataset每个类有12,500张图片,但你不需要全部使用它们!当您使用更多图像时,训练时间会增加 - 图像数量增加一倍会使训练时间增加一倍。

要训​​练一个Create ML图像分类器,您需要为其提供一个训练数据集 - 包含类文件夹的文件夹。实际上,starter文件夹包含我之前准备的两个数据集。 Pets-100包含Kaggle数据集的Cat and Dog类文件夹的前50张图像;Pets-1000拥有前500张图片。

训练模型后,您需要一个测试数据集来评估模型:包含Cat和Dog文件夹的文件夹。 测试数据集中的图像应与训练数据集中的图像不同,因为您要评估模型在之前未见过的图像上的工作情况。 如果您正在收集自己的数据,则会将20%的图像放在测试数据集中,其余的则放在训练数据集中。 但是我们每个类都有12,500张图像可供使用,因此Pets-Testing包含来自每个Kaggle数据集类文件夹的图像900到999。

您将首先使用Pets-100训练模型,然后使用Pets-Testing进行测试。 然后你将用Pets-1000训练它,并用Pets-Testing进行测试。


Apple’s Spectacular Party Trick

在Xcode 10中,创建一个新的macOS playground,并输入以下代码:

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLiveView()

展示assistant editor,并点击run按钮。

您正在创建和显示用于培训和评估图像分类器的交互式视图。这个棒极了!它神奇地让您可以轻松地尝试不同的数据集 - 因为重要的不是谁拥有最好的算法,而是谁有最好的数据。算法已经非常好了,您可以让数据科学研究人员继续使它们变得更好。但大多数时候,努力,机器学习的费用用于策划数据集。此GUI图像分类器可帮助您磨练数据策划技能!随意下载Kaggle Cats and Dogs数据集并创建您自己的数据集。在您看到我的数据集产生的内容之后,您可能需要更加小心地从这个好的,坏的和可怕的图像中选择。

Pets-100文件夹拖到视图上。训练过程立即开始。图像加载,下面是进度条。片刻之后,调试区域中会出现一个表格,显示Images ProcessedElapsed TimePercent Complete

这里发生了什么事?如果你想查找它,它被称为transfer learning。底层模型 - 支持Vision框架的VisionFeaturePrint_Screen - 在一个巨大的数据集上进行了预训练,以识别大量的类。它通过了解图像中要查找的要素以及如何组合这些要素来对图像进行分类来实现此目的。数据集的几乎所有训练时间都是从图像中提取2048个特征的模型。这些可能包括低级形状和纹理以及更高级别的耳朵形状,眼睛之间的距离,鼻子的形状。然后花费相对少的时间训练逻辑回归模型,将图像分成两类。它类似于将一条直线拟合到散乱点,但是在2048维度而不是2,但它仍然很快做:我的运行需要1m 15s进行特征提取,0.177886 seconds进行训练和应用逻辑回归。

只有当数据集的特征与用于训练模型的数据集的特征相似时,Transfer learning才能成功运行。在ImageNet上预训练的模型 - 大量照片 - 可能无法很好地传输到铅笔画或显微镜图像。

您可能希望浏览两篇有关(主要)Google Brain / Research功能的精彩文章:

注意:我在2016年初 1.1GHz CPU的MacBook上运行Create ML。 您的时间可能会更快,特别是如果您的Mac足够新,可以让Create ML使用您的GPU!在配备2.9GHz i7 CPU的2017款MacBook Pro上,功能提取时间降至11.27秒,培训时间为0.154341秒。


Training & Validation Accuracy - 训练和验证准确性

训练结束后,视图会显示Training和(有时)Validation准确度指标,并在调试区域中显示详细信息:

我获得了100%的训练和验证准确性!因为每个训练期都会随机选择验证集,因此您的验证集将是不同的10张图像。 无法知道选择了哪些图像。

那么什么是验证? 精确度数字意味着什么?

  • Training accuracy很容易:训练涉及猜测给每个特征计算答案的权重。因为您将图像标记为“Cat”或“Dog”,所以训练算法可以检查其答案并计算出正确的百分比。然后,它将正确或错误的信息提供给下一次迭代以优化权重。

  • Validation accuracy类似:在训练开始之前,随机选择的10%的数据集将被拆分为验证数据。提取特征并使用与训练数据集相同的权重计算答案。但结果不能直接用于重新计算权重。它们的目的是防止模型过度拟合 - 固定在一个实际上并不重要的特征上,比如背景颜色或光照。如果验证精度与训练精度非常不同,则算法会对自身进行调整。因此,验证图像的选择会影响验证准确性和训练准确性。如果您创建了一个与测试数据具有相似特征的数据集,Turi Create允许您提供固定的验证数据集。您的测试数据集很好地代表了您的用户将为您的应用提供的内容。


Evaluation - 评估

真正的问题是:模型如何对未训练的图像进行分类?

视图会提示您Drop Images to Begin Testing:将Pets-Testing文件夹拖到视图上。 很快,视图显示Evaluation准确性,调试区域中包含详细信息:

97%的准确度:混淆矩阵表示两只猫图像被错误分类为狗,四只狗图像被错误分类为猫。 滚动测试图像,查看哪些认错了模型。 上面的屏幕截图中有一个,这是另一个认错的猫:

它们是错误的照片:一个是模糊和太亮,另一个是模糊的,大部分头部被裁掉。 模型将图像大小调整为299×299,经常裁剪边缘,因此您关心的对象理想情况下应该在图像中居中,但不能太大或太小。

在上面的屏幕截图中,我点击了详细按钮以查看置信度:模型是100%自信度认为这只猫是一只狗! 但滚动浏览其他图像,看看模型如何正确处理一些非常糟糕的图像。


Improving Accuracy - 提高准确度

Pets-100训练数据集仅使用了每个类的12,500张图像中的50张。 Create ML可以非常轻松地尝试不同的数据集,以查看更多数据是否可以提高准确性。

单击界面的stop按钮,然后在它变为run按钮时再次单击它。 这会加载新视图,准备接受训练数据。

Pets-1000文件夹拖到视图上。 从1000张图像中提取特征将比100张图像时间长五到十倍。在等待时,这里是Apple有用的文章Improving Your Model’s Accuracy的摘要,该文章提供了改进不同精度度量的具体建议。

1. Improving Training Accuracy - 提高训练的准确度

  • 增加图像分类器的最大迭代次数Max iterations。 (这不适用于第一个Xcode测试版,但可以在第二个测试版中使用。)
  • 对文本分类器使用不同的算法。
  • 对通用分类器或回归器使用不同的模型。

2. Improving Validation Accuracy - 提高验证准确度

  • 可能的过度拟合:减少最大迭代次数Max iterations。 你可能不必在此担心,因为在达到10次迭代之前,当结果满意时我的训练停止了。

3. Improving Evaluation Accuracy - 提高评估准确性

确保您的训练数据的多样性与测试数据的特征相匹配,并且这两组与您的应用用户将为您的模型提供的数据类似。


Back to the Playground - 回到Playground

训练1000张图像获得100%的训练准确度,但只有96%的验证准确度,再次,YMMV - 我已经运行了几次,有时获得99%的验证准确性。

Pets-Testing文件夹拖到视图上以评估此模型,它在200个测试图像上获得98.5%的准确率!

混淆矩阵表示模型将三个猫图像分类为狗。 实际上,只有两只猫被误标为狗 - 100%有信心!

虽然混淆矩阵不是这样的,但有两只狗被标记为猫,但信心较低。 它们也很模糊,对比度低:

可能进一步改进此模型的唯一方法是使用更多数据,或者通过增加1000个图像,或者通过添加来自完整Kaggle数据集的更多图像。 或者通过更仔细地选择数据集,以省去您不希望应用程序处理的非常糟糕的图像。 随意尝试! 请记住,这很容易 - 对于较大的数据集,训练需要更长的时间。 我用5000张图片来运行它:花了32分钟,我获得了99%的训练和验证准确度。


Increase Max Iterations? - 增加最大迭代次数?

这个例子的准确度指标实际上非常好 - 底层模型可能已经知道所有关于猫和狗的信息。 但是,如果您正在为不同的类进行训练,并且训练准确率较低,那么您需要尝试将Max迭代次数增加到20次。在编写本教程时,使用第一个Xcode测试版,这是未实现的。 但这里会告诉你如何做到。

停止并启动playground,然后单击ImageClassifier旁边的详细符号以显示选项,将10更改为20,然后按Enter键:

单击显示符号以隐藏选项,然后再次打开选项以检查最大迭代次数是否仍为20。

如果您使用的是Xcode beta 2或更高版本,请将您的训练文件夹拖到视图上以开始训练。 这将比10次迭代训练期间花费更长的时间,但特征提取将花费相同的时间,这是其中的大部分。

注意:Create MLTuri Create中的Create是一个问题 - 如果不创建新模型,则无法训练模型。 要增加迭代次数,您必须从头开始并提取与以前完全特征的功能。 Create ML GUI不提供保存功能的选项。 一个更像手动的框架,如Keras,构造,编译,然后适合模型,所以再次运行fit指令实际上从它停止的地方开始。 实际上可以查看Turi Create的源代码并提取从图像中提取特征的低级代码 - 耗时最多的部分。 然后,您可以保存提取的特征,并在需要进行更多训练迭代时重新加载它们! 希望这会激励你对Turi Create更感兴趣,也许也会对Keras感兴趣!

后记

本篇主要讲述了一个Core ML简单示例,感兴趣的给个赞或者关注~~~

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

推荐阅读更多精彩内容