论文链接
https://arxiv.org/abs/1904.01355
动机
1.目标检测中的anchor机制有以下缺点:(1)检测性能容易受先验的anchor box的大小、长宽比和数量的影响 (2)在训练和检测过程中anchor box都是固定的,当出现目标形状剧烈变化时,会难以适应这种变化从而影响检测效果 (3)为了实现高召回率,需要在图片上提取大量anchor box进行筛选,其中大部分的anchor box是负样本,造成样本类别不平衡 (4)大量anchor box占用了更多存储空间并增加了更多计算量、
2.是否可以将语义分割的稠密预测的思路应用到目标检测中?
贡献
1.将类似语义分割的稠密预测思想引入目标检测中来
2.目标检测不再需要anchor box,减少了超参数的数量,使得检测模型更加简单,在训练时避免了大量bbox的IoU的计算和匹配,减少了显存使用
3.在COCO数据集上,在所有one-stage目标检测方法中实现了最佳结果
4.对FCOS稍做修改就可以应用到其他稠密预测任务中,比如语义分割、关键点检测
算法
FCOS训练
训练标签格式:,其中(x0, y0)是bbox的左上角点坐标,(x1, y1)是bbox的右下角点坐标,c是类别。
坐标点分类:每个预测bbox都对应一个坐标点。如果一个坐标位置(x, y)落在一个标签bbox范围内,且它的类别和该标签bbox的类别一致,则视该坐标点为正样本,否则它就是负样本,类别为背景。
bbox四条边距离bbox的坐标点的距离预测:
,四个值分别代表了bbox的上下左右四条边距离预测的bbox的坐标点的距离。使用下列公式可以得到l*, t*, r*, b*的标签值用于训练。公式的逆运算可以获得预测的bbox的左上角点和右下角点的坐标。
网络输出:对于特征图上每个点,输出C维的分类向量(C为类别数量)以及4维向量
,通过点的位置以及4维向量(l, t, r, b)得到预测的bbox。
损失函数:
分类使用Focal loss,Npos表示正样本的数量,也就是特征图上的坐标点落在标签bbox内的个数。
对t向量的回归预测使用UnitBox的IoU loss。
表示类别不是背景类就是1,否则为0。IoU loss中的xl,xr,xt,xb就相当于本文的(l, t, r, b)。
表示该坐标点(i, j)落在某个标签bbox范围内。
在多尺度特征图上进行预测
FCOS获得不差于anchor-based目标检测方法的best possible recall
参考FPN,在五个不同尺度的特征图上进行预测。在不同尺度的特征图上进行训练时,规定了当前特征图上预测值的范围mi-1 <= max(l*, t*, r*, b*) <= mi,如果超出范围,则不需要该特征点预测bbox。
。这种多尺度特征图预测方式以及对预测置范围的约束机制能够缓解bbox重叠而产生预测模棱两可的情况。
Center-ness for FCOS
FCOS在预测时会产生许多预测坐标点离bbox的中心点很远的低质量bbox,导致预测准确度降低。为了抑制过多低质量bbox的产生,提出一个简单的不引入超参数的策略:在分类分支上多一个并行分支,用于预测centerness值,范围0-1。在训练时,centerness标签值为
,训练时使用二值交叉熵损失函数。
在测试时,预测的bbox的最终的score时centerness score和分类score的乘积。当预测bbox的坐标点远离bbox的中心点时,centerness就很小,从而使得最终score变小,从而在NMS时更容易过滤掉这些低质量的bbox。
反思
- 预测流程:输入RGB图片,得到不同尺度的特征图的每个点的预测结果,包括分类向量、特征点距离四条边的距离(l,t,r,b)、特征点对应的bbox的centerness score。最后使用NMS对预测的bbox进行过滤,获得最终的预测结果
- 复现的结果AP为30.0%,而论文中为36.6,还是有比较大的差距,不知道里面是否有一些小技巧