【深度学习-目标检测】06 - FPN 论文学习与总结

2023-12-27 06:28

本文主要是介绍【深度学习-目标检测】06 - FPN 论文学习与总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文地址:Feature Pyramid Networks for Object Detection

论文学习

在这里插入图片描述

1. 摘要

  1. 多尺度特征的重要性
    • 论文强调在对象检测任务中,多尺度特征对于处理不同大小的对象至关重要。这些特征有助于编码具有尺度变化的对象。
  2. 现有方法的局限性
    • 传统的多尺度特征提取策略,如使用经典的自上而下和自下而上的特征金字塔网络,存在一定的局限性。这些方法可能导致特征信息的丢失或降级,影响了特征融合的效果。
  3. 特征金字塔网络(FPN)的提出
    • 为了克服这些限制,论文提出了一种新的网络结构,即特征金字塔网络(FPN)。FPN 旨在利用深度卷积网络的多尺度、金字塔形状的特征层次结构,创建具有强大语义信息的特征金字塔。
  4. FPN的设计和优势
    • FPN通过自上而下的路径和横向连接结合低分辨率、语义强的特征与高分辨率、语义弱的特征。这种结构生成了在所有层次上都具有丰富语义的特征金字塔,并且从单一输入图像尺度快速构建。
  5. 应用和性能评估
    • 使用FPN的方法在基础的Faster R-CNN系统中实现了在COCO检测基准测试中的最先进单模型结果,超越了所有现有的单模型方案,包括COCO 2016挑战赛的获胜者。
    • 此外,该方法在GPU上的运行速度为每秒5帧,是一种实用且准确的多尺度对象检测解决方案。

补充:传统特征金字塔 和 特征金字塔网络(FPN)

  1. 传统特征金字塔
    • 构建方法:
      • 通过对原始图像进行多次下采样(例如每次减半)来构建一系列缩小的图像。
    • 特征提取:
      • 在每个尺度上独立提取特征,通常需要对每个缩小的图像分别进行特征提取。
    • 计算成本:
      • 较高,因为需要对每个尺度的图像都进行特征提取。
    • 特征融合:
      • 通常不涉及跨尺度的特征融合,每个尺度的特征独立使用。
    • 应用局限性:
      • 由于计算成本高,难以直接应用于深度学习模型中。
  2. 特征金字塔网络(FPN)
    • 构建方法:
      • 在卷积神经网络(CNN)的基础上构建,利用网络内部的层次结构。
    • 特征提取:
      • 结合了CNN中的底层(高分辨率、低语义)和高层(低分辨率、高语义)特征。
    • 计算成本:
      • 相对较低,因为利用了CNN的特征提取能力,避免了重复的特征计算。
    • 特征融合:
      • 通过自上而下的路径和横向连接实现跨尺度的特征融合。
    • 应用灵活性:
      • 适用于深度学习和对象检测,能够有效处理多尺度信息。

2. 引言

  1. 多尺度对象识别的挑战
    • 在计算机视觉中,识别不同尺度的对象是一个基本挑战。为了解决这个问题,传统上依赖于特征金字塔,这些金字塔是基于图像金字塔构建的(简称为特征化图像金字塔)。
  2. 特征化图像金字塔的作用(传统特征金字塔)
    • 这些金字塔在概念上是尺度不变的,意味着对象的尺度变化可以通过在金字塔中改变其级别来抵消。这使得模型能够通过在不同位置和金字塔层级上扫描来检测不同尺度的对象。
  3. 手工设计特征的时代
    • 在手工设计特征的时代,如DPM(Deformable Parts Model)对象检测器,特征化图像金字塔被广泛使用,并且需要密集的尺度采样(例如,每个八度音阶10个尺度)来获得良好的结果。
  4. 深度卷积网络的兴起
    • 随着深度卷积网络(ConvNets)的发展,手工设计的特征被深度学习特征所取代。ConvNets在表示高级语义方面更加强大,对尺度变化也更加鲁棒,使得从单一输入尺度计算的特征足以进行识别。
  5. 现有方法的局限性
    • 尽管ConvNets对尺度变化有一定的鲁棒性,但为了获得最准确的结果,仍然需要使用多尺度测试,并在特征化图像金字塔上进行。然而,这种方法在推理时间上的显著增加(例如,增加四倍),使其在实际应用中变得不切实际。
  6. 特征金字塔网络(FPN)的提出
    • 为了解决这些限制,论文提出了特征金字塔网络(FPN)。FPN利用深度卷积网络内在的多尺度、金字塔形层次结构,以较小的额外成本构建特征金字塔。
    • FPN通过自上而下的架构和横向连接来构建在所有尺度上都具有高级语义特征图。这种架构在多个应用中显示出作为通用特征提取器的显著改进。
  7. FPN的性能和实用性
    • 在基本的Faster R-CNN系统中使用FPN,作者的方法在COCO检测基准上实现了最先进的单模型结果,超越了所有现有的单模型方案,包括COCO 2016挑战赛的获胜者。
    • 此外,该方法在GPU上的运行速度为每秒6帧,因此是多尺度对象检测的一个实用且准确的解决方案。

3. 相关工作

  1. 手工设计的特征和早期神经网络
    • SIFT特征:最初在尺度空间极值点提取,用于特征点匹配。
    • HOG特征:后来,SIFT特征和HOG特征被密集地计算在整个图像金字塔上。这些HOG和SIFT金字塔被广泛应用于图像分类、对象检测、人体姿态估计等领域。
    • 快速计算特征化图像金字塔:有研究致力于快速计算特征化图像金字塔。例如,Dollár等人展示了通过首先计算在尺度上稀疏采样的金字塔,然后插值缺失层级来快速计算金字塔的方法。
    • 早期的ConvNet应用:在HOG和SIFT之前,早期关于使用卷积神经网络(ConvNets)进行人脸检测的工作,通过在图像金字塔上计算浅层网络来检测不同尺度的面部。
  2. 深度卷积神经网络对象检测器
    • 论文指出,尽管深度卷积网络(ConvNets)在对象检测中取得了显著进步,但在处理不同尺度的对象时,仍然面临挑战。ConvNet计算的特征层次结构具有固有的多尺度、金字塔形状,但由于不同深度导致的大的语义差距,高分辨率的映射具有低级特征,这损害了它们用于对象识别的表征能力。
  3. 单次检测器(SSD)
    • SSD是首次尝试使用ConvNet的金字塔特征层次作为特征化图像金字塔的例子。理想情况下,SSD风格的金字塔将重用在前向传递中计算的不同层的多尺度特征映射。但为了避免使用低级特征,SSD放弃了重用已计算的层,而是从网络的较高层(例如VGG网络的conv4_3)开始构建金字塔,并添加了几个新层。因此,它错过了重用特征层次结构中的高分辨率映射的机会,这对于检测小对象很重要。
  4. FPN的目标
    • 论文的目标是自然地利用ConvNet的金字塔形特征层次结构,同时创建在所有尺度上都具有强语义的特征金字塔。为此,论文依赖于一个结构,该结构通过自上而下的路径和横向连接结合低分辨率、语义强的特征与高分辨率、语义弱的特征。结果是一个在所有层次上都具有丰富语义的特征金字塔,且能够从单一输入图像尺度快速构建。
      在这里插入图片描述

4. 特征金字塔网络(FPN)

  1. FPN的目标
    • FPN的目标是利用卷积神经网络(ConvNet)的金字塔形特征层次结构,这些层次结构在低到高各个层级上都具有语义信息。FPN旨在构建一个在所有层级上都具有高级语义的特征金字塔。
    • FPN是一个通用的网络,主要关注于滑动窗口提议器(如区域提议网络,RPN)和基于区域的检测器(如Fast R-CNN)。FPN也被推广到实例分割提议中。
  2. FPN的输入和输出
    • FPN处理单尺度图像作为输入,并输出在多个层级上大小成比例的特征图,这一过程是完全卷积的。这个过程与背景卷积架构(如ResNet)无关。
  3. FPN的构建
    • FPN的构建涉及自下而上的路径、自上而下的路径和横向连接。
    • 自下而上的路径:这是背景ConvNet的前向计算,它计算了多个尺度的特征图,每个尺度的步长为2。在ResNet中,使用每个阶段的最后一个残差块的输出作为特征图。
    • 自上而下的路径和横向连接:自上而下的路径通过上采样空间粗糙但语义上更强的特征图来模拟更高分辨率的特征。这些特征随后通过横向连接与自下而上路径的特征结合。每个横向连接合并了来自自下而上路径和自上而下路径的相同空间尺寸的特征图。
  4. FPN的特点
    • 自下而上的特征图具有较低级的语义,但由于较少的下采样,其激活更精确地定位。通过结合这些特征,FPN在所有层级上都能提供丰富的语义信息。
    • FPN通过简单的最近邻上采样来增加空间分辨率,并通过额外的卷积层来减少上采样的混叠效应。

在这里插入图片描述

在这里插入图片描述

5. 应用

  1. FPN在RPN中的应用
    • RPN(区域提议网络):RPN是一种滑动窗口的类别不可知的对象检测器。在原始的RPN设计中,一个小型子网络在单尺度的卷积特征图上的密集3x3滑动窗口上进行评估,执行对象/非对象的二元分类和边界框回归。
    • FPN的适配:在FPN中,作者将RPN的单尺度特征图替换为FPN。在特征金字塔的每个层级上附加一个与原始RPN设计相同的头部(3x3卷积和两个1x1卷积)。由于头部在所有金字塔层级的所有位置上密集滑动,因此不需要在特定层级上有多尺度锚点。作者为每个金字塔层级指定单一尺度的锚点。
    • 训练标签分配:训练标签基于锚点与真实边界框之间的交并比(IoU)分配。如果锚点与给定真实框的IoU最高或超过0.7,则分配正标签;如果所有真实框的IoU均低于0.3,则分配负标签。
  2. FPN在Fast R-CNN中的应用
    • Fast R-CNN(区域基础对象检测器):Fast R-CNN使用感兴趣区域(RoI)池化来提取特征。通常在单尺度特征图上执行。
    • FPN的适配:为了在FPN中使用Fast R-CNN,需要将不同尺度的RoI分配到金字塔层级。作者将特征金字塔视为由图像金字塔产生的,并据此调整区域基础检测器在图像金字塔上运行时的分配策略。具体来说,RoI的宽度和高度用于确定其应该映射到的金字塔层级。

6. 拓展:分割建议

  1. FPN在分割建议中的应用
    • FPN不仅适用于对象检测,还可以用于生成分割提议,遵循DeepMask/SharpMask框架。 DeepMask和SharpMask在图像裁剪上训练,用于预测实例分割和对象/非对象得分。在推理时,这些模型以卷积方式运行,以在图像中生成密集的提议。
  2. FPN的适配和实现
    • FPN易于适配以生成掩码提议。作者使用完全卷积的设置进行训练和推理。在特征金字塔的每个层级上,应用一个小型的5x5多层感知器(MLP)来预测14x14的掩码和对象得分。
      受到DeepMask和SharpMask使用图像金字塔中每个八度音阶的两个尺度的启发,作者还使用了一个输入尺寸为7x7的第二个MLP来处理半八度音阶。这两个MLP的作用类似于RPN中的锚点。
  3. 分割提议的结果
    • 基线FPN模型使用单个5x5 MLP达到了43.4的平均召回率(AR)。使用稍大的7x7 MLP,准确率基本保持不变。同时使用两个MLP可以将准确率提高到45.7 AR。将掩码输出尺寸从14x14增加到28x28可以进一步提高AR(尽管更大的尺寸开始降低准确率)。最后,将训练迭代次数加倍可以将AR提高到48.1。
    • 与DeepMask、SharpMask和InstanceFCN等先前的最先进方法相比,FPN在掩码提议生成方面的准确率提高了超过8.3个点的AR。特别是在小对象上,准确率几乎翻倍。
  4. FPN的优势和效率
    • 现有的掩码提议方法基于密集采样的图像金字塔,计算成本高。相比之下,基于FPN的方法显著更快(运行速度为每秒6到7帧)。这些结果表明,FPN是一个通用的特征提取器,可以替代图像金字塔来处理其他多尺度检测问题。

7. 结论

  1. FPN的框架简介
    • 论文提出了一种清晰简单的框架,用于在卷积神经网络(ConvNets)内部构建特征金字塔。这种方法在多个强基线和竞赛获胜者的基础上显示出显著的改进。
  2. FPN的实用性和应用
    • FPN提供了一个实用的解决方案,用于研究和应用特征金字塔,而无需计算图像金字塔。这使得FPN成为处理多尺度问题的有效工具,特别是在对象检测和分割等领域。
  3. 深度ConvNets的表现力和多尺度问题
    • 尽管深度ConvNets具有强大的表征能力,并且对尺度变化具有一定的鲁棒性,但论文强调,使用金字塔表示来显式地处理多尺度问题仍然至关重要。
  4. FPN的优势
    • FPN能够在不牺牲表征能力、速度或内存的情况下,替代传统的特征化图像金字塔。这一点在对象检测和实例分割的应用中尤为突出。
  5. 未来的研究和应用
    • 论文认为,FPN的这些进步将促进未来的研究和应用,并为处理多尺度问题提供了新的视角和方法。

这篇论文《Feature Pyramid Networks for Object Detection》的主要创新点和贡献可以总结如下:

  1. 特征金字塔网络(FPN)的提出
    • 论文提出了FPN,这是一种新型的网络架构,用于在卷积神经网络(ConvNets)内部构建特征金字塔。FPN有效地利用了ConvNets的多尺度、金字塔形特征层次结构。
  2. 自上而下的架构与横向连接
    • FPN采用了独特的自上而下的架构和横向连接,这种结构能够将高层的语义强特征与低层的高分辨率特征有效结合,从而在所有尺度上都生成具有丰富语义信息的特征图。
  3. 单尺度输入图像的多尺度特征提取
    • 与传统的多尺度特征提取(如图像金字塔)不同,FPN能够从单一尺度的输入图像中提取多尺度特征,显著提高了计算效率。
  4. 提高对象检测性能
    • 在标准对象检测框架(如Faster R-CNN)中应用FPN,显著提高了对象检测的准确率,特别是在处理不同尺度对象时。
  5. 实用性和效率
    • FPN提供了一种实用且高效的方法来处理多尺度问题,无需依赖于计算成本高昂的图像金字塔,同时保持了高速度和准确性。
  6. 通用性和灵活性
    • FPN不仅适用于对象检测,还可以扩展到其他应用,如实例分割,展示了其作为通用特征提取器的潜力。
  7. 推动深度学习和计算机视觉研究
    • FPN的提出为深度学习和计算机视觉领域中的多尺度问题提供了新的解决方案,有助于推动相关研究和技术的发展。

FPN

FPN的主要工作流程如下:

  1. 输入图像处理
    • 输入单尺度图像到网络。
  2. 自下而上的路径
    • 利用卷积神经网络(如ResNet)进行前向计算。
    • 生成多个尺度的特征图,每个尺度的步长为2。
    • 选择每个阶段的最后一层作为参考特征图。
  3. 构建顶层特征图
    • 在最高层(如ResNet的conv5)上附加一个1x1卷积层,生成最粗糙的特征图。
  4. 自上而下的路径和横向连接
    • 从顶层开始,逐层向下进行特征融合。
    • 每一层的特征图通过上采样(放大2倍)与下一层的特征图合并。
    • 合并时,使用1x1卷积调整通道数,并通过元素相加的方式融合特征。
  5. 生成最终特征图
    • 在每个合并后的特征图上附加一个3x3卷积层,以减少上采样的混叠效应。
    • 生成一系列不同尺度但语义丰富的特征图。
  6. 对象检测或分割
    • 在特征金字塔的每个层级上进行对象检测或分割任务。
    • 对于对象检测,可以使用RPN(Region Proposal Network)在每个层级上生成提议。
    • 对于分割,可以在每个层级上生成分割掩码。

以YOLOv8中的FPN为例

在这里插入图片描述
红色是YOLOv8的主干特征提取网络,用于特征提取,生成特征图。
蓝色是YOLOv8采用的FPN结构,用于特征融合,这也是我们之后重点理解的地方。
绿色是YOLOv8的分类器。

我们可以看到,在主干特征提取网络部分,将三个不同尺度的特征图传递给了蓝色的FPN网络如下:

在这里插入图片描述
feat1、feat2、feat3 分别是三个尺度不同的特征层:

  • feat1:(80,80,256)(H,W,C)
  • feat2:(40,40,512)(H,W,C)
  • feat3:(20,20,1024)(H,W,C)(暂时忽略deep_mul)

首先,我们来看 feat3 和 feat2 特征融合的过程:

  1. feat3 进行上采样,变成(40,40,1024),需要将宽、高变成与feat2一样。
  2. feat3(40,40,1024)与feat2(40,40,512)在通道维度上进行融合(concat)。
  3. feat3 + feat2 (40,40,1024+512)通过CSP(暂时理解为1x1Conv),生成了feat3 和 feat2 特征融合的结果(40,40,512)。
  4. 至此,我们获得的结果,就是融合了feat3和feat2两个特征尺度的融合特征图,这个特征图可以继续向上层feat1进行融合,以相同的方式(首先向上采样成feat1的尺寸,然后在通道维度进行融合,最后使用1x1Conv,得到融合结果)。

以上内容旨在记录自己的学习过程以及复习,如有错误,欢迎批评指正,谢谢阅读。

这篇关于【深度学习-目标检测】06 - FPN 论文学习与总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/542153

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用