目标检测中的多尺度检测(Multi-Scale),FPN,RPN
文章目录
问什么要查这个呢?
因为造了个网络图,不确定图二的F 是不是对应于图一的conv
图一
图二
参考:
原文:https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
论文:https://arxiv.org/pdf/1612.03144.pdf
译文:https://bbs.cvmart.net/articles/125
1、目标检测是如何提高多尺度(较大或较小)物体检测率的。
我们来回顾一下,首先,较大的卷积窗口可以卷积后看到较大的物体, 反之只能看到较小的图片.
想象用1x1的最小卷积窗口, 最后卷积的图片粒度和输入图片粒度一模一样.
但是如果用图片长宽 的卷积窗口, 只能编码出一个大粒度的输出特征.
2、如果每层的卷积窗口大小一致
例如yolov1,每层使用同样大小的卷积窗口, 识别超大物体或者超小物体就变得无能为力(最后一层的输出特征图是固定7*7):
图三 yolo v1
3、不同尺度(Multi-Scale)的特征图相加
例如,SSD最后一层的检测是由之前多个尺度(Multi-Scale)的特征图共同生成的
其最后几层的所谓“多尺度”是有限的(特征图尺寸越小,可以识别的物体越大)。对于极小的目标识别,SSD就显得无能为力了
4、 facebook的老兄们开发出了FPN(特征金字塔网络)
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
https://arxiv.org/pdf/1612.03144.pdf
这种网络不是进行下采样提取语义特征去识别物体,而是从顶层(自上而下)的每一层都进行上采样获取更准确的像素位置信息(有些类似残差网络的跳层连接)。
卷积操作虽然能高效地向上提取语义,但是也存在像素错位的问题(到了最上层特征图中,你早已分不清某个像素对应原图的哪些像素)。
FPN 这种上采样还原特征图的方式很好地缓解了像素不准的问题(使得高层特征图的像素也有据可查)
小目标的检测FPN也是拼了,带来的问题也显而易见:计算量的增多(额外的上采样和跳层计算)
5、让我们快速浏览下面的Fast R-CNN和Faster R-CNN数据流。
它与一个要素地图图层一起使用以创建ROI。 我们使用ROI and the feature map layer to create feature patches 以将其添加到ROI池中。
In FPN, we generate a pyramid of feature maps. We apply the RPN (described in the previous section) to generate ROIs. Based on the size of the ROI, we select the feature map layer in the most proper scale to extract the feature patches.
6、FPN本身不是对象检测器。 它是与对象检测器一起使用的特征提取器。
7、FPN with RPN (Region Proposal Network)
FPN提取特征图,然后馈入检测器,对RPN而言,用于物体检测。
RPN在特征图上应用滑动窗口,以对每个位置上的对象(是否有对象)和对象边界框进行预测。
In the FPN framework, for each scale level (say P4), a 3 × 3 convolution filter is applied over the feature maps followed by separate 1 × 1 convolution for objectness predictions and boundary box regression. These 3 × 3 and 1 × 1 convolutional layers are called the RPN head. The same head is applied to all different scale levels of feature maps.
在FPN 框架中,对于每个尺度层(例如P4),一个3x3 的卷积滤波器被应用在特征图上,这个特征图被1x1 的卷积用于目标预测与boundary box regression 。
这个3x3 与1x1 的卷积层被成为RPN 的head,这个head被用用于全部不同尺度的层。
7、因此,现在一个完整的目标检测网络主要由三部分构成:
detector=backbone+neck+head
目前的话,neck这一部分的研究点还是相对来说比较多的,只需要提出一个好的结构或模块,加到现有的sota的网络中,看涨不涨点,涨点了,那就可以发文章了~
而head这一部分,它的作用上面也说到了,就是分类+定位的,结构没什么新颖的,研究的似乎也比较少。