谷歌最新目标检测论文: EfficientDet

最近谷歌放出了 EfficientDet 论文与代码, 在COCO上取得了最好的MAP, 本文对 efficientDet 做个简要的总结, 同时对efficientNet也做个回顾.

EfficientDET是在EfficientNet的基础上有分类扩展到检测任务。对神经网络而言,速度和精度之间存在权衡,而 EfficientDet 是一个总称,可以分为 EfficientDet D1 ~ EfficientDet D7,速度逐渐变慢,但是精度也逐渐提高。 从上图可以看出,EfficientDET在较低的FLOPS下就能达到很高的MAP,碾压yolo-v3,看来目标检测的模型又得大更换了,O(∩_∩)O哈哈~

简单回顾EfficientNet

对于模型放缩,主要从模型宽度、深度、图像分辨率三个方面进行操作,目前主流的大多是对一个维度进行放大以得到更高的准确率。EfficientNet 提出一种多维度混合的模型放缩方法,认为三个维度之间互相影响并探索出了三者之间最好的组合。

其中, $\alpha ,\beta ,\gamma$ 为常数,通过网格搜索寻找最优,$\phi$ 人工调节。Efficient-B0 结构如下

卷积层主要使用了MBConv,SE 模块引入attention,swish激活(x * sigmoid( $\beta$ * x), $\beta$ =1, swish_1)

有了基本网络B0后, 按以下步骤进行增大网络

  • 固定 $\psi$ =1, 对 $\alpha ,\beta ,\gamma$ 进行网络搜索, 得到最佳的配置
  • 固定根据搜索得到的 $\alpha ,\beta ,\gamma$ ,使用不同的混合系数 $\psi$ 来放大 B0, 得到 B1 ~ B7.

感觉也只有大公司有这个计算资源能来做这些实验了

EfficientDet

efficientDet 主要是以 efficientNet为backbone,个人认为最主要的贡献点还是在于BiFPN,对于Compound Scaling部分了解即可,毕竟超参太多.

BiFPN

(a)为常规的FPN结构, (b)为PANet在FPN基础上又增加了自顶向下路径. (d) biFPN 将PANet的FPN作为一个基本块, 去除了最浅和最深两层,并在相同 level 的输入和输出节点之间连了一条边,进行特征融合. 并可重复多次,重复的次数根据精度与性能设置

整体网络结构如下图:

具体的细节请参考原文。

在此处强烈推荐efficientdet pytorch 实现的代码,据说比官方TensorFlow版更快,EfficientDet-pytorch

ref

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

EfficientDet: Scalable and Efficient Object Detection