论文解读-CenterNet:Keypoint Triplets for Object Detection
文章目录
-
-
1 背景
-
2 动机
-
3 算法部分
-
- 3.1 后处理
- 3.2 center region定义
- 3.3 center pooling
- 3.4 Cascade corner pooling
- 3.5 优化目标
-
4 实验部分
-
5 思考与总结
-
论文信息
文章链接:https://arxiv.org/abs/1904.08189
作者:Kaiwen Duan
单位:中科院、华为诺亚方舟实验室(实习单位)
代码地址:https://github.com/Duankaiwen/CenterNet
这篇论文花了一周多时间阅读,在阅读过程中尽管表面看似容易理解其整体思想却存在不少复杂难以 grasp 的地方。例如 center pooling为何能够奏效的问题 笔者将个人理解进行了详细记录 既为了便于自己后续查阅也希望能够帮助到有同样困扰的读者
1 背景
该论文提出的方法称为centinet,并采用的是 cornetwork架构,在介绍 centernetwork 之前基础性的知识对于理解 centernetwork 是必要的。
它是首个以关键点为基础的目标检测算法。
其灵感源自人体姿态关键点的检测。
其优点在于简化了 anchor box的设计过程。
整个网络结构如图所示,

通过观察图形可知, 输出结果分为三个主要分支: 热图( heatmaps)负责生成各类别目标的位置分布图, 每个位置处的特征向量由 embeddings 表示, 用于衡量两个目标点之间的匹配程度; 各处偏移量则用于精细调整各个角落的位置坐标, 从而弥补输出热图与输入图像之间定位上的偏差。
2 动机
虽然cornernet在创新性和效果上的表现非常出色,但目前仍存在优化空间。
cornernet采用了corner pooling操作来定位关键点;这一操作基于bounding box边界上的极值点查找机制;然而由于无法提取bounding box区域内的语义特征;因此会导致关键点定位出现误判;如图所示

为了增强说服力,作者增加了额外一组实验来深入探讨不同iou阈值与FD之间的关联。

其中,FD_{i}=1-AP_{i},AP_{i}表示iou阈值为i/100时对应的平均准确率。
论文中的描述如下,
“Corner- Net obtains 32.7% FD rate at IoU = 0.05. This means in average, 32.7 out of every 100 object bounding boxes have IoU lower than 0.05 with the ground-truth.”
我认为这句话在表述上存在不足之处。我的理解是:基于所有输出 bounding boxes 的数量设为 m,在这 n 个 bounding boxes 中(其中 n 满足 IoU \geq 0.05),约 32.7% 的比例具有错误的分类标签。(欢迎在评论区留下您的看法)
3 算法部分
为了更好地理解bounding box内部所包含的信息及其语义特征,一种直观的想法是采用cornernet+Roi pooling方法进行处理。然而,这样的分步处理计算量较大。
另一种思路是通过并行机制结合 bounding box 内部的语义信息实现目标检测任务。该研究者创新性地提出了一种名为"keypoint triplets"的方法,在 CornerNet 的基础上进一步优化了关键点检测算法。相较于 CornerNet 中采用的两个关键点设计,在该方案中引入了一个新的中心点概念以提高检测精度。
3.1 后处理
步骤1: 使用与cornernet相同的方法,生成top-k个bounding boxes;
步骤2: 根据打分值的大小,选择top-k个center keypoints;
步骤3: 使用offset值将center keypoints映射到input image上;
第4步:在每个边界框中设定一个中心区域,并以确定该中心区域是否包含中心关键点。
步骤5: 如果该central region包括了center keypoint,并且 bounding box的预测类别标签与对应的中心关键点一致,则应保留当前的 bounding box。
步骤6: 对bounding box的评分基于对应的key point triplets的平均得分用于表示该bounding box的质量评估。
3.2 center region定义
考虑到中心区域尺寸对当前 bounding box保留情况的影响
为此, 作者提出了'scale-aware'中心区域的概念. 其核心思想是根据bounding box的尺寸大小, 自动确定相应中心区域的比例. 即对于小目标物体而言, 其对应的中心区域较大;而对于大目标物体而言, 中心区域则较小.
公式表示 如下,

其中,
(tl_{x}, tl_{y}), (br_{x}, br_{y})分别为bounding box的左上角和右下角坐标,
(ctl_{x}, ctl_{y}), (cbr_{x}, cbr_{y})分别为center region的左上角和右下角坐标。
n为center region的大小,
其数值越大则中心区域尺寸越大。
较大的目标对应较小的n值,
而较小的目标则对应较大的n值。
具体来说,
论文中设置了两种不同的取值:
当bounding box宽度小于150时,
n=3;
而当宽度大于等于150时,
n=5。
单凭这个公式本身难以直观理解。可以通过将问题形象化表示出来进行抽象建模。例如取变量为ct_x后,在同一个一维坐标轴上定义两个变量分别对应左端点位置t_l^x和右端点位置t_r^x。那么分割比例为1: n-1的分割点位置就可以通过如下公式计算:\alpha = \frac{(n-1) t_l^x + t_r^x}{n}剩下的推导过程与此类似。
图形化表示 如下,

3.3 center pooling
目标的几何中心可能不具备强判别特征 。举例而言,在处理人体目标时,提取出该bounding box内的头部结构会比几何中心(衣物覆盖区域)更能辅助识别。
为了深入掌握目标语义特征的信息学习机制,作者开发了center pooling方案的具体流程如下。
步骤1: 对于特征图上的每一个像素,分别找到水平和垂直方向的最大值;
步骤2: 将这2个最大值相加,用来表征当前位置为center keypoint的置信度。
笔者对这一现象感到不解,在这种情况下,请解释其背后的逻辑呢?为了进一步说明问题,请举个反例:红色标记表明图像中的两个关键目标。根据上述定义方法进行计算后发现,在这种情况下通过中心池化方法计算出前三个中心关键点的位置如图中用绿色圆圈标注所示。由此可见,在该案例中点A被错误识别为关键点。
(欢迎大家留言讨论?)

3.4 Cascade corner pooling
在阐述CascadeCorner Pooling之前,在了解其基础架构时,请先观察原生Corner Pooling的概念。由此可见,在其定位机制下依赖于图像边界特征。然而容易使提取到的CornerPoint过于依赖于图像边界,在图1中出现了误判现象。
那么,怎么解决这个问题呢?
该研究者运用了 cascade corner pooling策略。旨在使corners能够解析 bounding box内的细节信息。如图1所示。详细而言,在特征层中取某一点进行分析时:首先通过corner pooling技术确定边界区域的最大响应位置;接着以该最大响应位置作为起点;沿着目标区域朝特定方向寻找次大的响应位置;将这四个关键位置处的最大响应强度进行叠加计算;用于量化该像素点作为角点的可能性大小。这样看来,在整个计算过程中各关键步骤的作用就变得清晰明了。

为实现统一表述,中心池化与Cascade角池化均可通过整合不同方向角池化的结果来达成目标。

3.5 优化目标
借鉴cornernet的设计理念,在本研究中我们同样致力于优化三个核心目标:第一项核心任务是关键点分类;第二项核心任务是关键点定位;第三项核心任务是关键点配对。
loss函数的数学定义如下,

其中'co'表示角点特征,'ce'表示中心点特征,分别对应了上述三个目标 L_{det}代表检测损失, L_{off}代表 off-sets损失,以及L_{push}代表推力损失.
4 实验部分
centernet在检测领域中的表现非常优异,在这一领域的研究中处于领先地位。

5 思考与总结
论文研究者首先基于CornetNet基准代码展开研究,随后发现了相关问题,而非单纯的理论探讨,这种系统化的思路具有重要的借鉴意义
论文中仅采用了两个尺度系数来确定中心区域(center region)的尺寸。显得较为粗糙。为了该区域设计尺寸模型, 使其能够根据bounding box(边界框)大小进行动态调整。可能是一个值得深入探讨的方向。
(3)论文作者在研究过程中特意引入了与目标相关的信息,并通过这一举措带来了明显的提升效果;这一思路无疑具有积极的意义;值得注意的是,在具体实现上仍存在一些待优化的空间。
