在日常学习工作中,经常会碰到一个概念,那就是金字塔(pyramid),本文就该概念进行一定的阐述,具体如下:

(1)图像金字塔

图像金字塔结构,即对图像进行一定比例的缩放,从而得到一系列不同尺寸的样本图像序列,在缩放过程中一般采用线性差值等方法,在缩放的同时可以加入滤波、模糊等处理,常见的形式有:

高斯金字塔(Gaussianpyramid): 用来向下采样,主要的图像金字塔。

拉普拉斯金字塔(Laplacianpyramid): 用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行较大程度的还原,配合高斯金字塔一起使用。

这里的向下与向上采样,是对图像的尺寸而言的(和金字塔的方向相反),向上就是图像尺寸加倍,向下就是图像尺寸减半。

Octaves 金字塔 金字塔ps_多尺度检测

图像金字塔的作用在于解决目标检测中的多尺度问题,在比较早的时候,是通过改变滑动窗口的形式来检测图像中大小不一的物体,而目前阶段,更多的是采用滑动窗口规格不变,改变图片大小来检测图像中尺度不一致的物体,金字塔的层级越多,计算量更大,花费的时间会更多,但是,在某种程度上有获得更准确的结果。主要根据自己的应用场景选择合适的比例进行生成图像金字塔,如人脸检测MTCNN中就用到图像金字塔来实现多尺度检测。

(2)特征金字塔(fpn)

FPN是一种利用常规CNN模型来高效提取图片中各维度特征的方法。FPN通过利用常规CNN模型内部从底至上各个层对同一scale图片不同维度的特征表达结构,提出了一种可有效在单一图片视图下生成对其的多维度特征表达的方法。它可以有效地赋能常规CNN模型,从而可以生成出表达能力更强的feature maps以供下一阶段计算机视觉任务像object detection/semantic segmentation等来使用。本质上说它是一种加强主干网络CNN特征表达的方法。

Octaves 金字塔 金字塔ps_多尺度检测_02

上图(a)中的方法即为常规的生成一张图片的多维度特征组合的经典方法。即对某一输入图片我们通过压缩或放大从而形成不同维度的图片作为模型输入,使用同一模型对这些不同维度的图片分别处理后,最终再将这些分别得到的特征(feature maps)组合起来就得到了我们想要的可反映多维度信息的特征集。此种方法缺点在于需要对同一图片在更改维度后输入处理多次,因此对计算机的算力及内存大小都有较高要求。

图(b)中的方法则只拿单一维度的图片做为输入,然后经CNN模型处理后,拿最终一层的feature maps作为最终的特征集。显然此种方法只能得到单一维度的信息。优点是计算简单,对计算机算力及内存大小都无过高需求。此方法为大多数R-CNN系列目标检测方法所用像R-CNN/Fast-RCNN/Faster-RCNN等。因此最终这些模型对小维度的目标检测性能不是很好。

图(c)中的方法同样是拿单一维度的图片做为输入,不过最终选取用于接下来分类或检测任务时的特征组合时,此方法不只选用了最后一层的high level feature maps,同样也会选用稍靠下的反映图片low level 信息的feature maps。然后将这些不同层次(反映不同level的图片信息)的特征简单合并起来(一般为concat处理),用于最终的特征组合输出。此方法可见于SSD当中。不过SSD在选取层特征时都选用了较高层次的网络。比如在它以VGG16作为主干网络的检测模型里面所选用的最低的Convolution的层为Conv4,这样一些具有更低级别信息的层特征像Conv2/Conv3就被它给漏掉了,于是它对更小维度的目标检测效果就不大好。

图(d)中的方法同图(c)中的方法有些类似,也是拿单一维度的图片作为输入,然后它会选取所有层的特征来处理然后再联合起来做为最终的特征输出组合。(作者在论文中拿Resnet为实例时并没选用Conv1层,那是为了算力及内存上的考虑,毕竟Conv1层的size还是比较大的,所包含的特征跟直接的图片像素信息也过于接近)。另外还对这些反映不同级别图片信息的各层自上向下进行了再处理以能更好地组合从而形成较好的特征表达。而此方法正是我们本文中要讲的FPN CNN特征提取方法。

(3)PAN

熟悉yolov4网络结构应该对下面这张图不陌生吧,

Octaves 金字塔 金字塔ps_目标检测_03

在neck部分加入的PAN网络结构借鉴于文本分类,与FPN相比,FPN是自顶向下的,将高层特征通过上采样和低层特征做融合得到进行预测的特征图。Neck部分的立体图像,具体看下两部分是如何通过FPN+PAN结构进行融合的。

Octaves 金字塔 金字塔ps_Octaves 金字塔_04

Yolov4在FPN层的后面还添加了一个自底向上的特征金字塔。这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合,事实表明这样检测对某些目标而言,效果有所提升。

 

补充:

对于多尺度检测,目前采用的方法还有SNIPER等,

Octaves 金字塔 金字塔ps_多目标检测_05

在每个尺度下都有一个重点关注区域,框中区域的目标都在最佳尺度。还加入了重点排除区域,在许多背景中,许多目标是无需识别的。

总结,对于多尺度目标检测,从原始的采用不同尺度的卷积核,再到不同尺度的输入图像(图像金字塔),FPN,再到sniper,方法在不断的更新迭代中,而且在深度学习中多采用anchor机制来实现对多目标多尺度的检测,这样简单快捷。