zl程序教程

您现在的位置是:首页 >  其他

当前栏目

[Intensive Reading]目标检测(object detection)系列(十三)CenterNet:no Anchor,no NMS

2023-03-14 22:52:52 时间

目标检测系列: 目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作 目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享 目标检测(object detection)系列(三) Fast R-CNN:end-to-end的愉快训练 目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN 目标检测(object detection)系列(五) YOLO:目标检测的另一种打开方式 目标检测(object detection)系列(六) SSD:兼顾效率和准确性 目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN 目标检测(object detection)系列(八) YOLOv2:更好,更快,更强 目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言 目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度 目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作 目标检测(object detection)系列(十二) CornerNet:anchor free的开端 目标检测(object detection)系列(十三) CenterNet:no Anchor,no NMS 目标检测(object detection)系列(十四) FCOS:用图像分割处理目标检测

目标检测扩展系列: 目标检测(object detection)扩展系列(一) Selective Search:选择性搜索算法 目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘 目标检测(object detection)扩展系列(三) Faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3在损失函数上的区别

简介

CenterNet的论文是《Objects as Points》,其作者是得克萨斯大学奥斯汀分校的Xingyi Zhou,Xingyi Zhou后续在CenterNet的基础上,将其扩展到多目标跟踪领域,近期工作为CenterTrack。 CenterNet从名字就可以很直观的看出,CenterNet是将目标检测问题看做对于目标中心点的检测,它是继CornerNet之后的又一个Anchor-free方法,它们之间也有比较多的相似之处,区别在于CornerNet是找目标的角点,而CenterNet是找目标的中心点。

CornerNet原理

Motivation

CenterNet的出发点和RetinaNetCornerNet都是差不多的,对于one-stage的目标检测器,大量的anchor导致正负样本的不平衡,网络训练时loss会被大批量负样本所左右。同时又由于检测器是one-stage的,一旦预设了anchor,没办法二次筛选它。所以RetinaNet提出了Focal loss,在计算损失时弱化负样本的影响。而CornerNet和CenterNet则是直接弃用了anchor,除了上面的原因,还有一个就是anchor的设计是完全先验的,有大量的超参数,比如如何选择尺度,比例,多少个分支等等,每个层放几个等等,每个结构都不一样。

Inference

对于一个目标检测任务,一个backbone最后会输出三个分支,分别是Heatmap,Center offset和Box size,如下:

  1. Heatmap: C × H × W ,最大值即为目标中心
  2. Center offset: 2 × H × W , 预测中心与真值的偏移量
  3. Box size: 2 × H × W ,每个目标中心处,包含BBox大小的信息

也可以表示为下图的过程,Heatmap作为最核心的输出,表示物体的中心点,而由于下采样造成的不对称,CenterNet使用中心点的offset来修正它,确定中心点后,根据size分支的输出最后确定bbox。 而上面的C,就是目标检测任务的类别数量了,对于COCO就是80,相当于把不同类别的目标放到不同的channel上做。但是除了Heatmap,其余两个分支不需要C倍的通道数量。

相比于CornerNet,CenterNet的中心点Heatmap极大的简化了算法的复杂程度,因为一个目标用一个heatmap就可以表示出来,不再需要左上角和右下角两张heatmap,也就不涉及判断哪两个角点属于一个目标的问题。 至于CornerNet认为的“目标的中心点不好定义,目标角点更为清晰明确”这个观点,在CNN的拟合能力面前,看起来是不成问题的。

Train

CenterNet对于目标检测的分支有三个,所以对应的损失也是三个,分别是Heatmap损失,offset损失和size损失:

Heatmap loss:

offset and size loss:

其中CenterNet的Heatmap loss参考的是CornerNet,包括高斯映射,Focal loss的使用都是这样。大家可以直接看之前的文章,在这里就不重复了,而offset loss也是和CornerNet相似的,只是CornerNet使用的smoothL1,而CenterNet直接用了L1,CornerNet预测了左上角和左下角点,所以不需要再预测size,而CenterNet的size loss和offset loss是差不多的,也是L1。

Other

no NMS

CenterNet的结构是可以不做NMS的,本质上其实也是因为no Anchor,这意味着没有大量的先验预设框,不需要过NMS进行滤除,这让CenterNet的后处理变得比较简单,并且更加接近于end-to-end。

关于下采样

此外还有一个很有意思的地方,centernet主干网络的在设计的时候,下采样倍率普遍比较小,CenterNet的倍率是4,CornerNet的下采样倍率是5,而Anchor base的方法,下采样倍率就要大的多,比如YOLOv3是在16的基础上构建三个scale,分别是8,16,32。 也就是YOLOv3最小的倍率也是CenterNet的2倍,这说明Anchor Free方法越来越接近将目标检测任务抽象成类似图像分割(语义,实例),姿态估计,人脸对齐这样的对于点的回归任务来做,而不是像之前的对Anchor修正的方式。所以Anchor Free需要一个更大尺寸的feature map来支撑这个任务,反而feature map厚度变小了,而Anchor base方法的feature map厚度普遍都比较大。

resnet主干的centernet

centernet同样选择了resnet18和resnet101主干 ,结合上面说到的下采样倍率,就会带来一个问题,怎么让resnet的结构下采样2次,4倍,而不是原来的5次,32倍? centernet选择在resnet最后接上转置卷积,一共接了三层,每一层stride=2,这样一来原本降下的倍率又被重新升上去,变成了2,4,8,16,32,16,8,4的结构。

人体关键点预测

CenterNet由于其简洁的结构,使它非常容易的扩展到其他任务上,比如人体姿态估计,也可以成为CenterPose,以coco的17点姿态估计为例,CenterPose的输出为:

  1. Center Heatmap: 1 × H × W ,最大值即为目标中心
  2. Center offset: 2 × H × W , 预测中心与真值的偏移量
  3. Center Box size: 2 × H × W ,每个目标中心处,包含BBox大小的
  4. Center Points offset: 34 × H × W ,最大值即为目标中心
  5. Points Heatmap: 17 × H × W , 预测中心与真值的偏移量
  6. Points offset: 2 × H × W ,每个目标中心处,包含BBox大小的

CenterPose一共有六个分支的输出,前四个定义了单类的目标检测任务和17个点关于中心点的偏移,这是一套17个关键点的预测,后两个定义了17点的预测以及它们各自的offset,这又是一套17个关键点的预测,所以CenterPose一共预测了两套关键点,这样冗余的设计是有意义的: 首先直接对于点的预测可信度应该是更高的(分支5),但是它没办法关联成一个person,这个关联要考分支4,因为分支1、2、3定义了一个person,分支4的offset可以估计出17个点,这17个点可以根据距离关联到5、6预测的17个点上,而对于同样5、6没有预测到的点,可以使用4的点来输出。 当然CenterPose的损失就需要有6个了。

CenterNet性能评价

首先对于backbone的对比,CenterNet也使用了Hourglass-104,由于它比DLA-34大很多,所以效果也在变好,而这里提及的ResNet也不是原版的ResNet结果,而是带了转置卷积和可形变卷积的,这些主干网络其实是在参考语义分割和姿态估计任务。

最后这张表很有说服力,上面是two-stage方法,下面是one-stage方法,其中包括anchor base和anchor free,anchor base里的YOLOv3被拉开了一大截,而另一个Anchor Free的CornerNet,由于是Hourglass-104的backbone,效率也没办法了CenterNet比,所以综合效率和性能,CenterNet还是很不错的。