SPPnet 笔记

SPPnet 笔记ECCV2014的文章,后来又扩展成了TPAMI整体的先后次序:RCNN(CVPR2014)->SPPnet(ECCV2014)->FastRCNN(ICCV2015)->FasterRCNN(NIPS2015)现有的深度卷积网络需要固定大小的输入图片(比如224×224224\times224224×224),这个要求人工设计的痕迹过于明显,并且可能会降低一…

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

在这里插入图片描述
ECCV 2014 的文章,后来又扩展成了 TPAMI

整体的先后次序:RCNN(CVPR2014)->SPPnet(ECCV2014)->Fast RCNN(ICCV2015)->Faster RCNN(NIPS2015)

现有的深度卷积网络需要固定大小的输入图片(比如 224 × 224 224\times 224 224×224),这个要求人工设计的痕迹过于明显,并且可能会降低一个任意形状的图片的识别准确度。这篇文章提出了 spatial pyramid pooling 来消除这一限制。新提出的叫做 SPPnet 的框架,可以不考虑图像的大小就能生成固定长度的特征表示(fixed-length representation)。pyramid pooling 对物体的形变也很鲁棒。这个方法不但对于分类有好处,对于目标检测也很有好处。在目标检测中使用 SPPnet ,首先从整张图只计算一次 feature map,然后从任意区域 pool features 来生成定长表示,这些定长表示被用来对 detector 进行训练。这个方法避免了对卷积特征的重复计算。在测试时,SPPnet 比 RCNN 快了 24-102 倍。

现有的网络只能处理固定大小的图片,对于任意大小的图片,现在的方法通常是通过 cropping (裁剪)或 warping (扭曲)来使输入图像能够统一变成一个固定的长度。但是 cropped region 不一定包含整个物体,而 warped content 可能会造成不想要的几何形变。由于这样的方法造成的内容损失或失真,识别的准确率因此受到影响(recognition accuracy can be compromised due to the content loss or distortion)。另外,预先定义好的尺度不一定适合所有物体。

在这里插入图片描述
那么问题来了,为啥 CNN 需要定长的输入?CNN 包括两部分:卷积层和全连接层。卷积层以滑动窗口的方式来进行处理,其并不需要定长输入,它可以产生任意大小的特征图。而全连接层需要定长输入。所以问题主要出现在全连接层这里。

SPPnet 就是用来去掉定长这一限制的。具体地,我们在最后一个卷积层后面加了一个 SPP layer,SPP layer pools the features and generates fixed-length outputs ,然后这些定长输出再喂给全连接层(或其他的分类器)。换句话说,我们在卷积层和全连接层之间进行了一些信息聚合来避免从一开始就进行 cropping 和 warping 。

Spatial pyramid pooling[14,15] (popularly known as spatial pyramid matching or SPM[15]),作为 Bag-of-Words(BoW)[16] 的一个扩展版,是计算机视觉领域中一个非常成功的方法。它把图像分成多个区域(from coarse to fine),然后把他们中局部的特征聚合起来。SPP 在CNN出现之前长时间以来都是分类[17,18,19]以及检测[20]竞赛中使用的关键构件。然后 SPP 在 CNN 中还没有被考虑过。SPP 对于 deep CNN 有以下几个重要的性质:

  1. SPP 可以不考虑输入的大小来生成定长输出,但是之前的 sliding window pooling (AlexNet 中的 max pooling 吧?) 不能
  2. SPP 使用多级的空间盒子,但是 sliding window pooling(应该就是指 max pooling) 只使用一个单一的 window size。多级的 pooling 已经被证明对于物体形变十分鲁棒[15]。
  3. SPP 可以对多个尺度上的 feature 进行池化(pool)操作

在这里插入图片描述
在这里插入图片描述
SPPnet 不能能够从任意大小的图像中提取特征来进行测试,也允许我们在训练时能够用多种尺度和形状的图片。使用变长的图像可以增加尺度不变性并且减少过拟合。为了使一个网络能够接受变长输入,我们用共享所有参数的多个网络来进行近似,其中每一个网络都是用定长输入进行训练的。在每一个 epoch 中我们用一个给定的输入大小来对网络进行训练,然后在下一个 epoch 时切换到另外一种输入尺寸(就是训练一个网络,输入图片有一个放缩范围?应该就是 multi-scale training 吧)

RCNN 中计算特征非常耗时,因为它不断地在数千个 warped regions per image 上使用 deep CNN 来提取特征,但是SPPnet 只需要在整张图片上提取特征一次,然后在 feature map 上用 SPPnet 来提取特征。这个方法比 RCNN 要快一百倍。注意到在 feature map 上(而不是 image regions 上)进行 detector 的训练和运行是更加受欢迎的一个想法(比如 OverFeat,DPM,HOG)。

正文开始:Deep networks with Spatial Pyramid Pooling

Convolutional layers and feature maps

考虑流行的七层网络(AlexNet,ZFNet),前五层是卷积层,其中一些后面有 pooling 层,这些 pooling 层也可以被认为是 convolutional 的,因为他们使用的也是 sliding windows 的操作。最后两层是全连接层,输出是 N-way softmax ,其中 N 为类别的数量。

其中卷积层的输出和输入图片有着差不多的宽高比,这些输出被叫做 feature maps ,他们不仅包含响应的强度,也包含空间位置信息。卷积层不要求定长输入。这些由 deep CNN 生成的 feature map 和传统方法得到 feature map 是类似的。比如 SIFT vector 或 image patches 通过 vector quantization, sparse coding 或 Fisher kernels 来提取并编码。这些编码的特征包含特征图,然后再用 Bag-og-Words(BoW) 或 spatial pyramids 来 pool 一下。类似地,deep CNN 的 feature 也可以这样 pool 一下hhh

The spatial pyramid pooling layer

卷积层变长入变长出,分类器(SVM/softmax)或全连接层接受定长入(fixed-length vectors)。这些定长向量可以通过 Bag-of-Words 来得到。Spatial pyramid pooling 改进了 BoG,它可以通过在局部空间盒子中维持空间信息。这些空间盒子大小正比于图像大小,因此盒子的数量是固定的。可以和 sliding window pooling 进行比较,sliding window pooling 的 window 数量是和输入大小有关的。

为了使 deep network 接受任意大小输入,我们把最后一个 pooling 层改成了 spatial pyramid pooling layer

在这里插入图片描述
SPP layer 的输出是 k M kM kM 维的向量,其中 M M M 为盒子的个数, k k k 是最后一层卷积层的 filters 数(此处是图中的 256)

有了 SPP layer 后,输入图像便可以是任意大小——不仅是任意宽高比,而且是任意尺度。我们可以将输入图像 resize 成任意尺度,然后用到同样的网络中。当输入的图像在不同尺度时,网络会在不同的尺度提取特征。在传统方法中 scale 扮演了一个重要的角色。比如 SIFT vector 通常就是在多个尺度下进行提取的(通过 patches 的大小和 Gaussian filters 来确定)。

有趣的是,最粗略的 pyramid level 只有一个盒子,这个盒子的范围是全图,相当于 global pooling 的操作(更准确地说是 global max pooling)。有很多同期工作研究了这种操作,Network in Network 和 GoogLeNet 中 global average pooling 被用来减少模型的大小并减少过拟合现象。在 VGG 中 global average pooling 在测试时所有的全连接层之后使用,目的是提高准确率。在 [34] 中,global max pooling 被用来进行弱监督目标检测。global pooling 的操作对应于传统的 Bag-of-Words 方法。
在这里插入图片描述
Training the network

Single-size training
考虑最后一卷积层的输出大小为 a × a a\times a a×a,pyramid level 的盒子个数为 n × n n\times n n×n,则 max pooling 时的每个窗口大小为 ⌈ a / n ⌉ \lceil a/n\rceil a/n,stride 为 ⌊ a / n ⌋ \lfloor a/n\rfloor a/n ,比如 a = 13 a=13 a=13 n = 3 , 2 , 1 n=3,2,1 n=3,2,1,则每个 level 对应的窗口大小分别为 5 , 7 , 13 5,7,13 5,7,13,stride 为 4 , 6 , 13 4,6,13 4,6,13

在这里插入图片描述
Multi-size training

SPPnet 可以接受任意尺度的图像。为了解决训练过程种多变的图像尺度问题,我们考虑一系列提前定义好的尺寸: 180 × 180 180\times 180 180×180 以及 224 × 224 224\times224 224×224 ,并不是从中截出来 180 × 180 180\times 180 180×180,而是 resize 成 180 × 180 180\times 180 180×180

直接看 detection 的部分:

复习 RCNN:RCNN 首先通过 SS 提出大约 2000 个候选框,然后每个窗口被 resize 成固定的长度( 227 × 227 227\times 227 227×227)然后再用一个网络来对每个窗口中的图像进行特征提取。最后在这些提取的特征上面训练一个 SVM 。由于 RCNN 每个图片要重复两千多次特征提取,因此速度很慢,提特征是主要瓶颈。

SPPnet 从整张图只提一次特征,然后通过 SPP layer 在每个 window 上提定长向量的特征。

在这里插入图片描述
Fast RCNN 和 SPPnet 有什么区别?

Fast RCNN 也是用其他方法(比如SS)生成 proposal,RoI pooling 的操作和 SPP 非常像,不同之处在于 SPP 有多个 level 的输出,最终聚合在一起,RoI pooling 则只有最后一个窗口(如 7 × 7 7\times7 7×7

SPPnet 最后对每个 proposal 生成的特征进行分类,使用的方法仍然是 SVM,但是 Fast RCNN 把 classification 和 bbox regression 以及前面的 RoI pooling layer 整合在了一个网络里了,除了前面的 proposal,后面部分都是联合训练的。

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

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

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


相关推荐

  • java四舍五入(保留两位小数)[通俗易懂]

    java四舍五入(保留两位小数)[通俗易懂]1.最简单的方法:floata=123.4567f;这里的100就是2位小数点,如果要其它位,如4位,这里两个100改成10000floatb=(float)(Math.round(a*100))/100;doublef=111231.5585;BigDecimalb=newBigDecimal(f);doublef1=b.setScale(2,BigDecimal.ROUND_HALF_UP

    2022年5月16日
    40
  • Random函数用法

    Random函数用法一、random模块简介Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。二、random模块重要函数1)、random()返回0<=n<1之间的随机实数n;2)、choice(seq)从序列seq中返回随机的元素;importrandoma=rand…

    2022年4月28日
    45
  • oracle 第一范式,数据库范式之第一范式

    oracle 第一范式,数据库范式之第一范式数据库范式(DatabaseNormalization)设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,还又称完美范式)。首先要明白”范式(NF)”…

    2022年5月24日
    33
  • 设置ntp服务器同步时间_安卓设置ntp服务器地址

    设置ntp服务器同步时间_安卓设置ntp服务器地址有时服务器需要调整时区并调整时间,需要用到的命令:ntpdate一般Linux系统都默认安装了NTP服务,如果没有安装的话,也可以直接使用yum安装,yum安装命令为:yuminstall-yntpdate首先修改一下时区为上海时区:cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime然后选择国家授时中心的服务器地址:ntpdate210…

    2022年5月3日
    307
  • 计算机高配表要表格,为何高配电脑还会卡? 因为你没选择FreeSync套装

    计算机高配表要表格,为何高配电脑还会卡? 因为你没选择FreeSync套装可能有很多玩家在网络对战游戏中都遇到如此状况:电脑配置并不低,但游戏画面依然不够顺滑,不但经常卡顿,而且明明先瞄准敌人开枪,敌人没死而自己被秒掉。其实,这并不是因为玩家枪法太菜,问题在很大程度上出在玩家选择的显卡与显示器上。那到底玩家的显卡和显示器上到底有什么问题?让我们为大家分析一下吧。高配电脑可以提供高帧速,但并不一定无卡顿高配置的电脑当然能提供强劲的性能,在游戏中自然可以提供很高的帧速。但为…

    2022年6月1日
    32
  • java文件上传下载接口_java 文件上传下载

    java文件上传下载接口_java 文件上传下载翻新十年前的老项目,文件上传改为调用接口方式,记录一下子~~~java后台代码://取配置文件中的上传目录@Value(“${uploadPath}”)Stringpath;//文件上传接口@RequestMapping(value=”upload”)@ResponseBodypublicStringgetMobileAuthCode(HttpServletRequestreques…

    2022年5月15日
    39

发表回复

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

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