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

     2023-03-13     52

关键词:

【中文标题】我的 CNN 分类器对随机图像给出了错误的预测【英文标题】:My CNN classifier gives wrong prediction on random images 【发布时间】:2019-03-20 17:25:02 【问题描述】:

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

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

【问题讨论】:

不是真的,这更像是一个研究问题而不是编程问题。 更准确地说,您可以使用 arxiv.org/abs/1802.04865 之类的技术来检测 Out of Distribution 示例,但正如我所说,它比编程问题更复杂。 我对预测的了解是,给定一张要预测的图像,分类器将看到哪个是最接近该图像的类别。换句话说,分类器假设给定的图像必须属于它训练过的类别之一,所以它只会给出一个概率。我说的对吗? 是的,分类器不知道任何其他类别,也不必预测最相似的类别,它几乎是随机的。对于概率,您通常无法检测到这一点,因为它们没有为此目的进行校准。 谢谢@MatiasValdenegro,请发布一个总结您的cmets的答案,以便其他有同样问题的人在将来找到它。 【参考方案1】:

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

【讨论】:

我想过,但它没有效果,因为它就像第四类将包含 ANY OTHER THING 除了身份证、账单和护照。 它当然应该更容易忽略结果,就好像第四个输出 >0.5 并且其他输出几乎相等或者没有一个特别突出,那么你可以认为以上都不是. 是的,对,如果你从数学方面(概率)来看,如果你用随机图像测试模型,最高概率可能是第四类,因为它包含随机图像.这是最简单的开始方法。 是的,但正如你所做的那样,我绝对建议参考你标记的答案,这样会更好哈哈【参考方案2】:

这应该以不同的方式解决。这被称为开放集识别问题。你可以谷歌它并找到更多关于它的信息,但基本上是这样的: 你不能在每个可以想象的类上训练你的分类器。它总是会遇到一些它不熟悉并且以前从未见过的其他类。

有几个解决方案,我将从中挑选出其中的 3 个:

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

    阈值。在身份证在图像上的情况下,身份证的概率很高,而票据和护照的概率相当低。在图像是其他东西(例如汽车)的情况下,所有 3 个类别的概率很可能大致相同。换句话说,这两个类别的概率都没有真正突出。在这种情况下,您选择生成的概率最高并将输出类设置为该概率的类,而不管概率的值是 0.4 还是类似的值。为了解决这个问题,您可以设置一个阈值,比如说 0.7,如果两个概率都没有超过这个阈值,那么图片上还有其他东西(不是身份证、护照或账单)。

    创建第四个类:Unknown。如果您选择此选项,您应该将一些其他图像添加到数据集中并标记它们未知。然后训练分类器,看看结果如何。

我会推荐 1 或 2 个。希望它有所帮助:)

【讨论】:

感谢您的详细解答。第一种方法对我来说听起来不错。恐怕第二种方法不适合我的问题,因为即使使用错误的图像,概率也很高(有时超过 90%) 至于第三种方法,正如您所说“您无法在可以想象的每个类上训练您的分类器。它总是会遇到一些它不熟悉并且以前从未见过的其他类。”所以我猜它不是很有效。我会尝试第一种方法。再次感谢您的详细解释。 为什么不推荐最后一个选项?是不是效果更差?选项 #1 和 #3 之间有什么根本区别吗?【参考方案3】:

这不是一个真正的编程问题,它的方式更复杂。你想要的是所谓的分布外检测,分类器有办法告诉你样本不在训练集上。

最近有研究论文处理这个问题,比如https://arxiv.org/abs/1802.04865和https://arxiv.org/abs/1711.09325

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

【讨论】:

【参考方案4】:

我正在寻找相同的解决方案,它把我带到了这里。为了解决这个问题,我使用了math.isclose() 函数来比较我的预测值。

def check_distribution(self, prediction):
    checker = [x for x in prediction[0] if math.isclose(1, x, abs_tol=1e-9) ]
    for probability in prediction[0]:
        if len(checker) > 0:
            return True
        else:
            return False

随意更改 abs_tol 参数,具体取决于您想要的野蛮程度。

【讨论】:

MATLAB:使用 fitctree 训练的分类器对新数据进行标签预测

】MATLAB:使用fitctree训练的分类器对新数据进行标签预测【英文标题】:MATLAB:labelpredictiononnewdatausingfitctreetrainedclassifier【发布时间】:2018-07-2713:48:56【问题描述】:我在MATLAB2015b中使用fitctree构建了一个简单的分类树。我现在想... 查看详情

如何获得分类器对sklearn中预测的置信度分数?

...确定性如何?1级:81%这是1级第2类:10%第3类:6%第4类:3%我的代码 查看详情

使用pickle加载随机森林模型给出错误的预测

...为“finalizedmode.sav”。我现在正在尝试加载腌制模型以对我的测试数据的前两行进行预测,以确保一切正常。当我运行模型 查看详情

使用 CNN 的多类图像分类中的错误

...正在尝试对包含3个类的图像进行分类。每当我尝试训练我的模型时,我都会收到错误:TypeError:无法将0.6转换为dtypeint64的EagerTensor。我不完全确定该怎么做或如何解决它,希望能 查看详情

使用 CNN 进行癌症预测的分类

】使用CNN进行癌症预测的分类【英文标题】:usingCNNforclassificationforcancerprediction【发布时间】:2022-01-0111:25:41【问题描述】:我有一个包含1000个样本和12个特征的数据集(CVS)。我想使用CNN进行二进制分类。我发现的所有示例都与... 查看详情

为啥我的基于 Alexnet 的 CNN 分类失败?

】为啥我的基于Alexnet的CNN分类失败?【英文标题】:WhymyCNNbasedonAlexnetfailsinclassification?为什么我的基于Alexnet的CNN分类失败?【发布时间】:2017-09-0612:32:37【问题描述】:我正在尝试构建一个CNN来对狗进行分类。事实上,我的数... 查看详情

为 CNN 模型实现交叉验证

...发布时间】:2020-06-0106:42:54【问题描述】:我已经建立了我的CNN模型来对8个类别的图像进行分类。训练和测试步骤是通过随机拆分80%用于训练图像和20%用于测试图像来完成的,其中计算了Acuuracy和F-measure结果。我注意到,与我的... 查看详情

自定义 CNN 给出错误的输出形状

...作一个自定义CNN,它应该接受一个通道图像并进行二进制分类。这是模型:classcustom_small_CNN(nn.Module):def__init__(self,input_channels=1,output_features=1): 查看详情

使用 CNN 进行图像二分类,但它总是将所有内容预测为一类

...问题描述】:简介我有一个基于tensorflow的普通CNN网络,我的目标是训练它,然后用它来将图像分类为2类。关于训练数据集X:图片(健康,不健康),128*128标签:[ 查看详情

使用 Keras 进行多类图像分类的多重预测

】使用Keras进行多类图像分类的多重预测【英文标题】:Multiplepredictionsofmulti-classimageclassificationwithKeras【发布时间】:2018-09-2910:49:33【问题描述】:我在Keras中训练了一个CNN,其中包含一个文件夹中的图像(两种蜜蜂)。我有第... 查看详情

浅谈yolo

...牛导读】当我们谈起计算机视觉时,首先想到的就是图像分类,没错,图像分类是计算机视觉最基本的任务之一,但是在图像分类的基础上,还有更复杂和有意思的任务,如目标检测,物体定位,图像分割等。其中目标检测是一... 查看详情

渐进式随机森林?

...之后的数据进行分类。它会犯错误,有时可以记录错误。我的问题是:我可以使用那些错误分类的数据来重新训练原始分类器吗?如何?如果我只是将错误分类的那些添加到大小为N的原始训练集中,那么错 查看详情

图像分类的负面例子?

】图像分类的负面例子?【英文标题】:Negativeexamplesforimageclassification?【发布时间】:2019-08-0222:42:11【问题描述】:我有1000张狗的图片和1000张猫的图片。我已经训练了一个小型CNN来对这个数据集进行分类,并且验证/测试集的准... 查看详情

如何改进我的 CNN?高且持续的验证错误

】如何改进我的CNN?高且持续的验证错误【英文标题】:HowtoimprovemyCNN?highandconstantvalidationerror【发布时间】:2019-11-2510:14:24【问题描述】:我正在研究一个问题,根据奶牛的图像预测奶牛的肥胖程度。我应用了一个CNN来估计介于... 查看详情

在 MATLAB 中使用感知器对数据进行分类

...来分离它们。我知道有些帖子有类似的问题-但我找不到我的错误。我真的被困住了。该算法有效,但似乎没有收敛。如果您能帮助我,我将不胜感激。我的代码:single_layer_perceptron. 查看详情

用于多标签图像分类的 CNN

...两个类或三个类或四个类,依此类推,甚至所有40个类。我的问题与损失函数和度量有关:确实,我想强制我的CNN返回K最自信的类,如果其中至少有一个是正确的, 查看详情

从 pytorch 模型转换而来的 coreML 模型给出了错误的预测概率

...型。我分别使用以下教程/文档通过onnx直接和间接转换了我的模型https://coremlt 查看详情

为啥我的 CNN 预训练图像分类器过拟合?

】为啥我的CNN预训练图像分类器过拟合?【英文标题】:WhyismyCNNpretrainedimageclassifieroverfitting?为什么我的CNN预训练图像分类器过拟合?【发布时间】:2020-01-2410:05:46【问题描述】:我刚刚开始使用计算机视觉,在当前任务中我将... 查看详情