AI大视觉(十六) | SPP(空间金字塔池化)
本文来自公众号“每日一醒”
SPP
对于一个CNN模型,可以将其分为两个部分:
前面包含卷积层、激活函数层、池化层的特征提取网络,下称CNN_Pre,
后面的全连接网络,下称CNN_Post。
许多CNN模型都对输入的图片大小有要求,实际上CNN_Pre对输入的图片没有要求,可以简单认为其将图片缩小了固定的倍数,而CNN_Post对输入的维度有要求。
SPP:空间金字塔池化,无论CNN_Pre输出的feature maps尺寸是怎样,都能输出固定的维度传给CNN_Post。
SPP的本质就是多层maxpool,只不过为了对于不同尺寸大小 a*a 的featur map 生成固定大小 n*n 的的输出。
那么 pool 的滑窗win大小,以及步长str都要作自适应的调整:
win=ceil(a/n)
str=floor(a/n)
ceil、floor分别表示上取整、下取整。
然后多个不同固定输出尺寸的 pool组合在一起就构成了SPP Layer。
通俗的讲,SPP就相当于标准通道层,不管任何大小的图像,都用一套标准的pool对图像进行池化,最后组合成一列相同大小的特征,作为全连接层的输入,这一组相同大小的特征是固定的,可以提前进行计算。
SPP优点:
(1)对于不同尺寸的CNN_Pre输出能够输出固定大小的向量。
(2)可以提取不同尺寸的空间特征信息,可以提升模型对于空间布局和物体变性的鲁棒性。
(3)可以避免将图片resize、crop成固定大小输入模型的弊端。
Yolo v3中的SPP
spp模块在yolov3的作用是多重感受野融合。
yolo v3基础网络:
yolov3-SPP网络:
借鉴了SPP-Net中的SPP模块,实现了不同尺度的特征融合。
和YOLOV3结构相比,在第一个预测特征层之前拆开了Convlutioanal Set,添加了SPP模块。
通过DarkNet输出的特征图大小是16*16*1024, 由于三个卷积层的步距为1,特征图的高宽不发生变化,通过三个卷积层以后,特征图的大小变为16*16*512,
通过SPP有四个分支,将其拼接维度扩大四倍->16*16*2048。
相对于普通版本的YOLOv3,SPP版在本在第五、六层卷积之间增加了一个SPP模块,这个模块主要是由不同的池化操作组成。
检测头前面的第5和第6卷积层之间集成SPP模块来获得YOLOv3-SPP,在Feature Map经过SPP module池化后的特征图重新cat起来传到下一层侦测网络中。
所以说,YOLOv3-SPP版本实际上只是增加了SPP 模块,该模块借鉴了空间金字塔的思想,通过SPP模块实现了局部特征和全局特征融合,丰富了特征图的表达能力,有利于待检测图像中目标大小差异较大的情况,所以对检测的精度上有了很大的提升。
Yolo v4中的SPP
SPP结构参杂在对CSPdarknet53的最后一个特征层的卷积里,在对CSPdarknet53的最后一个特征层进行三次DarknetConv2D_BN_Leaky卷积后,分别利用四个不同尺度的最大池化进行处理,最大池化的池化核大小分别为13x13、9x9、5x5、1x1(1x1即无处理)。
SPP能够极大地增加感受野,分离出最显著的上下文特征。
总结
SPP可以对于不同尺寸的图片输出固定大小的向量。
SPP可以提取不同尺寸的空间特征信息,可以提升模型对于空间布局和物体变性的鲁棒性。
——————
浅谈则止,细致入微AI大道理
扫描下方“每日一醒”,选择“关注”公众号
—————————————————————
—————————————————————