【目标检测算法系列】二、SPP-Net算法

1,683 阅读6分钟

上次我们介绍了R-CNN算法juejin.cn/post/684490…

这次介绍下SPP-Net算法

SPP-Net算法是在R-CNN的基础上做了相关改进

我们知道,R-CNN算法有几个缺点:

1. 由于CNN网络对输入图像尺寸的固定,所以对于每张图片生成的2000个候选区域,需要进行缩放、扭曲等操作来resize到CNN网络所要求的输入尺寸(224*224),这样就会导致一些特征的丢失,改变,从而影响精确度

2. R-CNN算法中,在通过CNN网络进行特征提取时,需要对每张图片的2000个候选区域分别处理,而这些候选区域中,是有很多重复部分的,所以会导致有很多重复运算,严重影响了RCNN检测的速度

SPP-Net针对RCNN的上述两个问题做了对应改进,从而提高了模型的精度和速度

一、CNN网络中对输入尺寸的固定问题

我们知道,在RCNN时,需要对输入的候选框的尺寸固定到224*224,为什么需要限制呢?

深层卷积网络中包含两个大的模块,一个是卷积模块,一个是全连接模块,对于卷积模块,其实并不需要限制图像输入尺寸,因为对于卷积模块中的所有filter来说,都是在与图像进行局部卷积操作,输入图像的不同尺寸,并不会影响filter的尺寸和个数,所以卷积层并不会限制图像尺寸,只是不同尺寸的图像,最后通过卷积模块后,输出的feature map(特征图)的尺寸则不相同,最后会生成不同长度的特征向量。

深层卷积网络中的全连接模块,则对于输入特征向量的尺寸是要求固定的。因为全连接层中的权重参数个数,是和每一层的神经元密切相关的,所以为了共用一套权重参数,方便进行前向和后向传播算法,对应输入的特征向量,需要固定长度大小,所以也就需要卷积模块输出相同尺寸的feature map,最终,就需要固定整个CNN网络的输入尺寸

二、空间金字塔池化(Spatial Pyramid Pooling)

通过上面的说明,我们知道实际上是卷积网络中的全连接层,需要固定输入尺寸。所以,我们可以不固定CNN网络开始的图像输入尺寸,只固定后面的全连接层输入的特征向量的长度。这样的话,我们就需要将不同的输入图像尺寸经过卷积层输出的feature map经过某种转换,转换为相同尺寸的特征向量,来输入到全连接层中,那具体怎么转换呢?这就需要用到空间金字塔池化(Spatial Pyramid Pooling)

SPP-Net中,在CNN网络的卷积层最后,加上了一个空间金字塔池化层,来将不同的feature map转换为相同长度的特征向量。



论文中,作者将卷积模块输出的feature map分别通过4*4,2*2,1*1这三种不同大小的块来提取特征。假设总共输出了m个feature map。每个feature map的尺寸为w*h*256(256即为最后输出的每个feature map的通道数,也就是最后一层卷积层的filter个数)

对于4*4的块来说,对于一个feature map,将分成4*4的块,对于每个块,通过最大池化来提取一个特征,则总共提取出来了16*256个特征,同理,对于2*2的块来说,则提取出来了4*256个特征,1*1的块,则提取出来了1*256个特征。所以,一个feature map经过空间金字塔池化层后,提取出来了21*256个特征,然后转换成特征向量,输入到后面的全连接层中。所以,不管输入的图像尺寸是多大,最后经过空间金字塔池化层后生成的特征向量长度都是一定的。这样就解决了RCNN种因为要确保输入尺寸一致,而去缩放、扭曲图片造成特征的丢失,改变等问题。

三、特征图与原图之间的映射

通过卷积的特性,我们知道,图片中的某个物体,在经过多层卷积后,它在feature map中的相对位置,与在原图中的相对位置是保持不变的。同样的,对于一张图片中的候选框,再经过经过多层卷积后,位置相对于原图依旧保持不变。

上面提到,RCNN中,还有个明显的问题就是需要将每张图片的2000个候选框分别喂入CNN网络中来提取feature map, 这里面会有很多重复运算,所以我们想到,能否直接将整张图片直接喂入CNN网络来生成feature map,然后再从feature map中去找到对应候选框所对应在feature map中的位置,通过上面一段的描述,我们知道这种方案是可行的,我们需要知道的是如何将原始图片中的候选框映射到对应feature map上。

设(X', Y')为特征图上的一个点,它多对应的是输入图片上的坐标点为 (X,Y),则有如下映射关系:

其中S为CNN中所有strides(步长)的乘积(包含池化,卷积的strides)

四、SPP-Net总结

上述就是SPP-Net所做的主要优化,这块,完整总结下SPP-Net的流程:

  1. 通过选择性搜索,对待检测的每张图片,生成2000个候选框

  2. 直接将原始图片输入到CNN网络中,进行特征提取,得到对应feature maps,然后通过对应映射,在feature maps中找到所有候选框所对应的区域,,将对应的不同区域通过金字塔空间池化层生成固定长度的特征向量

  3. 进行SVM分类以及Bounding-box回归


欢迎关注我的个人公众号 AI计算机视觉工坊,本公众号不定期推送机器学习,深度学习,计算机视觉等相关文章,欢迎大家和我一起学习,交流。