版本记录
版本号 | 时间 |
---|---|
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 ML
和Turi 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图像分类器
首先,准备你的数据 - 你将训练一个图像分类器模型来识别猫和狗的图像。当您给模型展示一个图像时,它将返回标签Cat
或Dog
。要训练模型,您需要一个带有猫图像的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 Processed
,Elapsed Time
和Percent 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 - 提高验证准确度
- 增加数据量:对于图像分类器,您可以通过翻转,旋转,剪切或更改图像曝光来增强图像数据。 这是Apple’s illustration of data augmentation:
- 可能的过度拟合:减少最大迭代次数
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 ML
和Turi Create
中的Create是一个问题 - 如果不创建新模型,则无法训练模型。 要增加迭代次数,您必须从头开始并提取与以前完全特征的功能。 Create ML GUI不提供保存功能的选项。 一个更像手动的框架,如Keras,构造,编译,然后适合模型,所以再次运行fit
指令实际上从它停止的地方开始。 实际上可以查看Turi Create的源代码并提取从图像中提取特征的低级代码 - 耗时最多的部分。 然后,您可以保存提取的特征,并在需要进行更多训练迭代时重新加载它们! 希望这会激励你对Turi Create更感兴趣,也许也会对Keras感兴趣!
后记
本篇主要讲述了一个Core ML简单示例,感兴趣的给个赞或者关注~~~