Code:https://github.com/xingyizhou/CenterNet
监控、自动驾驶、visual question answering 等领域都涉及到目标检测,其发展推动着实例分割(instance segmentation)、姿态检测(pose estimation)、物体追踪(tracking)、动作识别(action recognition)等视觉任务的发展!
当前的 object detectors 通过一个轴向对齐的框(axis-aligned boxes)来表示每个 object,可分为 one-stage 方法(直接对 anchor 进行分类和回归,来确定最终的边界框) 和 two-stage 方法(对 anchor 先二分类+回归筛选出前景背景,然后 pooling 成固定尺寸进行分类+回归确定最终的边界框) !由于候选区域较多(备胎),需要经过 NMS 算法筛选剔除(留下真爱),不过 NMS 方法往往难以 end-to-end 训练,所以大多数目标检测器不是 end-to-end trainable 的方法!
本文,作者用边界框的中心点来表示目标,目标的 size 用中心处的特征回归出来!这样目标检测的问题就转化为了关键点评估(keypoint estimation)问题!也即对每一类预测出一个 heatmap,heatmap 中响应值较高的点为中心点,配合中心点特征回归出来的 h h h 和 w w w 就能锁定边界框,从而实现目标检测的定位和分类!
作者也摒弃了 NMS 后处理操作(only have one positive “anchor” per object,没有备胎)!
最骚的是,基于点的特征可以回归出其他值,进而运用到其他的任务上(eg:3D object detection 和 pose keypoint estimation)
Object detection by region classification
R-CNN、Fast RCNN
Object detection with implicit anchors
Object detection by keypoint estimation
CornerNet、ExtremeNet,点检测完了之后需要 grouping 在一起形成框,这样比较慢,
Monocular 3D object detection
3D 领域没接触过过,这个就“略”了
【CenterMask】《CenterMask:Single Shot Instance segmentation with Point Representation》 文章中,就是基于 CenterNet 改进的,关于检测的部分细节完全一样
C = 80 for COCO(类别数)
也即如下的形式
【CenterMask】《CenterMask:Single Shot Instance segmentation with Point Representation》
1)中心点 Loss
预测中心点的损失,公式如下,是基于 focal loss 的修改版(a pixel-wise logistic regression modified by the focal loss)
其中
仔细推导,就是把 logistic regression Loss 中的 cross entopy 换成了 focal loss 的形式!仅仅多了一个超参数 β \beta β 而已!( y = 1 y = 1 y=1 的时候,在 focal 代入 y y y 和 y ^ \hat{y} y^, y y y 不等于 1 的时候,在 focal loss 中代入 1 − y 1-y 1−y 和 1 − y ^ 1-\hat{y} 1−y^)
logistic regression 的 binary cross entropy 如下:
Focal Loss 如下:
关于 Focal Loss 的解析可以参考 【Focal Loss】《Focal Loss for Dense Object Detection》
公式中 Y x y c Y_{xyc} Yxyc 的定义同 Hourglass Network (参考 【Stacked Hourglass】《Stacked Hourglass Networks for Human Pose Estimation》),也即标签采用的是中心点的高斯分布,而不是仅有一个像素
GT 的高斯分布表达如下
2)偏置 Loss
L1 Loss,来 recover the discretization error caused by the output stride
比如中心点在原图(15,15)处,R=4,那么精确地映射到特征图上对应着应该是 (3.75,3.75)处,但特征图最小的分辨率是 1 像素嘛,所以预测的中心点最准的地方只能为(3,3)!(3,3)还原到原始图处为(12,12),与(15,15)有了 3 个像素的偏差嘛,为了弥补这个偏差,我们需要在特征图(3,3)的基础上,学出一个(0.75,0.75)的偏置,这样的话恢复到原始图片大小,就能逼近(15,15)了
3)边界框大小 Loss
目标 k k k 的边界框表示为 ( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) (x_1^{(k)},y_1^{(k)},x_2^{(k)},y_2^{(k)}) (x1(k),y1(k),x2(k),y2(k)),对应的类别用 c k c_k ck 表示!
CenterNet 做 2D 目标检测的整体流程如下
【CenterMask】《CenterMask:Single Shot Instance segmentation with Point Representation》
整体 Loss 为
其中, λ s i z e 和 λ o f f \lambda_{size} 和 \lambda_{off} λsize和λoff 分别被设置为了 0.1 和 1
测试的时候,一张热力图中,如果该点为 8 邻域响应最高的点,就为中心点(实现的时候采用 3x3 max-pooling 操作即可,感觉如果 max-pooling 的结果如果和自己相同,就保留),输出 top-100 的 center point,预测出来的边界框为
其中
是预测出的第 i i i 个中心点
是预测出的偏置
是预测出的边界框大小
1)直接回归偏置
l j = ( x ^ , y ^ ) + J ^ x ^ y ^ j l_j = (\hat{x},\hat{y}) + \hat{J}_{\hat{x}\hat{y}j} lj=(x^,y^)+J^x^y^j
其中,
Here, our center offset acts as a grouping cue, to assign individual keypoint detections to their closest person instance.
2)与此同时,预测热力图 Φ ∈ R H R × W R × k \Phi \in \mathbb{R}^{\frac{H}{R}× \frac{W}{R} × k} Φ∈RRH×RW×k,配合 focal loss 来 refine 关键点
L j = { l ~ i j } i = 1 n j L_j = \{\widetilde{l}_{ij}\}_{i=1}^{n_j} Lj={l ij}i=1nj
这个 n n n 是什么意思?
保留 confidence > 0.1 的 keypoints
3)最后让两者逼近?
由于背景知识较少,这部分不知道自己理解错了没,感觉以预测1)偏置为主,热力图 2)只是精修下回归出的关键点的位置!
注意,上面操作 considering only joint detections within the bounding box of the detected object.(还是依托在目标检测任务之上)
采用了 ResNet、DLA、Hourglass 三种主干网络(【Stacked Hourglass】《Stacked Hourglass Networks for Human Pose Estimation》)
作者在 ResNet 和 DLA 的 3 次上采样之前(32 倍变成 4 倍),用了 3×3 的 deformable Conv,上采样采用的是 bilinear interpolation
输入的分辨率都是 512×512
data augmentation
inference 的时候有如下三种策略
四种方法的 AP 对应着 Fig.1 的部分点
最高的精度(42:2% AP in 7:8 FPS)比 CornerNet(40:6% AP in 4:1 FPS) 和 ExtremeNet(40:3% AP in 3:1 FPS) 效果好,Better accuracy indicates that center points are easier to detect than corners or extreme points
和 State-of-the-art comparison 比较
1)Center point collision
如果两个同类物体,在热力图上中心点是一样的,CenterNet 只能预测出其中第一个,作者统计了 COCO 数据集,共 860001 objects 中,有 614 pairs of objects(< 0.1%) 在步长为 4 的特征图上出现了 Center point collision!
SS 方法,会有 ~2% 的这种情况(imperfect region proposals)
Faster R-CNN 方法,会有 ~20.0% 的重叠(可能是在步长为 16 或者 32 的条件下吧 insufficient anchor placement)
2)NMS
For DLA-34 (flip-test),用和不用效果为 39.2% to 39.7%
For Hourglass-104,用和不用效果都为 42.2%
所以 CenterNet 可以砍掉 NMS 这种后处理操作
3)Training and Testing resolution
这里应该指的是不用 padding 和用 padding 的区别的吧
4)Regression loss
size regression 时,L1 比 Smooth L1 效果更好
5)Bounding box size weight
6)Training schedule
用 GT 来替换相应的检测部位,可以看到,上限能高达 99.5!
没接触过,这里就省略了
效果一般般啦,用热力图 refine 比直接回归的效果要好(reg vs jd)