EfficientDet:目标识别领域的 EfficientNet

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 / 2 i 1/2^i 1/2i 。例如,如果图片大小为 640 × 640 640\times 640 640×640,则第三层特征的边长为 640 / 2 3 = 80 640/2^3=80 640/23=80 。例外注意高层的特征有一个向下的箭头,即 top-down 融合:

P 7 o u t = Conv ⁡ ( P 7 i n ) P 6 o u t = Conv ⁡ ( P 6 i n + Resize ⁡ ( P 7 o u t ) ) ⋯ P 3 o u t = Conv ⁡ ( P 3 i n + Resize ⁡ ( P 4 o u t ) ) \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} P7out=Conv(P7in)P6out=Conv(P6in+Resize(P7out))P3out=Conv(P3in+Resize(P4out))

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

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

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

1.1 加权特征融合

这里给出三种策略:

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

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

P 6 t d = Conv ⁡ ( w 1 ⋅ P 6 i n + w 2 ⋅ Resize ⁡ ( P 7 i n ) w 1 + w 2 + ϵ ) P 6 o u t = Conv ⁡ ( w 1 ′ ⋅ P 6 i n + w 2 ′ ⋅ P 6 t d + w 3 ′ ⋅ Resize ⁡ ( P 5 o u t ) w 1 ′ + w 2 ′ + w 3 ′ + ϵ ) \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} P6tdP6out=Conv(w1+w2+ϵw1P6in+w2Resize(P7in))=Conv(w1+w2+w3+ϵw1P6in+w2P6td+w3Resize(P5out))

其中 P 6 t d P^{td}_6 P6td 是第 6 层的中间状态值。

2、EfficientDet

2.1 整体架构

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

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

2.2 复合缩放

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

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

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

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

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

D7 的 mAP 为 51.0,目前是 SOTA,参数量 52M,比之前的 SOTA(AmoaNet+NAS-FPN+AA)小 4 倍, 计算量小 3045 / 326 = 9.3 3045/326=9.3 3045/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 网络层是否一定投入产出比较低。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值