将对象作为点
本文主要记录 CenterNet 及其在HPE领域中的应用。
摘要:目标检测将物体视作一个 axis-aligned box,大多目标检测器枚举潜在物体的位置并对位置进行分类,这种做法冗余,无效,且需要额外的后处理。本文将一个对象建模为一个点,即其边界框的中心点,使用关键点估计找到中心点,并回归其他对象属性:如尺寸、3D位置、方向,甚至姿态。CenterNet是端到端可微,简单、敏捷、准确。CenterNet在MS COCO上实现了最佳速度-精度权衡:142 FPS实现28.1%AP,52 FPS实现37.4%AP,采取多尺度测试在1.4 FPS下实现45.1% AP。
文章目录
1. Introduction
目标检测器的分类器判断每个box包含物体还是背景,one-stage 目标检测器在图像上滑动anchor,并直接对其进行分类,two-stage目标检测器重新计算每个潜在box的特征,并对这些特征进行分类。然后利用nms算法,通过计算边界框IoU移除同一实例的重复检测进行后处理。后处理不可微,难以训练,阻碍了姿态估计器的端到端可微。同时,基于滑动窗口的目标检测器需要枚举所有可能的物体位置和尺寸,这种操作有些浪费。
本文提出的CenterNet用边界框的中心点来表示对象(见图2),对象的其他属性,例如对象大小、尺寸、3D范围、方向和姿态等直接从中心位置的图像特征中回归,将目标检测转为一个标准的关键点估计问题。 CenterNet将图像喂给全卷积网络生成热图,热图的峰值即为对象中心,在每个峰值的图像特征预测 bounding box 的 height 和 weight。使用标准的密集监督学习来训练模型,推理过程是一个单一的前向传递,摒弃用于后处理的nms。
CenterNet可以推广至多人姿态估计任务中,将2D关节位置视作距中心的offset,并在中心点位置直接回归到它们。
如图1所示,CenterNet的运行速度很快。
2. Related work
Object detection by region classification 对region分类进行目标检测: RCNN 从一大组候选区域中枚举物体位置,裁剪它们,并使用深度网络对其分类。Fast-RCNN 转而裁剪图像特征,以节省计算。二者都依赖慢的 low-level region proposal。
Object detection with implicit anchors 隐式anchor进行目标检测: Faster-RCNN在检测网络内生成 region proposal,对低分辨率图像网格周围的固定形状边界框(anchor)进行采样,并将其分类为“前景或背景”。与任何GT目标的IoU>0.7的anchor标记为前景,IoU<0.3的为背景或被忽略,每个region proposal 都会进行分类。采用多分类的proposal classifier形成了单阶段检测器的基础。
CenterNet 与 anchor-based onestage 方法密切相关,将中心点视作一个单个 shape-agnostic anchor(见图3)。不同的是:
- CenterNet仅根据位置而非 box overlap 来分配“anchor”,因此摒弃了对前景背景进行分类的手动阈值。
- 每个对象只有一个正“anchor”,因此无需 NMS,只需在关键点热图中提取局部峰值。
- 与传统的目标检测器(输出步长16)相比,CenterNet使用更大的输出分辨率(输出步长4),消除了对多个anchor的依赖。
Object detection by keypoint estimation 通过关键点进行目标检测. CenterNet并非第一个通过关键点进行目标检测的工作,CornerNet 检测两个边界框角作为关键点;ExtremeNet 检测所有对象的 top-, left-, bottom-, rightmost, 和 center points。两者都需要关键点检测后的分组组合阶段,显著减慢每个算法的速度。CenterNet只需为每个对象检测一个中心点,无需进行分组或后处理。
3. Preliminary
给定输入图像
I
∈
R
W
×
H
×
3
I∈R^{W ×H×3}
I∈RW×H×3,目标是得到一张关键点热图
Y
^
∈
[
0
,
1
]
W
/
R
×
H
/
R
×
C
\widehat{Y}∈[0, 1] ^{W/R × H/R ×C}
Y
∈[0,1]W/R×H/R×C,R 是 output stride,默认=4,也是原图对应热图的下采样倍率, C是关键点类数量,例如COCO的目标检测中,C=80。
Y
^
x
,
y
,
c
=
1
表
示
检
测
的
关
键
点
,
Y
^
x
,
y
,
c
=
0
表
示
背
景
\widehat{Y}_{x,y,c}=1 表示检测的关键点,\widehat{Y}_{x,y,c}=0 表示背景
Y
x,y,c=1表示检测的关键点,Y
x,y,c=0表示背景。使用不同的 decoder-encoder 网络(hourglass、ResNet、DLA)预测
Y
^
\widehat{Y}
Y
。
对GT的改造:对于每个类的GT关键点
Y
^
∈
R
2
\widehat{Y}∈R^2
Y
∈R2,计算一个低分辨率的等效值:
p
~
=
⌊
p
R
⌋
\widetilde{p}=\lfloor \frac{p}{R}\rfloor
p
=⌊Rp⌋,然后使用下列高斯核将所有GT关键点 splat 到热图
Y
^
∈
[
0
,
1
]
W
/
R
×
H
/
R
×
C
\widehat{Y}∈[0, 1] ^{W/R × H/R ×C}
Y
∈[0,1]W/R×H/R×C 上。
σ
p
σ_p
σp 是对象 size-adaptive 标准差。若同一类的两个Gaussian重叠,则取取 element-wise maximum,训练目标是具有 focal loss 的 penalty-reduced pixelwise 逻辑回归:
α=2,β=4是focal loss的超参,N 是图像 I 中的关键点数量,N的归一化将所有positive focal loss instances 归一化为1。
为降低由 R 引起的离散化误差,为每个中心点额外预测一个 local offset:
O
^
∈
R
W
/
R
×
H
/
R
×
2
\widehat{O}∈R^{W/R × H/R ×2}
O
∈RW/R×H/R×2。所有类 c 共享相同的 offset 预测。用L1损失训练offset:
仅监督关键点位置,忽略其他位置。
4. Objects as Points
类别
c
k
c_k
ck 的对象 k 的 bbox为:
(
x
1
(
k
)
,
y
1
(
k
)
,
x
2
(
k
)
,
y
2
(
k
)
)
(x^{(k)}_1 , y^{(k)}_1 , x^{(k)}_2 , y^{(k)}_2 )
(x1(k),y1(k),x2(k),y2(k)),则中心点为
(
x
1
(
k
)
+
x
2
(
k
)
2
,
y
1
(
k
)
+
y
2
(
k
)
)
2
(\frac{x^{(k)}_1+x^{(k)}_2}{2} , \frac{y^{(k)}_1+ y^{(k)}_2 )}{2}
(2x1(k)+x2(k),2y1(k)+y2(k)),回归出对象k的 size :
s
k
=
(
x
2
(
k
)
−
x
1
(
k
)
,
y
2
(
k
)
−
y
1
(
k
)
)
s_k=( x^{(k)}_2 - x^{(k)}_1, y^{(k)}_2-y^{(k)}_1 )
sk=(x2(k)−x1(k),y2(k)−y1(k)),为限制计算负担,对所有对象类别使用一个single size prediction:
S
^
∈
R
W
/
R
×
H
/
R
×
2
\widehat{S}∈R^{W/R × H/R ×2}
S
∈RW/R×H/R×2,在中心点使用L1损失:
不正则化scale,而是直接使用原始像素坐标,并通过恒定的λ大小来 scale 损失。
总loss:
使用一个单一网络预测 keypoints ˆY , offset ˆO, 和 size ˆS,因此网络预测每个位置的输出通道=C+4,所有输出共享一个fully-convolutional backbone。对每个模态,backbone 特征通过一个单独的 3 × 3 convolution, ReLU 和另一个 1 × 1 convolution。图4为网络输出的overview:
From points to bounding boxes 从点到边界框。推理时,先独立地提取每个类热图的峰值。检测所有响应值>= 其 8-connected neighbors 并保持top 100峰值。类 c 的检测中心点是:
P
^
=
(
x
^
i
,
y
^
i
)
i
=
1
n
\hat{P} = {(\hat{x}_i, \hat{y}_i)}^n_{i=1}
P^=(x^i,y^i)i=1n,n个中心点的集合为
P
^
c
\hat{P}_c
P^c。使用关键点值作为其检测置信度,并在位置处生成边界框:
关键点估计直接生成所有输出,无需基于IoU的 NMS 或其他后处理。峰值关键点提取是一个NMS替代方案,且可以使用3×3最大池化操作高效实现。
4.2. Human pose estimation
将姿态视作中心点的k×2维属性,并通过中心点的 offset 来参数化每个关键点。利用 L1 Loss ,以像素为单位,直接回归 joint offsets:
J
^
∈
R
W
/
R
×
H
/
R
×
k
×
2
\hat{J}∈ R^{W/R × H/R ×k×2}
J^∈RW/R×H/R×k×2,通过masking损失来忽略不可见关键点。
为细化关键点,使用标准的 bottom-up 多人姿态估计进一步估计 k个人体关节热图:
Φ
^
∈
R
W
/
R
×
H
/
R
×
k
\hat{\Phi}∈ R^{W/R × H/R ×k}
Φ^∈RW/R×H/R×k。使用 focal loss 和局部像素 offset 来训练人体关节热图
然后初始预测 snap 热图上最近的检测关键点,center offset 充当一个分组线索,将单个关键点检测分配给最近的人体实例。 具体而言:
(
x
^
,
y
^
)
(\hat{x},\hat{y})
(x^,y^) 是检测到的中心点,先回归出所有的关节位置:
l
j
=
(
x
^
,
y
^
)
+
J
^
x
^
y
^
j
f
o
r
j
∈
1...
k
l_j = (\hat{x},\hat{y}) + \hat{J}_{\hat{x}\hat{y}j} \quad for \quad j ∈ 1 . . . k
lj=(x^,y^)+J^x^y^jforj∈1...k,对每种关节类型 j,从相应热图
Φ
^
.
.
j
\hat{\Phi}_{..j}
Φ^..j 中基于置信度>0.1 提取所有关键点
L
j
=
{
l
~
j
i
}
i
=
1
n
j
L_j =\{\widetilde{l}_{ji}\}^{n_j}_{i=1}
Lj={l
ji}i=1nj,然后将每个回归位置
l
j
l_j
lj 分配给其最近的检测关键点
a
r
g
m
i
n
l
∈
L
j
(
l
−
l
j
)
2
arg min_{l∈L_j} (l − l_j)^2
argminl∈Lj(l−lj)2,仅考虑检测到的对象 bbox 内的 joint 检测。
5. 姿态估计实验
结果如表5所示,直接回归关键点虽合理,但不能达到sota,特别在高IoU状态下结果不佳。将输出投影到最近的联合检测可以改善结果,并可以与sota多人姿态估计器竞争。
6. Conclusion
CenterNet目标检测器建立在成功的关键点估计网络上,将对象表示为点,找到对象中心,并回归其size。该算法简单、快速、准确且端到端可微,无需任何NMS后处理。CenterNet可以在一次前向传递中估计一系列对象的其他属性,如姿态、3D方向、深度和范围。CenterNet 为实时目标识别和相关任务开辟了新方向。