• 【目标检测】two-stage------SSP-Net浅析-2014


    every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
    https://blog.csdn.net/weixin_39190382?spm=1010.2135.3001.5343

    0. 前言

    记录SSP-Net,阅读前建议先看R-CNN

    时间: 2015
    论文: https://arxiv.org/pdf/1406.4729.pdf

    1. 正文

    1.1 概述

    SPP-Net是在R-CNN基础上进行改进的。(速度约是R-CNN的100倍)

    在R-CNN中,我们会先通过seletive search得到2000个左右的候选框,然后将这些候选框长宽(大小)进行变换(如,统一变成227×227)输入到CNN中用于提取特征。存在如下问题:

    • 这些候选框存在重叠,这些部分在CNN会被重复的计算,是冗余的(为什么会有重叠呢?假如一个人抱了一个狗,那么可能就会生成两个有重叠的候选框,可参考R-CNN文章和其中的图
    • R-CNN中需要输入的图像尺寸固定大小(227×227),那么就需要对输入的图像(候选框)进行一定的(缩放、裁剪)变换,这些变换会导致信息丢失。

    主要区别简述:

    • R-CNN(左图),会将每个候选框都输入进网络
    • SPP-Net(右图),将整图(原图)直接输入进行网络,然后经过SPP(金字塔池化)
      请添加图片描述

    1.2 流程

    1. 通过seletive search 生成候选框
    2. 原始图像输入卷积网络用于提取特征,生成特征图
    3. 根据候选框在原图的位置 ,通过上面经过的卷积网络的映射关系,将候选框映射到特征图的相应区域
    4. 候选框在特征图的区域输入到金字塔池化层,进行特征数量固定
    5. 将固定好的特征输入到全连接层中,得到输出。
    6. 将金字塔池化层得到的特征,用SVM训练;将卷积池化层的特征拿去做边框回归。

    和R-CNN不同的是,不是将每个候选框输入到卷积网络,而是先将原图输入到卷积网络生成特征图。
    这里为了便于描述,我们将卷积网络称为函数。原图输入函数函数生成特征图。根据这个映射关系,在特征图上找到候选框对应的候选框特征图。这样就不用每个候选框都经过函数。

    1.3 主要步骤讲解

    大部分和R-CNN类似,不重复讲解,可参考R-CNN文章

    1.3.1 候选区域(原图与特征图)的映射

    原图经过卷积网络生成特征图,我们现在需要通过这种映射关系找到最初经过seletive search 后生成的候选区域在特征图上的映射,这样就不用将每个候选区域都输入进卷积网络了。
    请添加图片描述

    这种映射关系主要体现在两方面,一是长宽的变换,一个是坐标的变换。

    1. 长宽的变换

    长宽的变换主要受卷积和池化的影响,具体可参考
    文章1
    文章2

    2. 坐标的变换

    p i = s i ∗ p i + 1 + [ ( k i − 1 ) / 2 − p a d d i n g ] p_i = s_i * p_{i+1} + [(k_i - 1) / 2 - padding] pi=sipi+1+[(ki1)/2padding]

    符号含义
    p i p_i pi在i层的坐标值
    s i s_i sii层的步长
    k i k_i kii层的卷积核大小
    paddingi层的填充

    SSP-Net对上面坐标关系做了简化:
    令每一层的padding = ⌊ k i / 2 ⌋ ⌊ k_i / 2 ⌋ ki/2
    原式变为:

    p i = s i ∗ p i + 1 + [ ( k i − 1 ) / 2 − ⌊ k i / 2 ⌋ ] p_i = s_i * p_{i+1} + [(k_i - 1) / 2 - ⌊ k_i / 2 ⌋ ] pi=sipi+1+[(ki1)/2ki/2⌋]

    k i k_i ki 为奇数, [ ( k i − 1 ) / 2 − ⌊ k i / 2 ⌋ ] = 0 [(k_i - 1) / 2 - ⌊ k_i / 2 ⌋ ] = 0 [(ki1)/2ki/2⌋]=0
    p i = s i ∗ p i + 1 p_i = s_i * p_{i+1} pi=sipi+1

    k i k_i ki 为偶数, [ ( k i − 1 ) / 2 − ⌊ k i / 2 ⌋ ] = − 0.5 [(k_i - 1) / 2 - ⌊ k_i / 2 ⌋ ] = - 0.5 [(ki1)/2ki/2⌋]=0.5
    p i = s i ∗ p i + 1 − 0.5 p_i = s_i * p_{i+1} - 0.5 pi=sipi+10.5

    又因为, p i p_i pi 是坐标值,不可能取小数,所以基本认为
    p i = s i ∗ p i + 1 p_i = s_i * p_{i+1} pi=sipi+1
    即,当前坐标只与前一层有关
    通过映射关系,我们可以确定上图中蓝色区域在feature map中的橙色区域的位置。

    那么从原图 到特征图的映射关系为:

    • 每层填充为 ⌊ k i / 2 ⌋ ⌊ k_i / 2 ⌋ ki/2,得到简化公式: p i = s i ∗ p i + 1 p_i = s_i * p_{i+1} pi=sipi+1
    • 上面公式级联,得到 p o = S ∗ p i + 1 p_o = S*p_{i+1} po=Spi+1,其中, S = ∏ i = 0 n s i S = \prod_{i=0}^n s_i S=i=0nsi
    • 对于feature map 上的( x ′ , y ′ x',y' x,y),它在原图中的对应点为(x,y) = ( S x ′ , S y ′ Sx',Sy' Sx,Sy

    论文中将原图候选框映射到特征图中,
    其中,左上角为:
    x ′ = ⌊ x / S ⌋ + 1 x' = ⌊ x/ S ⌋ + 1 x=x/S+1
    y ′ = ⌊ y / S ⌋ + 1 y' = ⌊ y/ S ⌋ + 1 y=y/S+1

    右下角点:
    x ′ = ⌈ x / S ⌉ − 1 x' = ⌈ x/ S ⌉ - 1 x=x/S1
    y ′ = ⌈ y / S ⌉ − 1 y' = ⌈ y/ S ⌉ - 1 y=y/S1

    1.3.2 SSP 层(空间金字塔池化)

    1. 概述

    这一层放在卷积层和全连接层之间,目的是为了输出固定长度的特征(因为全连接层需要输入固定)
    在这里插入图片描述
    在网络中的位置:
    在这里插入图片描述

    2. 内部剖析

    2.1 总览
    • 在R-CNN 中,生成的2000个候选框都(变换到固定大小)经过卷积网络(CNN)提取特征,这一个过程是冗余的
    • 在SSP-Net中,依然是先生成2000个候选框(候选框是在原图中找到的),但是不依次经过CNN。而是,原图经过CNN生成特征图(经过CNN以后特征图的大小会发生变化),我们利用上面提到的映射关系,找到候选框在特征图中的对应位置(即下图标出window的方框

    池化层,我们常见的是将2×2的小方块中的四个值取平均(变成一个值),或是取最大的一个值。这里我们看的角度往往是“池化核”大小,即上面我们提到的2×2。

    在SSP当中,我们关注的是池化以后特征图的大小,假设我们的特征图大小为128×128,我们要将其变成1×1特征图,即128×128个值取平均(论文中用的最大池化,即取最大值);也可以变成2×2,以及其他。这里,我们关注的是池化以后生成的特征大小
    在这里插入图片描述
    论文中池化后的特征图为1×1、2×2、4×4。
    注意: 我们的候选框大小是不一样的,当然这对我们没有影响。
    假设我们卷积以后生成的特征图为:(128,128,100) ,100为卷积核个数。
    经过SSP以后,我们会得到(1,1,100)、(2,2,100),(4,4,100)三种特征图,在将特征图拉平、相加会得到(1+4+16)×100的特征向量,再将其输入进全连接层,即可。
    请添加图片描述
    无论输入的特征图大小如何,出来的特征维度固定(1+4+16)×256,这样就实现了不管图中候选框尺寸如何,SSP层输出的特征向量维度永远是固定的。

    请添加图片描述

    参考

    [1] https://blog.csdn.net/x454045816/article/details/106294105
    [2] https://blog.csdn.net/x454045816/article/details/106132566#t7
    [3] https://arxiv.org/pdf/1406.4729.pdf
    [4] https://www.jianshu.com/p/07a573035e43
    [5] https://blog.csdn.net/a24444054d/article/details/118877757
    [6] https://zhuanlan.zhihu.com/p/478461060
    [7] https://zhuanlan.zhihu.com/p/517553858
    [8] https://www.elecfans.com/d/1829732.html

  • 相关阅读:
    十月份 NFT 市场显示复苏迹象,等待进一步的积极发展
    Kali Linux 安装搭建 hadoop 平台 调用 wordcount 示例程序 详细教程
    R语言绘图—制作你的专属“足迹“图
    大模型日报|11 篇必读的大模型论文
    C# 连接Linux中的redis
    如何用Matlab仿真平面剪切干涉仪对离焦这一波像差的光束的干涉图样
    附加:信息脱敏;
    Spring Boot中使用Redis进行大数据缓存
    声学回声消除原理
    计算机网络 ——数据链路层(广域网)
  • 原文地址:https://blog.csdn.net/weixin_39190382/article/details/125848297