目标检测CNN经典网络(二)SPPnet

在上文介绍了R-CNN网络,可以看出其存在很多问题:卷积网络的重复计算造成计算量大耗时多,之后出现了SPPnet提出先卷积再进行框选目标区域的方法。

总体思路

首先看下面这幅图,R-CNN中我们在卷积之前需要先选定预选框,然后可能大小尺寸不一,需要对其进行crop或者warp一下同意尺寸再进行卷积网络;SPPnet提出我们可以先对原图进行卷积神经网络,再利用预选框去找出对应的第五层卷积网络所对应的特征图(因为我们发现其实再训练卷积网络时,原图和每层的卷积图实际位置关系还是不变的)全连接层我们单独放在后面,在进入全连接层之前我们做了一个金字塔池化SSP(后面讲!)到统一尺寸。
目标检测CNN经典网络(二)SPPnet_第1张图片

空间金字塔+最大池化

在图像处理中有个图像金字塔的思想可以采样图像到任意大小,这里借鉴这个思想,我们把卷积网络的输出得到的1313256特征提取三个不同尺寸,分别是1*1(也就是原图),2*2(原图分为四份),4*4(原图分为16份),然后对每一份选区最大的一个值代表该区域也就是最大池化(一份包含很多像素点啊)。最后得到16+4+1=21 *256 的特征!
这样不管上一层输出的尺寸多大,我们都能做这个变换!

如果像上图那样将reponse map分成4x4 2x2 1x1三张子图,做max pooling后,出来的特征就是固定长度的(16+4+1)x256那么多的维度了。如果原图的输入不是224x224,出来的特征依然是(16+4+1)x256

更加通用的认识可以认为:
输入尺寸在[180,224]之间,假设最后一个卷积层的输出大小为a×a,若给定金字塔层有n×n 个bins,进行滑动窗池化,窗口尺寸为win=⌈a/n⌉,步长为str=⌊a/n⌋,使用一个网络完成一个完整epoch的训练,之后切换到另外一个网络。只是在训练的时候用到多尺寸,测试时直接将SPPNet应用于任意尺寸的图像。
目标检测CNN经典网络(二)SPPnet_第2张图片
这样我们得到了统一尺寸的特征在进行后面的全连接层训练即可。

空间金字塔在定位实验中的应用

在定位实验中,需要我们将原图上的ROI映射到featuremap中,具体可以参考我的另一篇文章探讨卷积的感受视野以及sPPnet中ROI映射到featuremap
我详细介绍了ROI映射的方法。
对此,我们得到映射后的图片就可以在featuremap中找到对应的区域,然后再进行空间金字塔最大池化得到特征。金字塔用了{6x6 3x3 2x2 1x1},共50个bin,分类器也是用了SVM。
最后得到了很大的提升,主要在于时间!
目标检测CNN经典网络(二)SPPnet_第3张图片

总结

R-CNN提取特征比较耗时,需要对每个warp的区域进行学习,而SPPNet只对图像进行一次卷积,之后使用SPPNet在特征图上提取特征。结合EdgeBoxes提取的proposal,系统处理一幅图像需要0.5s。
目标检测CNN经典网络(二)SPPnet_第4张图片

参考文献

[1]探讨卷积的感受视野以及sPPnet中ROI映射到featuremap
https://blog.csdn.net/CLOUD_J/article/details/89917950
[2]【目标检测】SPPNet算法详解
https://blog.csdn.net/bryant_meng/article/details/78615353

你可能感兴趣的:(计算机视觉,计算机视觉CV)