主要参考博客:http://www.cnblogs.com/marsggbo/p/8572846.html
https://www.cnblogs.com/573177885qq/p/6071646.html
在了解了RCNN之后,我们知道RCNN 在经过region proposal产生候选框之后,需要将每一个候选框图片输入CNN网络提取特征,比如一张图片会经seletive search会产生2000个候选区域,那么我们就需要进行2000次的特征提取,这样极大的影响了效率。另外由于Alex CNN网络具有固定的输入尺寸,但是实际我们产生的候选区域的尺寸确实多样的,这样我们在输入网络提取特征之前还需要对候选区域进行crop/warp操作,使其尺寸一致。但是这些操作又可能使图形畸变,从而影响结果。我们知道cnn网络之所以需要固定的输入主要是因为最后的全连接层的输入神经元的数目必须是固定的。那么我们可以这样做,将最后一层卷积层后面的池化层做个修正,使其能够满足这样的功能,即不能输入尺寸尺寸如何均能有相同尺寸的输出。这样就算我们卷积网络的输入尺寸不一样,在输入全连接层的时候,仍能达到相同的尺寸。而是实现这个功能的池化层就是SPPNET。下图就是SPPNET的示意图。

大致流程:

1.  首先通过选择性搜索(selective search),对待检测的图片进行搜索出2000个候选窗口。

2.特征提取阶段。把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,这个可以大大的提高虚度。因为R-CNN就相当于遍历一个CNN两千次,而SPP-Net只需要遍历1次。最后采用SVM算法进行特征向量分类识别,和R-CNN一样。

注意事项:

1):

2)SPPNET中计算维度用的公式

假设输入数据大小和上面一样是(10,7,11)(10,7,11), 但是池化数量改为(4,4)(4,4):

此时核大小为(2,3)(2,3), 步长大小为(1,2)(1,2),得到池化后的矩阵大小的确是6∗56∗5 ←[简单的计算矩阵大小的方法:(7=2+1*5, 11=3+2*4)],而不是4∗44∗4。

那么问题出在哪呢?我们忽略了padding的存在

现在再来检验一下:
假设输入数据大小和上面一样是(10,7,11), 池化数量为(4,4):

Kernel大小为(2,3),Stride大小为(2,3),所以Padding为(1,1)。

利用矩阵大小计算公式:得到池化后的矩阵大小为:4∗44∗4。

python代码实现(pyTorch)
#coding=utf-8import math
import torch
import torch.nn.functional as F# 构建SPP层(空间金字塔池化层)
class SPPLayer(torch.nn.Module):def __init__(self, num_levels, pool_type='max_pool'):super(SPPLayer, self).__init__()self.num_levels = num_levelsself.pool_type = pool_typedef forward(self, x):num, c, h, w = x.size() # num:样本数量 c:通道数 h:高 w:宽for i in range(self.num_levels):level = i+1kernel_size = (math.ceil(h / level), math.ceil(w / level))stride = (math.ceil(h / level), math.ceil(w / level))pooling = (math.floor((kernel_size[0]*level-h+1)/2), math.floor((kernel_size[1]*level-w+1)/2))# 选择池化方式 if self.pool_type == 'max_pool':tensor = F.max_pool2d(x, kernel_size=kernel_size, stride=stride, padding=pooling).view(num, -1)else:tensor = F.avg_pool2d(x, kernel_size=kernel_size, stride=stride, padding=pooling).view(num, -1)# 展开、拼接if (i == 0):x_flatten = tensor.view(num, -1)else:x_flatten = torch.cat((x_flatten, tensor.view(num, -1)), 1)return x_flatten

目标检测之SPPNET相关推荐

  1. 目标检测 RCNN, SPPNet, Fast RCNN, Faster RCNN 总结

    RCNN CVPR 2014 Rich feature hierarchies for accurate object detection and semantic segmentation http ...

  2. 【CV】通俗易懂的目标检测 | RCNN, SPPNet, Fast, Faster

    全文5500个字,22幅图,学习时长预计20分钟 目录 0 概述 1 RCNN 1.1 候选区Region Proposal 1.2 特征提取 1.3 SVM分类 1.4 线性回归 2 SPP Net ...

  3. 浅谈目标检测RCNN,SPPNET,Fast-RCNN,Faster-RCNN

    RCNN 目标检测-R-CNN模型 ●CVPR 2014 ●候选区域方法(region proposal method) :提供了额物体检测的一个重要思路 ●RCNN步骤: .1.对于一张图片,找出默 ...

  4. 目标检测(二)——SPPNet

    简介 SPPNet是出自2015发表在IEEE上的论文-<Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Rec ...

  5. 【目标检测】SPPNet算法详解

    转载自 http://blog.csdn.net/u011534057/article/details/51219959 Spatial Pyramid Pooling in Deep Convolu ...

  6. 目标检测:SPPNet

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 5.3 SPPNet 学习目标 目标 知道SPPNet与RCN ...

  7. 【目标检测】SPP-Net中候选区域在原图和feature map之间的映射关系

    目录:候选区域在原图和feature map之间的映射关系 一.问题转化 1. 什么是感受野?以及感受野大小如何计算? 2. 感受野上的坐标映射 3. 论文中关于特征映射的讲解 二.何凯明演讲的PPT ...

  8. 《目标检测》R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN

    学习内容来自:https://www.bilibili.com/video/BV1m5411A7FD?p=2 类似的博文:https://blog.csdn.net/v_JULY_v/article/ ...

  9. 同r做一个窗口_目标检测(Object Detection):R-CNN/SPPnet/R-FCN/Yolo/SSD

    这篇文章我是Survey目标检测(Object Detection)系列论文的一个总结. 包括R-CNN系列.SPP-net.R-FCN.YOLO系列.SSD.DenseBox等. 基本概念 目标识别 ...

最新文章

  1. python 销量预测模型_如何做电商的销量预测模型?
  2. OTSU算法对图像二值化
  3. 主键由数据库mysql 映射native_Hibernate主键生成策略详解
  4. window下eclipse搭建C/C++开发环境(超简单无需插件版) .
  5. SVM针对中文文本分类
  6. 流控思路——多消费者定量生产(第100篇)
  7. python动态类型的坑_python进阶教程之动态类型详解
  8. docker yum 安装
  9. js数组查找最接近_在JavaScript数组中找到最小元素的位置
  10. 基于WF4的新平台-流程模式-(6)动态串行
  11. 何小鹏退出UC浏览器母公司股东名单
  12. 千牛机器人回复词库_智能聊天机器人 ai机器人电销-
  13. matlab 指定函数拟合,matlab中曲线拟合问题---使用指定函数进行曲线拟合
  14. 蓝桥杯笔记:(给的元素不重复)求全排列(排列不可重复,排列可重复)
  15. 境内银行卡磁条信息格式
  16. Java中反射性能测试
  17. go语言导出oracle数据,Go语言导出内容到Excel的方法
  18. feign session 调用_Feign调用session丢失解决方案
  19. 2021-09-07
  20. Win10找不到便签怎么办 Win10找不到便签解决方法

热门文章

  1. 没啥价值,不建议读——关于2019北京半程马拉松参赛体会
  2. window11安装docker小白教程
  3. vue中app.use()做了什么?
  4. 京东案例-快递查询单号(当我们输入单号时,文本框上面自动显示大字号的内容)
  5. 删除某一个字段oracle,oracle添加字段或者删除字段-转载
  6. 全世界只需要两个品牌,IBM和神舟——吴海军
  7. 贪婪投影三角化算法中的参数设置
  8. Springboot实现定时发送邮件(QQ邮件为例)
  9. python中导入模块是用哪个关键字_关于python导入模块import与常见的模块详解
  10. java实例和对象对象的区别_java中实例与对象的区别和联系