论文:Fully Convolutional One-Stage Object Detection
论文链接:https://arxiv.org/abs/1904.01355
代码链接:https://github.com/tianzhi0549/FCOS/
FCOS网络结构如下图所示:
FCOS使用FPN,每个head输出为三个分支分别为:类别分支、center-ness、回归分支。
损失函数如下所示:
类别损失函数使用focal loss,回归损失函数使用UnitBox论文中的IOU loss。
(x0, y0);(x1, y1)分别表示真值框左上角和右下角坐标。(x,y)为每个像素点坐标,回归目标为l*,t*,r*,b*。因此不需要提前设定anchor。
当两个真值框存在交叠时,则会存在歧义样本,针对此情况,可通过FPN解决。计算(l*, t*, r*, b*),mi为每个特征层最大距离,如果max(l*, t*, r*, b*) > mi or max(l*, t*, r*, b*) < mi−1,则此位置为负样本,不进行计算。P3层采集范围[0, 64];P4层采集范围为[64,128],以此类推。
对于大小相近又存在交叠的真值框,FPN无法区分,只能通过选择面积最小的真值框为回归目标
为了抑制低质量检测框,即减少误检,引入center-ness,计算公式如下:
引入centerness,范围为0~1,离中心点越近,权重越大。因此在一定程度上可以降低离目标中心较远的预测框的得分。拉出一条分支学习centerness,即权重。以此降低误检率。
网络效果: