Faster-RCNN(RPN + CNN + ROI)概念

Faster RCNN可以分为4个主要内容:

  1. Conv layers:作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取 image的feature maps。该feature maps被共享用于后续 RPN层和全连接层。
  2. Region Proposal Networks:RPN网络用于生成region proposals。通过softmax判断anchors属于positive或者 negative,再利用bounding box regression修正anchors 获得精确的proposals。
  3. Roi Pooling:该层收集输入的feature maps和proposals, 综合这些信息后提取proposal feature maps,送入后续 全连接层判定目标类别。
  4. Classification:利用proposal feature maps计算 proposal的类别,同时再次bounding box regression获 得检测框最终的精确位置。

整体流程:

Faster-RCNN:conv layer

Conv layers包含了conv,pooling,relu三种层。共有13个conv层,13个relu层,4个pooling层。
在Conv layers中:

  1. 所有的conv层都是:kernel_size=3,pad=1,stride=1
  2. 所有的pooling层都是:kernel_size=2,pad=1,stride=2

在Faster RCNN Conv layers中对所有的卷积都做了pad处理( pad=1,即填充一圈0),导致原图 变为 (M+2)x(N+2)大小,再做3x3卷积后输出MxN 。正是这种设置,导致Conv layers中的conv层 不改变输入和输出矩阵大小。

类似的是,Conv layers中的pooling层kernel_size=2,stride=2。 这样每个经过pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。
综上所述,在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长 宽都变为输入的1/2。
那么,一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16)。 这样Conv layers生成的feature map都可以和原图对应起来。

Faster-RCNN:Region Proposal Networks(RPN)

区域生成网络Region Proposal Networks(RPN)

经典的检测方法生成检测框都非常耗时。直接使用RPN生成检测框,是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。

• 可以看到RPN网络实际分为2条线:

  1. 上面一条通过softmax分类anchors获得positive和negative分类;
  2. 下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。

• 而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取 proposals,同时剔除太小和超出边界的proposals。
• 其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

anchors

RPN网络在卷积后,对每个像素点,上采样映射到原始图像一个区域,找到这 个区域的中心位置,然后基于这个中心 位置按规则选取9种anchor box。
9个矩形共有3种面积:128,256,512; 3种形状:长宽比大约为1:1, 1:2, 2:1。 (不是固定比例,可调) 每行的4个值表示矩形左上和右下角点坐标。

遍历Conv layers获得的feature maps,为每一个点都 配备这9种anchors作为初始的检测框。

这些anchor box都是对应于原图的尺寸,可以直接使用标记的候选框和分类结果进行训练。其中:

  1. 把每个标定的ground-truth box与其重叠最大的anchor box记为正样本。(保证每个ground-truth box 至少对应一个正样本anchor)
  2. 剩余的anchor box与某个ground-truth box重叠大于0.7的记为正样本。(每个ground-truth box可能 会对应多个正样本anchor。但每个正样本anchor只可能对应一个grand-truth box)
  3. 与任意一个标记ground-truth box重叠小于0.3的anchor box记为负样本。
  4. 其余的舍弃。 这样做获得检测框很不准确,通过后面的2次bounding box regression可以修正检测框位置。

softmax判定positive与negative

其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面 有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已。

可以看到其num_output=18,也就是经过该卷积的输出图像为WxHx18大小。
这也就刚好对应了feature maps每一个点都有9个anchors,同时每个anchors又有可能是positive和 negative,所有这些信息都保存在WxHx(9*2)大小的矩阵。
注意这里的18,后面之所以reshape成为18也是因为对应这18个元素的原因
为何这样做?
后面接softmax分类获得positive anchors,也就相当于初步提取了检测目标候选区域box (一般认为目标在positive anchors中)。

那么为何要在softmax前后都接一个reshape layer?
其实只是为了便于softmax分类。 前面的positive/negative anchors的矩阵,其在caffe中的存储形式为[1, 18, H, W]。而在softmax 分类时需要进行positive/negative二分类,所以reshape layer会将其变为[1, 2, 9xH, W]大小,即 单独“腾空”出来一个维度以便softmax分类,之后再reshape回复原状。

对proposals进行bounding box regression


可以看到其 num_output=36,即经过该卷积输出图像为WxHx36。 这里相当于feature maps每个点都有9个anchors,每个anchors又都有4个用于回归的变换量:

Proposal Layer

Proposal Layer负责综合所有变换量和positive anchors,计算出精准的proposal,送入后续RoI Pooling Layer。
Proposal Layer有4个输入:

  1. positive vs negative anchors分类器结果rpn_cls_prob_reshape,
  2. 对应的bbox reg的变换量rpn_bbox_pred,
  3. im_info
  4. 参数feat_stride=16

im_info:对于一副任意大小PxQ图像,传入Faster RCNN前首先reshape到固定MxN,im_info=[M, N, scale_factor]则保存了此次缩放的所有信息。
输入图像经过Conv Layers,经过4次pooling变为WxH=(M/16)x(N/16)大小,其中feature_stride=16则保 存了该信息用于计算anchor偏移量。

Proposal Layer 按照以下顺序依次处理:

  1. 利用变换量对所有的anchors做bbox regression回归
  2. 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors, 即提取修正位置后的positive anchors。
  3. 限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界。
  4. 剔除尺寸非常小的positive anchors。
  5. 对剩余的positive anchors进行NMS(non-maximum suppression)。
  6. 之后输出proposal。

注意,由于在第三步中将anchors映射回原图判断是否超出边界,所以这里输出的proposal是对应MxN输 入图像尺度的,这点在后续网络中有用。
严格意义上的检测应该到此就结束了,后续部分应该属于识别了。

RPN网络结构就介绍到这里,总结起来就是:

生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

Faster-RCNN:Roi pooling

RoI Pooling概念

RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。
Rol pooling层有2个输入:

  1. 原始的feature maps
  2. RPN输出的proposal boxes(大小各不相同)

为何需要RoI Pooling?
对于传统的CNN(如AlexNet和VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也 是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。
有2种解决办法:

  1. 从图像中crop一部分传入网络将图像(破坏了图像的完整结构)
  2. warp成需要的大小后传入网络(破坏了图像原始形状信息

RoI Pooling原理

新参数pooled_w、pooled_h和spatial_scale(1/16)
RoI Pooling layer forward过程:

  1. 由于proposal是对应MN尺度的,所以首先使用spatial_scale参数将其映射回(M/16)(N/16)大小 的feature map尺度;
  2. 再将每个proposal对应的feature map区域水平分为poold_w * pooled_h的网格;
  3. 对网格的每一份都进行max pooling处理。

这样处理后,即使大小不同的proposal输出结果都是poold_w * pooled_h固定大小,实现了固定长度输出。

Faster-RCNN: Classification

Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;
同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。

从RoI Pooling获取到poold_w * pooled_h大小的proposal feature maps后,送入后续网络,做了如下2 件事:

  1. 通过全连接和softmax对proposals进行分类,这实际上已经是识别的范畴了
  2. 再次对proposals进行bounding box regression,获取更高精度的预测框

全连接层InnerProduct layers:

输入X和输出Y是固定大小。所以,这也就印证了之前Roi Pooling的 必要性

代码实现:

因为代码非常多,所以放在资源里面。

keras框架:目标检测Faster-RCNN思想及代码相关推荐

  1. 目标检测——Faster R-CNN论文阅读

    论文阅读--Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks 文章目录 论文阅读--Faste ...

  2. 目标检测Faster RCNN 批量标记数据集,生成xml,csv以及record文件

    目标检测Faster RCNN 批量标记数据集,生成xml,csv以及record文件 0.将png图片转换为jpg import os from PIL import Image# dirname_ ...

  3. [目标检测] Faster R-CNN 深入理解 改进方法汇总

    Faster R-CNN 从2015年底至今已经有接近两年了,但依旧还是Object Detection领域的主流框架之一,虽然推出了后续 R-FCN,Mask R-CNN 等改进框架,但基本结构变化 ...

  4. 目标检测 Faster R-CNN运行及实时性DEMO测试

    faster-rcnn:Fast Region-based Convolutional Neural Networks基于区域的卷积神经网络 http://blog.csdn.net/column/d ...

  5. 深度学习和目标检测系列教程 7-300:先进的目标检测Faster R-CNN架构

    @Author:Runsen Faster R-CNN 由于Fast R-CNN 过程中仍然存在一个瓶颈,即ROI Projection.众所周知,检测对象的第一步是在对象周围生成一组潜在的边界框.在 ...

  6. 重温目标检测--Faster R-CNN

    Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks NIPS2015 https://gith ...

  7. 目标检测--Faster R-CNN

    Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks NIPS 2015 Matlab code ...

  8. yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...

    GitHub: liuyuemaicha/PyTorch-YOLOv3​github.com 注:该代码fork自eriklindernoren/PyTorch-YOLOv3,该代码相比master分 ...

  9. 目标检测——从RCNN到Faster RCNN 串烧

    目标检测--从RCNN到Faster RCNN 串烧 https://blog.csdn.net/xyy19920105/article/details/50817725 本人小硕一枚,方向是深度学习 ...

  10. 目标检测到目标跟踪 -- Faster R-CNN 观测器

    https://blog.paperspace.com/ 目标跟踪在在某些程度上可以说是目标检测的一个维度拓展.目标检测类似于贝叶斯 Filtering 和 Smoothing 中的观测器,整个目标跟 ...

最新文章

  1. 毕业仅1年,干Python赚了50W 网友:不是吹的
  2. SAP ABAP实用技巧介绍系列之使用代码获得某个structure上的扩展字段
  3. 安装mysql-connector-python-8.0.11-py3.6遇到问题
  4. PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
  5. Jeewx捷微 , 免费微信公众账号管家系统发布,采用JAVA语言
  6. Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...
  7. pandas 使用把dataframe变为series
  8. 21天Jenkins打卡Day14-maven服务
  9. python3 性能提升_5个提升Python性能的项目
  10. Axure第11享:Axure汉化方法?
  11. Ajax---菜鸟教程
  12. (TeamTalk服务端源码分析一)TeamTalk服务端部署
  13. 分配甲、乙、丙、丁四人去完成五项任务,每人完成各项任务的时间如下表所示
  14. 计算机创新创业计划2000字,创新创业论文2000字
  15. 浅谈高速公路服务区分布式光伏并网发电
  16. 全国计算机考试比省级的难吗,国考和省考考题的区别,难度差异很大吗?
  17. 截屏 远程协助 android,ARDC Android 远程桌面助手 录屏 演示 MD
  18. macOS_Monterey_12.6.1_21G217可引导可虚拟机安装的纯净版苹果OS系统ISO镜像安装包免费下载
  19. docker常见面试题
  20. Android 系统截屏实现

热门文章

  1. 数据库原理及应用【一】引言
  2. linux下安装erlang
  3. leetcode(977)有序数组的平方
  4. arm-linux-gcc静态编译和动态编译的区别
  5. ip route / ip rule /iptables 配置策略路由
  6. 大厂offer手到擒来,Java面试真题精选
  7. HDOJ 2037:今年暑假不AC_大二写
  8. ASP.NET 对类进行XML序列化和反序列化
  9. (原创)UML要点总结
  10. ExtJS专题-TreePanel(1)