我的CNN分类器对随机图像给出了错误的预测

时间:2018-10-16 08:24:55

标签: tensorflow classification conv-neural-network

我使用3个数据类别(ID卡,护照,账单)训练了CNN分类器(使用tensorflow)。
当我用属于3类之一的图像进行测试时,它给出了正确的预测。但是,当我用错误的图像(例如汽车图像)对其进行测试时,它会一直为我提供预测(即,它预测该汽车属于ID卡类别)。

有没有办法使它显示错误消息而不是给出错误的预测?

3 个答案:

答案 0 :(得分:5)

这应该以不同的方式解决。这称为开放集识别问题。您可以搜索它并找到更多有关它的信息,但是基本上就是这样: 您无法在所有可以想象的课程上训练分类器。它总是会遇到其他一些不熟悉并且以前从未见过的类。

有几种解决方案,我将从中选择其中三种:

  1. 单独的二进制分类器-您可以构建单独的二进制分类器,以识别图像并将其分类为两个类别,具体取决于账单,护照或身份证是否在图像中。如果是这样,则应让您已经构建的算法来处理图像并将其分类为3类之一。如果第一个分类器说图像中有其他对象,则可以立即丢弃该图像,因为它不是票据/护照/身份证的图像。

  2. 阈值。在图像上有ID的情况下,ID的概率很高,而票据和护照的概率则很低。在图像是其他物体(例如汽车)的情况下,所有三个类别的概率极有可能是相同的。换句话说,这两个类别中的任何一个都不是真正突出的可能性。在这种情况下,无论概率值是0.4还是类似的值,您都选择最高的概率并将输出类别设置为该概率的类别。要解决此问题,您可以将阈值设置为0.7,例如,如果两个概率均未超过该阈值,则图片上还有其他内容(不是身份证,护照或账单)。

  3. 创建第四个类:未知。如果选择此选项,则应将少量其他图像添加到数据集中,并标记为 unknown 。然后训练分类器,看看结果是什么。

我建议1或2。希望对您有所帮助:)

答案 1 :(得分:2)

最简单的方法是简单地为其他三个类别添加一个第四类别,并使用各种完全随机的照片对其进行训练。

答案 2 :(得分:2)

这并不是一个真正的编程问题,它的方式更加复杂。您想要的被称为“分布失控”检测,其中分类器可以告诉您样本不在训练集中。

最近有一些有关此问题的研究论文,例如https://arxiv.org/abs/1802.04865https://arxiv.org/abs/1711.09325

通常,您不能使用未经专门训练的模型,例如,为此未对softmax分类器产生的概率进行校准,因此对这些概率进行阈值根本不起作用。