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

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个