目标检测论文之FCOS

论文 FCOS: Fully Convolutional One-Stage Object Detection
GitHub源码地址

FCOS做目标检测,模仿语意分割,对每个像素进行预测。避免了和anchor(proposal)相关的复杂计算和超参数,只需要一个NMS的后处理;最优结果:backbone用ResNeXt-64x4d-101,AP=44.7%.

1、Prior

  • feature map FiF_i中的像素(x,y)(x,y),映射回原图(sx+s2,sy+s2)(sx+\lfloor\frac{s}2\rfloor,sy+\lfloor\frac{s}2\rfloor),s为该feature map的total stride。
    adding s2\lfloor\frac{s}2\rfloor是为了使其接近感受野中心
    (这里是为什么,还没明白。。。待后续补充。)
  • 正负样本:
    该像素落入groun-truth(以下简称gt)的bbox中,即为positive;并且类别c为该gt的类别。否则为negative,类别c=0。
  • bounding box (l,t,r,b)
    bounding box是一个四维向量(l,t,r,b)(l,t,r,b),分别为当前像素距离gt box四个边的距离。
    l=xx0t=yy0r=x1xb=y1yl=x-x_0\quad t=y-y_0\\r=x_1-x\quad b=y_1-y
    (x0,y0,x1,y1)(x_0,y_0,x_1,y_1)为gt box的坐标。

2、Output & Loss

2.1 classification

是C个二分类,对于输出>0.05的为positive。因为这些输出都是>0的正数,所以用exp(six)exp(s_ix)将输出结果转为大于0的数。sis_i为FPN的level ii的参数。

2.2 center-ness

  • 由于产生了很多low quality的box(是由离目标中心点较远的像素产生的),所以为了抑制这些low quality的box,引入了center-ness。centerness=min(l,r)max(l,r)×min(t,b)max(t,b)centerness=\sqrt{\frac{min(l,r)}{max(l,r)}\times\frac{min(t,b)}{max(t,b)}}
  • Loss为BCE(Binary Cross Entropy)
  • center-ness的结果与classification相乘,用来降低low quality的box的权重。
  • low quality box如下图所示:
    目标检测论文之FCOS

2.3 bbox

bbox是一个4D的向量(l,t,r,b)(l,t,r,b)。同样用exp(six)exp(s_ix)将输出结果转为大于0的数。

3、Head

4个输出channel=256的conv。具体见下图的网络结构。

4、Network

目标检测论文之FCOS

4.1 Backbone

4.2 FPN

  • gt box有重叠(over-lap)的情况,通过FPN来解决。
  • 不同尺寸的box用FPN的不同level去预测。选择方法如下:
    对于max(l,r,t,b)>miormin(l,r,t,b)<mi1max(l,r,t,b)>m_i or min(l,r,t,b)<m_{i-1}的,认为negative。其中mim_i为FPN level ii的最大回归距离。对于m2,m3,m4,m5,m6,m7m_2,m_3,m_4,m_5,m_6,m_7分别为064,128,256,512,0,64,128,256,512,\infty
  • 因为一般有重叠的box的尺寸大多数是不一样的,所以可以通过这种方法将有重叠的box分配到不同level进行计算。
  • 如果经过这种处理后,仍然有重叠的box,则直接选取面积最小的box作为回归目标。

5、post-process

同RetinaNet的后处理。只有NMS。

6、Training

  • input:(800,<1333)
  • optimizer:SGD,weiht_decay=0.0001,momentum=0.9
  • lr:0.01,一共90k iteration,在60k和80k iteration时,学习率下降为原来的十分之一。
  • batch_size=16