论文笔记:Object as Points

论文:https://arxiv.org/pdf/1904.07850.pdf
代码:
https://github.com/xingyizhou/CenterNet

主要贡献:

  • 摒弃了One stage 或者 two-stage的基于Anchor对BBox进行回归+分类的操作
  • 将BBox为中心点+宽高这样的方式,从而直接将BBox的回归转换成角点的检测
  • 同时这个BBox可以包含(编码)更多的信息,比如中心点 + 宽高 + 朝向 + 深度等
  • 以点来代替Anchor回归+分类的机制,更高效

One-stage 或者 Two-stage面临的问题:

  • 需要Anchor。这里作者将Anchor概括为:一系列可能的BBox,用于在输出Feature map之间滑动,并且基于这些滑动的BBox进行offset的回归&BBox的分类
  • Two-stage则被概括为先通过Anchor取bbox然后做分类
  • 无论是One还是Two stage都需要NMS对BBox进行后处理,根据IOU去掉重复的框
  • 基于Anchor的检测方法都有一个问题:对于输出的每个点都需要枚举所有Anchor,计算对应的偏移量以及分类结果,从而花费更多的计算

改进思路:

  • 将物体表征为一个点,这个点的坐标就是物体矩形框的中心
  • 然后这个点可以附上一些额外的信息,比如深度,宽高,朝向等等。那么物体检测就可以转换为特征点检测了
  • 实际操作的时候就是输入图像->全卷积网络->热力图,热力图局部响应最大的坐标,就是检测到的物体坐标,再回归一张特征图,表征其相关属性,如偏移,宽高等,就能够实现物体的检测
  • 这种方法还能避免NMS这种检测的后处理
  • 关于Anchor的解释:
    1. 作者认为这种方法本质上也是一种anchor based,Anchor就是每个输出feature map的坐标,只是没有在anchor中用了宽高信息(因此输出量没有先验值)。正因为没有宽高信息,Anchor对应正负样本的方式无需根据IOU+人工阈值去判断。
    2. 其次,如Figure 3所示,每个点只有一个Anchor(feature map坐标),因此只有1个正样本,所以不需要额外地做NMS,直接取局部的极值
    3. 与Anchor Based的方法(输出Feature Map中一个点对应多个Anchor的方法)相比,输出feature map更大(1/4输出,而一般anchor based都只是 1/16),能缓解Anchor减少带来的损失
      论文笔记:Object as Points

Label的生成以及监督

Heat Map

  • 对于任一GT BBox,先找到它在输出Feature Map(Heat Map)中的坐标p~\widetilde{p}(除以output strideRR,然后取整)p~=p/R\widetilde{p}=\lfloor p/R \rfloor,从而得到GT BBox的中心与Heat Map坐标关系
  • Heat Map并不是仅仅将p~\widetilde{p}上的值置为1,而是以p~\widetilde{p}为中心(均值)建立高斯分布,值得注意的是方差σp2\sigma^{2}_{p}是根据框的大小自适应的:
    Yxyc=exp(((xp~x)2+(yp~y)22σp2)) Y_{xyc} = exp(-(\frac{(x-\widetilde{p}_{x})^{2} + (y-\widetilde{p}_{y})^{2}}{2\sigma^{2}_{p}}))
  • 当存在多个BBox,导致一个点下会有多个响应时,我们选择最大的响应作为YxycY_{xyc}的值
  • YxycY_{xyc}通过带有focal loss的逻辑回归来进行监督:
    论文笔记:Object as Points
  • 对于每个类别都有相应的Heat Map,因此这里会产生(H/R,W/R,C)(H/R, W/R, C)大小的Label,C为要检测的类别数目

Offset

  • 显然p~=p/R\widetilde{p}=\lfloor p/R \rfloor这个过程是会带来检测框的精度损失的。为了补偿,需要回归额外的偏移量Op~=p/Rp~O_{\widetilde{p}} = p/R - \widetilde{p}
  • Op~O_{\widetilde{p}}通过L1 loss进行监督
  • 最终预测BBox的坐标 = HeatMap局部极值坐标 + offset
  • Offset有2个纬度(x,y),channel = 2 ,因此这里产生了一个(H/R,W/R,2)(H/R, W/R, 2)大小的Label

宽高(Size)

  • 这里没有对宽高进行一定的缩放,回归的目标sk=(x2kx1k,y2ky1k)s_k = (x_2^k - x_1^k, y_2^k - y_1^k),同样这里channel = 2, 因此产生了一个(H/R,W/R,2)(H/R, W/R, 2)大小的Label
  • 使用L1 loss宽高进行回归
  • 最终Heat Map坐标,偏移量,宽高,共同表征了一个目标框

Loss

多个loss最终用线性组合合并起来:
论文笔记:Object as Points

检测框的解码

  • 从最终输出的C个channel的Heat Map中,对每个channel取出局部极值点
  • 局部极值点就是对每一张heat map用3x3的最大值滤波,找到3X3中的极值点
  • 对于每个类别,保留响应最大的100个极值点
  • 极值点对应的响应值就是目标的置信度。本文这种方式取代了NMS
  • 最终将对应的回归值(offset, 宽高)通过一下的方式解码,解出最终的检测框x^,y^{\hat{x},\hat{y}}应该是HeatMap坐标乘以output stride:
    论文笔记:Object as Points

其他任务的回归

除了宽高以外,回归量还可以包含更多的东西,如3D Size(长宽高,深度,角点,人体关键点,朝向等,具体的编码方式如下图)
论文笔记:Object as Points

实现细节

  • 作者在实验中分别尝试了HourGlass Network, ResNet, DLA等backbone
  • 并且在ResNet DLA 上用了可变形卷积
  • Focal方面α=2\alpha=2, β=4\beta=4
  • Loss权重上λsize=0.1\lambda_{size} = 0.1, λoffset=1\lambda_{offset} = 1

总结

  • 实现了一个小而美的算法,将目标检测转换为带有回归量的关键点检测,从而去掉了NMS&anchor
  • 并且能够同时回归其他的目标属性,如长宽高、朝向,深度等