如何使用 Python 对图像数据集进行过采样?

Posted

技术标签:

【中文标题】如何使用 Python 对图像数据集进行过采样?【英文标题】:How to oversample image dataset using Python? 【发布时间】:2018-07-09 23:12:40 【问题描述】:

我正在处理具有不平衡图像数据集(不同类别)的多类分类问题。我尝试了imblearn 库,但它不适用于图像数据集。

我有一个属于 3 类的图像数据集,即 A、B、C。 A 有 1000 个数据,B 有 300 个,C 有 100 个。我想对 B 类和 C 类进行过采样,这样可以避免数据不平衡。请告诉我如何使用 python 对图像数据集进行过采样。

【问题讨论】:

欢迎来到 ***。请阅读并遵循帮助文档中的发布指南。 on topic 和 how to ask 在这里申请。特别要详细说明您的尝试(“我尝试过 imblearn 库”过于笼统)以及出了什么问题(“它不工作”不是问题规范)。当我们不知道您必须完成什么、您做了什么以及出了什么问题时,我们就无法解决问题。 Minimal, complete, verifiable example 适用于此。 感谢@Prune 让我知道指南。您能否让我知道如何对图像数据进行过采样。我有一个属于 3 类的图像数据集,即 A、B、C。 A 有 1000 个数据,B 有 300 个,C 有 100 个。我想对 B 类和 C 类进行过采样。这样可以避免数据不平衡。请告诉我。再次感谢您尝试帮助我。 【参考方案1】:

感谢您的澄清。通常,您不要使用 Python 进行过度采样。相反,您预处理您的数据库,复制人手不足的类。在您引用的情况下,您可能会复制 B 类中的所有内容,并将 C 类中的所有内容复制 5 份。这为您提供了 1000:600:500 的新平衡,可能更适合您的训练程序。您现在将 2100 张随机播放,而不是原来的 1400 张图片。

这能解决你的问题吗?

【讨论】:

【参考方案2】:

实际上,imblearn.over_sampling 似乎只对 2d dims 输入重新采样。因此,通过此库对图像数据集进行过采样的一种方法是与它一起使用重塑,您可以:

重塑您的图像 过采样 再次将新数据集重塑为 第一个暗淡

假设您有一个size (5000, 28, 28, 3) and dtype of nd.array 的图像数据集,按照上述说明,您可以使用以下解决方案:

# X : current_dataset
# y : labels

from imblearn.over_sampling import RandomOverSampler
reshaped_X = X.reshape(X.shape[0],-1)

#oversampling
oversample = RandomOverSampler()
oversampled_X, oversampled_y  = oversample.fit_resample(reshaped_X , y)

# reshaping X back to the first dims
new_X = oversampled_X.reshape(-1,28,28,3)

希望对您有所帮助!

【讨论】:

以上是关于如何使用 Python 对图像数据集进行过采样?的主要内容,如果未能解决你的问题,请参考以下文章

如何对不平衡的多类数据集进行欠采样? (Python)

使用 SMOTE 对图像数据进行过采样

为不平衡二元分类对数据进行过采样的过程

使用 python 对图像数据集进行任何癌症诊断的机器学习

如何对数据集进行子采样

Tensorflow 数据集 API 中的过采样功能