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 RCNNselective 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 mapsproposals,综合这些信息后提取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 anchorsbounding 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=2pooling 层将原图缩小为原来的一半
  • 经过conv layer后,一个MxN大小的矩阵将变为(M/16)x(N/16)

2.2 Region Proposal Network

RPN网络分为2条线,上面一条通过softmax分类anchors获得foregroundbackground(检测目标是foreground),下面一条用于计算anchorsbounding box regression偏移量,以获得精确的proposal。最后的Proposal层则负责综合foreground anchorsbounding box regression偏移量获取proposals

2.2.1 anchors

anchor为由一个中心点,周围生成了9个矩形,其矩形的有3种不同的尺寸,每个尺寸有3种不同的比例,分别为1:1, 1:2, 2:1,这样共9个不同的矩形,如下图左上角所示。

RPN遍历conv layers生成的feature mapsfeature map上的每一个点都配备这9种anchor作为初始的检测框,效果如下图右所示。这样做获得检测框很不准确,之后将会在RPN层,以及最后进行2次的bounding box regression修正检测框位置

如下图,对于每一个点的kkk个anchor来说,从feature maps提取出得特征具有256维,对于每一个anchor,需要分foregroundbackground,因此共有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流程

  1. 生成anchors
  2. 按照输入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topNanchors
  3. 限定超出图像边界的foreground anchors为图像边界
  4. 剔除非常小(面积和scores)的foreground anchors
  5. 进行NMS,按照nms后的foreground softmax scores由大到小排序foreground anchors,提取前post_nms_topNanchors

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​)=Ncls​1​i∑​Lcls​(pi​,pi∗​)+λNreg​1​i∑​pi∗​Lreg​(ti​,ti∗​)

其中:

  • iii表示anchors index

  • pip_ipi​表示foreground softmax probability

  • pi∗p_i^*pi∗​代表对应的GT predict概率(如果anchorGT间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论文详解相关推荐

  1. Faster R-CNN论文详解

    原文链接:http://lib.csdn.net/article/deeplearning/46182 paper链接:Faster R-CNN: Towards Real-Time Object D ...

  2. Fast R-CNN论文详解

    Fast R-CNN论文详解 作者:ture_dream &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max po ...

  3. Faster RCNN代码详解(五):关于检测网络(Fast RCNN)的proposal

    在Faster RCNN代码详解(二):网络结构构建中介绍了Faster RCNN算法的网络结构,其中有一个用于生成ROI proposal target的自定义层,该自定义层的输出作为检测网络(Fa ...

  4. 【目标检测】Faster RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...

  5. Faster RCNN算法详解

    Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal ne ...

  6. Fast R-CNN论文详解 - CSDN博客

    废话不多说,上车吧,少年 paper链接:Fast R-CNN &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max ...

  7. faster rcnn fpn_Faster-RCNN详解和torchvision源码解读(三):特征提取

    我们使用ResNet-50-FPN提取特征 model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True) ...

  8. Faster RCNN代码详解(六):自定义评价函数

    在前面几篇博文中基本上将Faster RCNN的算法细节都介绍完了,这一篇博客主要来介绍评价函数.自定义评价函数有助于我们灵活观察模型训练过程中的变量变化情况,比如RPN网络中的分类和回归损失在每次迭 ...

  9. R-CNN论文详解(论文翻译)

    R-CNN系列论文(R-CNN,fast-RCNN,faster-RCNN)是使用深度学习进行物体检测的鼻祖论文,其中fast-RCNN 以及faster-RCNN都是沿袭R-CNN的思路.今天又重新 ...

  10. Tensorflow2.0:Faster RCNN 代码详解(一)

    第一部分给出Fater RCNN文件的代码解析,主要是模型主体的执行过程,在此文件 引入下述几个文件的函数引用,对于backbones,necks和test_mixins文件来说,主要是用来构建模型结 ...

最新文章

  1. 卧加加工斜孔怎么计算机械坐标,卧加B轴旋转后坐标怎么计算
  2. ASP.NET介绍及C#基本语法(一)
  3. 各个硬件指令集使用简单介绍
  4. docker删除本地所有镜像
  5. 【ArcGIS风暴】什么是点云?什么是Las数据集?一篇文章告诉你点云数据的奥秘
  6. vue页面取ajax返回值,Vue前端交互模式、Promise用法(回调地狱)
  7. find_first_of()和 find_last_of() 【获取路径、文件名】
  8. python for循环连续输入五个成绩判断等级_Python基础(1)——输入输出/循环/条件判断/基本数据类型...
  9. 存储基础 — 文件描述符 fd 究竟是什么?
  10. 蓝桥杯:2018年第九届蓝桥杯省赛B组第七题—螺旋折线
  11. ESP32c3开发环境搭建 IDF V4.4离线版安装使用
  12. android dao设计模式,DAO设计模式
  13. Linux服务之cobbler批量部署篇
  14. python会计实证研究_适合会计、金融实证研究的统计软件、编程语言搭配
  15. 我们短暂的人类世和即将到来的算法世
  16. linux启动和grub修复
  17. oracle经纬度精确查询位置,基于经纬度定位车辆所在交通小区位置的方法与流程...
  18. 什么是取整?有几种取整方式?C语言又是哪种方式?取模取余一样吗?
  19. 星际争霸1,如何有效提高apm和hotkey
  20. linux下C++编程学习

热门文章

  1. java 实现电子签名_java swing实现手写板电子签名系统
  2. Qt编写onvif搜索和云台控制工具源码
  3. Steam忘记账号如何在文件夹中找回
  4. java请求菜鸟快递接口返回乱码
  5. Charles做弱网测试
  6. 分布式存储系统设计的若干原则
  7. Docker学习总结(45)——Docker在沪江落地的实践
  8. 【Typecho插件-前端-播放器】BiliVid -- 好用的Bilibili视频链接解析播放器
  9. linux怎么进入mnt目录,「Linux基础知识」Linux路径的表示方式
  10. cad迷你画图2020中文版