FCOS:Fully Convolutional One-Stage Object Detection

ICCV2019的一篇文章,很有意思的是将目标分割的思想用到了目标检测中,提出了一种anchor-free的检测方式,取得了不错的效果

论文链接:https://arxiv.org/abs/1904.01355

1.motivation

作者认为以往的基于anchor的目标检测有以下缺点

  1. 检测算法的性能对于anchor一些参数很敏感,比如size ratio,number,设置起来很麻烦
  2. 由于目标复杂多变,固定的anchor参数难以满足
  3. 为了达到高的检测精度,需要采集很多的base_anchor,然而大部分anchor都输负样本,导致在训练的时候正负样本不均衡
  4. 在计算IOU的时候很麻烦,另外iou的阈值也需要自己定义

由此作者提出了将FCN用于检测的算法FCOS

2.主要思想 

2.1 reg_loss,cls_loss

结构图如下

特征图上的每一个点(x,y)投影到原图中(s/2+x*s,s/2+y*s), 其中s是步长stride,(x,y)如果落到了原图中的某个gt中就被认为是正样本,类别就是该gt属于的类。否则就是负样本,类别设置为0.如果出现某个点落入到了多个gt中,这种被称为ambiguous sample,文中采用的策略是直接选择面积最下的那个gt,至于为什么这么做,请看后续的分析。

loss function:

其中分类损失采用的focal loss,回归损失采用的IOU loss,这里之所以选择IOU loss而不是选择L2或者L1 loss,是因为L1或者L2 loss都会使得损失函数更加去关注于那些anchor大的物体,而IOU loss可以从整体的角度考虑reg loss。参考:https://zhuanlan.zhihu.com/p/62573122

preview

preview

\bm{t^*}=(l^*,t^*,r^*,b^*)为(x,y)到gt左,上,右,下边界的距离,如figure1所示,

(x0,y0,x1,y1)表示为gt的左上角与右下角坐标。t_{(x,y)}对应着每层level的网络输出。这里的focal loss采用的是C binary classifier,而不是multi-class classifier。由于回归损失基本上都是正的,所以作者利用exp(x)将他们投影到了(0,\infty), \lambda =1Npos表示正样本的数目,可以看出FCOS有很多的正样本用于训练,相对于anchor_based的detector仅仅选取指定iou阈值的anchor作为正样本,FCOS的正样本足够充分。这也是FCOS效果好的可能之一。

在inference的时候,将p_{(x,y)}>0.05的是作为正样本,然后按照公式(1)计算出bbox。

2.2 multi_level FPN

按照以往的经验,在CNN中stride较大的话会导致召回率比较低,而且理论上在FCOS中由于大的stride在最后的feature map中没有编码得到的位置信息,所以recall应该会很低,但是结果表示FCOS的召回率还是很好,而且利用multi-level的FPN之后,FCOS的召回率又得到了大幅提升。

上述说的ambiguous sample也可以在multi-level的FPN中的得到很好的解决。不同于在anchor_based的detector中会在不同的level分配不同尺寸的base_anchor。FCOS会首先计算max(l^*,t^*,r^*,b^*)>m_{i}, max(l^*,t^*,r^*,b^*)<m_{i-1},如果满足,则认为是负样本,就不需要在计算机回归损失了。m_{i}是feature level i需要区域回归的最大尺寸,从网络结构图中可以看出,一共有五个level,所以依次设置m为(0,64,128,256,512,\infty),其实就是分别对应着每个level的stride的八倍。经过这样的操作不同尺寸的物体会被放在不同的level进行检测,而且物体之间的重叠往往发生在尺寸相差比较大的物体之间。所以这样可以有效的避免ambiguous sample带来的影响。

作者将使用exp(si*x)代替上述的exp(x),从而达到在不同的level使用不同的si,可以稍微的提升一些性能,至于si是怎么来的,这个得后续看代码了

2.3 Center-ness 

作者发现用了上述额度FPN之后,FCOS的精度仍然和anchor_based的detector有一定差距,作者认为这是由于那些远离gt中心的位置产生了大量的low-quality的预测框。导致带偏了损失函数reg_loss,为了解决这个问题,引入

centerness的范围是0-1,用binary cross entropy loss进行训练。可以看出当位置位于目标中心的时候centerness为0,远离目标中心的位置centerness就会很大,这就极大的抑制了远离目标中心的位置。在test的时候,最后的classification score会乘以相应的centerness,the center-ness can downweight the scores of bounding boxes far from the center of an object.

2.4 结果图

可以看出精度已经超越了一些one-stages,two-stages的检测算法,还是不错的

3.其他

  1. FCOS会导致占用内存很大吗???
  2. centerness的位置文中说center-ness is parallel with the regression branch instead of the classification branch.但是在文中还是在classification branch,这个的影响在哪呢
  3. 为什么最后两层没有进行上采样呢?贴一个可能的回答:FPN结构在高层的语义特征进行融合效果并不好,所以构建FPN没有必要使用所有的卷积层。但为了尺度的多样性,在其后面加入了P6/P7.。目标检测:FCOS(2019) - TeddyZhang的文章 - 知乎 https://zhuanlan.zhihu.com/p/62869137

猜你喜欢

转载自blog.csdn.net/breeze_blows/article/details/103417324
今日推荐