论文笔记: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减少带来的损失
      在这里插入图片描述

Label的生成以及监督

Heat Map
  • 对于任一GT BBox,先找到它在输出Feature Map(Heat Map)中的坐标 p ~ \widetilde{p} p (除以output stride R R R,然后取整) p ~ = ⌊ p / R ⌋ \widetilde{p}=\lfloor p/R \rfloor p =p/R,从而得到GT BBox的中心与Heat Map坐标关系
  • Heat Map并不是仅仅将 p ~ \widetilde{p} p 上的值置为1,而是以 p ~ \widetilde{p} p 为中心(均值)建立高斯分布,值得注意的是方差 σ p 2 \sigma^{2}_{p} σp2是根据框的大小自适应的:
    Y x y c = e x p ( − ( ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 ) ) Y_{xyc} = exp(-(\frac{(x-\widetilde{p}_{x})^{2} + (y-\widetilde{p}_{y})^{2}}{2\sigma^{2}_{p}})) Yxyc=exp((2σp2(xp x)2+(yp y)2))
  • 当存在多个BBox,导致一个点下会有多个响应时,我们选择最大的响应作为 Y x y c Y_{xyc} Yxyc的值
  • Y x y c Y_{xyc} Yxyc通过带有focal loss的逻辑回归来进行监督:
    在这里插入图片描述
  • 对于每个类别都有相应的Heat Map,因此这里会产生 ( H / R , W / R , C ) (H/R, W/R, C) (H/R,W/R,C)大小的Label,C为要检测的类别数目
Offset
  • 显然 p ~ = ⌊ p / R ⌋ \widetilde{p}=\lfloor p/R \rfloor p =p/R这个过程是会带来检测框的精度损失的。为了补偿,需要回归额外的偏移量 O p ~ = p / R − p ~ O_{\widetilde{p}} = p/R - \widetilde{p} Op =p/Rp
  • O p ~ O_{\widetilde{p}} Op 通过L1 loss进行监督
  • 最终预测BBox的坐标 = HeatMap局部极值坐标 + offset
  • Offset有2个纬度(x,y),channel = 2 ,因此这里产生了一个 ( H / R , W / R , 2 ) (H/R, W/R, 2) (H/R,W/R,2)大小的Label
宽高(Size)
  • 这里没有对宽高进行一定的缩放,回归的目标 s k = ( x 2 k − x 1 k , y 2 k − y 1 k ) s_k = (x_2^k - x_1^k, y_2^k - y_1^k) sk=(x2kx1k,y2ky1k),同样这里channel = 2, 因此产生了一个 ( H / R , W / R , 2 ) (H/R, W/R, 2) (H/R,W/R,2)大小的Label
  • 使用L1 loss宽高进行回归
  • 最终Heat Map坐标,偏移量,宽高,共同表征了一个目标框
Loss

多个loss最终用线性组合合并起来:
在这里插入图片描述

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

除了宽高以外,回归量还可以包含更多的东西,如3D Size(长宽高,深度,角点,人体关键点,朝向等,具体的编码方式如下图)
在这里插入图片描述

实现细节

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

总结

  • 实现了一个小而美的算法,将目标检测转换为带有回归量的关键点检测,从而去掉了NMS&anchor
  • 并且能够同时回归其他的目标属性,如长宽高、朝向,深度等
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值