SPPnet笔记

SPPnet笔记论文:SpatialPyramidPoolinginDeepConvolutionalNetworksforVisualRecognitionMotivationR-CNN等神经网络都要求输入图片是固定尺寸,比如R-CNN要求输入图片是224×224,这样就限制了其他长宽比和其他尺寸的输入图片。不同长宽比和不同尺寸的输入图片是有意义的,首先,图片数据都不是同一尺寸的,他们大小…

大家好,又见面了,我是你们的朋友全栈君。

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

Motivation

R-CNN等神经网络都要求输入图片是固定尺寸,比如R-CNN要求输入图片是224×224,这样就限制了其他长宽比和其他尺寸的输入图片。不同长宽比和不同尺寸的输入图片是有意义的,首先,图片数据都不是同一尺寸的,他们大小不一,长宽比不同。第二,调整图片的长宽比可以有助于识别图中物体,调整图片的尺寸可以帮助学习器学习太大或太小的物体。

在R-CNN中,输入的图片是裁剪的区域,或者把区域缩放成目标大小,如下图所示:
crop and warp
裁剪区域可能只包含物体的部分区域(如左上图),缩放区域导致物体变形(如右上图),这些都可能会影响识别和检测。

Innovation

卷积网络要求固定尺寸输入图片的原因在于全连接层要求固定输入,卷积层和池化层并没有这种要求。作者结合图像处理的图像金字塔算法,提出了空间金字塔池化层,使得神经网络能够接收任何尺寸的输入图片。空间金字塔池化层把任意大小的feature map转换成固定长度的特征向量,从而能够传输给全连接层。

下图是空间金字塔池化网络的结构:
spatial pyramid pooling network structure
上部分是传统网络的结构,下部分是空间金字塔池化网络结构,可以看到空间金字塔池化层可以避免裁剪和缩放输入图片。

Adavantage

  • SPP可以生成一个固定长度的输出,忽视输入大小,而滑动窗体池化层不能。
  • SPP使用多级别空间bins,而滑动窗体池化使用一个窗体大小。多级别池化对物体变形有很好的鲁棒性。
  • 因为输入尺寸的灵活性,SPP可以池化不同尺寸提取的特征。

Spatial Pyramid Pooling Layer

空间金字塔池化层结构:
Spatial Pyramid Pooling Layer structure

空间金字塔池化层位于卷积层与全连接层之间,替代原来最后一个池化层。空间金字塔池化层可以有几个等级,上图有{1, 2, 4}个等级,分别把feature map分成1,4,16个bin,每个bin进行池化,作者使用最大池化。上图的池化操作产生21个bin,把这21个bin输出拼接在一起,然后输出21×256大小的特征(256是feature map的通道数)。

设最后卷积层输出的feature map为 a × a a \times a a×a,一个金字塔等级为n,有 n × n n \times n n×n个bin,那么这等级的池化窗口大小为 ⌈ a / n ⌉ \lceil a/n \rceil a/n,步长为 ⌊ a / n ⌋ \lfloor a/n \rfloor a/n

下图一个具体的池化例子:
an example 3-level pyramid pooling
上部分表示不同级别金字塔的池化操作,下部分表示之后全连接层。

Multi-size training

作者使用caffe训练SPPnet网络,但是caffe不支持多尺寸图片输入,为了实现多尺寸训练,作者实现两个网络,一个网络输入224×224大小的图片,另一个网络输入180*180大小的图片。这两个网络共享参数。训练时,在一个网络中训练一个epoch,然后切换到另外一个网络训练一个epoch。

Object Detection

把空间金字塔池化层加入到R-CNN中,使得R-CNN能够接收任意输入图片。为了加快R-CNN的运行,输入网络的是整张图片,计算出最后的feature map。然后从feature map中提取候选区域的特征向量进行分类和定位,如下图所示。
Pooling features from arbitrary windows on feature maps

这里有一个问题,就是如何确定原图的候选区域位置映射到卷积后feature map的位置。假设卷积和池化操作padding的大小为 ⌊ p / 2 ⌋ \lfloor p/2 \rfloor p/2,其中p为过滤器的大小。原图中点 ( x , y ) (x, y) (x,y)经过映射后在feature map的位置为 ( x ′ , y ′ ) (x', y') (x,y),映射关系为 ( x , y ) = ( S x ′ , S y ′ ) (x, y) = (Sx', Sy') (x,y)=(Sx,Sy)。这里S是所有步长的乘积(所有卷积和池化的步长)。假设某个候选区域在原图的左上角坐标为 ( x , y ) (x, y) (x,y),在feature map中的坐标为 ( ⌊ x / S ⌋ + 1 , ⌊ y / S ⌋ + 1 ) (\lfloor x/S \rfloor + 1, \lfloor y/S \rfloor + 1) (x/S+1,y/S+1)。假设某个候选区域在原图的右下角坐标为 ( x , y ) (x, y) (x,y),在feature map中的坐标为 ( ⌈ x / S ⌉ − 1 , ⌈ y / S ⌉ − 1 ) (\lceil x/S \rceil – 1, \lceil y/S \rceil – 1) (x/S1,y/S1)。如果padding大小不是 ⌊ p / 2 ⌋ \lfloor p/2 \rfloor p/2,还需要计算偏移量。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131382.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstorm2021永久激活码【在线破解激活】

    phpstorm2021永久激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    51
  • CreateProcess和WinExec

    CreateProcess和WinExecCreateProcess非阻塞运行,而WinExec为阻塞运行,它非要等到返回时才继续执行。在两个进程共享同一个端口时,为了能让一个退出另一个申请,必须用函数CreateProcess,等到我的端口资源释放后,在运行另一个进程进行申请

    2022年7月11日
    42
  • require和import区别

    require和import区别区别 1 模块加载的时间 require 运行时加载 import 编译时加载 效率更高 区别 2 模块的本质 require 模块就是对象 输入时必须查找对象属性 import ES6 模块不是对象 而是通过 export 命令显式指定输出的代码 再通过 import 命令输入 这也导致了没法引用 ES6 模块本身 因为它不是对象 CommonJS 模块 let exists read

    2025年6月10日
    2
  • QQ图片回复变色:从制作到发送「建议收藏」

    QQ图片回复变色:从制作到发送「建议收藏」如果您不知道这指的是什么,您可能不需要阅读本文。原料Photoshop,建议使用CC新版。手机QQ,电脑版未测试。制作用Photoshop打开图片,并从“图层”窗口点击

    2022年8月10日
    6
  • Matlab中meshgrid的用法简介

    Matlab中meshgrid的用法简介meshgrid:网格1、主要使用的函数为[X,Y]=meshgrid(xgv,ygv);meshgrid函数生成的X,Y是大小相等的矩阵,xgv,ygv是两个网格矢量,xgv,ygv都是行向量。X:通过将xgv复制length(ygv)行(严格意义上是length(ygv)-1行)得到Y:首先对ygv进行转置得到ygv’,将ygv’复制(length(xgv)-1)次得到。…

    2022年6月12日
    89
  • 数据包络分析–SBM模型(第一篇)

    数据包络分析–SBMModelDEA–SBMmodel扩充知识–radialandnon-radialSBMmodel模型解释1模型解释2变型对偶模型SBM-efficiencySBMprojectionSBM与CCR作者有话说DEA–SBMmodel扩充知识–radialandnon-radial这里,我们先介绍一个知识,径向与非径向。这两个概念的区别只存在于投入与产出项,看它们是否能按一个比例进行放缩。如果能的话,这个模型便是径向的;反之,则是非径向的。比如说,在第一章

    2022年4月4日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号