论文阅读瞎记(二)EfficientDet: Scalable and Efficient Object Detection 2020
翻译加自己概括,有问题的地方请指正
不清楚:
论文: Focal loss for dense object detection 似乎是focalloss的开始,有空看看
ResNetXt网络结构与Resnet的共同点与不通点
计算机视觉中模型的效率越发重要,本文系统地学习基于检测的神经网络架构选择,并提出几个关键优化来提升效率。首先是提出了一种加权双向FPN(BiFPN),它能够快速简单地进行多尺度特征融合。第二,我们提出了一种复合标度方法,该方法可以同时对所有主干网络、特征网络和盒类预测网络的分辨率、深度和宽度进行统一标度。基于这些优化与更好的骨干网络,开发了EfficientDet:物体检测系列网络。在有限的资源限制下相比先前网络更高效。EfficientDet-D7达到SOTA。
介绍
近年模型为了追求效果变得越来越大。实际部署会受到算力限制,例如机器人与自动驾驶领域,对模型尺寸与推理耗时有较高要求。
因此有不少工作专注于更高效的模型检测结构,例如单阶段(SSD, YOLOV2,V3, Focal loss)anchor-free检测器(paired keypoints,FCOS)或是压缩现有模型。这些提速方法都会牺牲准确率。
为了解决运行效率与效果问题,建立了一个可变体量的检测结构。对于单阶段检测器,进行了各种设计选择实验,从backbone,特征融合,头方法以及另外两个主要挑战:
挑战1:高效的多尺度融合
FPN被广泛用于多尺度融合,PANet,NAS-FPN等其他研究也开发了一些交叉尺度特征融合的方法。一般尺度融合使用SUM,但这些特征对于输出的影响一般来说是不相等的(之前做输出特征可视化直方图可知每层输出数据的分布不同)为了解决这个问题,团队提出了加权双向特征金字塔(BiFPN)这种方法有可训练权值来学习不同输入特征的重要程度。在自上而下和自下而上的多尺度融合中都有使用
挑战2:model scaling
先前的工作主要依赖于大型骨干网络(backbone)或者大图片输入来取得更高的准确率。需要同时考虑提出了一种复合尺度方法来实现目标探测器的尺度变换,该方法可以对所有主干网络、特征网络、box预测网络的分辨率/深度/宽度进行尺度变换。
EfficientNet运行效率更高,结合EfficientNet的骨干网络,BiFPN与混合尺度变换。作者开发了一系列网络,取得了高运行效率与高表现得效果、

在COCO数据集上做的对比,同算力下基本吊捶同时期检测网络。
相关工作:
单阶段检测器:
先哟肚饿检测器大体可分两类:有着区域提议的双阶段或者是单阶段网络。总体来讲双阶段更精确,单阶段更高效。本文作者网络基于单阶段思路并修改以提升效果。
多尺度特征表达:
检测任务的难点在于高效提取并处理多尺度的特征。早期网络直接使用backbone中不同层中提取出的特征组成特征金字塔。FPN提出自上而下通路来组成多尺度特征金字塔。继承这个思想的PANet添加了自底向上通路来聚合网络(其实就是加了个下采样)STDL提出一种基于尺度转移的跨尺度特征挖掘模型。 M2det提出u形模块融合多尺度特征, G-FRNet引入门单元控制跨特征的信息流,NAS-FPN利用神经结构搜索自动设计特征网络拓扑(算力黑洞)。
模型尺度:
为了获得更好的效果,大多扩张backbo来增大检测器,比如ResNet,ResNeXt以及AmoebaNet。或者是增加输入图片尺寸从512到1536.最近还有通过增加channel和重读特征来提升效果的。这些对于模型尺度的变换大多围绕单一尺度进行变换测试。 Efficientnet通过联合变换网络宽度、深度和分辨率,在图像分类中显著提升模型效率,作者提出的混合尺度方法思想来源于此。
BiFPN
公式化问题
多尺度特征融合的目的在于聚合不同分辨率的特征。一般来讲给定一个包含有各种尺度大小的特征,目标是找出一个有效统合并输出特征的方式f。
图2中展示了传统FPN的top-down结构,f输入有level3-7,数字代表了当前特征尺寸是原始输入图像尺寸的2的n次分之一
FPN的resize开始用的是近邻差值,后来换成了效果更好但是计算消耗更多的双线性差值了。
3.2 Cross-Scale Connections 交叉尺度连接
FPN内部受到单向信息流的限制,后面PANet又额外增加了一个bottom-up分支来解决这个问题。NAS-FPN则是使用网络搜索来找到更好的特征混合拓扑(有钱真好)
上面三个网络PANet效果最好但是参数和计算消耗最多,为了解决这个问题下面提出几点:
1.移除了单端输入(only one input edge)的节点,理由:单端输入没有特征融合,对于以融合特征为目标的neck来讲贡献小
2.给同level的特征添加从输入到输出的额外连接(extra edge是直连吗?)以此融合更多的特征
3.不同于PANet只有一组上下通路,作者把每一个上下通路看做一个特征层重复多次来融合高维特征(说好的efficiency呢?)
3.3 带权重的特征融合
在融合特征时通用第一步是缩放特征到同样大小然后SUM起来,金字塔注意力网络(Pyramid attention network)引入了全局
自注意力上采样( global self-attention upsampling)来恢复像素位置。之前的方法对于输入特征一视同仁,但作者觉得不同特征对于最后结果的贡献不同,所以在每个输入端增加了可学习的权重,基于这个想法构思了三种融合方法:
1.无约束融合
其中w是可学习的权重,该权重scale大小可以作用于整个特征或者通道或者每个像素。作者找了一个折中效率与效果的scale(是啥没说)担心无约束的权重可能会造成稳定问题,使用了Normalization来约束边界。
2.基于softmax的融合:
使用softmax来归一化权重,但会明显降低GPU上运行效率,后面有提出了一种更快的融合方法
3.快速normalize融合:
权重先过Relu,epsilon为0.0001防止分母为0,相当于softmax省了指数函数,效果差不多,在GPU上快了30%
DiFPN结合了双向交叉尺度连接与快速归一融合

4.EfficientDet
基于BiFPN尅发了一系列检测模型铭文EfficientDet。接下来讨论模型结构与混合缩放方法。
4.1 结构
上图是EfficientDet的结构总览,基本上与单阶段检测器(FPN, FocalLoss DenceDetection, SSD, YoloV2)范式相同。使用ImageNet预训练EfficientNets作为backbone。BiFPN作为feature network(特征网络or neck?)从骨干网络提取特征并重复使用双向特征融合。融合的特征用于分类与回归。分类与预测部分跟 FocalLoss DenceDetection都使用了共享了特征
4.2 Compound Scaling(混合不同比例特征?)
为了同时优化准确率与效率,作者开发了一系列可以满足各种资源限制的网络。其中关键挑战是如何放大baseline网络。
先前的工作大多通过更大的backbone扩大网络比如ResNetXt或者AmoebaNet,或者使用更高分辨率的图片或是堆叠更多的FPN层。这些方法不高效,因为他们只关注单一或有限的变化维度。 Efficientnet通过共同变化网络的宽高和输入分辨率得到好的效果(王婆卖瓜)基于这个想法提出了符合系数φ来调节维度,骨干网络,BiFPN,分类回归网络以及分辨率。
骨干网络:
使用了EfficientNet中B0到B6的网络
BiFPN网络:
线性增加网络深度(层数需要转整形)指数增加宽度(通道数)通过搜索找到最佳值1.35作为BiFPN宽度缩放因子,计算公式为:
分类回归预测网络:
宽度限制与BiFPN相同,深度(层数)线性增加,计算公式:
输入图像分辨率:
因为level3-7使用了BiFPN,故分辨率需要能够被2的7次幂(128)整除,输入分辨率计算公式:

φ取值范围0-7,D7与D7x的BiFPN相同,D7的分辨率更高,D7x骨干网络更大并且多了一个特征level(P3-P8见图3)
复合变换是基于启发式的,可能不是最优的。但从图六中可看出相比单一变换更有效率。
实验
EfficientDet用于物体检测:
使用COCO2017检测118K训练集,统一使用SGD优化器动量0.9权重衰减4e-5。热启动,第一个epoch学习率线性增加(0-0.16)之后使用consine decay退火。在每个卷积层添加同步的BN层,BNdecay0.99,ε(epsilon)1e-3。使用SiLU (Swish-1)激活函数以及额外的移动均值decay0.9998,损失函数focal loss,α=0.25 γ=1.5 长宽比(0.5,1,2)训练时使用水平翻转与scale jittering[0.1, 2.0](crop前随机缩放尺度,从原图的0.1倍到2倍) 评估时使用soft-NMS,D0-D6每个模型训练300epoch batchsize128,D7与D7x训练600epoch.
最终结果(看似把前浪狠狠地拍在沙滩上,其实有不少功劳在于用了深度可分离卷积,介绍BiFPN范式的时候在公式下面备注中偷偷地说了)

