主要参考博客: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. 【C#】using用法
  2. 手动启动 oracle 服务
  3. 【Python-ML】探索式数据分析EDA(Exploratory Data Analysis)
  4. android 实训的背景,Android实训项目作业.doc
  5. gRPC的那些事 - streaming
  6. 最新综述 | 强化学习中从仿真器到现实环境的迁移
  7. 函数与导数题目类型和解法思路的总结
  8. java wed登录面 代码_JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)...
  9. erp系统是什么东西
  10. Tensor看这一篇就够了!
  11. CMSampleBufferRef获取h264 char*数据及sps/pps
  12. 使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
  13. python支持双向索引_python3 deque 双向队列创建与使用方法分析
  14. ISIS协议与Quagga ISIS配置
  15. Tcp滑动窗口协议简介
  16. 带温度补偿RTC芯片的选型和应用
  17. 如何批量PDF转换JPG
  18. Carbon —— 代码分享利器
  19. 定制linux 安装光盘
  20. 如何规避海外置业风险,2019必备海外房产投资技巧

热门文章

  1. Linux_创建日期格式的文件
  2. Redis 性能优化思路
  3. linux scp用法 详(转)(
  4. 主动式电容笔哪个牌子好?主动式电容笔推荐
  5. 网络舆情监控平台用TOOM,网络舆情监控记录表?
  6. Elmo运动控制器 —— Maestro Software编程实践指南
  7. 《MacWorld》杂志关于MacBook Air的FAQ
  8. 佳能相机里误删的照片怎么恢复
  9. 为什么 wireguard-go 高尚而 boringtun 孬种
  10. quartz 表结构、配置文件、实现说明