什么是样本不平衡?
在计算机视觉(CV)任务里常常会碰到类别不平衡的问题, 例如:
- 图片分类任务:有的类别图片多,有的类别图片少
- 检测任务:现在的检测方法如SSD和RCNN系列,都使用anchor机制。 训练时正负anchor的比例很悬殊.
- 分割任务:背景像素数量通常远大于前景像素。
从实质上来讲, 它们可以归类成分类问题中的类别不平衡问题:对图片/anchor/像素的分类。
再者,除了类不平衡问题, 还有easy sample overwhelming的问题。easy sample如果太多,可能会将有效梯度稀释掉。
这两个问题通常都会一起出现。 如果不处理, 可能会对模型性能造成很大伤害.用Focal Loss里的话说,就是训练不给力, 且会造成模型退化.
样例数目较多的类别在反向传播时对权重占主导地位。这一现象会使网络训练初期,快速的降低数目较多类别的错误率,但随着训练的迭代次数增加,数目较少类的错误率会随之上升
解决样本不平衡问题的方法?
常见的方法有online的, 也有非online的;有只处理类间不平衡的,有只处理easy example的, 也有同时处理两者的。
Hard Negative Mining, 非online的mining/boosting方法
Mini-batch Sampling,以Fast R-CNN(2015)和Faster R-CNN(2016)为代表。Fast RCNN在训练分类器, Faster R-CNN在训练RPN时,都会从N = 1或2张图片上随机选取mini_batch_size/2个RoI或anchor, 使用正负样本的比例为1:1。若正样本数量不足就用负样本填充。
Online Hard Example Mining, OHEM(2016)。将所有sample根据当前loss排序,选出loss最大的N个,其余的抛弃。这个方法就只处理了easy sample的问题。
Oline Hard Negative Mining, OHNM, SSD(2016)里使用的一个OHEM变种, 在Focal Loss里代号为OHEM 1:3。在计算loss时, 使用所有的positive anchor, 使用OHEM选择3倍于positive anchor的negative anchor。同时考虑了类间平衡与easy sample。
Class Balanced Loss。计算loss时,正负样本上的loss分别计算, 然后通过权重来平衡两者。
Focal Loss(2017), 最近提出来的。不会像OHEM那样抛弃一部分样本, 而是和Class Balance一样考虑了每个样本, 不同的是难易样本上的loss权重是根据样本难度计算出来的。
这些方法都是在计算loss时通过给样本加权重来解决不平衡与easy example的问题。不同的是,OHEM使用了hard weight(只有0或1),而Focal Loss使用了soft weight(0到1之间).
现在依然常用的方法特性比较如下:
Method | 是否处理Class Inbalance | 是否处理Easy Example | 权值方式 |
---|---|---|---|
OHEM | No | Yes | Hard |
OHNM(OHEM 1:3) | Yes | Yes | Hard |
Class Balanced Loss | Yes | No | Soft |
Focal Loss | No | Yes | Soft |
简要说明
从损失函数,数据处理,网络训练,梯度下降简要说明.
损失函数:计算loss时,正负样本上的loss分别计算, 然后通过权重来平衡两者
数据处理:数据扩充,针对样本数量较少的类别进行数据扩增
网络训练:采样策略,增加样本数量较少的类别的选中概率
mean squared false error (MSFE) loss