当前位置: 首页 > news >正文

[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在原图上的高度

相关文章:

  • openssl3.2 - 官方demo学习 - signature - rsa_pss_direct.c
  • 第十二章 Java内存模型与线程(二)
  • 逸学Docker【java工程师基础】1.认识docker并且安装
  • Scrum敏捷研发管理解决方案
  • swift对接环信sdk
  • SC20-EVB ubuntu14.04 Andriod 5.1 SDK编译下载
  • day19【LeetCode力扣】160.相交链表
  • 【数据结构】排序之归并排序与计数排序
  • MySQL深入——13
  • MYSQL单表查询
  • Vue Axios——前端技术栈
  • C语言——小细节和小知识9
  • 【论文阅读】Consistency Models
  • 最新AI绘画Midjourney绘画提示词Prompt大全
  • Java http 响应式请求和非响应式请求有什么区别
  • 分享的文章《人生如棋》
  • css布局,左右固定中间自适应实现
  • Django 博客开发教程 16 - 统计文章阅读量
  • ECMAScript入门(七)--Module语法
  • github从入门到放弃(1)
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java的Interrupt与线程中断
  • JSONP原理
  • PaddlePaddle-GitHub的正确打开姿势
  • spring学习第二天
  • Vue2.0 实现互斥
  • Vue--数据传输
  • vue中实现单选
  • 半理解系列--Promise的进化史
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 分布式任务队列Celery
  • 关于字符编码你应该知道的事情
  • 来,膜拜下android roadmap,强大的执行力
  • 树莓派 - 使用须知
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三)Honghu Cloud云架构一定时调度平台
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)http-server应用
  • (转)重识new
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net程序集学习心得
  • .NET企业级应用架构设计系列之结尾篇
  • .NET序列化 serializable,反序列化
  • .Net中的设计模式——Factory Method模式
  • @Autowired 与@Resource的区别