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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 51单片机智能小车的通俗易懂讲解「建议收藏」

    51单片机智能小车的通俗易懂讲解「建议收藏」..从上面导航图,我们可以看到,智能小车,共分为三步外部检测,控制中心,轮子输出控制。等于人的眼睛,大脑,手脚。..因为控制中心和轮子输出控制是一样的,只有前面的外部检测,换个模块工作而已。…..在这里我们先简单了解一下,上面两个外部检测,可以扩展什么功能。,.红外线类循迹避障循迹加避障等等..超声波类避障魔法手舵机式避障等等…..

    2022年5月8日
    56
  • bridge桥接模式_Bridge模式

    bridge桥接模式_Bridge模式bridge模式动机案例要点总结笔记动机由于某些类型的固有的实现逻辑,使得他们具有两个变化维度,乃至多个维度的变换如何应对这种”多维度的变化“?如何利用面向对象技术来是使得类型可以轻松地沿着两个乃至多个方向变换而不引入额外地复杂度?案例PC端和Mobile端平台和业务分离朴素class Messager{ public: virtual void Login(string username,string password) = 0; virtual void SendM

    2022年8月11日
    6
  • 手机怎么识别图片上的文字「建议收藏」

    手机怎么识别图片上的文字「建议收藏」 识别提取文字的方法有很多,大家平时也都会使用到自己的方法,但是你所使用到的方法是不是简单而且识别效果很不错呢?其实手机里有很多的识别转换工具,但是很多的识别效果都不如人意,小编最近发现的一个简单有效的方法,一起来看看吧。1.首先在应用市场里找到如下的拍照识别文字工具,然后将其运行。2.在主页点击右下角的蓝色加号按钮然后会出现两个蓝色的小图标,分别是相册和相机,在此选择相机。…

    2022年6月12日
    38
  • Java二维数组(超详解)

    Java二维数组(超详解)Java二维数组(超详解)

    2022年7月9日
    22
  • 一阶系统又称为惯性系统_舵机惯性控制

    一阶系统又称为惯性系统_舵机惯性控制1.PID.py#PID控制一阶惯性系统测试程序#*****************************************************************##增量式PID系统##**************************************

    2022年10月4日
    2

发表回复

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

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