CV-笔记-重读特征金字塔网络 (FPN)

2024-08-22 03:38

本文主要是介绍CV-笔记-重读特征金字塔网络 (FPN),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 结构实现细节
    • 基于特征金字塔(FPN)的RPN
    • 打label
    • FPN的ROI pooling
    • 参数细节
      • Region Proposal with RPN
      • Object Detection with Fast/Faster R-CNN

对于网络的卷积特征的几个重要理解:

  • 但由于深度不同,导致了不同层较大的语义差异。高分辨率图的低层特征损害了其对目标识别的表征能力。
  • 语义差异:语义差异就说对目标的类别的识别的能力的差异,低层特征主要是一些边缘,形状等交基础的特征,对整个物体的类别识别帮助不大,而高层特征可能是更加具体的特征,已经很能反映整个是什么物体了,所以底层特征语义较差。
  • 利用卷积神经网络特征层次结构的金字塔形状,同时构建一个在所有尺度上都具有强大语义的特征金字塔,如果不看skip连接的话FPN相当于是在网络后面接了另外的很多层卷积,所以属于高层特征。
  • 所以有了另外一路上采样的卷积层以后,就具有了在每个尺度上都有高语义的特征图。即依赖于一个通过自顶向下(即上采样路径)路径和横向连接低分辨率语义强的特征高分辨率语义弱的特征相结合的架构。所以这也是最后特征图的channel都是一样的原因吧,这里更加注重语义特征。
  • FPN文章中是用FPN和Faster R-CNN结合。

结构实现细节

  • 上采样使用最近邻插值
  • 只使用c2,c3,c4,c5尺度的特征图。
  • 中间的skip连接是用1x1卷积把channel数降到256.
  • fpn是完全对称的
    在这里插入图片描述
  • 使用同样的channel的原因:因为金字塔的所有层次都使用共享的分类器/回归器,就像传统的特征图金字塔一样,我们修正了所有特征图的特征维数。Because all levels of the pyramid use shared classifiers/regressors as in a traditional featurized image pyramid, we fix the feature dimension (numbers of channels, denoted as d) in all the feature maps. We set d = 256 in this pa- per and thus all extra convolutional layers have 256-channel outputs.There are no non-linearities in these extra layers, which we have empirically found to have minor impacts.在这些额外的层中不存在非线性,我们根据经验发现它们的影响很小

基于特征金字塔(FPN)的RPN

虽然fpn和rpn很相似,但是这两个p意思不一样,一个是pyramid(金字塔),一个是proposal(建议)。

  • RPN参数共享head:文章中把RPN的那个操作的模块叫做头部,即一个3x3的卷积,然后加两个1x1的卷积进行分类和回归。
  • FPN中的RPN head(头部)是参数共享的。
  • 每个特征图负责检查一种尺度assign anchors of a single scale to each level.并且每层只有一个尺度的anchor,即一个层上没有多尺度,每层只负责一种大小的目标检测,这里说的大小是指物体的面积,用面积衡量大小,但是物体的宽高比是不一样的。因为RPN已经是在不同尺度的特征图上做了,所以不需要再在一个特征图上做不同尺度的anchor了。
  • anchor设置:对于在faster R-CNN上用的anchor,在高分辨率特征图上检测小目标,在低分辨率上检测大目标。面积设置,特征图从大到小p2,p3,p4,p5分别的anchor面积是32^2 , 64^2 , 128^2 , 256^2,且每个面积有三个宽高比:{1:2, 1:1, 2:1} 。
  • 实验对比共享rpn头和不共享,共享的效果比较好。

打label

  • 正样本:iou大于0.7的所有anchor或和ground-truth iou最早的anchor(因为可能存在所以anchor都和ground-truth iou小于0.7,那么这个是后就取iou最大的anchor了),positive label if it has the highest IoU for a given ground- truth box or an IoU over 0.7 with any ground-truth box
  • 负样本:所有iou小于0.3的anchor,a negative label if it has IoU lower than 0.3 for all ground-truth boxes。
  • ground-truth没明确分配到哪个尺度的特征图,只要anchor分配好就可以了。原文:Note that scales of ground-truth boxes are not explicitly used to assign them to the levels of the pyramid; instead, ground-truth boxes are associated with anchors, which have been assigned to pyramid levels. As such, we introduce no extra rules in addition to those。因为iou是两个物体面积差不多大才是大的,一个大物体和一个小物体全部覆盖,那iou也是低的。所以物体会根据iou大小自动分配的。

FPN的ROI pooling

那么FPN的roi pooling怎么做呢,因为有这么多个的特征图。

首先我们要搞清楚一个概念,RPN的作用是确定出原图上的目标ROI区域(而非特征图上的区域),这时候我们再将原图上的ROI坐标映射到特征图上,然后把特征图上的roi区域拿过来进行分类和区域的回归矫正。

理解了这一点,那就清楚了,RPN确定的只是在原图上的roi区域,所以RPN做完以后,anchor就没用了,这时候就根据roi来确定我要在哪一层选择这个区域的特征来进行分类和回归。

虽然我们直观上理解是哪个特征图检测出了这个目标,就由哪个特征图所roi pooling,其实不是的,文章中是对roi进行重新分配了,所以RPN做完以后预测出的候选区域就和特征图没有半毛钱关系了,后面就等着再分配了

那么分配规则是怎么样的呢,文章中是按照下面这个公式来确定分配给哪一层,那个类似于中括号的是取整,应该是向上取整,如果是5到4.1就是再第5层特征层做。。

在这里插入图片描述

首先,先通俗理解一下,前面最开始分配anchor的时候就知道了,深层特征图检测大目标,浅层的检测小目标,所以这里也是一样,大目标(即大ROI)分配给低分辨率(小特征图)的特征图即P5,小目标(小ROI)分配给到的高分辨率(大特征图)的特征图

如果我们最小的特征图是P5,那么k0初始化为5,然后这里的224应该不要这样写好,应该写成输入图像的大小,如果输入是448那这里就是448了,意思就是如果roi是图像的一半,那么应该分配给P4特征图做roi pooling。以此类推。

其实这个公式算出来就是,缩小一半(2倍)就是到倒数第二层,缩小4倍就是到再下一层,缩小8倍就是再下一层。那么1到2倍就是再最后一层了。因为以2为底,log二分1就是-1,log四分之一就是-2。

然后做roi pooling都是7x7,最后堆叠到一个batchsize里面(这个和Fast R-CNN是一样的,见之前的博客)。然后预测分类和回归的适合连两个全连接。1024-d fully-connected (fc) layers (each followed by ReLU) before the final classification and bounding box regression layers.

参数细节

Region Proposal with RPN

All architectures in Table 1 are trained end-to-end. The input image is resized such that its shorter side has 800 pixels. We adopt synchronized SGD training on 8 GPUs. A mini-batch involves 2 images per GPU and 256 anchors per image. We use a weight decay of 0.0001 and a momentum of 0.9. The learning rate is 0.02 for the first 30k mini-batches and 0.002 for the next 10k. For all RPN experiments (including baselines), we include the anchor boxes that are outside the image for training, which is unlike [29] where these anchor boxes are ignored. Other implementation details are as in [29]. Training RPN with FPN on 8 GPUs takes about 8 hours on COCO.

Object Detection with Fast/Faster R-CNN

The input image is resized such that its shorter side has 800 pixels. Synchronized SGD is used to train the model on 8 GPUs. Each mini-batch in- volves 2 image per GPU and 512 RoIs per image. We use a weight decay of 0.0001 and a momentum of 0.9. The learning rate is 0.02 for the first 60k mini-batches and 0.002 for the next 20k. We use 2000 RoIs per image for training and 1000 for testing. Training Fast R-CNN with FPN takes about 10 hours on the COCO dataset.

这篇关于CV-笔记-重读特征金字塔网络 (FPN)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o