这里主要介绍CV中的样本不均衡问题(部分方法也适用于ML中)。当前主流的物体检测算法,如Faster RCNN和SSD等,都是将物体检测当做分类问题来考虑,即先使用先验框或者RPN等生成感兴趣的区域,再对该区域进行分类与回归位置。这种基于分类思想的物体检测算法存在样本不均衡的问题,因而会降低模型的训练效率与检测精度。
下面首先分析样本不均衡带来的问题,随后会讲解两种经典的缓解不均衡问题的方法。
在当前的物体检测算法中,由于检测算法各不相同,以及数据集之间的差异,可能会存在正负样本、难易样本、类别间样本这3种不均衡问题,如图所示。下面将详细分析这3种不均衡问题的来源,以及常
用的解决方法。
以Faster RCNN为例,在RPN部分会生成20000个左右的Anchor,由于一张图中通常有10个左右的物体,导致可能只有100个左右的Anchor会是正样本,正负样本比例约为1∶200,存在严重的不均衡。
对于物体检测算法,有核心价值的是对应着真实物体的正样本,在训练时会根据其loss来调整网络参数。相比之下,负样本对应着图像的背景,如果有大量的负样本参与训练,则会淹没正样本的损失,从而降低网络收敛的效率与检测精度。
除了正负样本,在物体检测中还存在着难易样本的不均衡问题。根据是否容易学习及与标签的重叠程度,可以将所有样本分为4类:简单正样本(Easy Positive)、难正样本(Hard Positive)、简单负样本(Easy Negative)及难负样本(Hard Negative),如图所示。
难样本指的是分类不太明确的边框,处在前景与背景的过渡区域上,在网络训练中难样本损失会较大,也是我们希望模型去学习优化的样本,利用这部分训练可以提升检测的准确率。
然而,大量的样本并非处在前景与背景的过渡区,而是与真实物体没有重叠区域的负样本,或者与真实物体重叠程度很高的正样本,这部分被称为简单样本,单个损失会较小,对参数收敛的作用有限。虽然简单样本单个损失小,但由于数量众多,因此如果全都计算损失的话,其损失也会比难样本大很多,这种难易样本的不均衡也会影响模型的收敛与精度。
值得注意的是,由于负样本中大量的是简单样本,导致难易样本与正负样本这两个不均衡问题有一定的重叠,解决方法往往能同时对这两个问题起作用。
在有些物体检测的数据集中,还会存在类别间的不均衡问题。举个例子,数据集中有100万个车辆、1000个行人的实例标签,样本比例为1000∶1,属于典型的类别不均衡。
这种情况下,如果不做任何处理,使用该数据集进行训练,由于行人这一类别可参考标签太少,会使得模型主要关注车这一类别的检测,网络中的参数主要根据车辆的损失进行优化,导致行人的检测精度大大下降。
针对以上3种不均衡问题,经典的物体检测算法在处理样本时,总体上有如下4种缓解办法:
针对难易样本不均衡的问题,2016年CVPR会议上的OHEM(Online Hard Example Mining)方法高效率地实现了在线难样本的挖掘,在多个数据集上都有着优越的表现,是一个很经典的难样本挖掘方法。
难样本挖掘的思想最初在机器学习中被广泛使用,一般被称为难负样本挖掘(Hard Negative Mining,HNM),用于解决类别的不均衡问题。以SVMs(Support Vector Machines,支持向量机)为例,HNM方法先让模型收敛于当前的工作数据集,然后固定该模型,在数据集中去除简单的样本,添加一些当前无法判断的样本,进行新的训练。这样的交替训练可以使得模型性能达到最优。
物体检测方法很难直接使用HNM算法进行挖掘。原因在于物体检测算法通常采用随机梯度下降(Stochastic Gradient Descent,SGD)等优化方法来进行优化,往往需要上万次的参数更新;而如果采用HNM交替训练的方法,每迭代几次就固定模型,训练的速度会大大下降。
OHEM可以看做是HNM在物体检测算法上的应用,在实现时选择了Fast RCNN作为基础检测算法。Fast RCNN与Faster RCNN类似,采用了两阶结构,在第二个阶段通过RCNN网络得到了边框的预测值,接下来使用了如下3点标准来确定正、负样本。
上述方法虽然简单有效,但是容易忽略一些较为重要的难负样本,并且固定了正、负样本的比例与最大数量,显然不是最优的选择。以此为出发点,OHEM将交替训练与SGD优化方法进行了结合,在每张图片的RoI中选择了较难的样本,实现了在线的难样本挖掘。
OHEM实现在线难样本挖掘的网络如图8.9所示。图中包含了两个相同的RCNN网络,上半部的a部分是只可读的网络,只进行前向运算;下半部的b网络即可读也可写,需要完成前向计算与反向传播。
OHEM方法示意图
在一个batch的训练中,基于Fast RCNN的OHEM算法可以分为以下5步:
(1)按照原始Fast RCNN算法,经过卷积提取网络与RoI Pooling得到了每一张图像的RoI。
(2)上半部的a网络对所有的RoI进行前向计算,得到每一个RoI的损失。
(3)对RoI的损失进行排序,进行一步NMS操作,以去除掉重叠严重的RoI,并在筛选后的RoI中选择出固定数量损失较大的部分,作为难样本。
(4)将筛选出的难样本输入到可读写的b网络中,进行前向计算,得到损失。
(5)利用b网络得到的反向传播更新网络,并将更新后的参数与上半部的a网络同步,完成一次迭代。
当然,为了实现方便,OHEM也可以仅采用一个RCNN网络,在选择完难样本后将剩下的简单样本的损失置0,可以起到相同的作用。但是,由于其特殊的损失计算方式,把简单的样本都舍弃了,导致模型无法提升对于简单样本的检测精度,这也是OHEM方法的一个弊端。
总体上,OHEM是一个很经典的难样本挖掘Trick,实现方式简单,可以显著提升网络训练的效率和检测性能,被广泛地应用于难样本的挖掘场景中,并且数据集越大、难度越高,OHEM对于检测的提升越明显。
当前一阶的物体检测算法,如SSD和YOLO等虽然实现了实时的速度,但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢?何凯明等人将其归咎于正、负样本的不均衡,并基于此提出了新的损失函数Focal Loss及网络结构RetinaNet,在与同期一阶网络速度相同的前提下,其检测精度比同期最优的二阶网络还要高。
从前面的叙述中可以得知,Faster RCNN在第一个阶段利用得分筛选出了2000个左右的RoI,可以过滤掉大部分的负样本,在第二个阶段通过固定正、负样本比例或者OHEM等方法,可以有效解决正、负样本的不均衡问题。
而对于SSD等一阶网络,由于其需要直接从所有的预选框中进行筛选,即使使用了固定正、负样本比例的方法,仍然效率低下,简单的负样本仍然占据主要地位,导致其精度不如两阶网络。
为了解决一阶网络中样本的不均衡问题,何凯明等人首先改善了分类过程中的交叉熵函数,提出了可以动态调整权重的Focal Loss。为了形成对比,接下来分别介绍标准交叉熵、平衡交叉熵及Focal Loss。
首先回顾一下标准的交叉熵(Cross Entropy,CE)函数,其形式如式所示。
公式中,p代表样本在该类别的预测概率,y代表样本标签。可以看出,当标签为1时,p越接近1,则损失越小;标签为0时p越接近0,则损失越小,符合优化的方向。
为了方便表示,按照式(8-8)将p标记为pt:
则交叉熵可以表示为式(8-9)的形式:
C E ( p , y ) = C E ( p t ) = − l o g ( p t ) CE(p,y)=CE(p_t)=-log(pt) CE(p,y)=CE(pt)=−log(pt) (8-9)
标准的交叉熵中所有样本的权重都是相同的,因此如果正、负样本不均衡,大量简单的负样本会占据主导地位,少量的难样本与正样本会起不到作用,导致精度变差。
为了改善样本的不平衡问题,平衡交叉熵在标准的基础上增加了一个系数 α t α_t αt来平衡正、负样本的权重, α t α_t αt由超参 α α α按照式(8-10)计算得来, α α α取值在[0,1]区间内。
有了 α t α_t αt,平衡交叉熵损失公式如式所示。
C E ( p t ) = − α t l o g ( p t ) CE(pt)=-α_tlog(p_t) CE(pt)=−αtlog(pt)
尽管平衡交叉熵损失改善了正、负样本间的不平衡,但由于其缺乏对难易样本的区分,因此没有办法控制难易样本之间的不均衡。
Focal Loss为了同时调节正、负样本与难易样本,提出了如式所示的损失函数。
F L ( p t ) = − α t ( 1 − p t ) γ l o g ( p t ) FL(p_t)=-α_t(1-p_t)^γlog(p_t) FL(pt)=−αt(1−pt)γlog(pt)
对于该损失函数,有如下3个属性:
为了验证Focal Loss的效果,何凯明等人还提出了一个一阶物体检测结构RetinaNet,其结构如图所示
对于RetinaNet的网络结构,有以下5个细节:
总体上,Focal Loss算法将样本的不均衡视为一阶与两阶网络精度差距的原因,提出了简单高效的Focal Loss,使得模型专注于难样本上,并提出了一阶网络RetinaNet,实现了SOTA的精度。