2019
论文链接
代码链接
其他参考
本文主要记录 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。
目标检测器的分类器判断每个box包含物体还是背景,one-stage 目标检测器在图像上滑动anchor,并直接对其进行分类,two-stage目标检测器重新计算每个潜在box的特征,并对这些特征进行分类。然后利用nms算法,通过计算边界框IoU移除同一实例的重复检测进行后处理。后处理不可微,难以训练,阻碍了姿态估计器的端到端可微。同时,基于滑动窗口的目标检测器需要枚举所有可能的物体位置和尺寸,这种操作有些浪费。
本文提出的CenterNet用边界框的中心点来表示对象(见图2),对象的其他属性,例如对象大小、尺寸、3D范围、方向和姿态等直接从中心位置的图像特征中回归,将目标检测转为一个标准的关键点估计问题。 CenterNet将图像喂给全卷积网络生成热图,热图的峰值即为对象中心,在每个峰值的图像特征预测 bounding box 的 height 和 weight。使用标准的密集监督学习来训练模型,推理过程是一个单一的前向传递,摒弃用于后处理的nms。
CenterNet可以推广至多人姿态估计任务中,将2D关节位置视作距中心的offset,并在中心点位置直接回归到它们。
如图1所示,CenterNet的运行速度很快。
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)。不同的是:
Object detection by keypoint estimation 通过关键点进行目标检测. CenterNet并非第一个通过关键点进行目标检测的工作,CornerNet 检测两个边界框角作为关键点;ExtremeNet 检测所有对象的 top-, left-, bottom-, rightmost, 和 center points。两者都需要关键点检测后的分组组合阶段,显著减慢每个算法的速度。CenterNet只需为每个对象检测一个中心点,无需进行分组或后处理。
给定输入图像 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:
仅监督关键点位置,忽略其他位置。
类别 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最大池化操作高效实现。
将姿态视作中心点的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所示,直接回归关键点虽合理,但不能达到sota,特别在高IoU状态下结果不佳。将输出投影到最近的联合检测可以改善结果,并可以与sota多人姿态估计器竞争。
CenterNet目标检测器建立在成功的关键点估计网络上,将对象表示为点,找到对象中心,并回归其size。该算法简单、快速、准确且端到端可微,无需任何NMS后处理。CenterNet可以在一次前向传递中估计一系列对象的其他属性,如姿态、3D方向、深度和范围。CenterNet 为实时目标识别和相关任务开辟了新方向。