Title: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(2016)
Link: paper,code
Key points:
Summary:
又是一篇 two-stage 的 detector,全文最核心最难理解的部分是 3.1 PRN 网络,至于 3.2 的交替训练还是好理解的。
这里总结一下 RPN。
PRN 的作用是在检测前先预选一些区域(框),我们的选择标准是:
基于以上两点构建损失函数,我们就能先筛选一部分感兴趣的区域(候选框)。
但是图片这么大,先筛选哪部分呢?拿一个窗口,在图像经 CNN 得到的特征图上从头开始滑动,这样就能做到全覆盖。
但是还要注意,滑动窗口,在每个窗口进行选择时,如果里面包含你研究类别的物体,你就要先要给物体划定一片区域,也就是预测包含这个物体的框。物体大小不同,对应的框也不同,到底给这里的物体预测多大的框,论文的方案是预测几个不同大小,纵横比的框(论文是3*3=9,这九个框叫 anchor),这九个框总有几个和真实框接近的,重叠度高的框就晋级了。
至此,PRN 的使命完成,它经过一系列筛选,给了检测网络(Fast R-CNN)一批候选者,检测网络只需要判断这些框中的物体类别,以及进一步选择与 ground truth 接近的框。
现在你应该明白 PRN 干了什么,它干的工作就是 海选!
那没有 PRN 就不行了吗,我直接用滑动窗口在 feature map 上分类、预测位置也行呀。可以的,但这样网络就要花大量的精力预测那些我们不研究的物体(一幅图,你感兴趣的物体往往是少数),大量无用的 region 都需要单独进入分类网络,耗时还可能不收敛!
Fast R-CNN 问题:
Faster R-CNN 创新点:
Faster R-CNN 模块:
相比 Fast R-CNN 模块的改变:
Faster R-CNN 交替训练流程:
Faster R-CNN 检测流程:
之前的 object detection 方法有 SPPnet 和 Fast R-CNN 已经指出 region proposal 的计算是瓶颈。
在这项工作中,我们引入了一个 Region Proposal Network(RPN),该网络与检测网络共享全图像卷积特征,从而实现几乎免费的区域提议。
关于 PRN:
proposals 是当前检测任务的计算瓶颈,而且考虑到检测网络部分,用 GPU 加速 proposals 的计算不太有效。
本文提出一个让 proposal 计算用时几乎为 0 的方法——引入了一个 novel 的网络 Region Proposal Networks (RPNs)。PRN 通过和 object detection 网络(SPPnet / Fast R-CNN)共享卷积层,使得 test 阶段 proposal 的计算用时几乎为0。
Object Proposals——
object proposal 产生的方法主要有两种:一种基于分组超像素(Selective Search, CPMC , MCG),一种基于滑动窗口 (objectness in windows, EdgeBoxes, )
object proposal方法被用作独立于检测器的外部模块(Selective Search object detectors, R- CNN, Fast R-CNN)
Deep Networks for Object Detection——
R-CNN训练CNN将 proposal 区域分类为对象类别或背景,但它不预测边界。
之后有一些论文提出预测边界的方法,如OverFeat 和 MultiBox (后面会与 Faster R-CNN 比较)
卷积的共享计算一直吸引着越来越多的注意力,以寻求有效而准确的视觉识别,如 OverFeat,SPP,Fast R-CNN。
本文提出的 object detection 系统称为 Faster R-CNN,包含两个模块:用于生成区域的深度全卷积网络和 Fast R-CNN detector。
整个系统是统一的,其中的 RPN 模块提供一些候选区域给 Fast R-CNN 模块。
RPN 接收(任何大小的)图像作为输入,并输出一组矩形框,每个矩形框都有一个客观评分(评分表明这个位置有物体的概率)。PRN 用 FCN 实现。
region proposals 的生成过程:在该网络最后一层输出的特征图(图 3 最下面的 feature map)上滑动一个小型网络(图 3 的 sliding window)。 这个小网络将特征图的 n×n 的这部分区域(图 3 的红框)作为输入,经过中间层映射成低维特征(256-d),此特征被送入两个同级的全连接层-框回归层(reg)和框分类层(cls)。
其中分类层判断这部分区域有没有数据集包含的类别(这一层输出一个分数 1 或 0:有包含的类别才打 1,其余情况为 0。注意不是这片区域有物体就行,我们只关心规定的那几种类别,比如 COCO 数据集就包含 80 类,这里有其他任何东西都和我们的任务无关,都是 0 ), 如果有我们感兴趣的物体,回归层预测一些框。
在滑动窗口经过的每个位置,我们需要同时预测/回归多个框(为什么要多个,因为物体大小不同,ground truth 的框也不同,一个大小的框框不住所有类型的物体)。其中每个位置输出的最大可能框数表示为 k。 因此,reg层有 4k 个输出,对 k 个框的坐标进行编码,而cls层则输出 2k 个得分,这些得分估计每个框是对象或非对象的概率。
k个 proposal 相对于k个参考框已参数化,文章称其为 anchors。
anchor(锚点)是图 3 中滑动窗口中心的点,每个锚点都与一个尺寸和一个纵横比关联。默认情况下,使用3个尺寸和3个纵横比,在每个滑动位置产生k = 9个锚点。
我们的方法的一个重要特性是,在锚点和计算相对于锚点的 proposal 的函数方面,它都是平移不变(translation invariant)的。
多尺度预测有两种流行的方法:第一种方法基于图像/特征金字塔,第二种方法是在特征图上使用多个比例(和/或纵横比)的滑动窗口。
相比之下,我们的基于锚的方法是基于锚的金字塔构建的,这种方法更具成本效益。 我们的方法参照多个比例和纵横比的锚框对边界框进行分类和回归。 它仅依赖单一比例的图像和特征图,并使用单一尺寸的滤波器。
为了训练RPN,为每个锚点分配一个二进制类标签。
正样本:与一个 ground truth box 有最高 IoU,或者与任意 ground truth box 的 IoU 都在 0.7 之上的锚点。
负样本:与所有 GT 的 IoU 都低于 0.3
有了标签的定义,来看目标函数,涉及分类和回归两个任务,分类是判断这片区域的物体是否属于数据集类别, 回归是预测物体位置。
PRN 可以端到端地使用 SGD 训练。
采样模式采取了 Fast R-CNN 的 image-centric 方法。
使用 Caffe 实现。
3.1 只是说如何生成 region proposals,还没有涉及目标检测如何使用这些框。
目标检测网络使用的 Fast R-CNN,接下来讲如何把 RPN 和 Fast R-CNN 通过共享卷积层的方式组合成一个统一的网络。
RPN 和 Fast R-CNN 都是单独训练的,因此只需要想如何让这两个网络共享卷积层,而不用训练两个不同的网络。
文章讨论了三种特征共享的训练方式:
总之,文章选的是 4-step 交替训练的方式——
Dataset: PASCAL VOC 2007, PASCAL VOC 2012
Metric: mean Average Precision (mAP)
表 2 的上半部分展示的是 Fast R-CNN 使用不同的 region proposal 生成方法的结果,可以看出 PRN 和 Fast R-CNN 的结合起来,检测效果最好(59.9),而且只用了 300 个 proposal。
为了研究RPNs作为提议方法的行为,文章进行了一些消融研究,结果是表 2 的下半部分: