系列文章目录
目标检测之RCNN:
OD-Model【1】:R-CNN
目标检测之Fast RCNN:
OD-Model【2】:Fast R-CNN
目标检测之Faster RCNN:
OD-Model【3】:Faster R-CNN
文章目录
前言
本文主要对论文进行解读,并解释有关Faster RCNN框架的部分
原论文链接
Towards Real-Time Object Detection with Region Proposal Networks
1. Abstract & Introduction
1.1. Abstract
最先进的目标检测网络依靠区域提出算法来假设目标的位置。SPPnet和Fast R-CNN等研究已经减少了这些检测网络的运行时间,使得区域提出计算成为一个瓶颈。在这项工作中,我们引入了一个区域提出网络(Region Proposal Net),该网络与检测网络共享全图像的卷积特征,从而使近乎零成本的区域提出成为可能。RPN是一个全卷积网络,可以同时在每个位置预测目标边界和目标分数。RPN经过端到端的训练,可以生成高质量的区域提出,由Fast R-CNN用于检测。我们将RPN和Fast R-CNN通过共享卷积特征进一步合并为一个单一的网络——使用最近流行的具有“注意力”机制的神经网络术语,RPN组件告诉统一网络在哪里寻找。
1.2. Introduction
区域提议方法通常依赖廉价的特征和简练的推断方案。选择性搜索(SS)是最流行的方法之一,它贪婪地合并基于设计的低级特征的超级像素。然而,与有效的检测网络相比,选择性搜索速度慢了一个数量级,在CPU实现中每张图像的时间为2秒。
本文展示了算法的变化:用深度卷积神经网络计算区域提议,导致了一个优雅和有效的解决方案,其中在给定检测网络计算的情况下区域提议计算接近领成本。为此,我们引入了新的区域提议网络(RPN),它们共享最先进目标检测网络的卷积层。通过在测试时共享卷积,计算区域提议的边际成本很小。
基于区域的检测器所使用的卷积特征映射,如Fast R-CNN,也可以用于生成区域提议。在这些卷积特征之上,我们通过添加一些额外的卷积层来构建RPN,这些卷积层同时在规则网格上的每个位置上回归区域边界和目标分数。因此RPN是一种全卷积网络(FCN),可以针对生成检测区域建议的任务进行端到端的训练。
RPN旨在有效预测具有广泛尺度和长宽比的区域提议。与使用图像金字塔 ( a ) 或滤波器金字塔 ( b ) 的流行方法相比,我们引入新的“锚”盒作为多种尺度和长宽比的参考。我们的方案可以被认为是回归参考金字塔 ( c ) ,它避免了枚举多种比例或长宽比的图像或滤波器。这个模型在使用单尺度图像进行训练和测试时运行良好,从而有利于运行速度。
为了将RPN与Fast R-CNN 2]目标检测网络相结合,我们提出了一种训练方案,在微调区域提议任务和微调目标检测之间进行交替,同时保持区域提议的固定。该方案快速收敛,并产生两个任务之间共享的具有卷积特征的统一网络。
2. Faster R-CNN
2.1. Algorithm Process
Faster R-CNN算法流程可分为3个步骤:
- 将图像输入特征提取网络(backbone)得到相应的 特征图
- 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的 特征矩阵
- 将每个特征矩阵通过RoI pooling层缩放到 7 x 7 大小的特征图 ,接着将特征图展平通过一系列全连接层得到预测结果
Faster R-CNN = RPN + Fast R-CNN
2.2. RPN
2.2.1. Architecture
区域提议网络(RPN)以任意大小的图像作为输入,输出一组矩形的目标提议,每个提议都有一个目标得分。
在特征图上使用滑动窗口,每滑动到一个位置,就生成一个一维的向量。在这个向量的基础上,通过两个全连接层,分别去输出目标概率,以及边界框回归参数。
- 一个向量针对每个anchor都生成2个概率,一个是为背景的概率,一个是为前景的概率
- 一个向量针对每个anchor都生成4个边界框回归参数
滑动窗口生成的一维向量的元素个数与backbone的channel数有关
- ZF:256
- VGG16:512
2.2.2. Anchor box
- 对于特征图上的每个 3x3 的滑动窗口,计算出滑动窗口中心点对应原始图像上的中心点,并计算出k个 anchor boxes(注意和proposal的差异)。
- 在原图上找特征图上滑动窗口的中心点的对应点
- 假设原图左上角为坐标原点,沿宽的方向是x周,沿高的方向是y轴
- 使用原图的宽度除以特征图的宽度(向上取整),得到一个stride
- 那么,滑动窗口的中心点在原图上的x坐标即: 滑动窗口的中心点在特征图上到左边界的距离 x stride
- 使用原图的高度除以特征图的高度(向上取整),得到一个stride
- 对应的, 滑动窗口的中心点在原图上的y坐标即: 滑动窗口的中心点在特征图上到上边界的距离 x stride
- 通过滑动窗口生成的2k个score,以及4k个coordinates影响anchor
- 2k个score,每2个一组
- 假设第一组参数对应的是左图中的anchor(黄色框)
- 第一个值为预测anchor是背景的概率,第二个值为预测anchor是检测到的目标的概率
- 需要注意的是,这里仅预测是前景还是背景,并没有进行分类
- 4k个coordinates,每4个为一组
- d x , d y d_x, d_y dx,dy,anchor中心坐标预测的偏移量
- d w , d h d_w, d_h dw,dh,anchor高度和宽度的调整
- anchor经过边界框回归参数的调整后,尽可能的符合实际情况
- 每一组参数,都对应着同一个中心点的,一个anchor
- 这一系列anchor的长宽比并不相同
- 所需检测的目标,大小不同
- Anchor大小和比例的选择
- 每个位置(每个滑动窗口)在原图上都对应
3
×
3
=
9
3 \times 3 = 9
3×3=9个anchor(经验所得)
- 三种尺度(在原图上的面积,即检测框覆盖的范围)
- 12 8 2 , 25 6 2 , 51 2 2 128^2, 256^2, 512^2 1282,2562,5122
- 三种比例
- 1 : 1 , 1 : 2 , 2 : 1 1:1, 1:2, 2:1 1:1,1:2,2:1
- 三种尺度(在原图上的面积,即检测框覆盖的范围)
- 3 x 3 滑动窗口在原图上的感受野
- 不同的backbone
- ZF:171
- VGG6:228
- 较小的感受野能预测较大的边界框的原因
- (经验所得)观测物体的一部分,也是能够辨别出该对应的物体
- 不同的backbone
- 对于一张 1000 × 600 × 3 1000 \times 600 \times 3 1000×600×3 的图像,大约有 60 × 40 × 9 60 \times 40 \times 9 60×40×9 个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。RPN生成的候选框之间存在大量重叠,给予候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。
2.2.3. Sliding window
使用 3 × 3 3 \times 3 3×3 的卷积层进行处理, s t r i d e = 1 stride = 1 stride=1, p a d d i n g = 1 padding = 1 padding=1,这样,滑动窗口就能覆盖到conv feature map的每一个元素。得到的新的特征矩阵的shape和conv feature map一摸一样(深度一样是因为有256个 3 × 3 × 256 3 \times 3 \times 256 3×3×256的卷积核)。之后在所得到的特征矩阵上,并联两个 1 × 1 1 \times 1 1×1 的卷积层,来实现对类别的预测和对边界框回归参数的预测。
- 对类别的预测,采用 k e r n e l s i z e = 1 kernel_{size} = 1 kernelsize=1,卷积核个数为2k的卷积层来处理
- 对边界框回归参数的预,采用
k
e
r
n
e
l
s
i
z
e
=
1
kernel_{size} = 1
kernelsize=1,卷积核个数为4k的卷积层来处理
2.2.4. Training sample
定义正样本:
- anchor / anchors 与我们某一个标注的准确的目标边界框(ground-truth box)有最大的IoU,我们将这个anchor / anchors指定为正样本。(对第二个条件的补充,正常情况下靠第二个条件就能够生成正样本了)
- 与标注的准确的目标边界框(ground-truth box)之间的IoU大于0.7,那么这个anchor就是一个正样本
定义负样本:
与所有的标注的准确的目标边界框(ground-truth box)之间的IoU小于0.3,我们将这个anchor定义为负样本。
此时所做的工作,就是在anchor分配标签Ground-Truth box
对于正样本和负样本之外的anchor,即 ( 0.3 , 0.7 ) (0.3, 0.7) (0.3,0.7) 我们全部丢弃。
从所有正样本中随机采样128个,再从所有负样本中随机采样128个,正样本和负样本之间的比例关系为 1 : 1 1:1 1:1。但假如正样本的个数不足128,那么就会继续从负样本中进行随机采样,保证总数始终为256.
2.2.5. RPN Multi-task loss
- 分类损失
- 参数
- p i p_i pi 表示第i个anchor目标的预测概率
-
p
i
∗
p_i^*
pi∗ (真实标签)当为正样本时为1,当为负样本时为 0
- 这里的分类损失只是针对前景背景的识别损失
- RPN不做真正的分类
- L c l s L_{cls} Lcls (分类损失)是两个类别上(目标或不是目标)的对数损失。
- N c l s N_{cls} Ncls 表示一个mini - batch中的所有样本数量256
- 计算
- 分类损失使用 softmax cross entropy
- 以第一组数据为例,第一个数据是对应为背景的概率,第二个数据是对应为目标的概率,真实标签为1,即anchor内部有待检测的目标
- L c l s = − l n ( 0.9 ) L_{cls} = -ln(0.9) Lcls=−ln(0.9)
- 以第二组数据为例,第一个数据是对应为背景的概率,第二个数据是对应为目标的概率,真实标签为0,即anchor内部为背景
- L c l s = − l n ( 0.2 ) L_{cls} = -ln(0.2) Lcls=−ln(0.2)
- 以第一组数据为例,第一个数据是对应为背景的概率,第二个数据是对应为目标的概率,真实标签为1,即anchor内部有待检测的目标
- 分类损失使用 binary cross entropy
- 此时应为k个scores,而不是2k个scores。每个anchor只预测一个值
- 此时每个值是通过sigmoid函数得到的概率
- 如果这个值趋近于0,代表这个对象是背景;如果趋近于1,代表这个对象是待分类的目标
- 分类损失使用 softmax cross entropy
- 参数
- 边界框回归损失
- 参数
- t i t_i ti 表示预测第i个anchor的边界框回归参数
- t i ∗ t_i^* ti∗ 表示第i个anchor对应的Ground-Truth Box的边界框回归参数
- p i ∗ L r e g p_i^* L_{reg} pi∗Lreg 表示回归损失仅对于正锚点激活,否则被禁用( p i ∗ = 0 p_i^* = 0 pi∗=0)
-
N
r
e
g
N_{reg}
Nreg 表示anchor位置的个数(不是anchor个数)约2400
- feature map上每一个元素(小方块),代表一个anchor的位置
- λ \lambda λ 加权平衡参数 ,通常为10
- 计算
- 各框之间的转化关系
- 各框之间的转化关系
- 参数
2.3. Faster R-CNN训练
- 直接采用 RPN Loss+ Fast + R-CNN Loss 的联合训练方法(损失相加进行反向传播)
- 论文中采用分别训练 RPN 以及 Fast R-CNN 的方法
- 利用 ImageNet 预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;
- 固定 RPN 网络独有的卷积层以及全连接层参数,再利用 ImageNet 预训练分类模型初始化前置卷积网络参数,并利用RPN 网络生成的目标建议框去训练 Fast RCNN 网络参数。
- 固定利用 Fast RCNN 训练好的前置卷积网络层参数,去微调 RPN 网络独有的卷积层以及全连接层参数。
- 同样保持固定前置卷积网络层参数,去微调 Fast RCNN 网络的全连接层参数。最后 RPN 网络与 Fast RCNN 网络共享前置卷积网络层 参数,构成一个统一网络。