Faster RCNN论文详解
Faster RCNN
建议先阅读之前的RCNN和Fast RCNN后再来阅读此文
Faster RCNN PyTorch
实现:https://github.com/codecat0/CV/tree/main/Object_Detection/Faster_RCNN
Faster RCNN提出了Region Proposal Network
解决了Fast RCNN中selective search
算法提取候选框速度太慢的问题。
1. Faster RCNN初识
conv layers
:通过CNNCNNCNN提取image的feature maps
。此feature maps
被共享用于后续的层Region Proposal Networl
:用于生成region proposals
。该层通过softmax
判断anchors
属于foreground
还是background
,再利用bounding box regression
修正anchors
以获得精确的proposals
RoI pooling
:该层收集输入的feature maps
和proposals
,综合这些信息后提取proposal feature maps
,送入后续层进行检测classifier
:利用proposal feature maps
计算proposal
的类别,同时再次通过bounding box regression
获取检测框最终的精确位置
通过上述Faster RCNN的流程介绍,我们可以知道Faster RCNN与Fast RCNN之间的区别在于提取候选区域的不同,一个是通过训练一个Region Proposal Network
来生成,而另一个则是通过Selective Search
算法来生成。
接下来,我会重点介绍Region Proposal Network
以及其anchor
。
2. Faster RCNN详细网络结构
流程: 将一副任意大小P×QP \times QP×Q的图像缩放至固定大小M×NM \times NM×N,然后将M×NM \times NM×N大小的图像输入网络;其中conv layers
包含了13个conv层+13个relu层+4个pooling层;RPN网络首先经过3x3卷积,再分别生成foreground anchors
与bounding box regression
偏移量,然后计算出proposals
;而Roi Pooling层则利用proposals以及feature maps,提取proposal feature送入后续全连接和softmax
网络作classification
。
2.1 conv layers
conv layers
部分共有13个conv
层,13个relu
层,4个pooling
层(VGG网络中最后一个max pooling前的层)
- 所有的
conv
层都是:kernel_size=3 , padding=1 ,stride=1
,因此conv
层不改变原图大小 - 所有的
pooling
层都是:kernel_size=2 ,padding=0 , stride=2
,pooling
层将原图缩小为原来的一半 - 经过
conv layer
后,一个MxN
大小的矩阵将变为(M/16)x(N/16)
2.2 Region Proposal Network
RPN网络分为2条线,上面一条通过softmax
分类anchors
获得foreground
和background
(检测目标是foreground),下面一条用于计算anchors
的bounding box regression
偏移量,以获得精确的proposal
。最后的Proposal层则负责综合foreground anchors
和bounding box regression
偏移量获取proposals
2.2.1 anchors
anchor为由一个中心点,周围生成了9个矩形,其矩形的有3种不同的尺寸,每个尺寸有3种不同的比例,分别为1:1, 1:2, 2:1
,这样共9个不同的矩形,如下图左上角所示。
RPN
遍历conv layers
生成的feature maps
,为feature map
上的每一个点都配备这9种anchor
作为初始的检测框,效果如下图右所示。这样做获得检测框很不准确,之后将会在RPN
层,以及最后进行2次的bounding box regression
修正检测框位置
如下图,对于每一个点的kkk个anchor
来说,从feature maps
提取出得特征具有256维,对于每一个anchor
,需要分foreground
与background
,因此共有2k2k2k个score
,对于每一个anchor共有(x1,y1,x2,y2)(x_1,y_1,x_2,y_2)(x1,y1,x2,y2)四个坐标值。因此共有4k4k4k个coordinates
。
2.2.2 softmax判定foreground与background
确定候选区域标签的规则
- 与某个ground truth(GT)的IoU最大的区域的分配正标签
- 与任意GT的IoU大于0.7的区域分配正标签
- 与所有GT的IoU都小于0.3的区域分配负标签
2.2.3 bounding box regression原理
见RCNN论文详解中的第6部分
2.2.4 RPN流程
- 生成
anchors
- 按照输入的
foreground softmax scores
由大到小排序anchors
,提取前pre_nms_topN
个anchors
- 限定超出图像边界的
foreground anchors
为图像边界 - 剔除非常小(面积和scores)的
foreground anchors
- 进行
NMS
,按照nms
后的foreground softmax scores
由大到小排序foreground anchors
,提取前post_nms_topN
个anchors
2.2.5 RPN 训练
整个网络的Loss
如下:
L(pi,ti)=1Ncls∑iLcls(pi,pi∗)+λ1Nreg∑ipi∗Lreg(ti,ti∗)L(p_i,t_i)=\frac {1} {N_{cls}}\sum_{i}L_{cls}(p_i,p_i^*)+\lambda \frac {1}{N_{reg}}\sum_{i}p_i^*L_{reg}(t_i,t_i^*)L(pi,ti)=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,ti∗)
其中:
iii表示
anchors index
pip_ipi表示
foreground softmax probability
pi∗p_i^*pi∗代表对应的
GT predict
概率(如果anchor
与GT
间IOU>0.7,为1;反之IOU<0.3,为0;至于0.3<IOU<0.7不参与训练)ttt代表
predict bounding box
t∗t^*t∗代表对应
foreground anchor
对应的GT box
cls loss
,即softmax loss
reg loss
,即soomth L1 loss
。注意在该loss
中乘了pi∗p_i^*pi∗相当于只关心foreground anchors
的回归
3. RoI Pooling layer
见FAST RCNN论文详解中的第3部分
Faster RCNN论文详解相关推荐
- Faster R-CNN论文详解
原文链接:http://lib.csdn.net/article/deeplearning/46182 paper链接:Faster R-CNN: Towards Real-Time Object D ...
- Fast R-CNN论文详解
Fast R-CNN论文详解 作者:ture_dream &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max po ...
- Faster RCNN代码详解(五):关于检测网络(Fast RCNN)的proposal
在Faster RCNN代码详解(二):网络结构构建中介绍了Faster RCNN算法的网络结构,其中有一个用于生成ROI proposal target的自定义层,该自定义层的输出作为检测网络(Fa ...
- 【目标检测】Faster RCNN算法详解
转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...
- Faster RCNN算法详解
Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal ne ...
- Fast R-CNN论文详解 - CSDN博客
废话不多说,上车吧,少年 paper链接:Fast R-CNN &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max ...
- faster rcnn fpn_Faster-RCNN详解和torchvision源码解读(三):特征提取
我们使用ResNet-50-FPN提取特征 model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True) ...
- Faster RCNN代码详解(六):自定义评价函数
在前面几篇博文中基本上将Faster RCNN的算法细节都介绍完了,这一篇博客主要来介绍评价函数.自定义评价函数有助于我们灵活观察模型训练过程中的变量变化情况,比如RPN网络中的分类和回归损失在每次迭 ...
- R-CNN论文详解(论文翻译)
R-CNN系列论文(R-CNN,fast-RCNN,faster-RCNN)是使用深度学习进行物体检测的鼻祖论文,其中fast-RCNN 以及faster-RCNN都是沿袭R-CNN的思路.今天又重新 ...
- Tensorflow2.0:Faster RCNN 代码详解(一)
第一部分给出Fater RCNN文件的代码解析,主要是模型主体的执行过程,在此文件 引入下述几个文件的函数引用,对于backbones,necks和test_mixins文件来说,主要是用来构建模型结 ...
最新文章
- 卧加加工斜孔怎么计算机械坐标,卧加B轴旋转后坐标怎么计算
- ASP.NET介绍及C#基本语法(一)
- 各个硬件指令集使用简单介绍
- docker删除本地所有镜像
- 【ArcGIS风暴】什么是点云?什么是Las数据集?一篇文章告诉你点云数据的奥秘
- vue页面取ajax返回值,Vue前端交互模式、Promise用法(回调地狱)
- find_first_of()和 find_last_of() 【获取路径、文件名】
- python for循环连续输入五个成绩判断等级_Python基础(1)——输入输出/循环/条件判断/基本数据类型...
- 存储基础 — 文件描述符 fd 究竟是什么?
- 蓝桥杯:2018年第九届蓝桥杯省赛B组第七题—螺旋折线
- ESP32c3开发环境搭建 IDF V4.4离线版安装使用
- android dao设计模式,DAO设计模式
- Linux服务之cobbler批量部署篇
- python会计实证研究_适合会计、金融实证研究的统计软件、编程语言搭配
- 我们短暂的人类世和即将到来的算法世
- linux启动和grub修复
- oracle经纬度精确查询位置,基于经纬度定位车辆所在交通小区位置的方法与流程...
- 什么是取整?有几种取整方式?C语言又是哪种方式?取模取余一样吗?
- 星际争霸1,如何有效提高apm和hotkey
- linux下C++编程学习