资讯详情

Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference

量化和训练神经网络

  • Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference(神经网络量化与训练高效整数算术推理)-2017
  • Abstract
  • 1. Introduction
  • 2. Quantized Inference(量化推理)
    • 2.1. Quantization scheme(量化方案)
    • 2.2. Integer-arithmetic-only matrix multiplication---整数矩阵乘法
    • 2.3. Efficient handling of zero-points---能有效处理零点
    • 2.4. Implementation of a typical fused layer--实现典型的融合层
  • 3. Training with simulated quantization---训练采用模拟量化的方式进行
  • 3.1. Learning quantization ranges---学习量化的范围
  • 3.2. Batch normalization folding---标准化折叠
  • 4. Experiments
    • 4.1. Quantized training of Large Networks---大型网络量化训练
    • 4.1.1 ResNets
    • 4.1.2 Inception v3 on ImageNet
    • 4.2. Quantization of MobileNets---移动网量化
      • 4.2.1 ImageNet
      • 4.2.2 COCO
      • 4.2.3 Face detection---人脸检测
      • 4.2.4 Face attributes---人脸属性
        • Ablation study
  • 5. Discussion
  • A. Appendix: Layer-specific details----A.附录:特定于图层的详细信息
    • A.1.数学函数
    • A.2. Addition----添加
    • A.3. Concatenation---接合
  • B. Appendix: ARM NEON details--
    • 补充Neon小知识:
    • 正文
  • C. Appendix: Graph diagrams---图标
  • D. Experimental protocols--实验方案
    • D.1. ResNet protocol
      • Preprocessing---预处理
      • Optimization---优化
    • D.2. Inception protocol
  • D.3. COCO detection protocol--COCO检测协议
    • Preprocessing.
    • Optimization.
    • Metrics.---指标
  • D.4. Face detection and face attribute classification protocol---人脸检测与人脸属性分类协议
    • Preprocessing.
    • Face Detection Optimization.
    • Face Attribute Classification Optimization.---人脸属性分类优化。
    • Latency Measurements---延迟测量

Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference(神经网络量化与训练高效整数算术推理)-2017

在这里插入图片描述

Abstract

随着智能移动设备的日益普及和基于深度学习模型的可怕计算成本,人们需要高效准确的设备推理方案。我们提出了允许使用的量化方案可以推理**在常用的仅整数硬件上比浮点推理更有效地实现。**我们还共同设计了一个训练程序,

1. Introduction

目前最先进的卷积神经网络(CNNs)不适合移动设备。自动化。AlexNet[20]自现代出现以来,cnn主要是根据的。因此**,网络架构的发展不考虑模型的复杂性和计算效率。**另一方面,智能手机,AR/VR在移动平台上成功部署设备(全息透镜、白日梦)和无人机cnn为了保持用户参与,需要较小的型号尺寸来适应有限的设备内存和较低的延迟。这导致了一个新的研究领域,

该领域使用的方法大致可分为两类。第一类,如移动网络[10]、挤压网络[16]、洗牌网络[32]和数字网络[11],采用计算/内存高效操作,设计了新的网络架构。第二类是将CNN权重和/或激活量从32位浮点量化为较低位深度。这种方法是三元权值网络(TWN[22](BNN[14])、XNOR-net采用[8、21、26、33、34、35]等方法,。虽然它们很丰富,但目前的量化方法在两个方面缺乏权衡延迟。

首先,以前的方法还没有在合理的基线系统结构上进行评估。最常见的基线架构,AlexNet[20],VGG[28]和谷歌leNet[29]为了提高边际精度,设计过度参数化。因此,这些系统结构系统结构进行相当大的压缩,最大限度地减少这些系统结构的量化实验。相反,一个更有意义的挑战是量化已经熟练地权衡延迟和准确性的模型架构,例如Mobilenet。

其次,==在实际硬件中,许多量化方法无法提供可验证的效率提高。只量化权重([2、4、8、33])的方法主要涉及设备上的存储,计算效率较低。==二进制、三元、位移位网络[14、22、27]是值得注意的例外。后一种方法使用的权重为0或2,乘法允许通过位移实现。然而,虽然位移可以在自定义硬件中有效地实现,但它们对现有硬件提供的多个添加指令并不好。如果正确使用(即管道),这些指令并不比单独添加指令更贵。乘法只有在操作量大的时候才会贵,一旦权重和激活量化,避免乘法的需求会随着位深的增加而减少。值得注意的是,这些方法很少提供设备测量来验证承诺的时间改进。将权重和激活量化为一位表示[14、27、34],操作时更友好。通过这些方法,乘法和加法可以通过有效的位移位和位计数操作来实现,可以自定义GPU内核(BNN[14])展示。然而,一位量化通常会导致实质性能下降,并且可能对模型过于严格。

        在本文中,我们通过改进在与准确性的权衡来解决上述问题。我们的具体贡献是:

1、我们提供了一个量化方案(第2.1节),它将权值和激活量都量化为8位整数,并仅将一些参数(偏差向量)量化为32位整数。

2、我们提供了一个量化的推理框架,它可以在整数运算硬件上实现,如高通六角形(第2.2,2.3节),并描述了ARMNEON上的高效、准确的实现(附录B)。

3、我们提供了一个量化的训练框架(第3节)与我们的量化推理共同设计,以最小化在真实模型上的量化所造成的精度损失。

4、我们应用我们的框架有效的分类和检测系统基于移动网络和提供基准结果流行的手臂cpu(第四节)显示显著改进延迟精度权衡先进的移动网络架构,在MmageNet分类[3],可对象检测[23],和其他任务。低精度的定点算法来加速cnn的训练速度,以及[31],它使用8位定点算法来加速对x86cpu的推理速度。         我们的工作从[7]中获得了灵感,它利用低精度的定点算法来加速cnn的训练速度,以及[31],它使用8位定点算法来加速对x86cpu的推理速度。我们的量化方案侧重于提高移动cpu上的推理速度和准确性的权衡。

2. Quantized Inference(量化推理)

2.1. Quantization scheme(量化方案)

        在本节中,我们将描述我们的一般量化方案12,即值的位表示(下面表示q,“量化值”)和它们的数学实数(下面r表示,“实值”)之间的对应关系。我们的量化方案在推理过程中使用整数算法和在训练过程中使用浮点算法,两种实现之间保持高度的对应关系。我们通过首先提供我们的量化方案的数学严格定义来实现这一点,并分别采用该方案进行算术整数推理和浮点训练

        我们的量化方案的一个基本要求是,它允许只对量化值使用整数运算来有效地实现所有算法(我们避免了需要查找表的实现,因为与SIMD硬件上的纯运算相比,查找表的性能往往较差)。这相当于要求量化格式是整数q到实数r的仿射映射,即该形式

对于一些常数S和Z,方程(1)是我们的量化格式,常数S和Z是我们的量化参数。我们的量化方案对每个激活数组内和每个权重数组内的所有值使用一组量化参数;单独的数组使用单独的量化参数。

        对于8位量化,q被量化为一个8位整数(对于b位量化,q被量化为一个b位整数)。一些数组,通常是偏置向量,被量化为32位整数,见第2.4节。

        常数S(表示“尺度”)是一个任意的正实数。它通常在软件中表示为浮点数量,就像实际值r。第2.2节描述了在推理工作负载中避免表示此类浮点数量的方法。

        常数Z(对于“零点”)与量化值q的类型相同,实际上是与实值0对应的量化值q。这允许我们自动满足实际值r=0可以用一个量化值精确表示的要求。这一要求的动机是,神经网络运营商的有效实现通常需要在边界周围零填充数组。

        到目前为止,我们的讨论总结在以下量化的缓冲区数据结构3中,在一个神经网络中,每个激活数组和权值数组都存在这样的缓冲区的一个实例。我们使用C-++语法,因为它允许明确的类型传递。

2.2. Integer-arithmetic-only matrix multiplication—整数矩阵乘法

        现在我们转向如何只使用整数算法执行推理的问题,即如何使用方程(1)将实数计算转换为量化值3张量流Lite[5]转换器中的实际数据结构是这个头文件中的量化参数和数组。正如我们在下一节小节中讨论的,这个仍然包含浮点数量的数据结构没有出现在实际量化的设备上推理代码中。计算,以及后者如何被设计为只涉及整数算法,即使尺度值S不是整数。         考虑实数r1和r2的两个平方N×N矩阵的乘法,它们的乘积用r3=r1r2表示。我们将这些矩阵rα(α=1,2或3)表示为1 6 i,j6N的r(i,j)α,并将它们被量化的量化参数量化为(Sα,Zα)。我们用q(i,j)α来表示量化的项。等式(1)则变为: 在方程(4)中,唯一的非整数是乘法器m。作为一个只依赖于量化尺度S1、S2、S3的常数,它可以离线计算。根据经验,我们发现它总是在区间(0,1)中,因此可以用标准化的形式来表示它。 其中M0在区间[0.5,1),n是一个非负整数。归一化乘数M0现在可以很好地表示为定点乘数(例如,intint16或int32)。例如,如果使用int32,则表示M0的整数是最接近2 31M0的int32值。由于M0>0.5,这个值总是至少为2 30 ,因此将总是具有至少30位的相对精度。因此,用m0的乘法可以实现为一个定点乘法4。同时,2−n的乘法可以通过有效的位移来实现,尽管需要正确的圆到最近的行为,我们在附录B中返回这个问题。

2.3. Efficient handling of zero-points—能够有效地处理零点

为了有效地实现等式(4)的计算,而不必执行2N3减法,也不必将乘法的操作数扩展为16位整数,我们首先注意到,通过将乘法分布在等式(4)中,我们可以将其重写为

2.4. Implementation of a typical fused layer–一个典型的融合层的实现

        我们继续讨论第2.3节,但现在明确定义了所有涉及的量的数据类型,并(7),将计算直接合并到它中。。由于我们必须在推理代码中重现与训练中使用的相同算术,推理代码中融合算子的粒度(接受8位量化输入并产生8位量化输出)必须与训练图中“假量化”算子的位置相匹配(第3节)。

        对于我们在ARM和x86CPU架构上的实现,我们使用了双库[18],它的输出管道入口点支持我们现在描述的融合操作. 小标题5(describe):本节中的讨论是在张流Lite[5]中实现的,例如卷积运算符(参考代码是自包含的,优化的代码调用到双[18])。

        我们取q1矩阵为权值,取q2矩阵为激活值。权重和激活都是uint8类型的(我们可以等价地选择int8,并进行适当修改的零点)。uint8值的累积需要一个32位累加器,我们为累加器选择一个有符号类型,原因很快就会清楚。因此,(9)中的和的形式如下:         为了使量化的偏置加法在int32累加器中加入int32偏置,对偏置向量进行量化:它使用int32作为其量化的数据类型;它使用0作为量化零点Zbias;其量化的尺度与累加器的相同,它是权重和输入激活的尺度的乘积。在第2.3节的符号中, 虽然偏置向量被量化为32位值,但它们只占神经网络中参数的一小部分。此外,使用更高的精度偏差向量满足真正的需要:随着每个偏差向量输入添加到许多输出激活,任何量化误差偏差向量往往作为一个整体偏差(即误差项非零均值),必须避免为了保持良好的端到端神经网络精度。

        对于int32累加器的最终值,还有三件事要做:缩放到8位输出激活所使用的最终比例,缩放到uint8,并应用激活函数来生成最终的8位输出激活。

        降尺度对应于方程(7)中的乘数M的乘法。如在第2.2节中所解释的,它被实现为由标准化乘法器M0和舍入位移位的定点乘法。然后,我们执行一个饱和铸造到uint8,饱和到范围[0,255]。

        我们关注的只是钳子的激活功能,例如ReLU,ReLU6。数学函数在附录A.1中讨论,我们目前没有将它们融合到这样的层中。因此,我们的融合激活函数需要做的唯一事情是在存储最终的uint8输出激活之前,进一步将uint8值夹住到[0,255]的某个子间隔。在实践中,量化训练过程(第3节)倾向于学习利用整个输出uint8[0,255]间隔,使激活函数不再做任何事情,其影响被包含在饱和铸造夹紧[0,255]中暗示的uint8。

3. Training with simulated quantization—采用模拟量化的方式进行训练

        训练量化网络的一种常见方法是用浮点数进行训练,然后量化所得到的权重(有时会使用额外的量化后训练来进行微调)。我们发现,这种方法对于具有相当大表示能力的大型模型非常有效,但对于小模型,会导致精度显著下降。简单的训练后量化常见的故障模式包括:1)巨大的差异(超过100×)的权重范围不同的输出通道(第二节要求所有同一层的通道被量化到相同的分辨率,这导致权重与较小范围的通道有更高的相对误差)和2)异常权值,使所有剩余的权重量化后不那么精确。

        我们提出了一种模拟训练正向传递中的量化效应的方法。反向传播仍然像往常一样发生,所有的权重和偏差都存储在浮点中,这样它们可以很容易地被少量推动。然而,前向传播传递模拟了在推理引擎中将发生的量化推理,通过用浮点算法实现我们在第2节中介绍的量化方案的舍入行为: 1、权重在与输入进行卷积之前被量化。如果层使用批化(见[17]),则批化参数在量化前“折叠成”为权重,见第3.2节。 2、激活在推理过程中的位置被量化,例如在激活函数应用到卷积或完全连接层的输出之后,或者在旁路连接将多个层的输出添加或连接在一起之后,例如在ResNets中。

        对于每一层,量化由量化级别的数量和夹紧范围进行参数化,并通过点向应用定义如下的量化函数q来执行:

3.1. Learning quantization ranges—学习量化的范围

        权重量化与激活量化对量化范围的处理方式不同: 1、对于权重,其基本思想是简单地设置a:=minw,b:=maxw。我们对此进行了一个小的调整,使权重一旦量化为int8值,只在[−127,127]中范围,而不会取−128,因为这提供了大量的优化机会(更多细节,请参见附录B)。 2、对于激活,范围取决于对网络的输入。为了估计这些范围,我们收集了训练过程中激活的[a;b]范围,然后通过指数移动平均值(EMA)汇总它们,平滑参数接近于1,以便在数千个训练步骤中平滑观察范围。当EMA更新激活范围迅速变化时,EMA更新激活范围有显著的延迟,我们发现在训练开始时完全禁用激活量化是有用的(例如,5万到200万步)。这允许网络进入一个更稳定的状态,激活量化范围不排除相当大一部分值。

        在这两种情况下,边界[a;b]都被推动,因此值0.0在量化后可以精确地表示为一个整数z(a,b,n)。因此,学习到的量化参数映射到方程1中的尺度S和零点Z: 下面我们描述了模拟的量化,假设一个神经网络的计算被捕获为一个张量流图[1]。在算法1中描述了一个典型的工作流。通过融合和移除操作优化推理图不在本文讨论范围之内。用于图修改(插入假量化操作、创建和优化推理图)和低位推理引擎的源代码已经在[19]中使用了张量流的贡献。

算法1 算法1:量化了图的训练和推理
步骤1 1: 创建浮点模型的训练图。
步骤2 2: 根据公式12,在推理过程中张量将被降倒到更少的位的位置插入假的量化张量流操作。
步骤3 3: 以模拟量化模式训练直到收敛。
步骤4 4: 创建并优化推理图,以运行在低位推理引擎中。
步骤5 5: 使用量化的推理图运行推理

        图1.1a和b说明了一个简单的卷积层的量化前后的张量流图。图中为旁路连接更复杂的卷积C.3,如图所示C.4.

        请注意,这些偏差没有被量化,因为它们在推理过程中被表示为32位整数,与8位权重和激活相比,它们具有更高的范围和精度。此外,从权重和激活的量化参数中推断出用于偏差的量化参数。参见第2.4节。

        说明[19]使用的典型张力流代码如下:

3.2. Batch normalization folding—匹标准化折叠

        对于使用批处理归一化的模型(见[17]),还有额外的复杂性:训练图包含批处理归一化作为一个单独的操作块,而推理图将批处理归一化参数“折叠”成卷积或完全连接层的权重和偏差,以提高效率。为了准确地模拟量化效应,我们需要模拟这种折叠,并在它们通过批归一化参数进行缩放后对权重进行量化。我们采用以下方法: 这里的γ是批归一化的尺度参数,EMA(σ2B)是跨批的卷积结果方差的移动平均估计,而ε只是数值稳定性的一个小常数。

        折叠后,批归一化的卷积层简化为图1.1a所示的简单卷积层,折叠权值为wfold和相应的折叠偏差。因此,图1.1b中的配方相同也适用。培训图见附录C.5)对于一个批标准化的卷积层,相应的推理图(图C.6),批处理范数折叠后的训练图(图以及折叠和量化后的训练图(图C.8).

4. Experiments

         我们进行了两组实验,其中一组展示了量化训练的有效性。4.1),另一个说明了在公共硬件上量化模型的延迟与精度的权衡(节。4.2).对正在进行基准测试的神经网络的推理工作负载中性能最关键的部分是矩阵乘法(GEMM)。8位和32位浮点GEMM推理代码使用双符号库[18]用于8位量化推理,使用特征库[6]用于32位浮点推理。

4.1. Quantized training of Large Networks—大型网络的量化训练

我们对ImageNet数据集上的ResNets[9]和电影v3[30]应用量化训练。这些流行的网络计算太密集,无法部署在移动设备上,但也用于比较。培训方案在附录中进行了讨论D.1和D.2.

4.1.1 ResNets

我们在表4.1中比较了不同深度的浮点式和整数量化的resnet。仅整数量化网络的精度在浮点对应网络的2%以内。

        我们还在表4.2中列出了不同量化方案下的ResNet50精度。正如预期的那样,仅整数量化优于FGQ[26],后者使用2位进行权重量化。INQ[33](5位权值浮点激活)实现了与我们的类似的精度,但我们提供了额外的运行时改进(见第4.2节)。 表4.3:在ImageNet上的 Inception v3:浮点模型和量化模型的准确性和召回率5的比较。

4.1.2 Inception v3 on ImageNet

我们比较了初始空间v3模型分别量化为8位和7位。通过将方程12中的量化水平数设置为n=27来得到7位量化。此外,我们还通过比较具有两种激活非线性的网络,即ReLU6和ReLU的网络,来探讨激活量化的敏感性。培训方案见附录D.2。

        从表4.3可以看出,7位量化训练的模型精度与8位量化训练非常接近,而使用ReLU6的量化模型的精度下降较小。后者可以通过注意到ReLU6引入了间隔[0,6]作为激活的自然范围来解释,而ReLU允许激活从一个可能更大的间隔中获取值,在不同的通道中具有不同的范围。在固定范围内的值更容易量化,且精度更高。

4.2. Quantization of MobileNets—移动网的量化

MobileNets是一类架构,它可以在设备上的延迟和ImageNet分类精度之间实现最先进的权衡。在本节中,我们将演示如何仅整数量化可以进一步改进在公共硬件上的权衡。

4.2.1 ImageNet

我们在ImageNet上以三种类型的不同(depth-multipliers (DM))深度乘数(DM)和分辨率(resolutions)对MobileNet架构进行了基准测试,它们代表了三种不同的微架构:1)骁龙835小核心,(图。1.1c),一个在谷歌Pixel2中发现的节能处理器;2)骁龙835大核(图。4.1),谷歌Pixel2所采用的高性能核心;和3)骁龙821大核(图。4.2),这是谷歌Pixel1中使用的一个高性能核心。 在下,**仅整数量化的MobileNet比浮点MobileNet获得更高的精度。**在实时(30帧每秒)操作所需的33ms延迟下,骁龙835小核的精度差距相当大(∼10%)。虽然大多数量化文献关注于尽量减少给定架构的精度损失,但我们提倡更全面的延迟与精度的权衡作为更好的度量。请注意,这种权衡主要取决于硬件中浮点算法相对于仅整数算法的相对速度。例如,浮点计算在骁龙821中得到了更好的优化,从而导致量化模型的延迟不那么明显地减少。

4.2.2 COCO

        我们评估了移动实时目标检测背景下的量化,比较了f MobileNet SSD[10,25]在COCO数据集[24]上的性能。【We replaced all the regular convolutions in the SSD prediction layers with separable convolutions (depthwise followed by 1 × 1 projection).】—我们将SSD预测层中的所有规则卷积替换为可分离卷积(深度,然后是1×1投影)。这种修改与移动网的整体设计是一致的,并使其计算效率提高。我们使用了开源的张量流对象检测API[12]来训练和评估我们的模型。该培训方案详见附录D.3。我们还延迟了50万步的量化(见第3.1节),发现它显著减少了收敛的时间。

        表4.4显示了浮点模型和整数量化模型之间的延迟与精度的权衡。延迟是用骁龙835核(大大小小)在单个线程上测量的。量化训练和推理的结果是减少了高达50%的运行时间,而精度损失最小(相对−为1.8%)。

4.2.3 Face detection—人脸检测

        为了更好地在更小的规模上检查量化的MobileNetSSD,我们在人脸属性分类数据集([10]中使用的基于flickr的数据集)上对人脸检测进行了基准测试。我们联系了[10]的作者,以按照相同的协议评估我们的量化移动网络的检测和面部属性(详见附录D.4)。

        如表4.5和4.6所示,量化使用高通骁龙835大小内核提供了接近2×的延迟减少,代价是∼平均精度下降2%。值得注意的是,量化允许25%的人脸检测器在单个大核上实时运行(1K/28≈36fps),而浮点模型仍然比实时运行慢(1K/44≈23fps)。

        此外,我们还研究了多线程对量化模型延迟的影响。表4.6显示了使用4核时的1.5到2.2×)的加速。两个核心之间的加速比是具有可比性的,并且在多线程开销占总计算的比例较小的较大模型中,加速比更高。

4.2.4 Face attributes—人脸属性

图4.3显示了在高通骁龙821【Qualcomm Snapdragon 821】上的人脸属性分类的延迟与准确性的权衡。 由于量化训练导致的精度很少下降,我们看到了一个改进的权衡,即使高通骁龙821对浮点算法进行了高度优化(比较见图4.2)。

Ablation study

为了理解量化方案的性能敏感性,==我们进一步评估了不同权重和激活量化比特深度的量化训练。==二进制属性的平均精度和相对于浮点基线的年龄精度的下降情况分别见表4.7和表4.8。表中表明, 1)权重比激活模型对减少的量化位深度更敏感 2)8位和7位量化模型的性能与浮点模型相似 3)当总位深度相等时,最好保持权重和激活位深度相同。

5. Discussion

我们提出了一种仅依赖于整数算法来近似神经网络中的浮点计算的量化方案。模拟量化效果的训练有助于将模型精度恢复到与原始模型精度几乎相同的水平。除了减少模型大小的4×外,通过基于ARMneon的实现提高了推理效率。这一改进推进了在通用ARMcpu上的延迟和流行的计算机视觉模型的准确性之间的最先进的权衡。我们的量化方案和高效的架构设计之间的协同作用表明,只有整数算术的推理可能是推动视觉识别技术进入实时和低端手机市场的一个关键促成因素

A. Appendix: Layer-specific details----A.附录:特定于图层的详细信息

A.1.数学函数

数学函数,如双曲切线、逻辑函数和软函数经常出现在神经网络中。不需要查找表,因为这些函数是用纯不动点运算实现的,类似于在浮点运算7中实现它们的方式。

A.2. Addition----添加

一些神经网络使用一种普通的添加层类型,即简单地将两个激活数组添加在一起。与浮点数相比,这种额外的加法层在量化推理中更昂贵,因为需要重新调整(2.2节的结束),然后实际的加法可以作为一个简单的整数加法执行;最后,结果必须重新缩放以适应输出数组的比例。

A.3. Concatenation—接合

对连接层的完全通用支持提出了与附加层相同的重新缩放问题。因为这样调整uint8值将是一个有损的操作,似乎连接应该是一个无损操作,我们喜欢以不同的方式处理这个问题:而不是实现有损调整,我们引入要求所有的输入激活和输出激活连接层有相同的量化参数。这就消除了重新缩放的需要,因此连接没有损耗,没有任何算术。

B. Appendix: ARM NEON details–

补充Neon小知识:

1、Neon是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令、多数据)扩展结构。 2、ARM NEON技术 是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令、多数据)扩展结构。从智能手机和移动计算设备到HDTV,它已被公认为是多媒体应用领域中最为优越的处理器之一。它采用专门设计,简化了软件在不同平台之间的移植,为类似Dolby Mobile的密集型多媒体应用提供了低能耗和灵活的加速功能。 NEON 指令可执行“打包的 SIMD”处理,NEON技术与Cortex-A8和Cortex-A9处理器相结合,已经被许多领先企业广泛采用。越来越多的机构正在IP设计中采用NEON技术,或提供为NEON技术优化的软件,构成了NEON生态系统的一部分。这一生态系统由大量的硅片领导厂商构成,如博通公司、Freescale Semiconductor、Matsush_ita、NEC、NVIDIA、松下、PMC-Sierra、三星电子、ST、TI和东芝美国电子元器件公司,这些公司都获得了Cortex处理器授权,其中提供NEON技术作为选择之一。此外,在这些ARM处理器和多媒体编解码器厂商基础上,构建开发和评测电路板的硬件设计合作伙伴正不断为NEON技术优化编解码器。

正文

本节假设您熟悉ARM NEON指令集上的汇编编程。下面的指令助记符参考的是64位ARM指令集,但本讨论同样适用于32位ARM指令。

本文中引用的定点乘法精确地映射到sqrdmulh指令。使用正确舍入的指令sqrdmulh而不是SQDMULH非常重要。

在第2.2节中引用的从舍入到最近的右移并不精确地映射到任何ARM NEON指令。

问题是,“舍入右移”指令,RSHL与可变的负偏移量,通过向上舍入打破联系,而不是从零舍入他们。例如,如果我们使用RSHL来实现划分−12/23,结果将是−1,而它应该是−2,带有“圆到最近”。这是有问题的,因为它导致了一个整体向上的偏差,这已经被观察到导致神经网络推理的端到端准确性的显著损失。一个正确的圆到最近的右移仍然可以使用RSHL实现,但周围有适当的修复算法

为了有效地实现矩阵乘法的核心积累,我们使用以下技巧。在(10)中的乘加运算中,我们首先将操作数的类型从uint8更改为int8(这可以通过从量化的值和零点中减去128来实现)。因此,核心的乘加成为 如第3节所述,通过对量化的训练过程进行一个轻微的调整,我们可以确保权重一旦被量化为int8值,就不会取值−128。因此,(B.1)中的产品从来不是−128∗−128,因此其绝对值总是小于2 14 。因此,(B.1)可以在一个本地的int16累加器上积累两个产品,然后才需要积累到真正的int32累加器中。这允许使用8路SIMD乘法(int8操作数上的SMULL),然后是8路SIMD乘法添加(int8操作数上的SMLAL),然后是成对添加和累积到int32累加器(SADALP)

C. Appendix: Graph diagrams—图标

D. Experimental protocols–实验方案

D.1. ResNet protocol

Preprocessing—预处理

ImageNet[3]的所有图像都调整尺寸保持宽比,使图像的最小边为256。然后裁剪中心224×224补丁,并减去每个RGB通道的平均值。

Optimization—优化

我们使用来自张量流[1]的动量优化器,动量为0.9,批处理大小为32。学习速率从10−5开始,每30个时代以楼梯间的方式衰减0.1。由于第3节中讨论的原因,激活量化延迟了50万步。培训异步使用50名工人,并在验证精度达到稳定后停止,通常在100个时代之后。

D.2. Inception protocol

表4.3中的所有结果都是经过大约1000万步的训练后获得的,有32个样本,使用50个分布式工人,异步。训练数据为ImageNet2012 299 ×299张带有标签的图像。图像增强包括:随机作物、随机水平翻转和随机颜色失真。所使用的优化器是RMSProp,其学习率从0.045开始,在每两个时期之后以指数和逐步的方式衰减,因子为0.94。其他RMSProp参数为:0.9动量,0.9衰减,1.0埃普塞隆项。训练参数为EMA平均,衰减为0.9999。

D.3. COCO detection protocol–COCO检测协议

Preprocessing.

在训练过程中,所有的图像都被随机裁剪和调整大小到320×320。在评估过程中,所有的图像都被直接调整到320×320。所有的输入值都被标准化为[−1,1]。

Optimization.

我们使用了来自TensorFlow[1]的RMSprop优化器,其批处理大小为32。学习速率从4×10−3开始,每100个时代以楼梯间的方式衰减0.1倍。由于第3节中讨论的原因,激活量化延迟了50万步。培训异步使用20名工人,在验证精度稳定之后停止,通常在大约600万步之后。

Metrics.—指标

评估结果报告与COCO主要挑战指标:AP在IoU=.50:.05:.95。我们在[13]中遵循相同的火车/世纪分裂。

D.4. Face detection and face attribute classification protocol—人脸检测和人脸属性分类协议

Preprocessing.

随机1:1的作物从[10]中使用的基于flickr的数据集的图像中提取,并将大小调整为320×320像素用于人脸检测,128×128像素用于人脸属性分类。由此产生的作物以50%的概率水平翻转。每个RGB通道的值被重新规格化为在范围内[−1,1]。

Face Detection Optimization.

我们使用了来自TensorFlow[1]的RMSprop优化器,其批处理大小为32。学习速率从4×10−3开始,每100个时代以楼梯间的方式衰减0.1倍。由于第3节中讨论的原因,激活量化延迟了50万步。培训异步使用20名工人,在验证精度稳定之后停止,通常在大约300万步之后。

Face Attribute Classification Optimization.—人脸属性分类优化。

我们遵循了[10]中的优化协议。我们使用了来自张量流[1]的Adagrad优化器,其批处理大小为32,恒定的学习率为0.1。培训异步使用12名工人,并停止在2000万步。

Latency Measurements—延迟测量

我们创建了一个二进制文件,在随机输入上重复运行100秒的人脸检测和人脸属性分类模型。我们使用adb推送命令将这个二进制文件推送到Pixel和Pixel2手机上,并使用adbshell命令在1、2、4个小核、1、2和4个大核上执行它。我们报告了人脸检测器模型在320×320个输入上的平均运行时间,以及人脸属性分类器模型在128×128个输入上的平均运行时间。

标签: 温度传感器wklq24j6a连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台