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-free。
对于目标检测,one-stage的方法是给图像中使用了一个叫anchor的机制,去排布很多框在图像中,直接进行框的打分;而two-stage的方法会对这些框中的featuremap进行重新计算,再进一步进行分类和回归。后处理一般使用的是非极大值抑制,以去掉那些重复的框。因为大多数训练都不适用这种端到端的检测,这种后处理一般比较难以微分和训练。尽管如此,在过去的5年,在这方面也有许多方法提出。但是这种基于滑动窗的检测方法需要去枚举各种潜在的图像位置和尺寸,是比较浪费时间的。
在本文我们提出的方法,用boundingbox中心点来代表这个物体,随后在这个点的基础上对物体的其他属性比如尺寸,维度,3D位置和方向和姿态等进行回归。这样一来,物体检测就成为了一个标准关键点估计问题。我们把图像输入到一个全卷积网络,产生对应的热图。热图中的峰值点就对应着图像中物体的中心,在中心附近的特征也可以对物体的bbox宽和高进行预测。整个网络的训练是在稠密监督学习上进行的,使用单向网络向前传递,不需要非极大值抑制等后处理方式。我们的方法还可以对物体的其他属性进行预测,比如在预测物体3D信息的时候,会单独预测物体的3D边界框尺寸和物体方向;对于人体姿势估计,我们把关节点视为人体中心点的位置偏离,并在中心点位置直接对它们进行回归。
(1) 基于区域分类region proposal的物体检测方法
RCNN通过产生大量的区域候选框,再用深度神经网络对这些框进行提取特征和分类;Faster-RCNN是先进行特征提取,再对特整图进行产生候选框和分类,以减少计算量。然而,这两种方法都是基于低效率的特征提取方法。
(2) 基于隐藏的anchor的物体检测
RCNN在网络中就进行的候选区域的产生,它在对分辨率的图像网格之上列举出了很多固定尺寸的bbox(具体称之为anchor),并进一步进行分类判断它是不是“前景”,如果anchor与真值的重叠率大于0.7就视为是前景,否则认为是背景或者忽略。每一个得到的前景anchor随后会进行一种基于多尺度分类的检测。我们所提出的方法与这种one-stage的基于anchor的机制比较类似,我们提出的物体中心点可以被理解成一种不可知形状的anchor,如图3。我们的中心点机制有几个特点:
传统的基于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)的结构:
每个网络内部的结构不同,但是在模型的最后都是加了三个网络构造来输出预测值,默认是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则代表这个目标的中心点,也就是我们要预测要学习的点。
论文亮点:
当然说了一堆优点,CenterNet的缺点也是有的,那就是:
推荐几个资源:
0)官方项目地址:
xingyizhou/CenterNetgithub.com
1) 官方推荐-船舶检测训练:
https://blog.csdn.net/weixin_42634342/article/details/97756458blog.csdn.net
2) 官方推荐-行人头肩检测训练:
https://blog.csdn.net/weixin_41765699/article/details/100118353blog.csdn.net
3) 官方推荐-检测跟踪:
kimyoon-young/centerNet-deep-sortgithub.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