系列文章目录
=======================================================
专题-端侧机器学习
第一节 端侧机器学习框架Tensorlfow Lite
第二节 轻量级网络模型之MobileNet系列
第三节 轻量级网络模型之ShuffleNet
第四节 轻量级网络模型之EfficientNet
第五节 Android应用APP: 基于MobileNet和EfficientNet的图像分类模型
=======================================================
轻量级网络模型之EfficientNet
参见文章: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
导读
该文章也是研究计算资源受限场景下的网络模型设计, 然而与以往的众多研究思路不同(以往的研究大都是先提出一个高效的Building block, 然后再利用该building block来设计模型, 例如:MobileNet v1, MobileNet v2ShuffleNet, MnasNet等), 这篇文章研究的是: 计算资源受限场景下, 在各个Stage的building block确定的前提下, 如何同时优化模型的深度depth, 模型的宽度width以及模型的输入分辨率resolution从而使得模型获得最高的精度
。这是一个非常有意思的研究问题, 如果该问题得以解决,则可以应用到其他各种各样的baseline卷积网络中以提升其精度。
值得注意的是,尽管之前已经有文章从单个因素出发, 研究其对模型Accuracy的影响 (例如: MobileNet v1中的width multipler实际上就是用来调控模型的宽度),但是,还尚未由文章系统地考虑这三个因素
。
文章要点
1.提出了一种新的缩放方法: 通过一个简单但十分有效的符复合系数来统一地缩放depth, width, resolution的尺寸。
2.通过神经网络架构搜索NAS设计了baseline model, 并将该缩放方法应用后, 在提升精度的同时所需的参数两大大减少。 并且该缩放方法应用到其他模型(MobileNet, ResNet等)上也有很好的效果。
模型结构优化
Baseline model: EfficientNet
baseline 的设计借鉴了MnasNet: 通过多目标NAS来同时优化Accuracy和FLOPS, 优化目标为:
其中: T为目标FLOPS, 参数w用于trade off Accuracy和FLOPS。
下表是EfficientNet-B0的配置:
每一行代表一个包含Li 层的stage i, 其中每层的输入分辨率为 Hi x Wi, 输出通道数为Ci。
该网络中的building block实际上是这篇文章中提出的mobile inverted bottleneck MBConv, 同时作者还在其基础上添加了channel方向的自注意力机制: Squeeze and Excitation,
注: **
1.MobileNet V3中也是用NAS, 也是借鉴了MnasNet这篇文章。
2.MobileNet V3 中在其building block中也添加了Squeeze and Excitation自注意力机制机制。
复合模型缩放方法
这篇文章最核心的就是所提出的复合缩放方法,用于求解: 资源约束条件下, width, depth, resolution的最优组合从而获得最优模型。
两个Observation:
(1) 放大网络的 width, depth, resolution中的任意一个参数都能够提升模型的Accuracy, 但是随着网络越来越复杂,Accuracy的提升效果越来越不明显。
(2) 为了获得更好的Accuracy和Efficiency, 在缩放过程中, 非常有必要同时考虑width, depth, resolution, 而不是只考虑其中任意一个因素。
这两个Observations 为 符合模型缩放方法的提出铺平了道路。
问题形式化定义
一个基本的事实:经典的卷积网络结构一般由多个Stage组成, 每个Stage中所有的层配置完全相同。例如ResNet。基于此,卷积网络可以定义如下:
其中,
F
i
L
i
F_{i}^{Li}
FiLi 表示Stage i 中层Fi重复Li次这样一个操作, 层Fi的输入尺寸为<Hi, Wi, Ci>。 之前已经提过,这篇文章的重点不像其他文章一样探索怎么设计Fi, 而是在Fi已经确定前提下(可以看作是简化问题复杂度的一个假设), 探索如何扩展网络width (i.e. Ci), depth (i.e.Li), resolution (i.e. Hi, Wi)以最求最大Accuracy。即使这样搜索空间依然很大,为了进一步减小搜索空间, 假设所有的层以相同的常数缩放。 这样一来,待优化的参数减少为3个, 优化问题如下:
其中待求解的d, w, r 分别表示baseline网络的depth, width, resolution的缩放系数。
复合缩放方法
作者提出使用复合系数
ϕ
\phi
ϕ来统一地缩放width, depth, resolution的缩放系数w, d, r, 具体如下:
其中
α
\alpha
α,
β
\beta
β,
λ
\lambda
λ 为常数,可以通过grid search来确定。
再来分析上面公式中的约束是怎么来的:
目标是在资源有限的条件下如何将额外的资源分配给w, d, r,
α
≥
1
\alpha \geq 1
α≥1,
β
≥
1
\beta \geq 1
β≥1,
λ
≥
1
\lambda \geq 1
λ≥1很好理解,
ϕ
=
1
\phi=1
ϕ=1时表示相应的参数不变,实际上就是baseline 模型。
在常规convolution中, FLOPS与d, w 2 w^{2} w2, r 2 r^{2} r2 成正比, 具体将, 将d增加1倍,则FLOPS变为原来的2倍; 将w, r分别增加1倍,则FLOPS变为原来的4倍。 , d ⋅ w 2 ⋅ r 2 = 2 d \cdot w^{2} \cdot r^{2}=2 d⋅w2⋅r2=2 实际上限制了 α \alpha α, β \beta β, λ \lambda λ 这3个参数的搜索空间, 卷积架构中卷积操作的计算代价基本上可以反映整个模型的计算代价, 这样一来意味着: FLOPS变为原来的 2 ϕ 2^{\phi} 2ϕ 倍, 可以看到,该约束实际上是FLOPS约束的具体化。
应用该方法的具体步骤为:
计算资源越多, 则
ϕ
\phi
ϕ 的可取值的上限就越大。 如果直接在
α
\alpha
α,
β
\beta
β,
λ
\lambda
λ 参数空间上搜索,则搜索的代价太高, 作者提出的方法克服了这个问题: 先在一个小的网络上进行小的grid search , 然后将其固定, 再通过比例系数$\phi$来统一调节
。
结果分析
可以看到, 在FLOPS相同的前提下, 相比于单一调节其中一个因素, compound scaleing 极大提升了Accuracy。
可以看到 这种compound scaling 方法在经典的convolution 网络上也具有良好的表现。
可以看到, 采用所提出的EfficientNet作为baseline 网络, 再结合compound scaling 方法 (
ϕ
\phi
ϕ 取值从小到大,FLOPS相应增大, 依次得到: EfficientNet-B0, EfficientNet-B1, EfficientNet-B2, EfficientNet-B3, EfficientNet-B4, EfficientNet-B5, EfficientNet-B6, EfficientNet-B7), 最终的模型效果相比于其他经典的方法准确率更高而参数两更少。
代码资源
1.原作者代码,https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
总结
未完待续。
References
1.EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
2.MnasNet: Platform-aware neural architecture search for mobile.