几篇论文带你了解目标检测—Faster RCNN(1)

1,216 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情

Faster RCNN 可以说的是 RCNN 的终结篇

Faster RCNN 是 RCNN 系列到现在为止的最近发表一篇文章,也可以理解为终结篇。后续大家可以认为是 Mask RCNN 是 Faster RCNN 后续篇,Mask 对 Faster RCNN 在结构上做了不小调整,而不是简单优化 RCNN 结构的某一个环节。所以人家才叫了 Mask RCNN

这是 RCNN 系列一直以来都是为了提升 speed 为目标。真是因为速度问题才让 YOLO 这样小而快有了可乘之机,脱颖而出。所以 RCNN 一直以来都是以要做的快、更快为目标不断迭代更新。

yolo.jpg

我们简单回顾一下 Fast RCNN,将生成的候选区域直接投影到特征提取网络提取出的特征图上。而且舍弃来 SVM 和回归器作为类别分类器和边界框回归器。而是采用全连接直接接上 softmax 和 regressor 来做分类和任务,这样就要求将映射到特征图得到不同大小特征矩阵,进行缩放得到统一。

作者都是我心中的大佬

首先我们来看看作者中都有谁,看到 Kaiming He 和 Ross Girshick 这两个人,你就知道这是篇值得阅读和回味的论文了。

概述性能提升

  • 之前 Fast RCNN 网络预测图片时间大约为 47 秒
  • 速度上推理时间是 5fps
  • 在 2015 年 ISSVRC 和 COCO 上取得了第一名好成绩

网络结构亮点

  • RPN: selective search 自己好像就需要 2 秒左右,所以需要通过一种更快的候选框提取网络来代替 selective search 这种生成候选框的方法,因此就出现了 RPN 网络。
  • Anchor

对于网络首先我们关心这个网络用来做什么,也就是网络的输入和输出。那么对于目标检测网络来说,Faster CNN 也是接收一个张图图片,通常是具有 RGB 3 通道图片,输出是一个数据结构,也就是一个集合,集合中每一个对象包换的目标信息有,目标所属类别、通过一个框来表示目标在图中位置和大小,也还有一个表示机器对自己这次预测结果的自信的程度的满意分,也就是通常所说自信度。

网络结构总体概览

faster_RCNN.png

RPN

rpn_001.PNG

RPN 网络如何生成候选框的呢? 首先拿到特征图(conv feature map)之后,然后用一个滑动窗口(slide window)在窗口进行滑动,滑动某一个,这里 256-d 表示深度也就是特征图的通道数,因为 VGG 得到通道数 256 然后将 256 维向特征矩阵, 2k 和 4k 两个分别表示分类和回归向量,k 表示每一个位置点生成 anchor 数量。

通过锚框生成机制对于 60x40 大约可以生产 20k 锚框,忽略掉那些边界超出图片的锚框剩下 6k 左右的锚框,6k 锚框经过 RPN 网络生成候选(proposal)框然后这些建议框基于 cls 的分,采用 NMS 也就是 IoU 大于 0.7 还能在去掉一些候选框,最终输出的就是大约 2k 候选框

接下来我们来说一说如何训练 RPN 网络

RPN 网络样本从哪里来呢?

训练就需要样本,那么 RPN 网络样本又是怎么得到呢?接下来我们就来聊一聊这个问题,首先我们知道对于 60 x 40 特征图我们大概可以获取 20k anchors 那么,训练 RPN 样本数量通常是从这些 anchors 中抽取的,大概会抽取 256 作为样本,其中 128 样本作为正例样本,128 作为负例样本,如果无法找到住够多正例样本,可以用负例样本来填充。

如何判断正例样本

满足什么样条件样本可以看成正例样本呢? 只要满足以下两个条件可以可以看做正例样本

  • anchor 与 ground truth 的 IoU 大于 0.7 这个 anchor 就可以被视为正例样本
  • 如果没有找到 anchor 与目标 ground truth 的 IoU 大于 0.7 就可以考虑从所有与该 ground truth 相交的 anchors 中 IoU 最大 anchor 作为正例样本,这个条件是对上一个条件的补充
如何判断负例样本

与所有 ground truth 的 IoU 都小于 0.3 的 anchors 就是负例样本

如果某一个 anchor 既不满足正例样本也不满足负例样本就会抛弃这个 anchor