Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Faster R-CNN 是一个 end-to-end 的目标检测算法。相比 Fast R-CNN 有更高的精度和速度。其 主要思想有以下 2 点:
(1)提出了 Region Proposal Network【RPN】,替代了传统的生成候选框的方法。
(2)将 Region Proposal Network【RPN】与检测网络【Fast R-CNN】共享卷积层,大幅提高网络的检测速度。
一、详解 RPN
(一)网络结构
图 1:RPN 网络结构
Faster R-CNN 相比 Fast R-CNN 的最大改进就在于提出了 RPN 网络。所以 Faster R-CNN 可以看做:RPN + Fast R-CNN。RPN 网络使用卷积神经网络提取候选框,替代了传统的基于底层视觉信息的生成候选框的方法,比如 selective search、edge boxes。在速度上和精度上都有了显著的提高。
RPN 网络的输入: 经过 CNN 后生成的 feature map
RPN 网络的输出: 分类【objectness 置信度】+ 回归【所有 proposals 的左上角坐标(x, y),宽高(w, h)】
因为我们的最终目标是要将 RPN 和 Fast R-CNN 共享卷积。对于共享部分的网络的输出是一个 feature map。所以对于 RPN 网络非共享的第一层。我们使用一个 n × n n \times n n×n 的卷积核,对共享部分生成的 feature map 进行卷积操作,并将最后的维度缩减至低维(ZF 256 维,VGG 512 维)。
然后使用 两个并列的全连接层(使用 1 × 1 1 \times 1 1×1 卷积实现),分别输出分类和回归的结果。其中分类的分支用来判断是否是一个物体([0, 1]),即判断候选框中的 objectness(对象性)。或者说是判断候选框中的物体是背景还是前景。回归的分支用于最小化候选框与 ground truth 的差值。其中 分类的输出通道数为 2k,回归的输出通道数为 4k(k 为一个 feature map 中的点生成的 anchor 的个数)。网络的结构见图 1。
(二)Anchor
对于 RPN 网络,最重要的一个概念就是 anchor。那么 什么是 anchor?
图 2:Anchor 的定义
在引入 Anchor 之前,我们需要思考一个问题。我们 如何生成一系列大小各不相同的 region proposals 呢? 其实可以这样,我们可以 先在原始图片中生成各种大小,长宽比例的窗口。对于与 ground truth 有高重叠的窗口,我们对其进行修正。对于那些与 ground truth 重叠很低的窗口,我们不进行修正。最后筛选出于 ground truth 重叠很高的窗口,就得到了最后的 region proposals。
那么如何生成各种大小,长宽比例的窗口呢? 记生成窗口的边长(正方形)为 scale,窗口的长宽比为 aspect ratio。记它们的个数为 N s c a l e , N a s p e c t r a t i o N_{scale},N_{aspect \; ratio} Nscale,Naspectratio。那么我们就可以 先生成一个正方形,然后再将长宽缩放到对应的比例。即为生成的窗口。那么一次,我们能生成 N s c a l e × N a s p e c t r a t i o N_{scale}\times N_{aspect \; ratio} Nscale×Naspectratio 个窗口。
我们 将 feature map 上的点,映射到原始图片上的一个区域。以这个区域的中心点生成如上我们所说的窗口,那么这个窗口,就叫做 anchor。设 feature map 的长和宽分别为 w 和 h,那么生成的 anchor 的个数为 w × h × N s c a l e × N a s p e c t r a t i o w \times h \times N_{scale}\times N_{aspect \; ratio} w×h×Nscale×Naspectratio
Faster R-CNN 中的 anchor 有 3 种不同的尺度 { 128 × 128 , 256 × 256 , 512 × 512 } \{128 \times 128,256×256,512×512\} { 128×128,256×