数据不平衡带来什么问题?
假设在一个分类问题中,如果预测类别中存在一个或多个样本量极少的情况,比如在图像分类中识别恶性肿瘤(训练样本中含有肿瘤的图像远比没有肿瘤的图像少)。如果不考虑数据平衡的问题,模型的性能会出现问题。
原因:
1.对于不平衡类别,模型无法充分考察样本,从而不能及时有效地优化模型参数。
2.它对验证和测试样本的获取造成了一个问题,因为在一些类观测极少的情况下,很难在类中有代表性。换句话说,训练集中的数据过少,影响了模型对该类识别的泛化能力。
解决方法:
1.从数据出发
- 对数据不平衡的类别进行严格的数据增强;
- 利用大数据训练的模型(imagenet)进行transfer learning。
2.从loss出发
- 设置class weight,在交叉熵添加系数a,使得缺少数据样本的类别在loss惩罚力度更大。
- Focal Loss:.其中a为权重因子,为调节参数。当正样本的预测概率接近1时,则接近0,那么就会变得更小。换句话说,当样本分类合理时,函数会降低损失惩罚,防止对参数过度优化,避免过拟合。而当正样本的预测概率接近0时,则接近1,因此会变小一点,但是跟上面情况比起来,其实相当于放大了。Focal Loss函数对容易分类的样本进行down weighting,focus on the hard samples,有效的解决了数据不平衡问题。
3.OHEM j解决简单样本与难分辨样本之间的类别不平衡
- 由于目标检测套用图像分类的分类思想,但图像分类的数据集和目标检测的 数据集存在天然的差距,目标检测的目标框和背景框之间存在严重的不平衡
- 在第t次迭代时,输入图片到卷积网络中得到特征图,然后 把特征图和所有的RoIs输入到RoI网络中并计算所有RoIs的损失,把损 失从高到低排序,然后选择B/N个RoIs。这里有个小问题,位置上相邻 的RoIs通过RoI网络后会输出相近的损失,这样损失就翻倍。作者为了 解决这个问题,使用了NMS(非最大值抑制)算法,先把损失按高到低排 序,然后选择最高的损失,并计算其他RoI这个RoI的IoU(交叉比),移 除IoU大于一定阈值的RoI,然后反复上述流程直到选择了B/N个RoIs。
- 对于一次SGD迭代,计算过程如下:先计算出特征图,可读RoI网络对所 有RoI执行前向计算并计算每个RoI的损失,然后选择hard RoIs。把这 些hard RoIs输入到可读可写的RoI网络中执行前向前向计算和反向传播更新网络,并把可读可写的RoI网络的参数赋值给只可读的网络,一次 迭代就完成了。