CenterNet:Objects as Points论文精读

论文题目: Objects as Points

论文地址: https://arxiv.org/pdf/1904.07850.pdf

代码: https://github.com/xingyizhou/CenterNet

   

参考了别人的一篇精读:来自 <https://blog.csdn.net/c20081052/article/details/89358658>

Abstract

 目标检测识别往往在图像上将目标用矩形框形式框出,该框的水平和垂直轴与图像的水平和垂直向平行。大多成功的目标检测器都先穷举出潜在目标位置,然后对该位置进行分类,这种做法浪费时间,低效,还需要额外的后处理。本文中,我们采用不同的方法,构建模型时将目标作为一个点——即目标BBox的中心点。我们的检测器采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。我们基于中心点的方法,称为:CenterNet,相比较于基于BBox的检测器,我们的模型是端到端可微的,更简单,更快,更精确。我们的模型实现了速度和精确的最好权衡,以下是其性能:

MS COCO dataset, with 28:1% AP at 142 FPS, 37:4% AP at 52 FPS, and 45:1% AP with multi-scale testing at 1.4 FPS.

用同个模型在KITTI benchmark 做3D bbox,在COCO keypoint dataset做人体姿态检测。同复杂的多阶段方法比较,我们的取得了有竞争力的结果,而且做到了实时的。

   

1. Introduction

目标检测 驱动了 很多基于视觉的任务,如 实例分割,姿态估计,跟踪,动作识别。且应用在下游业务中,如 监控,自动驾驶,视觉问答。当前检测器都以bbox轴对称框的形式紧紧贴合着目标。对于每个目标框,分类器来确定每个框中是否是特定类别目标还是背景。

One stage detectors 在图像上滑动复杂排列的可能bbox(即锚点),然后直接对框进行分类,而不会指定框中内容。

Two-stage detectors 对每个潜在框重新计算图像特征,然后将那些特征进行分类。

后处理,即 NMS(非极大值抑制),通过计算Bbox间的IOU来删除同个目标的重复检测框。这种后处理很难区分和训练,因此现有大多检测器都不是端到端可训练的。尽管如此,在过去的五年,这个想法取得了很好的效果。然而,基于滑动窗口的对象检测器有点浪费,因为它们需要枚举所有可能的对象位置和维度。

   

本文通过目标Bounding box中心点来呈现目标(见图2),然后在中心点位置回归出目标的一些属性,例如:object size, dimension, 3D extent, orientation方向, pose姿态。然后直接从中心位置的图像特征回归。 而目标检测问题变成了一个标准的关键点估计问题。我们仅仅将图像传入全卷积网络,得到一个热力图,热力图中的峰值点即中心点,每个峰值点处的图像特征可以预测Bounding box的宽高信息。

   

模型训练采用标准的监督学习,推理仅仅是一个单一的前向传播网络,不存在NMS这类后处理。

 

   

我们的方法是general的,可以扩展到其他简单的任务。通过预测每个中心点的额外输出,我们提供了三维目标检测和多人人体姿态估计的实验(见图4)。

对于3D bounding box estimation,我们回归到object absolute depth, 3D bounding box dimensions, and

object orientation方向。

对于人体姿态估计,我们考虑二维关节位置作为从中心开始的偏移量,并在中心点位置直接回归到它们。

我们的方法CenterNet的简单性允许它以非常高的速度运行(图1)。

通过一个简单的Resnet-18上卷积层,我们的网络以142FPS运行,COCO AP为28.1%

通过精心设计的关键点检测网络DLA-34[58],我们的网络以52FPS达到37.4%的COCO AP。

配备了SOTA的关键点预测网络Hourglass-104多尺度测试,我们的网络在1.4FPS下实现了45.1%的COCO AP。

在3D bounding box estimation和人体姿态估计方面,Inference speed更快,performance更SOTA。

   

   

   

2. Related work

我们的方法与基于锚点的one-stage方法相近。中心点可看成形状未知的锚点(见图3)。但存在几个重要差别(本文创新点):

第一,我们分配的锚点只知道它位置,不包含尺寸。没有手动设置的阈值做前后景分类。(像Faster RCNN会将与GT IOU >0.7的作为前景,<0.3的作为背景,其他不管);

第二,每个目标仅仅有一个正样本锚点,因此不会用到NMS,我们提取关键点特征图上局部峰值点(local peaks);(先前的目标检测都存在正样本与负样本不均衡的问题)

目标检测之样本不均衡来自 <https://zhuanlan.zhihu.com/p/63109691

第三,CenterNet 相比较传统目标检测而言(缩放16倍尺度[Mask rcnn, ResNet]),使用更大分辨率的输出特征图(缩放了4倍),因此不需要多个锚点;(YOLOv3的多尺度预测)

 

通过关键点估计做目标检测:

我们并非第一个通过关键点估计做目标检测的。

CornerNet将bbox的两个角作为关键点;

ExtremeNet 检测所有目标的top-, left-, bottom-, right-most(目标的最高点,最低点,最左边,最右边)和中心点;

这两种方法的的网络和我们的一样都建立在鲁棒的关键点估计网络之上。但是它们都需要经过一个关键点grouping阶段,这会降低算法整体速度;而我们的算法仅仅提取每个目标的中心点,无需对关键点进行grouping 或者是后处理;

   

单目3D 目标检测:

3D BBox检测为自动驾驶赋能。

Deep3Dbox使用一个 slow-RCNN 风格的框架,该网络先检测2D目标,然后将目标送到3D 估计网络;

3D RCNN在Faster-RCNN上添加了额外的head来做3D projection;

Deep Manta 使用一个 coarse-to-fine(由粗到精)的Faster-RCNN 用于多任务训练。

我们的模型同one-stage版本的Deep3Dbox3D RCNN相似。同样,CenterNet比它们都更简洁,更快。

   

3. Preliminary

输入图像I∈RW×H×3

C = 17 的人关节点,用于人姿态估计;

C = 80 的目标类别,用于目标检测。

我们默认采用下采用数为R=4 ;

A stacked hourglass network [30,40],

up convolutional residual networks (ResNet) [22,55],

and deep layer aggregation (DLA) [58].

   

>Inference[30] H. Law and J. Deng. Cornernet: Detecting objects as paired keypoints. In ECCV, 2018.

CornerNet

  

高斯核

  

如果对于同个类 c (同个关键点或是目标类别)有两个高斯函数发生重叠,我们选择元素级最大的。

   

training objective函数如下,像素级逻辑回归的focal loss:

α和β是focal loss的超参数(和CornetNet的参数一样α=2β=4);

   

下面章节介绍如何将关键点估计用于目标检测。

   

4. Objects as Points

   

我们没有对尺度进行归一化,而是直接使用原始像素坐标。

我们用一个恒定的λsize来计算损失。总的Training objective是

   

Backbone输出的特征根据不同的任务,输出不同的通道。使用的modality(模态)3*3-ReLU-1*1。详见第四节。

   

📌TIP

Objective function, cost function, loss function: are they the same thing? 

目标函数、成本函数、损失函数: 它们是一回事吗?

来自 <https://stats.stackexchange.com/questions/179026/objective-function-cost-function-loss-function-are-they-the-same-thing/179027>

Loss function 损失函数:通常是一个定义在数据点、预测和标签上的函数,并计算penalty(惩罚)。(Square Loss)
Cost function 成本函数:通常都比较笼统。它可能是训练集上的损失函数之和加上一些模型复杂度的惩罚(正则化)。
Objective function 目标函数:是你在训练过程中优化的任何功能的最普遍的术语。例如,最大似然法中的生成概率训练集是一个定义良好的目标函数,但它既不是损失函数,也不是代价函数(但是你可以定义一个等价的代价函数)。
 

A loss function is a part of a cost function which is a type of an objective function.

损失函数是成本函数的一部分,是目标函数的一种类型。
 

   

   

从点到bbox

目标位置对应的边界框(xtop,left,ytop,left,xright,button,yright,button

所有的输出都直接从关键点估计得到,无需基于IOU的NMS或者其他后处理。

   

4.1. 3D detection

三维检测估计每个对象有一个三维边界框,并且每个中心点需要三个额外的属性:depth、3D dimension和orientation(方向)。我们为每个属性添加一个单独的头。

depth

Inference[13] D. Eigen, C. Puhrsch, and R. Fergus. Depth map prediction from a single image using a multi-scale deep network. In NIPS, 2014.

   

Orientation方向

Orientation默认情况下是一个标量。然而,它很难回归。我们遵循[38],用两个bin来表示方向,通过in-bin回归。具体来说,

方向用8个标量值来编码的形式,每个bin有4个值。对于一个bin,两个值用作softmax分类,其余两个值回归到在每个bin中的角度。

有关这些损失的详情,请参阅补充资料。

   

4.2. Human pose estimation

我们提取到的所有关键点(关节点,此处是类似中心点检测用热力图回归得到的,对于热力图上值小于0.1的直接略去):

   

5. Implementation details

我们实验了4个结构:ResNet-18, ResNet-101, DLA-34, Hourglass-104. 我们用deformable卷积层来更改ResNets和DLA-34,按照原样使用Hourglass 网络。

Hourglass

堆叠的Hourglass网络[30,40]通过两个连续的hourglass 模块对输入进行了4倍的下采样,每个hourglass 模块是个对称的5层下和上卷积网络,并进行skip连接。该网络较大,但效果best keypoint estimation performance

ResNet

Xiao et al. [55]等人对标准的ResNet做了3个up-convolutional网络来得到更高的分辨率输出(最终stride为4)。(对ResNet改成也是4倍下采样)

为了节省计算量,我们改变这3个up-convolutional的输出通道数分别为256,128,64。up-convolutional核初始为双线性插值。在这3个up-convolutional之前各自加了一个3*3 deformable 卷积层。

DLA

Deep Layer Aggregation (DLA),是一个逐级跳跃连接的图像分类网络(hierarchical skip connections)

我们使用DLA的全卷积上采样版本去进行密集预测

将原来上采样层的卷积都替换成3x3的deformable卷积。

新增了很多跳跃连接。

我们在每个head之前添加一个(kernel_size=3×3,out_channels=256)的卷积层。最后的1×1卷积,然后产生所需的输出。

(c)原始的DLA,(d)修改后的DLA

   

Training

训练输入图像尺寸:512x512; 输出分辨率:128x128 (即4倍stride);

采用数据增强方式:随机翻转flip, 随机scaling (比例在0.6到1.3),裁剪cropping,颜色抖动color jittering;

采用Adam优化器;

在3D estimation分支任务中未采用数据增强(scaling和crop会影响尺寸);

更详细的训练参数设置(学习率,GPU数量,初始化策略等)

For the residual networks and DLA-34, we train with a batch-size of 128(on 8 GPUs) and learning rate 5e-4 for 140 epochs, with learning rate dropped 10× at 90 and 120 epochs,


respectively (following [55]). For Hourglass-104, we follow ExtremeNet [61] and use batch-size 29 (on 5 GPUs, with master GPU batch-size 4) and learning rate 2.5e-4 for 50 epochs with 10× learning rate dropped at the 40 epoch.

For detection, we fine-tune the Hourglass-104 from ExtremeNet [61]to save computation. The down-sampling layers of Resnet-101 and DLA-34 are initialized with ImageNet pretrain andthe up-sampling layers are randomly initialized.

ResNet-101 and DLA-34 train in 2.5 days on 8 TITAN-V GPUs, while Hourglass-104 requires 5 days.

Inference

采用3个层次的测试增强:无增强,flip增强,flip和multi-scale(0.5,0.75,1.25,1.5)增强;

For flip, we average the network outputs before decoding bounding boxes. 对于翻转,我们在解析outputs的bbox之前对outputs计算average

For multi-scale,we use NMS to merge results.对于多尺度,我们使用NMS去合并结果。

   

6. Experiments

见原论文

7. Conclusion

创新点:基于关键点,网络inference目标的中心点,再通过中心点回归目标的尺寸。该算法简单、快速、准确、端到端可微,不需要任何NMS后处理。这种想法是通用的,除了简单的二维检测之外,还有广泛的应用。CenterNet可以在一次向前传递中估计一系列额外的对象属性,如姿态、三维方向、深度和范围。

posted @ 2022-04-07 14:09  攻城狮?  阅读(132)  评论(0编辑  收藏  举报