论文阅读笔记 | 目标检测算法——FCOS算法

简介: 论文阅读笔记 | 目标检测算法——FCOS算法

paper:FCOS: Fully Convolutional One-Stage Object Detection

source code:https://tinyurl.com/FCOSv1


简介:FCOS以类似于语义分割的逐像素预测方式来解决目标检测,由全卷积网络组成。是一种anchor free,甚至是proposal free的方法。完全避免与anchor有关的复杂计算与超参数,利用唯一的后处理非最大抑制(NMS)。


1. Introduction


在很长的一段时间内,anchor的使用被认为是目标检测的关键一步,所以很多主流的目标检测算法都是基于anchor的检测,包括Faster RCNN,SSD,YOLOv2,v3等算法。但是,基于anchor的目标检测算法具有几下些缺点:


1)检测性能对锚盒的大小、纵横比和数量很敏感。因此,这些超参数需要在基于anchor的检测器中仔细调整。

2)即使经过精心设计,由于anchor的比例和纵横比保持固定,检测器在处理具有大形状变化的候选对象时也会遇到困难,尤其是对于小对象。预定义的anchor也妨碍了检测器的泛化能力,因为它们需要针对具有不同对象大小或纵横比的新检测任务进行重新设计。

3)为了提高检测时的召回率(查全率),需要密集覆盖的使用anchor。而在多尺度使用时,anchor的用量更甚。而绝大多数anchor都是负样本,所以会出现正负样本不均衡的问题。(retinanet提出的focal loss就是为了解决这个问题)

4)密集的使用anchor意味着计算量更大,因为需要计算anchor与ground truth的交并比(iou)


作者首次证明,简单得多的基于FCN的检测器比基于anchor的检测器获得更好的性能。


FCOS算法不是首先提出使用全卷机网络实现目标检测的,DenseBox同样是基于FCN的一个算法。FCOS会对特征图上的每一个点预测出一个4维的向量再加上一个类别信息,也就是对WxH的特征图上的每一个点,设置的channels为5.其实这与语义分割是类似的,只不过多了4个边界框偏移的信息。(见下文的图1)


但是这些算法主要应用与本文检测与人脸检测领域,因为当应用于具有高度重叠的边界框的一般对象检测时,这些方法不能很好地工作。如上右图所示,高度重叠的边界框导致难以处理的模糊性,不清楚参数w,r,t为重叠区域中的像素回归哪个边界框。不过,paper中也提到,有了FPN,这种模糊性可以在很大程度上消除。


作者观察到,FCOS算法可能会在远离目标对象中心的位置产生许多低质量的预测边界框。为了抑制这些低质量检测,作者引入了“center-ness”的分支(只有一层)来预测一个像素相对于其对应边界框中心的偏差。然后,该分数被用于对低质量检测到的边界框进行降低权重,并合并NMS的检测结果。由于设置了这个“center-ness”分支,使得基于FCNs的检测器要由于基于anchor的检测器。


FCOS作为一个新的检测框架,具有如下一些优点:


1)检测现在与许多其他可行的任务(如语义分割)相统一,使得重用这些任务中的想法变得更加容易。也就是可以将语义分割上的一些想法用在检测上。

2)检测避免了anchor与proposal,减小了设计的参数量,避免了许多特定任务的调整与技巧,同时还减少了计算量(Iou)

3)没有花哨的功能,我们在One-step检测器中取得了一流的结果。所提出的FCOS可以用作Two-step检测器中的区域提议网络(RPNs),并且可以获得比基于anchor的区域提议网络更好的性能。为此,需要重新思考物体检测中anchor的必要性。

4)FCOS可以立即扩展,以最小的修改来解决其他视觉任务,包括实例分割和关键点检测。


2. FCOS Approach


2.1 Fully Convolutional One-Stage Object Detector

image.png

image.png


如果一个位置在多个ground truth box内,则它视为模糊样本,选择box面积最小的作为它的回归对象。在下一节中,将展示使用多级预测(类似FPN结构),模糊样本的数量可以显著减少,因此它们几乎不影响检测性能。

image.png

值得注意的是,FCOS可以利用尽可能多的前景样本来训练回归器。而基于anchor的检测区只考虑具有足够高的Iou的anchor box作为正样本,这可能是FCOS表现更优的原因之一。


2.1.1 Networks

在FCOS的网络结构的最后一层上,将预测分类标签长度为80D的类别向量p ,同时还将预测一个4D的向量t作为距离边界框的四个参考偏移量t = ( l , t , r , b ) t = (l,t,r,b)t=(l,t,r,b).对于分类,采用的c个二分类器而不是多分类器。类似于RetinaNet,在Backbone后增加4个卷积层分别用于预测分类和回归,由于所有回归的对象都是正样本,所以在回归分支后使用函数e x p ( x exp(xexp(x)将所有真值映射到( 0 , ∞ ) (0,∞)(0,∞)。相比使用9个anchor的基于anchor的网络,其输出少了9倍。具体的网络结构如图所示:


image.png

2.1.2 Loss

损失函数定义为:

image.png

补充:

在paper中,其实对损失函数的解释比较少,但是一眼看上去,其实大概可以了解其含义。FCOS的损失函数由两个部分组成,一个是分类损失,另外一个就是边界框回归损失。而对于分类损失,使用的是retinanet的focal loss,focal loss的解释具体可以查看另一篇文章:focal loss


2.2 Multi-level Prediction with FPN for FCOS

上诉内容提到过,FCOS具有两个可能的问题:1)低召回率. 2)模糊样本.而这两个问题可以通过使用多尺度特征预测来解决,也就是使用FPN结构。


1) low best possible recall


在CNN中,如果最终特征图的stride很大,那么会导致一个相对很低的最大可能召回率best possible recall (BPR)。对于基于anchor的检测器来说,可以通过降低判断为正样本的IOU阈值来弥补一些。对于FCOS,虽然看似可能会因为很大stride导致一些物体在最终特征图上消失,进而导致无法检测这些物体,但是实际上,即使有着很大的stride,基于FCN的FCOS也能够达到很好的BPR,甚至好过RetinaNet。加上多级FPN预测后,BPR能够进一步提高。


2)intractable ambiguity


若干ground truth boxes的重叠会使得该在这些区域的位置不知道以谁作为回归对象,这也是导致基于FCN网络的性能下降的原因,本文证实通过多级预测能够很好的解决这个问题,使得基于FCN的网络能有和基于anchor的网络一样甚至更好的性能。


作者发现,以上所说,FCOS的两个可能的问题都可以通过多尺度特征预测(multi-level prediction)来解决。

image.png


由于具有不同大小的对象被分配到不同的要素级别,并且大部分重叠发生在具有显著不同大小的对象之间。如果一个位置,即使使用了多级预测,仍然被分配给多个ground-truth boxes,我们只需选择面积最小的ground-truth boxes作为目标即可。实验表明,多级预测可以很大程度上缓解上述模糊样本,并将基于FCN的检测器提高到与基于anchor的检测器相同的水平。

image.png


2.3 Center-ness for FCOS

解决了多尺度预测的问题后,仍存在另一个问题:实验表明FCOS会产生大量偏离目标中心的边界框。作者提出了一个简单而有效的策略来抑制这些低质量的检测边界框,而不引入任何超参数。具体来说,作者在最后的分类head中,添加了一个单层分支,与分类分支并行(如图所示),以预测某一位置点的“center-ness”。

image.png

image.png

这里使用sqrt来减缓center-ness的衰退。center-ness范围从0到1,因此用二元交叉熵损失进行训练。损失被加到损失函数方程中。

image.png

在测试时,通过将预测的center-ness与相应的分类分数相乘来计算最终分数(用于对检测到的边界框进行排序)。因此,center-ness可以降低远离对象中心的边界框的分数。结果,这些低质量的预测边界盒很有可能被最终的非最大抑制(NMS)过程过滤掉,从而显著提高检测性能。


center-ness的一个替换方法是只把ground truth box距离其中心的某个半径范围内的点(即ground truth box中心的点)视为正样本,这个idea是作者从focal loss中得到的,最后作者尝试了同时结合这两种方法,性能得到了些许提升。


3. Result


  • Multi-level Prediction的作用:

image.png

  • center-ness的作用:

image.png

  • 与其他SOTA算法的对比:

image.png

总结:

作者提出了一个anchor-free与proposal-free的检测器FCOS。实验结果优于RetinaNet, YOLO ,SSD,且复杂度更低。FCOS完全避免了与anchor相关的所有计算和超参数,并以每像素预测的方式解决了对象检测,类似于语义分割等其他密集预测任务。在One-step网络中获得一流的性能,并且可以替代Two-step网络中的RPN模块,效果甚至优于RPN结构。


目录
相关文章
|
2月前
|
机器学习/深度学习 运维 算法
大模型开发:描述一种用于异常检测的技术或算法。
LOF算法是一种无监督异常检测技术,通过比较数据点局部密度识别离群点。它计算每个点的局部离群因子得分,得分高则异常可能性大。主要步骤包括:距离度量、k近邻搜索、计算局部可达密度和LOF得分,然后设定阈值识别异常点。适用于入侵检测、故障检测等场景,Python中可使用scikit-learn库实现。
25 1
|
2月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
2月前
|
机器学习/深度学习 算法 计算机视觉
[YOLOv8/YOLOv7/YOLOv5系列算法改进NO.5]改进特征融合网络PANET为BIFPN(更新添加小目标检测层yaml)
本文介绍了改进YOLOv5以解决处理复杂背景时可能出现的错漏检问题。
109 5
|
3天前
|
机器学习/深度学习 人工智能 算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
7 0
|
9天前
|
人工智能 算法 测试技术
论文介绍:进化算法优化模型融合策略
【5月更文挑战第3天】《进化算法优化模型融合策略》论文提出使用进化算法自动化创建和优化大型语言模型,通过模型融合提升性能并减少资源消耗。实验显示,这种方法在多种基准测试中取得先进性能,尤其在无特定任务训练情况下仍能超越参数更多模型。同时,该技术成功应用于创建具有文化意识的日语视觉-语言模型。然而,模型融合可能产生逻辑不连贯响应和准确性问题,未来工作将聚焦于图像扩散模型、自动源模型选择及生成自我改进的模型群体。[论文链接: https://arxiv.org/pdf/2403.13187.pdf]
112 1
|
13天前
|
机器学习/深度学习 运维 算法
【Python机器学习专栏】异常检测算法在Python中的实践
【4月更文挑战第30天】本文介绍了异常检测的重要性和在不同领域的应用,如欺诈检测和网络安全。文章概述了四种常见异常检测算法:基于统计、距离、密度和模型的方法。在Python实践中,使用scikit-learn库展示了如何实现这些算法,包括正态分布拟合、K-means聚类、局部异常因子(LOF)和孤立森林(Isolation Forest)。通过计算概率密度、距离、LOF值和数据点的平均路径长度来识别异常值。
|
13天前
|
算法 数据可视化 数据挖掘
R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率
R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率
|
20天前
|
算法 数据可视化 数据挖掘
R语言社区发现算法检测心理学复杂网络:spinglass、探索性图分析walktrap算法与可视化
R语言社区发现算法检测心理学复杂网络:spinglass、探索性图分析walktrap算法与可视化
|
26天前
|
算法 数据可视化
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
|
27天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正