论文地址:
https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1911.09070
概要介绍
来自Google Brain实验室的大作,开源代码在 Github。
这个网络可以均衡不同的运算量(30B FLOPS-200B FLOPS) 和准确性
1. 有效多尺度的特征复用(特征金字塔FPN)
简单的多尺度特征复用,因为每层特征的分别率不同,因此其对结果的贡献也是不同的。这里采用了基于权重的双向特征复用,引入了可学习的权重来指导不同特征的重要性,并且采用top-down和down top的多尺度特征复用技术。
2. 模型缩放
前人的模型工作着重在更大的backbone网络,或者提高输入尺寸上。这里发现扩大特征网络以及box/class预测网络也很重要,因此提出了一个物体检测的混合缩放方法,综合考量backbone网络、特征网络和box/class网络的分辨率/深度/宽度。
简而言之,EfficientNet = 作者自研的效果很好的EfficientNet backbones + BiFPN + 混合缩放方法;这是一种新型的目标检测家族,这个家族的成员可以均衡不同的运算量(30B FLOPS-200B FLOPS) 和准确性,可以提供更高的准确率,更低的运算量。在相同准确率的情况下,比Yolov3快28倍。
相关工作
one-stage的网络:
一般评价one-stage还是two-stage的算法,主要看这个网络模型中是否有ROI(region of interest proposal)这一步骤。一般two-stage的网络比较灵活并且有较高的准确率,one-stage的网络则更加简单和高效,一般一阶段的网络会通过设计好合适的anchor来实现。本文的模型也是一个一段时间的检测模型,并且通过优化网络结构可以得到既准确又高效的识别结果。
多尺度特征表示:
目标检测的一个难点是有效地表达和处理多尺度的特征。早前的检测器使用来自backbone中不同层的特征抽取实现特征金字塔结构,比如FPN网络提出了一个自顶向下的不同尺度特征抽取方式,PANet则基于FPN提出了一种自底向上的聚合网络,等等。在这里,提出一种更加优美和基于直觉的多尺度特征融合方式。
Model Scaling:
通常为了获得更高的准确率,会通过使用更大的backbone网络来扩张基检测器,比如ResNet/ResNext/AmoebaNet;或者通过增大输入图片的尺寸来实现相同的目标,比如yolo将输入从224x224扩展到418X418。最新的研究发现增加通道数量和加深特征网络同样可以增加准确率。但是之前的工作只专注一个或者少量的上述方法,本文以及之前的一篇EfficientNet提出了一种解决方案,可以同时扩充上面提到的方法来实现Model scaling。
BiFPN
上面这张图就是FPN的思路产生历史了。
第一张图,是传统的FPN网络,在yolov3,ssd中都可以看见这种网络的身影,通过从backbone network中抽取不同的层,得到不同分辨率的features,P3是高分辨率(HW尺寸大,但是学习得到的抽象信息少),P7是低分辨率(HW小,但是学习到的抽象信息多)。在FPN中,自上往下的将低分辨率高信息量的特征上采样到前面的层,通过这种方式实现特征的融合,使得底层的高分辨率低信息量的特征可以融合到上层的抽象信息。学习公式如下:
第二张图是PANet网络的思路,FPN网络天然受限于其单路径,信息不能向上传递。于是PANET在FPN的基础上添加了一条自底向上的路径。
第三张是NASFPN网络,使用神经网络的结构让网络自动学习不同层之间特征的融合方式,这种方式需要耗费更多的时间在合适的网络规模的寻找上。
第四个即使BiFPN结构了,他可以看成是PANet网络的一种延伸,增加了从原始节点到自下向上节点的连接,并且将自顶向下和自下向上的流程整合为一个可重复使用的block.仔细来说,做了如下优化,移除了只有一个输入边的节点,因为这类节点没有特征融合,无法提供更多的信息,去除了这些节点之后,网络更加简单了。
另一个优化则是增加了同一层从输入节点到输出节点的连接,这样最终的输出既包含当前层的信息,包含上面层的信息,还包含下面层的信息。完美~
最后一个优化是,不同于PANET只进行一次自顶向下和自底向上,EfficientDet将其封装成block,可以多次使用。
基于权重的特征融合
不同分辨率特征的融合,首先需要将其resize到相同的分辨率(也就是尺寸),然后将其等权重融合(相加)。Pyramid attention networks和Nas-fpn: Learning scalable feature pyramid architecture for object detection提出对不同分辨率的特征进行权重设置。不同分辨率的特征通常对结果的贡献是不同的,因此在EfficientDet中提出了额外的权重参数用于学习每个输入的权重。考虑三种不同的权重融合方式:
Unbounded fusion:
wi是学习的权重,对于特征map来说,可以是标量;对于同一个feature map中不同的信道来说,这个参数则是一个向量;对于feature map中的每个像素点,则是一个多维张量。我们发现这个参数可以使得模型获得更高的准确率。这种方式的缺点是,因为权重是无约束的,因此训练会不稳定。
softmax-based fusion:
这种方式解决了上面一种方式的缺点。且权重的范围被约束到0-1之间。这种方式的缺陷是会严重导致GPU时间延长.
Fast normalized fusion:
这种方式解决了上面一种方式的缺点,同时通过实验发现这种方式的学习行为和准确率都非常接近第二种方式,且比第二种方式快30%的GPU运行时间。
结合了BiFPN和Fast normalized权重的概念之后,最终的BiFPN网络公示如下:
实际的网络中,特征融合还使用了depthwise separable convolution,卷积之后还添加了batchnormalization和激活层。
EfficientDet
这个网络的backbone是一段EfficientNets,BiFPN 作为特征网络,从3-7层backbone中抽取特征图,并且将BIFPN作为一个block多次重复。特征网络之后是一个类型预测网络和一个box预测网络。和论文Focal loss for dense object detection方式一样,这两个预测网络共享特征网络。
Compound Scaling
在概要介绍中可以看到,EfficientDet是一个模型家族,提供不同准确率和速度的模型。因此这里提出一种缩放网络的方法。
正如相关工作中提到的,传统的model scaling方式有:扩大主干网络、增加输入图片分辨率、使用更多的FPN层等等。现有的方法专注于其中的一个或者有限的方向。本文中提出的Compound Scaling使用一个简单的混合系数φ共同缩放主干网、BiFPN特征网络、分类/box预测网络和图片分辨率。
主干网络
主干网络复用EfficientNet-B0-B6
BIFPN网络
BiFPN网络主要有两个扩充方向:深度和宽度。深度扩充是block的扩充,采用多少个bifpn的block,符号表示为Dbifpn(#layers),这里采取线性扩充的方式。宽度扩充是BIFPN中feature map的channel数量,符号表示为Wbifpn(#channel),采用指数扩充,指数的选择通过grid search的方式选择了1.35.
Box/class预测网络
和BIFPN上的类似,两个方向,宽度上和BIFPN保持一致,深度上使用下面的公式进行线性扩张:
输入图像分辨率
因为特征网络使用了L3-L7,在主干网络中,每层网络输出HW和层数的关系为Hout = Hin/2Ln,因此输入图像的分辨率必须被27整除,输入图像的分辨率规则如下:
φ从0-7整数变换,网络的scaling规则如公式1,2,3所示。总结成表格如下:需要注意φ=6和7的时候,只有输入分辨率变化,其他参数不变。
实验效果
11.8万张训练图片训练之后,在coco2017上进行评估。每个模型使用SGD优化器,动量0.9,权重衰减系数为4e-5,在第一阶段的中,学习率从0-0.16线性增长,然后根据余弦衰减规律退火。使用swish激活函数.使用Focus loss参数alpha=0.25,γ=1.5.每个模型训练300epoch,batch size为128,数据预处理使用RetinaNet的方式。不使用数据扩充技术。
在目标检测方向上,网络的识别效果好,且速度快,FLOPS少:
在语义分割任务上,这个模型同样达到了业界的领先水准
下面这个表体现了模型的主干网和BIFPN网络对准确率作出的贡献
下面是使用不同的特征网络的效果,可以看到如果将特征网络和BIFPN一样重复,不改变主干网和预测网络的前提下,单路径的FPN确实有本质的限制;重复的FPN和PANEt网络的效果甚至高于NASFPN。
下图比较的是不同的权重融合方式的影响,softmax feature fusion和本文提出的fast normalized fusion方式。可以看到后者的速度快于前者而准确率略略低于前者。
下面是compound scaling方式的效果,可以看到联合扩展网络的方式比单一元素的扩展有效,毕竟博采众长嘛。
附录:
激活函数swish
β是个常数或可训练的参数.Swish 具备无上界有下界、平滑、非单调的特性。
Swish 在深层模型上的效果优于 ReLU。例如,仅仅使用 Swish 单元替换 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分类准确率提高 0.9%,Inception-ResNet-v 的分类准确率提高 0.6%。