SPP-Net

作者: 两全丶 | 来源:发表于2018-09-26 00:06 被阅读0次

    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

    • 将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

    该节主要可视化了卷积神经网络的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

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

    2.3 Training the Network

    Single-size training

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

    SPP的实现

    • 使用Sliding Window策略
      • 假设输入尺寸为a \times a
      • 假设网格划分尺寸为n \times n
    • Window Size: ceil(\frac{a}{n})
    • Strid: floor(\frac{a}{n})
    • 实现l-level的金字塔
    • 最后拼接起来不同金字塔级别得到的特征向量

    Multi-size training

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

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

    目的

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

    3. SPP-Net For Image Classification

    3.1 Experiments on ImageNet2012 Classification

    数据增强

    和AlexNet是一样的

    • Resize图片使得(w,h)较小的一个的维度是256
    • 从图片中间以及四个角crop出224 \times224大小的图片
    • 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出224 \times 224得到五张图片
      • 然后再将他们水平翻转得到10张图片
    • 然后将score进行平均

    多个尺度输入多个View

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

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

      • 对于18-view
      • 从中间和四个角,以及四个边的中间crop出224 \times 224得到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到min(w, h) = s

    特征提取

    • 将一整张图送入CNN提取特征
    • 用4-level的SPP(1 \times 1, 2 \times 2, 3 \times 3, 6 \times 6)
      • 总共50个bin
      • 输出size为256 \times 50
    • 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(橙色框的中心点)

    • 对于 Convolution/Pooling layer:
    • 对于Neuronlayer(ReLU/Sigmoid/..) :

    SPP-Net映射方法

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

    • 左上角的点(x,y)映射到 feature map上的(x^{'},y^{'})使得 在原始图上感受野(上图绿色框)的中心点 与(x,y)尽可能接近。
    • 把原始图片中的ROI映射为 feature map中的映射区域(上图橙色区域)其中 左上角取:
      右下角的点取:
      下图可见

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

    相关文章

      网友评论

          本文标题:SPP-Net

          本文链接:https://www.haomeiwen.com/subject/fovroftx.html