SPP-NET(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)是一篇由Kaiming He、Xiangyu Zhang、Shaoqing Ren和Jian Sun等人于2014年提出的论文,旨在提高深度卷积神经网络在图像分类和目标检测任务中的性能
在传统的卷积神经网络中,通常使用全连接层来将卷积和池化层提取的特征映射到固定长度的向量上,以便进行分类或检测。然而,全连接层需要固定大小的输入(例如640*640(YOLOV5)、32*32(LenNet)、224*224(ImageNet)),这使得网络无法处理尺寸不同的输入图像。因此,该论文提出了一种名为空间金字塔池化(Spatial Pyramid Pooling,SPP)的层,用于解决输入图像尺寸不同的问题,并且可以在不同尺寸的输入图像上实现准确的分类和检测。
在传统的卷积神经网络中,通常使用全连接层来将卷积和池化层提取的特征映射到固定长度的向量上,以便进行分类或检测。全连接层中的每个神经元都与前一层的所有神经元相连,因此需要固定大小的输入。如果输入的图像尺寸不同,那么全连接层的输入大小也会不同,这就导致了网络无法处理尺寸不同的输入图像.下面介绍一个简单的全连接层。
全连接层的输入需要是固定的,是因为全连接层中每个神经元都与前一层的所有神经元相连,因此需要固定大小的输入。如果输入的大小不同,那么全连接层的输入大小也会不同,这就会导致神经元之间的连接权重无法共享,从而增加了网络的参数量,使得网络更加复杂,训练难度也会增加。
数学上,假设前一层的输出是一个大小为 m×n 的矩阵,其中 m 是样本数,n 是特征数。如果使用全连接层将其映射到大小为 m×k 的矩阵,其中 k 是输出类别数,那么全连接层的权重矩阵大小为 n×k,需要训练的参数个数是 n×k。如果输入的特征数 n 不同,那么全连接层的权重矩阵大小也会不同,需要训练的参数个数也会不同。这就会导致网络的参数量随输入的大小而变化,使得网络更加复杂和难以训练。
类似于上图假设输入是X1xX2的矩阵, 其中每一条线赋予一个值(权重我们神经网络要训练的值)并赋予一个偏置b值,其中activate为激活函数。
在SPP-Net出现之前,基于区域的深度神经网络(如R-CNN)通常使用选择性搜索(滑窗)算法来生成候选区域,然后对每个候选区域进行单独的卷积和池化操作,最后将池化后的特征向量输入到分类器中进行分类。
使用选择性搜索的方法存在以下劣势:
计算量大:选择性搜索算法需要对图像中的每个像素进行分割和合并,生成大量的候选区域。对每个候选区域进行卷积和池化操作需要大量的计算资源,使得这种方法的计算速度较慢。
存在重叠区域:由于选择性搜索算法是基于区域的,不同的区域之间可能存在重叠的部分。这会导致同一物体的不同部分被重复检测,增加了计算量和误检率。
不可变性较差:选择性搜索算法可能会生成过多或者过少的候选区域,这会导致同一物体在不同图像中生成不同数量的候选区域,使得模型对物体的不变性较差。
为了解决这些问题,SPP-Net引入了空间金字塔池化(SPP)模块。在SPP-Net中,输入图像首先通过一个卷积神经网络进行特征提取。然后,在SPP层中进行池化操作,将卷积层的输出特征图(Feature Map)分成不同尺度的网格,对于每个网格,都对其内部进行池化操作,池化输出的结果拼接成一个固定长度的特征向量。这个特征向量可以用于后续的分类任务,下面的图是介绍从一张输入图上提取提特征图然后产生固定长度的特征向量然后输入到全连接层中进行分类的流程图。
SPP-NET的核心就是上面所述的可以产生固定长度特征向量:SPP-Net通过空间金字塔池化将不同大小的特征图转换为固定长度的特征向量,使得网络输出的特征向量具有固定的维度。这种特征向量的固定长度使得网络的输出可以用于后续的分类任务,
下面我将通过一个简单的例子来说明SPP-Net是如何解决选择性搜索问题的是如何将不同大小的特征图转换为固定长度的特征向量的。假设我们有一个输入图像大小为300✖300像素,由于我们希望网络能够处理不同大小的输入图像,因此我们先对输入图像进行卷积操作,得到一个特征图大小为15✖ 15✖ 1024其中分别表示一个特征图的宽度、高度和每个位置上的特征向量的维数。具体来说,在这个例子中,15✖ 15表示特征图的宽度和高度,1024表示每个位置上的特征向量的维数。然后,我们使用SPP层对特征图进行池化操作,将其分成1✖1、2✖2和3✖3三个尺度的网格,并对每个网格内部进行池化操作。最后,对于每个尺度,将池化输出的结果拼接成一个固定长度的特征向量。假设我们选择的池化操作是最大池化,每个网格内部的池化操作输出的结果是一个特征向量,我们将这些特征向量拼接起来,得到一个长度为1024✖(1+4+9)=15360的特征向量。这个特征向量可以作为分类器的输入,用于分类任务。
下面这个图诠释了上面的例子,方框内的部分即SPP部分,其分成1✖1、2✖2和4✖4三个尺度的网格进行特征向量的提取然后进行拼接固定长度的特征向量并将其输入到全连接层中用于分类任务,需要注意的是SPP通常在一个网络结构的最后一层,输出结果直接输入给检测头进行检测,或者输入给Neck部分进行特征向量的拼接操作以将不同尺度下的特征向量进行拼接提高检测和分类效率。
在ILSVRC2014比赛中,SPP-Net在物体检测任务上取得了第一名,比第二名提高了6.8%的检测准确率。同时,在图像分类任务上,SPP-Net在top-1准确率方面提高了1.2%。
在PASCAL VOC 2012数据集上,SPP-Net在物体检测任务上取得了第一名,比第二名提高了4.6%的检测准确率。
OverFeat是一种基于卷积神经网络的物体识别系统如果不了解可以看我前面的文章点此处链接,由Sermanet等人在2013年提出。OverFeat网络结构比较简单,由卷积层和全连接层组成,但是需要对输入图像进行多尺度处理。在原始的OverFeat网络中,对于每个不同的尺度,需要单独训练一个网络,这会导致训练和测试时间的大幅增加。
通过将SPP层加入OverFeat网络中,Kaiming He等人成功地将网络改进为一个通用的多尺度物体识别系统,可以处理不同尺寸的输入图像,同时减少了训练和测试时间。在ILSVRC2013比赛中,SPP-Net在物体检测任务上取得了第二名的好成绩,比之前的最优方法提高了7.9%的检测准确率。
具体来说,Kaiming He等人在OverFeat网络的最后一个卷积层之后加入了SPP层,将特征图分成不同的尺度,对每个尺度内部进行池化操作,将池化结果拼接成一个固定长度的特征向量,作为分类器的输入。这个特征向量可以同时用于不同尺度的输入图像。
SPP-Net是一种基于卷积神经网络的图像分类和物体检测方法,其最显著的特点是引入了SPP(Spatial Pyramid Pooling)层,可以对任意大小的输入图像进行处理,从而提高了网络的泛化能力和效率。
SPP层是一种池化层,可以对不同尺寸的特征图进行池化操作,得到固定长度的特征向量。SPP层的输入可以是任意大小的特征图,输出是一个固定长度的特征向量,可以用于分类器的输入。
SPP-Net的优点包括:
SPP-Net在OverFeat网络中的应用,更是将其推向了高峰。通过将SPP层加入OverFeat网络中,可以构建一个通用的多尺度物体识别系统,能够处理不同尺寸的输入图像,同时减少了训练和测试时间,取得了优秀的准确率和效率表现。
总之,SPP-Net和SPP层的提出,为卷积神经网络的发展带来了新的思路和方法,是计算机视觉领域的一次重要进展。
最后附上Github源码地址