美文网首页
手机端的高效主干:MobileOne

手机端的高效主干:MobileOne

作者: Valar_Morghulis | 来源:发表于2022-08-01 10:31 被阅读0次

    An Improved One millisecond Mobile Backbone

    8 Jun 2022

    作者:Pavan Kumar Anasosalu Vasu, James Gabriel, Jeff Zhu, Oncel Tuzel, Anurag Ranjan    

    单位:Apple

    原文:https://arxiv.org/abs/2206.04040

    开源:https://github.com/apple/ml-mobileone

    摘要:移动设备的高效神经网络主干通常针对浮点或参数计数等指标进行优化。然而,当部署在移动设备上时,这些指标可能与网络的延迟没有很好的相关性。因此,我们通过在移动设备上部署几个移动友好网络来对不同的指标进行广泛的分析。我们识别和分析了最近高效神经网络中的架构和优化瓶颈,并提供了缓解这些瓶颈的方法。为此,我们设计了一种高效的主干MobileOne,其变体在iPhone12上的推理时间低于1ms,在ImageNet上的准确率为75.9%。我们表明,MobileOne在高效架构中实现了最先进的性能,同时在移动设备上的速度快了许多倍。我们的最佳模型在ImageNet上获得了与MobileFormer相似的性能,同时速度快了38倍。在相似的延迟下,我们的模型在ImageNet上的top-1准确性比EfficientNet高2.3%。此外,我们还表明,与部署在移动设备上的现有高效架构相比,我们的模型可以推广到多个任务-图像分类、对象检测和语义分割,在延迟和准确性方面有显著改进。

    1    引言

    为移动设备设计和部署高效的深度学习架构取得了很大进展[1、2、3、4、5、6],不断减少浮点运算(FLOP)和参数计数,同时提高准确性。然而,就延迟而言,这些指标可能与模型的效率[7]没有很好的相关性。类似于浮点运算的效率指标不考虑内存访问成本和并行度,这可能对推理过程中的延迟产生重要影响[4]。参数计数也与延迟没有很好的相关性。例如,共享参数会导致更高的浮点运算,但模型尺寸较小。此外,跳连[8]或分支[9,10]等无参数操作可能会产生显著的内存访问成本。当在高效体系结构中提供定制加速器时,这种脱节可能会加剧。

    我们的目标是通过识别影响设备延迟的关键瓶颈来提高高效架构的延迟成本,同时提高其准确性。为了识别这些瓶颈,我们使用CoreML[11]在iPhone12上部署了神经网络,并对其延迟成本进行了基准测试。优化是另一个瓶颈,尤其是在训练容量有限的较小神经网络时。这可以通过解耦训练时间和推理时间架构来缓解,即在训练时间使用线性过参数化模型,并在推理时重新参数化线性结构[12、13、14]。我们通过在整个训练过程中动态松弛正则化来进一步缓解优化瓶颈,以防止已经很小的模型被过度正则化。

    基于我们对架构和优化瓶颈的研究结果,我们设计了一种新型架构MobileOne,其变体在iPhone12上运行不到1毫秒,在高效架构系列中实现了最先进的准确性,同时在设备上运行速度显著加快。与之前关于结构重新参数化的工作[12、13、14]一样,MobileOne在训练时引入了线性分支,这些分支在推理时重新参数化。我们的模型与以前的结构再参数化工作之间的关键区别在于引入了简单的过参数化分支,这进一步改进了低参数区域和模型缩放策略。在推理时,我们的模型具有简单的前馈结构。由于这种结构产生较低的内存访问成本,我们可以在我们的网络中加入更广泛的层,从而提高表示能力,如表8所示。例如,MobileOne-S1有4.8M的参数,产生0.89ms的延迟,而MobileNet-V2[2]有3.4M(比MobileOne-S1少29.2%)的参数,并产生0.98ms的延迟。在此工作点,MobileOne的top-1精度比MobileNet-V2高3.9%。

    与文献中的高效模型相比,MobileOne在延迟方面取得了显著改进,同时在多个任务(图像分类、对象检测和语义分割)上保持了准确性。如图6所示,MobileOne的性能优于MobileViT-S[6],同时在图像分类方面速度快5倍。与EfficientNet-B0[15]相比,我们在ImageNet[16]上实现了2.3%的top-1精度,延迟成本相似(见图5)。此外,如图7所示,MobileOne模型不仅在ImageNet上表现良好,还可推广到其他任务,如目标检测。与ImageNet上的MobileNet V2相比,MobileNetV3-L[3]和MixNet-S[17]等模型有所改进,但这些改进并不能转化为目标检测任务。如图7所示,MobileOne在任务间表现出更好的泛化。对于MS-COCO[18]上的目标检测,MobileOne的最佳变体优于最佳变体MobileViT 6.1%和MNASNet 27.8%。对于语义分割,在PascalVOC[19]数据集上,MobileOne的最佳变体优于最佳变体MobileViT 1.3%,在ADE20K[20]数据集,Mobile的最佳变体胜过MobileNetV2 12.0%。总之,我们的贡献如下:

    •    我们介绍了MobileOne,这是一种在移动设备上运行时间不超过1毫秒的新型架构,在高效的模型架构中实现了最先进的图像分类精度。我们模型的性能也推广到桌面CPU。

    •    我们分析了激活和分支中的性能瓶颈,这些瓶颈在最近高效的网络中会导致移动设备的高延迟成本。

    •    我们分析了训练时间可重新参数化分支和训练中正则化的动态松弛的影响。总之,它们有助于缓解训练小模型时遇到的优化瓶颈。

    •我们表明,我们的模型可以很好地推广到其他任务——对象检测和语义分割,同时优于以前最先进的高效模型。我们将发布经过训练的网络和代码,用于研究目的。我们还将发布iOS应用程序的代码,以实现iPhone上网络的基准测试。

    2    相关工作

    设计实时高效的神经网络需要在准确性和性能之间进行权衡。早期的方法,如SqueezeNet[21]和最近的MobileViT[6],优化参数计数,以及绝大多数方法,如MobileNet[1,2]、MobileNeXt[22]、ShuffleNet-V1[23]、GhostNet[24]、MixNet[17]专注于优化浮点运算(浮点运算)的数量。EfficientNet[15]和TinyNet[25]研究了深度、宽度和分辨率的复合缩放,同时优化了FLOPs。MNASNet[26]、MobileNetV3[3]和ShuffleNet-V2[4]等少数方法直接优化延迟。Dehghani等人[7]表明,浮点运算和参数计数与延迟没有很好的相关性。因此,我们的工作重点是在提高准确性的同时改善设备延迟。

    最近,ViT[27]和类似ViT的架构[28]在ImageNet数据集上显示了最先进的性能。已经探索了不同的设计,以使用ViT-C[29]、CvT[30]、BoTNet[31]、ConViT[32]和PiT[33]中的卷积来合并偏置。最近,MobileFormer[5]和MobileViT[6]被引入,以在移动平台上获得类似ViT的性能。MobileViT优化参数计数,MobileFormer优化浮点运算,在低浮点运算模式下优于高效的CNN。然而,正如我们在随后的章节中所展示的那样,低浮点并不一定会导致低延迟。我们研究了这些方法做出的关键设计选择及其对延迟的影响。

    最近的方法还引入了新的架构设计和自定义层,以提高移动主干的准确性。MobileNet-V3[3]引入了一个优化的激活功能——针对特定平台的硬Swish。然而,将这些功能扩展到不同的平台可能很困难。

    因此,我们的设计使用了已经在不同平台上可用的基本运算符。ExpandNets[34]、ACNet[12]和DBBNet[14]提出了一种在最近的CNN架构中替换规则卷积层的方法,并显示了准确性的改进。RepVGG[13]引入了可重新参数化的跳连,这有助于训练类似VGG的模型以获得更好的性能。这些架构在训练时具有线性分支,在推理时重新参数化为更简单的块。我们在这些重新参数化工作的基础上,引入了简单的参数化分支,从而进一步提高了精度

    3    方法

    在本节中,我们分析了移动设备上常见指标(浮点和参数计数)与延迟的相关性。我们还评估了架构中的不同设计选择对手机延迟的影响。基于评估,我们描述了我们的架构和训练算法。

    3.1    度量相关性

    比较两个或多个模型大小最常用的成本指标是参数计数和浮点运算[7]。然而,它们可能与真实移动应用程序中的延迟没有很好的相关性。因此,我们研究了延迟与FLOPs和参数计数的相关性,以对高效神经网络进行基准测试。我们考虑了最近的模型,并使用其Pytorch实现将其转换为ONNX格式[35]。我们使用核心ML工具[11]将这些模型转换为coreml包。然后,我们开发了一个iOS应用程序来测量iPhone12上模型的延迟。

    我们绘制了延迟与FLOPs以及延迟与参数计数的关系图,如图2所示。我们观察到,许多参数计数较高的模型可以具有较低的延迟。我们观察到FLOPs和延迟之间的类似曲线。此外,我们注意到卷积模型,如MobileNet[2,4,36],对于类似的FLOPs和参数计数,其延迟低于对应的transformer[28,5,6]。我们还估计了表1a中的Spearman秩相关性[37]。我们发现,对于移动设备上的高效架构,延迟与浮点运算中度相关,与参数计数弱相关。这种相关性在桌面CPU上甚至更低。

    3.2    关键瓶颈

    激活功能

    为了分析激活函数对延迟的影响,我们构建了一个30层卷积神经网络,并使用不同的激活函数(常用于高效的CNN主干)在iPhone12上对其进行了测试。除激活外,表3中的所有模型都具有相同的架构,但它们的延迟截然不同。这可以归因于最近引入的激活函数(如SE ReLU[38]、Dynamic Shift Max[40]和DynamicReLUs[41])产生的同步成本。DynamicReLU和Dynamic Shift Max在极低的浮点运算模型(如MicroNet[40])中表现出了显著的改进,使用这些激活的延迟成本可能是显著的。未来,这些激活可以通过硬件加速来实现,但好处将限于实现它们的平台。因此,我们在MobileOne中仅使用ReLU激活。

    架构块

    影响运行时性能的两个关键因素是内存访问成本和并行度[4]。在多分支体系结构中,内存访问成本显著增加,因为必须存储每个分支的激活以计算图中的下一个张量。如果网络具有较少的分支,则可以避免此类内存瓶颈。由于同步成本,强制同步的体系结构块(如挤激块[38]中使用的全局池操作)也会影响整体运行时间。为了证明内存访问成本和同步成本等隐藏成本,我们在30层卷积神经网络中使用跳连和压缩激励块来消除。在表1b中,我们展示了每种选择如何影响延迟。因此,我们采用了一种在推理时没有分支的架构,这导致了较小的内存访问成本。此外,为了提高精度,我们将挤压激励块的使用限制在我们最大的变体中。

    3.3    MobileOne架构

    基于我们对不同设计选择的评估,我们开发了MobileOne的架构。与之前关于结构再参数化的工作[34、12、13、14]一样,MobileOne的训练时间和推理时间架构不同。在本节中,我们介绍了MobileOne的基本模块和用于构建网络的模型扩展策略。

    MobileOne块

    MobileOne块与[34、12、13、14]中介绍的块相似,不同之处在于我们的块是为卷积层设计的,卷积层分解为深度层和点层。此外,我们引入了平凡的过参数化分支,这提供了进一步的收益。我们的基本块建立在MobileNet-V1[1]块上,该块由3x3深度卷积和1x1点卷积组成。然后,我们引入具有batchnorm的可重新参数化跳连[13]以及复制结构的分支,如图3所示。平凡的过参数化因子k是一个从1到5不等的超参数。我们对表4中k的选择进行了分解。在推断时,MobileOne模型没有任何分支。使用[13,14]中描述的重新参数化过程删除它们。

    对于核大小为K、输入通道维数为Cin、输出通道维数为Cout的卷积层,权重矩阵表示为W0∈ RCout×Cin×K×K,偏置表示为b0∈ RD.batchnorm层包含累积平均µ、累积标准偏置σ、标度γ和偏置β。由于卷积和batchnorm在推理时是线性运算,因此可以将它们折叠到一个卷积层中,权重为c W=W0∗ σγ和偏置b b=(b0− µ) ∗ σγ + β. Batchnorm被折叠到所有分支的前卷积层中。对于跳跃连接,batchnorm被折叠到具有标识1x1内核的卷积层,然后用K填充− 1零,如[13]所述。在获得每个分支中的batchnorm折叠权重后,获得推理时卷积层的权重W=P Mi c Wi和偏置b=P Mi b bi,其中M是分支数。

    为了更好地理解使用训练时间可重参数化分支的改进,我们通过删除训练时间可重新参数化分支(见表7),同时保持所有其他训练参数与第4节中所述相同,对多个版本的MobileOne模型进行了烧蚀。使用可重新参数化支子显著提高了性能(完整表见补充材料)。为了理解平凡过参数化分支的重要性,我们在表6中选择了过参数化因子k。对于MobileOne的较大变体,平凡过参数的改进开始减少。对于较小的变体,如MobileOne-S0,我们看到通过使用简单的参数化分支,改进了0.5%。在图4中,我们看到添加可重新参数化的分支可以改进优化,因为训练和验证损失都进一步降低。

    模型缩放

    最近的作品缩放了模型尺寸,如宽度、深度和分辨率,以提高性能[15,45]。MobileOne具有与MobileNet-V2类似的深度缩放,即使用较浅的早期阶段,其中输入分辨率较大,因为与以较小输入分辨率运行的后期阶段相比,这些层的速度明显较慢。我们介绍了5种不同的宽度比例,如表2所示。此外,我们不探讨随着FLOPs和内存消耗的增加而提高输入分辨率的问题,这对移动设备上的运行时性能是有害的。由于我们的模型在推理时没有多分支架构,因此不会产生前面章节中讨论的数据移动成本。这使我们能够与竞争的多分支架构(如MobileNet-V2、EfficientNets等)相比,积极地扩展模型参数,而不会产生显著的延迟成本。增加的参数计数使我们的模型能够很好地推广到其他计算机视觉任务,如目标检测和语义分割(见第4节)。在表4中,我们与参数化工作[13、14、12、34]上最近的训练时间进行了比较,并表明MobileOne-S1变体优于RepVGG-B0,后者是∼3×更大。

    3.4    训练

    与大型模型相比,小型模型需要更少的正则化来对抗过度拟合。正如[46]经验性证明的那样,在训练的早期阶段权重衰减很重要。与[46]中研究的完全消除权重衰减正则化不同,我们发现在训练过程中退火权重衰减正则性引起的损失更有效。在我们的所有实验中,我们使用余弦时间表[47]来计算学习率。因此,我们只需使用相同的时间表来退火权重衰减系数。详见第4节。我们还使用了[36]中介绍的渐进式学习课程。有关在整个训练过程中使用的图像分辨率和自动增强强度的更多详细信息,请参见第4节。在表5中,我们在各种训练设置上烧蚀,保持所有其他参数不变。我们看到,退火权重衰减系数提高了0.5%。

    3.5    基准测试

    在移动设备上获得准确的延迟测量可能很困难。在iPhone 12上,没有命令行访问或功能来保留所有计算结构,仅用于模型执行。我们也无法将往返延迟细分为网络初始化、数据移动和网络执行等类别。为了测量延迟,我们使用swift[48]开发了一个iOS应用程序来对这些模型进行基准测试。应用程序使用核心ML[11]运行模型。为了消除启动不一致,加载模型图,预先分配输入张量,并在基准测试开始之前运行一次模型。在基准测试期间,应用程序多次运行模型(默认值为1000),并累积统计数据。为了实现最低延迟和最高一致性,手机上的所有其他应用程序都已关闭。对于表8中的模型延迟,我们报告了完整的往返延迟。这一时间的很大一部分可能来自非模型执行的平台进程,但在实际应用中,这些延迟可能是不可避免的。因此,我们选择将其包括在报告的延迟中。为了过滤掉来自其他进程的中断,我们报告了所有模型的最小延迟。对于CPU延迟,我们在带有2.3 GHz–Intel Xeon Gold 5118处理器的Ubuntu桌面上运行这些模型。

    4    实验

    ImageNet-1K图像分类

    我们在ImageNet[16]数据集上评估了MobileOne模型,该数据集由128万个训练图像和1000个类的50000个图像组成的验证集组成。所有模型都是在配备8个NVIDIA GPU的机器上使用PyTorch[49]库从头开始训练的。使用带动量[50]优化器的SGD对所有模型进行300个阶段的训练,有效批量为256。我们使用标签平滑正则化[51],对所有模型使用交叉熵损失,平滑因子设置为0.1。初始学习速率为0.1,并使用余弦时间表进行退火[47]。初始权重衰减系数设置为10−4并退火至10−5使用与[47]中所述相同的余弦时间表。我们使用自动增强[52]只训练MobileOne的较大变体,即S2、S3和S4。如[36]所述,在训练过程中,自动增强的强度和图像分辨率逐渐增加。我们在补充材料中列出了细节。对于较小的MobileOne变体,即S0和S1,我们使用标准增强–随机调整大小的裁剪和水平翻转。我们还使用衰减常数为0.9995的EMA(指数移动平均)权重平均来训练所有版本的MobileOne。在测试时,所有MobileOne模型均在分辨率为224×224的图像上进行评估。在表8中,我们将其与所有最近的有效模型进行比较,这些模型在分辨率为244×224图像上进行了评估,同时参数计数<2000万,并且在没有蒸馏的情况下进行训练,如之前的工作[6,5]中所做的那样。使用fvcore[53]库报告浮点计数。

    我们发现,即使是最小的transformer架构变体,在移动设备上的延迟也在4ms以上。当前最先进的MobileFormer[5]以70.76ms的延迟达到了79.3%的顶级精度,而MobileOne-S4以仅1.86ms的延迟实现了79.4%,这是∼在移动设备上更快38倍。与EfficientNet-B0相比,MobileOne-S3的top-1精度提高了1%,在移动设备上的速度提高了11%。与竞争方法相比,我们的模型即使在CPU上也具有较低的延迟。与EfficientNet-B0相比,MobileOne-S4的top-1精度提高了2.3%,而CPU速度提高了7.3%。

    MS-COCO目标检测

    为了证明MobileOne的多功能性,我们将其用作单点目标探测器SSD的主干特征提取器[54]。在[2]之后,我们将SSD头中的标准卷积替换为可分离卷积,产生了一种称为SSDLite的SSD版本。该模型使用MS COCO数据集[18]上的mmdetection库[55]进行训练。将输入分辨率设置为320×320,并对模型进行200个epoch的训练,如[6]所述。有关更详细的超参数,请参阅补充材料。我们报告mAP@IoU在表9中MS COCO的验证集上为0.50:0.05:0.95。我们的最佳模型优于MNASNet 27.8%,最佳版本的MobileViT[6]优于6.1%。我们在补充材料中给出了定性结果。

    Pascal VOC和ADE 20k上的语义分割

    我们使用MobileOne作为使用cvnets库的Deeplab V3分割网络[56]的主干。按照[6]的训练程序,VOC模型在增强的Pascal VOC数据集[19]上训练了50个时代。ADE 20k[20]模型使用相同的超参数和增广进行训练。有关更详细的超参数,请参阅补充材料。我们在表9中报告了平均交并比(mIOU)结果。对于VOC,我们的模型优于移动ViT 1.3%和MobileNetV2 5.8%。使用延迟低于MobileNet V2-1.0主干的MobileOne-S1主干,我们的性能仍比它高2.1%。对于ADE 20k,我们的最佳变体比MobileNet V2高12.0%。使用较小的MobileOne-S1主干网,我们的性能仍优于它2.9%。我们在补充材料中给出了定性结果。

    5    讨论

    我们提出了一种用于移动设备的高效通用主干网。我们的主干适用于一般任务,如图像分类、目标检测和语义分割。我们表明,在有效的机制中,延迟可能与其他指标(如参数计数和浮点)没有很好的相关性。此外,我们通过直接在移动设备上测量其延迟来分析现代高效CNN中使用的各种架构组件的效率瓶颈。我们的经验表明,使用可重新参数化的结构可以改善优化瓶颈。我们使用可重新参数化结构的模型缩放策略在移动设备和桌面CPU上都很有效,同时达到了最先进的性能。

    局限性和未来工作

    虽然我们的模型在高效体系结构的范围内是最先进的,但其准确性落后于大型模型[57,58]。未来的工作将致力于提高这些轻量级模型的准确性。我们还将探讨如何使用我们的主干来更快地推断本工作中未探讨的其他计算机视觉应用,如光流、深度估计、三维重建等。

    A    数字

    图5、6、7放大了主要论文中的图1

    B    基准测试

    我们以一种特殊的方式处理MobileNetV3[3],因为其H-swish算子针对某些硬件平台而不是其他平台进行了优化。Howard等人[3]表明,当应用特定于平台的优化时,H-swish可以获得与ReLU类似的性能。因此,在对延迟进行基准测试时,我们将H-swish层替换为ReLU层,然后报告MobileNetV3的延迟。

    C    图像分类

    C.1    训练详情

    所有模型都是在配备8个NVIDIA A100 GPU的机器上使用PyTorch[49]库从头开始训练的。使用带动量[50]优化器的SGD对所有模型进行300个阶段的训练,有效批量为256。我们遵循渐进式训练课程[36],以更快地训练和更好的泛化。在整个训练过程中,图像分辨率和增强强度(α)逐渐增加,见表10。自动增强[52]策略中的增强幅度在0-9之间,我们只需将α与该值相乘,以模拟自动增强的可变强度。AutoAugment[52]仅用于训练MobileOne的较大变体,即S2、S3和S4。对于MobileOne的较小变体,即S0和S1,我们使用标准增强–随机调整大小的裁剪和水平翻转。我们使用标签平滑正则化[51],对所有模型使用交叉熵损失,平滑因子设置为0.1。初始学习速率为0.1,并使用余弦时间表进行退火[47]。初始权重衰减系数设置为10−4并退火至10−5使用相同的余弦时间表。我们还使用衰减常数为0.9995的EMA(指数移动平均)权重平均来训练所有版本的MobileOne。

    C. 2    对随机种子的敏感性

    我们的模型和训练运行是稳定的,在不同的随机种子中表现相似,见表11

    D    物体检测

    D.1    训练详情

    在[6]之后,使用带预热的余弦学习率时间表对SSDLite模型进行了200个阶段的训练。使用4500次迭代的线性预热计划,预热比为0.001。根据[6],320×320的图像大小用于训练和评估。我们使用带有动量优化器[50]的SGD,所有模型的初始学习率为0.05,动量为0.9,权重衰减为0.0001。我们使用了192的有效批量大小,如下[55]。模型在配备8个NVIDIA A100 GPU的机器上进行训练。

    D.2    定性结果

    图8中的可视化是使用image_demo生成的。py[55],在MMDetection库[55]中具有默认阈值。我们比较了MobileNetV2 SSDLite和具有相似延迟的MobileOne-S2-SSDLite。我们的模型在检测大小物体方面优于MobileNetV2 SSDLite。在第一行中,我们的模型在场景中的所有杂波中检测盆栽植物。在第二行中,我们的模型同时检测狗和飞盘,而不是MobileNet V2。在第三行中,虽然网球拍和球很模糊,但我们的模型检测到了它们。在剩下的行中,与MobileNetV2相比,我们的模型一致地检测大小前景对象。

    E    语义分割

    E.1    训练详情

    我们使用MobileViT存储库[6]来训练我们的语义分割模型,并采用其超参数设置。VOC和ADE20k分割模型都使用余弦学习率训练了50个时代,最大学习率为10−4,最低学习率为10−6.500次预热迭代。分割头的学习率乘数为10。EMA的动量为5×10−4.我们使用了加权衰减为0.01的Adamw优化器[59]。对于VOC,模型在Mehta等人[6]的基础上同时基于MS-COCO和VOC数据进行训练。对于VOC和ADE20k,唯一的增强是随机调整大小、随机裁剪和水平翻转。

    E.2    定性结果

    我们在图9中提供了语义分割的定性结果。如图所示,我们的方法优于MobileViT-S-DeepLabV3。在第1行中,我们展示了MobileViT-S将背景误分类为飞机。在第2行和第6行中,我们的方法能够解析精细细节,例如马的腿和小鸟。在第3行中,MobileViT-S错误地将沙发分类。在第4行中,我们的方法能够在特写视图中分割大型前景对象。在第5行中,我们的方法分割总线等小对象。

    F    更广泛的影响

    我们提出了一种高效的通用主干,用于图像分类、目标检测和语义分割等计算机视觉任务。据估计,80-90%的ML工作量将与推理相关[60,61,7]。因此,降低推理成本可以对现实世界产生积极影响。我们证明了我们的模型在移动设备和桌面CPU上都是有效的,这是两种完全不同的计算结构。因此,使用我们的模型可以降低推理的能耗。

    相关文章

      网友评论

          本文标题:手机端的高效主干:MobileOne

          本文链接:https://www.haomeiwen.com/subject/wggdwrtx.html