大家好,又见面了,我是你们的朋友全栈君。
上篇文章详细阐述了R-CNN网络模型,本篇本章本来准备阐述Fast-RCNN模型的,介于SPP-Net模型有许多技巧性的技术可以在不同模型上使用,所以本篇详细分析下SPP-Net
SPPNet论文:https://arxiv.org/abs/1406.4729
SPPNet论文翻译:https://blog.csdn.net/mengduanhonglou/article/details/78470682
一、概述
SPP-Net(Spatial Pyramid Pooling)金字塔池化网络,该模型在(ILSVRC)2014物体分类比赛排名第三(top-5:8.06),前两名分别是GoogleNet(top-5:6.66)和VGG(top-5:7.32),物体检测排名第二,相对于RCNN只是提高很小的准确率,但是训练以及测试时间提高了很多(24-102倍),SPP-Net和R-CNN的基本逻辑是一样。
【SPP-Net 不仅能应用到物体检测,在物体分类、语义分割等模型上都能使用,单纯的说SPP-Net并不是一个网络模型,它提供了网络修缮的技巧,SPP(图像金字塔池化)改变了固化图片尺寸与提取特征的之间的顺序,适配多尺度。作者何凯明,曾经的去雾算法,这次的SPP,后面的残差网络以及Mask R-CNN都很值得好好研究。何凯明博客】
二、SPP-Net网络模型
图:1
SPP-Net物体检测系统由四个模块构成:
- 卷积神经网络提取特征,在此用的ZF-5的5蹭卷积网络;产生类别无关的候选检测区域集合,大约2000个;
- 将候选框区域映射到特征图中;
- 然后通过spp将其池化到固定大小;
- 通过训练的指定类别的线性SVM分类器以及拟合边框回归。
1、提取特征ZFNet 与 区域推荐(region proposal)
ZFNet ILSVRC2013分类任务的冠军,使用反卷积对CNN的中间特征图进行了可视化分析,通过分析特征行为找到了提升模型的方法,微调Alexnet就提升了表现。相对于Alexnet来说,将11*11的卷积核变成了7*7的,步长从4变成2,【通过可视化发现第一层的卷积核对最终的结果影响更大。】
区域推荐(region proposal)选择搜素法(Selective Search):就是对图像利用分割算法产生许多小的子区域,然后根据这些子区域之间的相似性(主要是颜色、纹理、大小等)进行区域合并,不断的迭代这个操作,每次迭代过程中对这些合并的子区域做外切矩形,最后形成候选框。优点:可以包含大小的疑似物体,合并区域相似性指标多样,提高了准确度;缺点:算法较复杂【和上一篇文章R-CNN一样,在此就不放图了】
2、推荐区域映射到特征图
RCNN是在原图上生成推荐区域,然后将候选区域重定义到固定大小放入特征提取网络,而SPP-Net则是将原图进行了一次卷积操作,在conv5提取到的特征图上将在原图上的推荐区域映射到上面。也就是说SPP-Net只进行了一次卷积操作,这也就是SPP-Net可以做到比R-CNN快很多倍的主要原因。
上图第一行,是一些分类网络固化图片尺寸的方法,剪切(容易丢失物体信息)、缩放(容易丢失物体位置信息); 第二行:R-CNN的操作流程,在卷积层之前固化图片尺寸;第三行:SPP-Net的操作流程,先提取特征然后经过spp。
在分析推荐区域到特征图的映射关系的之前,我们先了解一个概念和一个公式。
感受野:就是指某一层输出的结果或者像素点对应的上一层的区域大小。比如一个3*3的卷积核会将3*3的区域换算成一个点。那这个点的感受野就是3*3的区域。
卷积输出大小公式:(N:输出大小;W:输入大小;F:卷积核大小;P:padding像素数;S:步长)
下面我们借助图片就说说,推荐区域是如何映射到特征图上的。
SPP-Net通过选择搜索算法在原图上产生2000个候选区域,然后将候选区域的两个对角点映射到特征图上对应区域的对角点,因为特征图相对于原图来说尺寸发生了变化,变化的逻辑是通过上面的公式变化而来。网络的conv层和pooling层因为padding的存在不改变图像尺寸的大小,但是pooling层的步长stride为2,因为是级联的所以经过多少次池化操作原始图片就缩小池化步长累积大小倍数
对应的(x3,y3)(x4,y4)的坐标都可以计算出来了,分别在后面 1和-1是为了保证候选框在特征图内部。
3、金字塔池化(Spatial Pyramid Pooling)
R-CNN目标检测以及带有全连接网络的分类模型都必须将图片先固化到指定尺寸,这是因为有全连接层(FC)的存在,卷积操作和池化操作对图片的尺寸没有需求,因为卷积层保存的是卷积核的参数,这个卷积核的参数是N*K*K(N:卷积核个数;N:卷积核的尺寸)和图片的尺寸没有关系,池化层是下采样图片,没有参数,而全连接层需要将256或者128通道数的三维特征数据拉到一个二维平面,这个二维平面的尺寸在每个全连接层是固定的,所以导致了众多带有全连接的分类网络需要固定尺寸的图片用来训练和测试。
SPP-layer层的存在就是为了在接下来的fc之前将候选框包裹的特征图固化到一定尺寸,在PASCAL VOC 2007数据集上总共有20个物体,加上一个背景,总共21类,如何将任意尺寸的特征图固化成(21*256)呢。根据pooling规则,每个pooling window对应一个输出,所以最终pooling后特征的个数由window来决定,如上图所以作者通过3个并列操作实现21*256的输出。第一个操作将特征图上框选4*4总计16个区域,分别求取每个区域最大值,这样生成4*4总计16*256维度的特征向量;同理将该特征图分别框选2*2以及1*1(特征图本图)的最大区域,最后将4*4、2*2、1*1拼接成21*256的特征向量就满足了后面fc网络输入尺寸。
4、SVM分类和拟合边框回归
SVM是用来分类的,事先对每一个类都训练一个线性分类器,然后对每个region proposal通过CNN前向传播计算出的特征进行分类打分。注:SVM是一个很经典的分类算法,也是SVM一度将人们的视线从卷积神经网络拉到SVM传统机器学习分类算法。预训练、正样例、负样例判定阈值以及多级操作这个和RCNN基本一致,在此不做过多介绍。
三、创新与挑战
1、创新
- 共享卷积计算,相对于RCNN区域的重复特征计算,SPP对原图进行一次特征计算,节省了很多时间;
- 设计了可以处理任意尺度的图像结构,相对于RCNN在提取特征之前固化尺度可能导致的物体信息丢失、物体位置信息丢失,将尺度固化放在全连接之前保准了图像数据的完整性。这个模块可以结合众多的分类网络,提高其性能。
- 多层次池化提升准确度,多尺寸训练提升准确度。
2、挑战
- SPP和RCNN一样训练过程是多级流水线,训练特征提取网络、SVM分类网络以及边框回归网络;
- 提出的微调算法不能更新在空间金字塔池之前的卷积层。这种限制(固定的卷积层)限制了深层网络的精度。
总结 :SPPNet相对来说,创新点即是惊艳的地方,共享卷积和金字塔池化操作。共享卷积缩短了几十倍的时间,任意尺度保留了数据的原始信息,并且这个技巧可以优化所有用到FC的网络模型。性能没能大幅提升是因为网络的主体结构依然和RCNN基本一致,增加的是技巧性的东西。当然这些想法都是站在现在这个这个时间点思考的,结合当时的环境以及目标检测的发展状况,何凯明真的很厉害,而SPP-Net还只是他在目标检测的一个开始,后面的的残差网络、Mask Rcnn更是惊艳。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133132.html原文链接:https://javaforall.cn