EfficientDet: Scalable and Efficient Object Detection 论文笔记
前言
以往的很多目标检测器,为了提高检测效率,通常会牺牲检测精度。那么,有没有可能构建一个可缩放的检测模型,使其既能提高检测效率,又能保证检测精度呢?这里涉及两方面的挑战:
- 高效的多尺度特征融合 。在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层的特征图(P3−P7P_3-P_7)进行融合,但它只有一条top-down通路,也就是说只有一条信息流;为了解决这个问题,在PANet中,又加入了一条bottom-up通路;NAS-FPN使用神经架构搜索寻找更好的结构,但它搜索出来的网络结构是不规律的。通过观察,发现PANet的检测精度是最好的,但它的参数很多并且计算量也很大,为了提升PANet的检测效率,本文提出以下几个优化方式:
- 首先,移除那些只有一条输入边的节点。之所以这样做,是因为只有一个输入来源,那么肯定就没有特征融合,那么该节点对整个特征网络的贡献肯定很少,因为特征网络毕竟要实现不同特征的融合,你既然没有融合特征,那么去掉也无所谓;
- 如果原始输入节点和输出节点位于同一层级,那么添加一条从输入到输出节点的边,这是为了在不增加额外消耗的同时融合更多特征;
- 将每个双向通路(图f中虚线框中的部分)作为特征网络中的一层,重复多次,以得到更高级的特征融合。
经过以上的优化,我们就从PANet得到了一个全新的特征网络——BiFPN。
2. 加权特征融合
在得到BiFPN之后,还需要在特征融合时给每个输入特征一个权重,以区分不同输入特征的重要性。这里给出三种加权方法:
- unbounded fusion :O=∑iwi⋅IiO=\sum_iw_i \cdot I_i,如果每个特征层一个权重,wiw_i是一个标量;如果每个通道一个权重,wiw_i就是一个向量;如果每个像素一个权重,那么wiw_i就是一个张量。其中,标量可以在计算消耗最少的情况下达到最佳的检测精度,但标量是无界的,它很可能导致训练的不稳定,因此还是要借助归一化来约束权重的范围。
- softmax-based fusion :O=∑iewi∑jewjO=\sum_i \frac{e^{w_i}}{\sum_j e^{w_j}},也就是对每个权重进行softmax处理,将值约束在0和1之间。但是softmax有一个缺点,就是它在GPU上明显速度下降很多。
- fast normalized fusion :O=∑iwiϵ+∑jwjO=\sum_i \frac{w_i}{\epsilon + \sum_j w_j},通过ReLU来确保wi≥0w_i \geq 0,ϵ=0.0001\epsilon=0.0001避免数值不稳定。这样经过归一化的权值依旧落入0和1之间,但比softmax操作更有效率。
那么最终的BiFPN就是结合了双向跨尺度连接(bidirectional cross-scale connections)和快速归一化融合(fast normalized fusion),这里用图(f)中的P6P_6举个例子,说明一下BiFPN融合的两个特征:

P6tdP{td}_6是P6P_6在top-down通路上的中间特征,P6outP{out}_6是P6P_6在botton-up通路上的输出特征。为了进一步提升效率,还使用了depthwise可分离卷积来进行特征融合,并且在每次卷积之后添加批归一化和激活操作。
EfficientDet
2. EfficientDet的结构

上图是EfficientDet的整体结构,采用在ImageNet上经过预训练的EfficientNet作为backbone,将BiFPN作为特征网络,它选取的是backbone中3到7层输出的特征图{P3,P4,P5,P6,P7}\lbrace P_3,P_4,P_5,P_6,P_7 \rbrace,然后在上面重复应用top-down和bottom-up双向特征融合。融合后的特征分别被送入分类网络和回归网络中,以生成目标类别并预测bbox,分类与回归网络在所有特征层级上的权重是共享的。
2. 复合缩放
基于EfficientNet中对网络的宽度、深度和输入分辨率的联合扩展,本文提出了一种新的复合缩放方法以进行目标检测,具体来说就是,使用复合系数ϕ\phi对backbone、BiFPN、分类、回归网络和输入分辨率等所有维度进行扩展。与用于图像分类的EfficientNet不同,目标检测涉及的缩放维度更多,因此本文使用基于启发式的缩放方法:
backbone
直接把EfficientNet-B0到B6的缩放系数拿来用,这样也方便使用现成的checkpoints。
BiFPN
让BiFPN的宽度WbifpnW_{bifpn}呈指数级增长,但是让深度DbifpnD_{bifpn}线性增加,因为深度需要四舍五入为较小的整数。缩放公式为:

分类/回归网络
固定它们的宽度与BiFPN保持一致,即Wpred=WbifpnW_{pred}=W_{bifpn},但是线性增加深度:

输入分辨率
由于BiFPN选取的是P3−P7P_3-P_7,因此输入分辨率必须是272^7的倍数,因此线性增加输入分辨率:

这样我们就可以将EfficientDet扩展为EfficientDet-D0(ϕ=0\phi=0)到D6(ϕ=6\phi=6),如下表所示。由于当ϕ≥7\phi \geq7时会超出内存大小,因此D7只是在D6的基础上增加了输入分辨率大小,而其它的所有维度保持不变。

下图比较了复合缩放方法与只缩放一种维度的方法,可以看到虽然开始与同一个baseline,但其它的方法在检测精度方面提升的较为明显,而复合缩放方法同时提升了检测精度和检测效率,实现了一个trade-off:

结论
本文提出的BiFPN是对FPN的进一步改进,它采用双通道跨层连接,同时不同的输入特征具有不同的权重,提升了特征融合效率和融合质量;提出的复合缩放方法能够使得检测器的效率和精度都能得到提升,实现了检测效率和检测精度之间的trade-off。EfficientDet以EfficientNet为基础,将这两种方法结合起来,效果很好。
