EfficientNet、ShuffleNet、NFNet…你都掌握了吗?一文总结图像分类必备经典模型(五)

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: EfficientNet、ShuffleNet、NFNet…你都掌握了吗?一文总结图像分类必备经典模型

EfficientNet


EfficientNet 是谷歌公司于 2019 年提出的高效神经网络,故得名为 EfficientNet,大幅度的缩小了参数的同时提高了预测准确度。EfficientNet 首先量化了三个指标对提升网络性能的影响:增加网络宽度(增加卷积核个数)、增加网络深度(使用更多层结构)、增加输入网络分辨率。



图6 模型缩放。(a)基线网络示例;(b)-(d)是传统的缩放方法,只增加网络宽度、深度或分辨率的一个维度。(e)是本文提出的复合缩放方法,以一个固定的比例统一缩放所有三个维度



增加网络的深度能够得到更加丰富、复杂的特征并且能够在其他新任务中很好的泛化性能。但是,由于逐渐消失的梯度问题,更深层的网络也更难以训练。宽度更广的网络往往能够捕获更多细粒度的功能,并且更易于训练。但是,极其宽泛但较浅的网络在捕获更高级别的特征时往往会遇到困难。使用更高分辨率的输入图像,ConvNets 可以捕获更细粒度的图案,但对于非常高分辨率的图片,准确度会降低。EfficientNet 的思路是Block 中先进行 1x1 卷积提升通道数,然后进行 DepthwiseConv 深度卷积减少参数量,并且在 Block 中引入残差结构和 Squeeze-and-Excitation 模块。建立多个网络深度、网络宽度、图像分辨率不同的模型,从三个方面拓展网络性能。

作者在论文中对整个网络的运算过程和复合扩展方法进行了抽象。首先定义了每一层卷积网络为 F_i( X_i),X_i 是输入张量,Y_i 是输出张量,而 tensor 的形状是< H i , W i , C i >。整个卷积网络由 k 个卷积层组成,整个卷积网络为:



为了探究 d , r , w 这三个因子对最终准确率的影响,将它们加入到公式中,可以得到抽象化后的优化问题(在指定资源限制下):



作者提出了一种新的复合缩放方法,该方法使用一个统一的复合系数 ϕ 对网络的宽度,深度和分辨率进行均匀缩放。



其中 α , β , γ 是通过一个小网格搜索的方法决定的常量。通常来说,ϕ 是一个用户指定的系数来控制有多少的额外资源能够用于模型的缩放,α , β , γ 指明了怎么支配这些额外的资源分别到网络的宽度、深度和分辨率上。尤其是,一个标准卷积操作的运算量的比例是 d , w^2 , r^2 双倍的网络深度将带来双倍的运算量,但是双倍的网络宽度或分辨率将会增加运算为 4 倍。

作者通过利用多目标神经架构搜索来开发基线网络,以优化准确性和 FLOPS。具体来说,使用 ACC(m)x[FLOPS(m)=T]^w 作为优化目标,其中 ACC(m) 和 FLOPS(m) 表示模型 m 的精度和 FLOPS,T 是目标 FLOPS,w=-0.07 是控制精度和 FLOPS 之间折衷的超参。优化 FLOPS 而不是延迟,因为我们不针对任何特定的硬件设备。搜索生成一个高效的网络,称之为 EfficientNet-B0。结构如下:


表2 EfficientNet-B0结构


它的主要构件是移动式倒置瓶颈 MBConv,作者还在其中加入了 squeeze-and-excitation 优化。从基线 EfficientNet-B0 开始,作者应用复合扩展方法,分两步对其进行扩展。
步骤1:首先固定=1,假设有两倍的可用资源,对 α , β , γ 进行小网格搜索。
步骤2:然后固定 α , β , γ 为常数,将基线网络的规模扩大,以获得 EfficientNet-B1 至 B7。
作者表示,有可能通过在一个大的模型周围直接搜索 α , β , γ 来实现更好的性能,但是在更大的模型上搜索成本会变得非常昂贵。作者通过上述方法解决了这个问题,只在小型基线网络上做一次搜索(步骤1),然后对所有其他模型使用相同的缩放系数(步骤2)。


当前 SOTA!平台收录 EfficientNet 共 14 个模型实现资源,支持的主流框架包含 CANN、PyTorch、TensorFlow、MindSpore 等。


模型 SOTA!平台模型详情页
EfficientNet 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/4fcc29d1-e919-4b62-accc-6d9ba00c1591


NFNet


NFNet 发表在 2021 年的 CVPR 中。这篇论文的核心在于提出了一种不需要 Batch Normalization 的基于 ResNet 的网络结构。移除了 BN 层以后,准确率不降反升,而且训练时间也缩短了

为了在没有引入 normalization 的情况下训练网络,使其达到有竞争力的精度,找到更好的替代方案,作者首先探讨了在训练过程中 BN 带来的影响。在深度学习模型中,跳接(skip connection)和批量归一化(batch normalization,BN)的结合使我们能够训练具有数千层的更深的网络。BN 处理依赖于批处理大小,且与各个处理样本相关,具体包括:BN 消耗计算资源高、内存开销大,造成网络中计算梯度时间较长。此外,BN 在训练阶段造成模型行为之间的差异,需要调整超参。最重要的是,BN 打破了mini-batch 之间样本的独立性。而 BN 带来的好处包括:减小了残差分支、消除了均值偏移、具有归一化的效果,以及可以让大批量大规模的数据实现高效训练。

目前为了移除 BN 层所作的主要工作是:引入小常量或可学习的标量,抑制初始化时残差分支上激活的规模。本文的主要工作是采用自适应梯度裁剪,基于梯度范数与参数范数的单位比来裁剪梯度,可以适应更大的 batch size 和数据增强的数据。本文构建了NF-ResNets,这是一类预激活的 ResNets,可以在没有归一化层的情况下训练出有竞争力的训练和测试精度。NF-ResNets 采用如下形式的残差块:



其中,h_i 表征第 i 个残差块的输入,f_i 表示由第 i 个残差分支计算得到的函数。函数f_i 在初始化时被参数化为 variance preserving 的,Var(f_i(z)) = Var(z)。超参 α 指定了每个残差块(初始化时)后激活的方差增加的速度,通常被设置为一个较小的值,如α=0.2。β_i 是通过预测第 i 个残差块的输入的标准差来确定的,β_i=sqrt(Var(h_i)),其中 Var(h_i+1)=Var(h_i)+α^2,过渡块除外(发生空间下采样)。对于过渡块,skip path 在降尺度的输入上操作(h_i/β_i),预期方差在过渡块后被重置为h_i+1=1+α^2。Squeeze-excite 层的输出乘以 2 的系数。为了防止隐藏激活函数中出现的“均值转移”现象,引入比例权重标准化(SWS):



为了将 NF-resnet 扩展到更大的批量,使大学习率训练时梯度下降成为可能,加速收敛,作者引入 Adaptive Gradient Clipping(AGC)自适应梯度裁剪。AGC 核心是约束梯度的范数。梯度剪裁通常是通过限制梯度的归一化处理来进行的。具体来说,对于梯度向量 G=∂L=∂θ,其中 L 表示损失,θ 表示包含所有模型参数的向量,标准剪裁算法在更新 θ 之前对梯度进行剪裁,即:



作者分析,虽然这种剪裁算法使我们能够以比以前更高的批量大小进行训练,但训练的稳定性对剪裁阈值的选择极为敏感,在改变模型深度、批量大小或学习速率时需要进行精细的调整。为了解决这一问题,作者引入 AGC 策略:



其中,W^l 是 的第 L 层的权重矩阵, G^l 代表 W^l 的梯度。AGC 关键在于:通过观察梯度 G 的范数与层权重 W 的范数之比,以判断单个梯度下降在多大程度上改变原始权重 W 。根据梯度归一与参数归一的单位长度比值来剪辑梯度,作者发现这比采取层间归一比值的经验表现更好。具体来说,在 AGC 算法中,第 l 层 (G_i)^l(定义为矩阵G^l 的第 i 行)的梯度的每个单元 i 被剪切为:



如果梯度和原始权重之比大于限符阈值,我们就将梯度替换为:限符阈值 * 范数的反比 * 原始梯度,否则不改变原始梯度。对于大批量训练,λ应该变小。



最后,作者设计了具有最先进精度和训练速度的无归一化架构(Normalizer-Free architectures)。作者的设计思路是专注于手动设计模型,这些模型针对现有加速器的训练延迟进行了优化。通过手动搜索设计趋势来探索模型设计的空间,这些设计实现了ImageNet 上的 holdout top-1 与设备上的实际训练延迟的 pareto front 的改进。图7展示了这些修改。


图7 NFNet bottleneck block设计和架构差异的总结


NFNet 模型是一个改良的 SE-ResNeXt-D。该模型的输入是一个 H×W 的 RGB 图像,它已经被整个 ImageNet 训练集的每个通道的平均值/标准差归一化,这是大多数图像分类器的标准输入。该模型有一个初始的 "stem",包括:一个 16 通道的 3×3 stride 2 convolution,两个分别为 32 通道和 64 通道的 3×3 stride 1 convolution,以及一个128 通道的 3×3 stride 2 convolution。在 stem 的每个卷积之间放置一个 non-linearity。


stem 之后是四个残差 "stages",对于本文的基线 F0 变体,每个 stage 的块数是[1,2,6,3],随后的每个变体的块数都是这个数字乘以 N(其中 F0 的 N=1)。残差 stages从 "过渡(transition) "块开始,然后是标准残差块(如图 22)。


所有块都采用预激活的 ResNe(X)t bottleneck 模式,在 bottleneck 内增加了一个 3×3 的分组卷积。这意味着 main path 包括:一个 1×1 卷积,其输出通道等于 0.5× 该块的输出通道数;两个 3×3 分组卷积,组宽为 128(第一组在过渡块中分流);一个 1×1 卷积,其输出通道数等于块的输出通道数。


在最后一个 1×1 卷积之后是 Squeeze&Excite 层,它全局平均汇集激活,对汇集的激活应用两个具有交错缩放非线性的线性层,应用一个 sigmoid,然后以这个 sigmoid 值的两倍重新缩放张量通道。具体的,这一层的输出为:



在所有的残差阶段之后,应用一个 1×1 的扩展卷积,将通道数增加一倍,类似于EfficientNets 中的最终扩展卷积,然后进行全局平均汇集。这一层主要是在使用非常薄的网络时有帮助,因为通常希望最终激活向量(分类器层收到的)的维度大于或等于类的数量,但作者在更广泛的网络中也保留了它,目的是未来可能寻求在我们的骨干网基础上训练非常薄的网络。

最后一层是一个全连接的分类器层,具有 learnable biases,输出 1000 个类别向量(可以进行 soft 放大处理,以获得归一化的
类别概率)。作者用 0.01 的标准差来初始化这一层的权重。作者发现,如果用零来初始化权重,在用非常多的输出类进行训练时,有时会导致不稳定。

在本文的残差块中没有使用激活归一化层。相反,作者采用了 Normalizer-Free variance downscaling 策略。这意味着残差块的主路径的输入乘以 1/β,其中 β 是初始化时该块方差的分析预测值,块输出乘以一个超参 α。此外,作者还引入 SkipInit,这是一个可学习的零初始化标量增益,除了 α 之外,它将残差块初始化为 identity(除了在过渡层),作者发现这可以提高非常深的网络的稳定性。所有的卷积运算都采用 Scaled Weight Standardization,对标准化的权重采用可学习的 affine gain,对卷积运算的输出采用可学习的 affine bias。




图8 NFNet网络结构图,应用 AGC 到除了最后的线性层上的每一层,得到最终的NFNet 配置



当前 SOTA!平台收录 NFNet 共 15 个模型实现资源,支持的主流框架包含 TensorFlow、PyTorch、MindSpore、JAX 等。


模型 SOTA!平台模型详情页
NFNet 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/2f7b43e7-1db3-48b9-8f39-0bd5244c367b

前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。 


网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。

移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。

相关文章
|
9月前
|
机器学习/深度学习 数据挖掘 PyTorch
图像分类经典神经网络大总结(AlexNet、VGG 、GoogLeNet 、ResNet、 DenseNet、SENet、ResNeXt )
图像分类经典神经网络大总结(AlexNet、VGG 、GoogLeNet 、ResNet、 DenseNet、SENet、ResNeXt )
1342 0
图像分类经典神经网络大总结(AlexNet、VGG 、GoogLeNet 、ResNet、 DenseNet、SENet、ResNeXt )
|
11月前
|
机器学习/深度学习 人工智能 并行计算
深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型结构、实现、模型特点详细介绍
深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型结构、实现、模型特点详细介绍
深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型结构、实现、模型特点详细介绍
|
11月前
|
PyTorch 算法框架/工具 异构计算
Pytorch实现经典模型AlexNet模型
Pytorch实现经典模型AlexNet模型
70 0
|
12月前
|
机器学习/深度学习 人工智能 搜索推荐
DeepLab、DeepLabv3、RefineNet、PSPNet…你都掌握了吗?一文总结图像分割必备经典模型(二)(2)
DeepLab、DeepLabv3、RefineNet、PSPNet…你都掌握了吗?一文总结图像分割必备经典模型(二)
269 0
|
12月前
|
机器学习/深度学习 编解码 算法
DeepLab、DeepLabv3、RefineNet、PSPNet…你都掌握了吗?一文总结图像分割必备经典模型(二)(1)
DeepLab、DeepLabv3、RefineNet、PSPNet…你都掌握了吗?一文总结图像分割必备经典模型(二)
118 0
|
12月前
|
机器学习/深度学习 安全 数据处理
CVPR2023最新Backbone |FasterNet远超ShuffleNet、MobileNet、MobileViT等模型(一)
CVPR2023最新Backbone |FasterNet远超ShuffleNet、MobileNet、MobileViT等模型(一)
299 0
|
12月前
|
计算机视觉
CVPR2023最新Backbone |FasterNet远超ShuffleNet、MobileNet、MobileViT等模型(二)
CVPR2023最新Backbone |FasterNet远超ShuffleNet、MobileNet、MobileViT等模型(二)
178 0
|
12月前
|
机器学习/深度学习 编解码 算法
EfficientNet、ShuffleNet、NFNet…你都掌握了吗?一文总结图像分类必备经典模型(四)
EfficientNet、ShuffleNet、NFNet…你都掌握了吗?一文总结图像分类必备经典模型(三)
196 0
|
12月前
|
机器学习/深度学习 编解码 自然语言处理
EfficientNet、ShuffleNet、NFNet…你都掌握了吗?一文总结图像分类必备经典模型(三)
EfficientNet、ShuffleNet、NFNet…你都掌握了吗?一文总结图像分类必备经典模型(三)
153 0
EfficientNet、ShuffleNet、NFNet…你都掌握了吗?一文总结图像分类必备经典模型(三)
|
12月前
|
机器学习/深度学习 编解码 PyTorch
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型(二)
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型(二)
130 0

热门文章

最新文章