前言
以往的很多目标检测器,为了提高检测效率,通常会牺牲检测精度。那么,有没有可能构建一个可缩放的检测模型,使其既能提高检测效率,又能保证检测精度呢?这里涉及两方面的挑战:
- 高效的多尺度特征融合。在FPN的基础上,又发展出了PANet和NAS-FPN以进行跨尺度特征融合。但是在融合特征时,这些方法只是不加以区分的将特征进行简单的相加,然而不同特征的分辨率是不同的,它们对融合后的特征的贡献程度也是不同的。为了解决这个问题,本文提出了加权双向特征金字塔(weighted bi-directional feature pyramid network,BiFPN),它引入了可学习的权重以了解不同特征的重要性,同时反复进行自上而下和自下而上的多尺度特征融合。
- 模型的缩放。以往的目标检测方法依赖较大的backbone或输入图像大小以提高检测精度,而本文发现,当同时考虑检测精度和检测效率时,需要对特征网络和分类/回归网络进行缩放。因此本文提出一种复合缩放方法(compound scaling method),它可以为所有的backbone、特征网络和分类/回归网络的分辨率/深度/宽度进行缩放(一般都是放大)。
由于EfficientNet比以往的任何backbone的效率都要好,因此本文以EfficientNet作为backbone,将其与BiFPN和复合缩放结合起来,构建了一个新的目标检测器,称为EfficientDet,下图展示了不同的目标检测器在COCO上的性能比较,横轴FLOPS表示每秒钟的浮点数计算量,纵轴表示检测精度,可以看到,EfficientDet在检测速度和检测精度上都完成了出色的表现。
BiFPN
1. BiFPN的构成方式
上图(a)是FPN,它抽取第3-7层的特征图( P 3 − P 7 P_3-P_7 P3−P7)进行融合,但它只有一条top-down通路,也就是说只有一条信息流;为了解决这个问题,在PANet中,又加入了一条bottom-up通路;NAS-FPN使用神经架构搜索寻找更好的结构,但它搜索出来的网络结构是不规律的。通过观察,发现PANet的检测精度是最好的,但它的参数很多并且计算量也很大,为了提升PANet的检测效率,本文提出以下几个优化方式:
- 首先,移除那些只有一条输入边的节点。之所以这样做,是因为只有一个输入来源,那么肯定就没有特征融合,那么该节点对整个特征网络的贡献肯定很少,因为特征网络毕竟要实现不同特征的融合,你既然没有融合特征,那么去掉也无所谓;
- 如果原始输入节点和输出节点位于同一层级,那么添加一条从输入到输出节点的边,这是为了在不增加额外消耗的同时融合更多特征;
- 将每个双向通路(图f中虚线框中的部分)作为特征网络中的一层,重复多次,以得到更高级的特征融合。
经过以上的优化,我们就从PANet得到了一个全新的特征网络——BiFPN。
2. 加权特征融合
在得到BiFPN之后,还需要在特征融合时给每个输入特征一个权重,以区分不同输入特征的重要性。这里给出三种加权方法:
- unbounded fusion: O = ∑ i w i ⋅ I i O=\sum_iw_i \cdot I_i O=∑iwi⋅Ii,如果每个特征层一个权重, w i w_i wi是一个标量;如果每个通道一个权重, w i w_i wi就是一个向量