论文阅读: FPN
Introduction
文章开篇即指出,现有的三种 Scale handling 方法都不好。
-
Featurized image pyramid 计算开销和存储开销都太大:
基于深度网络的检测算法出来之前,检测算法基本都是基于这种scale handling;后来出现的SNIP、SNIPER也是基于Image Pyramid。 -
Single feature map 框不出小物体:
使用Single feature map的包括R-CNN、SPPNet、Fast R-CNN、Faster R-CNN、YOLOv1以及R-FCN系列。 -
Pyramidal feature hierarchy 底层大scale的feature map语义信息少,虽然框出了小物体,但小物体容易被错分:
使用Pyramidal feature hierarchy的包括SSD。
Note:
- YOLOv2是个特例,其在 26×26 层设置了通道层接至 13×13 层。本质上即为single-scale上处理two-scale的feature map信息。
如何能设计一个算法,能同时做到:
-
(计算/存储) 开销合理;
-
有效 检出小物体。
Innovation
设计出包含 “ top-down路径 ” 和 “ 横向连接 ” 的套件,来 融合 “ 少位置信息而多语义信息的top层feature map ” 和 “ 多位置信息而少语义信息的down层feature map ” :
具体地,“ top-down路径 ” 采用 2×上采样 来保证左右的scale相同;“ 横向连接 ” 采用 conv1×1 降维来保证所有channel都为256-d:
Note:
-
在FPN(+Faster R-CNN)中,选用了 C2~C5 四个scale,并对C5下采样出了 P6 一个scale。
-
在RetinaNet中,选用了 C3~C5 三个scale,并对C5下采样出了 P6、P7 两个scale。
Result
FPN组件明显能提升召回率:
在COCO数据集上Fast R-CNN因为使用了FPN组件而精度涨点:
同样也能让COCO数据集上的Faster R-CNN精度涨点:
用了FPN的Faster R-CNN,效果拔群:
Thinking
-
FPN如今已成为Detecton算法的标准组件,不管是one-stage(RetinaNet、DSSD)、two-stage(Faster R-CNN、Mask R-CNN)还是four-stage(Cascade R-CNN)都可用;
-
R-FCN系由于其自身设计的缘故,无法使用FPN;
-
底层feature map位置信息多但语义信息少,FPN为其增强了语义信息,提升了对小物体的检测效果;
-
提升检测精度,包括加强对小物体的检测效果和对大物体的检测效果。一般来说,顶层feature map是检测大物体的关键,因为容易框出大物体;底层feature map是检测小物体的关键,因为容易框出小物体;
-
FPN只是给底层featue map提供了福利,所以仅仅提升了对小物体的检测效果;
-
顶层feature map语义信息多但位置信息少,还是对检测大物体不利。后来者PAN在FPN的基础上再加了一个bottom-up方向的增强,使得顶层feature map也可以享受到底层带来的丰富的位置信息,从而把大物体的检测效果也提上去了:
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=n9xdqe5o8wu8