【原理篇】一文读懂FPN(Feature Pyramid Networks)
论文:feature pyramid networks for object detection论文链接:https://arxiv.org/abs/1612.03144这篇论文是CVPR2017年的文章,采用特征金字塔做目标检测。作者提出的多尺度的object detection算法:FPN(feature pyramid networks)。FPN网络将特征金字塔模型引入至Faster R-C
论文:feature pyramid networks for object detection
论文链接:https://arxiv.org/abs/1612.03144
这篇论文是CVPR2017年的文章,采用特征金字塔做目标检测。作者提出的多尺度的object detection算法:FPN(feature pyramid networks)。FPN网络将特征金字塔模型引入至Faster R-CNN中,在不牺牲内存与速度的情况下达到了state-of-the-art,同时对于小物体的检测也获得了不错的效果。
1. 前言
图像金字塔
人眼在看一个物体的时候,一个显著的特征是“近大远小,近处清晰远处模糊“。而且无论远近,对于人眼来说,A还是A。对于计算机,如何模拟这个远近呢,在图像处理领域,这个东西就是尺度空间。尺度空间是指不同的模糊程度,具体做法就是用不同高斯卷积核去给图像做平滑处理就行了,这样就可以去寻找尺度不变的特征,如人工特征描述子SIFT。
实际上,尺度空间像是在模仿一个3维度的环境,因为一个单一的图像是2维的。至于为什么这么做,为什么需要模拟出这样一个3维环境,我个人没想太明白。
图像金字塔就是图像下采样成不同分辨率。高斯金字塔是先卷积,然后按照固定比例下采样,生成不同尺度下的图像,就组成了图像金字塔。
2. FPN
在目标检测任务中,不同尺度下的目标识别是一个很大的挑战。(不太明白为什么需要这个)另外论文中说,原来多数的object detection算法都是只采用顶层特征(卷积最后一层)做预测,低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。
那如果想引入不同尺度的特征,应该怎么做呢?
图a: 使用图像金字塔的方式来生成多尺度特征(图a),这种做法是先生成很多不同分辨率的图像,然后针对不同尺度下,通过ConvNet前向过程生成各自的feature map,很明显,这种做法是对计算和存储资源消耗巨大的,不太实用。
图b: CNN网络最常用的结构,只用最后一层卷积后的feature map
图c: SSD的做法,从conv4开始每一层的feature map都用来做预测,这样就得到了多尺度下的特征,显然这种做法是没有增加任何计算量的,不过FPN的作者说SSD没有用更底层的特征,而更底层的特征对小目标识别有优势。
图d: FPN的网络架构。从图中可以看出,就是多了一个上采样的过程,feature map上采样,然后和更浅层的特征融合,再独立做预测。
如图就是FPN的网络结构,包括三个部分, Bottom-up pathway、Top-down pathway、lateral connections。
Bottom-up pathway
实际上就是一个普通的backbone卷积网络,包含了不同尺度下的特征层次。论文中把尺寸相同的layers叫做一个stage,比如resnet50, 就是有50个layer(卷积层)组成,但不是每次都改变尺寸,按照尺寸计算一共是分为5个stage。特征金字塔就是对于stage而言的,每个stage的最后一个layer就组成了特征金字塔。
Top-down pathway and lateral connections
图右侧是Top-down路径,是一个上采样的过程。上采样得到的feature map和Bottom-up路径相同尺寸的feature map通过lateral connections进行merge。论文中上采样算法采用的是插值算法,merge后又经过了一个3*3卷积来生成特征图,作者说这是为了降低上采样merge过程带来的混叠效应的影像。图片中放大部分就是merge的具体操作。最后每一层特征图都要做预测。
3. FPN应用
FPN是一个通过的结构,只需要稍做修改就可以运用到不同的backbone检测网络,论文中列举了FPN结合RPN的运用。
比如一个Faster RCNN网络用ResNet作为backbone, RPN作为区域筛选网络。
比如这个Resnet的bottom-up网络,每一行代表一个stage。
we denote the output of these last residual blocks as {C2, C3, C4, C5} for conv2, conv3, conv4, and conv5 outputs, and note that they have strides of {4, 8, 16, 32} pixels with respect to the input image. We do not include conv1 into the pyramid due to its large memory footprint.
This fifinal set of feature maps is called {P2, P3, P4, P5}, corresponding to {C2, C3, C4, C5} that are respectively of the same spatial sizes.
Formally, we defifine the anchors to have areas of {32*32, 64*64, 128*128, 256*256, 512*512} pixels on {P2, P3, P4, P5, P6} respectively. As in we also use anchors of multiple aspect ratios {1:2, 1:1, 2:1} at each level. So in total there are 15 anchors over the pyramid.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)