CenterNet:Objects as Points学习笔记

Objects as Points

论文链接

代码链接

Abstract

  • 本文将目标建模为一个点,即其边界框的中心点,本文的检测器CenterNet采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。
  • CenterNet实现了速度与精度的最好权衡
    • on the MS COCO dataset, with 28.1% AP at 142 FPS, 37.4% AP at 52 FPS, and 45.1% AP with multiscale testing at 1.4 FPS.

Introduction

CenterNet:Objects as Points学习笔记_第1张图片

  • 如图2所示,本文用边界框的中心来表示目标
  • 本文的方法很容易扩展到其他领域,比如3D目标检测和多人姿态估计

Related Work

  • 本文的方法与基于Anchor的一阶段算法类似,不同的是CenterNet用中心点代替了Anchor,不同之处在于:

    1. 我们分配的锚点仅仅是放在位置上,没有尺寸框。没有手动设置的阈值做前后景分类。(像Faster RCNN会将与GT IOU >0.7的作为前景,<0.3的作为背景,其他不管)
    2. 每一个目标只有一个positive的anchor,所以不需要NMS。仅仅是简单的从关键点热图中提取峰值点
    3. CenterNet使用高分辨率输出(步幅为4),相对传统的目标检测器(步幅为16),所以不需要多尺度anchor

CenterNet:Objects as Points学习笔记_第2张图片

  • 相较于其他基于关键点估计的检测方法,CenterNet省去了在关键点检测后的分组阶段

Preliminary

  • 网络的输入为 I ∈ R W × H × 3 I ∈ R^{W×H×3} IRW×H×3

  • 网络的输出是一个关键点热图 Y ^ ∈ [ 0 , 1 ] W R × H R × C \hat Y ∈[0,1]^{\frac{W}R×\frac{H}R×C} Y^[0,1]RW×RH×C,其中 R R R是输出步长4, C C C是关键点的类型数(如在人体姿态估计中是18,在COCO目标检测中是80)

  • Y ^ x , y , c = 1 \hat Y_{x,y,c} = 1 Y^x,y,c=1对应检测到的关键点, Y ^ x , y , c = 0 \hat Y_{x,y,c} = 0 Y^x,y,c=0表示背景

  • 使用沙漏网络( hourglass network)、ResNet、DLA作为backbone

  • 训练沿用了CornerNet的方法

    • 使用高斯核 Y x y c = e x p − ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 Y_{xyc}= exp^{−\frac{(x−\tilde p_x)^2+(y−\tilde p_y)^2}{2σ^2_p}} Yxyc=exp2σp2(xp~x)2+(yp~y)2来减少对真实关键点周围负样本的惩罚, σ p σ_p σp根据目标的大小而定,如果同一个类的两个高斯重叠,则采用这篇论文里的方法 the element-wise maximum (这里有一个问题,本文的方法每张图片对每一个类只能检测一个目标吗? 这里刚开始理解错了,这个部分是针对每一个Groundtruth,所以只有一个对应的预测点)
    • Heatmaps损失函数是有像素级别的有关键点惩罚减少的focal loss( N N N是输入图片中的关键点的数量):

CenterNet:Objects as Points学习笔记_第3张图片

  • Offsets损失函数为(监督仅作用于关键点位置,所有其他位置均被忽略):

在这里插入图片描述

Objects as Points

  • ( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) (x^{(k)}_1, y^{(k)}_1, x^{(k)}_2, y^{(k)}_2) (x1(k),y1(k),x2(k),y2(k)) c k c_k ck类的对象 k k k的边界框,它的中心点是 p k = ( x 1 ( k ) + x 2 ( k ) 2 , y 1 ( k ) + y 2 ( k ) 2 ) p_k=(\frac {x^{(k)}_1+x^{(k)}_2}2,\frac {y^{(k)}_1+y^{(k)}_2}2) pk=(2x1(k)+x2(k),2y1(k)+y2(k))
  • 对于每个目标,我们回归其大小 s k = ( x 1 ( k ) − x 2 ( k ) , y 1 ( k ) − y 2 ( k ) ) s_k=(x^{(k)}_1-x^{(k)}_2,y^{(k)}_1-y^{(k)}_2) sk=(x1(k)x2(k),y1(k)y2(k)),为了限制计算量,对所有类别的目标使用单一大小的预测 S ^ ∈ R W R × H R × 2 \hat S ∈ R^{\frac{W}R×\frac{H}R×2} S^RRW×RH×2
  • size损失为:

CenterNet:Objects as Points学习笔记_第4张图片

  • 总的损失( λ s i z e = 0.1 , λ o f f = 1 λ_{size}= 0.1, λ_{off}= 1 λsize=0.1,λoff=1):

在这里插入图片描述

  • 使用单一的全卷积网络来预测关键点$\hat Y $, offset $ \hat O , ∗ ∗ s i z e ∗ ∗ , **size** ,size \hat S , 每 个 位 置 有 ,每个位置有 ,C+4$个输出

CenterNet:Objects as Points学习笔记_第5张图片

  • From points to bounding boxes

    • 在推理时,提取每个类别热图中的峰值(大于其周围八个点),保留100个峰值
    • keypoint value Y ^ x i y i c \hat Y_{x_iy_ic} Y^xiyic作为检测置信度的度量
    • 通过下面的公式生成边界框( ( δ x ^ i , δ y ^ i ) = O ^ x ^ i , y ^ i (δ\hat x_i, δ\hat y_i) =\hat O_{\hat x_i, \hat y_i} (δx^i,δy^i)=O^x^i,y^i and ( w ^ i , h ^ i ) = S ^ x ^ i , y ^ i (\hat w_i,\hat h_i) =\hat S_{\hat x_i, \hat y_i} (w^i,h^i)=S^x^i,y^i​ )

CenterNet:Objects as Points学习笔记_第6张图片

Implementation details

  • 用可变性卷积修改了ResNet18和DLA34

Experiments

  • 不同的backbone对精度的影响

CenterNet:Objects as Points学习笔记_第7张图片

  • 和其他方法的对比

CenterNet:Objects as Points学习笔记_第8张图片

  • 和当时所有主流方法对比(单尺度/多尺度)

CenterNet:Objects as Points学习笔记_第9张图片

Conclusion

  • 本文方法时在CornerNet的基础上做了改进,用检测中心点取代检测两个角点,在一阶段检测器中达到了sota,在精度和速度之间做了很好的权衡
  • 个人理解相较CornerNet提升的原因在于,中心点附近覆盖了更多的特征,所以更容易激活

你可能感兴趣的:(Object,Detection,计算机视觉,深度学习,机器学习)