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

news2024/11/13 8:58:12

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因其灵活性和有效性,已成为现代物体检测和分割网络设计中的一个标准组件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云ecs服务器,nginx多域名多项目部署教程,含本地部署教程

nginx多域名部署项目 本地部署线上部署一、本地部署 第一步:win+r 输入drivers 打开hosts文件,编辑 加行 127.0.0.1 自定义域名 … 第二步:下载 nginx 安装好以后 打开ngin安装目录,选择nginx.conf 打开 #user Administrator; worker_processes

【python技巧】parser传入参数

参考网址: https://lightning.ai/docs/pytorch/LTS/api/pytorch_lightning.utilities.argparse.html#pytorch_lightning.utilities.argparse.add_argparse_args 1. 简单传入参数. parse_known_args()方法的作用就是把不在预设属性里的参数也返回,比如下面这个例子, 执行pytho…

前端技术(三)—— javasctipt 介绍:jQuery方法和点击事件介绍(补充)

6. 常用方法 ● addClass() 为jQuery对象添加一个或多个class <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

【密码学】什么是密码?什么是密码学?

一、密码的定义 根据《中华人民共和国密码法》对密码的定义如下&#xff1a; 密码是指采用特定变换的方法对信息等进行加密保护、安全认证的技术、产品和服务。 二、密码学的定义 密码学是研究编制密码和破译密码的技术科学。由定义可以知道密码学分为两个主要分支&#x…

【UML用户指南】-30-对体系结构建模-模式和框架

目录 1、机制 2、框架 3、常用建模技术 3.1、对设计模式建模 3.2、对体系结构模式建模 用模式来详述形成系统体系结构的机制和框架。通过清晰地标识模式的槽、标签、按钮和刻度盘 在UML中&#xff0c; 对设计模式&#xff08;也叫做机制&#xff09;建模&#xff0c;将它…

前端必修技能:高手进阶核心知识分享 - CSS 阴影属性详解

CSS 涉及设计到阴影的相关内容包括三个方面&#xff1a;box-shadow属性&#xff08;盒子阴影&#xff09;、 text-shadow属性&#xff08;文本阴影&#xff09;、drop-shadow滤镜。 本篇文章旨在详细介绍和分析三种阴影的具体参数设置和典型用例。 box-shadow属性&#xff08;…

1958.力扣每日一题7/7 Java(100%解)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先将指定位…

【ubuntu中关于驱动得问题】—— 如何将nouveau驱动程序加入黑名单和安装NVIDIA显卡驱动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、nouveau驱动程序加入黑名单二、安装NVIDIA显卡驱动总结 前言 NVIDIA显卡驱动是用于支持和优化NVIDIA显卡在计算机系统中运行的关键软件组件。该驱动程序能…

2024 WAIC|第四范式胡时伟分享通往AGI之路:行业大模型汇聚成海

7月4日&#xff0c;2024世界人工智能大会&#xff08;WAIC&#xff09;正式开幕。此次大会围绕核心技术、智能终端、应用赋能等板块展开&#xff0c;展览规模、参展企业数均达历史最高。第四范式受邀参展&#xff0c;集中展示公司十年来在行业大模型产业应用方面的实践。在当天…

Django 查询数据

模型参考上一章内容&#xff1a; Django QuerySet对象&#xff0c;filter()方法-CSDN博客 查询数据可以通过以下方法&#xff1a; Book.objects.all() Book.objects.filter() Book.objects.get() 1&#xff0c;添加视图函数 Test/app11/views.py from django.shortcuts im…

【QT中堆栈布局的实现】

学习分享 1、环境设置&#xff0c;头文件2、.h文件2.1、主界面.h文件2.2、对话界面1.h文件2.3、对话界面2.h文件 3、.cpp文件3.1、对话界面1.cpp3.2、对话界面2.cpp3.3、主界面.cpp3.4、main.cpp 1、环境设置&#xff0c;头文件 该示例使用C14实现&#xff0c;因此在QT项目pro文…

实战:搭建一款属于自己的个人知识库~docusaurus(强大且丝滑)-2024.7.7(测试成功)

目录 文章目录 目录docusaurus简介效果专题链接&#x1f44f;环境源码1、安装基础环境2、拉取代码3、安装坚果云并同步md核心文件4、构建运行5、配置脚本环境1.配置vscode终端到ecs的免密2.配置win10 vscode终端环境变量 6、构建并推送静态文件到ecs关于我最后最后 docusaurus简…

基于CentOS Stream 9平台搭建RabbitMQ3.13.4以及开机自启

1. erlang与RabbitMQ对应版本参考&#xff1a;https://www.rabbitmq.com/which-erlang.html 2. 安装erlang 官网&#xff1a;https://www.erlang.org/downloads GitHub: https://github.com/rabbitmq/erlang-rpm/releases 2.1 安装依赖&#xff1a; yum -y install gcc glib…

BigDecimal(double)和BigDecimal(String)有什么区别?BigDecimal如何精确计数?

BigDecimal(double)和BigDecimal(String)的区别 double是不精确的&#xff0c;所以使用一个不精确的数字来创建BigDecimal&#xff0c;得到的数字也是不精确的。如0.1这个数字&#xff0c;double只能表示他的近似值。所以&#xff0c;当我们使用new BigDecimal(0.1)创建一个Bi…

算法简介:什么是算法?——定义、历史与应用详解

引言 在现代计算机科学中&#xff0c;算法是一个核心概念。无论是编程还是数据分析&#xff0c;算法都扮演着至关重要的角色。在这篇博客中&#xff0c;我们将深入探讨算法的定义、历史背景以及它在计算机科学中的地位和实际应用。 什么是算法&#xff1f; 算法是解决特定问题…

STM32基础篇:GPIO

GPIO简介 GPIO&#xff1a;即General Purpose Input/Output&#xff0c;通用目的输入/输出。就是一种片上外设&#xff08;内部模块&#xff09;。 对于STM32的芯片来说&#xff0c;周围有一圈引脚&#xff0c;有时需要对引脚进行读写&#xff08;读&#xff1a;从外部输入一…

数字信号处理及MATLAB仿真(3)——量化的其他概念

上回书说到AD转换的两个步骤——量化与采样两个步骤。现在更加深入的去了解以下对应的概念。学无止境&#xff0c;要不断地努力才有好的收获。万丈高楼平地起&#xff0c;唯有打好基础&#xff0c;才能踏实前行。 不说了&#xff0c;今天咱们继续说说这两个步骤&#xff0c;首先…

51单片机-第一节-LED和独立按键

一、点亮LED&#xff1a; 首先包含头文件 <REGX52.H> 随后令P2为0xFE。(此时二进制对应1111 1110&#xff0c;为0 的LED亮&#xff0c;故八个灯中的最后一个亮起)。 注&#xff1a;P2为控制LED的8位寄存器。 void main() {P2 0xFE;//1111 1110while(1){} } 二、L…

非同步升压转换器,效率95%你信吗?ETA1611输出电流2A, 22V DCDC

前言&#xff1a; 截止24年7月7日某创报价&#xff1a;500&#xff1a; &#xffe5;0.7856 / 个 建议使用前同时了解下方器件。 2毛钱的SOT23-5封装28V、1.5A、1.2MHz DCDC转换器用于LCD偏置电源和白光LED驱动等MT3540升压芯片 描述 ETA1611 SOT23-6封装 丝印GVYW&#xff0…

基于java语言+ Vue+ElementUI+ MySQL8.0.36数字化产科管理平台源码,妇幼信息化整体解决方案

基于java语言 VueElementUI MySQL8.0.36数字化产科管理平台源码&#xff0c;妇幼信息化整体解决方案 数字化产科管理平台是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。该系统由门诊系统、住院系统、数据统计模块三部分组…