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

一、简介

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

二、正文

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
    评论
Linux创始人LinusTorvalds有一句名言:Talk is cheap, Show me the code.(冗谈不够,放码过来!)。 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。  YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。  本课程将解析YOLOv3的实现原理和源码,具体内容包括: YOLO目标检测原理  神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算 代码阅读工具及方法 深度学习计算的利器:BLAS和GEMM GPU的CUDA编程方法及在Darknet的应用 YOLOv3的程序流程及各层的源码解析本课程将提供注释后的Darknet的源码程序文件。  除本课程《YOLOv3目标检测:原理与源码解析》外,本人推出了有关YOLOv3目标检测的系列课程,包括:   《YOLOv3目标检测实战:训练自己的数据集》  《YOLOv3目标检测实战:交通标志识别》  《YOLOv3目标检测:原理与源码解析》  《YOLOv3目标检测:网络模型改进方法》 建议先学习课程《YOLOv3目标检测实战:训练自己的数据集》或课程《YOLOv3目标检测实战:交通标志识别》,对YOLOv3的使用方法了解以后再学习本课程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值