深度学习_数据预处理_图像数据均衡与图像数据增广(data augmentation)

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

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

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

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

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

在这里插入图片描述

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

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

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

除了上述的图像增广之外,还有其他的一些数据均衡方法。

1.类均衡采样(Class-aware Sampling)
尽管数据做了均衡之后可以保证总体数量上的均衡,但是单纯随机采样的mini-batch中,样本的分布却还是随机浮动的,尤其是当分类类别大于批量采样的数目时,有时候一个类出现一个以上的样本,而有的类却一个都不出现。这些情况的出现对于收敛并不是一个好的因素。所以一个思路是,除了总体上样本数量的均衡,在梯度下降的每个迭代批次进行采样的时候,要尽量让样本在类别和数量上都更加均匀。 类均衡采样就是这个思路下的一个方法。

这个方法首先将所有的类别都列出来,并随机打乱顺序。每次采样的时候按照采样数量在打乱顺序后的类列表上依次采样,如果采样到列表末尾,则重新打乱顺序继续采样。这样保证了每个批次数据中,类别的均匀性。然后在每个类别内再用同样的策略进行随机的样本采样,这样不需要做数据增广就实现了均匀采样,而且均匀度比平衡样本数量后直接随机采样更高,训练时的整体收敛性也更好。

发布了94 篇原创文章 · 获赞 37 · 访问量 3447

猜你喜欢

转载自blog.csdn.net/Rocky6688/article/details/103484006