对于近期屠榜的EfficientDet,记录相关的笔记,也欢迎大家交流
先附上原文连接:EfficientDet原文
在提及EfficientDet时,首先要提一下EfficientDet的backbone,EfficientNet。
EfficientNet原文
在EfficientNet中,提及一个比较主要一个思路就是:复合缩放
众所周知:对于一个baseline网络,调整其深度、宽度、输入分辨率大小,在一定范围内会影响网络的最终性能。
但是过度的深度、宽度、和输入分辨率大小提升对网络提升并不会有显著的帮助,反而会增加前向的负担,使网络过大。
在EfficientNet提出了个复合系数
ϕ
\phi
ϕ 统一缩放网络宽度、深度和分辨率。
因为深度的增加导致flops加倍,而宽度和分辨率的增加会导致flops增加4倍,所以整体计算量的增加约为
(
α
⋅
β
2
⋅
γ
2
)
ϕ
(\alpha\cdot\beta^2\cdot\gamma^2)^{\phi}
(α⋅β2⋅γ2)ϕ
对比EfficientDet从D0到D6的提升,和在EfficientNet中B0到B7的提升,可以推导这种复合缩放的方式可以较大程度的提升模型的性能。
backbone:MBConv结构,以MBConv0为例
如图所示,MBConv是采用的了一个depthwise_conv再加上一个类SE的结构。其中激活函数是swish。
除去backbone之外,EfficientDet最显著的改进在于使用的BiFPN,如图所示为BiFPN的一个block。
对应不同的backbone,后面接的BiFPN的block个数也不相同。下图是D0~D6对应的输入大小,第一层的通道数,以及连接的BiFPN的block的个数和对应的output的layer数。
以第6层为例BiFPN的实现细节如下:
剩余具体实验细节因为与大部分检测算法一致,所以就不多记载了。