深度学习_深度学习基础知识_图像数据集不均衡问题的处理方法

数据集不均衡带来的问题

首先我们考虑一个二分类问题,比如区分一张图片里的是一只猫还是一只狗。若数据搜集的时候只找到了1000张猫的图片和40000张狗的图片作为训练集。如果直接把这41000张图片放在一起,然后用mini-batch的方法进行训练,就会出现数据不均衡的问题。

比如每次迭代的样本数量为100个,那么平均下来每次样本中猫的数量通常只有1、2个。这样的结果是计算损失函数时,狗的图片比重太大,所以相当于是针对狗的图片进行了充分的训练。猫的图片带来的损失的影响很小,所以猫的特征就并不容易被学习到,这会影响分类器的最终性能(可能猫无法被识别)。

所以在实际工程中或是实验中,我们必须先对数据集进行分析,如果存在数据集不均衡的现象,那就要进行数据集均衡操作。
最直接的想法就是把猫的图片复制39遍,这样猫的样本就和狗的样本一样了。这样做有一定的效果,不过在实际应用中我们更常用的手段是进行data augmentation。

在机器学习中,数据通常都是来源于一个分布。比如猫的图片,无论图片中的猫是什么颜色,什么姿势,眼睛是瞪着还是眯着,都能看出是一只猫。而所有的猫的图片,都可以看作是来自于一个分布。

数据增强

基础数据增强方法

因此,在做数据均衡的时候可以考虑模拟这个分布产生一些和已有数据不完全一样的数据。具体到猫的例子,就是可以考虑把图像旋转一个角度,左右镜像对称,明暗度做一些改变,或者是裁剪等。如下图所示:

做了这些改变之后,仍能一眼看出这是只猫,可以认为图片仍是来自“猫”这个分布。

**数据增广不仅可以用来解决样本数量不均衡的问题,还可以带来其他的好处。**比如想象一下1000张猫的训练数据全是向左看的猫,那么训练出的模型遇到一只向右看的猫就未必能判断的很准。所以数据增广的时候可以随机加入水平翻转,让向右看的猫也出现在训练样本中,增强模型对未见过的数据的潘判断能力,这也是数据增广带来的好处。

所以在实际应用中,即使是数量多的一类的图片也可以使用数据增广的手段来获取更多的训练样本,来增强模型对于未见过的数据的分类能力。比如猫和狗的例子中,可以通过数据增广把猫和狗的图片都增加到10万张再进行训练。甚至可以在每次训练迭代之前实时在原始图片基础上随机加上一些变化,相当于拥有了无限的数据增广的样本。

其他额外有效的数据增强方法

  1. 旋转缩放(这个方法要看数据集适不适合使用,如蓝天和大海的照片,都是上天下海)。
  2. RGB三通道分别提取成为R,G,B单通道三张图。
  3. 高斯模糊等加噪声的算法。
  4. 对少数样本种类做过采样,多样本种类做欠采样。
  5. 使用GAN对数据进行生成。
  6. 损失函数的权重均衡。(不同类别的loss权重不一样,最佳参数需要手动调节)

你可能感兴趣的:(#,深度学习基础知识)