论文地址:https://arxiv.org/abs/1604.01850
代码地址:https://github.com/ShuangLI59/person_search
1、Background
1.1、Task
Object Detection:找出图像中所有感兴趣的目标,确定它们的位置和类别。
Idea:该论文基于One-stage的Detector——CornerNet,提出了一个新的One-stage网络框架,将检测每个Object的任务转化成检测一组triplet。此外,作者设计了两个模块:Cascade corner pooling和Center pooling。
- Cascade corner pooling:得到center keypoint在水平和垂直方向上的响应分值总和的最大值。
- Center pooling:得到object在边界和内部个两方面的响应分值总和的最大值。
1.2、Problem
Related Work
该论文从Two-stage approaches和One-stage approaches两个方向简介了一些经典的工作。
Two-stage approaches:将Object detection任务分成两个阶段:1、提取RoIs(Regins of Interest),2、分类和回归RoIs。经典工作有:R-CNN、SPP-Net、Faster-RCNN(RPN)、Mask-RCNN、R-FCN、Cascade R-CNN。
One-stage approches:直接分类和回归候选anchor box,无RoI的提取模块。经典工作有:YOLO系列、SSD、DSSD、R-SSD、RON、RefineDet、 CornerNet。
Drawback:
1、Anchor-based method:在训练时需要大量的anchors,并且每个anchor的尺寸和长宽比都需要人工设计。这些anchors通常不能对齐ground-truth boxes,这不利于边界框内容的分类任务。
2、ConerNet(baseline):不能充分利用Object的全局信息。
2、Motivation
作者相信:如果预测所得的bounding box与ground-truth box有一个很高的IoU值,那么就可以认为用于预测同一类别的center keypoint在中心区域的概率是很高的,反之亦然。
推理阶段:在得到一对corner keypoint后,通过检查是否有一种与其同一类别的center keypoint落在该proposal的中心区域,来判断proposal内是否真的有一个object。

结论:CornerNet无法利用bounding box内部区域的信息。
由此可得作者主要的motivation如下:
- 作者将Object Detection任务转换为Keypoint Triplets估计任务。
- 作者根据ConerNet的缺陷,又提出了Cascade corner pooling模块和Center pooling模块,用于充分利用bounding box边界和内部的信息。
3、Method
3.1 Object Detection as Keypoint Triplets

Procedure:
1、首先根据它们的分数选择top-k个center keypoints。
2、使用对应的offsets来把这些center keypoint重新映射在输入图像上。
3、对每个bounding box定义一个中心区域,并且检查中心区域内是否含有center keypoints。经过检查的center keypoint的类别标签应该和它的bounding box的类别标签相同。
4、如果在中心区域检测到center keypoint,那么就保留bounding box。用top-left corner、bottom-right corner和center keypoint三个点的平均分数代替bounding box的分数。
自适应bounding box尺寸的中心区域的设计:
$(tl_x, tl_y)$表示bounding box的左上角坐标。$(br_x,br_y)$表示bounding box的右下角坐标。$(ctl_x, ctl_y)$表示center region的左上角坐标。$(cbr_x,cbr_y)$表示center region的右下角坐标。
$$\left\{
\begin{array}
ctl_x=\frac{(n+1)tl_x + (n-1)br_x}{2n} \\
ctl_y=\frac{(n+1)tl_y + (n-1)br_y}{2n} \\
cbr_x=\frac{(n-1)tl_x + (n+1)br_x}{2n} \\
cbr_y=\frac{(n-1)tl_y + (n+1)br_y}{2n}
\end{array}
\right.
$$

$n$是一个奇数,取值为3或5,表示center region的尺寸。
3.2、Enriching Center and Corner Information
Center pooling
存在的问题是object的几何中心点不一定传达最具有识别性的信息(例如:人体头部包含很多视觉信息,具有很强的识别性,但center keypoint经常落在人体躯干中心)。
作者提出的方法:首先在backbone输出的特征图中判断出center keypoint的像素点,然后找到该像素点的水平和垂直方向的最大值并相加。
Cascade corner pooling
存在的问题是corners经常在objects外,这缺失了局部外观特征。CornerNet中的corner pooling是在边界上找到最大值来确定Corners,但这种方法依赖于边界,仍无法充分利用object的视觉信息。
作者提出的方法:
1、首先沿着边界找到边界上的最大值。
2、然后在这个边界最大值的位置上,向object内部搜索(上边界最大值的搜索方向:垂直向下、下边界最大值的搜索方向:垂直向上、左边界最大值的搜索方向:水平向右、右边界最大值的搜索方向:水平向左),找到内部的最大值。
3、最后将这两个最大值相加。
PS:四条边界四个点的最大值都如上所述方法可得,然后得到一对corners

Center pooling和Cascade corner pooling的结构借鉴了Corner pooling结构而来,结构图如下:

3.3、Tasks
Training Loss如下:
$$L=L_{det}^{co}+L_{det}^{ce}+\alpha L_{pull}^{co}+\beta L_{push}^{co}+\gamma (L_{off}^{co}+L_{off}^{ce})$$
$L_{det}^{co}、L_{det}^{ce}$:为focal loss,用于训练网络检测corners和center keypoints。
$L_{pull}^{co}$:”pull” loss,最小化属于相同objects的词向量的距离。
$L_{push}^{co}$:”push” loss,最大化属于不同objects的词向量的距离。
$L_{off}^{co}+L_{off}^{ce}$:用于训练网络预测corners和center keypoints的offsets。
4、Experiments
Baseline:CornerNet
Backbone:the stacked hourglass network with 52 and 104 layers
4.1、Comparison
在MS-COCO test-dev数据集上,与State-of-the-art Detectors的对比结果:

在MS-COCO validation数据集上,检测结果定性分析:

CornerNet和CenterNet误检率对比的结果如下:

上图显示了CenterNet避免了大量错误bounding box的检测,尤其是小尺寸的错误bounding box。
推理速度的对比:
- average inference time of CornerNet511-104:300ms per image
- average inference time of CenterNet511-104:340ms per image
- average inference time of CenterNet511-52:270ms per image
4.2、Ablation Study
Baseline:CornerNet511-52。CRE表示center region exploration。CTP表示center pooling。CCP表示cascade corner pooling。

有无利用center信息的定性分析:

有无center pooling的定性分析:

在corner pooling和cascade corner pooling上的定性分析:

4.2、Error Analysis

5、Main contribution
1、该论文提出了一种CenterNet模型,将目标检测任务转换成检测一个center keypoint和两个corners,三个点的任务。
2、该论文设计了center pooling和cascade corner pooling两个模块,来解决CornerNet无法利用bounding box内部信息的问题。

“你说被火烧过、才能出现凤凰
逆风的方向、更适合飞翔
我不怕千万人阻挡、只怕自己投降。”——五月天《倔强》