EfficientDet

论文:https://arxiv.org/pdf/1911.09070.pdf
代码:https://github.com/google/automl/tree/master/efficientdet
https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch

1 问题提出

近年来的目标检测算法取得了很大的进步,但往往算法计算量很大,无法在机器人及自动驾驶领域应用。而单阶段、anchor free的算法和模型压缩又会损失检测精度。因此,作者提出能否针对不同的应用场景,构建可伸缩的检测架构以实现高效准确的目标检测?

作者研究了一阶段目标检测算法的骨干网络设计、特征融合和分类及回归子网络的构建,发现了两个主要的难点:

  • 高效的多尺度特征融合
    自FPN开始,检测算法都开始使用多尺度的特征融合。但前面这些算法都是简单的把各尺度的特征进行相加,没有进行区分。但实际上,因为不同尺度的特征具有不同的分辨率,他们对输出的融合特征的贡献是不同的。因此作者提出了使用带加权的双向FPN(BiFPN),使用可学习的权重来学习不同输入特征的重要性,实现自上向下和自下而上的多尺度特征融合。

  • 模型缩放
    前面的工作主要依靠使用更大的模型或者更大尺寸的输入图像以取得更高的准确率,但作者发现缩放特征提取网络和分类及回归子网络对准确率和效率也有至关重要的影响。受Efficient网络的启发,作者提出了组合式的目标检测算法,对特征提取网络、分类子网络、回归子网络联合进行分辨率、深度、宽度的缩放。

2 BiFPN

BiFPN:高效的双向跨尺度连接和加权特征融合。

EfficientDet

2.1 FPN

多尺度特征融合的目标在于聚合不同分辨率的特征。给定一系列的多尺度特征Pin={Pl1in,Pl2in,}P^{in} = \{P^{in}_{l_1},P^{in}_{l_2},\cdots\}PliinP^{in}_{l_i}表示第i层的特征,特征融合的目的在于找到一个变换函数f,输入多尺度特征PinP^{in},得到聚合后的特征Pout=f(Pin)P^{out} = f(P^{in})。Fig. 2(a)为最常见的FPN结构,其采用自上向下的方式进行特征聚合,过程可以描述为:
EfficientDet

2.2 双向多尺度连接

传统的自上向下的FPN受限于单向的信息流动,PANet进行了改进,添加了一个自下而上的的特征聚合通路,如Fig. 2(b)所示。Fig. 2©是通过搜索得到的FPN网络结构,其搜索过程耗时长且得到的网络结构难以解释和修改。

作者复现了FPN和PANet,发现PANet效果优于FPN和NAS-FPN,但是其参数量和计算量更大。为了提高模型效率,作者提出了一些优化措施:

  • 移除了只有单个输入的边,这是因为如果某个节点只有一个输入,那么其对特征融合是无意义的;
  • 在同层的输入节点和输出节点添加直连通道,可以在不增加计算量的情况下融合更多的特征;
  • 重复使用BiFPN以进行更高层级的特征融合,根据硬件的资源决定使用多少层的重复。

结合这些改进,得到的BiFPN如Fig. 2(d)所示。

2.3 加权特征融合

前面的特征融合方法都是给予不同的网络层特征相同的权重,但作者观察到不同层的特征应该给予不同的加权系数。因此作者提出在特征加权过程中添加可以通过网络学习得到的加权系数以表示对应层特征的重要性。作者考虑了三种加权融合方法:

  • Unbounded fusion:O=iwiIiO = \sum_iw_iI_iwiw_i可以是一个标量(表示一层的特征的加权系数),也可以是一个向量(表示特征的每一个channel的加权系数),还可以是一个多维tensor(表示每一个像素的加权系数)。实验发现使用一个标量系数已经可以取得较好的准确率,并且此时的计算量最小。但由于该标量权重系数没有限制,可能会引起训练过程的不稳定。
  • Softmax-based fusion:O=iewijewjIiO = \sum_i \frac{e^{w_i}}{\sum_j e^{w_j}}I_i,对每个权重应用softmax处理,使其变为一个概率值,表示各层feature的重要性。但是在GPU上计算softmax的效率很低,因此又提出了下面的快速版本;
  • Fast Normalized fusion:O=iwiϵ+jwjIiO = \sum_i \frac{w_i}{\epsilon + \sum_j w_j}I_i,每个wiw_i都是Relu之后的输出,保证了wi0w_i \geq 0ϵ=0.0001\epsilon = 0.0001是一个小的正数以避免数值不稳定。这种计算方式仍然可以把前面的式子看成是概率,表示各层权重的重要性,但因为没有使用softmax操作,因此计算较快,实验证明快速版本可以取得和Softmax-based fusion相近的准确率。

最终的BiFPN是双向多尺度连接和快速归一化加权的组合。如Fig. 2(d)所示:
EfficientDet

3 EfficientDet

3.1 网络结构

EfficientDet使用基于ImageNet预训练的EfficentNets作为骨干网络,使用本文提出的BiFPN作为特征处理网络,重复多次进行特征的自上向下和自底向上的特征融合。融合后的特征送入分类和回归子网络完成目标的类别和位置的判定。分类和回归子网络共享参数。

3.2 组合缩放

EfficientNets中是对网络的宽度、深度和输入分辨率进行联合缩放。对于检测任务,作者使用系数ϕ\phi对骨干网络、BiFPN、分类/回归子网络和输入分辨率进行联合缩放以使用不同计算能力的硬件设备。由于目标检测需要缩放的因素较多,因此直接对所有变量进行网格化搜索不现实,作者采用了层次化的搜索方法。

骨干网络:骨干网络依旧沿用EfficientNet中B0到B6的缩放策略,目的是可以复用这些预训练模型;

BiFPN网络:因为网络的深度需要是整数,因此作者是在线性增加BiFPN的深度DbifpnD_{bifpn}(网络层数),但是BiFPN的宽度WbifpnW_{bifpn}(channel数)是类似于EfficientNet的方式进行指数扩充的。缩放规则为:
EfficientDet
Box/class预测网络:该网络的宽度始终和BiFPN的宽度相同,即Wpred=WbifpnW_{pred} = W_{bifpn},但是该网络的深度是线性进行扩充的:
EfficientDet
输入分辨率:因为BiFPN中用到了骨干网络的第3到第7层的特征,因此网络的输入分辨率必须能够被272^7=128整除,所以作者线性进行输入分辨率的扩充。
EfficientDet

基于上述规则,作者设置ϕ\phi从0到7进行变化,得到了EfficientDet-D0到D7,如表1所示。
EfficientDet

4 实验结果

EfficientDet
EfficientDet