• SPP Net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)论文理解


    论文地址:https://arxiv.org/pdf/1406.4729.pdf

    论文翻译请移步:http://www.dengfanxin.cn/?p=403

    一、背景:

    传统的CNN要求输入图像尺寸是固定的(因为全连接网络要求输入大小是固定的)

    • crop处理,可能不包含整个物体,还会丢失上下文信息
    • warping处理,会导致图像变形
    • 以上都会导致CNN对不同scale/size泛化能力不强
     
    于是SPP做了如下改进,即将SPP层加在最后一个卷积层后面,然后再送入FC网络。 

    优点

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

    二、SPP对R-CNN的改进:

    1、使用了SPP灵活改变网络输入尺寸

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

     改进细节:

    1、SPP

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

    更多映射推理细节详见:https://blog.csdn.net/ibunny/article/details/79397399

    3、训练方式

    单一尺寸训练
    如前人的工作一样,我们首先考虑接收裁剪成224×224图像的网络。裁剪的目的是数据增强。
    多尺寸训练
    携带SPP的网络可以应用于任意尺寸,为了解决不同图像尺寸的训练问题,我们考虑一些预设好的尺寸。现在考虑这两个尺寸:180×180,224×224。我们使用缩放而不是裁剪,将前述的224
    的区域图像变成180大小。这样,不同尺度的区域仅仅是分辨率上的不同,而不是内容和布局上的不同。
    为了降低从一个网络(比如224)向另一个网络(比如180)切换的开销,我们在每个网络上训练一个完整的epoch,然后在下一个完成的epoch再切换到另一个网络(权重保留)。依此往复。实验中我们发现多尺寸训练的收敛速度和单尺寸差不多。
    多尺寸训练的主要目的是在保证已经充分利用现在被较好优化的固定尺寸网络实现的同时,模拟不同的输入尺寸。除了上述两个尺度的实现,我们也在每个epoch中测试了不同的sxs输入,s是从180到224之间均匀选取的。

    三、SPP-Net网络结构:


    左边是训练流程,右边是测试流程,注意SPP-Net是直接用SPP池化层的输出特征作Bounding Box的回归,不像R-CNN是用Conv5的特征。

    测试过程:

    输入任意尺寸大小的图像,类似R-CNN,利用SS得到近2K推荐区域

    通过卷积网络进行一次特征提取,得到特征图

    通过ROI映射计算得到推荐区域映射到特征图的特征

    输入SPP得到固定尺寸的特征

    然后类似R-CNN,通过全连接层,再输入SVM得到分类概率

    NMS处理

    对处理后的结果,结合SPP输出特征进行边框回归

    训练过程:

    1、依旧是预训练好的网络,以及2K推荐区域,得到每个区域的SPP pooling层的一维特征

    2、fine-tune(最大不同)

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

    3、SVM

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

    4、Bbox Regression

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

    四、SPP-Net缺点

    SPP-Net只解决了R-CNN卷积层计算共享的问题,但是依然存在着其他问题:

    (1) 训练分为多个阶段,步骤繁琐: fine-tune+训练SVM+训练Bounding Box

    (2) SPP-Net在fine-tune网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行fine-tune。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)

    参考资料:

    https://blog.csdn.net/bryant_meng/article/details/78615353

    https://www.jianshu.com/p/b2fa1df5e982

    https://blog.csdn.net/ibunny/article/details/79397399

  • 相关阅读:
    PAT(B) 1037 在霍格沃茨找零钱(Java)
    PAT(B) 1043 输出PATest(Java)统计
    PAT(B) 1063 计算谱半径(Java)
    绘制虚线
    contentMode
    数字签名是什么
    动态设置 button的 name 的话 闪动的问题 解决
    setValuesForKeysWithDictionary 的用法
    获得 当前时间
    iOS 键盘类型
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10417169.html
Copyright © 2020-2023  润新知