使用Core ML创建iOS应用的图像分类模型

随着深度学习技术的飞速发展,现在即使是拥有中等性能GPU的个人用户也能轻松获得过去需要数百万美金和整个研究团队十年时间才能得到的成果。然而,深度神经网络也有其缺点,它们往往非常庞大且运行缓慢,因此在移动设备上的表现并不总是尽如人意。幸运的是,Core ML提供了解决方案:它允许创建在iOS设备上运行良好的精简模型。

在本系列文章中,将向展示如何以两种方式使用Core ML。首先,将学习如何将预训练的图像分类模型转换为Core ML,并在iOS应用中使用它。然后,将训练自己的机器学习(ML)模型,并使用它来制作一个“不是热狗”的应用——就像在HBO的《硅谷》中可能看到的那样。

创建ML项目

要开始一个新的Create ML项目,请选择Xcode > Open Developer Tool > Create ML。选择项目的文件夹并点击New Document。选择Image Classifier并点击Next。输入模型项目描述并点击Next。确认项目位置并点击Create。项目就绪了。

配置训练数据

现在是时候配置训练数据了。对于图像分类模型,Create ML要求图像被分组到与它们的标签相对应的文件夹中:

dataset_root: ● class_1_label: ● image_1 ● image_2 ● (…) ● image_n ● class_2_label: ● image_n + 1 ● image_n + 2 ● (…) ● image_n + m ● (…)

增强训练图像

在训练之前需要配置的最后参数是最大迭代次数(默认为25)和数据增强。增强过程向图像引入随机变化,这增加了训练数据集的大小和多样性。当训练一个模型来分类图像时,希望该模型无论图像质量、方向、确切的对象位置等如何都能工作。虽然增强通常有所帮助,但不应该过度使用它。请注意,每个选定的选项都会使训练数据集的大小呈指数级增长,但只有有限的新信息可以改善模型。

即使数据集非常小,选择多个增强选项也可以显著增加训练时间(从不到两分钟到几个小时),对模型性能的影响值得怀疑。让谨慎使用增强。

训练模型

所有选项设置好后,可以点击窗口顶部的Train按钮……然后休息一下。根据图像数量、选定的增强选项以及使用的硬件,这个过程可能需要几分钟到几个小时。

过程的第一步是提取特征。技术上,这是一个预测会话,其中每张图像都由现有的预训练VisionFeaturePrint模型处理,以生成一个2048元素的输出向量。这个向量代表了描述基本和复杂元素的抽象特征。只有在所有图像的特征生成后,实际的训练才开始。

根据选定的配置,这个过程在机器上持续了一分钟左右。结果看起来相当不错,对吧?训练数据集的精确度和召回率都超过了90%,验证数据集的精确度和召回率都超过了80%。考虑到图片数量很少且训练时间很短,没有什么可抱怨的。少量的图片是否意味着验证数据集不够代表性?

与其猜测和担心,不如让看看模型在现实生活中的表现如何。

运行预测

点击右上角的Output单元格。使用左下角的+按钮或将图像拖放到左列。模型生成预测。以下是对未包含在训练数据集中的Google Open Images数据集中的图像的一些预测。到目前为止还不错。现在让尝试一些有点棘手的事情。

好吧,模型并不完美——用一个汉堡愚弄了它。解决这个问题的最明显方法就是向“其他”类别添加一些汉堡图片并重复训练。但这可能还不够,特别是对于不平衡的数据集——有更多的“其他”对象而不是“热狗”。无论如何,如果模型性能不可接受,就需要对数据进行额外的工作。(请记住,100%的预测准确性几乎从来都不是一个现实的目标!)

Create ML模型的内部是什么?

用Create ML训练的分类模型的一个有趣之处在于它的大小。它非常非常小(17 KB,而之前讨论的模型为20-200 MB)。让看看它是如何在保持紧凑的同时产生相当好的结果的。一个好的工具是iNetron。

乍一看,它看起来一点也不像CNN或其他神经网络。秘密在于visionFeaturePrint块。这不是一个简单的“层”。这个块代表了苹果提供的整个CNN模型。在Create ML训练的第一步中用于特征提取的相同模型。

接下来的块是glmClassifier(一个广义线性模型),由Create ML训练以将标签分配给固定向量。从技术上讲,这意味着训练的模型部分根本不是一个神经网络!

热狗还是不是1.0

现在有了一个自定义的ML模型,可以使用它在iOS应用程序中。要做到这一点,只需将模型的输出从Create ML拖到Xcode,就像之前使用ResNet模型时所做的那样。有了这个模型和一些对之前系列中使用的示例iOS应用的美容更改,终于可以交付热狗还是不是iOS应用了。看看它如何处理来自Google Open Image数据集的图像。

欢迎查看下载附件中的应用程序代码。

这就是全部吗?还差得远呢——第一次迭代永远不会是最后一次。有了刚刚获得的知识,可以回到训练数据集的选择和准备。然后可能会想要获取反映使用应用程序的“现实生活”场景的新图片……然后可能会调整训练参数……等等。但这将是一个新的故事的主题。

现在,让为自己拍拍背,因为用自定义的图像分类模型构建了一个完全功能的热狗还是不是iOS应用程序。使用的工具帮助构建了一个像HBO《硅谷》系列中Jian Yang的应用程序。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485