机器学习:如何识别图像中是否没有训练对象 类

Machine learning: how to identify if there is no object of trained classes in image

如果我用(比方说)10 类 训练一个深度神经网络,并为网络提供一个完全不同的图像,是否可以合理地预期输出层的细胞不会激活太多,所以我会知道图像中没有训练类的对象吗?

我的直觉是"Yes",但真的是这样吗?最好的方法是什么?

谢谢

在监督训练期间,您通常假设在训练期间您获得了未来对象类型的完整表示。通常 - 这些都是带标签的实例。在你的情况下 - 还有 "noise" 个实例,因此基本上有两种主要方法:

  • 由于 multi-class 神经网络有 K 个输出神经元,每个神经元代表成为特定 class 成员的概率,您可以简单地以这些分布为条件,说新对象不属于其中任何一个。一种特殊的方法是检查是否 min(p(y|x))<T(其中 p(y|x) 是输出神经元的激活)某个阈值 T。您可以手动设置此值,也可以通过分析 "noise" 个实例(您确实有一些用于训练)。只需将它们通过你的网络并比较 T 的值给你最好的识别率
  • 在你的网络之前添加另一个 one-class classifier(异常检测器) - 所以你最终会得到两个 classifier 的序列,第一个能够识别它是否是任何 classes 的噪声或元素(注意,可以在没有噪声样本的情况下对其进行训练,请参阅 one-class classification 异常检测 技术。

您还可以向网络添加另一个输出来表示噪声,但这可能效果不佳,因为您将迫使您的网络为噪声与数据和 inter-class 决策生成一致的内部表示。

您问题的答案在很大程度上取决于您的网络架构和用于训练它的参数。如果您试图防止误报,我们通常可以在相关输出节点上设置任意阈值。

更一般地说,学习算法大多采用“封闭集”识别的形式,其中所有测试 类 在训练时都是已知的。然而,视觉应用更现实的场景是“开放集”识别,其中在训练时存在不完整的世界知识,并且可以在测试期间提交未知 类。

这是一个 on-going 研究领域 - 请参阅此 Open Set Recognition 网页以获取有关该主题的大量资源。