Corner-based对象检测算法三连之——青出于蓝CenterNet

CornerNet一个显著的问题就是对box的坐标、尺寸和类别的预测只依赖对象的边缘特征,并没有使用对象内部的特征,这样的话会预测很多False Positive box,这便是CenterNet主要解决的问题,其主要引入以下两个方法来解决:

Cascade corner pooling

作者将CornerNet的corner pooling修改为cascade corner pooling,从而使得生成的corner heatmap和embedding都“刻意”使用了对象内的特征,此处使用“刻意”这个词的原因是网络其实也使用了对象内部的特征,因为corner pooling后的特征也结合了未pooling的特征,具体细节可以参考CornerNet原文或者我的CornerNet文章。 作者在CornerNet工作的基础上,使得pooling(top-left pooling或者bottom-right pooling)时,不止获取指定位置水平或者垂直方向(单方向)的最大特征值,也会在最大值点朝着对象内部的方向获取对象内部的最大特征值,如论文中原图4(c)所示。

figure_4

Center pooling和center keypoints

作者在CornerNet网络结构基础上,新增一个与corner prediction module并列的分支,称为center pooling,该分支预测了每个对象的中心关键点(keypoint)heatmap(用来指示该位置是不是某个对象的中心关键点)和对应的offset特征,计算方式类似于计算corner heatmap,只不过使用的是center pooling,其在corner pooling的基础上可以计算指定位置水平方向(双向)的最大值与垂直方向(双向)的最大值之和,具体例子如原文截图4(a)所示。网络的整体框架如下面论文截图2所示。

figure_2

预测时:

  1. 先传统的CornerNet得到初步预测的box,如前k个;

  2. 然后在center pooling分支预测的center heatmap中根据score选择top-k个center位置,再使用对应的offset将center在特征图上的位置映射回原图;

  3. 使用初步预测的box计算尺度相关的中心区域(center region),即该box所框对象的中心特征大致所在的矩形区域,由于对于小尺寸box的中心区域应该相对大一些,对于大尺寸box的中心区域应该相对小一些,这样才不会使得模型漏掉有效的小box,而放过太多无效的大box。具体的计算公式和原理如下面两个论文截图(截图5、3)所示,公式中的n,作者使用了两个针对不同box尺寸的值,3对应尺寸小于150(w*h)的box,5对应尺寸大于150的box,(ctl_x, ctl_y, cbr_x, cbr_y)分别表示中心区域的左上角和右下角坐标,(tl_x, tl_y)(br_x, br_y)分别表示相应box的左上角和右下角坐标。

  4. 将步骤2计算的center位置与步骤3计算的center region进行一一比较(对象类别必须相同),如果某个center的位置落在某个的center region内,那么说明该box所指的位置真的存在对象,便接受该box,否则去掉该box,最后再使用soft-max过滤掉冗余的box便得到预测的box,输出box的置信度score上top-left、bottom-right和center三个点各自heatmap score的平均。

figure_3
figure_5

center heatmap和offset的损失计算论文中没有提及,应该与corner heatmap和offset是类似的。

以上两个模块的网络结构大致如下面论文截图所示。

figure1

最后,个人觉得虽然CenterNet解决了CornerNet的一个缺陷,而且整体性能比CornerNet要好,但是在面对部分遮挡问题时,效果可能并不如CornerNet,因为CenterNet使用依赖对象中心特征的center keypoints过滤CornerNet预测的box,这会导致过度依赖中心特征,而在存在严重部分遮挡的情况下,中心特征是不可信的。当然,这需要进一步的实验验证。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。