目标检测训练时候的不平衡问题

目标检测训练时候的不平衡问题

先放大佬链接(https://mp.weixin.qq.com/s/K1HTRjSLAM8mME4g1eNHtA)
当前主流的物体检测算法,如Faster RCNN和SSD等,都是将目标检测当做分类问题来考虑,即先使用先验框或者RPN等生成感兴趣的区域,再对该区域进行分类与回归位置。这种基于分类思想的目标检测算法存在样本不平衡的问题,因而会降低模型的训练效率与检测精度。

当前基于深度学习的目标检测主要包括:基于two-stage的目标检测和基于one-stage的目标检测。two-stage的目标检测框架一般检测精度相对较高,但检测速度慢;而one-stage的目标检测速度相对较快,但是检测精度相对较低。one-stage的精度不如two-stage的精度,一个主要的原因是训练过程中样本极度不均衡造成的。

定义

样本不均衡问题:指在训练的时候各个类别的样本数量不均衡,由于检测算法各不相同,以及数据集之间的差异,可能会存在正负样本、难易样本、类别间样本这3种不均衡问题。一般在目标检测任务框架中,保持正负样本的比例为1:3(经验值)。

样本不平衡实际上是一种非常常见的现象。比如:在欺诈交易检测,欺诈交易的订单应该是占总交易数量极少部分;工厂中产品质量检测问题,合格产品的数量应该是远大于不合格产品的;信用卡的征信问题中往往就是正样本居多。
目标检测任务中,样本包括哪些类别

1、正样本:标签区域内的图像区域,即目标图像块
2、负样本:标签区域以外的图像区域,即图像背景区域
3、易分正样本:容易正确分类的正样本,在实际训练过程中,该类占总体样本的比重非常高,单个样本的损失函数较小,但是累计的损失函数会主导损失函数
4、易分负样本:容易正确分类的负样本,在实际训练过程中,该类占的比重非常高,单个样本的损失函数较小,但是累计的损失函数会主导损失函数
5、难分正样本:错分成负样本的正样本,这部分样本在训练过程中单个样本的损失函数较高,但是该类占总体样本的比例较小
6、难分负样本:错分成正样本的负样本,这部分样本在训练过程中单个样本的损失函数较高,但是该类占总体样本的比例较小
在这里插入图片描述
1.正负样本不均衡

以Faster RCNN为例,在RPN部分会生成20000个左右的Anchor,由于一张图中通常有10个左右的物体,导致可能只有100个左右的Anchor会是正样本,正负样本比例约为1∶200,存在严重的不均衡。

对于目标检测算法,主要需要关注的是对应着真实物体的正样本,在训练时会根据其loss来调整网络参数。相比之下,负样本对应着图像的背景,如果有大量的负样本参与训练,则会淹没正样本的损失,从而降低网络收敛的效率与检测精度。

2.难易样本不均衡

难样本指的是分类不太明确的边框,处在前景与背景的过渡区域上,在网络训练中难样本损失会较大,也是我们希望模型去学习优化的样本,利用这部分训练可以提升检测的准确率。

然而,大量的样本并非处在前景与背景的过渡区,而是与真实物体没有重叠区域的负样本,或者与真实物体重叠程度很高的正样本,这部分被称为简单样本,单个损失会较小,对参数收敛的作用有限。

虽然简单样本单个损失小,但由于数量众多,因此如果全都计算损失的话,其损失也会比难样本大很多,这种难易样本的不均衡也会影响模型的收敛与精度。

值得注意的是,由于负样本中大量的是简单样本,导致难易样本与正负样本这两个不均衡问题有一定的重叠,解决方法往往能同时对这两个问题起作用。

3.类别间样本不均衡

在有些目标检测的数据集中,还会存在类别间的不均衡问题。举个例子,数据集中有100万个车辆、1000个行人的实例标签,样本比例为1000∶1,属于典型的类别不均衡。

这种情况下,如果不做任何处理,使用该数据集进行训练,由于行人这一类别可参考标签太少,会使得模型主要关注车这一类别的检测,网络中的参数主要根据车辆的损失进行优化,导致行人的检测精度大大下降。

目前,解决样本不均衡问题的一些思路:

机器学习中,解决样本不均衡问题主要有2种思路:数据角度和算法角度。从数据角度出发,有扩大数据集、数据类别均衡采样等方法。在算法层面,目标检测方法使用的方法主要有:

Faster RCNN、SSD等算法在正负样本的筛选时,根据样本与真实物体的IoU大小,设置了3∶1的正负样本比例,这一点缓解了正负样本的不均衡,同时也对难易样本不均衡起到了作用。

Faster RCNN在RPN模块中,通过前景得分排序筛选出了2000个左右的候选框,这也会将大量的负样本与简单样本过滤掉,缓解了前两个不均衡问题。

权重惩罚:对于难易样本与类别间的不均衡,可以增大难样本与少类别的损失权重,从而增大模型对这些样本的惩罚,缓解不均衡问题。

数据增强:从数据侧入手,可以在当前数据集上使用随机生成和添加扰动的方法,也可以利用网络爬虫数据等增加数据集的丰富性,从而缓解难易样本和类别间样本等不均衡问题,可以参考SSD的数据增强方法。

近年来,不少的研究者针对样本不均衡问题进行了深入研究,比较典型的有OHEM(在线困难样本挖掘)、S-OHEM、Focal Loss、GHM(梯度均衡化)。下面将详细介绍:

1 OHEM:在线难例挖掘

OHEM算法(online hard example miniing,发表于2016年的CVPR)主要是针对训练过程中的困难样本自动选择,其核心思想是根据输入样本的损失进行筛选,筛选出困难样本(即对分类和检测影响较大的样本),然后将筛选得到的这些样本应用在随机梯度下降中训练。

传统的Fast RCNN系列算法在正负样本选择的时候采用当前RoI与真实物体的IoU阈值比较的方法,这样容易忽略一些较为重要的难负样本,并且固定了正、负样本的比例与最大数量,显然不是最优的选择。以此为出发点,OHEM将交替训练与SGD优化方法进行了结合,在每张图片的RoI中选择了较难的样本,实现了在线的难样本挖掘。
在这里插入图片描述
OHEM实现在线难样本挖掘的网络如上图所示。图中包含了两个相同的RCNN网络,上半部的a部分是只可读的网络,只进行前向运算;下半部的b网络即可读也可写,需要完成前向计算与反向传播。

在一个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的简单实现可以是:在原有的Fast-RCNN里的loss layer里面对所有的props计算其loss,根据loss对其进行排序,选出K个hard examples,反向传播时,只对这K个props的梯度/残差回传,而其他的props的梯度/残差设为0。

但是,由于其特殊的损失计算方式,把简单的样本都舍弃了,导致模型无法提升对于简单样本的检测精度,这也是OHEM方法的一个弊端。

优点:

  1. 对于数据的类别不平衡问题不需要采用设置正负样本比例的方式来解决,这种在线选择方式针对性更强;

2) 随着数据集的增大,算法的提升更加明显;

缺点:

只保留loss较高的样本,完全忽略简单的样本,这本质上是改变了训练时的输入分布(仅包含困难样本),这会导致模型在学习的时候失去对简单样本的判别能力。

  1. S-OHEM:基于loss分布采样的在线困难样本挖掘

在OHEM中定义的多任务损失函数(包括分类损失 和定位损失 ),在整个训练过程中各类损失具有相同的权重,这种方法忽略了训练过程中不同损失类型的影响,例如在训练期的后期,定位损失更为重要,因此OHEM缺乏对定位精度的足够关注。

S-OHEM算法采用了分层抽样的方法,根据loss的分布抽样训练样本。它的做法是:

首先将预设loss的四个分段:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值