如何使用对象检测模型改进 CoreML 图像分类器模型?

Posted

技术标签:

【中文标题】如何使用对象检测模型改进 CoreML 图像分类器模型?【英文标题】:How to refine a CoreML image classifier model with an object detection model? 【发布时间】:2020-10-26 21:03:52 【问题描述】:

我有一个使用 CreateML 创建的图像分类器模型。

训练集中的标注大致为:

图像包含对象 A -> 标签 a 图像包含对象 B -> 标签 b 图像包含对象 C -> 标签 c 图像包含对象 A + B -> 标签 a 图像包含对象 A + B + C -> 标签 c

您可以说对象 A 的优先级高于 B 的对象有一些“优先级”,因此应该应用标签 a。与标签 c 相同,其中对象 C 具有最高优先级。

这显然不是算法的最佳选择,所以我会使用一个看起来更合适的对象识别算法。但是我已经有一个庞大的数据集,其中包含 10 万张手动正确分类的图像,这些图像不会用于训练算法,而且我必须从头开始构建一个新的训练集来进行对象检测,这显然是一个成本问题,而且不会不会很快达到现有数据集的大小。

有没有一种方法可以利用现有数据集构建图像分类模型,并使用我从头开始手动构建但数据集中可能只有几百个项目的对象检测模型对其进行扩充?

【问题讨论】:

【参考方案1】:

解决这个问题的一种方法是使用多标签分类,其中模型告诉你 A 存在的概率、B 存在的概率和 C 存在的概率,但这些是相互独立的.不幸的是,Create ML 无法训练这种模型。

【讨论】:

那不是和物体识别模型一样吗? “对象检测”一词用于对对象进行分类并对其进行定位的模型,即它们预测边界框。如果每张图像可以有多个 A、B、C,并且您想知道它们在图像中的位置,那么对象检测就是您需要的那种模型。 所以多标签分类意味着我在创建数据集时不必绘制边界框,算法会自己找出每个标签所属的这些对象是什么?因为否则模型将如何预测图像中的多个对象? 通过多标签分类,它可以告诉您图像中有一个 A、B 或 C 对象(或者可能不止一个),但它不会告诉您它们在哪里,只是他们在场。这将要求您为每个图像提供多个标签,但您不需要绘制边界框。 您可以通过更改 mlmodel 文件将其转换为多标签模型,但它会在假设它将是多类的情况下进行训练,因此预测将没有任何意义.

以上是关于如何使用对象检测模型改进 CoreML 图像分类器模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建可更新的 CoreML 模型?

继续训练 CoreML 模型

如何将使用 Mask Rcnn 在自定义对象检测上创建蒙版图像的 Keras 模型转换为 CoreML 模型以在 iOS 应用程序中使用?

CoreML 图像检测

错误! coreML 模型对图像的预测是错误的,对视频是正确的

是否可以使用 CoreML 模型检测对象并找到该对象的测量值?