论文:FCOS: Fully Convolutional One-Stage Object Detection(CVPR 2019)速达>>
代码:tianzhi0549/FCOS
动机
Anchor Based Detector:
- 网络表现对Anchorde 尺寸、数量等敏感
- 需要小心设计尺寸、比例等,泛化能力不强,对一个新的数据集需要重新设计Anchor
- 需要密集的Anchor进行覆盖
- Anchor太多,涉及相当多的如IoU等计算
寻求一种简洁的目标检测算法,但同时保证速度和精度
Fcos
和之前的 CornerNet 、CenterNet 等 Anchor Box Free 算法差不多,设Outmap 的大小 ( H , W , C ) (H,W,C) (H,W,C) ,通道方向先不管,每个像素点对应一个预测目标,像素点的位置就是预测目标的位置(中心点或者顶点都可以代表目标位置,因算法的而异,但形式上差不多),位置可以通过与输入图片的映射关系( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s \lfloor{\frac s2}\rfloor +xs,\lfloor{\frac s2}\rfloor +ys ⌊2s⌋+xs,⌊2s⌋+ys, s s s for Stride)得到,总共 H × W H\times W H×W个预测,每个预测要能得到对应的预测框和所属类别,一般分几个预测支路得到,如:分类支路、回归支路等,经过筛选(NMS等后处理算法)得到最终预测
FCOS有三条预测支路:
-
Classification
-
Center-ness:用于降低低质量预测框权重,中心点越偏离中心位置,centerness越小(在中间时为1)
-
Regression:预测到目标框四条边的距离
更多的正样本
在Coco数据集上,图像标签为 B i = ( x 0 ( i ) , y 0 ( i ) , x 1 ( i ) , y 1 ( i ) , c ( i ) ) B_ i = (x^{ (i)}_ 0, y ^{(i)}_ 0, x ^{(i)}_ 1,y ^{(i)}_ 1, c ^{(i) }) Bi=(x0(i),y0(i),x1(i),y1(i),c(i)), ( x 0 ( i ) , y 0 ( i ) ) (x^{ (i)}_ 0, y ^{(i)}_ 0) (x0(i),y0(i)) 和 ( x 1 ( i ) , y 1 ( i ) ) (x ^{(i)}_ 1,y ^{(i)}_ 1) (x1(i),y1(i))分别表示左上顶点和右下顶点, c ( i ) c ^{(i)} c(i) 表示类别。
如果位置 ( x , y ) (x, y) (x,y)落在 Ground-truth Box 内即为正样本,并赋予相应的标签(类别、到目标框四条边距离 l ∗ , t ∗ , r ∗ , b ∗ l^*,t^*,r^*,b^* l∗,t∗,r∗,b∗ )。目标框面积和背景面积差距不大,所以FCOS可以利用更多的正样本训练回归器,而 Anchor-based Detectors 需要足够的 IOU 才能认定为正样本,这样显然太少了
目标同位置问题
在 CenterNet 中,输出特征的尺寸足够大(下采样×4),这个情况并不明显。FCOS则采用 FPN 结构(Figure 2),将不同尺度的目标分配到各个 Level 上缓解这个问题,但是FCOS没有Anchor,如何分配:
- 根据到四条边的距离判断, max ( l ∗ , t ∗ , r ∗ , b ∗ ) > m i \max(l^*,t^*,r^*,b^*) > m_i max(l∗,t∗,r∗,b∗)>mi或者 max ( l ∗ , t ∗ , r ∗ , b ∗ ) < m i − 1 \max(l^*,t^*,r^*,b^*)< m_{i-1} max(l∗,t∗,r∗,b∗)<mi−1为负,不回传梯度,文中 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 , ∞ 0, 64, 128, 256, 512 , ∞ 0,64,128,256,512,∞
如果还重叠,直接选最小的那个目标
相关实验
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
参考文献
【1】CornerNet
【2】CenterNet
【3】FCOS算法详解
【4】ATSS 算法——揭秘anchor-free和anchor-based算法差异