如何使用只有一类数据的数据集

数据挖掘 喀拉斯 美国有线电视新闻网
2021-09-21 06:09:52

我正在执行分类任务,以尝试检测对象。拍摄环境图片,使用视觉算法生成该可能对象的候选对象,一旦隔离,这些候选对象将通过 CNN 以最终决定是否检测到对象。我正在尝试在 InceptionV3 上使用迁移学习,但在训练它时遇到了困难,因为我只有一组/一类图像。

困境是我只有一类数据,当我通过网络传递它时,我得到了 100% 的准确度(因为没有什么可以比较的)。我应该如何克服这个?我应该在网上找到更多类别以添加到我的数据集中吗?这些类别应该是什么?

只是为了澄清,例如,我有“猫”类。

不是“猫”和“狗”。

不是“猫”和“没有猫”。

只是“猫”。这就是我的数据集目前包含的内容。

3个回答

模型根据图像和标签数据的反馈学习匹配权重。

如果您将一些图像类作为“Not Cat”提供,它将学习将相似的特征分类为“ Not Cat ”。但可能会因新课程而失败。
例如,如果将“汽车/家具/狗”训练为“非猫”,那么野猫被归类为“猫”的可能性很高
转储所有 Imagenet 数据集肯定会为“Not Cat”类提供相当好的差异,并且可能在大多数情况下都有效,但这不是解决问题的合适方法。

这种类型的问题将属于一类分类
核心思想是使用 CNN 提取特征,然后使用一些专门的模型,例如一类 SVM、高斯混合等来定义“猫”的边界

这个问题由一类 SVM 方法定义,包括识别一个包含所有(或大部分)数据的球体。解决该问题的经典策略考虑同时估计球体的中心和半径。

您可以从这些链接开始(按指定顺序) -
Hackernoon 博客
Arxiv
Researchgate

还有其他方法,即基于 Auto-encoder在这里,我们尝试为重建错误设置一个阈值。
参考资料
- Quora
SO
Keras 博客

另外,可以在这里查看一个为“No Cat”类生成随机图像的想法。
这里

简短的回答

您似乎正在寻找一类分类方法有几种方法,例如隔离森林一类 SVM自动编码器的重构误差(仅由您的正类训练)等等......所有这些分类器都从一个类中学习。

在下面编辑

关于创建“无猫”类

必须知道:当通常训练分类器以区分猫和无猫时,您应该将它们的预测解释如下:

如果它说它是一只猫,那意味着它看起来更像一只猫而不是一只没有猫而已。

如果有一天你的分类器看到一个它在你的“无猫”训练数据集中从未见过的输入,它可以选择它看起来更像一只猫。

结论:创建“无猫”类时要小心/注意。

对一类分类的初步理解

一个类分类的目标不再是区分多个类,而是找到单个类的最佳描述性边界。

一个易于理解的距离方法示例:

  1. 采用一些代表您的一类输入数据的特征。
  2. 在这个特征空间中,计算最大距离dmax在 2 个最近的邻居之间。
  3. 在此特征空间中投影任何新输入并计算其与最近邻的距离。
  4. 如果这个距离大于dmax,这不是你的课。否则,它是。

当然,这是一个主要示例,但它可能会让您了解一类分类的作用。

一类分类的一个困难是找到正确的特征集。从这个例子更进一步,任何限制集群的东西(比如一些 聚类算法)都可以用来创建一个分类器。

走得更远

一类分类问题近年来越来越受到关注。你可以看看这些文章:

如果模型所知道的只是一件事,则无法训练该模型。必须有“不是猫”的例子才能学习。

要解决此问题,您可以找到任何东西来训练它,只要它不是“猫”并加强您的训练数据集。训练集应该是“猫”和“非猫”的混合体。完成后,您将开始完善模型准确性的过程。