SPP-Net

SPPNet

Abstract

Key insight

  • 传统的CNN要求输入图像尺寸是固定的,所以通常要改变图片的size/scale,这样会损失信息

Break point

  • 提出了Spatial Pyramid Pooling,可以将任意size的feature map池化成固定大小

1. Introduction

传统CNN的问题

传统的CNN要求输入图像尺寸是固定的

  • crop处理,可能不包含整个物体,还会丢失上下文信息
  • warping处理,会导致图像变形
  • 以上都会导致CNN对不同scale/size泛化能力不强
SPP-Net_第1张图片

原因

  • 全连接网络要求输入大小是固定的

SPP

  • 将SPP层加在最后一个卷积层后面,然后再送入FC网络

优点

  • 不管输入尺寸为多少,SPP都能生成固定尺寸的输出,这使得CNN无需固定输入图片尺寸
    • CNN使用多尺度图片输入进行训练,增加了scale-invariance,减少了过拟合
  • SPP运用了多尺度的信息,空间信息更加丰富,使得CNN对物体的形变更加robust
  • SPP可以广泛运用在任何CNN架构上,提高performance

SPP对R-CNN的改进

R-CNN的问题

  • 对生成的多个region proposal都独立提取特征,存在大量重复的计算(region有重叠部分)

改进

  • 将整张图片一次性输入CNN提取特征,将提取出的region proposal的坐标映射到feature map上,共享了计算
  • 使用了SPP

2. Deep Networks With Spatial Pyramid Pooling

2.1 Convolutional Layers and Feature Maps

SPP-Net_第2张图片

该节主要可视化了卷积神经网络的feature map,并分析了一些filter的识别的模式(在CS231n中有提到过这种方法)

feature map的可视化

直接画图就可以了

filter识别模式的分析

  1. 挑出某一个卷积层中的某一个filter
  2. 在数据集中,寻找在该filter上有最大activation的图片(应该是通过feature map的L2 norm来判断的?不太清楚)
  3. 在原图中标注出activation最强的部分

可以发现特定的filter在寻找一些特定模式

2.2 The Spatial Pyramid Pooling Layer

SPP-Net_第3张图片
  • 将feature map(假设有K个channel)划分为固定数量的bin(见上图的网格,假设bin的数目为),在每个bin里使用Max Pooling(或者AvgPooling)
  • 最终每个金字塔得到-dimension的特征向量,然后拼接起来
  • 值得注意的是,最粗粒度的金字塔级别,只是用了一个bin,这等同于Global Average Pooling

2.3 Training the Network

Single-size training

  • 从图上crop出大小的图片
  • 目的是测试SPP的实现,并且实验表明了SPP可以提高accuracy

SPP的实现

  • 使用Sliding Window策略
    • 假设输入尺寸为
    • 假设网格划分尺寸为
  • Window Size:
  • Strid:
  • 实现的金字塔
  • 最后拼接起来不同金字塔级别得到的特征向量

Multi-size training

  1. 设定一些预先选定的尺寸
    • 在文中选用 和
    • 如何得到的图片?
      • 将的图片resize到, 使得两图只是scale不一样,但是内容布局一样
  2. 训练两个网络,每训练一个epoch,交换两个网路的输入图片尺寸(应该用一个网络就够了吧?)

注意在测试时不需要用multi-size

目的

  • 模拟不同输入尺寸的图片的训练

3. SPP-Net For Image Classification

3.1 Experiments on ImageNet2012 Classification

数据增强

和AlexNet是一样的

  • Resize图片使得(w,h)较小的一个的维度是256
  • 从图片中间以及四个角crop出224大小的图片
  • Horizontal flipping
  • Color altering

正则化

  • Dropout

学习率

  • 从0.01开始,错误率不下降的时候,除以10

3.1.1 Baseline Network Architectures

3.1.2 Multi-level Pooling Improves Accuracy

  • 多个金字塔层级的池化提高准确率

3.1.3 Multi-size Training Improves Accuracy

  • 多输入尺度训练提高准确率

3.1.4 Full-image Representations Improve Accuracy

  • 不进行crop,直接将全图送入网络训练,提了准确率

3.1.5 Multi-view Testing Improve Accuracy

固定尺度输入多个View

  • 测试时,Resize图片使得(w,h)较小的一个的维度是固定的大小S(比如256之类的)

  • 然后将图片再做一系列的augementation,将得到的图片都送入CNN得到score

    • 在标准的10-view里面,S=256
    • 从中间和四个角crop出得到五张图片
    • 然后再将他们水平翻转得到10张图片
  • 然后将score进行平均

多个尺度输入多个View

  • 测试时,Resize图片使得(w,h)较小的一个的维度是固定的大小S

    • 由于是多尺度,这里的S有224,256,300,360,448,560
  • 然后将图片再做一系列的augementation,将得到的图片都送入CNN得到score

    • 对于18-view
    • 从中间和四个角,以及四个边的中间crop出得到9张图片
    • 然后再将他们水平翻转共得到18张图片
  • 然后将score进行平均

3.1.6 Summary and Results for ILSVRC 2014

3.2 Experiments on VOC 2007 Classification

3.3 Experiments on Caltech101

4 SPP-Net For Object Detection

Key Point

  • 直接将一整张图片送入CNN提取特征
  • 将Regin Proposal映射到feature map上
  • 对proposal使用SPP

Fine-tuning

  • 只fine-tune全连接网络(感觉做法有问题)
    • FC6,FC7,FC8
    • FC8被换成了21-way(20个类+背景)
      • 初始化为Guassian(0, 0.01)
  • learning rate从1e-4到1e-5
    • 250K个batch使用1e-4
    • 50k个batch使用1e-5
  • 正负例平衡
    • 每个batch中25%是正例,75%为负例
  • IOU threshold
    • 正例为0.5-1
    • 负例为0.1-0.5

Proposal

  • 使用Selective Search的fast模式
  • 一张图大概提取2000个proposal

预处理

  • 减去均值(per-pixel)

  • 将图片resize到

特征提取

  • 将一整张图送入CNN提取特征
  • 用4-level的SPP()
    • 总共50个bin
    • 输出size为
  • FC输出的IOU threshold没说

训练SVM

  • IOU threshold为0.3
  • 负例互相之间IOU超过70%则去除一个
  • 使用了hard negtive mining的策略来训练SVM

NMS

  • 使用NMS来去除多余结果
    • IOU阈值为0.3

Bbox Regression

  • 使用了和R-CNN里一样的边框回归来refine坐标
  • IOU阈值为0.5

Mapping a Window to Feature Maps

Feature map之间坐标映射关系

我们需要知道网络里面任意两个feature map之间的坐标映射关系(一般是中心点之间的映射),如下图,我们想得到map 3上的点p3映射回map 2所在的位置p2(橙色框的中心点)

SPP-Net_第4张图片
  • 对于 Convolution/Pooling layer:
  • 对于Neuronlayer(ReLU/Sigmoid/..) :

SPP-Net映射方法

SPP-net 是把原始ROI的左上角和右下角 映射到 feature map上的两个对应点。 有了feature map上的两队角点就确定了 对应的 feature map 区域(下图中橙色)。

SPP-Net_第5张图片
  • 左上角的点映射到 feature map上的使得 在原始图上感受野(上图绿色框)的中心点 与尽可能接近。
  • 把原始图片中的ROI映射为 feature map中的映射区域(上图橙色区域)其中 左上角取:

    右下角的点取:

    下图可见

的作用效果分别是增加和减少。也就是 左上角要向右下偏移,右下角要想要向左上偏移。个人理解采取这样的策略是因为论文中的映射方法(左上右下映射)会导致feature map上的区域反映射回原始ROI时有多余的区域(下图左边红色框是比蓝色区域大的)

SPP-Net_第6张图片

你可能感兴趣的:(SPP-Net)