我用 3 个数据类别(身份证、护照、账单)训练了我的 CNN 分类器(使用 tensorflow)。
当我使用属于 3 个类别之一的图像对其进行测试时,它给出了正确的预测。但是,当我用错误的图像(例如汽车图像)对其进行测试时,它会不断给我预测(即它预测汽车属于身份证类别)。
有没有办法让它显示错误消息而不是给出错误的预测?
最佳答案
这应该以不同的方式处理。这称为开放集识别问题。你可以谷歌它并找到更多关于它但基本上是这样的: 您无法在每个可以想象到的类别上训练您的分类器。它总是会遇到一些它不熟悉且以前从未见过的其他类。
有一些解决方案,我将从中挑选出其中的 3 个:
单独的二元分类器 - 您可以构建单独的二元分类器来识别图像并根据账单、护照或身份证件是否在图像中将它们分为两类。如果是,它应该让您已经构建的算法处理图像并将其分类为 3 个类别之一。如果第一个分类器说图像中有其他物体,您可以立即丢弃该图像,因为它不是账单/护照/身份证的图像。
阈值化。在身份证在图像上的情况下,身份证的概率很高,而账单和护照的概率相当低。在图像是其他东西(例如 汽车)的情况下,所有 3 个类别的概率很可能大致相同。换句话说,这两个类别的概率都没有真正脱颖而出。在这种情况下,您选择生成概率最高的概率并将输出类别设置为该概率的类别,而不管概率值是 0.4 还是类似值。要解决此问题,您可以将阈值设置为 0.7,如果两个概率均未超过该阈值,则图片上还有其他内容(不是身份证、护照或账单)。
创建第四个类:Unknown。如果您选择此选项,您应该将其他一些图像添加到数据集中并将它们标记为未知。然后训练分类器,看看结果如何。
我会推荐 1 或 2。希望它有帮助:)
关于tensorflow - 我的 CNN 分类器对随机图像给出了错误的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52831038/