【问题标题】:Image Classification: Heavily unbalanced data over thousands of classes图像分类:数千个类别的严重不平衡数据
【发布时间】:2018-09-12 05:58:56
【问题描述】:

我有一个数据集,包含大约 5000 个类别的图像,但每个类别的图像数量从 20 到 2000 个不等,这是非常不平衡的。此外,图像的数量远远不足以从头开始训练模型。我决定对预训练模型进行微调,比如 Inception 模型。

但我不确定如何处理不平衡的数据。有几种可能的方法:

  1. 过采样:对少数类别进行过采样。但即使使用积极的图像增强技术,我们也可能无法处理过度拟合。
    另外,如何从这么多类别的不平衡数据集中生成平衡批次?您对 TensorFlow 的这种管道机制有什么想法吗?
  2. SMOTE:我认为它对于像图像这样的高维信号不是那么有效。
  3. 对每批的交叉熵损失进行加权。这可能对单批次有用,但不能处理整体不平衡。

对此有什么想法吗?任何反馈将不胜感激。

【问题讨论】:

    标签: tensorflow deep-learning classification


    【解决方案1】:

    使用tf.losses.softmax_cross_entropy 并为每个类设置与其训练频率成反比的权重,以“平衡”优化。

    【讨论】:

    • 这是个好主意,我之前也想过。我有大约 5000 个类,有些类有 2000 多个图像,而有些只有 20 个。如果我将此规则应用于单个批次,少数类中的一些图像将乘以 100,而批次大小仅为 20。我认为该批次其他班级的培训将被销毁。您如何看待这个问题?
    • 如果你能让你的模型泛化到只有 20 个训练样本的类,我会感到非常惊讶。有没有其他方法可以说明你的问题?例如,您可以使用“混合”标签而不是使用 5000 个独立标签(例如,具有标签 [1 0 ... 0 1 ... 0 1 ] 等的第 1 类)?
    • 这是这个问题的难点。我不能真正将我的模型推广到一些少数族裔。此外,我并不期望我的模型有完美的结果,80% 的准确度会很好。对于你的想法,我没有看到使用混合标签的好处,你能解释一下吗?
    • 80% 在上下文中仍然是一个相当高的数字。你有没有想过我的问题重述评论?
    • 是的,我已经考虑过了。您的意思是使用混合标签而不是单热标签吗?例如,在三个类别的情况下,一个热标签将是 [1 0 0]、[0 1 0]、[0 0 1]。使用混合标签,它可以像 [1 1 0]、[0 1 1]、[1 0 1]。任何三个线性独立的向量都可以。如果是这样,我无法弄清楚这如何帮助我解决数据集的不平衡问题。能不能给我一个更详细的解释?
    【解决方案2】:

    从预训练的 ImageNet 层开始,添加您自己的最终层(根据需要使用适当的卷积、丢弃和展平层)。冻结除最后几个 ImageNet 层之外的所有层,然后在您的数据集上进行训练。

    对于不平衡的数据(以及一般的小型数据集),使用数据增强来创建更多的训练图像。 Keras 内置了这个功能:Building powerful image classification models using very little data

    【讨论】:

    • 感谢您的回复!我将在 Inception_Resnet_v2 上尝试您的方法。另外,您对处理不平衡数据有什么想法吗?
    • 抱歉,我没有注意到您对不平衡数据的评论。我正在尝试使用图像增强来使用 Augmentor 和 imgaug 库来增强少数类。我会在完成模型训练后报告我的结果。
    • 另外,我对少数类的图像进行过采样以补偿不平衡。
    • 嗨@TongShen,你知道了吗?你能帮帮我吗,因为我的情况和你一样。
    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 2019-08-11
    • 1970-01-01
    • 2021-01-14
    • 2015-01-28
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多