一、背景
目标检测可分为两阶段和一阶段算法两种,两种类别各有优缺点。
两阶段算法包含候选区域生成阶段和分类阶段,区域生成阶段负责生成候选区域,并过滤掉大部分的背景区域,虽然对训练效率大打折扣,但前景区域提取的相对准确,且前景和背景比例基本协调,精度因此一般很高。
一阶段算法省去了候选区域生成阶段,因此效率很高,但是基于滑动窗口的方式生成了大量的候选区域,导致背景区域数量显著多于前景区域,背景区域相对前景区域更容易区分,在大量容易区分的背景区域上进行模型训练无法捕捉到有效的分类信号,大量容易区分的背景区域会轻易主导训练过程,包含目标对象的区域(前景区域)反而不容易准确分类和定位。
二、传统解决方法
为了解决目标检测中的类别不平衡问题, 已经提出了很多有效的方法:
1、启发式采样,前景和背景1 : 3的比例进行采样;
2、OHEM,在线困难样本挖掘;
3、类别加权,比如类别A和B的样本比例为1 : 10,则A类别样本的权重都是0.9,B类别样本的权重都是0.1;
传统方法一定程度上可以缓解类别不平衡问题,但当存在大量易分类样本时,这些样本还是会主导训练过程,导致不易分类样本很少有机会得到模型的关注。对于类别加权,仅在类别尺度上进行加权,同一类别下的样本,其分类无论难易,仍然是一视同仁。
三、Focal Loss
Focal Loss,见名知意,对不易分类样本和易分类样本进行了区别对待,把损失的焦点放在了不易分类样本上,降低对易分类样本的权重,仅对交叉熵做了些微改动,形式化如下:
是超参数,设置的越大,难易分类样本的区别对待程度会越明显,设为 0 则退化成交叉熵损失。以
为例,如样本的分类置信度较高,比如0.9,则权重趋向于0.01,反之,如果分类置信度很低,比如 0.1,则权重变为 0.81。
四、类别加权Focal Loss
结合类别加权法,对每个样本,根据其所属类别,进行类别再加权,这样一来,类别层面和样本层面都在考量之内,效果一般会更好。形式化如下:
其中, 是样本的类别权重,同一类别的样本的类别权重相同。
五、从反向传播来理解Focal Loss
可以尝试着从反向传播的角度来理解Focal Loss深层的运作原理,Focal Loss增加了不易分类样本的权重,这些样本对模型在参数空间的探索上产生了一定影响,通过下图来理解该问题。
![](https://i-blog.csdnimg.cn/blog_migrate/d14b2340c877901b07f0c0216994edbb.jpeg)
图1是神经网络的某个局部, 层的两个神经元
、
分别和
层的神经元
相连,蓝色箭头对应的权重为
,红色箭头对应的权重为
。不同神经元对不同的输入信号有不同的激活输出,例如在猫狗分类任务中,有些神经元对猫的胡须特征有着较大的激活,而有些神经元对狗的鼻子特征有着较大的激活。设
和
表示第
层的两个激活输出,设mini-batch大小为
,则根据反向传播,关于
和
的梯度有:
其中, 表示第
个样本在
上产生的误差。关于这部分的公式,可参考: 对误差反向传播的理解和学习。
如果样本权重发生变化,根据反向传播,不同的 大小会有较大的区别。放在目标检测上来说,如果
对背景特征有着较强的激活,而对前景特征有着较弱的激活,
刚好相反,若把容易区分的背景样本降低权重,提高不易分样本的权重,那么
会较
小的多,这样一来,模型便向着有利于区分难以分类的样本的参数子空间进行搜索,而不会一个劲的向着没有意义的方向上进行参数搜索。