【论文】目标检测中正负样本的选取总结

一、简介

目标检测有大量的算法,这篇文章对其中正负样本的选取方法进行了总结。对于正样本,是回归与分类都进行,而负样本由于没有回归的对象,不进行回归,只进行分类(分类为背景)。

二、正文

1.Fast R-CNN

构造如下:

步骤是

1.selective search -> ROIs -> 筛选 -> ROIs 

2.ROIs + feature map -> ROI Pooling -> 分类 + 回归 -> NMS

正例:与GT的IOU>0.5的作为正样本

反例:与GT的IOU在[0.1, 0.5)之间的作为负样本。0.1是作为一种 hard example mining。

样本平衡:正:负 = 1:3

 

2..Faster R-CNN

Faster R-CNN的构造分为两个部分:RPN(Region Proposol Net)、fast-RCNN,如下图:

步骤是

1.特征提取 -> 输入到下面的2和3中

2. Anchor产生 -> 剔除出超出边界的Anchor -> 使用RPN对Anchor进行回归,物体判别(判断是否是物体)(这里使用的是卷积层) -> 筛选RPN回归后的Anchor -> NMS -> 再次筛选数量 -> 剔除超出边界的部分 -> 获得ROIs(reigon of interest)

3. 利用2中的ROIs和1中的特征做ROI Pooling -> 类别分类 + 进一步回归 -> NMS -> 得到b-box以及类别。

其中包含了2中的RPN的训练以及3中的训练。更详细的结构见:

https://github.com/chenyuntc/simple-faster-rcnn-pytorch

https://blog.csdn.net/qq_29462849/article/details/80510687

训练方式如下:

1. 单独训练前面的提取特征网络(共享部分)+ RPN部分,微调。

2.生成ROIs,单独训练Fast R-CNN(包括前面的共享部分)。

3. 使用2中获得的共享部分覆盖1中的共享部分,固定。训练RPN部分

4. 固定共享部分,使用3中提出的ROIs,训练Fast R-CNN

交替迭代上部分(应该就是3和4)。

还有另一种近似联合训练,在文中有说。这个文章详细叙述了训练过程:

https://blog.csdn.net/sunyiyou9/article/details/52207486

https://blog.csdn.net/qq_41576083/article/details/82966489

1.RPN的训练

首先去除超出边界的Anchro,之后选取正反例Anchor

正例:按照两个准则挑选Anchor:1.与GT有最大的IOU。                       2.与GT的IOU>0.7。

两个有一个满足就是正例。

反例:与所有GT的IOU < 0.3

样本平衡:对于一个mini-batch,随机选取其中的正反例,比例为1:1,如果负样本太少,就扩展mini-batch,达到平衡。

2.fast r-cnn

这个部分应该与上面RPN的训练类似,要看代码才知道。

3.SSD

SSD也是使用Anchor(default Box)(先验框)。正反例的挑选与faster r-cnn的类似。

代码详解:https://blog.csdn.net/c20081052/article/details/80391627

正例:按照两个准则挑选default Box:1.与GT有最大的IOU。                       2.与GT的IOU>0.5。

两个有一个满足就是正例。

反例:其余的均为反例。

样本平衡:采用hard negative mining,对负样本的default box的confidence进行排序,取大confidence的作为最终的负样本,最终的比例为正 : 负 = 1 : 3

据说还有另外一种方法,是根据回归后的b-box来进行正反例的选取。

4. SPP-NET(R-CNN之后的那一篇)

这里头有提到检测任务。使用的还是R-CNN的方法,使用SS生成候选窗,之后投影到feature map,使用spatial pyramid(1*1,2*2,3*3,6*6)来提取区域特征,结合起来,经过fc,判断。

 正反样例的选取与fast r-cnn一样。

正例:与GT的IOU在[0.5, 1]

反例:与GT的IOU在[0.1, 0.5]

样本平衡:1:3

5.YOLO(v1)

YOLOv1比较粗糙,使用的是带有限制性的grid方法来构造b-box,每个grid有两个b-box,回归的中心限制在了grid中,但是对于大小没有限制,没有default Box一说,因此是直接根据输出的b-box来判断正反例。另外提一句,最后的输出是两个全连接层,没有共享。

 

YOLO由于有grid和产生的b-box两个概念,对于正负样本的判断也和之前使用Anchor的有所不同,b-box也少了很多,也就7*7*2共98个。

回归:

正例:对应的cell中有物体中心,与GT有最大IOU的b-box。                  反例:其余b-box。

判断是否有物体(confidence,事实上如果有物体还要预测IOU)

正反例同上

具体标签分类:每一个cell(grid中的一个)上产生一个类别判断。

正例:物体的中心在cell中                    反例:cell里头没有物体的中心

样本平衡:一个用来平衡confidence的参数,体现在损失函数上面,改变权值,反例的损失降为0.5。对于grid则不存在样本平衡,实际上也并不需要,因为如果没有出现物体的话就不需要估计类别概率了。

6.YOLO(v2)

相当于是有Anchor版本的YOLO,grid的概念依然存在。它对于Anchor的先验大小进行了研究,与SSD、Faster R-CNN不同,这里将Anchor回归后的中心限制在了cell中,使得回归过程有一定的约束。有一点与YOLOv1不同的是对于类别标签的判断不再是局限于一个cell,而是每个b-box都有一个类别判断。详细的可以见下面的代码解析:https://www.jianshu.com/p/032b1eecb335

正反例的判断相当于SSD与YOLOv1的结合,比较复杂:

对每个GT匹配一个最好的Anchor,作为预选正例,其余的为反例

      classification_loss_sum和coordinates_loss_sum依据上面判断正反例反例没有损失,

      在每个cell中,取与GT有最大IOU的b-box,其余作为反例

             对于以上的b-box,如果IOU<0.6,作为反例:

                    confidence_loss_sum依据上面判断正反例,反例有损失。

 

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值