精华内容
下载资源
问答
  • CVPR2021 | 2D目标检测论文解读1. UP-DETR:——《UP-DETR: Unsupervised Pre-training for Object Detection with Transformers(Oral)》2. OWOD——《Towards Open World Object Detection(Oral)》3. YOLOF——《You...

    CVPR2021 | 2D目标检测论文解读

    1. UP-DETR:——《UP-DETR: Unsupervised Pre-training for Object Detection with Transformers(Oral)》

         出发点:利用Transformer做目标检测,DETR通过直截了当的编解码器架构,取得了引人注目的性能。受自然语言处理中预训练transformer语言模型的影响,本文提出了一个适用于目标检测的无监督预训练任务。具体而言,给定图片,我们随机的从其中裁剪下多个小补丁块输入解码器,将原来输入编码器,预训练任务要求模型从原图中找到随机裁剪的补丁块。

         核心操作:在这个过程中,我们发现并解决了两个关键的问题:多任务学习和多个补丁块的定位。

    • (1)为了权衡预训练过程中,检测器对于分类和定位特征的偏好,我们固定了预训练的CNN特征并添加了一个特征重构的分支。

    • (2)为了同时支持多补丁定位,我们提出了注意力掩码和洗牌的机制。实验中,无监督预训练可以显著提升DETR在下游VOC和COCO上目标检测的性能
      在这里插入图片描述

    2. OWOD——《Towards Open World Object Detection(Oral)》

    标题:开放世界中的目标检测
    论文:https://arxiv.org/abs/2103.02603
    代码:https://github.com/JosephKJ/OWOD
    详细解读:目标检测一卷到底之后,终于有人为它挖了个新坑|CVPR2021 Oral

    在这里插入图片描述
         出发点:虽然目标检测技术目前已经发展得较为成熟,但如果要真正能实现让计算机像人眼一样进行识别,有项功能一直尚未达成——那就是像人一样能识别现实世界中的所有物体,并且能够逐渐学习认知新的未知物体。来本文发现并解决了这个问题。提出了一种新颖的方案:Open World Object Detector,简称ORE,即开放世界的目标检测。

         核心操作:ORE主要包含两个任务:

    • 1.Open Set Learning,即在没有明确监督的情况下,将尚未引入的目标识别为“未知”

    • 2.Incremental Learning,即让网络进行N+1式增量学习,接收相应标签以学习其识别到的未知类别,同时不会忘记之前已经学到的类别

    3. YOLOF——《You Only Look One-level Feature》

         出发点:本文对单阶段目标检测中的FPN进行了重思考并指出FPN的成功之处在于它对目标检测优化问题的分而治之解决思路而非多尺度特征融合。从优化的角度出发,作者引入了另一种方式替换复杂的特征金字塔来解决该优化问题:从而可以仅仅采用一级特征进行检测。基于所提简单而有效的解决方案,作者提出了YOLOF(You Only Look One-level Feature)。

         核心操作:本文的贡献主要包含以下几点:

    • FPN的关键在于针对稠密目标检测优化问题的“分而治之”解决思路,而非多尺度特征融合;
    • 提出了一种简单而有效的无FPN的基线模型YOLOF,它包含两个关键成分(Dilated Encoder与Uniform Matching)以减轻与FPN的性能差异;
    • COCO数据集上的实验证明了所提方法每个成分的重要性,相比RetinaNet,DETR以及YOLOv4,所提方法取得相当的性能同时具有更快的推理速度。
      在这里插入图片描述

         效果:YOLOF有两个关键性模块:Dilated Encoder与Uniform Matching,它们对最终的检测带来了显著的性能提升。COCO基准数据集的实验表明了所提YOLOF的有效性,YOLOF取得与RetinaNet-FPN同等的性能,同时快2.5倍;无需transformer层,YOLOF仅需一级特征即可取得与DETR相当的性能,同时训练时间少7倍。以大小的图像作为输入,YOLOF取得了44.3mAP的指标且推理速度为60fps@2080Ti,它比YOLOv4快13%。

    4. DeFCN——《End-to-End Object Detection with Fully Convolutional Network》

         出发点:本文基于FCOS,首次在密集预测上利用全卷积结构做到E2E,即无NMS后处理。论文首先分析了常见的密集预测方法(如RetinaNet、FCOS、ATSS等),并且认为one-to-many的label assignment是依赖NMS的关键。受到DETR的启发,作者设计了一种prediction-aware one-to-one assignment方法。此外,还提出了3D Max Filtering以增强feature在local区域的表征能力,并提出用one-to-many auxiliary loss加速收敛。

         核心操作:本文方法基本不修改模型结构,不需要更长的训练时间,可以基于现有密集预测方法平滑过渡。在无NMS的情况下,在COCO数据集上达到了与有NMS的FCOS相当的性能;在代表了密集场景的CrowdHuman数据集上,论文方法的recall超越了依赖NMS方法的理论上限。
    在这里插入图片描述

    5. GFocalV2——《Generalized Focal Loss V2: Learning Reliable Localization Quality Estimation for Dense Object Detection》

         核心操作:本文应该是检测领域首次引入用边界框的不确定性的统计量来高效地指导定位质量估计,从而基本无cost(包括在训练和测试阶段)地提升one-stage的检测器性能,涨幅在1~2个点AP。
    在这里插入图片描述

    6. 《Positive-Unlabeled Data Purification in the Wild for Object Detection》

         出发点: 得益于大量标注图像,基于深度学习的目标检测方法取得了很大进展。然而,图像标注仍然是一个费力、耗时且容易出错的过程。为了进一步提高检测器的性能,本文寻求利用所有可用的标注数据并从野外的大量未标注图像中挖掘有用的样本,这在以前很少讨论。

         核心操作:本文提出了一种基于正未标注学习的方案,通过从大量未标注的图像中提纯有价值的图像来扩展训练数据,其中原始训练数据被视为正数据,而野外未标记的图像是未标记数据。为了有效地提纯这些数据,提出了一种基于提示学习和真实值有界知识蒸馏的自蒸馏算法。实验结果验证了所提出的正未标注数据提纯可以通过挖掘海量未标注数据来增强原始检测器。本文方法在 COCO 基准上将FPN 的 mAP 提高了 2.0%。
    在这里插入图片描述

    7. MI-AOD——《Multiple Instance Active Learning for Object Detection》

         出发点:尽管主动学习在图像识别方面取得了长足的进步,但仍然缺乏一种专门适用于目标检测的示例级的主动学习方法。

         核心操作:本文提出了多示例主动目标检测(MI-AOD),通过观察示例级的不确定性来选择信息量最大的图像用于检测器的训练。MI-AOD定义了示例不确定性学习模块,该模块利用在已标注集上训练的两个对抗性示例分类器的差异来预测未标注集的示例不确定性。MI-AOD将未标注的图像视为示例包,并将图像中的特征锚视为示例,并通过以多示例学习(MIL)方式对示例重加权的方法来估计图像的不确定性。反复进行示例不确定性的学习和重加权有助于抑制噪声高的示例,来缩小示例不确定性和图像级不确定性之间的差距。实验证明,MI-AOD为示例级的主动学习设置了坚实的基线。在常用的目标检测数据集上,MI-AOD和最新方法相比具有明显的优势,尤其是在已标注集很小的情况下。
    在这里插入图片描述

    8 . 《Instance Localization for Self-supervised Detection Pretraining》

         出发点:先前对自监督学习的研究已经在图像分类方面取得了相当大的进步,但通常在目标检测方面的迁移性能下降。本文的目的是推进专门用于目标检测的自监督预训练模型。

    在这里插入图片描述
         核心操作:基于分类和检测之间的固有差异,我们提出了一种新的自监督前置任务,称为实例定位。图像实例粘贴在不同的位置并缩放到背景图像上。前置任务是在给定合成图像以及前景边界框的情况下预测实例类别。我们表明,将边界框集成到预训练中可以促进迁移学习的更好的任务对齐和架构对齐。此外,我们在边界框上提出了一种增强方法,以进一步增强特征对齐。因此,我们的模型在 ImageNet 语义分类方面变得更弱,但在图像定位方面变得更强,具有用于目标检测的整体更强的预训练模型。实验结果表明,我们的方法为 PASCAL VOC 和 MSCOCO 上的对象检测产生了最先进的迁移学习结果。

    9. 《Semantic Relation Reasoning for Shot-Stable Few-Shot Object Detection》

         出发点:由于现实世界数据固有的长尾分布,小样本目标检测是一个必要且长期存在的问题。其性能在很大程度上受到新类数据稀缺性的影响。但是无论数据可用性如何,新类和基类之间的语义关系都是不变的。

    在这里插入图片描述
         核心操作:在这项工作中,作者研究利用这种语义关系和视觉信息,并将显式关系推理引入新目标检测的学习中。具体来说,我们通过从大量文本语料库中学习到的语义嵌入来表示每个类概念。检测器被训练以将对象的图像表示投影到这个嵌入空间中。本文还确定了简单地使用带有启发式知识图的原始嵌入的问题,并建议使用动态关系图来增强嵌入。因此,SRR-FSD 的小样本检测器对新物体的镜头变化具有鲁棒性和稳定性。实验表明,SRR-FSD 可以在更高的镜头下获得有竞争力的结果,更重要的是,在较低的显式和隐式镜头下,性能明显更好。从预训练分类数据集中删除隐式镜头的基准协议可以作为未来研究的更现实的设置。

    10. OPANAS——《OPANAS: One-Shot Path Aggregation Network Architecture Search for Object Detection》

    在这里插入图片描述
         核心操作:本文提出 OPANAS 算法,显著提高了搜索效率和检测精度,主要包含三个任务:

    • 引入六种异构信息路径来构建搜索空间,即自上向下、自下向上、融合分裂、比例均衡、残差连接和无路径。

    • 提出了一种新的 FPN 搜索空间,其中每个 FPN 候选者都由一个密集连接的有向无环图表示(每个节点是一个特征金字塔,每个边是六个异构信息路径之一)。

    • 提出一种高效的一次性搜索方法来寻找最优路径聚合架构,即首先训练一个超网络,然后用进化算法找到最优候选者。

         实验效果:实验结果证明了所提出的 OPANAS 对目标检测的作用:(1)OPANAS 比最先进的方法更有效,搜索成本要小得多;(2) OPANAS 发现的最佳架构显著改进了主流检测器,mAP 提高了 2.3-3.2%;(3) 实现了最新的准确度与速度的均衡(52.2% mAP,7.6 FPS),训练成本比同类最先进技术更小。

    11. 《MeGA-CDA: Memory Guided Attention for Category-Aware Unsupervised Domain Adaptive Object Detection》

         出发点:现有的无监督域自适应目标检测方法通过对抗性训练执行特征对齐。虽然这些方法在性能上实现了合理的改进,但它们通常执行与类别无关的域对齐,从而导致特征的负迁移。
    在这里插入图片描述

         核心操作:本文尝试通过提出用于类别感知域适应的记忆引导注意(MeGA-CDA)来将类别信息纳入域适应过程。所提出的方法包括采用类别鉴别器来确保用于学习域不变鉴别特征的类别感知特征对齐。然而,由于目标样本的类别信息不可用,我们建议生成内存引导的特定类别注意图,然后用于将特征适当地路由到相应的类别鉴别器。所提出的方法在几个基准数据集上进行了评估,并且表现出优于现有方法。

    12. FSCE——《FSCE: Few-Shot Object Detection via Contrastive Proposal Encoding》

         核心操作:本文提出的FSCE方法旨在从优化特征表示的角度去解决小样本物体检测问题。小样本物体检测任务中受限于目标样本的数目稀少,对目标样本的分类正确与否往往对最终的性能有很大的影响。FSCE借助对比学习的思想对相关候选框进行编码优化其特征表示,加强特征的类内紧凑和类间相斥,最后方法在常见的COCO和Pascal VOC数据集上都得到有效提升。

    13. Det-AdvProp——《Robust and Accurate Object Detection via Adversarial Learning》

         出发点:数据增强已经成为训练高性能深度图像分类器的一个组成部分,但是它在目标检测方面的潜力尚未被充分挖掘。鉴于大多数最先进的目标检测器都得益于对预先训练好的分类器进行微调,本文首先研究了分类器从各种数据增强中获得的收益如何迁移至目标检测。但结果令人沮丧:在精度或鲁棒性方面,微调后增益减小。

    在这里插入图片描述
         核心操作:因而,本文通过探索对抗性的例子来增强目标检测器的微调阶段,可以看作是一种依赖于模型的数据增强。本文方法动态地选择来自检测器分类和定位分支的强对抗性图像,并随检测器迭代,以确保增强策略保持最新和相关。这种依赖于模型的增广策略比自动增广这样基于一个特定检测器的模型无关增广策略更适用于不同的目标检测器。

    14. 《I^3Net: Implicit Instance-Invariant Network for Adapting One-Stage Object Detectors》

         出发点:最近关于两阶段跨域检测的工作广泛地探索了局部特征模式,以获得更准确的自适应结果。这些方法在很大程度上依赖于区域建议机制和基于ROI的实例级特征来设计针对前景对象的细粒度特征对齐模块。然而,对于单级检测器,很难甚至不可能在检测管道中获得显式的实例级特征。基于此,我们提出了一种隐式实例不变网络(I3Net),该网络是为适应一级检测器而定制的,通过利用不同层次深层特征的自然特征隐式学习实例不变特征。
    在这里插入图片描述
         核心操作:本文从三个方面促进了自适应:

    • 动态类平衡重加权(DCBR)策略,该策略考虑了域内和类内变量的共存,为样本稀缺和易于适应的样本分配更大的权重;

    • 类别感知对象模式匹配(COPM)模块,在类别信息的引导下,增强跨域前景对象匹配,抑制非信息背景特征;

    • 正则化联合类别对齐(RJCA)模块,通过一致性正则化在不同的领域特定层上联合执行类别对齐

    15. DeFeat——《Distilling Object Detectors via Decoupled Features》

         出发点:与图像分类不同,目标检测器具有复杂的多损失函数,其中语义信息所依赖的特征非常复杂。本文指出一种在现有方法中经常被忽略的路径:从不包括物体的区域中提取的特征信息对于提取学生检测器。同时阐明了在蒸馏过程中,不同区域的特征应具有不同的重要性。并为此提出了一种新的基于解耦特征(DeFeat)的提取算法来学习更好的学生检测器。
    在这里插入图片描述

         核心操作:具体来说,将处理两个层次的解耦特征来将有用信息嵌入到学生中,即来自颈部的解耦特征和来自分类头部的解耦建议。在不同主干的探测器上进行的大量实验表明,该方法能够超越现有的目标检测蒸馏方法。

    16. OTA——《OTA: Optimal Transport Assignment for Object Detection》

    在这里插入图片描述
         核心操作:本文提出了一种基于最优传输理论的目标检测样本匹配策略,利用全局信息来寻找最优样本匹配的结果,相对于现有的样本匹配技术,具有如下优势:

    • 检测精度高。全局最优的匹配结果能帮助检测器以稳定高效的方式训练,最终在COCO数据集上达到最优检测性能。

    • 适用场景广。现有的目标检测算法在遇到诸如目标密集或被严重遮挡等复杂场景时,需要重新设计策略或者调整参数,而最优传输模型在全局建模的过程中包括了寻找最优解的过程,不用做任何额外的调整,在各种目标密集、遮挡严重的场景下也能达到最先进的性能,具有很大的应用潜力。

    17. 《Data-Uncertainty Guided Multi-Phase Learning for Semi-Supervised Object Detection》

    标题:基于数据不确定性的多阶段学习半监督目标检测
    论文:https://arxiv.org/abs/2103.16368

         出发点:本文深入研究了半监督对象检测,其中利用未标注的图像来突破全监督对象检测模型的上限。以往基于伪标签的半监督方法受噪声影响严重,容易对噪声标签过拟合,无法很好地学习不同的未标记知识。为了解决这个问题,本文提出了一种用于半监督目标检测的数据不确定性引导的多阶段学习方法,根据它们的难度级别综合考虑不同类型的未标记图像,在不同阶段使用它们,并将不同阶段的集成模型一起生成最终结果。图像不确定性引导的简单数据选择和区域不确定性引导的 RoI 重新加权参与多阶段学习,使检测器能够专注于更确定的知识。
    在这里插入图片描述

    18. SA-AutoAug——《Scale-aware Automatic Augmentation for Object Detection》

    标题:用于目标检测的尺度感知自动增强
    论文:https://arxiv.org/abs/2103.17220
    代码:https://github.com/Jia-Research-Lab/SA-AutoAug

    在这里插入图片描述     核心操作:本文提出了一种用于目标检测的数据增强策略,定义了一个新的尺度感知搜索空间,其中图像级和框级增强都旨在保持尺度不变性。在这个搜索空间上,本文提出了一种新的搜索指标,称为帕累托规模均衡(Pareto Scale Balance),以促进高效搜索。在实验中,即使与强大的多尺度训练基线相比,尺度感知自动增强对各种目标检测器(如 RetinaNet、Faster R-CNN、Mask R-CNN 和 FCOS)也产生了显著且一致的改进。本文搜索的增强策略可转移到目标检测之外的其他视觉任务(如实例分割和关键点估计)以提高性能,且搜索成本远低于以前用于目标检测的自动增强方法。

    19. DCNet——《Dense Relation Distillation with Context-aware Aggregation for Few-Shot Object Detection》

    标题:具有上下文感知聚合的密集关系蒸馏用于小样本目标检测
    论文:https://arxiv.org/abs/2103.17115
    代码:https://github.com/hzhupku/DCNet

         出发点:传统的基于深度学习的目标检测方法需要大量的边界框标注进行训练,获得如此高质量的标注数据成本很高。小样本目标检测能通过少量带标注的样本学习新类,非常具有挑战性,因为新目标的细粒度特征很容易被忽略,而只有少数可用数据。

    在这里插入图片描述
         核心操作:在这项工作中,为了充分利用带标注的新对象的特征并捕获查询对象的细粒度特征,作者提出了具有上下文感知聚合的密集关系蒸馏来解决小样本检测问题。密集关系蒸馏模块建立在基于元学习的框架之上,旨在充分利用支持特征,其中支持特征和查询特征密集匹配,以前馈方式覆盖所有空间位置。引导信息的大量使用让模型能处理常见挑战(例如外观变化和遮挡)。此外,为了更好地捕获尺度感知特征,上下文感知聚合模块自适应地利用来自不同尺度的特征以获得更全面的特征表示。

    参考文献

    参考文章:

    展开全文
  • 目标检测论文解读1:(RCNN解读)Rich feature hierarchies for accurate object detection...-附件资源
  • 2021年3月发表在CVPR上的You Only Look One-level Feature (YOLOF)指出FPN的成功在于其对目标检测优化问题的分治解决,而不是多尺度特征融合。 基于这样的思想,YOLOF引入了一种替代的方法:只使用一级特征进行检测...

    2021年3月发表在CVPR上的You Only Look One-level Feature (YOLOF)指出FPN的成功在于其对目标检测优化问题的分治解决,而不是多尺度特征融合。

    基于这样的思想,YOLOF引入了一种替代的方法:只使用一级特征进行检测,而不是采用复杂的特征金字塔。在该方法中,作者提出了扩展编码器和均匀匹配两个关键组件,并对其进行了很大的改进。

    作者将FPN视为多进多出(Multiple In Multiple Out, MiMo)编码器,并和单进多出(SiMo)、多进单出(MiSo)和单进单出(SiSo)编码器相比较,如下图所示:

    在这里插入图片描述
    令人惊讶的是,只有一个输入特征C5且不进行特征融合的SiMo编码器,可以达到与MiMo编码器(即FPN)相当的性能。性能差距小于1mAP。相比之下,在MiSo和SiSo编码器中,性能显著下降。这些现象说明:

    1. C5特征为不同尺度的物体检测提供了足够的背景,这使得SiMo编码器能够实现可比的结果
    2. 多尺度特征融合效益远没有分治效益重要。

    通过将SiSo的性能与MiMo编码器相比较。作者发现SiSo编码器导致性能下降的原因是:

    1. C5特征接受域匹配的尺度范围有限,影响了对不同尺度对象的检测性能。作者采用残差块来解决这一问题,它接收来自主干的输入并分配表示进行检测
    2. 单级稀疏锚在正锚上的不平衡问题。作者采用均匀锚来解决这一问题,执行分类和回归任务,并生成最终的预测框。

    因此,YOLOF的检测结构如下:

    1. 主干
    2. 编码器,接收来自主干的输入并分配表示进行检测
    3. 译码器,执行分类和回归任务,并生成最终的预测框。
      在这里插入图片描述

    1. 编码器

    为了解决C5特征接受域匹配的尺度范围有限的问题。作者使用编码器,它接收来自主干的输入并分配表示进行检测。

    编码器的结构如下,它包含两个主要组件:投影块和剩余块。

    1. 投影层首先应用一个1×1卷积层来减小通道维数,然后添加一个3×3卷积层来细化语义上下文,这与FPN相同。
    2. 剩余块包含四个膨胀率不同的残差块,生成具有多个接受域的输出特征,覆盖所有对象的尺度。每个残差块由三个连续的卷积组成:一个1×1卷积使通道减少,然后使用一个3×3空洞卷积来扩大接受域,最后,1×1卷积恢复通道的数量。

    在这里插入图片描述
    下面介绍残差块是如何解决编码器的输出特征能够覆盖不同尺度的所有对象的问题。

    1. 如图(a)所示,C5特征的接受域只能覆盖有限的尺度范围。
    2. 作者首先通过叠加标准和膨胀卷积来扩大C5特征的接受域,扩大的过程为将一个大于1的倍数乘以所有原来覆盖的尺度,如图(b)所示,与图(a)相比,整个比例尺范围向更大的比例尺范围转移。
    3. 通过残余块添加相应的特征,将原始尺度范围与放大后的尺度范围结合起来,得到一个包含多个接受域的输出特征,如图(c )所示。

    在这里插入图片描述

    2. 解码器

    解码器由两个并行的任务专用头组成:分类头和回归头,如下图所示。回归头部有四个卷积层,而分类头部有两个。

    在这里插入图片描述
    正锚点的定义是目标检测优化问题的关键。在基于锚的探测器中,定义正的策略主要是通过测量锚和标签框之间的IoU,如果锚点和标签框的最大IoU大于临界值0.5,则该锚点将被设置为正,称为Max-IoU匹配。

    在MiMo编码器中,考虑到分治机制,Max-IoU匹配使每个尺度的地面真实框能够生成足够数量的正向锚。然而,当采用SiSo编码器时,锚的数量大幅减少,导致锚稀疏。在使用Max-IoU匹配时,大标签框比小标签框产生更多的正锚,这导致正锚的不平衡问题,如下图所示。

    真实标签

    为了解决正锚的不平衡问题,作者提出了统一匹配策略:采用距离最近的锚作为每个标签框的正锚,这确保了所有的标签框都可以统一匹配相同数量的正锚,而不管它们的大小。正样本的平衡确保所有的标签框都参与训练并做出平等的贡献。此外,在Max-IoU匹配之后,均匀匹配中作者设置了IoU阈值,忽略了大IoU(>0.7)负锚点和小IoU(<0.15)正锚点。

    展开全文
  • 【CVPR 2020】Point-GNN (开源)通过图神经网络实现3d目标检测论文解读 文章目录【CVPR 2020】Point-GNN (开源)通过图神经网络实现3d目标检测论文解读摘要介绍相关工作点云数据规则化处理点云直接处理图处理点云...

    【CVPR 2020】Point-GNN (开源)通过图神经网络实现3d目标检测论文解读


    注:摘要、介绍、相关工作仅仅为翻译,帮助读者理解目前3D目标检测的方法。其他部分为解读内容

    摘要

    在本文中,我们提出了一个图神经网络来从激光雷达点云检测目标。对这个目标,我们将点云有效地编码到一个固定半径的近邻图中。我们设计了一个图神经网络,并称为点Point GNN,来预测类别和图中每个顶点所属的对象的形状。在PointGNN里,我们提出了一个自动配准的机制来保证平移不变性(reduce translation variance),并设计一个框合并和打分操作,以精确结合多个顶点的检测结果。我们在KITTI数据集上做的实验结果表明,该方法(仅使点云)达到了领先水平,精确度甚至可以超过基于融合的算法。我们的结果证明了利用图神经网络作为一种新的三维目标检测方法的潜力。
    代码在这里https://github.com/WeijingShi/Point-GNN

    介绍

    理解3D环境对机器人感知至关重要。三维点云是一种广泛应用于三维传感器(如激光雷达)的数据格式。从点云中准确地检测目标对于自动驾驶等应用来说是至关重要的。
    卷积神经网络用来检测图像中的目标依赖于卷积运算。虽然卷积运算是有效的,但它需要一个规则的网格输入(基于欧式距离)。与图像不同,点云通常是稀疏的且不均匀。把点云放在规则网格会导致每个cell中点的数目不均匀。对这些网格进行相同的卷积操作,可能会导致拥挤网格中的信息丢失或者空网格浪费计算。
    最近在神经网络方面的突破允许以无序的点集作为输入。此类研究利用这种类型的神经网络来提取点云特征,而不需要将点云映射到网格。但是,它们通常需要迭代的对点进行取样和分组(sample&group),以得到点集表示。在大型点云上的重复分组和采样计算代价非常昂贵。最近的三维检测方法通常采用混合方法在不同的阶段使用网格和点集表示。虽然它们展现一些较好的结果,但这种混合策略可能会受到两种表现的缺点的影响。
    在本文中,我们提出使用图作为一个点云的紧凑表示,并设计一个称为PointGNN的图神经网络来检测对象。**我们把点作为图顶点来编码点云。图的边将位于固定半径内的邻域点连接起来,使得特征信息可以在邻域之间流动。**这样的图表示可以直接适应点云的结构,而不需要使它具有规则性。图神经网络在每一层都重复使用图的边,避免了对点的重复分组和采样。
    研究探讨了利用图神经网络对点云进行分类和语义分割。然而,利用图神经网络在点云中进行三维目标检测的研究很少。我们的工作证明了在点云中使用GNN进行高精度目标检测的可行性。
    我们提出的图神经网络PointGNN以点图作为输入。它输出每个顶点所属的对象的类别和边界框。PointGNN是一种单阶段检测方法,可以在一个场景中检测多个目标。为了保证图神经网络中的平移不变性,我们引入了一种自动配准机制,该机制允许点根据其特征对坐标进行配准。我们进一步设计了一个框合并和打分操作,以精确的从多个定点结合得到检测结果。
    我们在KITTI的benchmark上对所提出的方法进行了评估。在KITTI测试中,Point GNN单独使用点云实现了最先进的精度,甚至超过了传感器融合方法。我们的Point GNN显示了一种利用图神经网络的新型三维目标检测方法的潜力,可以作为未来研究的有力基础。我们对点GNN中各组成部分的有效性进行了广泛的消融研究。
    本文的贡献:

    1. 提出了新的点云目标检测方法,利用图神经网络。
    2. 设计了PointGNN,一个有自动配准机制的在单帧检测多个目标的图神经网络。
    3. 在KITTI benchmark的3D目标检测模块sota(现在不是了),深入分析了各部分的有效性。

    相关工作

    在这里插入图片描述

    点云数据规则化处理

    最近的许多研究将点云转换为规则网格,以利用卷积神经网络。[20]将点云投射到2D鸟瞰(BEV)图像上,并使用2D CNN进行对象检测。[4]将点云投射到BEV图像和FV图像上。由于图像分辨率的限制,这种投影会产生量化误差。有些方法把点云保留在三维坐标。[23]把点用3d体素表示并用3d卷积来目标检测。当体素的分辨率增大时,3D CNN的计算量也随之增大,但由于点的稀疏性,许多体素是空的。稀疏卷积[19]等优化降低了计算成本。将点云转换为2D/3D网格会遇到点的规则分布与网格的规则结构不匹配的问题。

    点云直接处理

    在PointNet[3]和DeepSet[22]等点集上的深度学习技术表明,神经网络可以直接从无序的集合中提取特征。在这种方法中,每一个点都经过多层感知器(MLP)处理以获得点特征向量。通过平均或最大池化函数将这些功能聚合起来,形成此点集一个全局的特征向量。[14]进一步提出了点特征的层次聚合,并通过对某些点的采样来生成点的局部子集。然后将这些子集的特征再次group到集合中,以进行进一步的特征提取。许多三维目标检测方法利用这种神经网络来处理点云,而不需要将点云映射到网格。然而,在大尺度上对点的采样和分组会增加额外的计算成本。大多数的目标检测研究只使用这个网络作为框架的一部分。
    [13]通过图片生成提案,并使用[14]来从背景中分割属于目标的点,来预测3d bbox。[16]用[14]作为backbone生成框提案,然后用第二阶段来优化框。混合方法如[23 19 10 21]使用[3]从局部点集提取特征,并将特征放在规则网格中进行卷积操作。尽管它们将点云的不规则性降低了一定程度,它们仍然受到规则网格和整体点云结构之间匹配的影响。

    图处理点云

    图论神经网络的研究[18]试图将神经网络推广到图的表示。GNN迭代的更新顶点特征,通过聚合边沿特征。尽管集合模式有时类似于基于点集的深度学习,GNN允许沿边缘确定更复杂的特性。它通常不需要重复采样和分组顶点。在计算机视觉领域,有几种方法将点云表示为图。[15]使用递归GNN对RGBD数据进行语义分割。[9]将点云划分为简单的几何形状,并将它们链接到图中进行语义分割。[2 17]研究使用GNN对点云进行分类。迄今为止,很少有研究探讨设计一个图神经网络用于目标检测,这需要对目标形状进行显式预测。我们的工作与以前的工作不同,我们设计了一个用于对象检测的GNN。与将点云转换为规则网格(如图像或体素)不同,我们使用图表示来保留点云的不规则性。与重复采样并将点分组的技术不同,我们只构建一次图。该算法通过迭代更新同一图上的顶点特征来提取点云的特征。我们的工作是一种1-stage检测方法,不需要第二阶段的优化如[4 16 21 11 13]。

    Point GNN在点云数据目标检测

    在这里插入图片描述

    关注点:从论文的题目可以直接看出,该论文的亮点为通过图神经网络进行目标检测的分割。

    1. 基于此,小编关心的重点则在与网络如何构建点与点之间的边关系
    2. 网络的迭代的方式。

    构建图

    下采样

    我们都知道且明白–车前目标检测场景大约包含有数万个点。如果不做任何处理直接将这么庞大的点云数据直接输入场景中,以目前显卡的计算能力来讲是非常困难的,且实用性不高。**目前现存的网络都会使用降采样的方法来从原始点云场景中提取一部分点,并对其进行目标检测。在Point GNN网络中同样如此。

    在这里插入图片描述

    网络是用voxel downsample对原始点云进行下采样。体素采样是一种均匀采样,但是其计算量是远远大于一般采样算法的。fps最远点采样可以看做是一种近似均匀的采样方法,并且相对于体素采样的方法计算量减少很多。这一点是小编看这篇论文很疑惑的,文中并没有阐述voxel downsample的任何对网络益处,在原本网络计算量如此高的情况下,任然使用如此高的计算量的采样方法,有点让人想不通。

    找寻周围临近点,并将编码临近点的信息为Si

    在这里插入图片描述
    文中使用一种单元列表的方法找到中心点周围的临近点,其计算复杂度为O(cN),c为在半径r内临近点的最大数量。这种方法真的没有听过,是否说这种方法是基于体素采样的基础上,使得每个点的算法复杂度均为c,N个点的算法总复杂度为cN,这点我觉得可能需要去看代码才能够明确知道。
    Si为一个K为向量,初始化的公式按照论文中的文字阐述,小编自己编写的应该如下,第i个点:

    在这里插入图片描述

    最终N个点都有一个K维的特征向量Si,到此则完成了图的构建。G = (P, E), P=(pi, Si)

    在这里插入图片描述

    Point GNN主体框架

    先来根据论文的主线索,讲讲传统图神经网络—>点云图神经网络

    1、传统的图神经网络:

    在这里插入图片描述

    t表示第几次迭代,e表示边的特征,v表示顶点的特征。f(.)表示生成两个顶点之间边的关系,p(.)生成中心点与所有邻近点之间的边关系,g(.)加入第t次迭代改中心点的特征后,生成第t+1次迭代的顶点特征。

    2、点云图神经网络:

    在这里插入图片描述
    根据传统的图神经网络经过细微的改变之后所得,也没啥差别,就是一种简单的修订。画个简单的示意图来理解一下这个公式:

    在这里插入图片描述

    加入数据增强后的公式

    在这里插入图片描述

    ∆x 就是通过计算边的状态值所得的坐标位移差。

    **论文中给的数据增强有四个:整个点云场景的旋转、整个点云场景基于x轴的翻转、box和其内部的点加上外部10%的点旋转、通过体素下采样造成点的抖动。**因为有这些的数据增强,所以增加了∆x,当然你也可以不用。

    具体的公式:

    在这里插入图片描述

    这就没什么好解释了,上下两个公式放在一起对比一下就看得出来具体的对应关系。

    讲完所有内部结构后,就看看整体的框架内容:图中显示的是一次迭代的内容,安装实验细节阐述,T=3

    在这里插入图片描述

    对照公式看图,应该很简单的看出来,看不出来对应关系,留言吧。没有手写笔画图实在是很麻烦。

    框的合并以及打分

    在这里插入图片描述

    文中应该是对每个点生存一个框,但我好像没找到对应的字眼。那就找到的时候在回来补。但是下采样后应该还是有上万个点或者说接近一万,那么对每个点都要生成框就会造成大量的相似框。**为了更好的合并,文中提出一种合并框的方法。**同时也给出该方法的设计的原因: 部分遮挡的物体可以有一个很强的线索来指示物体的类型,但缺乏足够的形状信息,分类的分数不能够总是正确对应着框的质量,所以作者认为要加上遮挡的因素。

    合并框的方法通常为NMS,文中作者改进了这一方法,绿色为作者改进的部分。

    在这里插入图片描述
    median: 具体的函数内容作者没有给出来,从文中和代码的意思推断大概是从这一些重叠框中,选择中间位置和尺寸的重叠框。感觉是所有宽的参数的平均值所构成的框。

    occlusion: 框内物体体积 / 框的体积, 是一个0~1的比率。

    在这里插入图片描述
    输出: M是合并的后所得框,Z是对应框的分数 。分数是中间框与其他框的IOU的和值,再加上这个和值乘遮挡值为分数。(匪夷所思,前所未见。文中都没详细解释为啥这呢做,一句话带过。。。)

    Loss

    类别的loss:
    在这里插入图片描述

    两个类别:背景或所关心的物体。y真实值的标签,p预测的标签。M为预测改点预测的可能性有几种。

    box的loss: 该loss与通常用的loss有所不同

    在这里插入图片描述

    x、y、z、l、h、w、角度为预测的框的参数,xm、ym、zm、lm、hm、wm、角度m为文中给的超参数。

    xu, yu,zu为预测该预测框的顶点。

    什么时候才计算loss呢?即兴趣点是什么: 预测该预测框的顶点在预测框内

    在这里插入图片描述

    **总loss: **

    在这里插入图片描述

    Lreg为L1正则化loss,在每个一个MLP后面加上L1正则化,L1 loss计算这些MLP的权重和,以防止过拟合。

    实验

    3D检测的精度:
    在这里插入图片描述

    BEV检测的精度:
    在这里插入图片描述

    精度细节什么的就各位自己去看吧,看不懂的留言探讨。

    个人总结(优点太多讲不完,只谈一些自认为的不足)

    1、不得不说这篇论文给了我们一个很好的思路从点与点之间的关系出发进行目标检测。但我个人觉得这种临近点的特征提取得到局部特征来构成边有的信息有点过于少。

    2、一阶段的网络呢他的优势就是速度快,但是这篇论文就优点失去这一相对于二阶段网络的优势。没有当初这篇文章当时在kitti登顶的截图,就随意看看现在的截图吧。

    些自认为的不足)

    1、不得不说这篇论文给了我们一个很好的思路从点与点之间的关系出发进行目标检测。但我个人觉得这种临近点的特征提取得到局部特征来构成边有的信息有点过于少。

    2、一阶段的网络呢他的优势就是速度快,但是这篇论文就优点失去这一相对于二阶段网络的优势。没有当初这篇文章当时在kitti登顶的截图,就随意看看现在的截图吧。
    在这里插入图片描述

    展开全文
  • FCOS目标检测论文各种细节解读

    千次阅读 多人点赞 2020-11-30 22:20:28
    1. FCOS(Fully Convolutional One-Stage Object Detection) ...先要明确的知道,FCOS是一个基于FCN、一阶段(one stage)、anchor free、proposal free、参考语义分割思想 实现的逐像素目标检测的模型。 ...

    写在博客的最最最前面,我不得不说,本来我是不想写FCOS的,因为确实网上很多博客都有在讲,而且论文整体据说比较好理解,但是我发现我看了很多篇博客都一模一样,而且吧,他们还不讲细节,就比如为啥引入FPN之后模糊样本就少了?为什么引入 s_{i} (详细见章节7)?还有就是他们一直在说FCOS共享了head,论文原文证据(原文也只说了共享head)和代码都没有。。。然后你看FCOS论文的模型图你可能还想象不到P3~P7用的是同一个head,只不过s_{i} 不一样。对于“神”来说,可能一点就通,但我是凡人啊!所以啊,我是真的没办法。。只能看看代码,看看论文写了这篇博客。愁人。。。零零散散用时1周,如果这篇博客有什么不对,请你们一定指出来,我们一起讨论下!还有这篇博客有什么没讲到你想知道的评论区见吧,因为我写博客本来就奔着细节去的,那种大体一看就懂的一般不会写。

    FCOS(Fully Convolutional One-Stage Object Detection )

    论文地址https://arxiv.org/abs/1904.01355     代码地址https://github.com/tianzhi0549/FCOS/

    目录

    1. Anchor-based 方法的缺点

    2. FCOS模型结构

    3. 论文中一些比较重要的定义

    4. FPN结构及作用

    5. Center-ness layer

    6. 损失函数

    7. 补充一些细节

    8. 实验结果与个人的一点心得


    先要明确的知道,FCOS是一个基于FCN(全卷积网络用于目标检测)、一阶段(one stage)、anchor free、proposal free、参考语义分割思想 实现的逐像素目标检测的模型。

    简要介绍下FCOS几个核心点:

    (1)FCOS方法借鉴了FCN的思想,对 feature map 上每个特征点做回归操作,预测四个值  (l, r, t, d), 分别代表特征点到Ground Truth Bounding box上、下、左、右边界的距离。

    (2)特征点映射会原图后对应多个GT Bounding box,无法准确判断原图像素所属类别,因此模型引入 FPN 结构,利用不同的层来处理不同尺寸的目标框。

    (3)远离目标中心点可能会产生劣质预测结果,为了增强中心点选取的准确性,模型引入了Center-ness layer

    (4)损失函数由三个部分构成:分类损失focal loss;回归损失iou loss;center-ness损失 BCE。

    1. Anchor-based 方法的缺点

    在前些时候主流的目标检测论文研究大多都是anchor-base,我们熟知的就有SSD、YOLOV2、YOLOV3、Faster-R-CNN、Mask-R-CNN(啥都能做。。),而且准确率最高的大多都是这类anchor-base的模型。

    但是anchor-base也有不少缺陷:

    • anchor-base模型的检测性能一定程度上依赖于anchor的设计,anchor的基础尺寸、长宽比、以及每一个特征点对应的anchor数目等。比如Faster提出的基准anchor大小16,3种倍数[8, 16, 32] 以及三种比例,共9种anchor。
    • 设定好anchor了只能说是匹配到大部分目标,对于那些形变较大的目标检测起来还是比较困难,尤其是小目标(小目标识别已经是一个研究方向了)。同时这也一定程度上限制了模型的泛化能力。
    • 为了取得较好的召回率(将负例识别为正例的概率越小,Recall越大),那就需要为每个特征点安排更密集的anchor,假如我们为了性能同时考虑形如FPN这样的多尺度结构,在前向推演以及NMS等操作时,显存以及CPU消耗很大。
    • 在这些放置的更密集的anchor中,大多数anchor属于负样本,这样也造成了正负样本之间的不均衡。(Faster好像各选128 positive / negtive 作为训练anchor,不过肯定不是随机挑选的)。

    这里讲一些我在实际论文和项目中的感觉啊,基于anchor-base的模型就单说准确率来说已经很高了,但是相对的FPS会低一些,可是!!现实中的项目包括各种制造厂、车载设备、道路设备最终都是需要集成到板端的,现在你搞了密集anchor,在前向推演以及NMS等操作耗时太长,必然不能满足需求。从研究论文角度来讲,anchor-base的门槛已经很高了。。所以大家都开始转战anchor-free,而且还取得了不错的成效,有些想法很棒。

    2. FCOS模型结构

    上图就是FCOS的模型结构图,可以看到整体还是很传统的Backbone + Feature Pyramid Net + head (包括分类分支、center-ness分支、回归分支(回归预测距离))。

    3. 论文中一些比较重要的定义

    (1)第 i 个 GT Bounding box定义为:B_{i} = ({x_{0}}^{(i)}, {y_{0}}^{(i)}, {x_{1}}^{(i)}, {y_{1}}^{(i)}}, c^{(i)}}),其中({x_{0}}^{(i)}, {y_{0}}^{(i)})({x_{1}}^{(i)}, {y_{1}}^{(i)})表示当前Bounding box 左上角以及右下角的坐标。

    (2)模型回归分支预测的是当前点(x, y)到GT Bounding box边界的距离(l, r, t, d),在计算损失函数时候与之对应的真实标签定义为:(l^{*}, r^{*}, t^{*}, d^{*}),值如下计算:

       

     

    (3)每一个feature map上的特征点都是一个样本,但是在回归之前要映射回原图进行正负样本的判断,映射回原图后的点如果在某一个GT Bounding box内,则对应的特征点是正样本,类别就是Bounding box内目标的类别;否则,负样本。

    (4)将feature map上的特征点映射回原图:需要按照 s(下采样总倍数,因为用了FPN,每一个特征图下采样倍数不一样)将特征点映射回原图,现在假定特征图上点(x, y),对应原图位置(x^{'}, y^{'}),其中(x^{'}, y^{'}) = (floor(\frac{s}{2}) + xs, floor(\frac{s}{2}) + ys),floor表示下取整。

    4. FPN结构及作用

     本文将 feature map 上每一个特征点作为样本,当(x^{'}, y^{'})落在多个GT Bounding box内,论文称这样的特征点为 "模糊样本"(ambiguous sample),那么模糊样本应该回归的边界框对应哪个GT Bounding box?

    本文是这样抉择的:(1)引入FPN结构实现多级预测(2)在多级预测筛选后如果某一个特征点还是匹配多个GT Bounding box,这种情况简单的选择面积更小的GT Bounding box作为该特征点的回归目标。

    当然模糊样本的出现,还是会干扰当前像素属于哪一类的判断。

    If a location falls into multiple bounding boxes, it is considered as an ambiguous sample. We simply choose the bounding box with minimal area as its regression target.

    本文通过多层级feature map的预测(引入FPN,{P3,P4,P5,P6,P7})来解决模糊样本的问题,说实话这一块其实不是很好懂,我最开始就很疑惑引入了多层级feature map,再把每一级feature map的特征点映射回原图,最后回归岂不是增加了冲突的次数以及计算量?

    但是后来仔细看了论文以及查看了很多博客之后,发现FCOS其实是使用不同层级的 feature map 检测不同尺寸的目标(如果是anchor-base的话,这一块难道不就是不同层级的feature map设置不同大小的anchor尺寸吗?),为了实现这样的需求就需要引入一个阈值,该阈值限制不同层级特征回归预测一定范围内尺寸的目标。

    Following FPN [14], we detect different sizes of objects on different levels of feature maps.

    不同于anchor-base的模型,在不同层级的 feature map上应用不同尺寸的anchor,FCOS选择设置阈值限制每一层feature map的回归范围。具体操作:首先计算出不同层级feature map上每个特征点对应的回归目标(l^{*}, r^{*}, t^{*}, d^{*}) (距离是基于原图计算的),

    如果特征点满足{\color{Red} max(l^{*}, r^{*}, t^{*}, d^{*}) > m_{i}} 或者 {\color{Red} max(l^{*}, r^{*}, t^{*}, d^{*}) < m_{i-1}},则将特征点认定为负样本,没有回归的意义,其中 m_{i} 表示第 i 层 feature map 需要回归的最大距离(本文设置 m_{2}, m_{3}, m_{4}, m_{5}, m_{6}, m_{7} = 0, 64, 128, 256, 512, \infty),因为具有不同大小的对象被分配到不同的特征级别,而大多数重叠发生在大小差异较为明显的对象之间。补充一下:P3回归的范围就是[0, 64],P4回归的范围就是[64, 128]。一定要注意:判定某一层级特征点是正样本还是负样本,本质上是依靠的是特征点映射回原图后的像素点距离所述GT Bounding box边框的真实距离

    Since objects with different sizes are assigned to different feature levels and most overlapping happens between objects with considerably different sizes           #  大多数重叠发生在大小差异较为明显的对象之间

    补充:看到这里应该还有很多小伙伴不明白为啥FPN就能减少模糊样本了,我也是刚想明白,其实是这样的,以P3举例,P3里面所有的特征点映射回原图后,原图上对应点可能对应很多个GT Bounding box,但是我们现在加了限制,要求这些个点的归属只能是那些距离点小于64像素的Bounding box。

    看图,加入P3上的某一个特征点映射回了原图(红色点A),A在两个GT Bounding box里面,这里就分两种情况了:

    (1)假定原图(下图)一个格子表示16px,A距离紫色Bounding box边界的最大距离为48(3 * 16)px,A距离绿色Bounding box边界的最大距离为 90(5 * 16)px,那么根据阈值,我们认为A属于紫色Bounding box,回归对应的GT是紫色框;当然如果没有紫色框,那么A将归于负样本,因为没有GT Bounding box收留他(满足{\color{Red} max(l^{*}, r^{*}, t^{*}, d^{*}) > m_{i}}  {\color{Red} max(l^{*}, r^{*}, t^{*}, d^{*}) < m_{i-1}} 就归于负样本)

    (2)如果原图(下图)一个格子表示8px,那么A距离紫色Bounding box边界的最大距离为24px,A距离绿色Bounding box边界的最大距离为40px,此时A距离不同box的最大距离都符合要求(0~64px),那么只能选择面积更小的紫色GT Bounding box作为A的回归目标

    5. Center-ness layer

    在引入FPN结构实现多层级feature map预测后,在性能方面 FCOS 仍与 anchor-base 的模型存在一定差距。这是由于距离目标中心较远的位置预测出大量低质量的Bounding box造成的,简单点说就是某一个层级的特征点映射到原图上的点位于真实GT Bounding box的边缘或者位于距离box目标中心较远的位置,因此模型在学习和预测的时候可能认为这个点不属于它本该对应的目标,但这样造成的结果就是本该回归目标是某一个GT Bounding box的特征点预测出了一个新的box,而这个box没有特别大的意义(并不完全正确,也可以这么理解,本该归类为某一个目标的特征点错误预测成了其它类)。

    解决这个问题,核心在于让模型学习到“中心度”,也可以理解成哪些点才是目标最可能的中心点(反向告诉某些特征点,它不是中心点,预测的box没有特别大的意义,这样就抑制了低质量box的产生)。

    原文是这么说的:The center-ness depicts the normalized distance from the location to the center of the object that the location is responsible for

    中心度描绘从该位置到该位置负责的目标的真实中心的标准化(量化)距离。

    那么现在的问题变成了如何量化/标准化当前点到负责它的目标的中心的距离

    很容易想到目标中心点对应的值应该 = 1,距离中心点越远,对应center-ness的值想当然应该越来越小并趋近于0。并且既然还是“学习”,那就必定有真实值标签(GT),该真实值标签计算方法如下:

    当 feature map上的特征点映射回原图后,根据章节4中的判断得到对应的GT Bounding box以及距离该box边界的距离(l^{*}, r^{*}, t^{*}, d^{*}),直接计算就能得到该特征点对应的centerness值。

    这部分使用BCE损失(二值交叉熵)。

    注意:我个人认为这个部分核心作用还是在推理(测试)这个部分,对于FPN网络结构的每一层特征最终输出 3 部分内容:ClassificationRegression 和 Center-ness

    模型最终的目的是输出一组置信度高的box和类别,因此后续使用NMS进行筛选,我们知道NMS是需要一组置信度得分的,那么这个置信度得分如何计算那?是的。。就是模型的输出的 Final置信度 = (类别概率)* (对应的center-ness),根据公式我们可以发现 center-ness 可以看做是一个注意力机制(加权),让模型更加关注那些距离真实目标中心点近的预测box,即使距离中心点远的的点 类别概率得分很高,因为center-ness的存在也能抑制该点的置信度,仍会被NMS筛除。

    6. 损失函数

    这部分比较好理解,很传统,根据上上上上网络结构图可知,针对某一个层级的 feature map,head的输出有三个部分:classification(H * W * C)、regression(H * W * 4)、center-ness(H * W * 1),其中C是类别总数,H * W是特征图尺寸。

    先上图和公式:

    虽然很传统但是还是有所区别

    分类损失:舍弃了softmax,改为对head输出的classification(H * W * C)每一个通道(每一个通道代表一种类别)分别使用sigmoid函数,然后使用 Focal loss。这样做的好处,在我的理解中是为了保留类别之间的关联特性

    回归损失:IOU Loss,仅对那些有意义的特征点进行回归计算。有意义是什么意思那?其实就是先将特征点映射回原图,看看原图上对应的点在不在某一个GT Bounding box里面,不在就是负样本,也就是c_{x, y}^{*} = 0;如果在一个或多个box里面,则根据FPN不同层级feature map 能够回归的范围阈值筛除不符合条件的box,然后继续重复上述步骤判断该特征点是否有意义(c_{x, y}^{*} > 0)。

    center-ness的损失:BCE损失(二值交叉熵),我很奇怪,这部分并没有体现在上面那个公式里面,不过肯定是有的。

    7. 补充一些细节

    在引入FPN的同时还引入一些改变,仔细看看下一段英文引用,我简单翻译下,根据论文[14]、[15](FPN、Focal loss),FCOS在不同的特征层级之间共享head(共享的是结构/权重共享,代码中详看 cls_tower和bbox_tower )。但是不同的特征层级需要回归不同的大小范围(例如,P3的大小范围是[0,64],P4的大小范围是[64,128],因此对于不同的特征层级使用相同的head是不合理的。因此,论文中不再使用标准的exp(x),而是使用exp(s_{i} * x),其中可训练标量 s_{i} 被用来自动调整不同层级特征的指数函数的基数,从而稍微提高了检测性能(在下面代码中si首次出现在__init__()函数的最后)。推荐你们仔细看看下面的代码和注释,注释主题来自于这篇FCOS代码解析,其中部分是我补充和修改的。

    Finally, following [14, 15], we share the heads between different feature levels, not only making the detector parameter-efficient but also improving the detection performance. However, we observe that different feature levels are required to regress different size range (e.g., the size range is [0, 64] for P3 and [64, 128] for P4), and therefore it is not reasonable to make use of identical heads for different feature levels. As a result, instead of using the standard exp(x), we make use of exp(six) with a trainable scalar si to automatically adjust the base of the exponential function for feature level Pi , which slightly improves the detection performance.

    class FCOSHead(torch.nn.Module):
        def __init__(self, cfg, in_channels):
            """
            Arguments:
                in_channels (int): number of channels of the input feature
                fpn每层的输出通道数,这里也许真的是为了共享权重所以输出通道数目都一样,如256
            """
            super(FCOSHead, self).__init__()
            # TODO: Implement the sigmoid version first.
            num_classes = cfg.MODEL.FCOS.NUM_CLASSES - 1              # eg:80
            self.fpn_strides = cfg.MODEL.FCOS.FPN_STRIDES             # eg:[8, 16, 32, 64, 128]
            self.norm_reg_targets = cfg.MODEL.FCOS.NORM_REG_TARGETS   # eg:False 直接回归还是归一化后回归
            self.centerness_on_reg = cfg.MODEL.FCOS.CENTERNESS_ON_REG # eg:False centerness和哪个分支共用特征
            self.use_dcn_in_tower = cfg.MODEL.FCOS.USE_DCN_IN_TOWER   # eg:False 可形变卷积
    
            cls_tower = []
            bbox_tower = []
            # eg: cfg.MODEL.FCOS.NUM_CONVS=4头部共享特征时(也称作tower)有4层卷积层
            for i in range(cfg.MODEL.FCOS.NUM_CONVS):
                if self.use_dcn_in_tower and \
                        i == cfg.MODEL.FCOS.NUM_CONVS - 1:
                    conv_func = DFConv2d
                else:
                    conv_func = nn.Conv2d
    
                # cls_tower和bbox_tower都是4层的256通道的3×3的卷积层,后加一些GN和Relu
                # !注意这里也是共享的部分,对应forward看,FPN输出的每一层级特征都经过同样的cls_tower和bbox_tower
                cls_tower.append(
                    conv_func(
                        in_channels,
                        in_channels,
                        kernel_size=3,
                        stride=1,
                        padding=1,
                        bias=True
                    )
                )
                cls_tower.append(nn.GroupNorm(32, in_channels))
                cls_tower.append(nn.ReLU())
                bbox_tower.append(
                    conv_func(
                        in_channels,
                        in_channels,
                        kernel_size=3,
                        stride=1,
                        padding=1,
                        bias=True
                    )
                )
                bbox_tower.append(nn.GroupNorm(32, in_channels))
                bbox_tower.append(nn.ReLU())
    
            self.add_module('cls_tower', nn.Sequential(*cls_tower))
            self.add_module('bbox_tower', nn.Sequential(*bbox_tower))
            
            # 下面连续 3 个部分也就是head的输出,结果分析和3,4章节分析的一样
            # cls_logits就是网络的直接分类输出结果,shape:[H×W×C]
            self.cls_logits = nn.Conv2d(
                in_channels, num_classes, kernel_size=3, stride=1,
                padding=1
            )
            # bbox_pred就是网络的回归分支输出结果,shape:[H×W×4]
            self.bbox_pred = nn.Conv2d(
                in_channels, 4, kernel_size=3, stride=1,
                padding=1
            )
            # centerness就是网络抑制低质量框的分支,shape:[H×W×1]
            self.centerness = nn.Conv2d(
                in_channels, 1, kernel_size=3, stride=1,
                padding=1
            )
    
            # initialization 这些层里面的卷积参数都进行初始化
            for modules in [self.cls_tower, self.bbox_tower,
                            self.cls_logits, self.bbox_pred,
                            self.centerness]:
                for l in modules.modules():
                    if isinstance(l, nn.Conv2d):
                        torch.nn.init.normal_(l.weight, std=0.01)
                        torch.nn.init.constant_(l.bias, 0)
    
            # initialize the bias for focal loss 我只知道分类是用focal loss,可能是一种经验trick?
            prior_prob = cfg.MODEL.FCOS.PRIOR_PROB
            bias_value = -math.log((1 - prior_prob) / prior_prob)
            torch.nn.init.constant_(self.cls_logits.bias, bias_value)
    
            # P3-P7共有5层特征FPN,缩放因子,对回归结果进行缩放
            # !!这一部分就算是我们在本章节说的si
            self.scales = nn.ModuleList([Scale(init_value=1.0) for _ in range(5)])  
    
        def forward(self, x):
            logits = []
            bbox_reg = []
            centerness = []
            # x是fpn输出的各层级特征,你会发现每一层级的特征使用同一个cls_tower和bbox_tower,这可能就是论文中说的head共享参数,提升性能吧?
            for l, feature in enumerate(x):
                # 要注意,不图层经过tower之后的特征图大小是不一样的
                cls_tower = self.cls_tower(feature)
                box_tower = self.bbox_tower(feature)
    
                logits.append(self.cls_logits(cls_tower))
                # 根据centerness_on_reg选择对应的tower特征
                if self.centerness_on_reg:
                    centerness.append(self.centerness(box_tower))
                else:
                    centerness.append(self.centerness(cls_tower))
    
                # 通过bbox_pred(box_tower)得到H * W * 4的特征结果,然后再缩放,最终结果是要输入到回归步骤中来预测(l, r, t, d).
                bbox_pred = self.scales[l](self.bbox_pred(box_tower))  # 得到缩放后的bbox_pred
                # 默认False,如果是True,先归一化然后回归
                if self.norm_reg_targets:
                    bbox_pred = F.relu(bbox_pred)
                    if self.training:
                        bbox_reg.append(bbox_pred)
                    else:
                        bbox_reg.append(bbox_pred * self.fpn_strides[l])
                else:
                    # ????有个exp(),很玄学,下面继续讲
                    bbox_reg.append(torch.exp(bbox_pred))
            return logits, bbox_reg, centerness
    

    [14] Tsung-Yi Lin, Piotr Dollar, Ross Girshick, Kaiming He, ´ Bharath Hariharan, and Serge Belongie. Feature pyramid networks for object detection. In Proc. IEEE Conf. Comp. Vis. Patt. Recogn., pages 2117–2125, 2017.

    [15] Tsung-Yi Lin, Priya Goyal, Ross Girshick, Kaiming He, and Piotr Dollar. Focal loss for dense object detection. In ´ Proc. IEEE Conf. Comp. Vis. Patt. Recogn., pages 2980–2988, 2017.

    提一下两个点:

    (1)引入 s_{i}:我看了下大佬的解释,anchor-base的模型预设置了不同尺寸和宽高比的anchor去适应训练集以及测试集中目标的尺寸,所以能够消除尺度不变性的影响,而anchor-free的模型没有设置anchor这一步必然存在尺度不变性问题,因此为了提高性能,模型引入 s_{i} 达到尺度不变性的目标。

    (2)承接代码段落最后那一块,为啥回归部分bbox_reg存在一个exp()函数(其实我也很懵。。),解释在下面。

    Moreover, since the regression targets are always positive, we employ exp(x) to map any real number to (0, + \infty) on the top of the regression branch

    8. 实验结果与个人的一点心得

    简单的看下就得了。。,红色部分展示了同样的backbone,FCOS确实有更好的效果,但是啊,为了进一步提升FCOS的性能,作者引入了更复杂的Backbone,以及各种各样的trick(比如GIOU)还有将center-ness分支并入回归分支这一类的实验,感觉相对于从传统one-stage目标检测模型在速度性能上可能差一些。

    下图就是各种提升AP的trick,但总感觉速度回慢不少。

    下图实验证明了,为传统classification_score加权求center-ness,并将两者相乘作为特征点的新的置信度是有意义的。简单解释一下,如右图所示,新置信度越高,它对应预测出来的box和GT Bounding box的IOU越高,这说明筛选后的预测box质量可以!可以发现新置信度和IOU成正比关系

    总的来说:

    1. FCOS与许多基于FCN的思想是统一的,因此可以轻松引入那些提升性能的trick,例如FPN、GN、可形变卷积等等。
    2. FCOS通过设置了很多巧妙的技巧(FPN,center-ness,各层特征点回归的尺度限制等)实现了proposal free和anchor free,避免了复杂的IOU计算以及训练期间 anchor 和GT Bounding box之间的匹配,但是这些设置可能更适应于某一特定类型的数据,笔者经过试验证明,如果使用一些和COCO或者ImageNet特征分布有差异的数据集来训练,FCOS的普适性就不是很好了。
    3. FCOS可以替代传统 two-stage 模型中的RPN网络,其性能明显优于基于锚点的RPN算法(这一点挺好的。。虽然我没试验过,不过two-stage已经有点慢了,加上FCOS可能都不能在实际场景中应用)。
    4. FCOS可以经过最小的修改便可扩展到其他的视觉任务,包括实例分割、关键点检测。

     

    展开全文
  • 论文中,作者使用蒸馏来训练基于CNN的检测器,不需要ImageNet预训练。 具体来说: 从整个feature map中采样的特征进行模拟,并使用变换层将小网络中的特征映射到大网络的同维上。 在训练小网络时,优化了两个网络...
  • 2020CVPR-目标检测论文解读之FSOD:Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector 数据集参考 1.摘要 传统的目标检测方法通常需要大量的训练数据,而准备这样高质量的训练数据是非常...
  • 文章来源 |极链AI云(性价比最高的共享算力平台,...原文地址 |目标检测论文解读(一):PIoU Loss(官网论坛) PIoU Loss: Towards Accurate Oriented Object Detection in Complex Environments 发表于ECCV202...
  • 大家好,我是小P,今天和大家一起学习目标检测领域的经典文章-RCNN,希望大家支持和喜欢。此外,对“目标检测/模型压缩/语义分割”感兴趣的小伙伴,欢迎加入QQ群 813221712 讨论交流,进群请看群公告! 点击链接...
  • 一文看尽 27 篇 CVPR2021 2D 目标检测论文

    千次阅读 多人点赞 2021-07-14 00:08:28
    点击 机器学习算法与Python学习 ,选择加星标精彩内容不迷路编辑丨极市平台6月25日,CVPR 2021 大会圆满结束,随着 CVPR 2021 最佳论文的出炉,本次大会所接收的论文也...
  • 最新目标检测论文盘点与解读总结

    千次阅读 2019-08-31 08:19:04
    目标检测算法盘点 从RCNN到SSD,这应该是最全的一份目标检测算法盘点 目标检测算法在准确度(AP)和速度(speed)的对比: 论文中的知识点 评价指标AP(mAP) 最完整的检测模型评估指标mAP计算指南(附代码)_慕课...
  • 【经典论文解读】YOLOv4 目标检测

    千次阅读 多人点赞 2021-08-13 13:55:32
    YOLO是一种目标检测方法,它的输入是整张图片,输出是n个物体的检测信息,可以识别出图中的物体的类别和位置。YOLOv4是在YOLOv3算法的基础上增加了很多实用的技巧,使得它的速度与精度都得到了极大的提升。 YOLOv4...
  • 【经典论文解读】YOLO 目标检测

    千次阅读 多人点赞 2021-07-31 15:43:59
    YOLO是一种目标检测方法,它的输入是整张图片,当检测到目标物体时用边界框圈起来,同时给该目标物体一个类别;边界框由中心位置、宽、高等来表示的;它的输出是n个物体的检测信息,每个物体的信息包括:中心位置(x,...
  • 目标检测算法SSD论文解读

    千次阅读 2019-08-15 14:13:27
    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/jy001227801/article/details/80388192 ... 论文题目:SSD: Single ...
  • 目标检测SSD论文解读

    千次阅读 2018-08-23 19:13:40
    目录一. 算法概述二. Default box三. 正负样本四. 网络结构五....nbsp;回到顶部一.... 本文提出的SSD算法是一种直接...针对不同大小的目标检测,传统的做法是先将图像转换成不同大小(图像金字塔),然后分别检测,最后将...
  • YOLO是一种目标检测方法,它的输入是整张图片,输出是n个物体的检测信息,可以识别出图中的物体的类别和位置。YOLOv3相对v2版本,准确度和速度差不多,但对小目标检测更好。 v3版本主要的改进是使用Darknet-53主干...
  • Faster R-CNN在找到“待检测框”,使用了RPN;RPN全称是Region Proposal Network,也可理解为区域生成网络,或区域候选网络;它是用来提取候选框的。RPN特点是耗时少。 Faster R-CNN是“RCNN系列算法”的杰出产物,...
  • 随后生成3D候选区域,把特征和候选区域融合后输出最终的目标检测框。 论文地址:Multi-View 3D Object Detection Network for Autonomous Driving 开源代码:https://github.com/bostondiditeam/MV3D 一、框架...
  • 论文总结 本文实现了一种大场景下的点云语义分割网络,并在SemanticKITTI数据集上实现了1st的结果。其主要通过一种融合的方法来实现。不同于以往的使用基于点,基于体素和基于深度图(Range Image)的方法.但是这些...
  • 3D目标检测论文汇总

    千次阅读 2020-04-15 17:05:33
    一、单目图像下的3D目标检测 1、YOLO3D 2、SSD-6D 3、3D Bounding Box Estimation Using Deep Learning and Geometry 4、GS3D:An Effcient 3D Object Detection Framework for Autonomou...
  • DETR: End-to-End Object Detection with Transformers 论文解读视频转载自:https://www.youtube.com/watch?v...
  •   论文主要针对模型训练中出现的正负样本不均衡问题,根据困难样本挖掘原理,在原有的损失函数中引入调制因子,将背景部分视为简单样本,减小背景损失在置信损失中的占比,使得模型收敛更快速,模型训练更充分,...
  • 它是目前用于目标检测、语义分割、行为识别等方面比较重要的一个部分,对于提高模型性能具有较好的表现。FPN的预测是在不同特征层独立进行的,即:同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些...
  • Faster R-CNN xyang ...关于最新最全的目标检测论文,可以查看awesome-object-detection 《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》 NIPS 2015 arxiv: ...
  • 关于深度学习的计算机视觉中目标检测论文YOLOv1的个人理解
  • 2020年以来出现的一些单目视觉3-D目标检测论文。本文针对部分典型的论文要点进行要点解读,仅供参考。 Towards Generalization Across Depth for Monocular 3D Object Detection arXiv 1912.08035,v3,4,2020 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,084
精华内容 3,633
关键字:

目标检测论文解读

友情链接: ssh_books.rar