FCOS: Fully Convolutional One-Stage Object Detection

FCOS: Fully Convolutional One-Stage Object Detection

https://arxiv.org/abs/1904.01355
https://github.com/tianzhi0549/FCOS/

1. Summary

写完笔记之后最后填,概述文章的内容,以后查阅笔记的时候先看这一段。注:写文章summary切记需要通过自己的思考,用自己的语言描述。忌讳直接Ctrl + c原文。

FCOS是一个全卷积的单阶段目标检测器,去除了对于Anchor的依赖,将图片上的每个位置都作为sample,大大提高了对于图片的利用率。具体而言,对于某个位置来说,其如果落在某个GT BBox内,则认为其为正样本,并对该GT BBox进行回归(回归目标是该点距离其分配的GT BBox四条边的距离),反之,如果某个点没有落在任何GT BBox内,则认为其为负样本。这样一来,位于GT BBox内的所有样本都会被作为正样本进行训练。同时,FCOS还采用或者提出了一些方案用于解决全卷积网络的问题:

  • ambiguous sample

同一个点可能落在不同的GT BBox内,这个主要通过采用FPN的不同尺度预测不同尺寸物体的方式来缓解,如果还存在重复,那么就选择面积最小的GT BBox进行匹配。实验说明,这种设定已经可以比较好地缓解该问题。

  • 低质量预测框

FCOS会预测大量低质量的预测框,这些框距离被分配的GT BBox的中心很远,这里通过加入了一层卷积预测"center-ness"来进行了缓解。该值反应了预测框与GT BBox中心的对齐程度,测试时,会用于down weight低质量框的分数,从而使用NMS进行去除。

2. Research Objective(s)

作者的研究目标是什么?

提出一个全卷积的一阶段目标检测器,去除对于参数敏感的Anchor,简化计算和参数设计,仅需要依赖于后处理的NMS,基于ResNeXt-64x4d-101可以获得44.7%的AP。

3. Background / Problem Statement

研究的背景以及问题陈述:作者需要解决的问题是什么?

3.1 Anchor-Free

现有的主流目标检测器,例如Faster R-CNN、SSD、YOLOv2-3都依赖于一个提前定义好的Anchor Boxes集合,这种基于Anchor的设计存在以下问题:

  • 检测的性能对于Anchor Boxes的尺寸、长宽比以及数量都非常敏感,因此,这些参数都需要精心去调整。
  • Anchor Boxes的尺寸、长宽比都是固定的,检测器对于形状变化较大的目标就难以准确检测,特别是对于小目标,也影响了模型的泛化能力。
  • 为了提高召回率,这些Anchor Boxes都需要密集分布于图片上,而其中绝大多数Anchor都会被标记为negative,从而导致了较为严重的类别不均衡的问题。
  • Anchor Boxes会设计到计算IOU等较为复杂的计算过程。

我们能否和语义分割、深度估计、关键点检测、计数等任务一样,去除对于Anchor的需要,以一个逐像素的预测方式去解决目标检测任务?

3.2 重叠bbox

高度重叠的bounding box会带来模糊,如下图右所示:

FCOS: Fully Convolutional One-Stage Object Detection_第1张图片

3.3 低质量预测框

进一步分析发现,全卷积方案会产生很多低质量的远离对应bounding box中心的预测框。

4. Method(s)

作者解决问题的方法/算法是什么?是否基于前人的方法?基于了哪些?

FCOS: Fully Convolutional One-Stage Object Detection_第2张图片

4.1 Anchor-Free=>FCN范式

4.1.1 相关工作

4.1.1.1之前的FCN目标检测器

逐像素预测的基本范式就是FCN范式,之前也有方法采用FCN-based的框架完成目标检测,例如DenseBox。DenseBox对于每个空间位置输出一个4D向量以及一个类别,4D向量用于指示像素位置与bbox的偏移。但是为了解决不同尺寸的bbox的问题,DenseBox将输入图片进行Crop并Resize为一个固定的尺寸,并且使用了Image Pyramid,违背了FCN范式只计算所有卷积一次的设计理念。

其余的一些工作,仅适用于特定的一些场景,其对于高度重叠的场景性能不佳。

4.1.1.2 Anchor-Free 检测器
  • YOLOv1

YOLOv1也是一个Anchor Free检测器,它仅预测与points相近的Bbox,也就是只有那些与bbox相近的points才会被用于预测bbox,因此,YOLOv1的召回率较低。

与YOLOv1不同的是,FCOS使用了位于GT BBox内部的所有points去进行预测,同时低质量的检测框也会被后文提到的“center-ness”分支所抑制。因此,FCOS可以提供更好的性能。

  • CornerNet

CornerNet也是一个单阶段的目标检测器,它检测一个BBox的Corners对,它需要较为复杂的后处理操作去对corners进行group,并且需要额外学习距离指标。

4.1.2 Fully Convolutional One-Stage Object Detector

定义 F i ∈ R H × W × C F_i \in \mathbb{R}^{H \times W \times C} FiRH×W×C是一个CNN backbone的第 i i i个layer输出的特征,当前特征整体的stride为 s s s

对于一个输入图片的GT BBox被定义为 B i {B_i} Bi,其中 B i = ( x 0 ( i ) , y 0 ( i ) , x 1 ( i ) , x 1 ( i ) , c ( i ) ) ∈ R × { 1 , 2 , . . . , C } B_i=(x_0^{(i)},y_0^{(i)},x_1^{(i)},x_1^{(i)}, c^{(i)}) \in \mathbb{R} \times \{1, 2, ..., C\} Bi=(x0(i),y0(i),x1(i),x1(i),c(i))R×{1,2,...,C},这里 ( x 0 ( i ) , y 0 ( i ) ) (x_0^{(i)},y_0^{(i)}) (x0(i),y0(i)) ( x 1 ( i ) , y 1 ( i ) ) (x_1^{(i)},y_1^{(i)}) (x1(i),y1(i))分别表示左上角和右下角坐标, c ( i ) c^{(i)} c(i)是该bbox中的物体的类别, C C C是类别数目。

对于来自特征 F i F_i Fi的某个位置 ( x , y ) (x,y) (x,y)的像素来说,其映射回原图的位置大致位于其感受野的中心: ( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) \left(\left\lfloor\frac{s}{2}\right\rfloor+x s,\left\lfloor\frac{s}{2}\right\rfloor+y s\right) (2s+xs,2s+ys)。Anchor Based方法,其将原图认为是Anchor Boxes的中心,并且基于这些Anchor Boxes去回归其对应的BBox。不同与此,FCOS将原图作为BBox的中心,直接去回归BBox。也就是说,FCOS将位置认为是训练样本,而不是将Anchor Box作为训练样本。

正负样本的划分规则也很简单:如果某个位置 ( x , y ) (x,y) (x,y)落在了任意一个GT BBox中,则认为其为正例,并赋予其相应的类别 c ∗ c^* c,否则设置为背景 c ∗ = 0 c^*=0 c=0

除了类别向量外,FCOS还会有一个4D向量作为位置回归的目标: t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) \bold{t}^*=(l^*, t^*, r^*, b^*) t=(l,t,r,b),这几个值的含义为各个位置距离bbox左上右下边界的距离,参见下图left:

FCOS: Fully Convolutional One-Stage Object Detection_第3张图片

这里存在一个ambiguous sample的情况,例如对于上图右侧的点来说,其同时落在了两个BBox中,此时这个点就成为了ambiguous sample,其对应的BBox不太好确定。这里FCOS采用的策略是:简单将面积最小的BBox作为其回归的目标,并通过后续提及的使用FPN进行多层级预测的方式进行缓解。

具体而言,对于某个位置 ( x , y ) (x,y) (x,y),其与一个BBox B i B_i Bi 关联,那么训练的回归目标为:
l ∗ = x − x 0 ( i ) , t ∗ = y − y 0 ( i ) , r ∗ = x 1 ( i ) − x , b ∗ = y 1 ( i ) − y \begin{aligned} l^{*}=x-x_{0}^{(i)}, & t^{*}=y-y_{0}^{(i)}, r^{*} =x_{1}^{(i)}-x, b^{*}=y_{1}^{(i)}-y \end{aligned} l=xx0(i),t=yy0(i),r=x1(i)x,b=y1(i)y

由于回归的目标都是正整数,因此,对于模型的回归分支的输出,会额外使用一个 e x p ( x ) exp(x) exp(x)函数,将输出映射至 ( 0 , ∞ ) (0, \infin) (0,).

FCOS可以尽可能地利用上所有的前景sample,而Anchor Based方法只利用了和GT BBox重叠程度较高的那些Anchor Box作为正例,这可能是FCOS性能超过Anchor Based方法的原因之一。

  • 损失函数

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 pos  ∑ x , y 1 { c x , y ∗ > 0 } L r e g ( t x , y , t x , y ∗ ) , \begin{aligned} L\left(\left\{\boldsymbol{p}_{x, y}\right\},\left\{\boldsymbol{t}_{x, y}\right\}\right) &=\frac{1}{N_{\mathrm{pos}}} \sum_{x, y} L_{\mathrm{cls}}\left(\boldsymbol{p}_{x, y}, c_{x, y}^{*}\right) \\ &+\frac{\lambda}{N_{\text {pos }}} \sum_{x, y} \mathbb{1}_{\left\{c_{x, y}^{*}>0\right\}} L_{\mathrm{reg}}\left(\boldsymbol{t}_{x, y}, \boldsymbol{t}_{x, y}^{*}\right), \end{aligned} L({px,y},{tx,y})=Npos1x,yLcls(px,y,cx,y)+Npos λx,y1{cx,y>0}Lreg(tx,y,tx,y),

其中 L c l s L_\mathrm{cls} Lcls L r e g L_\mathrm{reg} Lreg分别是Focal Loss和IOU Loss。

  • 推理

前传image,得到对应于特征 F i F_i Fi的分类分数图 p x , y \bold{p}_{x,y} px,y 以及回归预测结果 t x , y \bold{t}_{x,y} tx,y,设定阈值 p x , y > 0.05 p_{x,y}>0.05 px,y>0.05作为正样本,并反用公式(1)计算其BBox。

4.2 重叠bbox=>FPN

本文通过实验发现,重叠问题可以在一定程度上被基于FPN的multi-level预测缓解。

和FPN一样,FCOS在不同尺度的特征图上检测不同尺度的目标,这里使用的特征和FPN一样,也是 { 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。

FCOS为每个尺度特征回顾目标设定了一个尺度上限 m i m_i mi,也就说对于某个尺度特征 F i F_i Fi来说,如果某个位置满足 m a x ( l ∗ , t ∗ , r ∗ , b ∗ ) > m i max(l^*, t^*, r^*, b^*)>m_i max(l,t,r,b)>mi或者 m a x ( l ∗ , t ∗ , r ∗ , b ∗ ) < m i − 1 max(l^*, t^*, r^*, b^*)max(l,t,r,b)<mi1,那么这个位置会被设定为negative sample,不去回归任何BBox。

在FCOS中, { m 2 , m 3 , m 4 , m 5 , m 6 , m 7 } \{m_2,m_3,m_4,m_5,m_6,m_7\} {m2,m3,m4,m5,m6,m7}依次设定为0,64,128,256,512以及 ∞ \infin

这样一来,由于不同尺度的物体被分配到了不同尺度的特征进行回归,因此,重叠的现象有所缓解。分层预测后,如果还是存在重叠,会采用面积最小的BBox作为回归目标。

不同尺度特征的head都是共享的,但是考虑到不同尺度特征复杂的bbox尺度的范围不一样,因此,这里引入了一个可学习因子 s i s_i si,用于调节不同尺度特征的输出: e x p ( s i x ) exp(s_ix) exp(six)

4.3 低质量预测框=>center-ness分支

在引入FPN后,FCOS由于低质量预测框(预测框的中心离GT BBox的距离较远)的存在,性能与基于Anchor的方法还存在着一定的GAP。

因此,本文引入了一个center-ness分支(只包含一层),用于预测各个像素的center-ness。

center-ness target的定义为:
 centerness  ∗ = min ⁡ ( l ∗ , r ∗ ) max ⁡ ( l ∗ , r ∗ ) × min ⁡ ( t ∗ , b ∗ ) max ⁡ ( t ∗ , b ∗ ) \text { centerness }^{*}=\sqrt{\frac{\min \left(l^{*}, r^{*}\right)}{\max \left(l^{*}, r^{*}\right)} \times \frac{\min \left(t^{*}, b^{*}\right)}{\max \left(t^{*}, b^{*}\right)}}  centerness =max(l,r)min(l,r)×max(t,b)min(t,b)
当测试时,这个score会被用于对于预测框的分数进行调整,从而便于NMS去对这些框进行merge。

5. Evaluation

作者如何评估自己的方法?实验的setup是什么样的?感兴趣实验数据和结果有哪些?有没有问题或者可以借鉴的地方?

作者主要在COCO上进行的实验,在COCO trainval35k(115k图片)上进行训练,minival(5k图片)上进行验证,最终,报告在test_dev(20k图片)上的结果。

  • 训练细节
Backbone Opt Iteration Lr BS Steps (0.1) weight_decay momentum Pretrained InputSize
ResNet50 SGD 90k 0.01 16 60k,80k 0.0001 0.9 ImageNet shorter size 800,longer size 1333
  • 推理细节

后处理及参数与RetinaNet一致,输入尺度与训练一致。

6. Conclusion

作者给出了哪些结论?哪些是strong conclusions, 哪些又是weak的conclusions(即作者并没有通过实验提供evidence,只在discussion中提到;或实验的数据并没有给出充分的evidence)?

  • FCOS也能提供一个较好的best possible Recall (BPR)

BPR定义为一个检测器可以Recall的GT BBox占总BBox的比例,一个GT BBox被Recall定义为该BBox至少被分配给一个sample。

结果见下表:

FCOS: Fully Convolutional One-Stage Object Detection_第4张图片

  • 使用FPN进行multi-level预测可以极大地缓解ambiguous sample的数目

FCOS: Fully Convolutional One-Stage Object Detection_第5张图片

  • center-ness分支可以大幅度提升性能

FCOS: Fully Convolutional One-Stage Object Detection_第6张图片

  • FCOS可以超越基于Anchor的Counterpart

FCOS: Fully Convolutional One-Stage Object Detection_第7张图片

  • 在相同backbone的情况下,FCOS可以超越最近的SOTA

FCOS: Fully Convolutional One-Stage Object Detection_第8张图片

  • FCOS可以用于替换RPN

FCOS: Fully Convolutional One-Stage Object Detection_第9张图片

7. Notes

(optional) 不在以上列表中,但需要特别记录的笔记。

8. References

(optional) 列出相关性高的文献,以便之后可以继续track下去。

你可能感兴趣的:(目标检测,深度学习,目标检测,深度学习,人工智能)