FCOS: Fully Convolutional One-Stage Object Detection
文章链接:https://arxiv.org/pdf/1904.01355.pdf
FCOS 是一阶段网络,基于 center-ness 的思想,实现没有anchor, 没有proposal的目标检测。而且召回率不亚于基于anchor 的检测算法。
1、网络结构如下:
网络结构借用FCN,通过反卷积上采样后进行特征融合,最后获取多尺度的特征输出,文章给出了5层尺度特征feature map, 最后在每一层尺度特征图上进行逐像素的目标检测。
既然 FCOS 无anchor, 那么为什么要去anchor呢,去anchor 到底有什么好处? 那么这里就要说说anchor存在的缺陷。
2、Anchor 缺陷:
1、anchor 作为预设框,网路对anchor 的尺寸,个数,长宽比十分敏感,与anchor相关的超参数需要精心调试。
2、anchor 的尺寸个宽高比固定,对于尺度变化幅度较大的物体检测比较困难,尤其是小目标,这也限制了网络的泛化能力。所以anchor要根据实际的检测物体进行尺度设置,比如用K-mean聚类,以达到anchor更加适合训练集。
3、为了提高召回,需要设置密集的anchor,但是这些anchor 大多数属于负样本,很容易造成正负样本不均衡问题。
4、密集的anchor中,每一个anchor都需要做交并比运算,消耗大量的时间和内存。
3、如何去Anchor:
基于bbox的目标检测就是检测物体的中心点和宽高,基于anchor 的思想是以anchor 为基准点,回归anchor 到target的中心点和宽高的偏移量。分类也是对anchor 进行分类。
如果没有了anchor,基准点如何设置,回归哪些偏移量得到target?
FCOS 将输出特征图的每一个位置对应到原图(乘上一个scale,可以理解为离散采样)都进行bbox回归。这一点类似语言分割。
对于下采样尺度为 s 的特征图上的每一个(x, y)特征点,映射到原图位置为( s/2 + xs , s/2 + ys),通过映射回原图的位置与target 比较,就可以为特征图上的每一个特征点生成训练target。
生成训练target:
基于anchor 的思想是通过anchor与target bbox 进行IOU 计算,通过阈值控制决定正负样本,把IOU最大的target 类别作为anchor的类别。
FCOS: 特征图上的每一个(x, y)特征点,映射到原图位置为( s/2 + xs , s/2 + ys)中,如果映射位置落在target bbox 里面,那么(x,y)特征点它就是正样本。
回归target就是映射位置到target bbox 左上角和 右下角的相对偏差:
t* = (l*, t*, r*, b*)
但是如果有多个target bbox 重叠,那么这就是一个模糊样本,需要用多级预测的方式解决。
多级预测
开头提到 FCOS 采用了5级预测。
1、多级预测可以提高目标召回,因为不论目标处于什么尺度,总会落在一个尺度的feature map 上。
2、多级预测可以有效解决target 重叠的模糊问题。
Center-ness 思想:
如果单纯用是否落在target 作为正负样本判断,那么在远离中心的位置产生大量低质量的正样本,所以这些位置产生大量低质量的预测边框。而我们希望这些预测框离中心点越近越好。
为了抑制低质量的边框,作者提出了**“中心度”的思想**,以描述位置与中心位置的得分。通过交叉熵损失进行训练,最后将中心度得分与分类得分相乘,得到检测 bbox 的得分。
中心度定义:
中心度可以降低远离中心点的bbox的得分,最后通过 NMS 过滤后,远离中心的bbox 很可能被过滤,从而提高检测性能。
LOSS 损失
分类loss + 回归loss + 中心度交叉熵loss:
版权声明:本文为CSDN博主「maxruan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/long630576366/article/details/121918613
暂无评论