关于FPN,已经见的很多了,但是最近在读FSAF,发现网上的解读刚开始有点看不懂,在FPN选择某一层feature做检测这个问题上,也就是motivation的说明上,因此我再一次细读了FPN论文,做个记录,这篇论文实验做的很细很全啊。。
FPN结构
应用
1 用在RPN上
用ResNet做骨干网络,bottom-up特征集为{C2,C3,C4,C5},对应着conv2, conv3, conv4, conv5;相对于原图的stride是{4,8,16,32}; up-bottom的特征集是{P2,P3, P4, P5},对应着C,尺度相同,但是channel都是256(论文中的设置)
设置的anchor
,比例依然是
对应于特征图
为这些anchor设置训练标签,基于与gt box的iou,(策略不变,重复一下:当某anchor与一个gt box有最高iou,或者这个anchor与任一个gt box有超过0.7的iou,设置为positive;当与任何gt box都是iou小于0.3,设置为negative)。
事实上,要清楚的事,这个里面需要选择level这个操作吗,答案是不需要的,因为RPN网络的作用是产生proposals,其实这些不同层的proposals都可以理解为基于原图的,那么产生的大大小小的这些proposals有很多,我们不用管他是来源于哪一层上设置的anchor得来的,(proposal是anchor经过RPN的分类和回归的结果在proposal layer计算得到的),我们只是得到了很多很多的proposals,和anchor一样多,但是我们只要分数最高的前多少个,比如300,或者1000。
在不同的level上共享参数与否结果影响不大,说明不同level上的金字塔共享相似的语义级别。
2 用在Fast R-CNN
首先简单的回顾一下 R-CNN,Fast,Faster系列的变化: R-CNN用其他方法提出很多个proposals,然后每一个proposals经过CNN提取特征,然后这些特征经过一个SVM分类和回归器;Fast 快的地方在于,这很多个proposals不再一个个经过CNN,而是从一个特征图中提取,这就是ROI pooling;FASter快的地方在于,不再需要用其他 的方法得到proposals,二是采用RPN网络,anchor机制来获取所有可能的proposals.
这里要用Fast RCNN,所以要用ROI pooling,所以就需要确定每一个proposal要在哪一层做ROI pooling,是这样安排的。针对一个
的ROI,根据这样的规则
设置为4,因为 faster RCNN就是使用的
作为特征图的。比如宽高是224的一半时,就会被分配到level 3.
分配好了level,就可以做ROI pooling,得到一个
的特征。
实验
1 RPN
在这个RPN上,主要关注的是是否找到了所有可能的的proposals,所以主要专注的是模型的召回率的提升
结果如图
2 Fast RCNN
Fast RCNN 的功能是将proposals分类和回归的更准,因此主要关注的是模型的准确率的提升
这里只是将FPN利用在Fast RCNN 上,这里的假设前提是已经提供好了proposals,这里使用的proposals是固定表1 c中的proposals。同时,为了简单起见,不在RPN和Fast RCNN 之间共享feature map。
结果如图:
3 Faster RCNN
上面用的是固定的proposals,在Faster RCNN中,RPN和Fast RCNN网络是共享骨干网络的,共享特征。
结果如图:
图中的*是原始论文结果,a是baseline,之所以比*高的原因是:1 使用的图片像素是800取代600,2 对每个图片训练512个ROI而不是64个 3使用5个尺度的anchor取代4个(增加了
) 4 在测试时,每个图片使用1000个proposals而不是300个。所以高了一些。
再看FPN的结果,发现时56.9,这不是刚才不共享feature map的结果吗,
对,这个图还是不共享feature的结果,因为是为了简单起见。
如图是共享特征图的结果:
可以看出共享特征之后,再次提高了
4 在coco上做对比
在图5中的resnet-101还没有充分训练,又训练以后,结果如图4,但是时间原因,结果还是不共享feature的结果,相信共享以后还会提升。
而且,我们公布的结果并没有探索现在流行的trick,比如迭代回归[9](这是啥??),难样本挖掘,上下文建模[16](??这又是啥),以及数据增强等,所以如果做了这些提升,结果还会提升进一步。
在分割上的应用
暂时不总结这个分割部分了
比如mask rcnn就是使用了FPN,卓有成效。
总结
总的来说,FPN当然是很有效果的,应用广泛。FASF是针对FPN的问题,去做改进,让其自己选择更好的feature map,关于这一点,之后在FASF再详细讲一讲。
源代码部分还没有解析,之后有机会会添加上的。