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


相关推荐

  • Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能

    本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自行查阅相关知识。 本篇的项目主要是一个学习Spring websocket和STOMP的项目,基于Spring4.0之上。因为Spring4.0之上才支持Websocket。例子比较的简单,但是总体实

    2022年2月26日
    53
  • Tomcat服务器下载、安装、配置环境变量教程(超详细)

    Tomcat服务器下载、安装、配置环境变量教程(超详细)未经我的允许,请不要转载我的文章,在此郑重声明!!!请先配置安装好Java的环境,若没有安装,请参照我博客上的步骤进行安装!安装Java环境教程https://blog.csdn.net/qq_40881680/article/details/83585542Tomcat部署Web项目(一)·内嵌https://blog.csdn.net/qq_40881680/article/d…

    2022年4月27日
    95
  • 浅谈Perl正则表达式

    浅谈Perl正则表达式一、简介Perl正则表达式中模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即Perl正则表达式中模式def。其用法如结合函数split将字符串用某Perl正则表达式中模式分成多个单词:@array=split(//,$line);二、匹配操作符=~、!~=~检验匹配是否成功:$result=$var=~/abc/;若在该字符串中找到了该Perl正则表达式中模式,

    2022年5月31日
    29
  • 【Android】Android加密和解密方式

    【Android】Android加密和解密方式一、不可逆加密不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。如信息摘要(MessageDigest)和安全散列(SecureHash)算法属于此类,常见的算法包括MD5、SHA1、PBKDF2、bcrypt等。特点:使用MD5和SHA进行加解密://MD5加密privatestaticStringt

    2022年5月17日
    43
  • [转]软件开发工作量/费用估算

    [转]软件开发工作量/费用估算软件开发工作量/费用估算2018-05-0308:39:20 NOW_wyp软件开发工作量/费用估算2018-05-0308:39:20 NOW_wyp软件开发工作量/

    2022年7月3日
    24
  • MySQL练习题~45道

    MySQL练习题~45道创建表并添加数据–经典SQL练习题CREATETABLESTUDENT8(SNOVARCHAR(3)NOTNULL,SNAMEVARCHAR(4)NOTNULL,SSEXVARCHAR(2)NOTNULL,SBIRTHDAYDATETIME,CLASSVARCHAR(5));CREATETABLECOURSE(CNOVARCHAR(5)NOTNULL,CNAMEVARCHAR(10)NOTNULL,TNOVARCHAR(10)NOT

    2022年9月2日
    3

发表回复

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

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