概述
01
CornerNet作为anchor-free对象检测网络,克服了one-stage对象检测依赖anchor boxes的缺点,但是CornerNet本身在对象检测方面的精度仍然有限,本文作者认真分析了CornerNet网络的缺陷,提出了新的改进方法。CornerNet网络依赖关键点对来定位对象的bounding box然而这种方法常常会导致错误定位,CenterNet提出了基于三联关键点定位改进,通过自定义两个关键模块-级联Corner Pooling 与 Center Pooling从而提升位置信息识别能力,在MS-COCO数据集上AP达到了47%超过所有其它的one-stage对象检测模型,同时拥有更快的推理速度。
CornerNet的一个缺点是经常预测错误的点对,这个需要后期根据比率进行适当的过滤才会产生正确的bounding box,而通过中心位置点可以很快确认正确的点对信息,提升CornerNet模型的精度。图示如下
第一行蓝色框是ground truth, 红色框是预测结果。第二行为添加中心点之后的改进,当对象与预测框IOU很高时候,中心可能性也应该很高,反之亦然。CornerNet在不同尺度大小与IOU并交比时候的不同错误率如下:
网络架构
02
相比CornerNet多出一个分支输出,就是中心点信息预测,此外这里的backbone网络依然采用Hourglass网络。通过CornerNet部分生成多个bounding box,对生成的多个bounding box,选择top-k个box(根据得分),然后做如下处理:
1.选择top-k个中心关键点(根据得分)
2.根据offset把中心点重映射到输入图像上
3.定义个中心区域,检查中心点是否在中心区域内(中心点的标签与bounding box的标签必须一致)
4.如果关键点在中心区域,则该bounding box保留,box得分将有三个关键点(左上角点、右下角点、中心点)平均值取代,反之则删除该bounding box。
CenterNet模型的关键在于中心区域大小的定义选择。当对小目标选择小中心区域,召回率比较低,说明小目标比较难发现;对于大的目标选择比较大的中心区域时候,发现精度比较低,说明预测错误框比较多。想想很容易理解,小目标选择小的中心区域,中心关键点很难匹配到,而大目标选择比较大的中心区域导致过度匹配。所以作者提出一种scale-aware的自适应中心区域选择方法,对小bounding box尽量选择大的中心区域,大的bounding box选择小的中心区域 ,最终中心区域选择满足如下计算公式:
tl表示top-left即左上角点,br表示bottom right即右下角点,n为奇数。N=3与5的示例如下图
池化模块
03
Center Pooling(中心池化)
上图a表示中心池化,选择水平与垂直两个方向上的最大值,具体做法如下,对来自backbone输出的feature map,进行X与Y方向的最大值提取,然后叠加,这样做法有利于发现中心关键点。
Cascade Corner Pooling级联角池化
见上图(C)所示,首先发现bounding方向的最大值,然后再发现内部的最大值,把这两个最大值叠加在一起,这样就既获得了框信息也获得对象可视化模式信息。这两种池化模块很容易结合在一起使用,它们的结构如下:
训练与测试对比
04
损失计算公式如下:
其中前面两个是focal losses
中间两个是角点的量词嵌入损失
最后两个是位置损失基于L1计算
最终CenterNet的测试对比结果如下:
论文地址https://arxiv.org/pdf/1904.08189v3.