论文笔记: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的解释:
- 作者认为这种方法本质上也是一种anchor based,Anchor就是每个输出feature map的坐标,只是没有在anchor中用了宽高信息(因此输出量没有先验值)。正因为没有宽高信息,Anchor对应正负样本的方式无需根据IOU+人工阈值去判断。
- 其次,如Figure 3所示,每个点只有一个Anchor(feature map坐标),因此只有1个正样本,所以不需要额外地做NMS,直接取局部的极值
- 与Anchor Based的方法(输出Feature Map中一个点对应多个Anchor的方法)相比,输出feature map更大(1/4输出,而一般anchor based都只是 1/16),能缓解Anchor减少带来的损失
Label的生成以及监督
Heat Map
- 对于任一GT BBox,先找到它在输出Feature Map(Heat Map)中的坐标(除以output stride,然后取整),从而得到GT BBox的中心与Heat Map坐标关系
- Heat Map并不是仅仅将上的值置为1,而是以为中心(均值)建立高斯分布,值得注意的是方差是根据框的大小自适应的:
- 当存在多个BBox,导致一个点下会有多个响应时,我们选择最大的响应作为的值
-
通过带有focal loss的逻辑回归来进行监督:
- 对于每个类别都有相应的Heat Map,因此这里会产生大小的Label,C为要检测的类别数目
Offset
- 显然这个过程是会带来检测框的精度损失的。为了补偿,需要回归额外的偏移量
- 通过L1 loss进行监督
- 最终预测BBox的坐标 = HeatMap局部极值坐标 + offset
- Offset有2个纬度(x,y),channel = 2 ,因此这里产生了一个大小的Label
宽高(Size)
- 这里没有对宽高进行一定的缩放,回归的目标,同样这里channel = 2, 因此产生了一个大小的Label
- 使用L1 loss宽高进行回归
- 最终Heat Map坐标,偏移量,宽高,共同表征了一个目标框
Loss
多个loss最终用线性组合合并起来:
检测框的解码
- 从最终输出的C个channel的Heat Map中,对每个channel取出局部极值点
- 局部极值点就是对每一张heat map用3x3的最大值滤波,找到3X3中的极值点
- 对于每个类别,保留响应最大的100个极值点
- 极值点对应的响应值就是目标的置信度。本文这种方式取代了NMS
- 最终将对应的回归值(offset, 宽高)通过一下的方式解码,解出最终的检测框应该是HeatMap坐标乘以output stride:
其他任务的回归
除了宽高以外,回归量还可以包含更多的东西,如3D Size(长宽高,深度,角点,人体关键点,朝向等,具体的编码方式如下图)
实现细节
- 作者在实验中分别尝试了HourGlass Network, ResNet, DLA等backbone
- 并且在ResNet DLA 上用了可变形卷积
- Focal方面,
- Loss权重上,
总结
- 实现了一个小而美的算法,将目标检测转换为带有回归量的关键点检测,从而去掉了NMS&anchor
- 并且能够同时回归其他的目标属性,如长宽高、朝向,深度等