【two stage-经典检测网络】Faster R-CNN

网络整体结构

继R-CNN和fast R-CNN后,Ross Girshick2016年提出了faster R-CNN。
从功能模块来看,主要包括4部分内容:特征提取网络,RPN网络,ROI Pooling和classification。
整体网络结构图如下:
卷积层可以是VGG-16或者ZF网络。主要用来生成feature maps。
在这里插入图片描述
VGG作为主干网络大致如下:
比如输入图片是3x600x800经过VGG网络,包含4个池化层,下采样为16,feature map的尺寸就是512x37x50。
在这里插入图片描述

网络处理流程

网络整体处理流程:

  1. Backbone:图片输入进网络,将图片短边固定为600;然后经过VGG(或者ZF,ResNet都行)网络中的BackBone部分,主要是卷积层,Relu激活函数和池化层等操作得到Feature map。
  2. RPN:将Feature map送进RPN网络,作用是得到一些比较好的建议框,即propasals。
  3. ROI Pooling:接受卷积网络的feature map和RPN的ROI,送入最后一个模块。下一个模块R-CNN用了全连接网络,所以特征的维度是固定的,ROI Pooling将ROI的特征池化到固定维度才能用。
  4. RCNN:接受ROI Pooling得到的特征,预测每一个ROI的分类,预测偏移量。

RPN

RPN模块是Faster R-CNN的核心,包含5个子模块:

  1. Anchor生成
  2. RPN卷积网络
  3. 计算RPN的loss
  4. 生成proposal
  5. 筛选Proposal

1.Anchor的生成

引用大神画的图,这里的图画的很好。这里我偷懒了。(参考请见最后,如果侵犯了请联系我删除
对feature map上的每个点,都生成9个大小不同的Anchor,这样就会生成接近2万个anchor。
在这里插入图片描述

在这里插入图片描述

2.RPN卷积网络

在这里插入图片描述
主要分为两条线:上面主要是为了计算anchor的cls,通过softmax和reshape操作,得到18x37x50,下面主要是为了计算anchor的loc,计算回归偏移量,让最后的proposal更精确,得到36x37x50。
这里的18是指2x9,2是指前景或者背景,9是9个anchor。
这里的36是指4x9,4是指BBox的参数,9是9个anchor。
原文的2k和4k就是这样理解。
在这里插入图片描述

3.计算RPN的loss

根据anchor和gt之间的IOU来决定哪些是正样本,哪些是负样本。
规则:

  1. anchor和gt有最大的IOU:正
  2. IOU>0.7:正
  3. IOU<0.3:负

损失函数:
在这里插入图片描述
只考虑正样本。λ在后面进行测试,数据在表8,最终选择10。

在这里插入图片描述
不带的是预测值,带*的是真值,带a的是anchor。
这里可以看到偏移位置tx和ty利用宽和高进行了归一化处理,宽高的偏移做了对数处理,好处:限制偏移量的范围,更好预测。
同时需要预测真实物体相对于Anchor的偏移量。

4.生成proposal

根据第二步的anchor的score和偏移量,确定一些比较好的proposal。

5.筛选Proposal

proposal数量还是比较多,默认是2000个,进一步进行筛选proposal得到ROI,数量为256个,正负样本保持1:1,正样本不够128的话,也要稳定在64以上。

训练RPN

在一个图像中随机采样256个anchors,计算损失,控制正样本:负样本=1:1。从标准偏差为0.01的零均值高斯分布中绘制权重来随机初始化所有新层。

RPN和Fast RCNN的共享卷积

至此已经讨论了如何训练一个区域建议生成网络(RPN),但是未考虑基于这些提案的基于区域的目标检测卷积神经网络。对检测网络采用的是Fast R-CNN。考虑三种训练RPN和Fast R-CNN共享特征的方法。

  1. 交替训练:首先训练RPN,利用这些提案训练Fast R-CNN。这种方法在本文的所有试验中使用。
  2. 近似联合训练:RPN和Fast R-CNN网络在训练过程中合并在一个网络。这种方法忽视了倒数关于建议框的坐标信息,所以是近似的。在本文中发现这种方法能产生近似的结果,然而相比较于交替训练可以减少25%-50%的训练时间。
  3. 非近似联合训练:需要一个对框坐标可区分的ROI pooling层。

四步交替训练

  1. 训练RPN网络产生区域建议。
  2. 利用step-1 RPN生成的建议,用Fast R-CNN训练一个独立的检测网络。此时,两个网络不共享卷积层。
  3. 使用检测网络初始化RPN训练,固定共享卷积层,只对RPN特有的层进行微调。
  4. 最后,让共享的卷积层固定大小,微调Fast R-CNN的独特层。因此,两个网络共享相同的卷积层,形成一个统一的网络。

忽略超过图像边界的框
对于一个典型的1000×600图像,总锚点约为20000(≈60×40×9)。如果忽略跨界的锚点,每幅图像大约有6000个锚点用于训练。
NMS进一步减少anchors
NMS的阈值固定0.7,训练Fast RCNN的时候使用2000RPN 建议,在测试的时候使用不同数量的框。在NMS后,采用top-N的建议区域来检测。

ROI Pooling

这部分接受feature map和RPN的proposal(大小各不相同),送给RCNN网络处理。
对于不同大小的proposal,对于传统的CNN(如AlexNet和VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。有2种解决办法:

  1. 从图像中crop一部分传入网络
  2. 将图像warp成需要的大小后传入网络

在这里插入图片描述
前面的VGGNet已经提供了整张图像的feature map,这里将每一个ROI区域对应的特征提取出来,然后接入全连接网络,预测ROI的类别和偏移。
对ROI进行池化的思想在SPPNet就出现过,Faster R-CNN提出的ROI Pooling主要利用最近邻差值算法。后面的Mask R-CNN对这里进一步提出ROI Align,用的是双线性差值,精度提高。
对于这里的ROI Pooling,是这样的步骤:

  1. 由于proposal是对应MxN尺度的,所以首先使用spatial_scale参数将其映射回(M/16)x(N/16)大小的feature map尺度;例如:332x332,因此除以16是20.75,直接取整就变成了20x20,这是ROI的特征。
    2.再将20x20区域处理为7x7的特征;还是取整操作;
    3.对每一个小方格都进行max pooling处理。
    在这里插入图片描述

cls和loc

在这里插入图片描述
分类和回归,用的是softmax和smoothL1。

注: 本文应该有四个loss,RPN那里有两个,最后分类有两个,应该是一样的。

数据集测试

主要在两个数据集上进行测试:
1.PASCAL VOC2007和2012
2.COCO

参考

https://zhuanlan.zhihu.com/p/31426458(大佬分析的很好,强烈建议看看,本文图很多都是来自大佬,只是加上自己的理解)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值