本文是对FCOS的小修小改,最终性能达到了50.4AP,可谓相当强劲了,大家在工程上可以参考其中的改进以及提升方法
来源:晓飞的算法工程笔记 公众号
论文: FCOS: A Simple and Strong Anchor-freeObject Detector
Introduction
论文由FCOS原团队重新修改后发表,作者管这篇为FCOS的扩展版本而不是FCOSv2,但为了好分辨,我们就管他叫FCOSv2吧。FCOSv2的整体思想基本与FCOS一致,但性能出色很多。对比FCOS,基础主干ResNet-101-FPN上的性能从41.5AP提升了43.2AP,而最高版本的性能则是达到了50.4AP。
本文主要探讨FCOSv2其中的一些改进与提升方法,具体的其它实现可参考之前的FCOS文章。
FCOSv2
FCOS
FCOSv2在思想上与FCOS基本一致,在特征图的每个位置预测目标的类别、尺寸信息以及Center-ness,Center-ness用来表示当前位置与目标中心点的距离,目标的最终分数由分类分数和Center-ness分数结合所得。尺寸信息跟以往的bbox回归方法不同,预测的是特征位置到目标的四个边界的距离。
图2为FCOSv2中的主干网络结构,主干网络依然采用FPN,每层特征使用共同的head预测类别信息、尺寸信息以及Center-ness,具体的可以看看之前的文章。
Change
下面列举了一些FCOSv2相对于FCOS的修改,由于论文没有与原版进行对比,所以不知道各部分带来的收益具体是多少:
- 正样本点指定的修改,FCOS要求该特征点位于目标内部,以及该特征点到目标边界的距离满足所处的FPN层的约束,而FCOSv2则要求特征点位于目标的中心区域$(c_x-rs, c_y-rs, c_x + rs, c_y+rs)$,$s$为当前层的stride,$r=1.5$为超参数。
- 回归目标修改,FCOS的回归目标直接是特征点到目标边界的距离,由于Head是共用的,所以在预测时为每个level预设一个可学习的scale因子,而FCOSv2则加入stride,变得更适应FPN的尺寸,可学习的scale因子依然使用。
- center-ness预测的位置,FCOS的center-ness预测与分类预测放到了一起,而FCOSv2则将其与回归预测放到了一起。
- 回归损失函数修改,FCOS使用IoU损失进行回归的学习,而FCOSv2则采用了GIoU损失进行回归的学习。
- 最终分数的计算,FCOS采用分类分数以及center-ness之积,FCOSv2则采用分类分数以及center-ness之积的平方根:
Improvement
为了获得更好的性能,除了更换更强的主干网络外,论文还将FCOSv2进行了如下扩展:
- 使用BiFPN代替普通FPN,注意没有采用深度分离卷积,这部分能带来约2AP提升。
- 测试阶段的数据增强,将图片依次缩放至$[400,1200]$,每次步长为100,每个尺寸使用原图以及垂直翻转图片进行推理,这部分能带来约2.5AP提升。
- 增加可变形卷积,分别替换主干网络的第三和第四阶段的卷积,以及Head的两个分支的前四个卷积,这部分带来约1.5AP提升。
Experiment
与SOTA方法对比。
推理性能对比。
Conclusion
本文是对FCOS的小修小改,最终性能达到了50.4AP,可谓相当强劲了,大家在工程上可以参考其中的改进以及提升方法。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。