如果您正在阅读此博客,那么您可能对创建自定义机器学习 (ML) 模型感兴趣。我最近依照 Codelab 文章使用 MediaPipe 创建自定义目标检测 Web 应用的说明,亲自完成了这一流程,创建了自定义狗狗检测器。如同其他全新编码任务,我们需要反复试错才能弄清楚如何实现目标。为了充分减少“反复试错”体验中的错误部分,我很乐于与您分享我从模型训练体验中得出的五个要点。
根据您自定义的模型类型,训练数据的准备方式会有所不同。一般来说,分为两步:获取数据与注释数据。
找到最能代表您的用例的充足数据点可能并非易事。原因之一在于,您需要确保您有权使用数据中包含的任何图像或文本。请在训练之前检查数据的使用许可。此问题的解决方法之一是提供您自己的数据。我恰好有数百张我狗狗的照片,所以自然而然地选择它们作为目标检测器的训练数据。您还可以在 Kaggle 上查找现有数据集。Kaggle 上的选项众多,涵盖广泛的用例。如果幸运的话,您会找到满足您需求的现有数据集,甚至可能已经标有注释!
MediaPipe Model Maker 接受符合以下要求的数据,即其中每个输入都有一个列出其注释的相应 XML 文件。例如:
有多个软件程序可以帮助注释。当您需要突出显示图像中的特定区域时,这些软件程序尤为有用。一些软件程序旨在实现协作,您可借助其中直观的界面和注释者说明来寻求其他人的帮助。Label Studio 是常见的开源选项之一,我用它来注释我的图像。
因此,预计此步骤将十分耗时,但请谨记,其耗时要长于预期。
如果您和我一样,那么想必您已经为您的第一个自定义模型计划了一个非常宏伟的想法。我的狗狗 Ben 是我第一个模型的灵感来源。它来自当地的金毛猎犬救助站,但当我给它做 DNA 测试时,结果发现它根本不是金毛猎犬!我的第一个想法是创建一个金毛猎犬检测器——一种可以向您告知您的狗狗是不是“金毛猎犬”的解决方案。在我看来,了解模型对 Ben 的看法可能很有趣,但我很快意识到我必须获取比我现有图像更多的狗狗图像,这样我才能对其他狗狗运行模型。而且,我必须确保该模型能够准确识别所有色度的金毛猎犬。经过几个小时的努力,我意识到我需要简化。就在那时,我决定尝试只为我的三条狗狗构建一个解决方案。我有很多照片可供选择,所以我选择了最能展示狗狗细节的照片。这是一个更成功的解决方案,对于我的金毛猎犬模型而言,也是一个很好的概念验证,因为我不愿意放弃这一想法。
以下是简化第一个自定义模型的几种方法:
因此,当您第一次训练机器学习时,请记住要做到充分简化。
请务必牢记心间!
请务必牢记心间!
尽管我很想自信地说,您第一次训练时就会从模型中获得正确的结果,但这可能不会发生。花时间选择数据样本和注释肯定会提高您的成功率,但可以改变模型行为方式的因素还有很多。您可能会发现,为达到所需的准确性,您需要使用不同的模型架构开始训练。或者,您可能需要尝试使用不同的训练和验证数据分块。您可能需要向数据集中添加更多样本。幸运的是,使用 MediaPipe Model Maker 进行迁移学习通常只需要几分钟的时间,因此您可以相当快速地完成新的迭代。
当您完成模型训练后,您可能会非常兴奋并渴望将其添加到您的应用中。不过,出于以下几个原因,我鼓励您首先在 MediaPipe Studio 中试用您的模型:
借助 MediaPipe Studio,我能够快速试用各种图像的不同得分阈值,以确定我应该在应用中使用的阈值大小。我还从影响性能的因素中排除了我自己的 Web 应用。
在获取优质数据、简化用例、训练和原型设计之后,您可能会发现需要重复这个循环才能获得正确的结果。当发生这种情况时,仅选择流程的一部分进行更改,并进行小的更改即可。就我而言,我的狗狗的许多照片都是在同一张蓝色沙发上拍摄的。如果模型已将这张沙发与狗狗相关联,因为沙发通常位于边界框内,这可能会影响模型对狗不在沙发上的图像进行分类的方式。我没有丢弃所有沙发照片,而是只删除了几张,并为每条狗添加了约 10 张不在沙发上的照片。这极大地优化了结果。如果您试图立即做出重大改变,最终可能会引入新问题而不是解决这些问题。
记住这些提示后,您就可以自定义自己的 ML 解决方案了!您可以自定义图像分类、手势识别、文本分类或目标检测模型以在 MediaPipe 任务中使用。
如果您想分享训练第一个模型的一些经验教训,请在 LinkedIn 上发布详细信息以及对应博文的链接,然后标记我。我十分想了解您收获的内容和构建的成果!