图像分类:数千个类别中数据严重不平衡

6
我有一个数据集,包含大约5000个图像类别,但每个类别的图像数量从20到2000不等,这很不平衡。而且,图像的数量远远不足以从头开始训练模型。我决定在预训练模型上进行微调,比如Inception模型。
但我不确定如何处理不平衡的数据。有几种可能的方法:
  1. 过采样:对少数类别进行过采样。但即使使用激进的图像增强技术,我们也可能无法处理过拟合问题。
    此外,如何从如此多的类别的不平衡数据集中生成平衡批次?您对使用TensorFlow实现此管道机制有什么想法吗?
  2. SMOTE:我认为它对于高维信号(如图像)不太有效。
  3. 在每个批次中对交叉熵损失进行加权。这可能对单个批次有用,但不能解决整体不平衡的问题。
对此有什么想法吗?任何反馈将不胜感激。
2个回答

3

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


这是一个好主意,我之前也考虑过。我有大约5000个类别,有些类别有2000多张图片,而有些只有20张。如果我将此规则应用于单个批次,则少数类别中的某些图像将乘以100,而批量大小仅为20。我认为在该批次中训练其他类别将被破坏。您对这个问题有什么看法? - Tong Shen
如果你能让你的模型对只有20个训练样本的类进行泛化,我会非常惊讶。你是否可以用另一种方式陈述你的问题呢?例如,你可以使用“混合”标签(例如,类1具有标签[1 0 ... 0 1 ... 0 1]等)代替使用5000个独立标签吗? - bantmen
这是这个问题的难点。我无法将我的模型推广到一些少数类别。此外,我并不期望我的模型能够得到完美的结果,80%的准确率就很好了。关于你提出的想法,我没有看到使用混合标签的优势,你能解释一下吗? - Tong Shen
80%的正确率在这种情况下已经相当高了。您考虑过我的问题重新陈述评论吗? - bantmen
是的,我考虑过这个问题。您是指使用混合标签而不是独热标签吗?例如,在三类情况下,独热标签将是[1 0 0],[0 1 0],[0 0 1]。使用混合标签,它可以像[1 1 0],[0 1 1],[1 0 1]这样。任何三个线性无关向量都可以工作。如果是这样的话,我无法想象这如何帮助我解决数据集的不平衡问题。您能否给我更详细的解释? - Tong Shen

1
从预训练的ImageNet层开始,添加自己的最终层(根据需要使用适当的卷积、dropout和flatten层)。冻结除最后几个ImageNet层以外的所有层,然后在数据集上进行训练。
对于不平衡的数据(以及一般的小数据集),使用数据增强来创建更多的训练图像。Keras已经内置了这个功能:使用很少的数据构建强大的图像分类模型

1
谢谢您的回复!我将尝试在Inception_Resnet_v2上使用您的方法。此外,您对如何处理不平衡数据有什么想法吗? - Tong Shen
1
抱歉,我没有注意到你关于不平衡数据的评论。我正在尝试使用Augmentor和imgaug库来进行图像增强,以增加少数类别的样本数量。在完成模型训练后,我会报告我的结果。 - Tong Shen
1
此外,我对少数类别的图像进行了过采样以弥补不平衡。 - Tong Shen
嗨@TongShen,你解决了吗?你能帮我吗?因为我和你之前处于类似的情况。 - Anshuman Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接