URL
TL;DR
Faster RCNN
系列、SSD
、YOLOv2~v5
(注意 YOLOv1
不包括在内)都是基于 Anchor
进行预测的。
- 本文提出一种 Anchor Free 的 one stage 目标检测方法,整个模型结构非常轻量,效果强大。
- 由于没有了 anchor,所以 fcos 可方便拓展到其他任务。
Algorithm
网络结构
backbone + FPN
输出了 5 种尺度的 feature map
用于预测,由于是全卷积网络,所以 5 个输出头共享一份参数,对于每个尺度的 feature map
上的每一个位置 预测包括类别(N,Cls,H,W)、框的位置(N,4,H,W)和一个中心置信度(N,1,H,W)。
- 由于共享输出头,所以本文作者 为每个输出头增加了不共享的 scale 参数,scale.shape == (num_of_level, 1)
- 其中位置参数模型预测的是如上图所示的(l,t,b,r),即相对于 feature map 上的点到 GT 的上下左右偏移量。
centerness
- centerness=max(l⋆,r⋆)min(l⋆,r⋆)×max(t⋆,b⋆)min(t⋆,b⋆) ,即
GT bbox
内的点越靠近中心越大,越远离中心越小,取值范围 [0, 1]
,可视化 centerness
热力图如上图所示。
- 最终预测时,score 阈值过滤的是
centerness * score
。
损失函数
L({px,y},{tx,y})=Npos1∑x,yLcls(px,y,cx,y⋆)+Nposλ∑x,yIcx,y⋆>0Lreg(tx,y,tx,y⋆)+Nposγ∑x,yIcx,y⋆>0Lctr(sx,y,sx,y⋆)
- 其中 px,y 表示在特征图点(x,y)处预测的每个类别的 score
- cx,y⋆ 表示在特征图点(x,y)处的真实类别(负样本类别为 0)
- tx,y 表示在特征图点(x,y)处预测的目标边界信息
- sx,y 表示在特征图点处预测的centerness
- Lcls 使用
focal loss
以平衡正负样本
- Lreg 使用
GIOU loss
,且只对正样本计算
- Lctr 使用
focal loss
,且只对正样本计算
正样本选择策略
- 与
anchor base
方法不同,fcos
对正样本的选择较为苛刻,仅当 feature map 上的某个点落入 gt bbox 中心区域(sub-box)时才被当做正样本 。
sub-box
的定义: (cx−rs,cy−rs,cx+rs,cy+rs) ,其中 (cx,cy) 表示 gt bbox
中心点在原始图上的坐标;s
表示 stride
即当前 feature map
相较于原图下采样倍数;r
表示 radius
半径超参数,在 coco
数据集上取 1.5
。
- 除了正样本之外,其他样本的
cls
类别都被置为 0(background)
,负样本只计算 cls loss
,不计算 reg loss
和 centerness loss
(也没法计算,有框才能计算)。
Ambiguous sample
anchor free
的检测方法绕不开一个天然的问题:如果一个 feature map
的特征点(x,y)同时是两个 GT bbox
的正例,应该如何预测,毕竟 fcos
每个特征点只预测一个框。
- 本文缓解该问题的方法是:使用 FPN box 尺度分配 + center sampling。
FPN bbox
尺度分配是一个常用的解决 Ambiguity
问题的方法,越大的 feature map
负责检测越小的框。(将 Ambiguity
出现的概率从 23.16%
降低到 7.24%
)
center sampling
:即上面提到的 sub-box 采样方法,radius = 1.5。(将 Ambiguity
出现的概率从 7.24%
降低到 2.66%
)
Thought
FCOS
是一种很简单高效的 2D anchor free
物体检测算法,迁移性强,启发了后面的 FCOS3D
单目 3D
检测。