更快的 R-CNN:利用区域建议网络实现实时物体检测》翻译
- 1 引言
- 2 相关工作
-
3 Faster R-CNN
- 3.1.1 Anchors
- 3.1.2 损失函数
- 3.1.3 训练RPN
- 3.1 区域生成网络
- 3.2 RPN和Fast R-CNN的共享功能
- 3.3 实现细节
-
4 实验
- 4.1 PASCAL VOC的实验
- 4.2 MS COCO实验
- 4.3 从MS COCO到PASCAL VOC
- 5 结论
F a s t e r R − C N N : T o w a r d s R e a l − T i m e O b j e c t D e t e c t i o n Faster\ _{}R-CNN: Towards\ _{}Real-Time\ _{}Object\ _{}Detection Faster R−CNN:Towards Real−Time Object Detection
w i t h R e g i o n P r o p o s a l N e t w o r k s with \ _{}Region\ _{}Proposal\ _{}Networks with Region Proposal Networks
S h a o q i n g R e n , K a i m i n g H e , R o s s G i r s h i c k , a n d J i a n S u n Shaoqing\ _{}Ren, Kaiming\ _{}He, Ross\ _{}Girshick, and\ _{}Jian\ _{}Sun Shaoqing Ren,Kaiming He,Ross Girshick,and Jian Sun
F a s t e r R − C N N : 基 于 区 域 生 成 网 络 的 实 时 目 标 检 测 Faster\ _{}R-CNN:基于区域生成网络的实时目标检测 Faster R−CNN:基于区域生成网络的实时目标检测
摘要:最新的目标检测网络依靠候选区域算法来假设目标的位置。 SPPnet[1]和Fast R-CNN[2]等研究的进展减少了这些检测网络的运行时间,暴露了候选区域计算的瓶颈。在这项工作中,我们引入了一个区域生成网络(RPN),与检测网络共享完整图像的卷积特征,从而实现几乎不需要代价的候选区域。 RPN是一个完全卷积的网络,可以同时预测每个位置的目标边界和目标得分。对RPN进行了端到端的训练以生成高质量的候选区域,Fast R-CNN使用这些候选区域进行检测。通过共享RPN和Fast R-CNN的卷积特征,我们将RPN和Fast R-CNN进一步合并为一个网络——使用最近流行的带有“注意力”机制的神经网络术语,RPN组件告诉统一网络在哪里寻找。对于非常深的VGG-16模型[3],我们的检测系统在GPU上具有5fps(包括所有步骤)的帧频,同时在PASCAL VOC 2007、2012和MS COCO数据集上,每个图像仅包含300个候选框。在ILSVRC和COCO 2015竞赛中,Faster R-CNN和RPN是在多个赛道中获得第一名的作品的基础。代码已公开提供。
关键词:目标检测,候选区域,卷积神经网络
候选区域方法(region proposal methods)(例如[4])和基于区域的卷积神经网络(RCNN)[5]的成功推动了目标检测的最新进展。尽管基于区域的CNN在计算上很昂贵,如最初在[5]中开发的,但由于在候选框之间共享卷积,因此其成本已大大降低[1],[2]。最近的典型,Faster R-CNN [2],在忽略候选区域花费的时间的情况下,使用非常深的网络实现了近乎实时的速度[3]。现在,候选框是最先进的检测系统中测试时间计算的瓶颈。
候选区域方法通常依赖廉价的特征和经济的推理方案。选择性搜索[4]是最流行的方法之一,它根据设计的底层特征贪婪地合并超像素。然而,与有效的检测网络相比[2],选择性搜索的速度要慢一个数量级,在CPU实现中每幅图像2秒。 EdgeBoxes [6]当前提供候选框质量和速度之间的最佳权衡,每张图像0.2秒。尽管如此,候选区域步骤仍然消耗与检测网络一样多的运行时间。
可能有人会注意到,基于区域的快速CNN充分利用了GPU的优势,而研究中使用的候选区域方法是在CPU上实现的,因此这种运行时间的比较是不公平的。加速候选框计算的一种明显方法是为GPU重新实现。这可能是一种有效的工程解决方案,但是重新实现会忽略下游的检测网络,因此会错过共享计算的重要机会。
在本文中,我们证明了算法上的改变(使用深度卷积神经网络来计算候选框)会带来一种简洁而有效的解决方案,考虑到检测网络的计算,候选框的计算几乎是不需要代价的。为此,我们介绍了与最先进的目标检测网络共享卷积层的新的区域生成网络(RPN)[1],[2]。通过在测试时共享卷积,计算候选框的边际成本很小(例如,每张图片10毫秒)。
我们的观察是基于区域的检测器(如Fast R-CNN)使用的卷积特征图也可用于生成候选区域。在这些卷积特征之上,我们通过添加一些其他卷积层来构造RPN,这些卷积层同时回归在常则网格上的每个位置的区域边界和客观性得分。因此,RPN是一种全卷积网络(FCN)[7],可以专门针对生成检测候选框的任务进行端到端训练。
RPN旨在以各种尺度和纵横比有效预测候选区域。与使用图像金字塔(图1,a)或过滤器金字塔(图1,b)的流行方法[8],[9],[1],[2]相比,我们引入了新的“anchor”框可以在多个尺度和纵横比下用作参考。我们的方案可以看作是回归参考的金字塔(图1,c),它避免了枚举具有多种尺度或纵横比的图像或过滤器。当使用单尺度图像进行训练和测试时,该模型表现良好,从而提高了运行速度。
为了将RPN与Fast R-CNN [2]目标检测网络统一起来,我们提出了一种训练方案,该方案在对在候选区域任务进行微调与对目标检测进行微调之间交替,同时保持候选框不变。该方案可以快速收敛并生成具有在两个任务之间共享的卷积特征的统一网络。
我们在PASCAL VOC检测基准[11]上全面评估了我们的方法,其中具有Fast R-CNN的RPN产生的检测精度要优于具有Fast R-CNN的选择性搜索的强基准。同时,我们的方法在测试时几乎免除了选择性搜索的所有计算负担——候选框的有效运行时间仅为10毫秒。使用昂贵的非常深的模型[3],我们的检测方法在GPU上仍然具有5fps的帧速率(包括所有步骤),因此从速度和准确性方面来说是实用的目标检测系统。我们还报告了MS COCO数据集的结果[12],并使用COCO数据研究了PASCAL VOC的改进。代码已在https://github.com/shaoqingren/faster_ rcnn(MATLAB)和https://github.com/rbgirshick/py-faster-rcnn(Python)中公开提供。
该手稿的初步版本先前已发布[10]。从那时起,RPN和Faster R-CNN的框架已被采用并推广到其他方法中,例如3D目标检测[13],基于部件的检测[14],实例分割[15]和图像描述[16]。我们快速有效的目标检测系统也已经建立在商业系统中,例如Pinterests [17],据报道用户参与度有所提高。
在ILSVRC和COCO 2015竞赛中,Faster R-CNN和RPN是ImageNet检测、ImageNet定位,COCO检测和COCO分割中几个第一名的基础[18]。 RPN完全学会了根据数据候选区域,因此可以很容易地从更深、更具表现力的特征(例如[18]中采用的101层残差网络)中受益。在这些比赛中,其他一些领先的参赛者也使用了Faster R-CNN和RPN。这些结果表明,我们的方法不仅是一种经济实用的解决方案,而且是提高目标检测精度的有效途径。
目标候选框(Object Proposals)。 关于目标候选方法的文献很多。可以在[19],[20],[21]中找到目标候选方法的综合研究和比较。广泛使用的目标候选方法包括基于超像素分组的方法(例如,选择性搜索[4],CPMC [22],MCG [23])和基于滑动窗口的方法(例如,窗口中的目标[24],EdgeBoxes [ 6])。采用目标候选方法作为独立于检测器的外部模块(例如,选择性搜索[4]目标检测器,RCNN [5]和Fast R-CNN [2])。
用于目标检测的深度网络(Deep Networks for Object Detection)。 R-CNN方法[5]端到端训练CNN将候选区域分类为目标类别或背景。 R-CNN主要充当分类器,它不预测目标边界(通过边界框回归进行精炼除外)。它的准确性取决于区域候选模块的性能(请参见[20]中的比较)。几篇论文提出了使用深度网络预测目标边界框的方法[25],[9],[26],[27]。在OverFeat方法[9]中,训练了一个全连接层来预测假设单目标的定位任务的框坐标。然后将全连接层转换为卷积层,以检测多个类特定的目标。 MultiBox方法[26],[27]从网络中生成候选区域,该网络的最后一个全连接层同时预测多个与类别无关的框,从而概括了OverFeat的“single-box”方式。这些与类别无关的框用作R-CNN的候选框[5]。与我们的全卷积方案相比,MultiBox生成网络适用于单幅图像作物或多个大图像作物(例如224×224)。 MultiBox在候选框和检测网络之间不共享特征。我们稍后将在我们的方法中更深入地讨论OverFeat和MultiBox。与我们的工作同时,开发了DeepMask方法[28],用于学习分割候选框。
卷积[9],[1],[29],[7],[2]的共享计算已吸引了越来越多的关注,来进行有效而准确的视觉识别。 OverFeat论文[9]从图像金字塔计算卷积特征,以进行分类、定位和检测。共享卷积特征图上的自适应大小池化(SPP)[1]被开发用于有效的基于区域的目标检测[1],[30]和语义分割[29]。 Fast R-CNN [2]可以对共享卷积特征进行端到端检测器训练,并显示出令人信服的准确性和速度。
我们的目标检测系统称为Faster R-CNN,由两个模块组成。第一个模块是候选区域的深度全卷积网络,第二个模块是使用候选区域的Fast R-CNN检测器[2]。整个系统是用于目标检测的单个统一网络(图2)。 RPN模块使用最近流行的带有“注意力” [31]机制的神经网络术语,可以告诉Fast R-CNN模块在哪里寻找。在第3.1节中,我们介绍了用于候选区域的网络的设计和属性。在第3.2节中,我们开发了用于训练具有共享特征的两个模块的算法。
3.1 区域生成网络
区域生成网络(RPN)接收(任意大小的)图像作为输入,并输出一组矩形的目标候选框,每个候选框均具有客观得分。我们使用全卷积网络对该过程进行建模[7],我们将在此部分进行描述。因为我们的最终目标是与Fast R-CNN目标检测网络共享计算[2],所以我们假设两个网络共享一组共同的卷积层。在我们的实验中,我们研究了具有5个可共享卷积层的Zeiler和Fergus模型[32](ZF),以及具有13个可共享卷积层的Simonyan和Zisserman模型[3](VGG-16)。
为了生成候选区域,我们在最后共享的卷积层输出的卷积特征图上滑动一个小型网络。这个小型网络将输入卷积特征图的n×n空间窗口作为输入。每个滑动窗口都映射到一个较低维的特征(ZF为256维,VGG为512维,后面是ReLU [33])。此特征被喂入两个同级的全连接层——框回归层(reg)和框分类层(cls)。在本文中,我们使用n = 3,注意输入图像上的有效感受野很大(ZF和VGG分别为171和228像素)。在图3的单个位置(左)显示了此微型网络。请注意,由于微型网络以滑动窗口的方式运行,因此全连接层将在所有空间位置上共享。自然地,该架构由n×n卷积层和两个同级1×1卷积层(分别用于reg和cls)实现。
3.1.1 Anchors
在每个滑动窗口位置,我们同时预测多个候选区域,其中每个位置的最大可能候选框数目表示为k。因此,reg层有4k个输出,对k个框的坐标进行编码,而cls层则输出2k个得分,这些得分评估每个候选框的目标或非目标的概率。相对于k个参考框(称为anchor),对k个候选框进行了参数化。anchor位于相关滑动窗口的中心,并与尺度和长宽比相关(图3,左)。默认情况下,我们使用3个尺度和3个纵横比,在每个滑动位置产生k = 9个anchor。对于大小为W×H(通常约为2400)的卷积特征图,总共有WHk个anchor。
平移不变的anchor
我们的方法的一个重要特性是,在anchor和计算相对于anchor的候选框的函数方面,它都是平移不变的。如果平移了图像中的一个目标,则该候选框应进行平移,并且相同的函数应能够在任一位置预测该候选框。此平移不变性由我们的方法保证。作为比较,MultiBox方法[27]使用k均值生成800个不是平移不变的anchor。因此,MultiBox不保证平移目标时会生成相同的候选框。
平移不变性还减小了模型大小。 MultiBox具有(4 +1)×800维的全连接输出层,而在k = 9 anchor的情况下,我们的方法具有(4 + 2)×9维的卷积输出层。结果,我们的输出层具有
2.8
×
1
0
4
2.8×10^4
2.8×104个参数(VGG-16为512×(4 + 2)×9),比具有
6.1
×
1
0
6
6.1×10^6
6.1×106个参数(1536×(4 + 1)× 800 适用于MultiBox [27]中的GoogleNet [34])。如果考虑特征投影层,我们的候选层的参数仍然比MultiBox少一个数量级。我们希望我们的方法在较小的数据集(如PASCAL VOC)上有较小的过拟合风险。
多尺度anchor作为回归参考
我们anchor的设计提出了一种解决多种尺度(和纵横比)的新方案。如图1所示,有两种流行的多尺度预测方法。第一种方法是基于图像/特征金字塔的,例如在DPM [8]和基于CNN的方法[9],[1],[2]中。图像会在多尺度上调整大小,并针对每个尺度计算特征图(HOG [8]或深度卷积特征[9],[1],[2])(图1(a))。这种方法通常有用但很费时。第二种方法是在特征图上使用多个尺度(和/或纵横比)的滑动窗口。例如,在DPM [8]中,使用不同大小的滤波器(例如5×7和7×5)分别训练不同长宽比的模型。如果使用这种方法处理多个尺度,则可以将其视为“滤波器金字塔”(图1(b))。第二种方法通常与第一种方法一起使用[8]。
相比之下,我们基于anchor的方法是构建anchor金字塔,这更具成本效益。我们的方法参照多个尺度和纵横比的anchor box对边界框进行分类和回归。它仅依赖单一尺度的图像和特征图,并使用单一大小的滤波器(在特征图上滑动窗口)。我们通过实验证明了该方案对解决多种尺度和尺寸的影响(表8)。
由于基于anchor的这种多尺度设计,我们可以在单尺度图像上简单地使用卷积特征计算,正如Fast R-CNN检测器所做的那样[2]。多尺度anchor的设计是共享特征而无需花费额外代价解决尺度的关键组成部分。
3.1.2 损失函数
为了训练RPN,我们为每个anchor分配一个二进制类标签(无论是不是目标)。我们为两种anchor分配一个正标签:(i)与地面真实框重叠中具有最高的交并比(IoU)的anchor,或(ii)与地面真实框重叠中具有高于0.7IoU的anchor。请注意,单个地面真实框可能为多个anchor分配正标签。通常,第二个条件足以确定正样本。但是我们仍然采用第一个条件是因为在极少数情况下,第二个条件可能找不到正样本。如果所有地面真实框的IoU值均低于0.3,则为非正anchor分配负标签。既非正也非负的anchor对训练目标没有帮助。
通过这些定义,我们在Fast R-CNN [2]中将多任务损失之后的目标函数减至最小。我们对图像的损失函数定义为:
L
(
{
p
i
}
,
{
t
i
}
)
=
1
N
c
l
s
∑
i
L
c
l
s
(
p
i
,
p
i
∗
)
+
λ
1
N
r
e
g
∑
i
p
i
∗
L
r
e
g
(
t
i
,
t
i
∗
)
L\left ( \left \{ p_{i} \right \}, \left \{ t_{i}\right \} \right )=\frac{1}{N_{cls}}\sum _{i}L_{cls}\left (p_{i}, p_{i}^{*} \right )+\lambda \frac{1}{N_{reg}}\sum _{i} p_{i}^{*}L_{reg}\left (t_{i}, t_{i}^{*} \right )
L({pi},{ti})=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,ti∗)
在这里,
i
i
i是小批量中anchor的索引,而
p
i
p_{i}
pi是anchor
i
i
i作为目标的预测概率。如果anchor为正,则地面真实标签
p
i
∗
p_{i}^*
pi∗为1;如果anchor为负,则为0。
t
i
t_{i}
ti是代表预测边界框的4个参数化坐标的向量,而
t
i
∗
t_{i}^*
ti∗是与正的anchor关联的地面真实框的参数化坐标。两类(目标与非目标)的分类损失
L
c
l
s
L_{cls}
Lcls是对数损失。对于回归损失,我们使用
L
r
e
g
(
t
i
,
t
i
∗
)
=
R
(
t
i
−
t
i
∗
)
L_{reg}\left (t_{i}, t_{i}^{*} \right )= R\left (t_{i}-t_{i}^{*} \right )
Lreg(ti,ti∗)=R(ti−ti∗),其中
R
R
R是在[2]中定义的鲁棒损失函数(平滑L1)。术语
p
i
∗
L
r
e
g
p_{i}^*L_{reg}
pi∗Lreg表示仅对正的anchor(
p
i
∗
p_{i}^*
pi∗ = 1)激活回归损失,否则就禁用(
p
i
∗
p_{i}^*
pi∗ = 0)。cls和reg层的输出分别由
{
p
i
}
\left \{p_{i}\right \}
{pi}和
{
t
i
}
\left \{t_{i}\right \}
{ti}组成。
两项通过
N
c
l
s
N_{cls}
Ncls和
N
r
e
g
N_{reg}
Nreg归一化,并通过平衡参数
λ
λ
λ加权。在我们当前的实现中(如在已发布的代码中),等式(1)中的
c
l
s
cls
cls项通过小批量尺寸(即
N
c
l
s
=
256
N_{cls} = 256
Ncls=256)进行归一化,而
r
e
g
reg
reg项通过anchor位置的数量(即,
N
r
e
g
〜
2
,
400
N_{reg}〜2,400
Nreg〜2,400)。默认情况下,我们将
λ
λ
λ设置为10,因此
c
l
s
cls
cls和
r
e
g
reg
reg项的权重大致相等。我们通过实验表明,结果对广泛范围内的
λ
λ
λ值不敏感(表9)。我们还注意到,上面的标准化不是必需的,可以简化。
对于边界框回归,我们采用如下的4个坐标的参数化[5]:
t
x
=
(
x
−
x
a
)
/
w
a
,
t
y
=
(
y
−
y
a
)
/
h
a
t
w
=
l
o
g
(
w
/
w
a
)
,
t
h
=
l
o
g
(
h
/
h
a
)
t
x
∗
=
(
x
∗
−
x
a
)
/
w
a
,
t
y
∗
=
(
y
∗
−
y
a
)
/
h
a
t
w
∗
=
l
o
g
(
w
∗
/
w
a
)
,
t
h
∗
=
l
o
g
(
h
∗
/
h
a
)
\begin{matrix} t_{x}=(x-x_{a})/w_{a},t_{y}=(y-y_{a})/h_{a}\ _{}\ _{}\\ t_{w}=log(w/w_{a}),t_{h}=log(h/h_{a})\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{} \\ t_{x}^{*}=(x^{*}-x_{a})/w_{a},t_{y}^{*}=(y^{*}-y_{a})/h_{a} \\ t_{w}^{*}=log(w^{*}/w_{a}),t_{h}^{*}=log(h^{*}/h_{a})\ _{}\ _{}\ _{}\ _{}\ _{} \end{matrix}
tx=(x−xa)/w