EfficientDet:目标识别领域的 EfficientNet

倖福魔咒の 提交于 2019-11-26 20:38:28

EfficientDet:目标识别领域的 EfficientNet

阅读本文可能需要一些其他模型或算法方面的先验知识:

  • 对 FPN 特征金字塔网络要了解
  • 对 EfficientNet 分类模型架构要熟悉

Quoc Le 这个大神真是无处不在,NLP、CV 领域均可以看到他的影子,所以不同领域可能处理任务不同,在一些方法论上还是相通的。近日,这位大神在 Twitter 上发文中,提出了一种新的家族式目标检测算法,是基于 图片分类任务中的 EfficientNet 的,而且又是一篇 SOTA 论文,目前论文已公开,代码在路上。

看看下面这幅图,这种图往左上角瞅,越往左,计算量(FLOPS,每秒钟的浮点数计算量,FLOPs,浮点数计算量,实际此处 S 应为 s,这种针不必计较)越小,越往上 mAP(mean Average Precision,一种用于比较目标检测算法性能的指标,越大越好)越高。
【图 1】

我们先说结论,直接看论文摘要部分即可,作者提出两个方法:

  • BiFPN: 这个毋庸置疑,肯定是从 FPN 发展过来的,至于 Bi 就是双向,原始的 FPN 实现的自顶向下(top-down)融合,所谓的 BiFPN 就是两条路线既有 top-down 也有 down-top。
    • 在融合过程中,之前的一些模型方法没有考虑到各级特征对融合后特征的g共享度问题,即之前模型认为各级特征的贡献度相同,而本文作者认为它们的分辨率不同,其对融合后特征的贡献度不同,因此在特征融合阶段引入了 weight。
  • 复合缩放方法(compound scaling method):这个主要灵感来自于 EfficientNet,即在基线网络上同时对多个维度进行缩放(一般都是放大),这里的维度体现在主干网络、特征网络、以及分类/回归网络全流程的整体架构上
    • 整体网络由主干网络、特征网络以及分类/回归网络组成,可以缩放的维度比 EfficientNet 多得多,所以用网络搜索方式不合适了,作者提出一些启发式方法,可以参照论文的 Table 1。

0、背景

在简介部分,作者提出了一个“不要脸”的想法,“Is it possible to build a scalable detection architecture with both higher accuracy and better efficiency across a wide spectrum of resource constraints (e.g., from 3B to 300B FLOPS)?” 这句话翻译过来就是 “鱼与熊掌俺能兼得乎?”

要知道在此之前,实际目标检测算法家族已经提出了很多很多经典的算法,有 two-stage 方法的,主要是早期的一些算法,如 Fast R-CNN、Faster R-CNN,一般检测精度较高但速度慢,为了加快速度,后来逐步发展为 one-stage,从 RoI 的提取到识别检测全部融合在一个框架下,实现 end to end,加快检测速度,但一般是以牺牲精度换速度的。

因此在 FPN 及 EfficientNet 的影响下,作者分别基于此在 FPN 基础上进行优化提出 BiFPN 以及全方位的模型缩放探索。

下面重点介绍 Bi-FPN 以及复合缩放方法。

1、Bi-FPN

【图 2】

如上图的(a)是原始的 FPN 方法,一般在卷积网络中,低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。在 FPN 论文中,作者实际比较了很多不同的连接方式,最后提出了(a)图所示的架构,即抽取除第 3~7 层的特征图进行融合,每一层特征图的大小为输入图像的1/2i1/2^i 。例如,如果图片大小为 640×640640\times 640,则第三层特征的边长为 640/23=80640/2^3=80 。例外注意高层的特征有一个向下的箭头,即 top-down 融合:

P7out=Conv(P7in)P6out=Conv(P6in+Resize(P7out))P3out=Conv(P3in+Resize(P4out))\begin{array}{l}{P_{7}^{o u t}=\operatorname{Conv}\left(P_{7}^{i n}\right)} \\ {P_{6}^{o u t}=\operatorname{Conv}\left(P_{6}^{i n}+\operatorname{Resize}\left(P_{7}^{o u t}\right)\right)} \\ {\cdots} \\ {P_{3}^{o u t}=\operatorname{Conv}\left(P_{3}^{i n}+\operatorname{Resize}\left(P_{4}^{o u t}\right)\right)}\end{array}

结合公式+图例,我想应该都能理解,这里的 Resize 主要是上采样或下采样操作(此处为上采样,要将上层的小图放大到下层大图的大小)

在 PANet 网络中,实际就已经提出了双向的概念,如(b)所示,在 NAS-FPN 中借助网络框架搜索(NAS)技术进行搜索,搜索出来的玩意儿反正是人类看不懂解释不了,不规则而且需要的参数量计算量还大,如(c)所示,而我们的方式是:

  • 第一步:在 PANet 的基础上,移除了只有一个输入来源的特征节点,也就变成了(e),对比(b)少了两个节点(这个图画的让人容易误会,实际删除的是 b 图虚框中左上角和右下角的这个,图中一打眼看起来感觉删除的是左上角和左下角,不过图本身没问题),之所以删除这样的节点,是因为就一个输入源,肯定没做融合,对将来的贡献可能也比较少
  • 第二步:将每层的原始特征图加入进去,就是(f),会看到有一些弧线,可以在不增加额外计算量的同时融合更多的特征
  • 第三步:把这个双向过程(就是虚框中的内容)作为一个整体,重复多次,如图 3 所示。

1.1 加权特征融合

这里给出三种策略:

  • Unbounder fusionO=iwiIiO=\sum_i w_i \cdot I_i,我们的特征图都是三维的,有 W、H、C(channel),如果我们把它当做一个整体,即每个特征层一个权重,则 wiw_i 是一个标量,如果每个通道一个权重,则 wiw_i 是一个向量,而如果每个像素有自己的权重,则 wiw_i 是三维的,实验证明,用标量的计算量最小且实现的精度差不多,但是标量是无界的,不易控制,所以还是需要借助正则化手段
  • softmax-based fusionO=iewijewjIiO=\sum_{i} \frac{e^{w_{i}}}{\sum_{j} e^{w_{j}}} \cdot I_{i},能用 softmax 是一种很自然的想法,但是这个玩意一直因分母求和而诟病,在 GPU 下明显速度下降很多。
  • Fast normalized fusion: O=iwiϵ+jwjIiO=\sum_{i} \frac{w_{i}}{\epsilon+\sum_{j} w_{j}} \cdot I_{i},实际就是加和求平均,这里的 wiw_i 可以用 ReLU 保证其 wi0w_{i} \geq 0。和 softmax 一致,其分布范围在 0~1,其值代表该层的贡献度。

这样一来,我们结合图 2 (f),来两个具体的示例:

P6td=Conv(w1P6in+w2Resize(P7in)w1+w2+ϵ)P6out=Conv(w1P6in+w2P6td+w3Resize(P5out)w1+w2+w3+ϵ)\begin{aligned} P_{6}^{t d} &=\operatorname{Conv}\left(\frac{w_{1} \cdot P_{6}^{i n}+w_{2} \cdot \operatorname{Resize}\left(P_{7}^{i n}\right)}{w_{1}+w_{2}+\epsilon}\right) \\ P_{6}^{o u t} &=\operatorname{Conv}\left(\frac{w_{1}^{\prime} \cdot P_{6}^{i n}+w_{2}^{\prime} \cdot P_{6}^{t d}+w_{3}^{\prime} \cdot \operatorname{Resize}\left(P_{5}^{o u t}\right)}{w_{1}^{\prime}+w_{2}^{\prime}+w_{3}^{\prime}+\epsilon}\right) \end{aligned}

其中 P6tdP^{td}_6 是第 6 层的中间状态值。

2、EfficientDet

2.1 整体架构

整体架构图如图 3 所示:
【图 3】

主干网络采用的是 EfficientNet 网络,BiFPN 是基于其 3~7 层的特征图进行的,融合后的特征喂给一个分类网络和 box 网络,分类与 box 网络在所有特征级上权重是共享的。

2.2 复合缩放

主干网络部分:这部分直接把 EfficientNet 缩放拿过来用即可,即 EfficientNet B0-B6,借助其现成的 checkpoints,就不折腾了

BiFPN 网络部分:这部分借鉴 EfficientNet,在 Channel 上直线指数级增加,在深度上线性增加,具体的缩放系数公式为:Wbifpn=64(1.35ϕ),Dbifpn=2+ϕW_{b i f p n}=64 \cdot\left(1.35^{\phi}\right), \quad D_{b i f p n}=2+\phi

Box/class 预测网络部分:其宽度与 BiFPN 部分保持一致,深度方面采用 Dbox=Dclass=3+ϕ/3D_{b o x}=D_{c l a s s}=3+\lfloor\phi / 3\rfloor

图片分辨率部分: 因为特征提取选择的是 3~7 层,第 7 层的大小为原始图片的 1/271/2^7 ,所以输入图像的大小必须是 128 的倍数,Rinput=512+ϕ128R_{i n p u t}=512+\phi \cdot 128
【图 4】

上图 D7 明显是超出内存大小了,只是在 D6 基础上增加了分辨率大小。
【图 5】

D7 的 mAP 为 51.0,目前是 SOTA,参数量 52M,比之前的 SOTA(AmoaNet+NAS-FPN+AA)小 4 倍, 计算量小 3045/326=9.33045/326=9.3 倍。

3、消融实验

第一部分是比较了 BiFPN 和 主干网络的共享度,实验结果证明,都很重要。如下图所示:
【图 6】

图 6 中的表三,baseline 是 ResNet50 + FPN,中间一行是仅仅将 ResNet50 替换为 EfficientB3,性能提高差不多 3 个点,参数量和计算量都小了很多,最后一行在上一行基础上替换 FPN 为 BiFPN,性能和参数、计算量等都进一步得到优化。

至于 BiFPN 的连接方式,结合图 2和 图 6 中的表 4,我们看到最好的是(f)图,(d)全连接方式计算量又大性能还差;

另外关于 softmax 和求和取平均的对比,性能上差不多,但是求和取平均速度要快 1.26-1.31 倍

最后,我们在各个维度上分别看一下:
【图 7】

我们可以尝试小结一下这张图:

  • 扩大任何一个方面,折线都在上升,从识别精度上讲都在提高
  • 扩大 box/class(紫色线)几乎平稳,所有对于 box/class 但单方面提高没有意义了
  • 扩大通道数(蓝色的)计算量上升急剧,但精度上升缓慢
  • 扩大图片分辨率(绿色)上升趋势很大,D6-D7 的区别
  • 扩大 BiFPN 层数(浅蓝色)也在上升,可以尝试进一步加大
  • 复合放大(红色)综合各方面考虑,实现了较单独维度更好的策略

由于需要考虑的维度过多,无法进行系统化全面维度综合调整,作者此处给出的方案(红线)也只是鉴于先验知识下或目前已有条件下的一个浅尝辄止,针对上面单变量的分析,也很难说在多变量条件下增加通道或增加 box/class 网络层是否一定投入产出比较低。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!