训练数据有大概五六千张图像,每个图像中只有一个图像,要么是A类形状,要么是B类图像,其实训练一个二元分类模型,在测试集中判断出A类还是B类不是很难,就是既要判断出A类,也要判断出B类,还要判断出不是A类也不是B类的图片。这个应该是异常检测,请问各位大神有什么好的方法解决这个问题?或者对于这个问题有什么思路能指点一下我,先说声谢谢了

补充:这里只有A类和B类样本的数据,没有第三类的数据,但是要判断出不是A类,也不是B类的图片,


相当于检测out of distribution的数据,你可以参考uncertainty measure的方法,去年nips专门有专题解决uncertainty measure的问题。

A Baseline for Detecting Misclassified and Out-of-Distribution Examples in Neural Networks?

arxiv.org

以及:

NeurIPS 2019 Schedule?

nips.cc


你的意思难道不是一个三分类吗?


单纯通过输出的概率大小部分可行,但概率阈值是不太好定的。

建议采用基于卷积的自编码试试看。


可以用生成模型去做。

P(x)=aP1(x)+bP2(x)

假设A中的数据由P1(x)生成,B中的数据由P2(x)生成,a和b为混合系数,a+b=1,a &> 0,b &> 0。

最大化训练集由P(x)生成的对数概率log P(x)。

在推断时,设置一个阈值,当P(x)小于阈值时,认为不属于A,B两类。否则比较P1(x)和P2(x)的大小来确定属于A还是B。


搞一个CGAN生成器

将AB两个域图像作为输入映射到自己定义的响应模式上

(譬如学习的目标是一张单通道图像,A左侧响应1,右侧全0,反之反之)

根据生成的小图左右像素比判断AB类别

训练好后如果遇到与AB分布差异大图像,输出的图像分布模式会有很大差异。

根据观察写个函数判断为其它类即可。


「不是某分类」也是一个概念来的,你不教它,它怎么知道。人为扩展一些图片吧,用triplet loss 训练。可以参考一下FaceNet的方法。


给图片加噪音,做三分类吧,人为修改图片扩充数据集。


做三分类,由于没有负样本,为了提高泛化能力,可以使用对抗生成网路,随机自动生成新的样本


个人觉得想办法生成第三类数据比较实用,没必要增加自己的实践难度。如果是想发paper就当我没说


谢邀。

这是个好问题。题主应该是想只用现有的A、B两类,实现类似编程的if-else if-else的判断流程。

这是个很直接的想法,很好,很程序员。

我也曾有类似的想法,后来我发现,模型训练的本质是拟合,目前只能根据特征进行,不存在的数据,也就是本该写入的else这部分,模型是没法学习的。

建议的方法:

随机收集真实环境的其它一些图片作为第三个类C加入数据集,也就等同于是让模型进行A、B、C的三分类训练。目前都是用这种方法来解决else的问题。

或许未来会有更好的方法吧。


举个栗子,当预测为A的概率为0.9则判断为A,B亦同,如果预测A B的概率都较低(<0.5自定义)就判断为不是A B


推荐阅读:
相关文章