【问题标题】:Does training a multi-labeling CNNs on single-class data hinder accuracy?在单类数据上训练多标签 CNN 会影响准确性吗?
【发布时间】:2018-07-07 16:50:22
【问题描述】:

我为多标签分类构建了一个 CNN,即预测每个图像的多个标签。

我注意到 ImageNet 和许多其他数据集实际上包含每个标签的一组示例。他们构造数据的方式是,给定一个标签,有一个该标签的示例列表。即: 标签 -> 图像列表。此外,我正在使用的 Keras 支持每个标签的文件夹的数据结构,并且在每个文件夹中都有一个图像列表作为标签的示例。

我担心的问题是许多图像实际上可能有多个标签。例如,如果我对一般对象进行分类,名为“汽车”的单个文件夹将包含汽车图像,但某些汽车图像中也会包含人(并且可能会妨碍“人”类的结果)。

我的第一个问题: 1) 这会降低网络的潜在准确度吗(即地面实况中每个图像的单个标签)?

如果是这种情况,我想改为创建以下形式的数据集: image1,{其标签列表} image2,{其标签列表} 等等

2) 这样的结构会产生更好的结果吗?

3) 关于这方面的优秀学术论文是什么?

【问题讨论】:

  • 你看过答案了吗?
  • 是的,并在下面写了后续问题...

标签: neural-network deep-learning keras training-data imagenet


【解决方案1】:

这取决于您如何衡量准确性。具体来说,这取决于您使用的成本函数。假设您使用的是Softmax Output Layer,您将获得类概率作为输出,即输出节点 c 将给出图像显示 c 类型对象的概率,使得所有概率加起来为 1。因此,您可以使用Cross Entropy Cost Function 对其进行训练,在这种情况下,您将只使用每个图像的一个“正确”标签,并隐式训练您的网络以最大化正确标签的预测概率。或者,您可以构建一个成本函数,使多个或所有标签的预测概率最大化。当您使用该模型预测单个最合适的标签时,第二种方法可能会导致性能略有下降,反之亦然。

人们在实践中所做的是第一种方法,即在一个最合适的标签上进行训练。由于您的网络仍然输出每个类别的概率,您可以检查“错误”分类的图像并检查您的网络的预测是否至少在有效标签中。这是标准的paper 开始。另请查看年度网站ImageNet competetion

【讨论】:

  • 感谢您的回复,非常感谢。在我的情况下,这是一个多标签问题,许多标签共存于同一图像。这意味着我不能将概率加到 1,我希望每个标签本身映射到 0 到 1 的置信度分数/概率(即每个图像 0 到 1,而不是总和)。你怎么看?
【解决方案2】:

您描述的问题是一个众所周知的多分类问题。而不是从预定义的集合中分配标签 - 如果您想将每个标签分配给给定的图像,您将分别为每个标签做出决定。

keras 设置的情况下 - 您可以使用sigmoid 激活构建长度为nb_of_classes 的向量(然后使用binary_crossentopy 训练模型)或设置多个输出(如果每个标签都有多个决策,建议使用为每个类别预测一个类别和一些其他值)。

回答您的问题:

  1. 根据我的经验(并且知道损失函数通常是如何工作的),如果您只为一个班级设置培训 - 在理想情况下,这将导致分配 50%-50%(在两个基本事实的情况下)类),33%-33%-33%(在三个基本事实类的情况下)等。如您所见 - 这可能会产生问题,例如设置分类阈值。我个人会选择每个类使用sigmoid 单独输出的策略——记住——拥有关于图像的多条信息通常会带来更好的模型性能。

  2. 正如我之前提到的 - 提供多类可能会有所帮助,因为您正在提供例如在分配多类的情况下隐式类关联和解决类冲突。

  3. Here你有一篇关于你的案子的好论文。

【讨论】:

  • 感谢您的回答。我读了你的答案和论文。我有几个后续问题: 1. 本文建议的方法是否标准?我在参考文献中找到了一份完整的论文列表,建议用不同的方法来解决这个问题。虽然看起来它们彼此非常不同。 2. 您认为多标签训练数据对于获得良好结果的必要性有多大?我的意思是,如果我按照您在单类数据上发送的论文中的建议训练模型,而不是在多标签数据上进行训练,那么准确度的增量是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 2020-04-07
  • 2021-06-23
  • 2018-03-07
  • 1970-01-01
相关资源
最近更新 更多