谈谈对不平衡数据的处理心得(图像类)
谈谈对不平衡数据的处理心得(图像类)
前言
在实际的应用中,不平衡的图像类数据集极为常见,在医学图像领域更是如此(正常的图片占绝大多数,异常的图片非常少),如果针对这种问题如果直接使用普通的交叉熵函数,往往效果很差,而今天这篇博文谈的就是关于对这类问题我的处理心得。
交叉熵
在一般的平衡数据集上,我们一般使用传统的交叉熵函数,其可以用下式表示: 其中 $\alpha_t$ 是平衡正/负样本的权值。
然而对于不平衡数据集,使用传统的交叉熵函数往往导致较差的结果。由于数据集不平衡,导致深度模型倾向于预测数据集中占大数的数据所对应的标签,其根源在于没有学习到数据的本质特征。
Focal Loss
Focal loss 是何凯明大神于2017年发表Focal loss for dense object detection提出的一种代价函数,被用来平衡数据集,以提升目标检测的性能。
Focal Loss的主要思想如果用一句话概括就是:“关注困难样本,减少对简单样本的关注”。其函数形式如下: 其中 $\alpha_t$ 是平衡正/负样本的权值,它并不区分易/难样本。 $\gamma$ 平滑地调整简单样本被降低权值的比例,这使得深度网络可以在训练中关注困难的样本。 $p_t \in [0,1]$ 则表示模型的分类概率。
这个代价函数有什么深意呢?仔细分析一下便可知,如果一个样本的被正确分类的概率很高,说明这个样本比较常见,也就是说简单样本,那么它被正确分类的概率越高,$(1-p_t)^\gamma$系数就越小,反之亦然。那么就变相地实现了对简单样本的不关注,对困难样本关注。
困难样本挖掘
分类的瓶颈往往是那些非典型的数据极易分错,我们要做的就是找到这样的非典型数据,加强对这种数据的训练,也可以理解成一种过采样,从而提升模型性能。
然而苦难样本挖掘没用固定的形式,只是一种概念上的统称。对于检测任务来说,我们可以把检测模型检测错误的样本作为困难样本,用于训练分类模型,进一步提升检测模型+分类模型集成后的性能。
总结
平衡数据的方式多种多样,此文仅仅代表我所遇到的实际问题时候的处理心得。
欢迎大家交流自己处理不平衡数据的心得。