CornerNet: Detecting Objects as Paired Keypoints
论文内容详细整理 !!! 理解CornerNet,看这一篇就够了~
论文链接:https://arxiv.org/abs/1808.01244
代码链接:https://github.com/umich-vl/CornerNet
摘要
我们提出了一种新的目标检测方法,使用单个卷积神经网络将目标边界框检测为一对关键点(即边界框的左上角和右下角)。通过将目标检测为成对关键点,我们消除了现有的one stage检测器设计中对一组anchors的需要。除了上述新颖的构想,文章还引入了corner pooling,这是一种新型的池化层,可以帮助网络更好地定位边界框的角点。CornerNet在MS COCO上实现了42.1%的AP,优于所有现有的one stage检测器。
1 介绍
基于卷积神经网络的对象检测器(ConvNets)[20,36,15]已经在各种具有挑战性的基准测试中取得了最新成果[24,8,9]。现有技术方法的一个共同组成部分是anchor boxes[32,35],它们是包含各种尺寸和宽高比的矩形框,是用作检测的候选框。anchor boxes广泛用于one stage检测器[25,10,31,23],它可以获得与two stage检测器高度相当的结果[32,12,11,13],同时效率更高。 one stage检测器将anchor boxes密集地分布在图像上,通过对anchor boxes进行评分,并通过回归来改进其坐标来生成最终的边界框预测。
但anchor boxes的使用有两个缺点。 首先,我们通常需要一组非常大的anchor boxes,例如: 在DSSD[10]中超过4万,在RetinaNet[23]中超过10万, 这是因为训练器被训练以分类每个anchor boxes是否与ground truth充分重叠,并且需要大量anchor boxes以确保与大多数ground truth充分重叠。 结果,只有一小部分anchor boxes与ground truth重叠; 这在正负样本之间造成了巨大的不平衡,减慢了训练速度[23]。
其次,anchor boxes的使用引入了许多超参数和设计选择。 这些包括多少个box,大小和宽高比。 这些选择主要是通过ad-hoc启发式方法进行的,并且当与多尺度架构相结合时可能会变得更加复杂,其中单个网络在多个分辨率下进行单独预测,每个尺度使用不同的特征和它自己的一组anchor boxes[25,10,23]。
在本文中,我们介绍了CornerNet,这是一种新的one stage目标检测方法,可以消除anchor boxes。 我们将一个目标物体检测为一对关键点——边界框的左上角和右下角。 我们使用单个卷积网络来预测同一物体类别的所有实例的左上角的热图,所有右下角的热图,以及每个检测到的角点的嵌入向量。 嵌入用于对属于同一目标的一对角点进行分组——训练网络以预测它们的类似嵌入。 我们的方法极大地简化了网络的输出,并且无需设计anchor boxes。我们的方法受到Newell等人在多人姿态估计上下文中关联嵌入的启发[27]。 图1说明了我们方法的整体流程。
图1.我们将一个目标检测为一对组合在一起的边界框角点。 卷积网络输出一个左上角热图和一个右下角热图,并输出每个检测到的角点的嵌入矢量。 训练网络以预测属于同一目标的角点的类似嵌入。
图2.通常没有局部证据来确定边界框角的位置。 我们通过提出一种新类型的池化层来解决这个问题。
CornerNet的另一个新颖组件是corner pooling,这是一种新型的池化层,可帮助卷积网络更好地定位边界框的角点。 边界框的一角通常在目标之外,参考圆形的情况以及图2中的例子。在这种情况下,角点不能根据当前的信息进行定位。相反,为了确定像素位置是否有左上角,我们需要水平地向右看目标的最上面边界,垂直地向底部看物体的最左边边界。 这激发了我们的corner pooling layer:它包含两个特征图; 在每个像素位置,它最大池化从第一个特征映射到右侧的所有特征向量,最大池化从第二个特征映射下面的所有特征向量,然后将两个池化结果一起添加,如图3所示。
图3.Corner pooling: 对于每个通道,我们采用两个方向(红线)的最大值(红点),每个方向都来自一个单独的特征图,并将两个最大值加在一起(蓝点)。
我们假设了两个原因,为什么检测角点会比检测边界框中心或proposals更好。首先,盒子的中心可能更难以定位,因为它取决于目标的所有4个边,而定位角取决于2边,因此更容易,甚至更多的corner pooling,它编码一些明确的关于角点定义的先验信息。 其次,角点提供了一种更有效的方式来密集地离散边界框的空间:我们只需要用 O ( w h ) O(wh) O(wh)角点来表示 O ( w 2 h 2 ) O(w^2h^2) O(w2h2)可能的anchor boxes。
我们证明了CornerNet对MS COCO数据集的有效性。CornerNet实现了42.1%的AP,优于所有现有的one-stage检测器。此外,通过ablation studies(即模型简化测试,去掉该结构的网络与加上该结构的网络所得到的结果进行对比),我们发现Corner pooling对于CornerNet的卓越性能起到至关重要的作用。
2 相关工作
Two-stage目标检测器
Two-stage目标检测由R-CNN首次引入并推广[12]。Two-stage检测器生成一组稀疏的感兴趣区域(RoIs),并通过网络对每个区域进行分类。R-CNN使用低层次视觉算法生成(RoIs)[41,47]。然后从图像中提取每个区域,由ConvNet独立处理,这将导致大量计算冗余。后来,SPP-Net[14]和Fast R-CNN[11]改进了R-CNN,设计了一个特殊的池化层(金字塔池化),将每个区域从feature map中池化。然而,两者仍然依赖于单独的proposals算法,不能进行端到端训练。Faster-RCNN[32]通过引入区域生成网络(RPN)来去除低层次的proposals算法,RPN从一组预先确定的候选框(通常称为anchor boxes)中生成proposals。这不仅使检测器更加高效,通过RPN与检测网络的联合训练,可实现端到端训练。R-FCN[6]将全连接子检测网络替换为完全卷积子检测网络,进一步提高了Faster R-CNN的检测效率。其他的工作主要集中在结合子类别信息[42],用更多的上下文信息在多个尺度上生成目标的proposals[1,3,35,22],选择更好的特征[44],提高速度[21],并行处理和更好的训练过程[37]。
One-stage目标检测器
另一方面,YOLO[30]和SSD[25]推广了one-stage方法,该方法消除了RoI池化步骤,并在单个网络中检测目标。One-stage检测器通常比two-stage检测器计算效率更高,同时在不同的具有挑战性的基准上保持着具有竞争性的性能。
SSD算法将anchor boxes密集地放置在多个尺度的feature maps之上,直接对每个anchor boxes进行分类和细化。YOLO直接从图像中预测边界框坐标,后来在YOLO9000[31]中,通过使用anchor boxes进行了改进。DSSD[10]和RON[19]采用了类似沙漏的网络[28],使它们能够通过跳跃连接将低级和高级特性结合起来,从而更准确地预测边界框。然而,在RetinaNet[23]出现之前,这些one-stage检测器的检测精度仍然落后于two-stage检测器。在RetinaNet[23]中,作者认为密集的anchor boxes在训练中造成了正样本和负样本之间的巨大不平衡。这种不平衡导致训练效率低下,从而导致结果不佳。他们提出了一种新的loss,Focal Loss,来动态调整每个anchor boxes的权重,并说明了他们的one-stage检测器检测性能优于two-stage检测器。RefineDet[45]建议对anchor boxes进行过滤,以减少负样本的数量,并对anchor boxes进行粗略的调整。
DeNet[39]是一种two-stage检测器,不使用anchor boxes就能生成RoIs。它首先确定每个位置属于边界框的左上角、右上角、左下角或右下角的可能性。然后,它通过列举所有可能的角点组合来生成RoI,并遵循标准的two-stage方法对每个RoI进行分类。本文提出的方法和DeNet很不一样。首先,DeNet不识别两个角是否来自同一目标,并依赖子检测网络来拒绝糟糕的RoI。相比之下,我们的方法是一种one-stage方法,使用单个卷积网络来检测和分组角点。其次,DeNet在人工确定的位置上的区域提取特征进行分类,而我们的方法不需要任何特征选择步骤。第三,引入corner pooling,一种新型的用于增强角点检测的layer。
我们的方法受到Newell等人在多人姿态估计上下文中关联嵌入的启发[27]。Newell等人提出了一种在单个网络中检测和分组人类关节的方法。在他们的方法中,每个检测到的人类关节都有一个嵌入向量。这些关节是根据它们嵌入的距离来分组的。本文是第一个将目标检测任务定义为同时检测和分组角点的任务。我们的另一个新颖之处在于corner pooling layer,它有助于更好定位角点。我们还对沙漏结构进行了显著地修改,并添加了新的focal loss[23]的变体,以帮助更好地训练网络。
3 CornerNet
3.1 概述
在CornerNet中,我们将物体边界框检测为一对关键点(即边界框的左上角和右下角)。卷积网络通过预测两组热图来表示不同物体类别的角的位置,一组用于左上角,另一组用于右下角。 网络还预测每个检测到的角的嵌入向量[27],使得来自同一目标的两个角的嵌入之间的距离很小。 为了产生更紧密的边界框,网络还预测偏移以稍微调整角的位置。 通过预测的热图,嵌入和偏移,我们应用一个简单的后处理算法来获得最终的边界框。
图4提供了CornerNet的概述。 我们使用沙漏网络[28]作为CornerNet的骨干网络。 沙漏网络之后是两个预测模块。 一个模块用于左上角,而另一个模块用于右下角。 每个模块都有自己的corner pooling模块,在预测热图、嵌入和偏移之前,池化来自沙漏网络的特征。 与许多其他物体探测器不同,我们不使用不同尺度的特征来检测不同大小的物体。 我们只将两个模块应用于沙漏网络的输出。
图4. CornerNet概述。 骨干网络之后是两个预测模块,一个用于左上角,另一个用于右下角。 使用两个模块的预测,我们定位并分组边界框的角。
3.2 检测角点
我们预测两组热图,一组用于左上角,另一组用于右下角。 每组热图具有C个通道,其中C是分类的数量,并且大小为H×W。 没有背景通道。 每个通道都是一个二进制掩码,用于表示该类的角点位置。
对于每个角点,有一个ground-truth正位置,其他所有的位置都是负值。 在训练期间,我们没有同等地惩罚负位置,而是减少对正位置半径内的负位置给予的惩罚。 这是因为如果一对假角点检测器靠近它们各自的ground-truth位置,它仍然可以产生一个与ground-truth充分重叠的边界框(图5)。我们通过确保半径内的一对点生成的边界框与ground-truth的IoU ≥ t(我们在所有实验中将t设置为0.7)来确定物体的大小,从而确定半径。 给定半径,惩罚的减少量由非标准化的2D高斯 e − x 2 + y 2 2 σ 2 \ e^{-\frac{x^2+y^2}{2σ^2}} e−2σ2x2+y2给出,其中心位于正位置,其 σ σ σ是半径的1/3。
图5.用于训练的“Ground-truth”热图。在正位置半径范围内(橙色圆圈)的方框(绿色虚线矩形)仍然与地ground-truth(红色实心矩形)有很大的重叠。
p
c
i
j
p_{cij}
pcij为预测热图中
c
c
c类位置
(
i
,
j
)
(i,j)
(i,j)的得分,
y
c
i
j
y_{cij}
ycij为用非标准化高斯增强的“ground-truth”热图。我们设计了一个局部损失(focal loss)的变体[23]:
L
d
e
t
=
−
1
N
∑
c
=
0
C
∑
i
=
1
H
∑
J
=
0
W
{
(
1
−
p
c
i
j
)
α
log
(
p
c
i
j
)
if
y
c
i
j
= 1
(
1
−
y
c
i
j
)
β
(
p
c
i
j
)
α
log
(
1
−
p
c
i
j
)
otherwise
(
1
)
L_{det} = \frac{-1}{N}\sum_{c=0}^C\sum_{i=1}^H\sum_{J=0}^W \begin{cases} (1-p_{cij})^\alpha\log(p_{cij}) & \text{if $y_{cij}$ = 1} \\ (1-y_{cij})^\beta(p_{cij})^\alpha\log(1-p_{cij}) & \text{otherwise} \end{cases}(1)
Ldet=N−1c=0∑Ci=1∑HJ=0∑W{(1−pcij)αlog(pcij)(1−ycij)β(pcij)αlog(1−pcij)if ycij = 1otherwise(1)
其中N是图像中目标的数量,
α
\alpha
α和
β
\beta
β是控制每个点的贡献的超参数(在所有实验中我们将
α
\alpha
α设置为2,
β
\beta
β设置为4)。利用
y
c
i
j
y_{cij}
ycij中编码的高斯凸点,
(
1
−
y
c
i
j
)
(1-y_{cij})
(1−ycij)项减少了ground-truth周围的惩罚。
许多网络[15,28]涉及下采样层以收集全局信息和减少内存使用。 当它们完全卷积应用于图像时,输出的尺寸通常小于图像。 因此,图像中的位置 ( x , y ) (x,y) (x,y)被映射到热图中的位置 ( [ x n ] , [ y n ] ) ([\frac{x}{n}],[\frac{y}{n}]) ([nx],[ny]),其中n是下采样因子。当我们将热图中的位置重新映射到输入图像时,可能会丢失一些精度,这会极大地影响小边界框与ground-truth之间的IoU。 为了解决这个问题,我们预测位置偏移,以稍微调整角位置,然后再将它们重新映射到输入分辨率。
o
k
=
(
x
k
n
−
[
x
k
n
]
,
y
k
n
−
[
y
k
n
]
)
(
2
)
o_k = \Bigl(\frac{x_k}{n}-\Bigl[\frac{x_k}{n}\Bigr],\frac{y_k}{n}-\Bigl[\frac{y_k}{n}\Bigr]\Bigr) (2)
ok=(nxk−[nxk],nyk−[nyk])(2)
其中
o
k
o_k
ok是偏移量,
x
k
x_k
xk和
y
k
y_k
yk是角点
k
k
k的
x
x
x和
y
y
y坐标。 特别是,我们预测所有类别的左上角共享一组偏移,另一组由右下角共享。 对于训练,我们在ground-truth角点位置应用平滑的L1损失[11]:
L
o
f
f
=
1
N
∑
k
=
1
N
S
m
o
o
t
h
L
1
L
o
s
s
(
o
k
,
o
k
^
)
(
3
)
L_{off} = \frac{1}{N}\sum_{k=1}^N SmoothL1Loss(o_k,\hat{o_k}) (3)
Loff=N1k=1∑NSmoothL1Loss(ok,ok^)(3)
3.3 分组角点
图像中可能出现多个目标,因此可能检测到多个左上角和右下角。我们需要确定左上角和右下角的一对角点是否来自同一个目标边界框。我们的方法受到Newell等人提出的用于多人姿态估计任务的关联嵌入方法的启发[27]。Newell等人检测所有人类关节,并为每个检测到的关节生成嵌入。他们根据嵌入之间的距离将节点进行分组。
关联嵌入的思想也适用于我们的任务。 网络预测每个检测到的角点的嵌入向量,使得如果左上角和右下角属于同一个边界框,则它们的嵌入之间的距离应该小。 然后,我们可以根据左上角和右下角嵌入之间的距离对角点进行分组。 嵌入的实际值并不重要。 仅使用嵌入之间的距离来对角点进行分组。
我们关注Newell等人[27]并使用1维嵌入。
e
t
k
e_{tk}
etk成为对象
k
k
k的左上的嵌入,
e
b
k
e_{bk}
ebk为右下角的的嵌入。 如[26]中所述,我们使用“pull”损失来训练网络对角点进行分组,并且用“push”损失来分离角点:
L
p
u
l
l
=
1
N
∑
k
=
1
N
[
(
e
t
k
−
e
k
)
2
+
(
e
b
k
−
e
k
)
2
]
(
4
)
L_{pull} = \frac{1}{N}\sum_{k=1}^N \Bigl[(e_{tk}-e_k)^2+(e_{bk}-e_k)^2\Bigr] (4)
Lpull=N1k=1∑N[(etk−ek)2+(ebk−ek)2](4)
L
p
u
s
h
=
1
N
−
1
∑
k
=
1
N
∑
j
=
1
,
j
≠
k
N
m
a
x
(
0
,
Δ
−
∣
e
k
−
e
j
∣
)
(
5
)
L_{push} = \frac{1}{N-1}\sum_{k=1}^N \sum_{j=1,j≠k}^Nmax(0,\Delta-|e_k-e_j|)(5)
Lpush=N−11k=1∑Nj=1,j̸=k∑Nmax(0,Δ−∣ek−ej∣)(5)
其中 e k e_k ek是 e t k e_{tk} etk和 e b k e_{bk} ebk的平均值,我们在所有实验中将 Δ \Delta Δ设为1。 与偏移损失类似,我们仅在ground-truth角点位置应用损失。
3.4 Corner Pooling
如图2所示,通常没有局部视觉证据表明存在角点。要确定像素是否为左上角,我们需要水平地向右看目标的最上面边界,垂直地向底部看物体的最左边边界。因此,我们提出corner Pooling通过编码显式先验知识来更好地定位角点。
假设我们要确定
(
i
,
j
)
(i,j)
(i,j)位置是左上角。设
f
t
f_t
ft和
f
l
f_l
fl为左上角池化层的输入特征映射,
f
t
i
j
f_{t_{ij}}
ftij和
f
l
i
j
f_{l_{ij}}
flij分别为
(
i
,
j
)
(i,j)
(i,j)位置中
f
t
f_t
ft和
f
l
f_l
fl的向量。
H
×
W
H×W
H×W的特征映射,corner pooling层首先最大池化
f
t
f_t
ft中在
(
i
,
j
)
(i,j)
(i,j)与
(
i
,
H
)
(i,H)
(i,H)之间所有的特征向量,使之成为特征向量
t
i
j
t_{ij}
tij,还有,最大池化
f
l
f_l
fl中在
(
i
,
j
)
(i,j)
(i,j)与
(
W
,
j
)
(W,j)
(W,j)之间所有的特征向量,使之成为特征向量
l
i
j
l_{ij}
lij。最后,把
t
i
j
t_{ij}
tij和
l
i
j
l_{ij}
lij加在一起。这个计算可以用以下公式表示:
t
i
j
=
{
m
a
x
(
f
t
i
j
,
t
(
i
+
1
)
j
)
if
i
<H
f
t
H
j
otherwise
(
6
)
t_{ij} = \begin{cases} max(f_{t_{ij}},t_{(i+1)j}) & \text{if $i$ <H} \\ f_{t_{Hj}} & \text{otherwise} \end{cases}(6)
tij={max(ftij,t(i+1)j)ftHjif i <Hotherwise(6)
l
i
j
=
{
m
a
x
(
f
l
i
j
,
l
i
(
j
+
1
)
)
if
j
<W
f
l
i
w
otherwise
(
7
)
l_{ij} = \begin{cases} max(f_{l_{ij}},l_{i(j+1)}) & \text{if $j$ <W} \\ f_{l_{iw}} & \text{otherwise} \end{cases}(7)
lij={max(flij,li(j+1))fliwif j <Wotherwise(7)
在这里,我们应用了一个elementwise最大化操作。动态规划可以有效地计算
t
i
j
t_{ij}
tij和
l
i
j
l_{ij}
lij,如图6所示。
图6。左上角的池化层可以非常有效地实现。我们从右到左扫描水平最大池化,从下到上扫描垂直最大池化。然后我们相加两个经过最大池化的特征映射。
我们以类似的方式定义右下角池化层。最大池化 ( 0 , j ) (0,j) (0,j)与 ( i , j ) (i,j) (i,j)之间所有的特征向量、 ( i , 0 ) (i,0) (i,0)与 ( i , j ) (i,j) (i,j)之间所有的特征向量,然后将池化结果相加。Corner pooling层用于预测模块,用于预测热图、嵌入和偏移量。
图7。预测模块从一个修改后的残块开始,其中我们将第一个卷积模块替换为corner pooling模块。修改后的残差块后面跟着一个卷积模块。我们有多个分支用于预测热图、嵌入和偏移量。
预测模块的结构如图7所示。模块的第一部分是残差模块[15]的修改版本。在这个修改后的残差模块中,我们将第一个3×3的卷积模块替换为一个corner pooling模块。这个残差模块,首先通过具有128个通道的2个3×3卷积模块的主干网络处理特征,然后应用一个corner pooling层。残差模块之后,我们将池化特征输入具有256个通道的3×3的Conv-BN层,然后加上反向projection shortcut。修改后的残块,后跟一个具有256个通道的3×3的卷积模块,和256个通道的3个Conv-ReLU-Conv层来产生热图,嵌入和偏移量。
3.5 沙漏网络
CornerNet使用沙漏网络[28]作为其骨干网络。沙漏网络首次被提到是用于人体姿态估计任务。它是一个完全卷积神经网络,由一个或多个沙漏模块组成。沙漏模块首先通过一系列卷积层和最大池化层对输入特性进行下采样。然后通过一系列的上采样和卷积层将特征上采样回原来的分辨率。由于细节在最大池化层中丢失,因此添加了跳过层用来将细节带回到上采样的特征。沙漏模块在一个统一的结构中捕获全局和局部特征。当多个沙漏模块堆积在网络中时,沙漏模块可以重新处理特征以获取更高级别的信息。这些特性使沙漏网络成为目标检测的理想选择。事实上,许多现有的检测器[35,10,22,19]已经采用了类似沙漏网络的网络。
我们的沙漏网络由两个沙漏组成,我们对沙漏模块的结构做了一些修改。我们不使用最大池,而是使用步长2来降低特征分辨率。我们减少了5倍的特征分辨率,并增加了特征通道的数量(256,384,384,384,512)。当我们对特征进行上采样时,我们应用了两个残差模块,然后是一个最近的相邻上采样。每个跳跃连接还包含两个残差模块。沙漏模块中间有4个512通道的残差模块。在沙漏模块之前,我们使用128个通道7×7的卷积模块,步长为2,4倍减少的图像分辨率,后跟一个256个通道,步长为2的残差块。
在[28]基础上,我们还在训练时增加了中间监督。但是,我们没有向网络中添加反向中间预测,因为我们发现这会损害网络的性能。我们在第一个沙漏模块的输入和输出,应用了一个3×3的Conv-BN模块。然后,我们通过元素级的加法合并它们,后跟一个ReLU和一个具有256个通道的残差块,然后将其用作第二个沙漏模块的输入。沙漏网络的深度为104。与许多其他最先进的检测器不同,我们只使用整个网络最后一层的特征来进行预测。
4 实验
4.1 训练细节
我们在PyTorch[29]中实现了CornerNet。网络是在默认的PyTorch设置下随机初始化的,没有在任何外部数据集上进行预训练。当我们应用focal loss时,我们遵循[23]来设置卷积层中的偏差来预测角点热图。在训练期间,我们设置了网络的输入分辨率511×511,导致输出分辨率为128×128。为了减少过拟合,我们采用了标准的数据增强技术,包括随机水平翻转、随机缩放、随机裁剪和随机色彩抖动,其中包括调整图像的亮度,饱和度和对比度。 最后,我们将PCA[20]应用于输入图像。
我们使用Adam[18]来优化完整的训练损失:
L
=
L
d
e
t
+
α
L
p
u
l
l
+
β
L
p
u
s
h
+
γ
L
o
f
f
(
8
)
L=L_{det}+\alpha L_{pull}+\beta L_{push}+\gamma L_{off}(8)
L=Ldet+αLpull+βLpush+γLoff(8)
其中
α
\alpha
α,
β
\beta
β和
γ
\gamma
γ分别是pull,push和offset的权重。 我们将
α
\alpha
α和
β
\beta
β都设置为0.1,将
γ
\gamma
γ设置为1。我们发现,1和更大的
α
\alpha
α和
β
\beta
β值会导致性能不佳。 我们使用49的batch size,并在10个Titan X(PASCAL)GPU上训练网络(主GPU 4个图像,其余GPU每个GPU 5个图像)。 为了节省GPU资源,在我们的 ablation experiments(即模型简化测试,去掉该结构的网络与加上该结构的网络所得到的结果进行对比)中,我们训练网络,进行250 k次迭代,学习率为
2.5
×
1
0
−
4
2.5×10^{-4}
2.5×10−4。当我们将我们的结果与其他检测器进行比较时,我们额外训练网络,进行250 k次迭代,并到最后50 k次迭代时,将学习速率降低到
2.5
×
1
0
−
5
2.5×10^{-5}
2.5×10−5。
4.2 测试细节
在测试期间,我们使用简单的后处理算法从热图,嵌入和偏移生成边界框。 我们首先通过在角点热图上使用3×3最大池化层来应用非极大值抑制(NMS)。然后我们从热图中选择前100个左上角和前100个右下角。 角点位置由相应的偏移调整。 我们计算左上角和右下角嵌入之间的L1距离。距离大于0.5或包含不同类别的角点对将被剔除。 左上角和右下角的平均得分用作检测分数。
我们不是将图像大小调整为固定大小,而是保持图像的原始分辨率,并在将其输入给CornerNet之前用0填充。 原始图像和翻转图像都用于测试。 我们将原始图像和翻转图像的检测结合起来,并应用soft-max[2]来抑制冗余检测。 仅记录前100个检测项。 Titan X(PASCAL)GPU上的每个图像的平均检测时间为244ms。
4.3 MS COCO
我们在非常具有挑战性的MS COCO数据集上评估CornerNet [24]。 MS COCO包含80k图像用于训练,40k用于验证,20k用于测试。 训练集中的所有图像和验证集中的35k图像用于训练。 验证集中剩余的5k图像用于超参数搜索和ablation study。 测试集上的所有结果都将提交给外部服务器进行评估。 为了与其他检测器进行公平比较,我们在test-dev集上记录了我们的主要结果。 MS COCO在不同IoU上使用平均精度(AP)、在不同物体尺寸上使用AP作为主要评估指标。
4.4 Ablation Study
Corner Pooling Corner Pooling是CornerNet的关键组成部分。 为了理解它对性能的贡献,我们培训了另一个具有相同数量参数但没有corner Pooling的网络。
表1 MS COCO消除corner Pooling验证
表1显示添加corner Pooling有着显着改善:
A
P
AP
AP为2.0%,
A
P
50
AP^{50}
AP50为2.1%,
A
P
75
AP^{75}
AP75为2.2%。 我们还看到corner Pooling对中型和大型目标特别有用,它们的
A
P
AP
AP分别提高了2.4%和3.7%。 这是预料中的,因为中型和大型目标的最顶部,最底部,最左边,最右边得边界可能更远离角点位置。
减少对负位置的惩罚 我们减少对正位置周围目标半径范围内的负位置给出的惩罚(第3.2节)。 为了理解这对训练CornerNet有多大帮助,我们训练一个没有减少惩罚的网络和另一个固定半径为2.5的网络。 我们在验证集上将它们与CornerNet进行比较。
表2 减少对正位置附近的负位置的惩罚有助于显着改善网络的性能
表2显示一个固定半径可以比基线上的 A P AP AP提升2.7%, A P m AP^m APm增加1.5%, A P l AP^l APl增加5.3%。 基于物体半径的半径可以进一步将 A P AP AP提高2.9%, A P m AP^m APm增加2.6%, A P l AP^l APl增加6.5%。此外,我们看到减少惩罚特别有利于大中型目标。
误差分析 CornerNet同时输出热图,偏移和嵌入,所有这些都会影响检测性能。 如果错过任何一个角,都将会丢失一个目标;需要精确的偏移来生成紧密的边界框;不正确的嵌入将导致许多错误的边界框。 为了理解每个部件如何影响最终误差,我们通过将预测的热图和偏移替换为ground-truth,并在验证集上评估性能,以此来执行误差分析。
表3.误差分析。 我们用ground-truth替换预测的热图和偏移。 单独使用ground-truth的热图可以将
A
P
AP
AP从38.5%提高到74.0%,这表明CornerNet的主要瓶颈是检测角点。
表3显示单独使用ground-truth的热图可以将
A
P
AP
AP从38.5%提高到74.0%。
A
P
AP
AP,
A
P
m
AP^m
APm和
A
P
l
AP^l
APl也分别增长43.1%,40.9%和30.1%。 如果我们用ground-truth偏移代替预测的偏移量,则
A
P
AP
AP进一步从13.1%增加至87.1%。 这表明尽管在检测和分组角点方面仍有很大的改进空间,但主要的瓶颈是检测角点。 图8显示了预测角点的两个定性示例。
图8.示例边界框预测覆盖在角点的预测热图上
4.5 与最先进的检测器进行比较
我们在MS COCO testdev上,将CornerNet与其他最先进的检测器进行比较(表4)。通过多尺度评估,CornerNet实现了42.1%的 A P AP AP,是现有one-stage方法的最新技术,并且可以实现与two-stage方法相媲美的结果。
表4.在MS COCO test-dev上,CornerNet优于其他所有one-stage检测器,可实现与two-stage探测器相媲美的结果。
5 结论
我们已经介绍了CornerNet,这是一种新的目标检测方法,可以将边界框检测为成对的角点。 我们在MS COCO上对CornerNet进行评估,并展示出了有竞争力的结果。