目标检测——SPPNet算法解读

news2024/11/16 13:56:09

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun
链接:https://arxiv.org/abs/1406.4729

目录

  • 1、算法概述
  • 2、Deep Networks with Spatial Pyramid Pooling
    • 2.1 SPP Layer
    • 2.2 网络训练
  • 3、实验结果
    • 3.1 分类
    • 3.2 检测
  • 4、创新点和不足

1、算法概述

之前的工作,神经网络都要求固定尺寸的输入,比如:224x224,这就限制了输入图像的宽高比,当对于其他任意尺寸图像时,基本都是通过裁剪或直接拉伸的方式变换到固定尺寸。但是裁剪有可能不能完全包含目标,直接拉伸也会造成目标的形变及失真,这都会造成识别精度下降。
在这里插入图片描述
为什么卷积神经网络需要固定尺寸的输入?CNN由两部分组成:卷积层和全连接层,实际上卷积层不需要固定尺寸的输入,它可以对任意尺寸的图像生成任意尺寸的特征图;而全连接层根据其定义来看才需要固定尺寸的输入。全连接层通常在CNN的深层阶段,所以本文作者提出空间金字塔池化(SPP, Spatial Pyramid Pooling)层用于固定CNN中最后一层卷积层的输出,使得全连接层的输入得到统一。这一操作使得CNN可以接受任意尺寸的输入,不必经过裁剪(crop)和扭曲拉伸(warp)。在目标检测方面,加入这一操作的SPP-Net比R-CNN快24到102倍,全过程下来速度为0.5s/image。
SPP的优势有:
1、针对不同尺寸的输入可以得到相同维度的输出,而siding window pooling 做不到;
2、SPP使用multi-level spatial bins, 而siding window pooling采用的单一的窗口,multi-level对目标变形非常鲁棒;
3、由于输入尺寸的可变性,SPP可以提取不同尺度的特征。
4、SPP-Net能使得我们在训练中使用多尺度训练,避免过拟合,使得最终的精度相比固定尺寸训练有所提升。

2、Deep Networks with Spatial Pyramid Pooling

2.1 SPP Layer

作者首先可视化了网络特征图,表明了特征图不仅反映了相应的强度和涉及到它们的空间位置。卷积层可以接受任意大小的输入并输出任意尺寸的特征图,但分类器(SVM/softmax)或者全连接层只能接受固定尺寸的输入。
在这里插入图片描述
为了让CNN适应任意大小的图像,作者将最后一个池化层(例如,在最后一个卷积层之后的pool5层)替换为空间金字塔池化层。如上图所示,空间金字塔池化的输出是kM维向量,桶(bins)的数量记为M,k是最后一个卷积层的输出特征图数量,图中k为256。每个特征图的尺寸为axa,被切分为nxn的bins,那么采用窗口为win=ceil(a/n)和步长为str=floor(a/n)的max-pooling。最后将所有的特征级联起来(固定维度kM)作为全连接层的输入。这样就保证了无论输入图像的尺寸,输入全连接层的输入都有同样的大小。
网络处理流程如下:
在这里插入图片描述

2.2 网络训练

单尺度训练,固定裁剪输入图像为224x224,最后一层卷积层输出特征图大小为13x13,设置三个级别的空间金字塔池化操作,SPP设置如下:
在这里插入图片描述
多尺度训练,采用两个尺度训练,180x180,224x224;180尺寸的图片是224尺寸的直接resize得到,而不是通过裁剪得到,所以两种尺度的区域只在分辨率上不同,而在内容/布局上没有区别。对于180x180的输入图像,最后一层卷积层输出特征图大小为10x10,通过SPP层,180x180的输入大小和224x224的输入大小得到相同维度的全连接层输入。
以上单/多尺度训练主要应用于训练阶段,在测试推理阶段,SPPNet可以接受任意大小的输入图像。

3、实验结果

3.1 分类

数据集采用ImageNet 2012,输入图片固定为224x224,Baseline model的结构如下
在这里插入图片描述
将网络最后一个池化层替换成SPP层后,对应的结果分别为:
在这里插入图片描述
可见多尺度训练对模型也有提升
ILSVRC2014分类竞赛的结果如下,SPP-Net取到第三名的结果,第一名是GoogLeNet,第二名VGG
在这里插入图片描述

3.2 检测

SPP-Net也可以用于目标检测。相较于R-CNN的2000次提取特征,SPP-Net只从整个图像中提取一次特征映射(可能在多个尺度上)。然后对特征图上的每个候选框应用空间金字塔池操作,该候选框对应的特征通过SPP操作将变成固定长度的向量,如下图所示。由于只应用一次卷积操作,所以我们的方法可以运行速度提高几个数量级。
在这里插入图片描述
实验设置:相对于R-CNN,SPP-Net还是用selective search提出区域候选框(测试阶段2000个),SPP-Net的backbone部分采用ZF-5,SPP层采用4级空间金字塔(1x1,2x2,3x3,6x6,共50个bins),这样每个候选框区域这就会生成12800维(256x50)的特征向量用于全连接层的输入。后面训练每个类别的SVM分类器也是用这个12800维的特征。训练SVM的样本设置方案和R-CNN一致,也采用负样本难度挖掘技术。
在这里插入图片描述
因为SPP-Net和R-CNN采用的方式差不多,只是SPP-Net将R-CNN的2000次提取特征的过程集中到一次完成,所以它们最终的mAP区别不大,但SPP-Net的速度比R-CNN的快非常多。

4、创新点和不足

  • 创新点:
    1、针对不同尺寸的输入可以得到相同维度的输出,实现了多尺度训练的可能,能让网络见到多尺度图片,增加鲁棒性。
    2、首次提出单尺度/多尺度交替训练。
    3、改进R-CNN的提取特征方式,合并2000次提取为一次提取,大大提升了速度。
  • 不足:
    1、还是没有改进候选框区域生成;
    2、特征提取、SVM分类、边框回归这三个阶段是独立的,需分别进行训练和推理,效率较低。

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

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

相关文章

vue3使用动态component

使用场景: 多个组件通过component标签挂载在同一个组件中,通过触发时间进行动态切换。vue3与vue2用法不一样,这里有坑! 使用方法: 1.通过vue的defineAsyncComponent实现挂载组件 2.component中的is属性 父组件&am…

企业数字化转型应对传统网络挑战的关键策略

数字化变革正在以前所未有的速度和规模改变着我们的生活和工作方式,使得传统网络架构面临着巨大的挑战。其中包括带宽需求增加、多云应用增加、安全威胁增加以及传统网络设备无法满足需求等问题。 数字化时代需要更高速、更可靠、更安全的网络支持,传统网…

Python基础语法之学习字符串格式化

Python基础语法之学习字符串格式化 一、代码二、效果 一、代码 # 通过m.n控制 a 123 b 123.444 c 123.555 print("限制为5:%5d" % a) print("限制为2:%2d" % a) print("限制为5.2:%5.2f" % b) print("限制为5.2:%5.2f" % c)二、效…

商家门店小程序怎么做?门店小程序的优势和好处

生活服务类商家在当前数字化时代,越来越认识到门店小程序的重要性。门店小程序不仅为商家提供了一个在线展示的窗口,更为其打造了一个与消费者直接互动的平台。有了门店小程序,商家可以更加便捷地管理商品信息、订单流程,同时还能…

LRU缓存淘汰策略的实现——LinkedHashMap哈希链表

LRU(最近最少使用)缓存淘汰策略可以通过使用哈希链表实现。LinkedHashMap 是 Java 中提供的一种数据结构,它综合了哈希表和双向链表的特点,非常适合用来实现 LRU 缓存。 LinkedHashMap 内部维护了一个哈希表和一个双向链表。哈希…

WSL中安装的Pycharm如何在Windows的开始菜单中新建图标?或WSL中的Pycharm经常花屏

WSL中安装的Pycharm如何在Windows的开始菜单中新建图标?或WSL中的Pycharm经常花屏 ⚙️1.软件环境⚙️🔍2.问题描述🔍🐡3.解决方法🐡🤔4.结果预览🤔 ⚙️1.软件环境⚙️ Windows10 教育版64位 W…

建设银行新余市分行积极开展国债下乡宣传活动

近日,为了普及国债知识,提高农村居民对国债的认知度和投资意识,建设银行新余市分行组织员工前往下村开展了一场国债下乡宣传活动。 活动当天,工作人员早早地来到了下乡地点,悬挂起了国债宣传横幅,并摆放了…

学习k8s的介绍(一)

一、kubernetes及Docker相关介绍 1、kubernetes是什么 1-1、简称为k8s或kube,是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 声明式配置语法: kubectl create/apply/delete -f xx…

VS Code C++可视化调试配置Natvis,查看Qt、STL变量内容

VS Code C可视化调试配置Natvis 使用GlobalVisualizersDirectory Windows下 C:\Users\YourName\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAdapters\vsdbg\bin\Visualizers\Linux下 ~\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAd…

CANDENCE: PCB 如何高亮网络、器件

PCB 如何高亮网络、器件 开始前先学习一个单词:assign CANDECE 高亮网络 step1: 选择一个颜色:红色 step2: 筛选要高亮什么:网络 or 器件,这里选择网络。 step3:鼠标点击要高亮的网络: 这里是GND 这里…

帮亲戚个忙,闲来有事用php写个58商铺出租转让信息抓取

最近亲戚想做点小超市生意,但是又不懂互联网,信息获取有点闭塞。知道我身在互联网大潮中,想让我帮忙看看网上有没有商铺转让的。心想,这不是小菜一碟,大显身手的时候来了,大概去58瞅了瞅,这玩意…

切水果小游戏

欢迎来到程序小院 切水果 玩法&#xff1a;点击鼠标左键划过水果&#xff0c;快去切水果&#xff0c;看你能够获划出多少水果哦^^。开始游戏https://www.ormcc.com/play/gameStart/205 html <div id"game" class"game" style"text-align: center;…

Jmeter接口自动化测试断言之Json断言

json断言可以让我们很快的定位到响应数据中的某一字段&#xff0c;当然前提是响应数据是json格式的&#xff0c;所以如果响应数据为json格式的话&#xff0c;使用json断言还是相当方便的。 还是以之前的接口举例 Url: https://data.cma.cn/weatherGis/web/weather/weatherFcst…

盘点2023年元宇宙NFT+潮玩游戏的高级套路解析

元宇宙游戏的高级套路2.0 解析&#xff1a;有部分项目玩家都是老手了&#xff0c;都晓得看准就溜&#xff0c;打一枪就换个地方&#xff0c;其实都是知道跑不长&#xff0c;一手内幕消息运筹帷幄之中&#xff0c;但同样也有高级的项目统筹方&#xff0c;讲更大的商业故事吸引他…

采购业务中的组织概述

目录 一、采购和库存管理中组织单位的概览二、企业的组织结构三、采购中组织结构3.1采购组织3.2采购组 一、采购和库存管理中组织单位的概览 1、 客户端&#xff1a;在SAP ERP系统中&#xff0c;客户端通过三位数字定义&#xff0c;并代表这独立的数据记录和独立的业务流程。客…

LeetCode刷题---路径问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、不同路径 题目链接&#xff1a;不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记…

java系列:什么是SSH?什么是SSM?SSH框架和SSM框架的区别

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 什么是SSH&#xff1f;什么是SSM&#xff1f;SSH框架和SSM框架的区别 前言一、什么是SSH&#xff1f;1.1 Struts2具体工作流程&#xff1a;Struts2的缺点&#xff1a; 1.2 Sp…

jenkins-cicd基础操作

1.先决条件 1.首先我个人势在k8s集群中创建的jenkins,部署方法搭建 k8s部署jenkins-CSDN博客 2.安装指定插件. 1.Gitlab plugin 用于调用gitlab-api的插件 2.Kubernetes plugin jenkins与k8s进行交互的插件,可以用来自动化的构建和部署 3.Build Authorizatio…

设二维数组a[1...m,1...n]()含有m*n个整数。写一个算法判断a中所有元素是否互不相同,并输出相关信息(yes/no)

设二维数组a[1…m&#xff0c;1…n]&#xff08;&#xff09;含有m*n个整数。 写一个算法判断a中所有元素是否互不相同&#xff0c;并输出相关信息&#xff08;yes/no) 分析其时间复杂度 代码思路&#xff1a; 这种如果纯暴力做的话时间复杂度非常高。 我这里考虑把题目中的二…

python 中文件相对路径 和绝对路径

什么是绝对路径 绝对路径&#xff1a;就是从盘符(c盘、d盘)开始一直到文件所在的具体位置。 例如&#xff1a;xxx.txt 文件的绝对路径为&#xff1a; “C:\Users\xiaoyuzhou\Desktop\file\xxx.txt”相对路径 “相对路径”就是针对“当前文件夹”这一参考对象&#xff0c;来描述…