1.资源
论文链接:https://arxiv.org/abs/1905.11946
代码链接:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
第三方实现的PyTorch代码:https://github.com/lukemelas/EfficientNet-PyTorch
最近V2也公布了,做完这一期做V2
2.简介
卷积神经网络的性能公认会受到网络规模、输入图像分辨率的影响
即,我们固定一个网络的基本结构baseline,提高网络深度(depth)、网络宽度(width)和输入图像分辨率 (resolution)大小,这都会不同程度的提升网络的性能,那么如何来找到一个平衡点,使得同时改变深度、宽度、分辨率使得网络达到最优性能呢?
这就是这篇文章的核心思想,提出了一种新的模型缩放方法,它使用一个简单而高效的复合系数来从depth, width, resolution 三个维度缩放网络
,不会像传统的方法那样任意缩放网络的维度,基于神经结构搜索技术可以获得最优的一组参数(复合系数)、相教于手动去试省时省力。
对于网络结构不是本文的重点,这里不过多描述。
神经网络结构搜索技术(NAS)不在本文的讨论范围内,有需要的读者自行查阅
3.问题引出
对网络的扩展可以通过增加网络层数(depth,比如从 ResNet (He et al.)从resnet18到resnet200 ), 也可以通过增加宽度,比如WideResNet (Zagoruyko & Komodakis, 2016)和Mo-bileNets (Howard et al., 2017) 可以扩大网络的width (#channels), 还有就是更大的输入图像尺寸(resolution)也可以帮助提高精度。
如上图所示
(a)是基本baseline模型,(b)是增加宽度,即每层的channel数,(c ) 是增加深度,如resnet18->resnet200,(d)是增大输入图像分辨率,如224224->640640,(d)是EfficientNet,它从三个维度均扩大了,但是扩大多少,就是通过作者提出来的复合模型扩张方法结合神经结构搜索技术获得的。
整个核心工作就是提出了一种复合模型扩张方法
4.问题定义
一个神经网络中的一层i,可以被如下定义
Y
i
=
F
i
(
X
i
)
Yi=Fi(Xi)
Yi=Fi(Xi)
其中$Fi$代表该层进行的操作,$Xi$,$Yi$分别代表输入张量与输出张量
。
那么整个神经网络我们用
N
N
N代替,它就可以被表示为,初始输出
X
1
X1
X1经过一系列的操作后得到最红的
N
N
N输出,如下
N
=
F
k
⊙
…
⊙
F
2
⊙
F
1
(
X
1
)
=
⨀
j
=
1
…
k
F
j
(
X
1
)
\mathcal{N}=\mathcal{F}_{k} \odot \ldots \odot \mathcal{F}_{2} \odot \mathcal{F}_{1}\left(X_{1}\right)=\bigodot_{j=1 \ldots k} \mathcal{F}_{j}\left(X_{1}\right)
N=Fk⊙…⊙F2⊙F1(X1)=j=1…k⨀Fj(X1)
但是在实际中,通常会将多个结构相同的卷积层称为一个 stage
,例如 ResNet 有5 个 stage,每个 stage 中的卷积层结构相同(除了第一层为降采样层),以 stage 为单位可以将卷积网络 N 表示为:
N
=
⨀
i
=
1
…
s
F
i
L
i
(
X
⟨
H
i
,
W
i
,
C
i
⟩
)
\mathcal{N}=\bigodot_{i=1 \ldots s} \mathcal{F}_{i}^{L_{i}}\left(X_{\left\langle H_{i}, W_{i}, C_{i}\right\rangle}\right)
N=i=1…s⨀FiLi(X⟨Hi,Wi,Ci⟩)
在这里 F i L i \mathcal{F}_{i}^{L_{i}} FiLi代表在i这个stage中, F i Fi Fi这种类型的操作被执行了 L i Li Li次,而 < H i , W i , C i > <H_{i}, W_{i}, C_{i}> <Hi,Wi,Ci>,则代表输入网络层的张量 X X X的shape(长、宽、通道数)。
在不改变网络的架构情况下(操作 F i Fi Fi),尝试不同的网络深度、网络宽度、输入图像分辨率的组合,使得性能最佳。即
我们的目标是在有限的计算资源下,最大化 Accuracy
,即
max
d
,
w
,
r
Accuracy
(
N
(
d
,
w
,
r
)
)
\max _{d, w, r} \quad \operatorname{Accuracy}(\mathcal{N}(d, w, r))
d,w,rmaxAccuracy(N(d,w,r))
s.t.
N
(
d
,
w
,
r
)
=
⨀
i
=
1
…
s
F
^
i
d
⋅
L
^
i
(
X
⟨
r
⋅
H
^
i
,
r
⋅
W
^
i
,
w
⋅
C
^
i
⟩
)
\text { s.t. } \quad \mathcal{N}(d, w, r)=\bigodot_{i=1 \ldots s} \hat{\mathcal{F}}_{i}^{d \cdot \hat{L}_{i}}\left(X_{\left\langle r \cdot \hat{H}_{i}, r \cdot \hat{W}_{i}, w \cdot \hat{C}_{i}\right\rangle}\right)
s.t. N(d,w,r)=i=1…s⨀F^id⋅L^i(X⟨r⋅H^i,r⋅W^i,w⋅C^i⟩)
M
e
m
o
r
y
(
N
)
<
=
t
a
r
g
e
t
M
e
m
o
r
y
Memory(N) <= target Memory
Memory(N)<=targetMemory
F
L
O
P
S
(
N
)
<
=
t
a
r
g
e
t
F
l
o
p
s
FLOPS(N) <= target Flops
FLOPS(N)<=targetFlops
上式中,
w
w
w,
d
d
d,
r
r
r分别代表缩放网络宽度、网络深度、输入分辨率。
而
F
^
i
,
L
^
i
,
H
^
i
,
W
^
i
,
C
^
i
\hat{\mathcal{F}}_{i}, \hat{L}_{i}, \hat{H}_{i}, \hat{W}_{i}, \hat{C}_{i}
F^i,L^i,H^i,W^i,C^i,则分别代表baseline,即我们选定的基础网络的原本的预设的参数。
5.实验验证
更大的网络具有更大的宽度、深度或分辨率,往往可以获得更高的精度,但精度增益在达到80%后会迅速饱和,这表明了只对单一维度进行扩张的局限性(即固定两个,扩大一个,比如固定网络宽度、深度,扩大分辨率)。
所以说,模型扩张的各个维度之间并不是完全独立的,比如说,对于更大的分辨率图像,应该使用更深、更宽的网络,这就意味着需要平衡各个扩张维度,而不是在单一维度张扩张。
如下图所示,直线上的每个点表示具有不同宽度系数(w)的模型。第一个基线网络(d=1.0,r=1.0)有18个卷积层,分辨率224x224,而最后一个基线(d=2.0,r=1.3)有36个卷积层,分辨率299x299。这个图说明了一个问题,为了追求更好的精度和效率,在ConvNet缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的。
于是有了论文提出的复合扩张方法。
6.复合扩张方法
所以本文提出了复合扩张方法,这也是文章核心的地方, α , β , γ α,β,γ α,β,γ是我们需要求解的一组参数,如下图公式,带约束的最优参数求解。 α , β , γ α,β,γ α,β,γ分别衡量着depth, width和 resolution的比重,其中 β , γ β,γ β,γ 在约束上会有平方,是因为如果增加宽度或分辨率两倍,其计算量是增加四倍,但是增加深度两倍,其计算量只会增加两倍.使用复合系数 ϕ \phi ϕ来统一的修正 α , β , γ α,β,γ α,β,γ.
depth: d = α ϕ width: w = β ϕ resolution: r = γ ϕ s.t. α ⋅ β 2 ⋅ γ 2 ≈ 2 α ≥ 1 , β ≥ 1 , γ ≥ 1 \begin{aligned}\text { depth: } & d=\alpha^{\phi} \\\text { width: } & w=\beta^{\phi} \\\text { resolution: } r &=\gamma^{\phi} \\\text { s.t. } & \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 \\\quad & \alpha \geq 1, \beta \geq 1, \gamma \geq 1\end{aligned} depth: width: resolution: r s.t. d=αϕw=βϕ=γϕα⋅β2⋅γ2≈2α≥1,β≥1,γ≥1
求解方式:
-
固定公式中的φ=1,然后通过网格搜索(grid search)得出最优的α、β、γ,得出最基本的模型EfficientNet-B0.
-
固定α、β、γ的值,使用不同的φ,得到EfficientNet-B1, …, EfficientNet-B7(
B0-B7就是系数变了,从而改变模型大小
)
φ的大小对应着消耗资源的大小,相当于:
-
当φ=1时,得出了一个最小的最优基础模型;
-
增大φ时,相当于对基模型三个维度同时扩展,模型变大,性能也会提升,资源消耗也变大。
对于神经网络搜索,作者使用了和 MnasNet: Platform-awareneural architecture search for mobile 一样的搜索空间和优化目标。
也就是说α、β、γ,是搜索出来的。最优值,α = 1.2、β = 1.1、γ = 1.15.
7.实验结果
B0-B7分别与其他方法在imagenet数据集上的对比,flops更小,精度更高
将该思路迁移至其他模型,可以看到有明显涨点
基于同一个baselin网络,使用不同的缩放手段,可以看到确实是符合缩放方法关注到了图中更多更细致的特征
其他实验结果见论文。