第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放
文章目录
- 摘要
- 1、简介
- 2、相关工作
- 3、复合模型缩放
- 3.1、 问题公式化
- 3.2、扩展维度
- 3.3、复合比例
- 4、EfficientNet架构
- 5、实验
- 5.1、扩展MobileNets和ResNets
- 5.2、EfficientNet的ImageNet结果
- 5.3、EfficientNet的迁移学习结果
- 6、讨论
- 7、结论
摘要
卷积神经网络(ConvNets)通常在固定的资源预算下开发,然后如果有更多的资源,则会扩大规模以获得更好的准确性。本文系统地研究了模型缩放,发现仔细平衡网络深度、宽度和分辨率可以带来更好的性能。基于这一观察,本文提出了一种新的缩放方法,使用一个简单而高效的复合系数均匀缩放深度/宽度/分辨率的所有维度。证明了该方法在扩大MobileNets和ResNet上的有效性。
进一步,我们使用神经架构搜索来设计一个新的基线网络,并将其扩展以获得一系列模型,称为EfficientNets,其精度和效率比以前的ConvNets要好得多。特别是,EfficientNet-B7在ImageNet上实现了最先进的84.3%的top-1精度,同时在推理上比现有最好的卷积网络小8.4倍,快6.1倍。EfficientNets也很好地迁移,并在CIFAR-100(91.7%)、Flowers(98.8%)和其他3个迁移学习数据集上实现了最先进的精度,参数减少了一个数量级。源代码位于https: //github.com/tensorflow/tpu/tree/ master/models/official/efficientnet。
1、简介
放大卷积网络被广泛用于实现更好的精度。例如,ResNet (He et al., 2016)可以通过使用更多的层数从ResNet-18扩展到ResNet-200;最近,GPipe (Huang等人,2018)通过将基线模型扩大四倍,实现了84.3%的ImageNet top-1精度。然而,扩大卷积网络的过程从来没有被很好地理解,目前有许多方法来做到这一点。最常见的方法是根据卷积网络的深度(He et al., 2016)或宽度(Zagoruyko & Komodakis, 2016)扩大卷积网络。另一种不太常见但越来越流行的方法是通过图像分辨率放大模型(Huang等人,2018)。在之前的工作中,通常只缩放三个维度中的一个——深度、宽度和图像大小。虽然可以任意缩放两个或三个维度,但任意缩放需要繁琐的手动调整,仍然经常产生次优的精度和效率。
本文想研究和重新思考卷积网络的扩大过程。本文研究了中心问题:是否有一种原则性的方法来扩大卷积网络,以达到更好的精度和效率?实证研究表明,平衡网络宽度/深度/分辨率的所有维度是至关重要的,令人惊讶的是,这种平衡可以通过简单地以恒定的比例缩放每个维度来实现。基于这一观察,本文提出了一种简单而有效的复合标度方法。与任意缩放这些因子的传统做法不同,所提出方法用一组固定的缩放系数均匀地缩放网络宽度、深度和分辨率。例如,如果我们想使用 2 N 2^{N} 2N倍的计算资源,那么我们可以简单地将网络深度增加 α N \alpha^{N} αN,宽度增加 β N \beta^{N} βN,图像大小增加 γ N \gamma^{N} γN,其中 α , β , γ \alpha, \beta, \gamma α,β,γ是常系数,通过在原始小模型上进行小网格搜索来确定。图2说明了我们的缩放方法和传统方法之间的区别。
直观地说,复合缩放方法是有意义的,因为如果输入图像较大,那么网络需要更多的层来增加感受野,并需要更多的通道来捕捉更大图像上的更细粒度的模式。事实上,之前的理论(Raghu等人,2017;Lu et al., 2018)和实证结果(Zagoruyko & Komodakis, 2016)都表明网络宽度和深度之间存在一定的关系,但据我们所知,我们首次实证量化了网络宽度、深度和分辨率三个维度之间的关系。
实验证明,所提出的扩展方法在现有的MobileNets上工作良好(Howard等人,2017;Sandler等人,2018)和ResNet (He等人,2016)。值得注意的是,模型扩展的有效性严重依赖于基线网络;为了更进一步,我们使用神经架构搜索(Zoph & Le, 2017;Tan等人,2019)开发一个新的基线网络,并将其扩展以获得一个称为EfficientNets的模型族。图1总结了ImageNet的性能,其中EfficientNets的性能明显优于其他卷积网络。特别是,EfficientNet-B7超过了现有最好的GPipe精度(Huang等人,2018),但使用的参数少了8.4倍,推理速度快了6.1倍。与广泛使用的ResNet-50相比(He et al., 2016), EfficientNet-B4将top-1精度从76.3%提高到83.0%(+6.7%),并且具有相似的FLOPS。除了ImageNet, EfficientNets也很好地迁移,在8个广泛使用的数据集中的5个上实现了最先进的精度,同时比现有的ConvNets减少了多达21倍的参数。
2、相关工作
ConvNet精度:自AlexNet (Krizhevsky等人,2012)赢得2012年ImageNet竞赛以来,ConvNets通过扩大规模变得越来越准确:2014年ImageNet获胜者GoogleNet (Szegedy等人,2015)以约6.8M参数实现了74.8%的top-1精度,2017年ImageNet获奖者SENet (Hu等人,2018)以145M参数实现了82.7%的top-1精度。最近,GPipe (Huang et al., 2018)使用557M参数将最先进的ImageNet top-1验证精度进一步提高到84.3%:它如此之大,以至于只能通过分割网络并将每个部分扩展到不同的加速器来用专门的管道并行库进行训练。虽然这些模型主要是为ImageNet设计的,但最近的研究表明,更好的ImageNet模型也在各种迁移学习数据集(Kornblith等人,2019)和其他计算机视觉任务(如目标检测)上表现更好(He等人,2016;Tan等人,2019)。虽然更高的精度对许多应用程序至关重要,但我们已经达到了硬件内存的限制,因此进一步提高精度需要更高的效率。
卷积网络效率:深度卷积网络通常是过度参数化的。模型压缩(Han等人,2016;He等人,2018;Yang等人,2018)是一种通过交易精度来降低模型大小的常见方法。随着手机变得无处不在,手工制作高效的移动大小的卷积网络也很常见,如SqueezeNets (Iandola等人,2016;Gholami等人,2018),MobileNets (Howard等人,2017;Sandler等人,2018)和ShuffleNets(Zhang等人,2018;Ma et al., 2018)。最近,神经架构搜索在设计高效的移动尺寸卷积网络中变得越来越流行(Tan等人,2019;Cai et al., 2019),并通过广泛调整网络宽度、深度、卷积核类型和大小,实现了比手工制作的移动卷积网络更好的效率。然而,目前还不清楚如何将这些技术应用于具有更大的设计空间和更昂贵的调优成本的大型模型。本文旨在研究超大型卷积网络的模型效率,其精度超过了最先进的水平。为了实现这一目标,我们求助于模型缩放。
模型缩放:对于不同的资源约束,有许多方法可以缩放ConvNet: ResNet (He et al., 2016)可以通过调整网络深度(#layers)缩小(例如ResNet-18)或扩大(例如ResNet-200),而WideResNet (Zagoruyko & Komodakis, 2016)和MobileNets (Howard et al., 2017)可以通过网络宽度(#channels)缩小。众所周知,更大的输入图像大小将有助于准确性,但会带来更多的flop开销。尽管之前的研究(Raghu等人,2017;林和杰格尔卡,2018;Sharir & Shashua, 2018;Lu等人,2018)的研究表明,网络深度和宽度对卷积网络的表达能力都很重要,如何有效地扩展卷积网络以实现更好的效率和精度仍然是一个开放问题。本文工作系统地和经验地研究了网络宽度、深度和分辨率所有三个维度的卷积网络缩放。
3、复合模型缩放
在本节中,我们将阐述缩放问题,研究不同的方法,并提出我们的新缩放方法。
3.1、 问题公式化
卷积网络层i可以定义为一个函数: Y i = F i ( X i ) {Y_i}= \mathcal{F}_i{}\left ({X_i}\right) Yi=Fi(Xi),其中 F i \mathcal{F}_i Fi是操作符, Y i Y_i Yi是输出张量, X i X_i Xi是输入张量,具有张量形状 ⟨ H i , W i , C i ⟩ \left\langle H_i{, }W_i{, }C_i{}\right\rangle ⟨Hi,Wi,Ci⟩,其中 H i {H_i} Hi和 W i {W_i} Wi是空间维度, C i {C_i} Ci是通道维度。一个ConvNet N \mathcal{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…kFj(X1)。在实践中,ConvNet层通常划分为多个阶段,每个阶段中的所有层共享相同的架构:例如,ResNet (He et al.,2016)有五个阶段,每个阶段中的所有层都具有相同的卷积类型,除了第一层执行下采样。因此,我们可以将卷积网络定义为:
N = ⨀ i = 1 … s F i L i ( X ⟨ H i , W i , C i ⟩ ) (1) \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) \tag{1} N=i=1…s⨀FiLi(X⟨Hi,Wi,Ci⟩)(1)
式中, F i L i \mathcal{F}_{i}^{L_{i}} FiLi表示第i阶段第 F i F_i Fi层重复 L i L_i Li次, ⟨ H i , W i , C i ⟩ \left\langle H_{i}, W_{i}, C_{i}\right\rangle ⟨Hi,Wi,Ci⟩表示第i层的输入张量 X X X的形状。图2(a)说明了一个代表性的卷积网络,其中空间维度逐渐缩小,但通道维度在各层上进行扩展,例如,从初始输入形状 ⟨ 224 , 224 , 3 ⟩ \langle 224,224,3\rangle ⟨224,224,3⟩到最终输出形状 ⟨ 7 , 7 , 512 ⟩ \langle 7,7,512\rangle ⟨7,7,512⟩。
常规的ConvNet设计主要关注于寻找最佳的层架构 F i \mathcal{F}_{i} Fi,而模型缩放则试图扩展网络长度 ( L i ) \left(L_{i}\right) (Li)、宽度 ( C i ) \left(C_{i}\right) (Ci)和/或分辨率 ( H i , W i ) \left(H_{i}, W_{i}\right) (Hi,Wi),无需改变基线网络中预定义的 F i \mathcal{F}_{i} Fi。通过固定 F i \mathcal{F}_{i} Fi,模型缩放简化了新资源约束下的设计问题,但对于每一层探索不同的 L i , C i , H i , W i L_{i}, C_{i}, H_{i}, W_{i} Li,Ci,Hi,Wi仍然有很大的设计空间。为了进一步缩小设计空间,我们限制所有层必须以恒定比例均匀缩放。我们的目标是在任何给定的资源约束下使模型精度最大化,这可以表述为一个优化问题:
max d , w , r Accuracy ( N ( d , w , r ) ) \max _{d, w, r} \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⟩)
Memory ( N ) ≤ targetmemory FLOPS ( N ) ≤ targetflops (2) \begin{array}{l} \operatorname{Memory}(\mathcal{N}) \leq \text { targetmemory } \\ \operatorname{FLOPS}(\mathcal{N}) \leq \text { targetflops } \end{array} \tag{2} Memory(N)≤ targetmemory FLOPS(N)≤ targetflops (2)
其中, w , d , r w, d, r w,d,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是基线网络中的预定义参数(如表1所示)。
3.2、扩展维度
问题2的主要困难在于最优解 d ; w ; r d;w;r d;w;r是相互依赖的,并且在不同的资源约束下值会发生变化。由于这一困难,传统方法主要是在这些维度之一对卷积网络进行缩放:
深度(d):缩放网络深度是许多ConvNets最常用的方法(He et al., 2016;黄等人,2017;Szegedy等人,2015;2016)。直觉是,更深的卷积网络可以捕获更丰富和更复杂的特征,并在新任务上有很好的泛化能力。然而,由于梯度消失问题,更深的网络也更难以训练(Zagoruyko & Komodakis, 2016)。尽管一些技术,如跳跃连接(He et al., 2016)和批量归一化(Ioffe & Szegedy, 2015),缓解了训练问题,但非常深的网络的精度增益却降低了:例如,ResNet-1000与ResNet-101的精度相似,尽管它的层数更多。图3(中)显示了我们对具有不同深度系数d的基线模型进行缩放的实证研究,进一步表明非常深的卷积网络的精度回报递减。
宽度(w):缩放网络宽度通常用于小尺寸模型(Howard等人,2017;Sandler等人,2018;Tan等人,2019)。正如(Zagoruyko & Komodakis, 2016)中讨论的那样,更广泛的网络往往能够捕获更多细粒度特征,也更容易训练。然而,极宽但极浅的网络往往难以捕获更高层次的特征。我们在图3(左)中的经验结果表明,当网络随着w的增大而变得更宽时,精度迅速饱和。
分辨率®:通过更高分辨率的输入图像,ConvNets可以捕获更细粒度的模式。从早期ConvNets的224x224开始,现代ConvNets倾向于使用299x299 (Szegedy et al., 2016)或331x331 (Zoph et al., 2018)以获得更好的准确性。最近,GPipe (Huang等人,2018)以480 × 480分辨率实现了最先进的ImageNet精度。更高的分辨率,如600x600,也广泛应用于目标检测卷积网络(He等人,2017;Lin等人,2017)。图3(右)显示了缩放网络分辨率的结果,更高的分辨率确实可以提高精度,但非常高的分辨率会降低精度增益(r = 1:0表示分辨率224x224, r = 2:5表示分辨率560x560)。
通过上述分析,我们得出了第一个结论:
结论1 -扩大网络宽度、深度或分辨率的任何维度都可以提高精度,但对于更大的模型,精度增益会降低。
3.3、复合比例
我们通过经验观察到,不同的缩放维度并不是相互独立的。直观地说,对于更高分辨率的图像,我们应该增加网络深度,这样更大的感受野可以帮助捕获在更大的图像中包含更多像素的相似特征。相应的,在分辨率较高时,我们也应该增加网络宽度,以便在高分辨率图像中以更多的像素捕获更细粒度的图案。这些直觉表明,我们需要协调和平衡不同的缩放维度,而不是传统的单一维度缩放。
为了验证我们的直觉,我们比较了不同网络深度和分辨率下的宽度缩放,如图4所示。如果我们只缩放网络宽度w,而不改变深度(d=1.0)和分辨率(r=1.0),精度会很快饱和。随着更深(d=2.0)和更高的分辨率(r=2.0),宽度缩放在相同的FLOPS成本下获得了更好的精度。这些结果引出了第二个结论:
结论2——为了追求更好的精度和效率,在卷积网络缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的。
事实上,之前的一些工作(Zoph等人,2018;Real et al., 2019)已经尝试任意平衡网络宽度和深度,但它们都需要繁琐的手动调整。
本文提出了一种新的复合尺度方法,该方法使用复合系数φ以一种原则性的方式统一尺度网络宽度、深度和分辨率:
depth: d = α ϕ width: w = β ϕ resolution: r = γ ϕ s.t. α ⋅ β 2 ⋅ γ 2 ≈ 2 α ≥ 1 , β ≥ 1 , γ ≥ 1 (3) \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 \\ & \alpha \geq 1, \beta \geq 1, \gamma \geq 1 \end{aligned} \tag{3} depth: width: resolution: s.t. d=αϕw=βϕr=γϕα⋅β2⋅γ2≈2α≥1,β≥1,γ≥1(3)
其中, α , β , γ \alpha, \beta, \gamma α,β,γ是常数,可以通过一个小的网格搜索确定。直观地说, ϕ \phi ϕ是一个用户指定的系数,它控制有多少资源可用于模型缩放,而 α , β , γ \alpha, \beta, \gamma α,β,γ指定如何分别将这些额外资源分配给网络宽度、深度和分辨率。值得注意的是,规则卷积op的FLOPS与 d , w 2 , r 2 d, w^{2}, r^{2} d,w2,r2成正比,即网络深度加倍会使FLOPS加倍,但网络宽度或分辨率加倍会使FLOPS增加四倍。由于卷积运算通常主导卷积网络的计算成本,用公式3缩放卷积网络将使总FLOPS大约增加 ( α ⋅ β 2 ⋅ γ 2 ) ϕ \left(\alpha \cdot \beta^{2} \cdot \gamma^{2}\right)^{\phi} (α⋅β2⋅γ2)ϕ。在本文中,我们约束 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 α⋅β2⋅γ2≈2,使得对于任何新的 ϕ \phi ϕ,总FLOPS将大约增加 2 ϕ 2^{\phi} 2ϕ。
4、EfficientNet架构
由于模型缩放不会改变基线网络中的层算子 F ^ i \hat{\mathcal{F}}_{i} F^i,因此具有良好的基线网络也至关重要。我们将使用现有的ConvNets评估我们的缩放方法,但为了更好地证明缩放方法的有效性,我们还开发了一个新的移动大小的基线,称为EfficientNet。
受(Tan等人,2019)启发,通过利用多目标神经架构搜索来优化精度和flop,开发了基线网络。具体来说,我们使用与(Tan et al., 2019)相同的搜索空间,并使用 A C C ( m ) × [ F L O P S ( m ) / T ] w A C C(m) \times[F L O P S(m) / T]^{w} ACC(m)×[FLOPS(m)/T]w作为优化目标,其中ACC(m)和FLOPS (m)表示模型m的精度和FLOPS, T是目标FLOPS, w=-0.07是用于控制精度和FLOPS之间权衡的超参数。不像(Tan等人,2019;Cai et al., 2019),这里我们优化FLOPS而不是延迟,因为我们没有针对任何特定的硬件设备。我们的搜索产生了一个有效的网络,我们将其命名为EfficientNet-B0。由于我们使用与(Tan等人,2019)相同的搜索空间,该架构类似于MnasNet,除了我们的EfficientNet-B0由于计算量目标更大而略大(我们的计算量目标是400M)。表1显示了EfficientNet-B0的架构。其主要构建模块是移动反向瓶颈MBConv (Sandler等人,2018;Tan et al., 2019),我们还添加了SE注意力(Hu et al., 2018)。
从基准EfficientNet-B0开始,我们应用复合缩放方法以两步扩大其规模:
- 步骤1:我们首先固定 ϕ = 1 \phi =1 ϕ=1,假设有两倍以上的可用资源,并根据公式2和3对 α , β , γ \alpha, \beta, \gamma α,β,γ进行小网格搜索。特别地,我们发现EfficientNet-B0的最佳值是 α = 1.2 , β = 1.1 , γ = 1.15 \alpha =1.2, \beta =1.1, \gamma =1.15 α=1.2,β=1.1,γ=1.15,在 α ⋅ β 2 ⋅ γ 2 ≈ 2 \alpha\cdot\beta ^{2}\cdot\gamma ^{2}\approx 2 α⋅β2⋅γ2≈2的约束下。
- 步骤2:然后我们将 α , β , γ \alpha, \beta, \gamma α,β,γ固定为常数,并使用公式3扩展不同的 ϕ \phi ϕ基线网络,以获得EfficientNet-B1到B7(详细信息见表2)。
值得注意的是,通过直接在大型模型周围搜索α, β, γ可以获得更好的性能,但在更大的模型上搜索成本变得非常昂贵。我们的方法通过只在小的基线网络上进行一次搜索(步骤1)来解决这个问题,然后对所有其他模型使用相同的缩放系数(步骤2)。
5、实验
在本节中,我们将首先在现有的ConvNets和新提出的EfficientNets上评估我们的缩放方法。
5.1、扩展MobileNets和ResNets
作为概念证明,首先将所提出的缩放方法应用于广泛使用的mobilenet (Howard等人,2017;Sandler等人,2018)和ResNet (He等人,2016)。表3显示了以不同方式扩展它们的ImageNet结果。与其他一维缩放方法相比,所提出的复合缩放方法提高了所有这些模型的精度,表明所提出的缩放方法对一般现有ConvNets的有效性。
5.2、EfficientNet的ImageNet结果
使用类似的设置在ImageNet上训练EfficientNet模型(Tan等人,2019):衰减0.9和动量0.9的RMSProp优化器;批量范数动量0.99;重量衰减1e-5;初始学习率0.256,每2.4个epoch衰减0.97。我们还使用SiLU (Swish-1)激活(Ramachandran等人,2018;Elfwing等人,2018;Hendrycks & Gimpel, 2016)、AutoAugment (Cubuk et al., 2019)和随机深度(Huang et al., 2016),生存概率为0.8。众所周知,更大的模型需要更多的正则化,我们将EfficientNet-B0的dropout比率(Srivastava等人,2014)从0.2线性增加到B7的0.5。我们从训练集中随机选择25K张图像作为一个minival集,并在这个minival上进行提前停止;然后,在原始验证集上评估提前停止的检查点,以报告最终验证精度。
表2显示了从相同的基准EfficientNet- b0扩展而来的所有EfficientNet模型的性能。所提出的EfficientNet模型通常比其他具有类似精度的ConvNets使用的参数和FLOPS少一个数量级。特别是,EfficientNet-B7以66M参数和37B FLOPS实现了84.3%的top1精度,更准确但比之前最好的GPipe小8.4倍(Huang等人,2018)。这些收益来自于更好的架构、更好的扩展和更好的训练设置,这些设置是为EfficientNet定制的。
图1和图5说明了代表性ConvNets的参数-精度和FLOPS-精度曲线,其中我们缩放后的EfficientNet模型比其他ConvNets以更少的参数和FLOPS实现了更好的精度。值得注意的是,EfficientNet模型不仅小,而且计算成本更低。例如,我们的EfficientNet-B3取得了比ResNeXt- 101 (Xie等人,2017)更高的精度,使用的FLOPS减少了18倍。
为了验证延迟,我们还测量了几个代表性covnet在真实CPU上的推断延迟,如表4所示,其中我们报告了20次运行的平均延迟。EfficientNet-B1的运行速度比广泛使用的ResNet-152快5.7倍,而EfficientNet-B7的运行速度比GPipe快6.1倍(Huang等人,2018),这表明我们的efficientnet在真实硬件上确实快。
5.3、EfficientNet的迁移学习结果
我们还在常用的迁移学习数据集列表上评估了EfficientNet,如表6所示。我们借鉴了相同的训练设置(Kornblith等人,2019)和(Huang等人,2018),它们在新的数据集上进行ImageNet预训练检查点和微调。
表5显示了迁移学习性能:(1)与公共可用模型相比,如NASNet-A (Zoph等人,2018)和Inception-v4 (Szegedy等人,2017),我们的EfficientNet模型实现了更好的精度,平均参数减少了4.7倍(最高21倍)。(2)与最先进的模型相比,包括动态合成训练数据的DAT (Ngiam et al., 2018)和用专门的管道并行训练的GPipe (Huang et al., 2018),我们的EfficientNet模型仍然在8个数据集中的5个数据集上超过其精度,但使用的参数少了9.6倍。
图6比较了各种模型的精度参数曲线。总的来说,与现有模型相比,EfficientNets在参数减少一个数量级的情况下始终实现了更好的精度,包括ResNet (He等人,2016)、DenseNet (Huang等人,2017)、Inception (Szegedy等人,2017)和NASNet (Zoph等人,2018)。
6、讨论
为了从EfficientNet架构中分离出我们所提出的缩放方法的贡献,图8比较了相同EfficientNet- b0基线网络的不同缩放方法的ImageNet性能。总的来说,所有的缩放方法都以更多的FLOPS为代价来提高精度,但所提出的复合缩放方法可以进一步提高精度,比其他单维度缩放方法最高提高2.5%,表明所提出的复合缩放的重要性。
为了进一步理解为什么我们的复合缩放方法比其他方法更好,图7比较了几个具有不同缩放方法的代表性模型的类激活图(Zhou et al., 2016)。所有这些模型都是从同一基线缩放的,它们的统计数据如表7所示。图像是从ImageNet验证集随机选取的。如图所示,复合缩放的模型倾向于关注更相关、物体细节更多的区域,而其他模型要么缺乏物体细节,要么无法捕捉图像中的所有物体。
7、结论
本文系统地研究了卷积网络的缩放,并发现仔细平衡网络宽度、深度和分辨率是一个重要但缺失的部分,阻碍了我们获得更好的精度和效率。为解决这个问题,本文提出一种简单高效的复合缩放方法,能够以更有原则的方式轻松地将基线卷积网络扩展到任何目标资源约束,同时保持模型效率。在这种复合缩放方法的支持下,本文证明了mobilesize EfficientNet模型可以非常有效地扩展,在ImageNet和五个常用的迁移学习数据集上,以较少的参数和FLOPS超过最先进的精度。
致谢
我们感谢庞若明、Vijay Vasudevan、Alok Aggarwal、Barret Zoph、Hongkun Yu、Jonathon Shlens、Raphael Gontijo Lopes、Yifeng Lu、Daiyi Peng、Xiaodan Song、Samy Bengio、Jeff Dean和谷歌Brain团队的帮助。
相关文章:
第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放
文章目录 摘要1、简介2、相关工作3、复合模型缩放3.1、 问题公式化3.2、扩展维度3.3、复合比例 4、EfficientNet架构5、实验5.1、扩展MobileNets和ResNets5.2、EfficientNet的ImageNet结果5.3、EfficientNet的迁移学习结果 6、讨论7、结论 摘要 卷积神经网络(ConvNets)通常在固…...
[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求: 编译硬件需求:做多系统测试,磁盘500GB起步(固态)(机械会卡死),内存3…...
Web Worker 和 WebSocket的区别
Web Worker(消息传递机制) 定义:是为了在浏览器中提供多线程支持,允许 JavaScript 在后台线程运行,而不阻塞主线程。它非常适合执行耗时的计算任务或处理大量数据,避免主线程(通常是 UI 线程&a…...
vmware Ubuntu2004运行STAR-Searcher
github链接 安装ros noetic gazebo11 略 gazebo更新方法 sudo sh -c echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable lsb_release -cs main" > /etc/apt/sources.list.d/gazebo-stable.list wget https://packages.osrfoundation.org/gaz…...
04_JavaScript引入到文件
JavaScript引入到文件 嵌入到HTML文件中 <body> <script> var age 20 </script></body> 引入本地独立JS文件 <body> <script type"text/javascript" src"./itbaizhan.js"> </script></body> 引入网络来…...
计算机网络的功能
目录 信息交换 资源共享 分布式处理 可靠性增强 集中管理 信息交换 计算机网络最基本的功能之一是允许不同设备之间的数据通信。这包括电子邮件的发送和接收、即时消息的传递、文件传输等。通过网络,用户可以轻松地与全球各地的其他人进行沟通和协作。 信息交…...
38 基于单片机的宠物喂食(ESP8266、红外、电机)
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用L298N驱动连接P2.3和P2.4口进行电机驱动, 然后串口连接P3.0和P3.1模拟ESP8266, 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…...
Git仓库迁移到远程仓库(源码、分支、提交)
单个迁移仓库 一、迁移仓库 1.准备工作 > 手动在电脑创建一个临时文件夹,CMD进入该目录 > 远程仓库上创建一个同名的空仓库 2.CMD命令:拉取旧Git仓库(包含提交、分支、源码) $ git clone --bare http://git.domain.cn/…...
Go语言压缩文件处理
目录 Go 语言压缩文件处理1. 压缩文件:Zip函数2. 解压文件:UnZip 函数3. 小结 Go 语言压缩文件处理 在现代的应用开发中,处理压缩文件(如 .zip 格式)是常见的需求。Go 语言提供了内置的 archive/zip 包来处理 .zip 文…...
Libevent库-http通信不同请求方式的处理
做项目的时候用到了http通信,同事用libevent库写的,特此记录后端从前端拿到消息后的处理方式 void CHTTPTest::request(const std::any & data) {// data 是从前端拿到的数据void *obj std::any_cast<void *>(data); // std::any是C17新标准…...
Vue3 v-if与v-show的区别
v-if 与 v-show 我们都可以在开发中用于条件渲染,在面试时也是个常考的题目 实现原理 v-if:是真正的条件渲染,当v-if true时,元素会被创建、渲染,并插入到dom树中,这个过程会耗费系统的资源,当…...
同时在github和gitee配置密钥
同时在github和gitee配置密钥 1. 生成不同的 SSH 密钥 为每个平台生成单独的 SSH 密钥。 # 为 GitHub 生成密钥(默认文件路径为 ~/.ssh/github_id_rsa) ssh-keygen -t rsa -b 4096 -C "your_github_emailexample.com" -f ~/.ssh/github_id_…...
Scala—数组(不可变数组Array、可变数组ArrayBuffer)用法详解
Scala集合概述-链接 大家可以点击上方链接,先对Scala的集合有一个整体的概念🤣🤣🤣 在 Scala 中,数组是一种特殊的集合类型,可以是可变的也可以是不可变的。 1. 不可变数组 在 Scala 中,不可变…...
Failed to find SV in PRN block of SINEX file (Name svnav.dat)
gamit 精密星历生成失败 gamit svnav.dat没更新 下载svnav.dat.allgnss 重命名成 svnav.dat ,替换到tables,即可。...
H.265流媒体播放器EasyPlayer.js无插件H5播放器关于移动端(H5)切换网络的时候,播放器会触发什么事件
EasyPlayer.js无插件H5播放器作为一款功能全面的H5流媒体播放器,凭借其多种协议支持、多种解码方式、丰富的渲染元素和强大的应用功能,以及出色的跨平台兼容性,为用户提供了高度定制化的选项和优化的播放体验。无论是视频直播还是点播&#x…...
Ubuntu上使用自带python创建虚拟环境
虚拟环境让项目之间的依赖关系更加清晰,也可以避免全局安装的包的版本冲突问题。 1.查看python Ubuntu上一般都是自带python的,查看python版本及指向(使用的话python要换成python3): ls -l /usr/bin | grep python 2.安装python虚拟环境工…...
对智能电视直播App的恶意监控
首先我们要指出中国广电总局推出的一个政策性文件是恶意监控的始作俑者,这个广电总局的政策性文件禁止智能电视和电视盒子安装直播软件。应该说这个政策性文件是为了保护特殊利益集团,阻挠技术进步和发展的。 有那么一些电视机和电视盒子的厂商和电信运…...
网络原理(一):应用层自定义协议的信息组织格式 HTTP 前置知识
目录 1. 应用层 2. 自定义协议 2.1 根据需求 > 明确传输信息 2.2 约定好信息组织的格式 2.2.1 行文本 2.2.2 xml 2.2.3 json 2.2.4 protobuf 3. HTTP 协议 3.1 特点 4. 抓包工具 1. 应用层 在前面的博客中, 我们了解了 TCP/IP 五层协议模型: 应用层传输层网络层…...
微软企业邮箱:安全可靠的企业级邮件服务!
微软企业邮箱的设置步骤?如何注册使用烽火域名邮箱? 微软企业邮箱作为一款专为企业设计的邮件服务,不仅提供了高效便捷的通信工具,更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…...
matlab导出3D彩色模型(surface类转stl,并对白模上色)
在matlab中绘制3维图形时,需要将3维图形导出到PPT中展示。但是直接导出图片效果欠佳,无法全方位展示。 最近学习了如何将matlab中的图形导出为stl模型,然后再采用简单的方法对模型上色。 中间尝试过matlab导出stl、ply、3dm等多种格式&…...
【JavaScript】async /await异步详解2 promise举例
在 JavaScript 中,async 和 await 是处理异步操作的强大工具。结合 try...catch 语句,你可以优雅地处理异步操作中的错误。 基本用法 定义异步函数:使用 async 关键字。等待 Promise 解析:使用 await 关键字。错误处理ÿ…...
Android 设备使用 Wireshark 工具进行网络抓包
背景 电脑和手机连接同一网络,想使用wireshark抓包工具抓取Android手机网络日志,有以下两种连接方法: Wi-Fi 网络抓包。USB 网络共享抓包。需要USB 数据线将手机连接到电脑,并在开发者模式中启用 USB 网络共享。 查看设备连接信…...
封装类与封装函数
目录结构 src/ ├── utils/ │ ├── test.js │ ├── Calculator.js ├── views/ │ ├── Home.vue ├── App.vue 共同点:模块导出与模块引入 封装函数 场景 简单、轻量级和性能敏感的场景,适合快速开发和维护。 优 可维护性&…...
【java】接口幂等性的实现
文章目录 1. 引言介绍幂等性的概念为什么需要在Java接口中实现幂等性 2. 使用幂等表实现幂等性什么是幂等表如何设计幂等表示例:Java代码实现使用幂等表使用幂等表实现幂等性 3. 利用Nginx Lua 和 Redis实现幂等性Nginx和Lua的作用简介介绍Redis的SETNX命令架构设计…...
Leetcode 1.两数之和
题目意在对数组的快速查找 思路:哈希表 先创建一个哈希表,然后对数组进行遍历,iter代表用目标值依次减去遍历数组中的元素后得出的值,如果这个值在map中存在,则返回其索引和当前数组元素中的索引;若不存…...
GitLab指定用户分配合并权限
进入项目 -》 Project Settings Repository -》展开 Protected branches -》 添加要保护的分支,设置角色 管理用户角色权限 查看到不同用户的角色,一般设置Developer只有Merger Request权限,Maintainer还有Merge审批权限 GitLab 中的权限…...
实战优化公司线上系统JVM:从基础到高级
引言 Java虚拟机(JVM)是Java语言的核心组件,它使得Java程序能够实现“一次编写,到处运行”的跨平台特性。在现代应用程序中,JVM的性能和稳定性直接影响到系统的整体表现。本文将深入探讨JVM的基础知识、基本特点、定义…...
实时数据开发 | 一文理解Flink窗口机制
窗口操作在流处理和批处理之间起到了桥梁的作用。 Flink引擎本质上是流式引擎,认为批处理是流处理的一个特例。因此,通过窗口将流数据划分为有限大小的集合,使得在这些有界的数据集上可以进行批处理风格的计算。 通过配置窗口的参数…...
【云原生系列】迁移云上需要考虑哪些问题
云计算已经成为现代企业架构中不可或缺的一部分。越来越多的公司正在将他们的应用、数据和基础设施迁移到云平台上,以便更好地应对快速变化的市场需求、提高运营效率并降低成本。然而,迁移到云端并不是一件轻松的事情。涉及到多个技术、业务和管理层面的…...
1、Three.js开端准备环境
准备工作 从 CDN 导入 1.安装 VSCode 2.安装 Node.js 3.查看Three.js最新版本 4.如何cdn引入: https://cdn.jsdelivr.net/npm/threev版本号/build/three.module.js 例如:https://cdn.jsdelivr.net/npm/threev0.170.0/build/three.module.js 我们需要…...
go 和java 编写方式的理解
1. go 推荐写流水账式的代码(非贬义),自己管自己。java喜欢封装各种接口供外部调用,让别人来管自己。 2. 因为协程的存在, go的变量作用域聚集在方法内部,即函数不可重入,而java线程的限制&…...
华为ENSP--BGP路由协议实验详解
项目背景 随着A公司网络规模的增长和新业务对互联网接入速度及稳定性需求的提升,公司决定升级其网络设施。为此,A公司向运营商B租用了两条线路以接入网络,旨在提高网络资源的利用率,并增强网络的安全性、稳定性和可靠性,从而为用户提供更优质的服务和体验 在这一背景下,正…...
LLM*:路径规划的大型语言模型增强增量启发式搜索
路径规划是机器人技术和自主导航中的一个基本科学问题,需要从起点到目的地推导出有效的路线,同时避开障碍物。A* 及其变体等传统算法能够确保路径有效性,但随着状态空间的增长,计算和内存效率会严重降低。相反,大型语言…...
UE5 MakeSlateBrush 节点的作用
在 Unreal Engine 5 (UE5) 中,MakeSlateBrush 节点是用于 创建或设置一个 Slate Brush 的节点。Slate 是 Unreal Engine 中的 UI 框架,用于构建编辑器界面以及游戏中的用户界面(UI)。Slate Brush 是 Slate UI 中的一种资源类型&am…...
机载视频流回传+编解码方案
无线网络,低带宽场景。不能直接转发ROS raw image(10MB/s),而要压缩(编码)后再传输。可以用rtsp的udp传输或者直接传输话题,压缩方法有theora(ROS image_transport默认支持ÿ…...
小程序 - 婚礼邀请函
小程序页面和样式练习 - 婚礼邀请函小程序开发笔记 目录 婚礼邀请函 准备工作 加载静态资源 项目初始化 标签栏的配置 各页面导航栏标题配置 全局导航栏样式配置 公共样式的编写 项目内容 邀请函页面内容 邀请函页面样式 照片页面内容 照片墙页面样式 美好时光页…...
命令行使用ssh隧道连接远程mysql
本地电脑A 跳板机B 主机2.2.2.2 用户名 B ssh端口号22 登录密码bbb 远程mysql C 地址 3.3.3.3 端口号3306 用户名C 密码ccc A需要通过跳板机B才能访问C; navicat中配置ssh可以实现在A电脑上访问C 如何实现本地代码中访问C呢? # 假设本地使…...
深度学习:完整的模型训练流程
深度学习:完整的模型训练流程 为了确保我们提供一个彻底和清晰的指导,让我们深入分析在model.py和train.py文件中定义的模型训练和验证流程。以下部分将详细讨论模型结构的定义、数据的加载与预处理、训练参数的配置、训练与测试循环,以及模…...
【数据结构】ArrayList与顺序表
ArrayList与顺序表 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 杨辉三角5.2 简单的洗牌算法 6. ArrayList的问题及思考 【本节目标】 线性表顺序表ArrayLis…...
如何使用 python 中 pandas 进行数据分析?
使用Python中的pandas进行数据分析主要有以下几个步骤: 导入pandas库和数据文件 首先需要导入pandas库和数据文件,可以使用pandas的read_csv()函数读取CSV格式的数据文件,并将其存储为DataFrame格式。 pythonCopy code import pandas as p…...
WordPress文章目录插件,LuckyWP Table of Contents自动生成文章插件
文章带目录不能帮助用户快速获取信息,也能让页面内容更具条例,更加符合搜索引擎收录规范。今天给大家推荐一款免费好用的WordPress文章目录插件LuckyWP Table of Contents。LuckyWP Table of Contents 是一个WordPress插件,它允许你在博客帖…...
Qwen2.5-7B大模型微调记录
Qwen2.5-7B大模型微调记录 研究需要,需要搞一个大模型出来,没有太多的时间自己训练,准备用现成的开源大模型,然后结合研究方向进行微调 前前后后折腾大半个月,总算做完了第一个微调的大模型,模型基于阿里…...
TCP三次握手和四次挥手
三次握手:表示这客户与服务器之间的连接确定。 第一次:由客户端发出连接请求到服务器,服务器收到后可以确定客户的发送与自身的接收没问题 第二次:再由服务器回话个客户,让客户知道自己的发送与接收没问题,这时服务器还不知自己的…...
[Maven]3.5.3配置
MAVEN本地仓库配置: 1.conf 2.settings.xml 3.找到本地仓库配置目录 4.填写路径 5.镜像仓库...
68000汇编实战01-编程基础
文章目录 简介产生背景应用领域 语言学习EASy68K帮助文档IDE使用 编程语言commentslabels开始标签指令标签位置标签 opcode 操作码常用操作码数据传送算术运算逻辑运算控制流分支跳转地址跳转子程序跳转 位操作比较堆栈操作 IO操作码其他操作码 directives 指令DC指令EQU 指令S…...
常见的概念 及 分布式系统的演变过程
文章目录 一. 概念解释1. 应用(Application)/ 系统(System)2. 模块(Module)/ 组件(Component)3. 分布式(Distributed)4. 集群(Cluster)…...
torch.is_nonzero(input)
torch.is_nonzero(input) input: 输入张量 若输入是 不等于零的单元素张量 则返回True,否则返回False 不等于零的单元素张量:torch.tensor([0.]) 或 torch.tensor([0]) 或 torch.tensor([False])单元素张量: 只有一个数 的张量 import torch print(t…...
爬虫开发(5)如何写一个CSDN热门榜爬虫小程序
笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~: 📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中! 📚UI自动化测试系列: SeleniumJava自动化测试系列教程❤ 📚…...
Rust 组织管理
Rust 组织管理 Rust 是一种系统编程语言,以其安全性、并发性和性能而闻名。随着 Rust 社区的不断壮大,有效的组织管理变得至关重要。本文将探讨 Rust 社区的组织结构、项目管理、社区参与和未来发展方向。 Rust 社区的组织结构 Rust 社区采用了一种去中心化的组织结构。核…...
谈谈微服务的常用组件
由于微服务给系统开发带来了一些问题和挑战,如服务调用的复杂性、分布式事务的处理、服务的动态管理等,为了更好地解决这些问题和挑战,各种微服务治理的组件应运而生,充当微服务架构的基石和支撑,常用组件如下表&#…...