如何在 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 检测小对象?