这篇论文中了CVPR 2019。作者的想法非常具有创新性,center net不仅仅可以用于目标检测,它具有很强的鲁棒性,可以迁移到姿态识别、3D检测等其他视觉任务中。相信读到这里的读者已经对之前的目标检测算法有了一定的了解,所以本文不再对比之前的做法,直接解释center net的做法,最后进行总结

安卓 目标检测 目标检测centernet_安卓 目标检测


  • BackBone
  • detect points
  • how center be bbox
  • 实验结果
  • 总结


BackBone

CenterNet想要提取输入图像的特征,以heatmap的形式来检测目标。论文中给出了三种BackBone:ResNet-18、DLA-34、Hourglass-104,检测速度依次下降,检测精度依次上升。经过BackBone的提取,输出heatmap。输入的heatmap相比于初始图像,尺寸只减小了4倍,最后的offset微调也会方便很多。

detect points

我们这一步的目标是预测center,对于真实的标签来说,我们使用

安卓 目标检测 目标检测centernet_目标检测_02

对一个bbox进行说明,对于bbox的center,我们认为是

安卓 目标检测 目标检测centernet_目标检测_03

这样就找到了真实的图像中的center,然后再图像中使用二阶高斯分布,center为中心点,概率值为1,如果有多个目标在某个点的概率值重叠,选取较大的值作为概率值,对于预测corner,我们得到了经BackBone提取的热力图,这一步我们将heatmap中的峰值像素点找出,具体的方法是判断是否一个点大于或者等于他周围的八个点,就找到了预测center,可以带入高斯公式得到概率值。接下来便是计算损失函数

安卓 目标检测 目标检测centernet_计算机视觉_04


这一步的损失函数可以用focal loss表示为(论文中α=2,β=4属于超参数):

安卓 目标检测 目标检测centernet_深度学习_05


N为峰值点数量,当GT为1时,如果预测准确,则该点的损失函数为0,若预测值

安卓 目标检测 目标检测centernet_安卓 目标检测_06

不为1时,随着

安卓 目标检测 目标检测centernet_计算机视觉_07

)的减小,损失也越大。

在经过4倍下采样后,关键点的位置信息会丢失一部分,为了弥补这部分误差,使用L1loss弥补偏差位置,以便于更好的得到关键点。

安卓 目标检测 目标检测centernet_损失函数_08


希望经过训练后得到一个对于所有class,值共享的O(offset)

how center be bbox

我们可以预测到center,那么如何得到他的bbox?,

安卓 目标检测 目标检测centernet_深度学习_09

是真实的bbox左上、右下点的坐标,为了得到预测的bbox的尺寸,用L1 loss训练Lsize

安卓 目标检测 目标检测centernet_安卓 目标检测_10


安卓 目标检测 目标检测centernet_深度学习_11

为预测的尺寸,

安卓 目标检测 目标检测centernet_目标检测_12

Sk为真实尺寸。

至此,所有的损失函数已经提出

安卓 目标检测 目标检测centernet_目标检测_13

(λsize=0.1,λoff=1)

最后预测的bbox位置,大小是:

安卓 目标检测 目标检测centernet_安卓 目标检测_14

每个坐标的第一个值是预测到的center,第二个值是offset,第一个值加第二个值就是center,第三个值就是画出了bbox的大小和位置。

安卓 目标检测 目标检测centernet_深度学习_15


整个网络最后输出的是一个C+4的值,C为类别数,4为坐标

实验结果

安卓 目标检测 目标检测centernet_深度学习_16


安卓 目标检测 目标检测centernet_计算机视觉_17


安卓 目标检测 目标检测centernet_计算机视觉_18


安卓 目标检测 目标检测centernet_安卓 目标检测_19

总结

优点:

  • 不使用anchor,减少超参数量
  • 不使用NMS后端处理,直接输出Bbox
  • 由于没有了anchor NMS,速度快了许多,精度也提升了许多
  • 鲁棒性强,不仅仅可以用于普通的目标检测,在姿态检测、3D检测也取得了显著提升

缺点:

  • 当两个物体过于接近,会将他们检测为1个目标