【Faster RCNN】

网络总体概述

faster rcnn是经典的两阶段目标检测模型,它分为两部分训练:
1.第一部分是训练RPN,得到候选框;
2.第二部分是训练faster rcnn,对候选框中的物体分类、修正RPN生成的候选框。
Faster Rcnn总体框架

conv layers

conv layers可以采用经典的卷积神经网络来提取图片特征,如VGG、ResNet等,Faster rcnn使用网络模型在ImageNet数据集上训练的权重,初始化卷积层参数。

RPN(Region Proposal Network)

Faster RCNN中的anchors是人为设定,总共有9种不同的anchors。RPN主要有两个任务:

  1. 分类:判断预设的anchor(候选框)里是否含有物体,并抛弃不含有物体的候选框;(注意:特征图上的每一个像素点都有9种候选框,每个像素点只能预测一个类别)
  2. 对预设的anchor进行修正。

rpn结构

由此可见,RPN分为两个部分来完成任务,先采用3*3卷积,将特征窗口的图调整为256维:

  1. 图上面的路用于分类,使用1*1*256的卷积核,从而减少通道数,第一条路得到结果是M*N*18,为什么是18?因为要对每个anchor进行二分类(判断是前景或者背景),所以2*9;这里使用softmax进行分类,我觉得也可以用sigmoid函数;
  2. 图下面的路用于anchor修正,使用1*1*256的卷积核,从而减少通道数,第一条路得到结果是M*N*36,为什么是36?因为一个anchor使用(x,y,w,h)表示,其中x、y表示anchor的中心点坐标,一个像素点有9个anchors,所以修正一个像素点的anchors需要4*9个参数,注意:这里卷积得到的坐标,是偏移量,相对于直接得到anchor坐标(数量级相对比较大),这样可以加快运算速度,好训练。

偏移量计算方法:
[px,py,pw,ph]表示原始anchor的坐标
[dx,dy,dw,dh]表示RPN网络预测的坐标偏移
[gx,gy,gw,gh]表示修正后的anchor坐标
通过偏移量计算anchor位置
可以参考下图理解:
在这里插入图片描述

Proposal模块

  1. 根据第二条路得到的位置偏移量,对候选框进行修正;

  2. 边缘的anchor可能超出原图的范围,将严重超出边缘的anchor过滤掉;

  3. 根据第一条路得到的分数,抛弃不含物体的候选框,再通过分数排序,选前topN个候选框;但还是有很多重叠的候选框,使用非极大抑制(NMS)这些候选框中挑选出最适合的框,去掉大量重复的框,再按分数排序,取前topN;

  4. 将候选框映射到原图上。

NMS算法

在使用NMS时,我们需要选择一个阈值来判断两个候选框是否重叠。通常而言,如果两个候选框的IoU(Intersection over Union,重叠面积与两个框并集面积的比例)大于阈值,我们就认为它们是重复的。在进行NMS时,我们会对所有候选框按照它们对应的目标得分进行排序。然后,从最高分的框开始,我们将其添加到最终的框列表中,并从候选框列表中删除与该框IoU大于阈值的所有框。最终,我们得到的框列表中只包含IoU小于阈值的不同目标的候选框。

ROI pooling(Region Of Interest pooling)

ROI pooling称为感兴趣池化,主要的任务就是:
1.将RPN选出来的候选框在特征图上提取出来,因为RPN得到的候选框是相当于原图而言
2.统一候选框的大小,方便送入后续的全连接层进行分类。我们知道RPN选出来的候选框有大有小,即不同尺度的候选框,而全连接层要求输入维度不变,那就必须使得候选框大小一致。

ROI pooling首先确定候选框统一为width*height(w*h),方法如下:它将候选框划分为w*h大小的网格,再对每个网格求平均值或者最大值,这样就得到了w*h大小的候选框。

例如,将候选框分为2*2,求每一网格的最大值,得到2*2的候选框。
在这里插入图片描述
在这里插入图片描述

分类

使用全连接层对候选框里的物体进行具体分类,同时再次修正候选框。假设有400个候选框,20个类别,则得到的结果维度是[400,20]。

训练过程

首先声明,下面所说的RPN=conv layers+RPN特有层(3*3卷积层、softmax层、1*1卷积层);Faster RCNN=conv layers+Faster RCNN特有层(全连接层、ROI pooling)
训练步骤:

  1. 使用ImageNet预训练模型初始化conv layers,训练RPN,得到候选框(对应在原图上的候选框);
  2. 使用ImageNet预训练模型初始化conv layers,使用第一步的结果,训练Faster RCNN
  3. 使用第二步的conv layers参数再次训练RPN,训练过程中保持conv layers中的参数不变;
  4. 使用第二步的conv layers参数,以及使用第三步的结果,再次训练Faster RCNN;
    在这里插入图片描述

参考文献

以上是我自己对Faster rcnn的一个学习总结,梳理了我对它的理解。大家如果看不太明白,可以直接阅读下面优秀的博文,讲的比我清楚。若有错误,欢迎大家指正

  1. 一文读懂Faster RCNNhttps://zhuanlan.zhihu.com/p/31426458
  2. ROI poolinghttps://zhuanlan.zhihu.com/p/65423423
  3. 一文读懂Faster RCNN(大白话,超详细解析)https://blog.csdn.net/weixin_42310154/article/details/119889682
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值