论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks( ICML 2019)
代码:lukemelas/EfficientNet-PyTorch
针对问题
常用的提升网络指标的三种方式:
- 更宽(channels)
- 更深(layers)
- 更高的分辨率(imput image)
单独对某一种方式进行调优
三种方式综合考虑明显表现更好
选择其中一种或几种进行调整,都需要繁琐的人工调参,最终仍可能得到次优的精度
问题公式化
在给定的资源限制条件下调整网络至最优,三种方式都会增加网络的参数,op计算量是和 d , w 2 , r 2 d,w^{2},r^{2} d,w2,r2 成正比
那么什么样的组合才是最优呢?,令
其中,
N
\mathcal N
N 表分类网络,
X
X
X 表输入,
F
i
\mathcal F_i
Fi 表基础网络层,
i
i
i 表示 stage(类似ResNet),
L
i
L_i
Li 表示
F
i
\mathcal F_i
Fi 结构在第
i
i
i 个stage中的重复数量。
那么模型优化问题就可以写成:
搜寻最优参数
引入参数
ϕ
ϕ
ϕ, 用于限制资源量,
α
,
β
,
γ
α,β,γ
α,β,γ 决定如何分配资源
通过网络结构搜索设计了一个baseline网络:EfficientNet-B0
以 EfficientNet-B0 为例,求解最优参数:
- STEP 1:先固定 ϕ = 1 \phi =1 ϕ=1,找 EfficientNet-B0 最佳参数为 α = 1.2 , β = 1.1 , γ = 1.15 α=1.2,β=1.1,γ=1.15 α=1.2,β=1.1,γ=1.15
- STEP 2:固定 α , β , γ \alpha,\beta,\gamma α,β,γ作为约束,取不同 ϕ \phi ϕ 对baseline网络进行放大,获得Efficient-B1到B7
实验