【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
2019年的论文

概述


  • 要解决的问题
    • 针对Anchor问题来进行思考的设计
  • 采用的方法
    • One stage
    • 仿CornerNet,但是CornerNet是使用的 左上角和右下角两个点检测,而本论文是对top, left, bottom, right四个极端点,再加上一个center点来进行检测。
    • 借鉴了DEXTR的极端点方法。
  • 结果如何
    • 在One-stage的方法上,COCO数据集表现是非常不错,state-of-the-art,可以看后面的结果
    • on-par with the state-of-the-art region-based method
    • 在COCO test-dev上bounding box的AP为43.2%。
    • 此外,用这个方法还做了一些粗糙的分割,COCO Mask AP是18.9%,much better than the Mask AP of vanilla bounding boxes。甚至在后面的结果中,加上DEXTR可以使Mask AP提升到34.6%
  • Contributions
    • 将几个方法结合起来用到了目标检测上吧。。。

代码

细节


【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points

  • 上图就是网络大致的结构图:
    • backbone是Hourglass Network,最终生成的是4CHW4*C*H*W的left,top, right, bottom的Extreme point heatmap,以及CHWC*H*W的center point heatmap,42HW4*2*H*W的offset。
    • offset是class-agnostic的,故通道数量为1,4是left,top,right,bottom,2表示x,y,没有对center的偏移预测。

【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points

  • 虽然是仿CornerNet,但是还是有些改变,这里没有使用embedding来做点匹配,二十使用Center point来对四个极值点进行匹配。
  • **上面的图就是Center Grouping算法,用来进行匹配的:**对于一个category,去除其中四个方位的heatmap,使用ExtractPeak算法去除其中大于阈值(实验中阈值为0.1)的pixel位置,对这四个集合中的点,进行简单的暴力方法遍历(为O(n4)O(n^4)的复杂度),四个点组成一个框,然后满足基本的四个点的相对位置后,求出这四个点的中心点位置,那么如果这个中心点的center point heatmap上的值如果大于阈值(实验中阈值为0.1),那么就是一个合格的候选框,框的cls score就是五个点的heatmap值的均值。

【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points

  • ExtremeNet使用的结构和CornerNet一样,loss呢也一样,只不过没有associative embedding部分而已,使用了center group取代了associative embedding。

Two problem

  • Ghost box suppression
    • Q:下图也是比较好演示了这个问题是个什么样的情况,就是四个Extreme point组合起来的点框的范围太大了。但是刚好条件又比较符合。
    • A:这里采用了soft-nms策略,具体的做法就是:如果在我们挑选出来的框,如果大框中的小框score之和是大框score的3倍,就把大框的score变为原来的1/21/2
      【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
  • Edge aggregation
    • Q:另一个问题呢就是如果在选Extreme point点的时候,因为在top(or right, left, bottom)上图像的边缘平行于x or y轴,那么这样的话,网络预测出来的Extreme point就不会很好,甚至可能score低于阈值。
    • A: 使用边缘聚合来处理这个问题:对于每一个extreme point来说,都是属于局部最大值,在某一个聚合方向(水平or垂直),在一个在某一个点开始的递减区间内,会进行score 的聚合。(就是把一定范围内的score带权重累加到初始点上,直到局部最小点处停止)
      【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points

文章还有涉及到Instance segmentation,在results部分直接进行阐述

Results


Params Value
Base CornerNet, DEXTR
Input & Output 511x511&128x128 resolution
Data augment flipping, random scaling between 0.6 and 1.3, random cropping, random color jittering
Optimizer Adam
Learning rate 2.5e42.5e^{-4}
Training info 5 GPUs, 250k iters, batch size=24,在200k时下降learning rate 10x.
Test info 在选择extreme point点时,只会选择40个top的left(or right, top,bottom) Extreme point,multi scale(0.5, 0.75, 1, 1.25, 1.5),Test time:3.1FPS(322ms per img, 168ms network forward, 130ms center grouping)
  • 以下这个实验就是一些条件在COCO 2017val的对比实验
    • Edge aggregation带来了0.7% AP的提升。
    • Ghost box suppression带来了0.3%AP的提升。
    • 其中的gt表示使用ground truth的extreme point值来代替我们生成后得到的评估结果。
      【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
  • 以下就是在COCO test-dev上的目标检测方法的效果对比
    【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
  • 下面就是Instance segmentation的对比实验
    • BBox:直接使用由extreme point得到的bbox
      【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
    • octagon
      【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
    • DEXTR: 这是另一篇论文所涉及到的方法, 同时也是这篇文章所借鉴的,具体就是利用本实验所生成的Extreme points来作为DEXTR网络的输入,利用DEXTR来产生更加好的分割结果。相当于组成一个二阶段的Instance Segmentation network。
      【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points
  • 效果图
    【ExtremeNet】: Bottom-up Object Detection by Grouping Extreme and Center Points

Conclusion


》》》

Keypoint&Problems


  • 目标检测AP和实例分割mask AP?
    • 这里的目标检测应该就是指的一般的mAP,而分割的mask AP则是,mask IOU计算得到。
  • Extreme point ground truth标签的获取?
    • 在COCO里是没有直接的extreme point标注的,但是有完整的分割标注,所以是利用分割标注来生成extreme point gt的,具体的做法就是:如果一个边平行于轴,且倾斜范围在3o3^o以内,那么就取这个边界(这里的边界应该是指的物体的边缘)的中心作为extreme point。
  • 在代码里,获取检测结果后,是直接运行另一部分的代码来进行实例分割的。

相关文章: