Faster RCNN 关键点总结

?

术语 描述
RoI Region of Interest
RPN Region Proposal Network
FRCN Fast RCNN

Faster R-CNN,由两个模块组成:

第一个模块是深度全卷积网络 RPN,用于 region proposal;
第二个模块是 Fast R-CNN 检测器,它使用了RPN产生的region proposal进行检测。

FRCN

?

网络输入

  • 整张图片
  • object proposals(提出矩形图片坐标)

网络输出

  • N + 1 (N 类物体 + 背景) 类概率分布
  • N 个 bounding box 坐标 (category-specific bounding-box regressors)

目标检测的两大困难

  • 有大量的框需要处理,
  • 而且这些框是不准确的, 需要去微调

主要贡献: 简化了 RCNN 训练步骤;
性能: VOC2007/2010, mAP 约为 66.7%;

前向传播

网络首先使用卷积层和最大池化层处理整个图像生成 feature map。 然后,对于每个 object proposal,RoI池化层从 feature map 中提取固定长度的特征向量。每个特征向量被馈送到全连接层,最终输入到两个输出层, 为 (N类+背景类)分类器和 Bounding Box 回归器.

RoI pooling layer

RoI定义:

可以说是最后一个卷积 feature map 上的一个矩形区域, 每个 RoI 由四元组(r,c,h,w)定义,为其左上角(r,c) 及其高度和宽度(h,w);

那么 RoI 是如何产生的呢 ?

我们先来看看 Region Proposal 是什么? 即输入图片上的一个矩形区域, 二者的映射关系, 大约为卷积网络所有的 downsampling strirde 相乘, 将 Region Proposal 映射到最后一个卷积 feature map 上的一个矩形区域上.

那么我们获得 RoI 之后, 怎么处理它呢?

这就说要这一节的主角啦, RoI 池化层(RoI pooling layer 或 RoI max pooling), 它的作用是将高宽为 h×w RoI 窗口划分为包含 H×W 个大小约 \(\frac{h}{H}×\frac{w}{W}\) 的子窗口的网格,然后将每个子窗口中的最大值汇集到相应的输出网格单元中来, 其中 H 和 W 是超参数, 独立于任何特定的 RoI。

损失函数设计

?

?

Truncated SVD

对于图像分类来说,与卷积层相比,计算全连接层所花费的时间很少。而对于检测问题来说,由于要处理的 RoI 的数量很大,并且有近一半的正向传播时间用于计算全连接层。 通过截断的 SVD 压缩, 可以很容易地加速大的全连接层的计算速度。

\[W ≈ UΣ_t V^T\]

?

Scale invariance: to brute force or finesse ?

?

卷积神经网络的第一层是通用的,任务无关的,所以检测微调时, 不需要考虑第一层, FRCN 从 conv_3 层开始微调

RPN 介绍

RPN 的提出, 将 region proposal 融入 CNN 网络中, 整个系统是一个单一的,统一的对象检测网络。 具体为使用 RPN 的技术代替之前 Selection Search, 完成 region proposal, 那么 RPN 需要完成两个任务:

  1. 判断 anchors 中是否包含将要检测的 K 类物体(是或者否), 这里只是判断是否包含物体, 而没有判断到底是什么物体, 即 objectness proposal
  2. 提出 anchor 对应的 bounding box 的坐标, 即 region proposal

RPN 提出的是在图片上的坐标, 然后通过 RoI 映射投影到最后一层卷积 feature map 上

下面我们说说是训练 RPN 的事, 首先看看 RPN 是什么?

RPN 是什么?

RPN 输入输出就如下,

输入: 整张图片
输出: objectness classification + bounding box regression

\(\color{red}{\bf来说说 RPN 中关键概念 \space anchor}\)

anchor 其实就是预训练网络卷积层的最后一层 feature map 上的一个像素,以该 anchor 为中心(更确切的说是以 feature map 的尺寸 SxS 分割输入图像为 SxS 个 cell, 将 anchor 对应于相应cell的中心, 然后通过尺寸和宽高比在图像上形成 anchor boxes),可以生成 k 种 anchor boxes(理解为 region proposal 就好了); 每个 anchor box 对应有一组缩放比例( scale)和宽高比(aspect). 论文中共使用 3 种 scale(128, 256, 512), 3 种 aspect(1:2, 1:1, 2:1), 所以每个 anchor 位置产生 9 个 anchor boxs.

?

为何要提出 anchor呢?

来说说 anchor 的优点: 它只依赖与单个 scale 的 images 和 feature map, 滑动窗口也只使用一个尺寸的 filter. 不过却能解决 multiple scales and sizes的问题.

为何选择 128 ,256, 512? 论文中用到的网络如 ZFNet 在最后一层卷积层的 feature map 上的一个像素的感受野就有 171(如何计算感受野看这里), filter size 3x3, 3x171=513. 而且论文中提到: 我们的算法允许比底层接受域更大的预测。 这样的预测并非不可能 - 如果只有对象的中间部分是可见的,那么仍然可以大致推断出对象的范围。

在预训练网络卷积层的最后一层 feature map 上进行 3x3 的卷积, anchor 就位于卷积核的中心位置.

记住这里 anchor boxes 坐标对应的就是在图片上的坐标, 而不是在最后一层卷积层 feature map 上的坐标.

anchor box 这么简单粗暴, 为什么有效?

列举了这么多, 相当于穷举了吧, 比如论文中所说,由于最后一层的全局 stride 为16, 那么100x600 的图片就能生成大约 60x40x9≈20000个 anchor boxes). 当然列举了这么多 anchor boxes, 这region proposal 也太粗糙啊, 总不能就这样把这么多的质量层次不齐 anchor boxes 都送给 Fast R-CNN来检测吧. 那该怎么剔除质量不好的呢? 这就是后面 RPN 的 bounding box regression 和 objectness classification 要解决的事情:)

有必要先说说 RPN 的 objectness classification 和 bounding box regression 有什么用?

一句话就是 "少生优育"

bounding box regression: 调整输入的 anchor boxer 的坐标, 使它更接近真实值, 就是一个 bbox regression, 输出称为 RPN proposal, 或者 RoIs. 提高 anchor boxer 的质量

objectness classification: 一些 RPN proposal(anchor boxer经过)可能相互重叠度很高, 为了减少冗余, 通过objectness classification的输出的分数score 对这些RPN proposal做 NMS(non-maximum suppression), 论文中设置threshold 为 0.7, 只保留 threshold < 0.7 的RPN proposal, 减少 anchor boxes 的数量

RPN 的任务是什么?

训练 RPN 网络来选择那些比较好的 anchor boxes.

因为现在我们要训练 RPN, 我们只提出了 anchor boxer, 却不知道这些 anchor boxes是不是包含物体, 就是没有标签啊! 那么问题来了? objectness classification 分类时没有标签啊. 怎么办?

办法就是使用 image 检测用 gt-bbox(ground-truth bounding box), 注意这里我们只是检测图片中有没有物体, 而不判断是哪一类物体.

positive anchors

与任意 gt-box 的 IoU > 0.7, 或者具有最大 IoU, 即标记为1, 就是包含物体, 当然该 gt-box 就是 anchor boxes bounding box regression任务对应的标签

negative anchors

与任意 gt-box 的 IoU < 0.3, 即标记为 negative anchor, 标记为0, 就是不包含物体, 是背景, 从后面的损失函数知道, 背景不参与回归损失函数.

IoU 位于 positive anchors, negative anchors 之间 anchor boxer 背景和物体掺杂, 的对于训练目标没有贡献, 不使用.

bounding box regression && objectness classification

注意一点, 每个 regressor 只负责一个 <scale, aspect>, 不与它 regressor共享权重, 所以需要训练 k 个 regressor.

其他不多说, 只贴贴公式

?
?

?

  1. \(p^*_i\) 为一个 batch 中的第 i 个 anchor box 的真实标签, \(p_i\) 为分类器预测概率, 如果是positive anchor, \(P_i^*\)为1, 否则为0.
  2. $L_{reg}(t_i, t_i^) = smooth_{L1}(t_i-t_i^), $
  3. \(p^*_iL_{reg}\) 表示regression loss 只会被 positive anchor 激活.
  4. anchor boxes 的坐标表示为 (x, y, w ,h), (x, y) 为 box 的中心坐标.
  5. \(x,\space x_a, \space x^*\) 分别代表 bbox regressor 的预测坐标, anchor box 的坐标, 和 anchor box 对应的 gt-box 坐标.

训练

交替训练: 在这个解决方案中,我们首先训练 RPN,并使用这些 proposal 来训练 Fast R-CNN。 由 Fast R-CNN 调节的网络然后用于初始化 RPN,并且该过程被重复。
细节:

re-size image 最短边为 600 像素
total stride for ZFNet, VGGNet 16 pixels

跨图像边缘的 anchor boxes 处理

跨越图像边界的 anchor boxes 需要小心处理。 在训练期间,忽略了所有的跨界 anchor boxes,所以他们不会影响损失函数。 对于典型的1000×600图像,总共将有大约20000个(≈60×40×9)anchor boxes。 在忽略跨界锚点的情况下,每个图像有大约 6000 个 anchor boxes 用于训练。 如果跨界异常值在训练中不被忽略,它们会引入大的难以纠正误差项的,并且训练不会收敛。 然而,在测试过程中,我们仍然将完全卷积RPN应用于整个图像。 这可能会生成跨边界anchor boxes,我们将其剪切到图像边界(即将坐标限制在图片坐标内)。

一些实验总结

?

RPN+FRCN( ZFNet), mAP=59.9
RPN+FRCN( VGGNet), mAP=69.9

  1. Faster RCNN 使用 RPN 代替 SS 进行 region proposal, 极大的加快了检测速度, RPN 提出region proposal 的时间相比较 SS 来说,(1.5s -> 0.01s). 而且性能还要更好
  2. NMS 不会降低检测性能. 通过 NMS 得到 300 个 proposal的测试mAP为 55.1%, 使用top-ranked 6000个 proposal的mAP为 55.2%, 从而说明经过NMS之后的 top ranked proposal都是很精确的.
  3. 移除 RPN 的 classification(cls) 的话(自然没法做 NMS, NMS 就是依据cls 来做的), 当 proposal 很少时, 精确率下降很大, N = 100时, mAP 为44.6%, 这说明了cls 越高的 proposal 的准确性越高.
  4. 移除 RPN 的 bbox regression(reg)的话, mAP 下降到 52.1% 说明了多 scale, 多 aspect 的 anchor boxes 并不足以应对精确检测, regressed box bounds 可以产生高质量的 proposals
  5. 对于超参 scale, aspect 敏感性如下

?

预测过程

  1. 图片经过 RPN 产生anchor boxes
  2. anchor boxes 通过 bounding box regressor 调整位置
  3. 使用 objectness classification 分类器的打分进行 NMS, 减少数量
  4. 将 region proposal 交给 fast rcnn 检测.

原文地址:https://www.cnblogs.com/nowgood/p/FasterRCNN.html

时间: 2024-08-30 15:03:58

Faster RCNN 关键点总结的相关文章

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络 资源获取链接:点击这里 第1章 课程介绍 本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 1-1 课程导学 第2章 目标检测算法基础介绍 本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-sta

Faster R-CNN论文详解

原文链接:http://lib.csdn.net/article/deeplearning/46182 paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks &创新点 设计Region Proposal Networks[RPN],利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search.EdgeBoxes等方法,速度上提升明显:

论文阅读之:Is Faster R-CNN Doing Well for Pedestrian Detection?

Is Faster R-CNN Doing Well for Pedestrian Detection? ECCV 2016   Liliang Zhang & Kaiming He 原文链接:http://arxiv.org/pdf/1607.07032v2.pdf 摘要:行人检测被人 argue 说是特定课题,而不是general 的物体检测.虽然最近的深度物体检测方法 如: Fast/Faster RCNN 在general 的物体检测中,展现了强大的性能,但是对于行人检测却不太成功.本文

Faster RCNN学习记录

<Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks>Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun                                           ——学习资料记录(Simon John) 文章拟解决问题(Towards Real-Time) SPP net和Fast R-CNN提取proposal(

一个门外汉的理解 ~ Faster R-CNN

首先放R-CNN的原理图 显然R-CNN的整过过程大致上划分为四步: 1.输入图片 2.生成候选窗口 3.对局部窗口进行特征提取(CNN) 4.分类(Classify regions) 而R-CNN的缺陷就在于对每个候选窗口都要进行特征提取,造成了计算时间成本很大. 再放Fast R-CNN的原理图 Fast R-CNN的提高速度的关键就在于将proposal的region映射到CNN的最后一层conv layer的feature map上,意味着一张图片只需要进行一次特征提取. 而既然R-CN

faster r-cnn学习(一)

http://closure11.com/rcnn-fast-rcnn-faster-rcnn%E7%9A%84%E4%B8%80%E4%BA%9B%E4%BA%8B/ 首先看fast r-cnn这篇论文,中间加入了有些博友的想法. 问题 目标检测主要面临两个问题:过多的候选位置(proposals):必须由这些粗略的候选位置中选出准确的位置. 这篇论文将学习目标proposals分类和精确定位结合起来. 1. R-CNN和SPPnet存在的问题 (1)R-CNN的问题 训练需要多阶段:先用Co

r-cnn学习系列(三):从r-cnn到faster r-cnn

把r-cnn系列总结下,让整个流程更清晰. 整个系列是从r-cnn至spp-net到fast r-cnn再到faster r-cnn.  RCNN 输入图像,使用selective search来构造proposals(大小不一,需归一化),输入到CNN网络来提取特征, 并根据特征来判断是什么物体(分类器,将背景也当做一类物体),最后是对物体的区域(画的框)进行微调(回归器). 由下面的图可看出,RCNN分为四部分,ss(proposals),CNN,分类器,回归器,这四部分是相对独立的.改进的

RCNN学习笔记(5):faster rcnn

reference link: http://blog.csdn.net/shenxiaolu1984/article/details/51152614 http://blog.csdn.net/xyy19920105/article/details/50817725 思想 从RCNN到fast RCNN,再到本文的faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内.所有计算没有重复,完全在GPU中完成,大大提高了运行速度.

(转)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(更快的RCNN:通过区域提议网络实现实时)

原文出处 感谢作者~ Faster R-CNN: Towards Real-Time Object Detection with Region ProposalNetworks Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun 摘要 目前最先进的目标检测网络需要先用区域建议算法推测目标位置,像SPPnet[7]和Fast R-CNN[5]这些网络已经减少了检测网络的运行时间,这时计算区域建议就成了瓶颈问题.本文中,我们介绍一种区域建议网络(Reg