struct MLImageClassifier (英文)
struct MLObjectDetector (英文)
图像分类器是一种能够识别图像的机器学习模型。在你提供一张图像后,图像分类器会根据这个图像回复一个分类标签。
训练图像分类器的方法是向它展示大量已标记的图像示例。例如,你可以向图像分类器展示各种大象、长颈鹿、狮子等动物的照片来训练它识别野生动物。
在图像分类器完成训练后,你可以对其进行评估。如果其准确性令人满意,你可以将它存储为 Core ML 模型文件,并将该文件导入到 Xcode 项目中,以在 App 中使用这个图像分类器。
每个类别应使用至少 10 张图像,但请谨记,使用更多样化的图像可以改善图像分类器的表现,例如使用从多个角度和在多种光照条件下拍摄的照片。
每个类别下的图像数量应保持平衡。例如,不要在一个类别下使用 10 张图像,而另一个类别使用 1000 张图像。
图像可以采用 Quicktime Player 能够打开的任何格式,如 JPEG 和 PNG。图像无需符合特定的大小要求,不同图像的大小也无需相同。不过,最好使用大小至少达到 299 x 299 像素的图像。
如有可能,你收集的图像应该接近并能代表那些你预期模型在 App 中会看到的图像。例如,如果你的 App 要对用设备的摄像头在室外环境中拍摄的图像进行分类,则你应使用在室外用类似摄像头拍摄的图像来训练模型。
注释
默认情况下,图像分类器会使用场景打印特征提取器,不但能加速训练过程,也能很好地和真实物体交互。更多详情,请参阅 MLImage
(英文)。
通过将图像整理到子文件夹中来准备训练数据集。根据子文件夹中所含图像的类别,为每个子文件夹命名。例如,你可以使用标签 Cheetah
来表示所有猎豹图像。
使用测试数据集测试你的模型,可以快速了解你训练的模型在现实世界中的表现情况。
如果你有数量充足的图像 (例如每个类别 25 张或以上),可以通过复制训练数据集的文件夹结构来创建测试数据集。然后,将每个类别大约 20% 的图像移入测试数据集中的同等类别文件夹。
使用 Create ML 创建图像分类器项目。在 Xcode 打开后,按住 Control 键点按程序坞中的 Xcode 图标,再选取“Open Developer Tool”(打开开发者工具) >“Create ML”;或者,你也可以从 Xcode 菜单中选取“Open Developer Tool”(打开开发者工具) >“Create ML”。
在 Create ML 中,选取“File”(文件) >“New Project”(新项目) 以查看模型模板的列表。选择“Image Classification”(图像分类),点按“Next”(下一步)。
将项目的默认名称更改为更合适和实用的名称。如有这个项目内模型的更多相关信息 (如一名或多名作者以及简短描述),可在此填写。
将含有训练数据集的文件夹拖入项目窗口中的“Training Data”(训练数据) 方格。
如果适用,将含有测试数据集的文件夹拖入项目窗口中的“Testing Data”(测试数据) 方格中。
如果你知道在训练会话中将使用的训练迭代数量,可以将默认的“Maximum Iterations”(最大迭代数) 更改为其他值。你也可以打开任何或所有图像增强。
每一种增强都会创建一个副本,并对样本图像应用变形或滤镜效果,让你无需收集更多样本,也可提高数据集的多样性。
点按“Train”(训练) 按钮,以启动训练会话。在启动会话时,Create ML 会将部分训练数据快速分入验证数据集,然后从其余训练图像中提取特征,如边缘、角落、纹理和颜色区域。Create ML 会使用图像的特征来反复训练模型,再利用验证数据集检查其准确性。
Create ML 会在图表中显示进度,黑线和灰线分别表示模型针对训练数据集和验证数据集的准确性。
Create ML 完成模型训练后,将使用测试数据集对模型进行测试。完成对模型的测试后,Create ML 会在“Evaluation”(评估) 标签页下显示训练、验证和测试的得分。模型的训练数据集准确性得分通常较高一些,因为它是从这些图像学习的。在这个示例中,图像分类器正确识别了训练图像中 100% 的图像、验证图像中 95% 的图像,以及测试图像中 97% 的图像。
“Precision”(精确率) 是真正例除以真正例与假正例之和所得到的值。“Recall”是真正例除以真正例与假负例之和所得到的值。
如果评估表现不够好,你可能需要更多样的训练数据进行重新训练。例如,你可以为图像分类器启用图像增强选项。有关如何进行更详细模型评估的信息以及提升模型性能的策略,请参阅“提高模型准确性”。
点按“Preview”(预览) 标签页,以测试模型对未曾见过的图像的表现。要查看模型的预测,可将图像文件拖入“Train”(按钮) 下方的列中。
如果模型的性能达标,就可将它存储到文件系统中 (使用 Core ML 的 .mlmodel
格式),以便添加到你的 Xcode 项目中。你可以从“Output”(输出) 标签页进行以下操作:
点按“Save”(存储) 按钮,将模型存储到文件系统中
点按“Export”(导出) 按钮,在 Xcode 中打开模型
点按“Share”(共享) 按钮,将模型发送给其他人,例如通过“邮件”或“信息”来发送
将模型的图标拖入接受文件的任何地方
最后一步是将你训练好的模型添加到 Xcode 项目中。例如,你可以使用图像分类器模型来替换掉“通过计算机视觉和 Core ML 对图像进行分类”(英文) 示例的 Xcode 项目中包含的模型。
下载这个示例,并在 Xcode 中打开其项目。将你的模型文件拖入导航面板中。Xcode 会将这个模型添加到项目中,并显示模型的元数据、操作系统可用性,以及类别标签等。
只需更改一行代码,就能在其中使用你的模型。项目仅在 Image
类中的一个位置对 MobileNet 模型进行实例化处理。
更改这行代码,就能将正在使用的替换为你的模型类。
这些模型都以图像为输入并输出标签字符串,因此可以互换。替换模型后,示例 App 不但会像之前一样对图像进行分类,现在它还会使用你的模型及关联的标签。
如果你是编程或机器学习方面的新手,可以按照以上所述,使用 Create ML 来训练有用的图像分类器。当然你也可以使用 MLImage
(英文) 实例来编写模型训练过程的脚本。常规的任务都是相同的:准备数据,训练模型,评估性能,再存储 Core ML 模型文件。不同之处只在于所有任务都需要编程。
例如,你可以对两个 MLImage
(英文) 实例进行实例化处理,分别用于训练数据集和测试数据集。借助 init(training
(英文),使用训练数据源来对图像分类器进行实例化处理。然后,使用测试数据源及 evaluation(on:)
(英文) 方法,再评估它返回的 MLClassifier
(英文) 实例中的值。
struct MLImageClassifier (英文)
struct MLObjectDetector (英文)