基于anchor-free的目标检测算法CenterNet研究

2020.04.18 小记

近期一直在MOT算法研究,目前SOTA算法核心还是基于CenterTrack网络,而CenterTrack又是基于anchor-free式的CenterNet网络,CenterNet是继YOLO目标检测算法以来新创的目标检测派系,yolo系列都是anchor-based算法,因此着重研究了下CenterNet,其在相同速度下,CenterNet的精度比YOLOv3提高了4个左右的点,后将对此算法结果复现,并考虑相关算法迁移。

2019年比较新的目标检测的论文,抛弃了主流的使用anchor回归检测框的机制.不得不慨叹,AI算法日新月异,层出不穷,好吧我不知道怎样形容了,目标检测一段时间没看,就蹦出这么多新点子新算法,真是读论文的还没写论文的快。啊啊No!

进入正题...

============================分=============割==================线===============================

CenterNet(指本文的做法)将目标检测过程看做是中心点的预测,并预测出下采样误差偏移量和预测框尺寸。也是一种关键点检测的方法,主要在CornerNet上进行改进。

使用上,CenterNet可以用于2D、3D的目标检测以及人体姿势的关键点检测。

paper:CenterNet的真实论文名称叫做objects as points

先来看看效果吧:

 

惊不惊喜意不意外?CenterNet不仅可以用于目标检测,还可以用于其他的一些任务,如肢体识别或者3D目标检测等等,但是今天我们就重点说说目标检测的部分。CenterNet 牛逼的地方在于他不仅可以做2D目标检测,只需要少量扩展就可以迁移到3D目标检测和人体关键点检测上。

摘要

 图像检测中的检测框默认是轴对称的,大多数比较成功的检测方法都是要列举很大数量的候选框,再进一步进行定位和分类。但是这样的做法往往是多余而又低效率的。本文中我们提出了一种对物体的中心点进行定位的方法,并且在此基础上回归出物体的其他属性,比如尺寸、3D位置、方向甚至是姿态。我们提出的网络称之为CenterNet,它是一个端到端可微分,更简化快捷精度更高的方法。

那CenterNet相比于之前的one-stage和two-stage的目标检测有什么特点?

  • CenterNet的“anchor”仅仅会出现在当前目标的位置处而不是整张图上撒,所以也没有所谓的box overlap大于多少多少的算positive anchor这一说,也不需要区分这个anchor是物体还是背景 - 因为每个目标只对应一个“anchor”,这个anchor是从heatmap中提取出来的,所以不需要NMS再进行来筛选
  • CenterNet的输出分辨率的下采样因子是4,比起其他的目标检测框架算是比较小的(Mask-Rcnn最小为16、SSD为最小为16)。

总体来说,CenterNet结构优雅简单,直接检测目标的中心点和大小,是真anchor-free。

 

1. Introduction

对于目标检测,one-stage的方法是给图像中使用了一个叫anchor的机制,去排布很多框在图像中,直接进行框的打分;而two-stage的方法会对这些框中的featuremap进行重新计算,再进一步进行分类和回归。后处理一般使用的是非极大值抑制,以去掉那些重复的框。因为大多数训练都不适用这种端到端的检测,这种后处理一般比较难以微分和训练。尽管如此,在过去的5年,在这方面也有许多方法提出。但是这种基于滑动窗的检测方法需要去枚举各种潜在的图像位置和尺寸,是比较浪费时间的。

在本文我们提出的方法,用boundingbox中心点来代表这个物体,随后在这个点的基础上对物体的其他属性比如尺寸,维度,3D位置和方向和姿态等进行回归。这样一来,物体检测就成为了一个标准关键点估计问题。我们把图像输入到一个全卷积网络,产生对应的热图。热图中的峰值点就对应着图像中物体的中心,在中心附近的特征也可以对物体的bbox宽和高进行预测。整个网络的训练是在稠密监督学习上进行的,使用单向网络向前传递,不需要非极大值抑制等后处理方式。我们的方法还可以对物体的其他属性进行预测,比如在预测物体3D信息的时候,会单独预测物体的3D边界框尺寸和物体方向;对于人体姿势估计,我们把关节点视为人体中心点的位置偏离,并在中心点位置直接对它们进行回归。

 

2. Related work

(1) 基于区域分类region proposal的物体检测方法

RCNN通过产生大量的区域候选框,再用深度神经网络对这些框进行提取特征和分类;Faster-RCNN是先进行特征提取,再对特整图进行产生候选框和分类,以减少计算量。然而,这两种方法都是基于低效率的特征提取方法。

(2) 基于隐藏的anchor的物体检测

RCNN在网络中就进行的候选区域的产生,它在对分辨率的图像网格之上列举出了很多固定尺寸的bbox(具体称之为anchor),并进一步进行分类判断它是不是“前景”,如果anchor与真值的重叠率大于0.7就视为是前景,否则认为是背景或者忽略。每一个得到的前景anchor随后会进行一种基于多尺度分类的检测。我们所提出的方法与这种one-stage的基于anchor的机制比较类似,我们提出的物体中心点可以被理解成一种不可知形状的anchor,如图3。我们的中心点机制有几个特点:

  • l 它不是基于与真实框的重叠率来分配anchor,而是利用位置信息,我们没有一个区分前景和背景的阈值。
  • l 对于每个物体,我们只提出一个positive anchor,因此就不需非极大值抑制进行过滤。我们只是对关键点热图中的局部峰值进行关注。
  • l CenterNet的输出分辨率很高,这也消除了对多个anchor的需求。

传统的基于anchor的检测方法,通常选择与标记框IoU大于0.7的作为positive,相反,IoU小于0.3的则标记为negative,如下图a。这样设定好box之后,在训练过程中使positive和negative的box比例为1:3来减少negative box的比例(例如SSD没有使用focal loss)。

而在CenterNet中,每个中心点对应一个目标的位置,不需要进行overlap的判断。那么怎么去减少negative center pointer的比例呢?CenterNet是采用Focal Loss的思想,在实际训练中,中心点的周围其他点(negative center pointer)的损失则是经过衰减后的损失(上文提到的),而目标的长和宽是经过对应当前中心点的w和h回归得到的。

 

(3) Object detection by keypoint estimation

CoreNet[30]检测bbox的两个角点作为关键点,ExtremeNet【61】预测bbox的左右上下的值。这些点的估计和我们的CenterNet有着类似的鲁棒的网络,但是他们的方法需要在估计到点后进一步进行组合,是比较费时间的。我们的方法在估计到点后不用进行其他后处理。

(4) Monocular 3D object detection

3D框估计在自动驾驶领域很有用,Deep3Dbos方法利用slow-RCNN的框架,在估计到的2D信息后进行3D投影。CenterNet也用了类似的方法但是比他们的快,减少了计算。

 

使用的网络

论文中CenterNet提到了三种用于目标检测的网络,这三种网络都是编码解码(encoder-decoder)的结构:

  1. Resnet-18 with up-convolutional layers : 28.1% coco and 142 FPS
  2. DLA-34 : 37.4% COCOAP and 52 FPS
  3. Hourglass-104 : 45.1% COCOAP and 1.4 FPS

每个网络内部的结构不同,但是在模型的最后都是加了三个网络构造来输出预测值,默认是80个类、2个预测的中心点坐标、2个中心点的偏置。

前提条件

附一张检测的效果图:

假设输入图像为,其中 [公式] 和 [公式] 分别为图像的宽和高

然后在预测的时候,我们要产生出关键点的热点图(keypoint heatmap): [公式] ,其中 [公式] 为输出对应原图的步长,而 [公式] 是在目标检测中对应着检测点的数量,如在COCO目标检测任务中,这个 [公式] 的值为80,代表当前有80个类别。

R是生成热图的步长,C是热图中关键点的数量。通常在人体估计中C=17,而物体检测中C=80,同时R一般取4,以对图像进行下采样。当 [公式]时表示这个点就是估计到的关键点, [公式] 时表示这个点就是背景点。

这样, [公式] 就是一个检测到物体的预测值,对于 [公式] ,表示对于类别 [公式] ,在当前 [公式] 坐标中检测到了这种类别的物体,而 [公式] 则表示当前当前这个坐标点不存在类别为 [公式]的物体。

在整个训练的流程中,CenterNet学习了CornerNet的方法。对于每个标签图(ground truth)中的某一 [公式] 类,我们要将真实关键点(true keypoint) [公式] 计算出来用于训练,中心点的计算方式为 [公式] ,对于下采样后的坐标,我们设为 [公式] ,其中 [公式] 是上文中提到的下采样因子4。所以我们最终计算出来的中心点是对应低分辨率的中心点。

然后我们利用 [公式] 来对图像进行标记,在下采样的[128,128]图像中将ground truth point以 [公式] 的形式,用一个高斯核 [公式]来将关键点分布到特征图上,其中 [公式] 是一个与目标大小(也就是w和h)相关的标准差。如果某一个类的两个高斯分布发生了重叠,直接取元素间最大的就可以。

 

每个点 [公式] 的范围是0-1,而1则代表这个目标的中心点,也就是我们要预测要学习的点。

论文亮点:

  1. 设计模型的结构比较简单,小白也可以轻松看明白,不仅对于two-stage,对于one-stage的目标检测算法来说该网络的模型设计也是优雅简单的。
  2. 该模型的思想不仅可以用于目标检测,还可以用于3D检测和人体姿态识别,虽然论文中没有是深入探讨这个,但是可以说明这个网络的设计还是很好的,我们可以借助这个框架去做一些其他的任务。
  3. 虽然目前尚未尝试轻量级的模型(这是我接下来要做的!),但是可以猜到这个模型对于嵌入式端这种算力比较小的平台还是很有优势的,希望大家多多尝试一些新的backbone(不知道mobilenetv3+CenterNet会是什么样的效果),测试一下

当然说了一堆优点,CenterNet的缺点也是有的,那就是:

  • 在实际训练中,如果在图像中,同一个类别中的某些物体的GT中心点,在下采样时会挤到一块,也就是两个物体在GT中的中心点重叠了,CenterNet对于这种情况也是无能为力的,也就是将这两个物体的当成一个物体来训练(因为只有一个中心点)。同理,在预测过程中,如果两个同类的物体在下采样后的中心点也重叠了,那么CenterNet也是只能检测出一个中心点,不过CenterNet对于这种情况的处理要比faster-rcnn强一些的,具体指标可以查看论文相关部分。
  • 有一个需要注意的点,CenterNet在训练过程中,如果同一个类的不同物体的高斯分布点互相有重叠,那么则在重叠的范围内选取较大的高斯点。

 

 

推荐几个资源:

0)官方项目地址:

xingyizhou/CenterNet​github.com图标

1) 官方推荐-船舶检测训练:

https://blog.csdn.net/weixin_42634342/article/details/97756458​blog.csdn.net

 

2) 官方推荐-行人头肩检测训练:

https://blog.csdn.net/weixin_41765699/article/details/100118353​blog.csdn.net

 

3) 官方推荐-检测跟踪:

kimyoon-young/centerNet-deep-sort​github.com图标

 

 

参考文献:

1.https://zhuanlan.zhihu.com/p/66048276 

2.https://zhuanlan.zhihu.com/p/94093056

3.http://bbs.cvmart.net/topics/1667

4.https://zhuanlan.zhihu.com/p/85194783

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值