Faster R-CNN论文阅读
摘要
本篇博客介绍了 Faster R-CNN,这是一种双阶段的目标检测网络,是对 Fast R-CNN 的改进。为了解决 Fast R-CNN 中,计算效率低和区域推荐算法耗时长的问题,Faster R-CNN 提出了区域推荐的方法:Region Proposal Network(RPN),这种方法代替了传统的区域推荐算法。RPN 与 Fast R-CNN 共享卷积特征,减少了计算量,大幅提高了目标检测的速度,准确率也达到了新的高度。但它也存在一些不足,例计算复杂度较高、对小目标和遮挡目标的检测效果有限、训练时间较长以及超参数调优复杂。
Abstract
This blog introduces Faster R-CNN, a two-stage object detection network that improves upon Fast R-CNN. To address the issues of low computational efficiency and time-consuming region proposal algorithms in Fast R-CNN, Faster R-CNN proposes a novel region proposal method: the Region Proposal Network (RPN), which replaces traditional region proposal algorithms. By sharing convolutional features with Fast R-CNN, RPN reduces computational overhead, significantly enhances the speed of object detection, and achieves new heights in accuracy. However, it also has some limitations, such as high computational complexity, limited effectiveness in detecting small and occluded objects, lengthy training times, and complex hyperparameter tuning.
文章简介
Title:Faster R-CNN
Author:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
URL:https://arxiv.org/abs/1506.01497
1. 引言
在 Faster R-CNN 算法的提出之前,最先进的目标检测算法依赖region proposal算法和 RCNN 网络。在 R-CNN 和 Fast R-CNN 中都是用selective search 的 region proposal 算法来生成候选区域的,Fast R-CNN通过引入 RoI Pooling 来避免大量的重复计算,从而显著提升了网络速度,而并没有解决 region proposal 算法耗时长的问题。Faster R-CNN 在 Fast R-CNN 的基础上提出了Region Propose Network(RPN)来生成候选区域,RPN 与检测网络共享图像卷积特征,只需非常少额外时间来生成候选区域。
2. Faster R-CNN 框架
Faster R-CNN 在 Fast R-CNN 的基础上,将 selective search 算法换成了 RPN 。Faster R-CNN的 backbone 还是 VGG16,卷积层生成的特征图分别送入 RPN和 RoI pooling层, 其中RPN用来产生候选区域并与特征图一起送入RoI Pooling层。后面的分类和边界款回归与Fast R-CNN的一样。
2.1 RPN
RPN 的输入是由 backbone (文中的backbone用了两种:ZF和VGG16)提取到的特征图,输出为一系列候选区域,每个候选区域包含一个边界框和一个得分(表示该区域包含目标的可能性)。
上图中的 256-d 是由 ZF 网络对原图进行特征提取后的特征图的通道数,对于不同的backbone特征提取网络,其通道数可能不一样,如VGG16的特征图通道数是256-d。
RPN 使用3*3的卷积核对特征图进行滑动窗口式的处理,之后分别通过两个 1 ∗ 1 1*1 1∗1 的卷积层,其中一个用于生成2K个得分,另外一个用于生成4K个边界框偏移量。
3 ∗ 3 3*3 3∗3卷积会遍历整个特征图,对于特征图中的每个点都会分配 K 个 anchor ,这些anchor就是初始检测框。原文中的 K 设置为9(有三种比例和是那种尺度)。每个anchor对应两个概率,前景和背景的概率,每个anchor有四个位置参数,左上角和右下角的坐标,对于每个anchor都要预测边界框的偏移量,所以边界框回归有4K个输出。
这里为何用两个并行的 1 ∗ 1 1*1 1∗1的卷积而不用全连接操作。
卷积操作可以保持特征图的空间结构,为每个位置生成多个anchor的类别得分和边界框偏移量。
原文中设置的anchor的长宽比有三种:{1:1,1:2,2:1},尺度也有三种,所以K是9,因此分类层经过卷积后有 2 ∗ 9 = 18 2*9=18 2∗9=18个通道,边界框回归层经过卷积层有 4 ∗ 9 = 36 4*9=36 4∗9=36个通道。
proposal层是为了生成region proposal,先按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的positive anchors;然后限定超出图像边界的positive anchors为图像边界,并剔除尺寸非常小的positive anchors;最后对剩余的positive anchors进行NMS。
其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。
对于anchor,文中提到一个问题,有些anchor的尺寸比滑动窗口在原图中的感受野要大,为什么能够预测比感受野大的边界框呢?
通过一个小的感受野来预测比感受野大的目标的边界框是有可能的,当看到目标的一部分的时候也能粗略的预测出目标完整的位置区域。 这在实际使用中也使用中也是有效的。
2.2 损失函数
训练RPN时,每个anchor有一个二分类的类别标签(前景或背景)。与真实边界框具有最高交并比的anchor和与某真实边界框的IoU大于0.7的 anchor 作为正样本,类别标签为1,表示前景;与所有真实边界框的交并比都小于0.3的anchor作为负样本,类别标签为0,表示背景。注意:anchor是在原图上的,也是在原图上与真实边界框求的交并比。
在一张图像上的损失函数为:
其中, i i i是anchor的索引, p i p_i pi表示anchor i 区域是前景的预测概率, p i ∗ p_i^* p