一阶段目标检测(7)-FCOS 全卷积anchor-free目标检测方法

一阶段目标检测(7)-FCOS 全卷积anchor-free目标检测方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kevin_zhao_zl/article/details/93485842

论文地址: FCOS: Fully Convolutional One-Stage Object Detection
工程地址:github链接

1. 简介

  基于锚框的目标检测器虽然效果很好,但存在以下问题:

  • 检测的性能与锚框的尺寸、长宽比和数量有关

  • 锚框大小相对固定,对大幅变形的物体的检测精度低

  • 为了提高召回率,需要大量锚框,但大多数都被标记为"negative"

  • 大量的锚框增加了计算复杂度和内存占用

  另一方面,全卷积网络在诸如语义分割、深度估计、关键点检测以及计数方面表现不俗,自然引出这样一个问题:全卷积能够用于目标检测中?

  基于上面两方面的内容,该论文提出了一个不需要预定义锚框的一阶段全卷积目标检测方法—FCOS,主要的贡献和优势在于:

  • 检测与其他的全卷积网络的应用领域相结合,一些idea可以互相套用

  • 目标检测不需要提议和锚框

  • 取得了一阶段的SOTA检测性能

  • 能够通过微小调整就应用于实例分割、关键点检测等任务中。为基于实例的问题提供了新途径

2. 方法思路

2.1 一阶段全卷积目标检测器的形式化描述

  令FiRH×W×CF_i \in R^{H \times W \times C}FiRH×W×C表示主干网络第iii层的特征图,sss表示该层之前总的步长(也就是特征图相比原始图像缩小的倍数),输入图像的GT框定义为{BiB_iBi},其中Bi=(x(i)0,y(i)0,x(i)1,y(i)1,c(i))R4×B_i=(x_0^{(i)},y_0^{(i)},x_1^{(i)},y_1^{(i)},c^{(i)}) \in R^4 \timesBi=(x0(i),y0(i),x1(i),y1(i),c(i))R4×{1,2,...,C1,2,...,C1,2,...,C},五个参数分别为GT框左上角、右下角的横纵坐标以及类别,CCC是总的类别数。

  对于特征图FiF_iFi中每一个位置(x,y)(x,y)(x,y)可以将其映射回原始图像的坐标(s2+xs,s2+ys)(\frac s2+xs,\frac s2+ys)(2s+xs,2s+ys),与基于锚框的目标检测方法不同(将输入图像上某位置作为锚框的中心然后根据锚框对目标边界框进行回归),该论文的方法直接将每个位置的目标边界框进行回归,也就是将坐标点而不是锚框作为训练的样本,这和全卷积网络类似。
在这里插入图片描述
  如果坐标点落在GT框内则为正样本,类别标签与GT相同,否则负样本,类别标签为0。除了分类的标签以外,论文还使用了一个四维实向量t=(l,t,r,b)t^*=(l^*,t^*,r^*,b^*)t=(l,t,r,b)作为回归的目标,四个符号分别表示某坐标点到边界框四个边的距离,如上图所示。如果坐标点同时落在多个边界框,则称为不明确样本,取最小的边界框作为回归目标(下一节回介绍一个多层级的预测,用于减少不明确样本的数量)。训练过程每个位置的回归目标可以表示为:

l=xx(i)0,t=yy(i)0r=x(i)1x,b=y(i)1yl^*=x-x_0^{(i)},t^*=y-y_0^{(i)}\\r^*=x_1^{(i)}-x,b^*=y_1^{(i)}-yl=xx0(i),t=yy0(i)r=x1(i)x,b=y1(i)y

  值得一提的是,FCOS能够尽可能多的选取前景样本训练回归器,基于锚框的检测方法只回选取满足一定交并比的锚框,论文认为这可能是FCOS表现性能更好的一个原因。

网络输出.网络输出一个80维的分类向量和一个四维的定位向量。论文训练C个二值分类器而非一个多类别分类器,通过在主干网络卷积层之后加四个卷积层来实现,分别用于分类和定位分支。而且论文使用exp(x)来对回归分支的目标进行映射。最终,FCOS相比每个位置有九个锚框的检测器相比参数规模小了九倍。

损失函数:

L(px,y,tx,y)=1Nposx,yLcls(px,y,cx,y)+1Nposx,y1cx,y>0Lreg(tx,y,tx,y)LclsFocalLossLregUnitBoxIOULossNposλ1L(p_{x,y},t_{x,y})=\frac 1 {N_{pos}}\sum_{x,y}L_{cls}(p_{x,y},c^*_{x,y})\\+\frac 1 {N_{pos}}\sum_{x,y}1_{c^*_{x,y}>0}L_{reg}(t_{x,y},t^*_{x,y})\\其中L_{cls}为Focal Loss,L_{reg}为UnitBox中的IOU Loss,\\N_{pos}为正样本的数量,\lambda是平衡因子,论文中选1,\\损失函数基于特征图所有坐标点进行计算。L(px,y,tx,y)=Npos1x,yLcls(px,y,cx,y)+Npos1x,y1cx,y>0Lreg(tx,y,tx,y)LclsFocalLossLregUnitBoxIOULossNposλ1

推断.FCOS推断过程非常直接,给定一个输入图像,在网络中前向传播获取每一个位置的分类分数px,yp_{x,y}px,y和回归预测tx,yt_{x,y}tx,y,取分类分数大于某个阈值的位置作为正样本。

2.2 在FCOS中使用特征金字塔网络的多层级预测

  通过多层级预测,FCOS连个潜在的问题能被解决:1) 最终特征图的stride较大(比如16)可能导致较低的BPR(最好可能找回率)。在基于锚框的方法中,这一问题可以通过降低标记为正样本的IOU阈值。但是实际中,FCOS中大stride不会影响BPR,结合多层级的特征金字塔网络进行预测时反而会提升BPR。2) 训练中一个位置可能输入多个GT框的不明确样本。通过多层级预测来解决。

  如下图所示,在特征图的不同层级检测不同尺寸的目标,具体地,定义五分层级{P3,P4,P5,P6,P7P_3,P_4,P_5,P_6,P_7P3,P4,P5,P6,P7},其中前三者由主干网络的特征图C3,C4,C5C_3,C_4,C_5C3,C4,C5后跟1×11\times 11×1的卷积产生,后两者通过在P5,P6P_5,P_6P5,P6上应用缩小二分之一得到,即五个层级的stride分别为8,16,32,64,128。
在这里插入图片描述
  基于锚框的检测器将不同尺寸的锚框附属于不同层级的特征图上,FCOS则先计算所有特征层级的所有位置的l,t,r,bl^*,t^*,r^*,b^*l,t,r,b∗,然后如果坐标点的这四个值的最值大于mim_imi或小于mi1m_{i-1}mi1,该坐标点就被标记为负样本,mim_imi是层级iii需要回归的最大距离,m27m_{2-7}m27分别为0,64,128,256,512和无穷。由于不同层级上的目标尺寸不同,多层预测能够大幅减少不明确样本,提高基于FCN的检测器的性能。

2.3 FCOS基于中心点的分支

  多层级预测后,精度还是不高,论文观察到是因为远离目标中心点的坐标点产生了大量低质量的预测框,论文提出一个简单有效的策略来进一步压缩这些低质量框的存在空间。具体地,加一个与分类分支平行的单层分支来预测一个坐标点和目标中心位置的距离,给定l,t,r,bl^*,t^*,r^*,b^*l,t,r,b∗,计算如下:

centerness=min(l,r)max(l,r)+ming(t,b)max(t,b)−−−−−−−−−−−−−−−−√centerness^*=\sqrt{\frac{min(l^*,r^*)}{max(l^*,r^*)}+\frac{ming(t^*,b^*)}{max(t^*,b^*)}}centerness=max(l,r)min(l,r)+max(t,b)ming(t,b)

取值范围为0~1,通过二值交叉熵损失来计算,该损失直接加在上面提到的损失计算函数中。这个值可以降低远离目标中心点的框的权重,低质量的框可能直接被NMS过程排除掉从而显著提升检测性能。
在这里插入图片描述
烧蚀实验略
COCO数据集上的实验结果
在这里插入图片描述
欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]

posted on 2019-10-03 11:31  曹明  阅读(240)  评论(0)    收藏  举报