参考文献:https://arxiv.org/pdf/1911.09070.pdf
代码实现:
原论文提供https://github.com/google/automl/tree/master/efficientdet
pytorch提供https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch
在计算机视觉中,模型效率变得越来越重要。在本文中,我们系统地研究了用于目标检测的神经网络体系结构设计选择,并提出了一些关键的优化方法来提高效率。首先,我们提出了一种加权双向特征金字塔网络(BiFPN),该网络可以方便快速地融合多尺度特征。其次,我们提出了一种复合缩放方法,该方法同时对所有主干网络,特征网络和box/class预测网络的分辨率、深度和宽度进行统一缩放。基于这些优化和EfficientNet主干网络,我们开发了一种称为EfficientDet的新目标检测器系列,在资源限制条件下,该检测器始终比现有技术具有更高的效率。特别是对于单一模型和单一比例,我们的EfficientDet-D7在COCO数据集上达到了最新的52.2 AP,具有52M参数和325B FLOP,与以前的检测器相比,规模缩小了4到9倍,使用的FLOP减少了13到42倍。
近年来,提高目标检测精度方面的研究取得了巨大进展,但是最先进的目标检测器也变得越来越昂贵。例如,最新的基于NASFPN的AmoebaNet检测器[42]需要167M的参数和3045B的FLOPS(比RetinaNet[21]多30倍),才能达到最先进的精度。模型规模大和昂贵的计算成本阻碍了它们在许多实际应用中的部署,例如机器人和自动驾驶汽车,模型规模和时间延迟高度限制了算法应用。考虑到这些现实世界的资源约束,模型效率对于目标检测变得越来越重要。
许多先前的工作旨在开发更高效的检测器架构,例如one stage[24、30、31、21]和anchor free[18、41、37],或者压缩现有模型[25、26]。虽然这些方法获得了更好的效率,但通常会损失精度。此外,以往的研究大多只关注特定或小范围的资源需求,但从移动设备到数据中心的各种实际应用,往往需要不同的资源约束。
一个自然的问题是:是否有可能在广泛的资源限制(例如从3B到300B的FLOPs)中构建一个既具有更高精度又具有更好效率的可扩展检测体系结构?本文旨在通过系统地研究探测器结构的各种设计选择来解决这一问题。基于one stage检测器范式,我们研究了主干网络、特征融合和class/box网络的设计选择,并确定了两个主要挑战:
挑战1:高效的多尺度特征融合。自文献[20]提出以来,FPN被广泛应用于多尺度特征融合。最近,PANet[23]、NAS-FPN[8]和其他研究[17、15、39]开发了更多的用于跨尺度特征融合的网络结构。在融合不同的输入特征时,以往的研究大多只是简单的将它们相加,没有区别;然而,由于这些不同的输入特征具有不同的分辨率,我们观察到它们对融合输出特征的贡献往往是不一样的。为了解决这一问题,我们提出了一种简单而高效的加权双向特征金字塔网络(BiFPN),它引入可学习的权值来学习不同输入特征的重要性,同时反复应用自顶向下和自下而上的多尺度特征融合。
挑战2:模型缩放。虽然以前的工作主要依赖于更大的主干网络[21、32、31、8]或更大的输入图像尺寸[11、42]以获得更高的精度,但我们观察到,在兼顾精度和效率的情况下,放大特征网络和class/box预测网络也是至关重要的。在文献[36]的启发下,我们提出了一种目标检测器的复合缩放方法,该方法联合扩大了所有主干网络、特征网络、class/box预测网络的分辨率/深度/宽度。
最后,我们还观察到,最近引入的EfficientNets[36]比以前常用的主干网络实现了更好的效率。将EfficientNet主干网络与我们提出的BiFPN和复合缩放方法相结合,我们开发了一个新的目标检测器家族EfficientDet,与以前的目标检测器相比,它可以在更少的参数和FLOPS情况下获得更好的精度。图1和图4显示了在COCO数据集上的性能比较[22]。在类似的精度下,我们的EfficientDet使用的FLOPS比YOLOv3少28倍[31],比RetinaNet少30倍[21],比最近ResNet+NAS-FPN少19倍[8]。特别是,在single-model和single test-time scale下,我们的EfficientDet-D7以52M参数和325B FLOPS实现了最新的52.2AP,比最佳检测器[42]的性能好1.5AP,同时小4倍,使用的FLOPS少13倍。我们的EfficientDet在GPU/CPU上比以前的检测器快3到8倍。
通过简单的修改,我们还证明了我们的single-model single-scale EfficientDet在Pascal VOC 2012语义分割上使用18B浮点运算时达到81.74%的mIOU精度,比DeepLabV3+[4]的精度高1.7%,浮点运算减少9.8倍。
主要贡献:
提出了BiFPN,一个简单快速的用于多尺度特征融合的、带有权重的双向特征网络;
提出了一种新的复合缩放方法,该方法联合扩大了所有主干网络、特征网络、class/box预测网络的分辨率/深度/宽度;
基于BiFPN和复合缩放的方法,提出了EfficientDet,这是一组新的检测器,在资源约束的条件下具有更高的准确性和更好的效率。
单阶段目标检测器:现有的目标检测器主要根据它们是否具有感兴趣区域建议步骤进行分类,分为两阶段[9、32、3、11]和单阶段[33、24、30、21]。虽然两阶段检测器往往更灵活更精确,但通常认为单阶段检测器通过利用预定义的anchor更简单、更高效[14]。近年来,单阶段检测器因其效率高、简单等优点引起了人们的广泛关注[18,39,41]。在本文中,我们主要遵循单阶段检测器的设计,并且我们证明了通过优化网络结构可以达到更好的效率和更高的精度。
多尺度特征表示:多尺度特征的有效表示和处理是目标检测的主要难点之一。早期的检测器通常直接根据从骨干网络中提取的金字塔特征层次进行预测[2,24,33]。特征金字塔网络(FPN)[20]作为一项开创性的工作,提出了一种自顶向下的方法来组合多尺度特征。遵循这一思想,PANet[23]在FPN的基础上增加了一个额外的自底向上的路径聚合网络;STDL[40]提出了一个scale-transfer模块来开发cross-scale特征;M2det[39]提出了一个U形模块来融合multi-scale特征,G-FRNet[1]引入了控制跨特征信息流的门单元。最近,NAS-FPN[8]利用神经架构搜索自动设计特征网络。尽管NAS-FPN能获得更好的性能,但它在搜索过程中需要数千个GPU小时,并且生成的特征网络是不规则的,因此很难解释。本文旨在以更直观、更具原则性的方法对多尺度特征融合进行优化。
模型缩放:为了获得更好的精度,通常的做法是增大骨干网络(例如,mobile-size models[35,13]和ResNet[12]到ResNeXt[38]和AmoebaNet[29])或增加输入图像尺寸(例如,从512x512[21]到1536x1536[42])来放大baseline检测器。最近的一些工作[8,42]表明,增加通道大小和重复特征网络也可以提高精度,这些缩放方法主要集中在单个或有限的缩放维度上。最近,文献[36]通过联合扩大网络宽度、深度和分辨率,有效提高了图像分类模型的效率。我们提出的用于目标检测的复合缩放方法主要受到了[36]的启发。
在这一部分中,我们首先阐述了多尺度特征融合问题,然后介绍了我们提出的BiFPN的主要思想:有效的双向跨尺度连接和加权特征融合。
多尺度特征融合的目的是对不同分辨率的特征进行融合。形式上,给出了一个多尺度特征 P ∗ i n = ( P l 1 i n , P l 2 i n , … ) P^{*in}=(P^{in}_{l1},P^{in}_{l2},…) P∗in=(Pl1in,Pl2in,…)的列表,其中 P l i i n P^{in}_{li} Pliin表示 l i li li级的特征,我们的目标是找到一个能够有效地聚合不同特征并输出一个新特征列表的转换 P ∗ o u t = f ( P ∗ i n ) P^{*out}=f(P^{*in}) P∗out=f(P∗in)。作为一个具体的例子,图2(a)显示了传统的自上而下的FPN[20]。它采用3-7层输入特征 P ∗ i n = ( P 3 i n , … , P 7 i n ) P^{*in}=(P^{in}_{3},…,P^{in}_{7}) P∗in=(P3in,…,P7in),其中 P i i n P^{in}_{i} Piin表示分辨率为 1 / 2 i 1/2^i 1/2i的输入图像的特征图。例如,如果输入分辨率为640x640,则 P 3 i n P^{in}_{3} P3in表示分辨率为80x80的特征图( 640 / 2 3 = 80 640/2^3=80 640/23=80),而 P 7 i n P^{in}_{7} P7in表示分辨率为5x5的特征图。传统的FPN以自顶向下的方式聚合多尺度特征:
其中Resize通常是用于分辨率匹配的上采样或下采样操作,Conv通常是用于特征处理的卷积操作。
传统的自顶向下FPN固有地受到单向信息流的限制。为了解决这个问题,PANet[23]添加了一个额外的自底向上的路径聚合网络,如图2(b)所示。跨尺度连接在[17,15,39]中有进一步的研究。最近,NAS-FPN[8]采用神经架构搜索来搜索更好的跨尺度特征网络拓扑结构,但在搜索过程中需要数千GPU小时,发现的网络是不规则的,很难解释或修改,如图2(c)所示。
通过研究这三种网络的性能和效率(表5),我们发现PANet比FPN和NAS-FPN具有更好的精度,但需要花费更多的参数和计算。为了提高模型的效率,本文提出了几种跨尺度连接的优化方法:第一,删除那些只有一个输入边的节点。我们的直觉很简单:如果一个节点只有一个输入边则没有特征融合,那么它对以融合不同特征为目的的特征网络的贡献就较小,这得到一个简化的双向网络,比如PANet;第二,如果原始输入节点与输出节点处于同一级别,则在它们之间添加额外的边,以便在不增加成本的情况下融合更多的功能;第三,与PANet[23]不同,PANet[23]只有一个自顶向下和一个自下而上的路径,我们将每个双向(自上而下和自下而上)路径视为一个特征网络层,并多次重复同一层,以实现更高层次的特征融合。第4.2节将讨论如何使用复合缩放方法确定不同资源限制下的层数。通过这些优化,我们将新的特征网络命名为双向特征金字塔网络(BiFPN),如图2和3所示。
当融合具有不同分辨率的特征时,一种常见的方法是首先将它们调整为相同的分辨率,然后对它们进行求和。金字塔注意网络[19]引入了全局自注意上采样来恢复像素定位,这在[8]中有进一步的研究。所有以前的特征融合方法都平等地对待所有输入特征,没有区别。然而,我们观察到,由于不同输入特征的分辨率不同,它们通常对输出特征的贡献是不平等的。为了解决这个问题,我们建议为每个输入增加一个额外的权重,并让网络学习每个输入特征的重要性。基于此,我们考虑三种加权融合方法:
Unbounded fusion: O = ∑ i w i ⋅ I i O=\sum_iw_i \cdot I_i O=∑iwi⋅Ii。其中 w i w_i wi是可学习的权重,可以是标量(每个特征)、矢量(每个通道)或多维张量(每个像素)。我们发现一个标量可以在最小的计算成本下达到与其他方法相当的精度。然而,由于标量权重是无限的,它可能会导致训练的不稳定性。因此,我们使用权重归一化来限定每个权重的取值范围。
Softmax-based fusion: O = ∑ i e w i ∑ j e w j ⋅ I i O=\sum_i\frac{e^{wi}}{\sum_je^{wj}} \cdot I_i O=∑i∑jewjewi⋅Ii。一个直观的想法是对每个权重应用softmax,这样所有的权重都被规范化为一个概率值范围从0到1,表示每个输入特征的重要性。然而,如我们在第6.3节中的消融研究所示,额外的softmax导致GPU硬件显著减速。为了最小化额外的时间成本,我们进一步提出了一种快速融合方法。
Fast normalized fusion: O = ∑ i w i ϵ + ∑ j w j ⋅ I i O=\sum_i\frac{wi}{\epsilon+\sum_jwj} \cdot I_i O=∑iϵ+∑jwjwi⋅Ii。在每个 w i w_i wi后应用Relu保证 w i ≥ 0 w_i\geq0 wi≥0, ϵ = 0.0001 \epsilon=0.0001 ϵ=0.0001是避免数值不稳定的一个小值。类似地,每个归一化权重的值也在0到1之间,但是由于没有softmax操作,因此效率更高。我们的消融研究表明,这种快速融合方法与基于softmax的融合方法具有非常相似的表现结果,但在gpu上运行速度提高了30%(表6)。
我们的最终BiFPN集成了双向跨尺度连接和快速归一化融合。作为一个具体的例子,我们描述了图2(d)中所示的BiFPN在第6级的两个融合特征:
其中 P 6 t d P_6^{td} P6td是自上而下路径第6级的中间特征, P 6 o u t P_6^{out} P6out是自下而上路径第6级的输出特征,所有其他功能都以类似的方式构建。值得注意的是,为了进一步提高融合效率,我们使用了深度可分离卷积[5,34]进行特征融合,并在每次卷积后加入了batch normalization和激活。
基于我们的BiFPN,我们开发了一个新的检测模型家族EfficientDet。在这一部分中,我们将讨论网络结构和一种新的用于EfficientDet的复合缩放方法。
图3显示了EfficientDet的总体架构,它主要遵循了单阶段检测器范式[24、30、20、21]。我们使用预训练过的ImageNet作为EfficientDet的骨干网络。我们提出的BiFPN是一个特征网络,它从骨干网络中提取3-7级特征{ P 3 , P 4 , P 5 , P 6 , P 7 P3,P4,P5,P6,P7 P3,P4,P5,P6,P7},并反复应用自顶向下和自下而上的双向特征融合。这些融合后的特征分别输入到class/box网络中,预测对象类别和边界框。与[21]类似,class/box网络权重在所有级别的特征中共享。
为了优化精度和效率,我们希望开发出一系列能够满足各种资源约束的模型,这里的一个关键挑战是如何扩大基线效率的et模型。
以前的工作主要是通过使用更大的骨干网络(例如ResNeXt[38]或AmoebaNet[29])、使用更大的输入图像或堆叠更多的FPN层来放大baseline检测器[8]。这些方法通常效率比较低,因为它们只关注单个或有限个缩放维度。最近的工作[36]通过联合放大网络宽度、深度和分辨率的所有维度,在图像分类方面显示出显著的性能。受这些工作的启发[8,36],我们提出了一种新的目标检测的复合缩放方法,该方法使用简单的复合系数 φ φ φ来联合放大骨干网络、BiFPN网络、class/box网络和分辨率的所有维度。与[36]不同的是,目标检测器比图像分类模型具有更多的尺度维数,因此对所有维度的网格搜索代价高昂。因此,我们使用基于启发式的缩放方法,但仍然遵循联合缩放所有维度的主要思想。
Backbone network:我们重用EfficientNet-B0到B6的相同宽度/深度比例系数[36],这样我们就可以轻松地重用ImageNet预训练的检查点。
BiFPN network:我们线性增加BiFPN的深度 D b i f p n D_{bifpn} Dbifpn(#layers),因为深度需要四舍五入为小整数。对于BiFPN宽度 W b i f p n W_{bifpn} Wbifpn(#channels),指数增长BiFPN宽度 W b i f p n W_{bifpn} Wbifpn(#channels),类似于[36]。具体来说,我们对值列表{ 1.2 , 1.25 , 1.3 , 1.35 , 1.4 , 1.45 1.2,1.25,1.3,1.35,1.4,1.45 1.2,1.25,1.3,1.35,1.4,1.45}执行网格搜索,并选择最佳值1.35作为BiFPN宽度比例因子。形式上,BiFPN宽度和深度按以下公式缩放:
Box/class prediction network:我们将其宽度固定为始终与BiFPN相同(即 W p r e d = W b i f p n W_{pred}=W_{bifpn} Wpred=Wbifpn),但使用以下公式线性增加深度(#layers):
输入图像分辨率:由于第3-7级特征用于BiFPN,因此输入分辨率必须可除以 2 7 = 128 2^7=128 27=128,因此我们使用公式线性增加分辨率:
根据方程式1、2、3,用不同的φ,我们得到了EfficientDet-D0(φ=0)到D7(φ=7),如表1所示,其中D7与D6相同,只是分辨率更高。值得注意的是,我们的缩放是基于启发式的,可能不是最优的,但是我们将展示这种简单的缩放方法可以显著地提高效率。
我们使用COCO 2017检测数据集[22]中118K张训练图像评估EfficientDet,利用动量为0.9、权值衰减为4e-5的SGD优化器对每个模型进行训练。在第一个训练阶段,学习率从0线性增加到0.16,然后利用cosine衰减规则衰减学习率。在每次卷积后加入batch normalization, batch norm衰减为0.99,epsilon 1e-3。与[36]一样,我们使用swish激活[28,6]和衰减为0.9998的指数移动平均。我们还采用了常用的 focal loss[21],α=0.25,γ=1.5,纵横比{1/2,1,2}。每个模型在32 TPUv3核上训练300个epoch,批量总大小为128。我们使用RetinaNet[21]的training-time multi-resolution cropping/scaling and flipping
augmentation进行预处理。值得注意的是,我们的任何模型都没有使用自动增强功能[42]。
表2比较了在不增加test-time的情况下,在单模型单尺度设置(没明白?)下,EfficientDet与其他目标检测器的性能。我们报告了test-dev(20K个没有公共真实标签的测试图像)和val(5K个有真实标签的验证图像)的准确性。我们的EfficientDet比以前的检测器实现了更好的效率,它比以前的检测器小4到9倍,在各种精度或资源限制下使用的FLOPs也少13到42倍。在相对较低的精度范围内,我们的EfficientDet-D0在减少28倍的FLOPs的情况下达到了与YOLOv3相似的精度。与RetinaNet[21]和Mask RCNN[11]相比,我们的EfficientDet-D1的参数减少了8倍,FLOPs减少了21倍,达到了类似的精度。在高精度范围内,我们的EfficientDet也始终优于最新的NAS-FPN[8]和[42]中的增强版本,参数和FLOPs更少。特别是,我们的EfficientDet-D7在测试开发上实现了最新的52.2 AP,在单模型单标度上实现了51.8 AP。值得注意的是,与需要特殊设置的大型AmoebaNet + NAS-FPN+ AutoAugment 模型[42]不同(例如,将anchor从3x3更改为9x9,使用模型并行进行训练,并依赖昂贵的自动增强),所有EfficientDet模型都使用相同的3x3 anchor,并且在没有模型并行或自动增强的情况下进行训练。
除了参数大小和FLOPs之外,我们还比较了Titan-V GPU和单线程Xeon CPU上的实际延迟。我们用batch size 1运行每个模型10次,并报告平均值和标准差。图4说明了模型大小、GPU延迟和单线程CPU延迟的比较。为了公平比较,这些数字只包括在具有相同设置的同一台机器上测量的结果。与以前的检测器相比,EfficientDet模型在GPU上的速度高达4.1倍,在CPU上的速度高达10.8倍,这表明它们在现实世界的硬件上也很有效。
虽然我们的EfficientDet模型主要是为目标检测而设计的,但我们也对它们在语义分割等任务上的性能感兴趣。参照文献[16],我们修改了EfficientDet模型,以保持BiFPN中的特征水平{ P 2 , P 3 , … , P 7 P2,P3,…,P7 P2,P3,…,P7},但只使用P2进行最终的每像素分类。为了简单起见,这里我们只评估基于EfficientDet-D4的模型,该模型使用ImageNet预训练的EfficientNet-B4主干网络(大小与ResNet-50相似)。我们将BiFPN的通道大小设置为128,将classification head的通道大小设置为256。BiFPN和classification head重复3次。
表3显示了我们的模型与Pascal VOC 2012[7]上的DeepLabV3+[4]之间的比较。值得注意的是,我们排除了集成、测试时间增加或COCO预训练的结果。在相同的单模型单尺度设置下,我们的模型比现有技术DeepLabV3+[4]的FLOPs少9.8倍,精度提高了1.7%。这些结果表明,EfficientDet在语义分割方面也有很好的应用前景。
在这一节中,我们为我们提出的EfficientDet各部分设计进行了消融研究,为了简单起见,这里的所有精度结果都是针对COCO验证集的。
由于EfficientDet同时使用一个强大的主干网络和一个新的BiFPN,我们想了解它们对提高精度和效率的贡献有多大,表4比较了主干网络和BiFPN的影响。在ResNet-50[12]主干网络和自上而下FPN[20]组成的RetinaNet检测器[21]基础上,我们首先用EfficientNet-B3代替主干网络,在参数和FLOPs稍少的情况下,精度提高约3 AP,进一步用我们提出的BiFPN代替FPN,我们可以用更少的参数和FLOPs获得额外的4 AP增益。这些结果表明,有效的主干网络和BiFPN都是我们最终模型的关键部分。
表5显示了图2中列出的具有不同跨尺度连接的特征网络的准确性和模型复杂性。值得注意的是,最初的FPN[20]和PANet[23]只有一个自上而下或自下而上流,但是为了公平比较,这里我们重复它们中的每一个,并将所有的卷积替换为深度可分离卷积,这与BiFPN相同。我们使用相同的主干网络和class/box预测网络,所有实验使用相同的训练设置。如我们所见,传统的自顶向下FPN固有地受到单向信息流的限制,因此具有最低的精度。虽然重复FPN+PANet的精度比NAS-FPN[8]稍高,但它也需要更多的参数和FLOPs。我们的BiFPN与重复FPN+PANet的精度相当,但使用的参数和FLOPs要少得多。通过附加的加权特征融合,我们的BiFPN以更少的参数和FLOPs达到最佳的精度。
如第3.3节所述,我们提出了一种fast normalized fusion方法,保留了归一化化权重的优点。表6比较了三个不同模型尺寸的探测器中softmax和fast normalized fusion方法。结果表明,我们的fast normalized fusion方法与softmax-based fusion方法达到了相似的精度,但在gpu上运行速度要快1.26x-1.31x。
为了进一步了解softmax-based fusion和fast normalized fusion,图5展示了在EfficientDet-D3中从BiFPN层随机选择的三个特征融合节点的学习权重。值得注意的是,所有输入的归一化权重(例如, e w i ∑ j e w j \frac{e^{wi}}{\sum_je^{wj}} ∑jewjewi表示softmax-based fusion, w i ϵ + ∑ j w j \frac{wi}{\epsilon+\sum_jwj} ϵ+∑jwjwi表示fast normalized fusion),总和为1。有趣的是,在训练过程中,归一化的权重变化很快,这表明不同的特征对特征融合的贡献是不平等的。尽管变化很快,但是我们的fast normalized fusion方法对于所有三个节点都显示出与softmax-based fusion方法非常相似的学习行为。
如第4.2节所述,我们采用一种复合缩放方法来联合扩大主干网络、BiFPN和box/class预测网络的深度/宽度/分辨率的所有维度。图6将我们的复合缩放与其他缩放单个分辨率/深度/宽度维度的替代方法进行了比较。尽管从同一个baseline检测器开始,我们的复合缩放方法比其他方法获得更好的效率,这表明复合缩放方法具有更好地平衡体系结构不同维度的好处。
本文系统地研究了目标检测的网络结构设计选择,提出了一种加权双向特征网络和复合缩放方法,以提高检测的精度和效率。基于这些优化,我们开发了一个新的检测器族EfficientDet,它在广泛的资源约束范围内始终比现有技术获得更好的精度和效率。特别是,我们可扩展的EfficientDet模型比以前的目标检测和语义分割模型具有更少的参数和FLOPs,达到了最新的精度。
pytorch实现见https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch项目,是目前为止最接近原论文结果的项目。