AI编辑:深度眸
0 概要
论文名称:FCOS: A simple and strong anchor-free object detector
论文地址:https://arxiv.org/pdf/2006.09214v3.pdf
论文名称:FCOS: Fully Convolutional One-Stage Object Detection
论文地址:https://arxiv.org/pdf/1904.01355v1.pdf
官方代码地址:https://github.com/aim-uofa/AdelaiDet/
FCOS是目前最经典优雅的一阶段anchor-free目标检测算法,其模型结构主流、设计思路清晰、超参极少和不错的性能使其成为后续各个改进算法的baseline,和retinanet一样影响深远,故非常有必要对其进行深入分析。
一个大家都知道的问题,anchor-base的缺点是:超参太多,特别是anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定,难度较大。 而anchor-free做法虽然还是有超参,但是至少去掉了anchor设置这个最大难题。fcos算法可以认为是point-base类算法也就是特征图上面每一个点都进行分类和回归预测,简单来说就是anchor个数为1的且为正方形anchor-base类算法。
在目前看来,任何一个目标检测算法的核心组件都包括backbone+neck+多尺度head+正负样本定义+正负样本平衡采样+loss设计,除了正负样本平衡采样不一定有外,其他每个环节都是目前研究重点,到处存在不平衡问题,而本文重点是在正负样本定义上面做文章。
贴一下github:https://github.com/hhaAndroid/mmdetection-mini
欢迎star
1 fcos和retinanet算法对比分析
FCOS结构和retinanet几乎相同,但是有细微差别,下面会细说。
不清楚retinanet结构的请看:mmdetection最小复刻版(二):RetinaNet和YoloV3分析
retinanet的结构大概可以总结为:
resnet输出是4个特征图,按照特征图从大到小排列,分别是c2 c3 c4 c5,stride=4,8,16,32。Retinanet考虑计算量仅仅用了c3 c4 c5
先对这三层进行1x1改变通道,全部输出256个通道;然后经过从高层到底层的最近邻上采样add操作进行特征融合,最后对每个层进行3x3的卷积,得到p3,p4,p5特征图
还需要构建两个额外的输出层stride=64,128,首先对c5进行3x3卷积且stride=2进行下采样得到P6,然后对P6进行同样的3x3卷积且stride=2,得到P7
下面介绍fcos和retinanet算法的区别
1.1 resnet的style模式区别
左边是fcos配置,右边是retinanet配置。
(1) resnet骨架区别
在resnet骨架中,style='caffe'参数和style='pytorch'的差别就在Bottleneck模块,该模块的结构如下:
主干网络是标准的1x1-3x3-1x1结构,考虑stride=2进行下采样的场景,对于caffe模式来说,stride参数放置在第一个1x1卷积上,对于pytorch模式来说,stride放在第二个3x3卷积上:
if self.style == 'pytorch':