在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。图像具有一种"静态性"的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图片,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值(或最大值)来代表这个区域的特征。
mean pooling
计算图像区域的平均值作为该区域池化后的值。
max pooling
选图像区域的最大值作为该区域池化后的值。
Overlapping pooling
重叠池化正如其名字所说的,相邻池化窗口之间会有重叠区域,此时sizeX>stride。
Spatial Pyramid pooling
金字塔池化可以把任何尺度的图像的卷积特征转化成相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免cropping和warping操作,导致一些信息的丢失,具有非常重要的意义。
一般的CNN都需要输入图像的大小是固定的,这是因为全连接层的输入需要固定输入维度,但是卷积操作是没有对图像尺度有限制,所以作者提出了空间金字塔池化,先让图像进行卷积操作,然后转化成维度相同的特征输入到全连接层,这个可以把CNN扩展到任意大小的图像。
金字塔池化的思想来自于Spatial Pyramid Model,它一个pooling变成了多个scale的pooling。用不同大小池化窗口作用于卷积特征,我们可以得到1*1,2*2,4*4的池化结果,由于conv5中共有256个过滤器,多以得到1个256维的特征,4个256维的特征,以及16个256维的特征,然后把这21个256维特征连接起来输入全连接层,通过这种方式吧不同大小的图像转化成相同维度的特征。
对于不同的图像要得到相同大小的pooling结果,就需要根据图像的大小动态的计算池化窗口的大小和步长。
stochastic pooling
stochastic pooling方法非常简单,只需对feature map中的元素其概率值大小随机选择,即元素值大的被选中的概率也大。而不像max-pooling那样,永远只取那个最大值元素。
假设feature map中的pooling区域元素值如下:
3*3大小的,元素值和sum=0+1.1+2.5+0.9+2.0+1.0+0+1.5+1.0=10
方格中的元素同时除以sum后得到的矩阵元素为:
每个元素值表示对应位置处值的概率,现在只需要按照该概率来随机选一个即可。
ROI Pooling faster rcnn
目标检测typical architecture通常可以分为两个阶段:
① region proposal:给定一张输入image找出objects可能存在的所有位置。这一阶段的输出应该是一系列object可能位置的bounding box。这些通常称之为region proposals或者regions of interest(ROI)
② final classification:确定上一阶段的每个region proposal是否输入目标一类或者背景。
这个architecture存在的一些问题是:
- 产生大量的region proposals会导致performance problems,很难达到实时目标检测。
- 在处理速度方面是suboptimal
- 无法做到end-to-end training
这就是ROI pooling提出的根本原因。
ROI pooling层可以实现training和testing的显著加速,并提高检测accuary。该层有两个输入:
从具有多个卷积核池化的深度网络中获得的固定大小的feature maps
一个表示所有ROI的N*5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示其余的左上角和右下角坐标。
ROI pooling的具体操作如下:
- 根据输入image,将ROI映射到feature map对应位置
- 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
- 对每个sections进行max pooling操作。
这样我们就可以从不同大小的方框得到固定大小的相应的feature maps。值得一提的是,输出的的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling最大的好处就在于极大地提高了处理速度。
ROI pooling example
考虑一个8*8大小的feature map,一个ROI,以及输出大小为2*2
① 输入的固定大小的feature map
② region proposal投影之后的位置(左上角,右下角):(0,3),(7,8)
③ 将其划分为(2*2)个sections(因为输出大小为2*2),我们可以得到:
④ 对每个section做max pooling,可以得到:
ROI pooling总结:
- 用于目标检测任务
- 允许我们对CNN中的feature map进行reuse
- 可以显著加速training和testing速度
- 允许end-to-end的形式训练目标检测系统
本文转自:博客园 - kexinxin,转载此文目的在于传递更多信息,版权归原作者所有。