(三)目标检测算法之SPPNet
今天准备再更新一篇博客,加油呀~~~
系列博客链接:
(一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html
(二)目标检测算法之R-CNN https://www.cnblogs.com/kongweisi/p/10895055.html
本篇博客概述:
1、SPPNet的特点
1.1、映射(减少卷积计算、防止图片内容变形)
1.2、spp层:空间金字塔层(将大小不同的图片转换成固定大小的图片)
2、SPPNet总结
完整结构+优缺点总结
引言:
前面介绍的R-CNN的速度慢在哪里?
答:每个候选区都要进行卷积操作提取特征。因此,SPPnet孕育而生。

1、 SPPNet
SPPNet提出了SPP层,主要改进了以下两个方面:
- 减少卷积计算
- 防止图片内容变形

图1 R-CNN与SPPNet
图1中第一行代表R-CNN的检测过程,第二行是SPPNet的。输入进R-CNN卷积层的图像必须固定大小,因此要进过crop/warp,这会使原图片变形。
而SPPNet直接将原图片输入CNN中,获其特征,使得原图片内容得以保真。
| R-CNN模型 | SPPNet模型 |
|---|---|
| 1、R-CNN是让每个候选区域经过crop/wrap等操作变换成固定大小的图像 2、固定大小的图像塞给CNN 传给后面的层做训练回归分类操作 | 1、SPPNet把全图塞给CNN得到全图的feature map 2、让候选区域与feature map直接映射,得到候选区域的映射特征向量 3、映射过来的特征向量大小不固定,这些特征向量塞给SPP层(空间金字塔变换层),SPP层接收任何大小的输入,输出固定大小的特征向量,再塞给FC层 |
1.1 映射
原始图片经过CNN变成了feature map,原始图片通过选择性搜索(SS)得到了候选区域,现在需要将基于原始图片的候选区域映射到feature map中的特征向量。
映射过程图参考如下:

整个映射过程有具体的公式,如下
假设(x′,y′)(x′,y′)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系,这种映射关系与网络结构有关:(x,y)=(S∗x′,S∗y′),即
左上角的点:
- x′=[x/S]+1
右下角的点:
- x′=[x/S]−1
其中 SS 就是CNN中所有的strides的乘积,包含了池化、卷积的stride。论文中使用S的计算出来为=16
原论文链接,其中有公式的推导过程 http://kaiminghe.com/iccv15tutorial/iccv2015_tutorial_convolutional_feature_maps_kaiminghe.pdf
1.2 spatial pyramid pooling (空间金字塔变换层)
通过spatial pyramid pooling 将任意大小的特征图转换成固定大小的特征向量
示例:假设原图输入是224x224,对于conv出来后的输出是13x13x256的,可以理解成有256个这样的Filter,每个Filter对应一张13x13的feature map。
接着在这个特征图中找到每一个候选区域映射的区域,spp层会将每一个候选区域分成1x1,2x2,4x4三张子图,对每个子图的每个区域作max pooling,
得出的特征再连接到一起,就是(16+4+1)x256的特征向量,接着给全连接层做进一步处理,如下图:

2、 SPPNet总结
来看下SPPNet的完整结构

- 优点
- SPPNet在R-CNN的基础上提出了改进,通过候选区域和feature map的映射,配合SPP层的使用,从而达到了CNN层的共享计算,减少了运算时间, 后面的Fast R-CNN等也是受SPPNet的启发
- 缺点
- 训练依然过慢、效率低,特征需要写入磁盘(因为SVM的存在)
- 分阶段训练网络:选取候选区域、训练CNN、训练SVM、训练bbox回归器, SPP-Net在fine-tuning阶段无法使用反向传播微调SPP-Net前面的Conv层
(三)目标检测算法之SPPNet的更多相关文章
- 目标检测算法(2)SPP-net
本文是使用深度学习进行目标检测系列的第二篇,主要介绍SPP-net:Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual R ...
- (六)目标检测算法之YOLO
系列文章链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- (五)目标检测算法之Faster R-CNN
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- (四)目标检测算法之Fast R-CNN
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- (七)目标检测算法之SSD
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- 深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)
不多说,直接上干货! 本文一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码. • RCNN RCN ...
- 目标检测算法的总结(R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、FNP、ALEXnet、RetianNet、VGG Net-16)
目标检测解决的是计算机视觉任务的基本问题:即What objects are where?图像中有什么目标,在哪里?这意味着,我们不仅要用算法判断图片中是不是要检测的目标, 还要在图片中标记出它的位置 ...
- 基于模糊Choquet积分的目标检测算法
本文根据论文:Fuzzy Integral for Moving Object Detection-FUZZ-IEEE_2008的内容及自己的理解而成,如果想了解更多细节,请参考原文.在背景建模中,我 ...
- 目标检测算法YOLO算法介绍
YOLO算法(You Only Look Once) 比如你输入图像是100x100,然后在图像上放一个网络,为了方便讲述,此处使用3x3网格,实际实现时会用更精细的网格(如19x19).基本思想是, ...
随机推荐
- 被mybatis一级缓存坑了
目录 背景 场景 原因 解法 参考 背景 项目中出现了这样一个问题,就是select出来的数据和数据库里的数据不一样,就非常的奇怪,发现原来是mybatis的缓存导致的,经过查询资料发现这是mybat ...
- Basler相机启动问题xml读取出错
切记!同一张网卡上多网口分别连多相机的时候,不要用同一个网段!!很容易出错!
- 【SimuPy】Python实现的Simulink 文档翻译全部完毕
作者:CycleUser 前情回顾: 前些天在和@iGuo.@白小鱼以及@12334在关于如何看待哈工大.哈工程受美商务部「实体名单」影响,被禁止使用 MATLAB 商业软件?的问题中讨论到了 sim ...
- Java流程控制01:用户交互Scanner
Scanner对象 之前我们学习的基本语法并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入.java.Scanner 是java5 的新特征,我们可以通过Sca ...
- Nginx实现跨域配置详解
主要给大家介绍了关于Nginx跨域使用字体文件的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 问题描述 今天在使用子域名访问根域名的CSS时,发现字体无法显示,在确保CSS和Font字 ...
- 实现表单input文本框不可编辑的三种方法
感谢原文作者:青灯夜游 原文链接:https://www.php.cn/div-tutorial-413133.html 目录 问题 实现方式 1.οnfοcus=this.blur() 2.read ...
- 超详细的node/v8/js垃圾回收机制
前言 垃圾回收器是一把十足的双刃剑.其好处是可以大幅简化程序的内存管理代码,因为内存管理无需程序员来操作,由此也减少了(但没有根除)长时间运转的程序的内存泄漏.对于某些程序员来说,它甚至能够提升代码的 ...
- 【转】linux shell编程实例总结
查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数 find ./ -size +500M -type f | tee file_list | wc 在目录/tmp下找 ...
- MySQL高级(进阶)SQL语句
MySQL高级(进阶)SQL语句 目录 MySQL高级(进阶)SQL语句 一.实例准备--制表 1. 表1(商店区域表) 2. 表2(商店销售表) 3. 表3(城市表) 4. 表4(total_sal ...
- 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案
第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...