18_特征金字塔网络FPN结构详解

1.1 简介

在深度学习领域,尤其是计算机视觉和目标检测任务中,Feature Pyramid Networks (FPN) 是一种革命性的架构设计,它解决了多尺度特征检测和融合的关键问题。FPN最初由何凯明等人在2017年的论文《Feature Pyramid Networks for Object Detection》中提出,自那以后,它成为了许多现代目标检测框架的核心组件。

FPN的核心思想

FPN的核心思想在于构建一个特征金字塔,这个金字塔能够同时利用深度卷积网络中不同层级的特征。传统的卷积网络往往只能在某个固定的特征层级进行预测,这限制了它们对多尺度目标的有效检测。FPN通过引入自顶向下的路径和横向连接,巧妙地融合了高层的语义信息(丰富的类别信息但空间分辨率较低)与底层的空间细节信息(高分辨率但语义信息较少),从而在不同的尺度上都能实现高效且准确的目标定位。

架构特点

  1. 自顶向下的路径:FPN首先将深层(高语义级别但低分辨率)特征图通过上采样(例如双线性插值)逐级上移,使其尺寸与浅层特征图匹配。

  2. 横向连接:在每个上采样后的特征图与其对应的浅层特征图之间添加横向连接,通过1x1卷积来调整通道数,并将两者相加,以此结合深层次的语义信息与浅层次的空间细节信息。

  3. 多尺度预测:在每个融合后的特征图上都设置预测头(例如用于分类和回归的任务头),这样可以在每个层级上都对不同大小的目标进行检测,提高了对小物体检测的准确性。

应用与影响

FPN的提出显著提升了目标检测系统的性能,尤其是在处理不同尺度物体检测方面,减少了小物体的漏检率,同时保持了对大物体的高检测精度。它的有效性不仅限于目标检测,还被广泛应用于实例分割、语义分割以及其他需要多尺度特征分析的视觉任务中。

总结

FPN通过其创新的特征融合机制,为深度学习中的多尺度目标检测问题提供了一个优雅且高效的解决方案。它不仅提升了检测系统的准确性和效率,还促进了后续一系列基于特征金字塔结构的改进和发展,成为了现代计算机视觉架构设计中不可或缺的一部分。

1.2 FPN的原理

原理

核心挑战:在目标检测任务中,目标可能出现在图像的不同位置和不同尺度上。传统方法如图像金字塔或单独使用高层(高语义但低分辨率)或低层(高分辨率但低语义)特征图往往不能有效同时解决多尺度问题。

解决方案:FPN通过创建一个特征金字塔来合并不同尺度的特征,这个金字塔包含了从细粒度到粗粒度的所有尺度信息。它利用了骨干网络(如ResNet、VGG等)生成的多层特征图,通过自顶向下和横向连接的方式融合这些特征。

流程

  1. 自下而上(Bottom-Up Pathway)

    • 输入图像通过骨干网络(如ResNet的C1至C5层),每经过一层卷积和池化,特征图的尺寸减小(分辨率降低),但通道数(特征维度)增加。这个过程提取了从低级到高级的特征,高级特征富含语义信息但空间分辨率较低。
  2. 构建顶层特征

    • 从骨干网络的最后一层特征(例如C5)开始,使用1x1卷积来减少通道数,生成一个高层次特征图,标记为P5。这个操作既降低了计算复杂度,也为后续上采样操作做准备。
  3. 自顶向下路径(Top-Down Pathway)

    • 对P5进行上采样(常用双线性插值或最近邻插值),使其尺寸与下一层特征图(例如C4)匹配,然后通过横向连接与C4特征图相加。这里的横向连接先用1x1卷积调整C4的通道数,确保与上采样后的P5具有相同数量的通道,之后相加得到新的特征图P4。这个过程递归进行,直到覆盖所有需要的尺度。
  4. 特征融合与输出

    • 在每个融合后的特征图(P2至P5)上,可以附加额外的卷积层来生成最终的预测,比如边界框的回归和类别的分类得分。这样,FPN能够在每个尺度上直接预测目标,适应不同大小的目标检测。

优势

  • 多尺度特征融合:通过自顶向下和横向连接,FPN能够在不同尺度上综合语义信息和空间细节,提高了对小目标的检测能力。
  • 高效计算:相比图像金字塔,FPN复用了同一输入图像的特征,避免了多次运行骨干网络的高昂计算成本。
  • 灵活性:FPN结构易于集成到现有的目标检测框架中,如Faster R-CNN、Mask R-CNN等,提升了整体性能。

下图中的(d)就是FPN结构。我们先看一下abc,对于a是将不同尺度的图片生成的特征图都做一次预测,这样做明显速度非常慢。b是将图片最后的特征图做一次预测,c是同一尺度的图片生成的不同尺度的特征图都做一次预测。

对于FPN,它并不是在我们backbone上不同特征图进行一个预测,而是会将我们不同特征图上的特征去进行一个融合,然后在我们融合之后的特征图上再进行一个预测。通过论文的实验我们可以了解到,这样做确实有助于我们提升网络的检测效果。

1.3 FPN的具体细节

特征图大小的选取是有规则的,即自底向上依次除以2,假如最底层是28x28,那么上面一层就是14x14,在上面一层是7x7.

针对每一个特征图,我们都会先去使用一个1x1的卷积层进行处理(调整channel保证一致),因为不同特征图对应的channel一般情况下是不一样的。

那么高层(上面)的特征图如何与下面的特征图进行融合的呢?就是将上面的特征图进行一个2倍的上采样后,与1x1卷积之后的那个较大的特征图进行一个add的操作。

那么2倍上采样是怎么实现的呢?论文里使用的就是“临近插值算法”。

临近插值算法

临近插值算法(Nearest Neighbor Interpolation),又称最近邻插值,是一种简单且计算效率高的图像缩放方法。在数字图像处理中,当需要改变图像的尺寸,特别是放大图像时,临近插值算法通过直接复制最近的像素值来估算新像素的位置值,不涉及像素值的混合或计算。

原理

  1. 定义: 当需要从一个低分辨率图像创建一个高分辨率图像时,新图像中的每个像素都需要从原图像中找到一个对应的值。在临近插值中,新图像中的每个像素值直接取自原图中距离最近的已知像素点的值。

  2. 操作步骤:

    • 首先,确定新图像的尺寸和原始图像的尺寸之间的比例关系。
    • 对于新图像中的每一个像素位置,计算该像素在原始图像中的对应位置。由于尺寸变化,这个对应位置通常是浮点数,而非整数坐标。
    • 取这个浮点坐标的整数部分,即找到了原图中最邻近的像素。
    • 将该邻近像素的值直接赋给新图像中的当前位置,忽略小数部分,不进行任何插值计算。

特点

  • 优点:

    • 计算速度快,实现简单,不需要额外的计算资源。
    • 保持了原图的锐利边缘,适用于需要保持图像边缘清晰度的场合。
  • 缺点:

    • 图像放大后,由于直接复制像素,会导致图像看起来像素化严重,边缘可能出现明显的阶梯效应,降低了图像的视觉质量。
    • 对于含有精细细节或渐变区域的图像,这种插值方法不能很好地恢复细节,可能会丢失重要的图像信息。

应用场景

尽管临近插值因牺牲图像质量而不适合要求高的图像处理任务,但它在某些特定情况下仍非常有用,比如在实时系统中,当处理速度优先于图像质量时,或者在一些算法的初步处理阶段,当需要快速预览结果而不关注细节时。此外,在某些特定的图像处理算法,如一些目标检测或图像分类任务的预处理阶段,如果对图像细节的要求不高,也可能使用临近插值来加速处理过程。

1.4 FPN网络结构

以Resnet50为例,假设输入的图像是640x640x3的RGB图像,我们对每个CONV生成的特征矩阵记为C2、C3、C4、C5,然后将我们得到的特征图进行一个1x1的卷积来调整channel,然后我从再从C5到C2(自顶向下)进行特征图的融合

因为我们最后生成了不同尺度的预测特征层,所以我们可以在不同的预测特征层上去分别针对不同尺度的目标进行预测。

我们之前看Faster R-CNN只有一个预测特征层,所以我们只在那一个层上去生成不同尺度和比例的anchor。

在FPN当中,我们不同的预测特征层会针对不同的面积,例如P2,P2是底层的特征层,它会保留更多的底层细节信息,所以它更适合去预测小型的目标,所以我们会将32²,比例为1:1,2:1,1:2的anchor在P2上进行生成。同理P3使用64²,P4使用128²,P5使用256²,P6使用512²。

至于不同的预测特征层,是否需要针对每一个特征层都去使用RPN和FastRCNN的模块呢?在论文里作者也进行了实验,在原论文当中,实验结果发现我们在不同的预测特征层上共用同一个RPN和FastRCNN和我们分别用,效果或者说检测精度几乎没有什么差异,所以共享是更好的,这样做能够减少训练参数和网络的大小,提升训练速度。

1.5  RPN生成的proposal如何映射到对应的预测特征层上

w,h对应的是PRN预测得到的一系列proposal它在原图上的宽高,k0=4,k代表之前提到的P2-P5。

举个例子proposal在原图上的宽高是112x112,那么log2括号内的值为1/2,log2(1/2)应为-1,加上k0后等于3,再向下取整还是3,那么就对应在我们的P3特征预测层上进行预测。

 pytorch官方实现

1.6 有哪些网络用到了FPN

特征金字塔网络(FPN)自从被提出以来,因其在物体检测和语义分割任务中显著提升性能的能力,已被广泛应用于多种深度学习网络结构中。以下是一些采用或集成FPN结构的知名网络模型:

  1. Faster R-CNN with FPN:FPN首次被提出时,就是作为 Faster R-CNN 模型的一部分,用于改进候选区域生成网络(Region Proposal Network, RPN),以及在检测阶段结合多尺度特征。

  2. Mask R-CNN:在Mask R-CNN中,FPN也被用来改善实例分割任务的表现,通过在FPN的不同层上进行预测,提高了对不同尺度物体的分割精度。

  3. RetinaNet:这是与FPN一同发表的另一项工作,它结合FPN结构设计了一个新的单阶段物体检测器,利用FPN的多尺度特性来解决物体检测中的类别不平衡问题,并且使用了Focal Loss。

  4. YOLOv3/YOLOv4:YOLO(You Only Look Once)系列的后期版本,如YOLOv3和YOLOv4,也采用了特征金字塔网络的思想来处理多尺度检测,以提高对不同大小目标的检测能力。

  5. EfficientDet:这是一个高效的目标检测模型系列,它结合了BiFPN(即改进的特征金字塔网络)来优化特征融合和多尺度特征处理,从而在保持较高精度的同时显著提高了运行效率。

  6. Panoptic FPN:这是为了解决全景分割任务而提出的,它在FPN的基础上进一步发展,旨在统一实例分割和语义分割,提供一个全面的分割输出。

  7. COCO-DRN:Deep Residual Network(DRN)结合FPN用于COCO数据集上的目标检测任务,展示了FPN在不同网络架构上的泛化能力。

除了这些,还有许多研究者在自己的定制化网络结构中融入了FPN的理念,以期在不同的视觉任务上取得更好的性能。FPN因其灵活性和有效性,已成为现代物体检测和分割网络设计中的一个标准组件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/781627.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】4.MySQL 的数据类型

MySQL 的数据类型 一.数据类型分类在这里插入图片描述二.注意点1.char VS varchar2.datetime VS timestamp3.enum 和 set 的使用方法 一.数据类型分类 二.注意点 1.char VS varchar char 的意义是直接开辟固定大小的空间,浪费磁盘空间,但是效率高varcha…

通过串口烧录keil程序到GD32F103C

插好GD32F103C单片机电源线,将单片机和电脑用串口连接起来 ,串口芯片是CH340,打开设备管理器,出现感叹号 这是由于没有安装CH340串口驱动 CH340系列USB转串口驱动 win7/win10 64位 打开属性,显示:由于 W…

SHAP(SHapley Additive exPlanations)基于XGBoost模型的可解释机器学习

模型可解释性 这是一个关于错误解释机器学习模型的危险以及正确解释它的价值的故事。如果您发现诸如梯度提升机或随机森林之类的集成树模型的鲁棒准确性很有吸引力,但也需要解释它们,那么我希望您发现这些信息有用且有帮助。 试想一下,我们…

【项目管理】常见的敏捷实践:Scrum框架

【项目管理】常见的敏捷实践:Scrum框架 精益、敏捷与Scrum框架Scrum框架实践Sprint(冲刺)Scrum角色Scrum工件Scrum会议 精益、敏捷与Scrum框架 敏捷与精益思想、看板、Scrum等概念的关系如下图所示: Lean 精益 Kanban 看板 Ag…

永磁同步电机控制算法--扇区细分的直接转矩控制(十八扇区)

优化转矩磁链调节器和开关表可降低转矩脉动,改善直接转矩控制性能。有研究仔细分析了传统永磁同步电机六扇区 DTC 方案中空间电压矢量对磁链与转矩轨迹的作用过程发现,随着定子磁链在扇区内位置的变化,电压矢量对磁链与转矩的作用是不均衡的&…

centos7|操作系统|低版本的OpenSSH升级到最新版本OpenSSH-9.8.p1

前言: 1、 OpenSSH是什么 OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都…

实现antd designable平台的组件拖拽功能

平台:designable设计器 github:designable 目录 1 背景2 技术栈3 组件拖拽和放置3.1 类型定义3.2 拖拽3.3 放置 1 背景 由于业务需求,我们需要实现designable平台的一个简易版的组件拖拽功能。 #mermaid-svg-QrxSDGe9YyGG3LbQ {font-family:…

远心镜头简介

一、远心镜头 大家都有这种印象,一个物体在人眼看来,会有近大远小的现象。这是因为物体近的时候,在视网膜上投影大,小的时候,投影小。镜头也是一样,因为近大远小的原因,会产生误差。特别是在做尺…

测试图片上传功能,使用postman提供的url

是不是有时候想要测试图片上传功能,但是没有后台url进行测试,这时候就可以使用postman提供的url: https://postman-echo.com/post接下来,我将教你在postman中,用该url测试图片上传功能。 1.发送图片上传请求 第一步…

学习笔记——动态路由——OSPF聚合(汇总)

十一、OSPF聚合(汇总) 1、路由聚合(汇总) 路由汇总是一种重要的思想,在大型的项目中是必须考虑的一个重点事项。随着网络的规模越来越大,网络中的设备所需维护的路由表项也就会越来越多,路由表的规模也就会逐渐变大,而路由表是需…

Linux系统(Centos)下MySQL数据库中文乱码问题解决

问题描述:在进行数据库使用过程中,数据库里的数据中文都显示乱码。操作数据库的时候,会出现中文乱码问题。 解决方法如下: 第一步:打开虚拟机进入系统,启动MySQL。 第二步:连接登录MySQL输入…

0301STM32GPIO外设输出

STM32GPIO外设输出 STM32内部的GPIO外设GPIO简介基本结构GPIO位结构输入部分:输出部分: GPIO八种工作模式浮空/上拉/下拉输入模拟输入开漏/推挽输出复用开漏/推挽输出 手册寄存器描述GPIO功能描述外设的GPIO配置GPIO寄存器描述端口输入数据寄存器端口输出…

【驱动篇】龙芯LS2K0300之ADC驱动

实验目的 由于LS2K0300久久派开发板4.19内核还没有现成可用的ADC驱动,但是龙芯官方的5.10内核已经提供了ADC驱动,想要在4.19内核使用ADC就要参考5.10内核移植驱动,本次实验主要是关于ADC驱动的移植和使用 驱动移植 主要的驱动代码主要有3个…

【ROS2】初级:客户端-创建自定义 msg 和 srv 文件

目标:定义自定义接口文件( .msg 和 .srv )并将它们与 Python 和 C节点一起使用。 教程级别:初学者 时间:20 分钟 目录 背景 先决条件 任务 1. 创建一个新包2. 创建自定义定义3 CMakeLists.txt4 package.xml5. 构建 tut…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【21】【购物车】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【21】【购物车】 购物车需求描述购物车数据结构数据Model抽取实现流程(参照京东)代码实现参考 购物车需求描述 用户可以在登录状态下将商品添加到购物车【用户购物…

【LabVIEW学习篇 - 4】:程序结构——条件结构、事件结构、禁用结构

文章目录 条件结构案例一(布尔输入)案例二(整数输入)案例三(字符串输入) 事件结构案例一案例二 禁用结构 条件结构 条件结构的组成部分: 选择器标签(带方框的“?”)&…

PCIe驱动开发(2)— 第一个简单驱动编写和测试

PCIe驱动开发(2)— 第一个简单驱动编写和测试 一、前言 教程参考:02_实战部分_PCIE设备测试 教程参考:03_PCIe设备驱动源码解析 二、驱动编写 新建hello_pcie.c文件 touch hello_pcie.c然后编写内容如下所示: #i…

基于java+springboot+vue实现的校园外卖服务系统(文末源码+Lw)292

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,外卖信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

目标检测2--yolov1中相关基础知识(边框回归、交并比、nms)介绍

文章目录 前言回归介绍基本概念线性回归非线性回归边框回归 交并比介绍定义程序实现 NMS介绍定义与原理工作原理代码实现 前言 在上篇博客目标检测1–Pytorch目标检测之yolov1中介绍了yolov1的原理,里面提到几个知识点现在详细介绍一下。 回归介绍 在上篇博客中提…

51单片机STC89C52RC——16.1 五项四线步进电机

目的/效果 让步进电机 正向转90度,逆向转90度 一,STC单片机模块 二,步进电机 2.2 什么是步进电机? 步进电机可以理解为:是一个按照固定步幅运动的“小型机器”。它与普通电机不同点在于,普通电机可以持…