使用 MediaPipe Model Maker 自定义第一个机器学习模型之前的 5 个须知事项

五月 04, 2023
Jen Person Developer Relations Engineer

如果您正在阅读此博客,那么您可能对创建自定义机器学习 (ML) 模型感兴趣。我最近依照 Codelab 文章使用 MediaPipe 创建自定义目标检测 Web 应用的说明,亲自完成了这一流程,创建了自定义狗狗检测器。如同其他全新编码任务,我们需要反复试错才能弄清楚如何实现目标。为了充分减少“反复试错”体验中的错误部分,我很乐于与您分享我从模型训练体验中得出的五个要点。


1. 数据准备十分耗时,请务必腾出时间

根据您自定义的模型类型,训练数据的准备方式会有所不同。一般来说,分为两步:获取数据与注释数据。

获取数据

找到最能代表您的用例的充足数据点可能并非易事。原因之一在于,您需要确保您有权使用数据中包含的任何图像或文本。请在训练之前检查数据的使用许可。此问题的解决方法之一是提供您自己的数据。我恰好有数百张我狗狗的照片,所以自然而然地选择它们作为目标检测器的训练数据。您还可以在 Kaggle 上查找现有数据集。Kaggle 上的选项众多,涵盖广泛的用例。如果幸运的话,您会找到满足您需求的现有数据集,甚至可能已经标有注释!

注释数据

MediaPipe Model Maker 接受符合以下要求的数据,即其中每个输入都有一个列出其注释的相应 XML 文件。例如:

有多个软件程序可以帮助注释。当您需要突出显示图像中的特定区域时,这些软件程序尤为有用。一些软件程序旨在实现协作,您可借助其中直观的界面和注释者说明来寻求其他人的帮助。Label Studio 是常见的开源选项之一,我用它来注释我的图像。

因此,预计此步骤将十分耗时,但请谨记,其耗时要长于预期

2. 简化自定义模型

如果您和我一样,那么想必您已经为您的第一个自定义模型计划了一个非常宏伟的想法。我的狗狗 Ben 是我第一个模型的灵感来源。它来自当地的金毛猎犬救助站,但当我给它做 DNA 测试时,结果发现它根本不是金毛猎犬!我的第一个想法是创建一个金毛猎犬检测器——一种可以向您告知您的狗狗是不是“金毛猎犬”的解决方案。在我看来,了解模型对 Ben 的看法可能很有趣,但我很快意识到我必须获取比我现有图像更多的狗狗图像,这样我才能对其他狗狗运行模型。而且,我必须确保该模型能够准确识别所有色度的金毛猎犬。经过几个小时的努力,我意识到我需要简化。就在那时,我决定尝试只为我的三条狗狗构建一个解决方案。我有很多照片可供选择,所以我选择了最能展示狗狗细节的照片。这是一个更成功的解决方案,对于我的金毛猎犬模型而言,也是一个很好的概念验证,因为我不愿意放弃这一想法。

以下是简化第一个自定义模型的几种方法:

  1. 从较少的标签开始。选择 2-5 个类别来分配给您的数据。
  2. 忽略边缘情况。如果您有软件工程背景,那么您就会习惯于关注并解决任何边缘情况。在机器学习中,当您尝试针对边缘情况进行训练时,可能会引入一些错误或奇怪的行为。例如,我没有选择任何看不到头部的狗狗照片。当然,我需要的是一个仅根据后半部分也能检测到我的狗狗的模型。但我在训练中遗漏了部分狗狗的照片,而事实证明,该模型仍然能够检测到它们。
5things2
即使看不到 ACi 的头部,Web 应用仍然可以识别图像中的 ACi
  1. 您可以在测试和原型设计中加入一些边缘情况,以了解模型的处理方式。如果没有这样做,也无需担心边缘情况。
  2. 少量数据亦有良效。由于 MediaPipe Model Maker 使用迁移学习,因此与从头开始训练模型相比,您需要的训练数据要少得多。以每个类别 100 个示例为目标即可。如果数据的可用迭代不多,您也许可以使用少于 100 个示例进行训练。例如,我的同事训练了一个模型来检测两个不同的 Android 手办。他不需要太多照片,因为手办的观看角度就这么多。如果您需要更多示例来显示数据的可用迭代,则可能需要 100 多个示例才能开始训练。例如,金毛猎犬有多种颜色。每种颜色可能需要几十个示例,以确保模型能够准确识别它们,从而会产生超过 100 个示例。

因此,当您第一次训练机器学习时,请记住要做到充分简化。

请务必牢记心间!

请务必牢记心间!

3. 做好执行多次训练迭代的预期

尽管我很想自信地说,您第一次训练时就会从模型中获得正确的结果,但这可能不会发生。花时间选择数据样本和注释肯定会提高您的成功率,但可以改变模型行为方式的因素还有很多。您可能会发现,为达到所需的准确性,您需要使用不同的模型架构开始训练。或者,您可能需要尝试使用不同的训练和验证数据分块。您可能需要向数据集中添加更多样本。幸运的是,使用 MediaPipe Model Maker 进行迁移学习通常只需要几分钟的时间,因此您可以相当快速地完成新的迭代。

4. 在应用外进行原型设计

当您完成模型训练后,您可能会非常兴奋并渴望将其添加到您的应用中。不过,出于以下几个原因,我鼓励您首先在 MediaPipe Studio 中试用您的模型:

  1. 每当您更改应用时,您可能都必须等待某些编译和/或构建步骤完成。即使进行热重载,也可能需要等待一段时间。因此,如果您决定调整得分阈值等配置选项,您需等待所做的每项调整完成,并且时间会累积起来。当您只是尝试测试一个组件时,不值得花费额外的时间等待整个应用构建完成。借助 MediaPipe Studio,您可以试用各种选项并以非常低的延迟查看结果。
  2. 如果您没有获得预期结果,则无法自信地确定问题是否出在您的模型、任务配置或应用上。

借助 MediaPipe Studio,我能够快速试用各种图像的不同得分阈值,以确定我应该在应用中使用的阈值大小。我还从影响性能的因素中排除了我自己的 Web 应用。

5things3

5. 进行增量更改

在获取优质数据、简化用例、训练和原型设计之后,您可能会发现需要重复这个循环才能获得正确的结果。当发生这种情况时,仅选择流程的一部分进行更改,并进行小的更改即可。就我而言,我的狗狗的许多照片都是在同一张蓝色沙发上拍摄的。如果模型已将这张沙发与狗狗相关联,因为沙发通常位于边界框内,这可能会影响模型对狗不在沙发上的图像进行分类的方式。我没有丢弃所有沙发照片,而是只删除了几张,并为每条狗添加了约 10 张不在沙发上的照片。这极大地优化了结果。如果您试图立即做出重大改变,最终可能会引入新问题而不是解决这些问题。

请大胆尝试,充分自定义!

记住这些提示后,您就可以自定义自己的 ML 解决方案了!您可以自定义图像分类手势识别文本分类目标检测模型以在 MediaPipe 任务中使用。

如果您想分享训练第一个模型的一些经验教训,请在 LinkedIn 上发布详细信息以及对应博文的链接,然后标记我。我十分想了解您收获的内容和构建的成果!