失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > FCOS: A Simple and Strong Anchor-free Object Detector

FCOS: A Simple and Strong Anchor-free Object Detector

时间:2020-02-13 22:05:09

相关推荐

FCOS: A Simple and Strong Anchor-free Object Detector

论文链接

一.背景

1.anchor-base缺点

(1).anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定,难度较大.

(2).anchor太过密集,其中很多是负样本,引入了不平衡.

(3).anchor的计算涉及IOU增加计算复杂度.

2.anchor free检测框

yolov1可看成是anchor free方式,通过划分格子,target的中心点位于格子里的,才将相应的格子负责预测target.而yolov2采用了anchor的思想.anchor遍布图片,自然召回率上升了.fcos取长补短,采取了gt框里的所有点进行回归,同时采用center-ness分支优化框的质量.

二.网络介绍

1.网络结构

输出分支主要由三部分组成

(1)classification,大小为(W,H,C),输出不同类别

(2)Regression,大小为(W,H,4),输出图上每个点的上下左右偏差

(3)Center-ness大小为(W,H,1),预测检测框中心点与gt检测框的中心点的重合概率,用来提升检测框精度,下面有具体分析.

2.中心采样(center sampling)

对于任何一个gt bbox,首先映射到每一个输出层,利用center_sample_radius×stride计算出该gt bbox在每一层的正样本区域以及对应的left/top/right/bottom的target.

对于每个输出层的正样本区域,遍历每个point位置,计算其max(left/top/right/bottom的target)值是否在指定范围内,不再范围内的认为是背景.

(1).减少歧义target数目,能很大解决overlap特征点不知道该回归那个框的问题

(2).减少标注噪声干扰

box标注通常会框住很多无关区域,如果无关区域的point也要回归明显不对,比如空中的飞机,飞机旁边的天空就是无关区域.

3.FPN

通过FPN在每层feature map去预测不同尺度大小的物体,就解决了这种overlap的问题(overlap特征点不知道该回归那个框).

如果FPN和中心采样还没解决的话,就按最小的框来.

同时FPN每一层回归范围进行约束.

P3:回归范围在[0,64],P4:回归范围在[64,128],P5:回归范围在[128,256]

P6:回归范围在[256,512],P7:回归范围在[612,inf],这样就解决了不同层预测不同大小目标的问题.

但是比如还是存在多个head回归一物体现象,比如在第二层回归的最大范围是80,在往上一层回归的最大范围就是40(因为第二层是第一层的1/2),所以导致同一个物体是有两层进行回归的。

4.分类

训练C个二分类器,而不是训练一个多分类器.

5.坐标回归

anchor-based回归方式在于回归anchor与gt框之间的偏移量,而fcos在特征图上面的每一个点回归上下左右的距离(可认为是point-based).

公式:

(l ∗ , t ∗ , r ∗ , b ∗ ) :回归的上下左右四个量;

(x0,y0),(x1,y1):gt在原图上面的左上右下坐标;

(x,y):特征图内的点的坐标;

s: 相应feature map的步长, 用于压缩预测范围,容易平衡分类和回归Loss权重.

6. center-ness

作者发现引入了很多远离taget中心点的低质量预测框,预测框的中心点与target框的中心点更接近的话,预测框更加可靠.所以在回归的分支引入center-ness分支来回归预测框中心与target中心,虽然是回归问题,但采用的是celoss

可看出低IOU但score高的box得到了很大减少,IOU和score的一致性得到了改善.

7.loss函数

Lcls:focal loss

Lreg:GIoU loss

Npos:正样本数据

λ:取1平衡回归与分类loss

centerness loss用于约束预测框中心与gt中心点,限制边界处的loss,直接与上面分类与回归相加即可,在推理时,输出的score为分类score乘以中心score.

import cv2import numpy as npdef draw_centerness(box):x1, y1, x2, y2 = boxw, h = x2 - x1, y2 - y1print(np.arange(w).repeat(h).reshape(h, w))print(np.arange(w).repeat(h).reshape(h, w).transpose(1, 0))xs = np.arange(w).repeat(h).reshape(h, w).transpose(1, 0).reshape(-1, 1)print('==xs:', xs)ys = np.arange(h).repeat(w).reshape(h, w).reshape(-1, 1)print('==ys:', ys)left = xs - x1print('==left:', left)right = x2 - xstop = ys - y1bottom = y2 -yshm = np.sqrt(np.minimum(left, right)/np.maximum(left, right) * np.minimum(top, bottom)/np.maximum(top, bottom))hm = hm.reshape(h, w)return hmhm =draw_centerness([0, 0, 100, 100])max_num = np.max(hm)cv2.imwrite('./test.jpg', hm/max_num*255.)

8.推理

获取feature map上每个点的分类score在与回归的四个边界进行组合即可得出预测框.在进行阈值0.6的NMS.

三.实验结果

参考:/huanghaian/note/1747551

如果觉得《FCOS: A Simple and Strong Anchor-free Object Detector》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。