为了解决 CornerNet 不足指标外部信息的问题,提出了 CenterNet 应用三元组进行指标检测,蕴含一个核心关键点和两个角点。从试验后果来看,CenterNet 绝对于 CornerNet 只减少了大量推理时延,但带来了将近 5 个点的 AP 晋升
起源:晓飞的算法工程笔记 公众号
论文: CenterNet: Keypoint Triplets for Object Detection
- 论文地址:https://arxiv.org/abs/1904.08189
- 论文代码:https://github.com/Duankaiwen/CenterNet
Introduction
CornerNet 将目前罕用的 anchor-based 指标检测转换为 keypoint-based 指标检测,应用角点对示意每个指标,CornerNet 次要关注指标的边界信息,不足对指标外部信息的获取,很容易造成误检,如图 1 所示。为了解决这个问题,论文提出 CenterNet,在角点对的根底上退出核心关键点组成三元组进行检测,既能捕获指标的边界信息也能兼顾指标的外部信息。另外,为了更好地提取特色,论文还提出了 center pooling 和 cascade corner pooling,别离用于更好地提取核心关键点和角点。
Baseline and Motivation
CenterNet 以 CornerNet 为根底,为了检测角点,CornerNet 别离预测左上角点和右下角点的热图。另外,为每个角点预测了 embedding 向量和偏移值,雷同指标的角点的 embedding 向量间隔会十分小,偏移值则是对角点进行小范畴调整。最初别离抉择 top- k 个左上角点和 top- k 个右下角点,依据 embedding 向量间隔进行配对,预测框置信度为角点对的置信度均值。
论文对 CornerNet 的误检率进行了剖析,如表 1 所示,大部分的误检集中在低 IoU 区域,有 32.7% 的预测后果与 GT 的 IoU 低于 0.05,而小指标的误检率高达 60.3%,可能的起因是 CornerNet 无奈感知指标外部的信息,这个问题能够通过 ROI 池化二次分类来补救,然而计算耗费很大。于是,论文提出高效的代替计划 CenterNet,在 CornerNet 的角点对上再退出一个指标外部点组成三元组,以最低的老本捕获指标的外部信息。
Object Detection as Keypoint Triplets
CenterNet 的整体构造如图 2 所示,将每个指标示意为核心关键点和角点对。在 CornerNet 的根底上减少一个核心关键点的热图输入,先按 CornerNet 的办法获取 top- k 个预测框,而后应用核心关键点对预测框进行过滤和排序:
- 依据分数抉择 top- k 个核心关键点
- 联合对应的偏移值将核心关键点映射到输出图片
- 定义每个预测框的核心区域,查看核心区域是否蕴含核心关键点
- 如果核心区域蕴含核心关键点,保留该预测框,将分数替换为三个关键点的分数均值。如果核心区域不蕴含核心关键点,则去除该预测框。
核心区域的大小对检测后果有间接的影响,区域过小会导致小指标召回率低,而区域过大则会导致大指标准确率低。为此,论文提出了尺寸可知 (scale-aware) 的核心区域,可能依据预测框的大小进行调整。定义 $tl_x$ 和 $tl_y$ 为预测框的左上角点坐标,$br_x$ 和 $br_y$ 为预测框的右下角点坐标,$ctl_x$ 和 $ctl_y$ 为核心区域的左上角点坐标,$cbr_x$ 和 $cbr_y$ 别离为右下角点的坐标,四个点应满足以下关系:
$n$ 为奇数,决定核心区域的尺寸大小,论文对于尺寸小于 150 和大于 150 的预测框别离将 $n$ 设为 3 和 5。
图 3 展现了 $n=3$ 和 $n=5$ 的核心区域,依据公式 1 计算尺寸可知的核心区域,而后查看核心区域是否蕴含核心关键点。
Enriching Center and Corner Information
Center pooling
通常,指标的几何核心不肯定蕴含重要的分辨信息,比方人最有辨识度的中央在头部,而几何核心却在人体的两头。为了解决这个问题,论文提出核心池化来提取更丰盛的可辨认信息。
如图 a 所示,骨干网络输入特色图后,在判断核心关键点时,取特色图程度方向和垂直方向的最大值之和作为分数,这样可能很好地帮忙核心关键点的检测。
Cascade corner pooling
因为角点通常在指标之外,短少指标的相干信息,CornerNet 应用 corner pooling 来解决这个问题,如图 b 所示,取边界方向的最大值作为分数,但这会导致角点过于关注边界信息。
为了解决这个问题,须要让角点可能关注指标的外部,cascade corner pooling 如图 c 所示,首先在边界方向找到最大值,而后在边界最大值处向内找到外部最大值,将两个最大值相加作为分数输入,这样角点可能同时关注边界信息和指标信息。
Center pooling 和 cascade corner polling 可通过组合不同方向的 corner pooling 进行简略实现,如图 5 所示。须要留神,图 5b 为 cascade top corner pooling 模块,只输入左上角点在 top 方向值,还要加上 cascade left corner pooling 输入的 left 方向值。cascade left corner pooling 的构造跟图 5b 相似,只是替换 Top pooling 和 Left pooling 的地位。
Training and Inference
Training
CenterNet 的输出分辨率为 $511\times 511$,最初的热图大小为 $128\times 128$,残缺的网络损失函数为:
$L^{co}_{det}$ 和 $L^{ce}_{det}$ 为 focal loss,用来训练网络检测角点和核心关键点,$L^{co}_{pull}$ 和 $L^{co}_{push}$ 为角点 pull 损失和 push 损失,用来最大化和最小化 embedding 向量的间隔,$L^{co}_{off}$ 和 $L^{ce}_{off}$ 为 L1 损失,用来调整角点和中心点的偏移值。
Inference
测试时同时应用原图和程度翻转图片,每个图别离保留 70 个核心关键点、左上角点和右上关键点来预测,最初综合两个图片的后果进行 Soft-nms 输入。
Experiments
与 SOTA 指标检测办法比照。
与 CornerNet 的错误率优化比照。
比照试验。
CONCLUSION
为了解决 CornerNet 不足指标外部信息的问题,CenterNet 应用三元组进行指标检测,蕴含一个核心关键点和两个角点。从试验后果来看,CenterNet 绝对于 CornerNet 只减少了大量推理时延,但带来了将近 5 个点的 AP 晋升。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】