EfficientDet 论文记录

先说点废话,论文是个好东西,没事多看看
看论文过程中,英文水平有限,结合着中文版本的翻译,还是能更快速的理解推荐博客

一些需要的东西

论文链接
官方代码
官方版本的一个应用
非官方keras开源代码
pyTorch开源代码
pyTorch版本的一个应用

1 引言

模型效率在计算机视觉中变得越来越重要。本文系统地研究了神经网络结构在目标检测中的设计选择,并提出了提高检测效率的几个关键优化方案。首先,我们提出了一种加权双向特征金字塔网络(BiFPN),该网络能够方便、快速地进行多尺度特征融合;其次,我们提出了一种混合缩放方法,可以同时对所有主干、特征网络和box/class预测网络的分辨率、深度和宽度进行均匀缩放。特别是,在单模型和单比例尺的情况下,我们的EfficientDet-d6在52M参数和229BFLOPs1的情况下,实现了map在 COCO数据集的最高水平(50.9),比之前最好的检测器更小,使用更少的FLOPs(13xless FLOPs ),但仍然更准确(+0.2% mAP)。

通过引言部分,可以得到以下点。

2 BiFPN

是该论文的最重要的点之一:提出一个简单而高效的加权双向特征金字塔网络(BiFPN),该网络引入了可学习的权重以了解不同输入特征的重要性,同时反复应用自上而下和自下而上的多尺度特征融合。
EfficientDet 论文记录P3-P7 是主干网络,每层代表输入图像的2的i次幂的倒数的倍数,例如输入 640×640,p3为640/2^3 = 80 以此类推。
EfficientDet 论文记录

2.1 跨尺度skip-connection

传统的自上而下的FPN固有地受到单向信息流的限制。从上图可以看出FPN是只进行了上采样叠加到各层,后面的改进如PANet和NAS-FPN虽然提供了双向的信息流。但是在模型训练中需要使用大量的GPU。
作者提出如下三点改进方式,最终形成BiFPN

  • bi-information flow双向信息流。首先移除了只有一个输入的点。作者认为一个节点只有一个输入且没有特征融合,那么它将对旨在融合不同特征的特征网络贡献较小;

  • 同层short-cut,在同level层输入到输出之间增加了一条额外的边,则可以在不增加成本的情况下融合更多特征;

  • block repeat,与PANet仅有一个自上而下和一个自下而上的路径不同,我们对待每个双向(自上而下和自下而上 向上)作为一个block,并多次重复以实现更多高级特征融合。

其实BiFPN与PANet最主要的区别在于BiFPN在同level增加了自身的shortcut。为了减少计算量又拿掉了p3和p7的一个卷积节点进行简化。

2.2 权值特征融合

这里主要的贡献在于,之前的特征融合只是把不同特征图采样到同一分辨率进行简单的加和,而作者认为不同分辨率的特征图的贡献并不是均等的,不能等同对待,因此提出对不同层的特征图进行权值分配再求和。

作者给出了一种快速归一化融合的权值分配方法:
EfficientDet 论文记录

其中wi≥0是通过在每次wi之后应用Relu来确保的,而= 0.0001是避免数值不稳定的一个小值。类似地,每个归一化权重的值也介于0和1之间,文章里的消融研究表明,这种快速融合方法具有与基于softmax的融合非常相似的学习行为和准确性,但在GPU上的运行速度提高了30%。
EfficientDet 论文记录

以p6层特征图进行举例,可以看出与FPN的区别:

3 EfficientDet

3.1 网络结构:

EfficientDet 论文记录

3.2 BiFPN network:

我们将线性增加BiFPN深度(#layers),因为深度需要四舍五入为整数。对于BiFPN宽度(#channels),将BiFPN宽度(#channels)指数增长,类似于EfficientNet。在值列表{1.2、1.25、1.3、1.35、1.4、1.45}上,并选择最佳值1.35作为宽度尺度因子。BiFPN的宽度和深度通过以下公式缩放:

EfficientDet 论文记录

框/类预测网络保持宽度不变,深度按下式线性增长:
EfficientDet 论文记录
图像分辨率:
EfficientDet 论文记录
不同的参数fai,就构建起EfficientDet从D0(fai=0)-D6(fai=6)
EfficientDet 论文记录