FCOS(Fully Convolutional One-Stage Object Detection)学习笔记

论文: FCOS: Fully Convolutional One-Stage Object Detection

代码: https://github.com/tianzhi0549/FCOS

作者: Zhi Tian, Chunhua Shen, Hao Chen, Tong He

FCOS的提出

当前所有主流的检测器如Faster R-CNN, SSD, YOLOv2,v3等都依赖于一组预定义的anchor boxes,长期以来人们人们一直认为使用anchor boxes是检测器成功的关键。但基于anchor boxes的检测器具有以下缺点:

  1. 检测器的性能对anchor boxes的尺寸、宽高比和数量等比较敏感,如RetianNet通过改变这些参数可以在COCO数据上使得AP提高4%。因此这些超参数需要在基于anchor boxes的检测器中仔细调整。
  2. 即使精心设计,由于anchor boxes的尺寸、宽高比是固定的,检测器在处理形状变化较大的物体时也会遇到困难。预定义的anchor boxes还妨碍了检测器的泛化能力,因为它们需要针对不同尺寸或宽高比的新的检测任务上重新设计。
  3. 为了实现较高的召回率,基于anchor boxes的检测器需要将anchor boxes密集地放置在图像上。在训练过程中,大多数这些anchor boxes都标记为负样本。负样本的数量过多会加剧训练过程中正样本与负样本之间的不平衡。
  4. Anchor boxes还设计复杂的计算,例如计算与真实框的IoU

使得作者设计FCOS的另外一个原因是,object detection由于使用了anchor boxes,可能是唯一偏离整洁的全卷积像素框架的高级视觉任务,因此,作者在想,能否想FCN对于语义分割一样,以整齐的逐像素预测方式类解决object detection任务呢? 这样基本视觉任务就(几乎)可以统一在一个框架中。

因此,作者提出了anchor-free和proposal-free的检测器FCOS,它具有以下优点:

  • FCOS使得检测可以与许多其他FCN可解决的任务(如语义分割)统一在一起,从而可以re-use这些任务中的思想
  • 它是anchor-free和proposal-free,因此减少了需要设计的参数的数量
  • 消除了和anchor box有关的计算,比如与真实框的IoU计算、匹配等任务
  • 在所有one-stage检测器中取得了最好的效果。另外FCOS可以作为two-stage的RPNs来使用,而且具有更好的性能
  • FCOS可以很快的进行扩展,以最小的修改来解决其他视觉任务,包括实例分割和关键点检测。

FCOS介绍

Object detection当做像素级任务来做有两个挑战:

  1. 很容易得到低的Recall, 因为当步幅较大时,在最终特征图上没有信息(位置)的object是很难召回的。
  2. 一个正样本像素点出现在ground truth boxes的交叉区域时,该像素点应该回归哪个ground truth box? 如 Fig1所示。

在这里插入图片描述

下面看看FCOS是如何解决这些问题的。

FCOS的网络如Fig2所示。

在这里插入图片描述

2.1 Object detection的全卷积形式的表示

FCOS同FCN一样,它的训练样本是各个像素点,比如位置(x, y)如果落在了任何一个ground-truth box的内部,它就是一个正样本,它的类别就是ground-truth box的类别。如果它没有落在任何一个ground truth box内部,它就是一个负样本,类别是0(背景类)。

以上部分基本和语义分割一样,不同于语义分割的是,除了每个位置的label,我们还需要回归一个4D的向量 t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) t^* = (l^*, t^*, r^*, b^*) t=(l,t,r,b)。假设位置(x, y)落在ground-truth box Bi 中,Bi的左上角和右下角坐标为 ( x 0 ( i ) , y 0 ( i ) , x 1 ( i ) , y 1 ( i ) ) (x_0^{(i)}, y_0^{(i)}, x_1^{(i)}, y_1^{(i)}) (x0(i),y0(i),x1(i),y1(i)),则(x, y)位置需要回归的值为
l ∗ = x − x 0 ( i ) , t ∗ = y − y 0 ( i ) , r ∗ = x 1 ( i ) − x , b ∗ = y i ( i ) − y l^* = x - x_0^{(i)}, t^* = y - y_0^{(i)}, r^* = x_1^{(i)} - x, b^* = y_i^{(i)} - y l=xx0(i),t=yy0(i),r=x1(i)x,b=yi(i)y

相比于基于anchor boxes的检测器,只考虑与ground-truth有高IoU的anchor boxes作为正样本;FCOS因为使用像素作为样本,因此利用了更多的正样本训练。作者也认为它可能是FCOS比对应的anchor-based检测器性能好的一个原因。

网络的输出
最后一层特征图的每一个位置输出一个**多维(C + 1 + 4)**向量, 对于前面C维,是C个二分类器,在COCO数据集中C= 80。1表示是center-ness,用来去掉一些低质量的检测框,下面的2.3会详细介绍。4 表示的距离四个边界的信息 t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) t^* = (l^*, t^*, r^*, b^*) t=(l,t,r,b),如前面介绍的。另外,由于回归的目标总是正值,我们这里使用exp函数对 t ∗ t^* t进行修正。这相比于每个位置使用9个anchor boxes的RetinaNet和FPN等,输出的参数少了9倍。

Loss 函数

L ( { p x , y } , { t x , y } ) = 1 N p o s Σ x , y L c l s ( p x , y , c x , y ∗ ) + λ N p o s Σ x , y 1 c x , y ∗ > 0 L r e g ( t x , y , t x , y ∗ ) \begin{aligned} L(\lbrace{p_{x, y}}\rbrace,\lbrace{t_{x, y}}\rbrace) & = \frac{1}{N_{pos}}\Sigma_{x, y}L_{cls}(p_{x, y}, c_{x,y}^*) \\\\ & + \frac{\lambda}{N_{pos}}\Sigma_{x,y}1_{c_{x, y}^* > 0}L_{reg}(t_{x, y}, t_{x, y}^*) \end{aligned} L({px,y},{tx,y})=Npos1Σx,yLcls(px,y,cx,y)+NposλΣx,y1cx,y>0Lreg(tx,y,tx,y)

L c l s L_{cls} Lcls是focal loss, L r e g L_{reg} Lreg是IOU loss,这个是有些与众不同的地方

Inference

FCOS的inference是直接的。给定一张输入图片,让其通过FCOS得到分类特征图 p x , y p_{x, y} px,y和位置 t x , y t_{x, y} tx,y。我们选择 p x , y > 0.05 p_{x, y} > 0.05 px,y>0.05的位置作为正样本,通过公式

l ∗ = x − x 0 ( i ) , t ∗ = y − y 0 ( i ) , r ∗ = x 1 ( i ) − x , b ∗ = y i ( i ) − y l^* = x - x_0^{(i)}, t^* = y - y_0^{(i)}, r^* = x_1^{(i)} - x, b^* = y_i^{(i)} - y l=xx0(i),t=yy0(i),r=x1(i)x,b=yi(i)y

求得bouding boxes的位置。通过nms求得最后的结果。

注意: FCOS引入center ness了来降低低质量检测框的权重,从而抑制这些低质量的检测。这个在2.3会详细介绍。

2.2 通过FPN实现multi-level预测

这里是解决上述两个问题(低Recall, overlap不清晰的回归对象)的解决方案。

CNN中最后输出的特征图由于比较大的stride(比如16),会导致相对较低的 best possible recall(BPR,可以达到召回率的上界)。基于anchor box的检测器可以通过在判别正、负anchors时降低IoU的阈值。

然而,作者通过经验表明,即使stride较大,基于FCN的FCOS仍然能够产生良好的BPR,甚至可以比基于anchor的检测器的BPR更好。从而, FCOS可以解决低Recall的问题

具体怎么解决的,目前我还没有想清楚。 ???

第二个问题overlap中的不确定的回归问题在很大程度上也可以通过multi-level预测来解决

依据FPN,作者在不同level的特征图上检测不同尺寸的object

如Fig2所示,作者使用了5个level的特征图, P 3 , P 4 , P 5 , P 6 , P 7 P_3, P_4, P_5, P_6, P_7 P3,P4,P5,P6,P7,其中 P 3 , P 4 P_3, P_4 P3,P4 P 5 P_5 P5由骨干网络产生(上采样, concat操作等)。 P 6 P_6 P6 P 7 P_7 P7由步长(stride=2)卷积得到。 P 3 , P 4 , P 5 , P 6 , P 7 P_3, P_4, P_5, P_6, P_7 P3,P4,P5,P6,P7的stride分别为8, 16, 32, 64和128。

不像基于anchor的检测器,在不同level的特征上赋予anchor boxes不同的尺寸,作者直接限制了每一个level中bounding box回归的返回大小(本质区别是什么???)。例如, 首先记S = m a x ( l ∗ , t ∗ , r ∗ , b ∗ ) max(l^*, t^*, r^*, b^*) max(l,t,r,b), P 3 P_3 P3回归的是S在0-64的样本, P 4 P_4 P4回归的是S在64-128的样本, P 5 P_5 P5回归的是S在128-256的样本, P 6 P_6 P6回归的S是在256-512的样本, P 7 P_7 P7回归的是S大于512的样本。

这样大部分的overlap问题就可以解决了。如果一个位置(x, y)在使用了multi-level预测之后,仍旧有多于一个ground-truth boxes的overlap,简单的选择具有最小面积的bouding box作为其回归对象。

Head部分在不同level特征之间是共享的,不仅使得检测器parameter-efficient的而且提高了检测性能。

然而,作者观察到不同level的特征需要回归不同的尺寸range,对于不同level的特征使用相同的heads是不合理的。因此作者使用带有训练参数 s i s_i si e x p ( s i x ) exp(s_ix) exp(six)来代替 e x p ( x ) exp(x) exp(x)进行调整,这轻微得提高了检测性能。

2.3 Center-ness

在使用了multi-level预测之后,在FCOS和基于anchor的检测器在性能上仍有一定的差距。作者发现这是由于很多由远离object中心点位置预测出的低质量的检测框。

论文中介绍了一种简单的、无需引入超参数的但是有效的策略来抑制这些低质量的检测框。通引入在分类分支旁边引入single-layer 分支,来预测一个位置的center-ness, 如Fig2所示。

(x, y)的center-ness描述了(x, y)距离”(x, y)位置负责预测”的object的中心的标准化距离。给定一个位置的 l ∗ , t ∗ , r ∗ , b ∗ l^*, t^*, r^*, b^* l,t,r,b,center-ness定义为

c e n t e r − n e s s = m i n ( l ∗ , r ∗ ) m a x ( l ∗ , r ∗ ) ∗ m i n ( t ∗ , b ∗ ) m a x ( t ∗ , b ∗ ) center-ness = \sqrt {\frac{min(l^*, r^*)}{max(l^*, r^*)} * \frac{min(t^*, b^*)}{max(t^*, b^*)}} centerness=max(l,r)min(l,r)max(t,b)min(t,b)

可以看到,当(x, y)位于object的中心时,根据定义center-ness的值为1,当(x, y)位于object的边界时,center-ness的值为0。因此center-ness可以反映距离中心的偏移。

这里采用开方是为了减慢center-ness的衰减, center-loss采用binary cross entropy(BCE) loss。

通过Fig7,我们可以看到center-ness对于FCOS的影响,它可以使得低质量(高score, 低IoU)的框减少。

在这里插入图片描述

在测试时,最终的score是分类score和center-ness相乘,center-ness可以削减远离object中心点的bouding boxes的score。因此这些具有高score但低质量的bounding boxes可以被最后的NMS过滤掉,因此可以显著的提高检测性能。

一种center-ness的替代是只使用grounding truth box的中心部分作为训练的正样本。这两个方法的综合可以获得更好的性能。详情参见https://github.com/yqyao/FCOS_PLUS

FCOS实验结果

与其他模型的对比

在这里插入图片描述

FCOS的缺点

在使用了multi-level预测后,如果一个overlap的位置落在了同一个level,虽然作者选择了最小面积的target的作为回归对象,这会对模型有什么影响吗? 或者作者为什么这样做? ??

疑惑

  • FCOS multi-level预测和基于anchor的检测器中不同level设置不同size的anchors的方法有什么区别?
  • FCOS如何解决Recall低的问题?
  • 当multi-level预测不能解决overlap的时候,为什么选择了最小面积的target的作为回归对象?
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值