卷积网络规模的方法"/>
【论文极速读】 Efficient Net:一种组合扩大卷积网络规模的方法
【论文极速读】 Efficient Net:一种组合扩大卷积网络规模的方法 FesianXu 20220313 at Baidu Search Team前言
最近笔者需要基于Efficient Net作为图片编码器进行实验,之前一直没去看原论文,今天抽空去翻了下原论文,简单记下笔记。如有谬误请联系指出,本文遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明并且联系笔者,谢谢。
∇ \nabla ∇ 联系方式:
e-mail: FesianXu@gmail
github:
知乎专栏: 计算机视觉/计算机图形理论与应用
微信公众号:
前人的研究证实了,一种有效提高卷积网络性能的方法是:
- 增大卷积网络的深度,比如经典的ResNet [2]
- 增大卷积网络的宽度,比如Wide Residual Network [3]
- 增大卷积网络输入图片的分辨率,比如[4,5,6]
然而单独提高深度/宽度/分辨率很容易达到性能的饱和,如Fig 1.1所示,EfficientNet考虑如何以一种合适的方式,组合性地同时提高深度+宽度+分辨率。对于一个卷积网络而言,第 i i i层的卷积网络可定义为 Y i = F i ( X i ) Y_i = \mathcal{F}_i(X_i) Yi=Fi(Xi),其中 X i , Y i X_i,Y_i Xi,Yi为输入和输出,而 F i ( ⋅ ) \mathcal{F}_i(\cdot) Fi(⋅)为卷积算子,其中 X i X_i Xi的形状为 < H i , W i , C i > <H_i,W_i,C_i> <Hi,Wi,Ci>。因此一个完整的卷积网络 N \mathcal{N} N可以表示为若干个卷积层的层叠,表示为:
N = F k ⊙ ⋯ F 2 ⊙ F 1 ( X ) = ⨀ j = 1 ⋯ k F j ( X ) (1-1) \mathcal{N} = \mathcal{F}_k \odot \cdots \mathcal{F}_2 \odot \mathcal{F}_1 (X) = \bigodot_{j=1\cdots k} \mathcal{F}_j (X) \tag{1-1} N=Fk⊙⋯F2⊙F1(X)=j=1⋯k⨀Fj(X)(1-1)
考虑到当前流行的卷积网络设计方法,都会考虑将整个卷积网络划分为多个stage,然后每个stage内进行若干层相同结构卷积层的层叠,那么卷积网络可以表示为(1-2),其中的 F i L i \mathcal{F}_i^{L_i} FiLi表示第 i i i个stage的 F i \mathcal{F_i} Fi层叠了 L i L_i Li次。那么提高网络的宽度可以认为是提高 C i C_i Ci,提高深度就是提高 L i L_i Li,提高分辨率就是在提高 H i , W i H_i,W_i Hi,Wi,当然这一切的前提是固定卷积算子 F i \mathcal{F}_i Fi的架构。即便只考虑 L i , H i , W i , C i L_i,H_i,W_i,C_i Li,Hi,Wi,Ci,整个超参数空间依然是非常地大,作者在本文正是提供了一种策略对这些超参数进行搜索,最终搜索出来的参数 d , w , r d,w,r d,w,r需要满足最优化目标和条件(1-3)。
N = ⨀ i = 1 ⋯ s F i L i ( X < H i , W i , C i > ) (1-2) \mathcal{N} = \bigodot_{i=1\cdots s} \mathcal{F}_{i}^{L_i} (X_{<H_i, W_i, C_i>}) \tag{1-2} N=i=1⋯s⨀FiLi(X<Hi,Wi,Ci>)(1-2)
max d , w , r A c c u r a c y ( 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 > ) M e m o r y ( N ) ≤ t a r g e t _ m e m o r y F L O P s ( N ) ≤ t a r g e t _ f l o p s (1-3) \max_{d,w,r} \mathrm{Accuracy}(\mathcal{N}(d,w,r)) \\ s.t. \ \ \mathcal{N}(d,w,r) = \bigodot_{i=1\cdots s} \mathcal{\hat{F}}_{i}^{d \cdot \hat{L}_i} (X_{<r \cdot \hat{H}_i, r \cdot \hat{W}_i, w \cdot \hat{C}_i >}) \\ \mathrm{Memory}(\mathcal{N}) \leq \mathrm{target\_memory} \\ \mathrm{FLOPs}(\mathcal{N}) \leq \mathrm{target\_flops} \tag{1-3} d,w,rmaxAccuracy(N(d,w,r))s.t. N(d,w,r)=i=1⋯s⨀F^id⋅L^i(X<r⋅H^i,r⋅W^i,w⋅C^i>)Memory(N)≤target_memoryFLOPs(N)≤target_flops(1-3)
可看到最终搜索出来的参数 d , w , r d,w,r d,w,r将会对深度进行增大 d ⋅ L ^ i d \cdot \hat{L}_i d⋅L^i,同时会对分辨率进行增大 r ⋅ H ^ i , r ⋅ W ^ i r \cdot \hat{H}_i, r \cdot \hat{W}_i r⋅H^i,r⋅W^i,对宽度进行增大 w ⋅ C ^ i w \cdot \hat{C}_i w⋅C^i,当然也要满足对计算量FLOP和内存占用的约束。
Fig 1.1 单独提高宽度,深度和分辨率容易达到性能的饱和。D e p t h : d = α ϕ W i d t h : w = β ϕ R e s o l u t i o n : r = γ ϕ s . t . α ⋅ β 2 ⋅ γ 2 ≈ 2 α ≥ 1 , β ≥ 1 , γ ≥ 1 (1-4) \begin{aligned} \mathrm{Depth}: & d= \alpha^{\phi} \\ \mathrm{Width}: & w= \beta^{\phi} \\ \mathrm{Resolution}: & r= \gamma^{\phi} \\ s.t. \ \ & \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 \\ & \alpha \geq 1, \beta \geq 1, \gamma \geq 1 \end{aligned} \tag{1-4} Depth:Width:Resolution:s.t. d=αϕw=βϕr=γϕα⋅β2⋅γ2≈2α≥1,β≥1,γ≥1(1-4)
正如(1-4)公式所示,作者通过在小型网络上进行网格搜索,搜索出基本参数 α , β , γ \alpha,\beta,\gamma α,β,γ,当然这些参数需要满足约束,特别是 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 α⋅β2⋅γ2≈2。这个约束用于限制网络的计算复杂度FLOPs,我们知道一般的卷积网络的计算复杂度正比于 d , w 2 , r 2 d,w^2,r^2 d,w2,r2,也即是 f l o p s ∼ d ⋅ w 2 ⋅ r 2 flops \sim d \cdot w^2 \cdot r^2 flops∼d⋅w2⋅r2,通过约束其约等于2,可以保证最后的计算量控制在 ( d ⋅ w 2 ⋅ r 2 ) ϕ (d \cdot w^2 \cdot r^2)^{\phi} (d⋅w2⋅r2)ϕ,也即是约等于 2 ϕ 2^{\phi} 2ϕ。作者采用的参数搜索策略是这样的:
- 首先控制 ϕ = 1 \phi=1 ϕ=1,然后以MBConv [7]为基础模块,对 α , β , γ \alpha, \beta,\gamma α,β,γ进行网格搜索,最后搜索出 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15,这个 ϕ = 1 \phi=1 ϕ=1的网络命名为
EfficientNet B0
。 - 固定 α , β , γ \alpha, \beta,\gamma α,β,γ,通过选择不同的 ϕ \phi ϕ从而实现对EfficientNet的尺度增大,从而得到
EfficientNet B0
~EfficientNet B7
。
最终得到的EfficientNet B0
网络见Fig 1.2所示,其网络结构图可见Fig 1.3,最终各个版本的EfficientNet
的 d , w , r d,w,r d,w,r见Table 1。
Model-type | width_coefficient | depth_coefficient | resolution | dropout_rate |
---|---|---|---|---|
Efficientnet-b0 | 1.0 | 1.0 | 224 | 0.2 |
Efficientnet-b1 | 1.0 | 1.1 | 240 | 0.2 |
Efficientnet-b2 | 1.1 | 1.2 | 260 | 0.3 |
Efficientnet-b3 | 1.2 | 1.4 | 300 | 0.3 |
Efficientnet-b4 | 1.4 | 1.8 | 380 | 0.4 |
Efficientnet-b5 | 1.6 | 2.2 | 456 | 0.4 |
Efficientnet-b6 | 1.8 | 2.6 | 528 | 0.5 |
Efficientnet-b7 | 2.0 | 3.1 | 600 | 0.5 |
Efficientnet-b8 | 2.2 | 3.6 | 672 | 0.5 |
Efficientnet-l2 | 4.3 | 5.3 | 800 | 0.5 |
Reference
[1]. Tan, Mingxing, and Quoc Le. “Efficientnet: Rethinking model scaling for convolutional neural networks.” In International conference on machine learning, pp. 6105-6114. PMLR, 2019.
[2].He, K., Zhang, X., Ren, S., and Sun, J. Deep residual learning for image recognition. CVPR, pp. 770–778, 2016.
[3]. Zagoruyko, S. and Komodakis, N. Wide residual networks. BMVC, 2016.
[4]. Szegedy, C., Vanhoucke, V., Ioffe, S., Shlens, J., and Wojna, Z. Rethinking the inception architecture for computer vision. CVPR, pp. 2818–2826, 2016.
[5]. Zoph, B., Vasudevan, V., Shlens, J., and Le, Q. V. Learning transferable architectures for scalable image recognition. CVPR, 2018.
[6]. Huang, Y., Cheng, Y., Chen, D., Lee, H., Ngiam, J., Le, Q. V., and Chen, Z. Gpipe: Efficient training of giant neural networks using pipeline parallelism. arXiv preprint arXiv:1808.07233, 2018.
[7]. Sandler, M., Howard, A., Zhu, M., Zhmoginov, A., and Chen, L.-C. Mobilenetv2: Inverted residuals and linear bottlenecks. CVPR, 2018.
[8].
[9]. .py
更多推荐
【论文极速读】 Efficient Net:一种组合扩大卷积网络规模的方法
发布评论