如何在 tensorflow 对象检测 API 中使用“忽略”类?

Posted

技术标签:

【中文标题】如何在 tensorflow 对象检测 API 中使用“忽略”类?【英文标题】:How to use "ignore" class with tensorflow object detection API? 【发布时间】:2020-05-03 07:11:08 【问题描述】:

我已经在自定义数据集上使用 SSD (mobilenet-v1) 训练了 tensorflow 对象检测模型(用于 num_steps:50000)。我得到了mAP@.50IOU ~0.98 和loss ~1.17。该数据集由 uno 扑克牌图像(跳过、反转和绘制四张)组成。在所有这些卡片上,模型的表现都非常好,因为我只在这 3 张卡片上训练了模型(大约 278 张图像和 829 个边界框(25% 的边界框用于测试,即验证),使用手机收集)。

但是,我没有在任何其他卡上训练模型,但它仍然检测到其他卡(使用网络摄像头进行推理)。

我该如何解决这个问题?我是否还应该收集其他类图像(除了跳过、反转和抽四张牌之外的任何东西)并在操作中忽略这个类?因此该模型在训练期间看到此类,即 Label: Other 图像,并且在推理期间不放置任何标签。

我不确定如何通知 tensorflow 对象检测 API 它应该忽略来自 Other 类的图像。

谁能指点一下?

请分享您的观点!

【问题讨论】:

确实可以添加更多的训练样本;但您也可以使用检测分数来查看某些框是否与绘制相关 对于跳牌、倒牌和抽四牌,训练好的模型不会进行任何错误检测。但是对于看不见的卡片,例如 4,8,9 等算法检测为跳过或反转。 检测分数是多少或4、8和9? 4,8 和 9 是其他牌(在 Uno 中有从 0 到 9 的牌,特殊牌,例如跳过、反转、抽二和抽四,外卡)。我为检测分数设置了阈值,即 0.5 也许你可以提高你的门槛。但存在可能无法检测到某些感兴趣的卡片的风险。添加更多的训练样本也可能会有所帮助 【参考方案1】:

是的,您需要有另一个类,它是您不想检测的对象

如果您没有这个Other Class,其中包括所有不会被检测到的东西。该模型会将其与现有的类进行比较,该类几乎与感兴趣的卡片相同。

其中一些因素是:

    形状的相似性 颜色的相似性 符号的相似性

这就是为什么即使它不是感兴趣的卡片(Skip、Reverse 和 Draw 4),它也会在某种程度上对这三个类别具有很高的“归属感”。

让另一个类转储所有这些可以显着降低对三个感兴趣的类的“归属感”,并在训练期间尽可能提供大量数据。

如果你不想再上课。

您可以过拟合跳过、反转和抽 4 张牌(接近 100%),然后将检测阈值提高到 (70-90%)。

希望这会对您有所帮助。

【讨论】:

以上是关于如何在 tensorflow 对象检测 API 中使用“忽略”类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tensorflow 对象检测 API 中使用“忽略”类?

如何在 TensorFlow 对象检测 API 中从头开始训练?

如何在 iOS 中运行 Tensorflow 对象检测 API 模型?

如何修改 ssd mobilenet 配置以使用 tensorflow 对象检测 API 检测小对象?

Tensorflow 对象检测 api:如何使用 imgaug 进行增强?

如何从代码运行 tensorflow 对象检测 api (model_main_tf2)?