[DL]深度学习_Feature Pyramid Network

FPN结构详解 

目录

一、概念介绍

 二、结构详解

1、对比试验 

2、特征图融合

3、结构详解 

4、不同尺度预测 

5、Proposal映射到预测特征层


一、概念介绍

        Feature Pyramid Network (FPN)是一种用于目标检测和语义分割的神经网络架构。它的目标是解决在处理不同尺度的图像时,信息丢失和语义细节模糊的问题。

        FPN的核心思想是通过在网络中添加一组横向连接来构建多尺度特征金字塔。这些横向连接将底层的高分辨率特征与高层的低分辨率特征进行融合,以捕捉不同尺度的语义信息。融合后的特征金字塔可用于检测和分割任务中的多尺度目标识别。

        具体来说,FPN在主干网络(如ResNet)中的每个阶段添加一个横向连接,以便从高层到底层传递信息。这些连接可以通过上采样或卷积操作来进行特征融合和调整分辨率。最后,通过在FPN上构建特定的任务头部网络(如分类器或分割器),可以实现目标的检测和分割。

        FPN的优点是能够有效地解决多尺度的问题,提高目标检测和语义分割的性能。它已经在许多计算机视觉任务中取得了显著的成果,并被广泛应用于许多最先进的目标检测和分割算法中。

 二、结构详解

1、对比试验 

        图(a)是一个特征图像金字塔结构,常用于传统图像处理。 对于要检测不同尺度目标的时候,将图片首先缩放到不同的尺度,针对每个尺度图片,依次通过算法进行预测。此时会面临一个问题,生成多少个尺度就需要预测多少次,效率低下。

        图(b)是Faster R-CNN采用的一种方式,将图片通过骨干网络提取得到最终的特征图,在最终的特征图上进行预测,但是这种方式对于小目标检测效果不是很好。

        图(c)是SSD算法采用的方式,将图片输入到骨干网络,此时会在骨干网络正向传播中得到的不同的特征图上分别进行预测。

        图(d)为FPN特征金字塔结构,与图(c)进行简单的对比,可以看出,特征金字塔结构并不是简单的在骨干网络得到的不同特征图上进行预测,而是将不同特征图上的特征进行融合,然后再融合之后的特征图上再进行预测。

2、特征图融合

        需要将不同尺度特征图进行融合,不同的特征图构建时,都是以2的整数倍进行选取,这是因为分类网络中的骨干网络缩放特征图时都是以2的整数倍进行缩放的。

        针对每一个骨干网络上的特征图都先用1x1的卷积层进行处理,目的是为了之后进行特征图融合,调整骨干网络中不同特征图的通道数。

        在高层次特征图与低层次特征图进行融合时,因为高层的特征图的大小在骨干网络正向传播时会缩小为低一层特征图的一半,所以在融合之前需要将高层特征图进行2倍上采样,正好与低一层特征图大小相同,低一层特征图又经过1x1卷积之后与高层特征图统一了通道数,可以进行特征图融合操作。

        2倍上采样通过邻近插值算法。

notes:

        邻近插值算法是一种简单且常用的上采样方法,它通过复制最近邻像素的值来增加特征图的尺寸。

        邻近插值算法的基本思想是对于每个新像素,找到与其最接近的原始像素,并将其值赋给新像素。这种方法不涉及任何计算或插值操作,因此计算效率很高,适合用于快速的上采样需求。

具体实现上,邻近插值算法可以通过以下步骤进行:

  1. 根据上采样的倍数,计算新特征图的尺寸。
  2. 对于新特征图中的每个像素,找到与其最接近的原始特征图的位置。
  3. 将原始特征图中最接近的像素值赋给新特征图中的对应像素。

        例如,假设有一个大小为4x4的低分辨率特征图,需要将其上采样为8x8的高分辨率特征图。那么,对于高分辨率特征图中的每个像素,可以找到最接近的原始特征图像素的位置,并将其值赋给新特征图。这样就完成了邻近插值算法的上采样过程。

        虽然邻近插值算法简单高效,但它可能会导致一些细节信息的损失,因为它只是简单地复制最接近的像素值。因此,对于一些对细节信息要求较高的任务,如图像分割或图像生成,可能需要使用更复杂的上采样方法,如转置卷积。

3、结构详解 

         选取ResNet-50作为骨干网络,结合FPN结构。主干网络输入图像尺寸为[640x640x3]。对于C2、C3、C4、C5得到的特征图分别通过1x1的卷积层调整通道数,之后从C5到C2通过上采样操作进行融合。在所得到的新的特征图之后,再分别接上一个3x3卷积层,对融合后的特征图进一步融合,依次得到P2、P3、P4、P5,原论文给的一个描述,会在P5的基础上进行最大池化下采样得到P6。

notes:

        需要注意的是P6只用于区域生成网络RPN部分。RPN生成Proposal预选框时候,会在P2、P3、P4、P5、P6特征图上进行预测,但是在Fast R-CNN部分中,只会在P2、P3、P4、P5上进行预测。

        在Faster R-CNN是在预测特征图上通过RPN网络生成得到一系列的Proposal预选框,然后将Proposal预选框映射到特征图上,然后将映射的这部分特征输入到Fast R-CNN部分得到最终预测结果。

        在FPN结构中,首先通过RPN结构在P2、P3、P4、P5、P6上进行预测Proposal预选框,然后将预测得到的Proposal预选框映射到P2、P3、P4、P5上,然后通过Fast R-CNN部分得到最终预测结果。

4、不同尺度预测 

        由于在RPN网络中生成了多个预测特征层,所以可以在不同的预测特征层上,分别针对不同尺度的目标进行预测。在Faster R-CNN上,只有一个预测特征层,所以是在这一个预测特征层上生成不同面积不同比例的anchor。但是在FPN上,不同预测特征层可以针对不同尺度的目标。 

        随着卷积池化等操作之后,细节信息会丢失。P2相对较为底层的预测特征层,会保留更多的底层细节信息,更适合预测小目标。会将面积为32^{2},比例为1:2,1:1,2:1的anchor在P2上生成。针对P3使用面积64^{2},P4使用面积128^{2},P5使用面积256^{2},P6使用面积512^{2},比例都为1:2,1:1,2:1的anchor。这也是与Faster R-CNN不一样的地方。

        在不同的特征预测层上共用同一个RPN和Fast R-CNN,和分别在不同的特征预测层上用不同的RPN和Fast R-CNN的情况下,检测精度并无差异。所以为了减少网络训练参数,可以在不同特征预测层上共享RPN预测头和Fast R-CNN模块。在RPN部分,P2到P6使用同一个模块,而Fast R-CNN部分,P2到P5使用同一模块。

5、Proposal映射到预测特征层

k=\left \lfloor k_{0}+\log _{2}(\sqrt{wh}/224) \right \rfloor

  • k为应该对应的预测特征值的层数,对应P2到P5,数值为2到5
  • k_{0}设置为4
  • w为RPN预测得到的Proposal在原图上的宽度
  • h为RPN预测得到的Proposal在原图上的高度

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

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

相关文章

【工业物联网】现代企业环境中的DCS(分布式控制系统)和SCADA(站点控制和数据采集)...

快答案: SCADA和DCS作为单独的系统开始,但一起成长。今天的带宽如此广泛,不需要在每个节点进行本地化。 SCADA和DCS:如果您参与管理企业级网络,您可能已经听说过这些术语。本文将阐明两种技术之间的区别。请注意&#…

pycharm管理仓库(Manager Repository)不见了

经常使用pycharm的大佬们都知道,pycharm中内置了很多库和包,很好用 但是下载来用自带的源很麻烦,于是就用国内的源 可以当我们添加管理仓库的时候,却没有了按钮,如何解决呢? 回到pycharm的主界面&#xf…

漏洞复现--Likeshop任意文件上传(CVE-2024-0352)

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

不是人才用不起,而是AI巡检更有性价比!

在许多行业中,如煤炭、电力、化工等,安全生产是至关重要的。这就需要通过巡检,对设备运行状态进行实时监测,及时发现并处理潜在的安全隐患,从而降低事故发生的概率。但是传统的巡检方式通常依赖于人工进行,…

Docker从入门到精通

系列文章目录 docker常见用法之镜像构建1 docker 系列文章目录一、镜像的分层结构二、容器的用法三、镜像的构建3.1docker commit 构建新镜像三部曲3.1.1运行容器并且修改容器3.1.2提交容器3.1.2删除docker镜像 3.2Dockerfile构建镜像 系列文章目录一、 Dockerfile写法详解1.1…

【数据库和表的管理】

数据库和表的管理 一、实验目的 了解MySQL数据库的逻辑结构和物理结构的特点。学会使用SQL语句创建、选择、删除数据库。学会使用SQL语句创建、修改、删除表。学会使用SQL语句对表进行插入、修改和删除数据操作。了解MySQL的常用数据类型。 二、实验内容SQL语句创建、选择、删…

C++ 图形界面学习效果及代码

#include <stdio.h> #include<conio.h> #include <stdlib.h> #include<graphics.h> #define WIDTH 800 #define HEIGHT 480 #define SIZE 20 int main() {const char* str "人生就是由欲望不满足而痛苦和满足之后无趣这两者所构成";const …

07 整合SSM的快速理解

1.1 第一问&#xff1a;SSM整合需要几个IoC容器&#xff1f; 两个容器 本质上说&#xff0c;整合就是将三层架构和框架核心API组件交给SpringIoC容器管理&#xff01; 一个容器可能就够了&#xff0c;但是我们常见的操作是创建两个IoC容器&#xff08;web容器和root容器&…

2024年美赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

uni-app的组件(一)

scroll-view 可滚动视图区域。用于区域滚动 <scroll-view scroll-y"true" :scroll-top"scrollTop" class"scroll-y" scroll"scroll"><view id"demo1" class"scroll-view-item bg-red">A</view>…

【Linux笔记】进程等待与程序替换

一、进程的终止 1、进程退出码 在讲解进程的终止之前&#xff0c;先要普及一下进程的退出码概念。 我们父进程之所以要创建子进程&#xff0c;就是为了让子进程运行不一样的任务&#xff0c;那么对于子进程执行的这个任务执行完毕后的结果是否正确或者是否出差错&#xff0c…

将 pyparamvalidate 项目,发布至 pypi

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、编写 pyproject.toml 文件3、编写 LICENSE 文件4、编写 README.md 文件5、升级 pip、build、twine 工具6、打包发布的版本7、测试发布至 TestPyPI8、创建测试项目&#xff0c;测试发布结果9、正…

SSM框架学习笔记04 | SpringMVC

文章目录 一、SpringMVC简介二、 请求与响应1. 请求映射路径2. get请求与post请求3. 响应 二、REST风格1.简介 三、 SSM整合四、拦截器1. 定义拦截器2.配置拦截器3.拦截器执行顺序4.拦截器参数5.多个连接器工作流程分析6.拦截器链的运行顺序 一、SpringMVC简介 SpringMVC技术与…

AI嵌入式K210项目(3)-GPIO控制

文章目录 前言一、背景知识二、背景知识二、开始你的表演代码实现 总结 前言 前面介绍了开发板和环境搭建的基本情况&#xff0c;接下来我们开始学习使用C进行裸板开发&#xff0c;本节课先来学习下K210最基础的功能&#xff0c;引脚映射和点灯。 在开始具体学习之前&#xff…

java数据结构与算法刷题-----LeetCode96. 不同的二叉搜索树

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

TRB 2024论文分享:融合Transformer和自监督学习的长时交通流预测模型

TRB&#xff08;Transportation Research Board&#xff0c;美国交通研究委员会&#xff0c;简称TRB&#xff09;会议是交通研究领域知名度最高学术会议之一&#xff0c;近年来的参会人数已经超过了2万名&#xff0c;是参与人数和国家最多的学术盛会。TRB会议几乎涵盖了交通领域…

Ceph的介绍与部署

目录 存储基础 单机存储设备 DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; NAS&#xff08;网络附加存储&#xff0c;是通过网络附加到当前主机文件系统之上的存储&#xff09; SAN&#xff08;存储区域网络&#xff09; 单…

基于ssm的数学课程评价系统的设计与开发+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本数学课程评价系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

List转数组,使用toArray时,new String[0] 的数组空间大小怎么传?

我们在日常开发中&#xff0c;经常遇到List转数组&#xff0c;数组转List的场景。当我们List转数组时&#xff0c;一般使用这种方式&#xff1a; String[] queryTaskIdArr queryTaskIds.toArray(new String[0]); 但是toArray方法中的入参有什么需要注意的呢&#xff1f; 如下…

【架构】docker实现集群主从扩容【案例3/4】

实现集群主从扩容 当整个集群扛不住流量的情况时&#xff0c;需要给集群扩容增加设备&#xff0c;由3主3从&#xff0c;扩为4主4从。实现&#xff1a; 示意图如下&#xff1a; 第一步&#xff1a;新创建两个节点&#xff08;redis-node-7&#xff0c;端口6387和 redis-node…