论文阅读:CenterNet: Keypoint Triplets for Object Detection

论文阅读 CenterNet: Keypoint Triplets for Object Detection

  • 1.背景
  • 2. Our approach
    • 2.1 主要思想
    • 2.2 网络结构
    • 2.3 怎么定义中心区域?
    • 2.4 网络改进
    • 2.5损失函数
  • 3. 实验结果

论文地址:
代码地址: https://github.com/Duankaiwen/CenterNet
arXiv 20190417,Kaiwen Duan,中科院计算所

1.背景

基于关键点的目标检测CornerNet:
论文阅读:CenterNet: Keypoint Triplets for Object Detection_第1张图片
CornerNet将目标检测转化为检测物体的左上角和右下角两个顶点(如上图),开始了anchor-free的时代。
同时,CornerNet存在的问题:

  1. 通过两个角点配对来确定目标框,没有anchor限制,对算法性能要求高;
  2. 由于上面的缺陷,在缺乏全局信息的情况下,会产生很多错误配对
  3. 角点对边界框敏感,也就导致在背景处生成很多角点
    如图2,对cornernet取top 100个候选框(蓝色为GT;红色为预测框),可以发现CornerNet产生大量错误的预测框,很多通过长宽比就能过滤掉。
    论文阅读:CenterNet: Keypoint Triplets for Object Detection_第2张图片
    为了说明上述问题,量化CornerNet的问题,作者提出FD(False discovery rates),错误边界框所占的比例,即:FD = 1 - AP。通过图3,FD5 = 32.7% 表示100个边界框中有32.7个边界框和ground-truth的IoU<0.05,说明CornertNet的候选框还是挺不靠谱的。
    图3

2. Our approach

2.1 主要思想

本文在CornerNet基础上,将目标转化为三个点:左上角+右下角+中心点。
原理:如果预测的边界框与ground truth有较高的IoU,则中心关键点预测出相同类别的概率要高,反之亦然。

思路:

  1. 预测目标框,即左上角和右下角点;
  2. 计算目标框的中心区域;
  3. 判断目标框的中心区域是否含有中心点,有则保留,否则删除目标框
    如图4:左边马产生两个候选框,大框的中心区域不包含中心点,所以被剔除,只留下一个候选框(右图)
    论文阅读:CenterNet: Keypoint Triplets for Object Detection_第3张图片

2.2 网络结构

网络结构和CornerNet相似:
主干网+两个分支:

  1. 主干网都是hourglass;
  2. Cornert的分支:cornert + embedding + offsets;上面Cornert的分支和cornernet原文的一样,只是把corner pooling 换成 cascade corner pooling;
  3. Center分支:生成中心点的HeatMap;采用center pooling。
    论文阅读:CenterNet: Keypoint Triplets for Object Detection_第4张图片

实现步骤:
4. 根据cornertnet分支选取top k个目标框;
5. 根据center分支选取top k个中心点;
6. 将k个中心点映射回原图;
7. 计算k个目标框的中心区域;
8. 判断每个目标框的中心区域是否含有中心点,有则保留,否则删除目标框

2.3 怎么定义中心区域?

中心区域大小?
太小:无法召回正确的小目标框;
过大:无法剔除错误的大目标框。

本文提出一种自适应的方法:n是奇数。
论文阅读:CenterNet: Keypoint Triplets for Object Detection_第5张图片
论文阅读:CenterNet: Keypoint Triplets for Object Detection_第6张图片
其实,就是将候选框分成n*n个格子,取中间那个格子作为中心区域,本文n的设置:对于边界框小于150的设置n为3,大于150的设置n为5。

2.4 网络改进

引入两个模块:

  1. Center pooling:针对中心区域;
  2. Cascade corner pooling:针对角点
    回顾下Corner pooling:
  3. 做水平方向从右向左的max pooling得到水平方向的特征图
  4. 做从下到上的max pooling得到垂直方向的特征图
  5. 将这2个特征图element-wise相加,得到最终的pooling 结果
    论文阅读:CenterNet: Keypoint Triplets for Object Detection_第7张图片
    Center pooling:每个点的值 = max(水平点) + max(垂直点)
    实现方式:水平corner pooling + 垂直corner pooling
    论文阅读:CenterNet: Keypoint Triplets for Object Detection_第8张图片

论文阅读:CenterNet: Keypoint Triplets for Object Detection_第9张图片

Cascade corner pooling:

  1. 沿着边界寻找边界上的最大值;
  2. 沿着最大值的位置向里看,找到内部的最大响应值;
  3. 将两者相加
    论文阅读:CenterNet: Keypoint Triplets for Object Detection_第10张图片
    实现方式:
    Top corner pooling:left pooling + top pooling
    和cornertnet相比,在top pooling之前先left pooling;其它方向的pooling类似
    论文阅读:CenterNet: Keypoint Triplets for Object Detection_第11张图片

2.5损失函数

损失函数
和cornerNet一样,
论文阅读:CenterNet: Keypoint Triplets for Object Detection_第12张图片

3. 实验结果

论文阅读:CenterNet: Keypoint Triplets for Object Detection_第13张图片
结论:1.效果最好,在coco数据集上,多尺度检测mAP达到47%,2. 对小目标提升很明显

你可能感兴趣的:(object,detection,CenterNet,Object,detection,Anchor,free,CornerNet,one-stage)