是否有正确的方法以编程方式防止短暂的错误识别(在对象检测应用程序中)触发操作?

Is there a right way to programmatically prevent a brief wrong recognition (in object detection app) to trigger an action?

上下文

我正在构建一个应用程序,它通过设备的摄像头模块执行实时对象检测。渲染效果如下图。

假设我尝试识别一个苹果,大多数时候该应用程序会识别一个苹果。但是,有时,该应用程序会在一些相机帧上识别出错误的水果(假设是柠檬)。

目标

由于在我的代码中识别水果会触发一个动作,我的目标是以编程方式防止短暂的错误识别触发一个动作,并且只考虑多数结果.

我试过的

我试过这种方法:如果相同的水果被识别连续几帧,我假设结果应该是正确的。但是由于我的设备每秒处理几次图像识别,即使是一个错误的猜测也可以连续识别多次,并导致错误的动作。

问题

是否有任何已知的技术可以避免这种行为?

我觉得你已经回答了你自己的问题。一般来说,模型推理的解释是它自己的调整步骤。例如,您知道在逻辑回归任务中阈值不必为 0.5。事实上,调整阈值以查看不同阈值下的召回率和精确率是很常见的,您可以选择一个适用于 business/product 问题的阈值。 (如果您不想错过任何欺诈,欺诈检测可能有利于高召回率……或者如果您不想用大量误报惹恼用户,则可能有利于高精度)。

如您所知,在视频中,这个广泛的概念被扩展到多帧。您现在已经调整了超参数,“总共有多少帧?”和“有多少帧投票 [apple]”?

如果您正在分析一个一个地从传送带上下来的水果,并且您知道每块水果将在画面中停留 X 秒,并且您以 60 fps 的速度拍摄,也许您需要 60 * X 帧。也许您希望 90% 的帧同意。

您需要可视化检测器“翻转”检测的频率,以便您可以 business/product 判断阈值应该是多少。

这个答案对于在这里为您提供明线规则并没有多大帮助,但我希望它有助于暗示实际上没有明线规则。你必须了解问题才能设置关键超参数:

  1. 对于每一帧,top-1 acc 是否足够,或者我需要 [.75] 或更高的置信度?
  2. 有多少帧可以投票?说 [100].
  3. 触发实际信号需要多少相关投票?也许是 [85].

上述算法假设您在第 1 步之后采用 hardmax。另一种选择是对所有 100 帧取平均并选择一个阈值。这是上述算法的软标签版本。