CN111178505B - 卷积神经网络的加速方法和计算机可读存储介质 - Google Patents
卷积神经网络的加速方法和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111178505B CN111178505B CN201911335752.2A CN201911335752A CN111178505B CN 111178505 B CN111178505 B CN 111178505B CN 201911335752 A CN201911335752 A CN 201911335752A CN 111178505 B CN111178505 B CN 111178505B
- Authority
- CN
- China
- Prior art keywords
- matrix
- convolution
- data
- input
- coefficient
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 35
- 230000001133 acceleration Effects 0.000 title claims abstract description 29
- 239000011159 matrix material Substances 0.000 claims abstract description 138
- 238000004364 calculation method Methods 0.000 claims abstract description 30
- 238000012163 sequencing technique Methods 0.000 claims abstract description 5
- 238000007667 floating Methods 0.000 claims description 24
- 238000012545 processing Methods 0.000 claims description 19
- 230000004913 activation Effects 0.000 claims description 10
- 238000010606 normalization Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 3
- 239000013589 supplement Substances 0.000 abstract 1
- 238000013528 artificial neural network Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 229910052754 neon Inorganic materials 0.000 description 5
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 5
- 210000000988 bone and bone Anatomy 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 235000009421 Myristica fragrans Nutrition 0.000 description 1
- 244000062793 Sorghum vulgare Species 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000001115 mace Substances 0.000 description 1
- 229940050561 matrix product Drugs 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 235000019713 millet Nutrition 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000002054 transplantation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Human Computer Interaction (AREA)
- Multimedia (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种卷积神经网络的加速方法和计算机可读存储介质,卷积神经网络的加速方法包括计算卷积的输入/输出数据的排序,使所述输入数据在内存中按卷积时的访问顺序连续存储;对卷积的系数数据进行排序,使所述系数数据在内存中按卷积时的访问顺序连续存储;将矩阵分割成两个以上的子矩阵,为所述子矩阵乘法运算的输入数据、系数数据以及输出数据分配SIMD寄存器进行卷积计算,使所述子矩阵卷积所需要的SIMD寄存器数量numreg满足:numreg=ri+ct+ri×sc,且所述numreg为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。本发明使输入数据在内存中连续存储,并且将矩阵分割成子矩阵,使SIMD寄存器补充充分用于子矩阵卷积,从而提高CPU的卷积效率。
Description
技术领域
本发明涉及神经网络卷积技术领域,特别是涉及一种卷积神经网络的加速方法和计算机可读存储介质。
背景技术
卷积计算应用于计算机视觉各领域,随着深度卷积网络的复杂性不断提高,计算量也随之增大,从而导致深度卷积神经网络对硬件计算能力要求非常高。而嵌入式设备上的计算能力有限,很难达到通用计算机的计算效果。
随着嵌入式CPU的发展,ARM公司的CPU已经占有了巨大的市场份额,其中contex-A系列处理器已广泛应用于智能手机、机顶盒智能电视等各种智能化的设备中。contex-A系列处理器提供的128位SIMD(Single Instruction,Multiple Data,单指令、多数据)运算指令扩展结构被称为NEON,从智能手机和移动计算设备到HDTV,NEON已被公认为是多媒体应用领域中最为优越的处理器之一。Neon指令是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction,Multiple Data,单指令、多数据)扩展结构。Neon指令采用专门设计,简化了软件在不同平台之间的移植,为类似Dolby Mobile的密集型多媒体应用提供了低能耗和灵活的加速功能。搭载了ARMV8指令集的ARM A53 CPU更是成为近几年最广泛应用的IP核,其他64位架构的ARM处理器也在日益增多,其中NEON在ARM64位架构相对ARM32提供了更多的寄存器,使其在计算中具有更高的计算效率。
随着大量嵌入式应用需求的不断增多,轻量级的神经网络结构也不断的被开发出来。这种轻量级的神经网络结构通常是将多维卷积分解为两次1X1卷积和一次深度可分离卷积,其中1X1的卷积计算与矩阵乘法计算基本一致,因此能够在计算精度略微下降的前提下,在计算量上降低几个数量级。目前一些大的公司都已经推出了开源的深度卷积计算框架,比如小米的MACE、阿里的MNN。然而现有的轻量级的神经网络结构都以GPU或DSP为主,在最广泛使用的CPU上应用时占用巨大的CPU资源,虽然CPU的计算能力变强,但在处理神经网络卷积时,计算时间相对GPU或DSP仍然很慢。
目前的卷积计算一般应用于深度计算引擎,并与各种训练模型结合,实现人体骨骼识别、物品识别、人员识别等。专利号为CN201810601486.2,专利名称为《一种基于单目视觉、从动作识别身份的方法》,其公开了基于卷积神经网络构建了人体骨骼关键点的检测模型,利用提取的人体骨骼点点坐标序列对基于LSTM的神经网路匹配模型进行训练,使得训练的基于LSTM的神经网路匹配模型具备跨视角的动作识别能力。在识别过程中,利用训练好的人体骨骼点二维坐标检测模型对单目视觉视频和已注册动作视频序列进行人体骨骼点二维坐标序列提取,再通过基于LSTM的神经网路匹配模型进行特征相似度计算,进而对测试的动作视频中人的身份进行识别,在跨视角动作识别时具有较高的准确度。该方法可被广泛应用与配备视频监控的场景,如:机场及超市的安全监控,人员识别,罪犯检测等。
发明内容
为此,需要提供一种卷积神经网络的加速方法,用于解决现有通过CPU处理卷积计算时,CPU资源占用大,计算效率低的技术问题。
为实现上述目的,发明人提供了一种卷积神经网络的加速方法,包括步骤:
计算1x1卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储;
对1x1卷积的系数数据进行排序,使所述系数数据在内存中按卷积时的访问顺序连续存储;
将输入矩阵、系数矩阵、输出矩阵分别分割成具有相同行数和相同列数的子矩阵;
为所述子矩阵乘法运算的输入数据、系数数据以及输出数据分配SIMD寄存器进行矩阵乘法计算,使所述子矩阵乘法所需要的SIMD寄存器数量numreg为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。
进一步的,所述子矩阵乘法所需要的SIMD寄存器数量numreg=ri+ct+ri×sc;其中,ri为输入子矩阵的行数量,ct为系数子矩阵的列数量,sc为系数子矩阵的列数量ct除以SIMD乘法指令能计算的向量浮点乘法数量vn的商。
进一步的,还包括数据处理步骤:读取1x1卷积结果数据,对1x1卷积结果数据进行归一化和激活处理,存储处理后的1x1卷积数据。
进一步的,所述步骤“计算卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储”包括:
分配所述输入/输出数据的索引号IDX,IDX=Y×W+X;
对N通道的卷积输入/输出数据进行分组;
根据公式(IDX/ri)×ri×COLS+(N/vn)×ri×vn+(IDX%ri)×vn+(N%vn),对卷积输入/输出浮点数据进行排列,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储,其中,N为通道数,W为N通道的卷积输入/输出浮点数据的宽度,Y为卷积输入/输出浮点数据位于通道的行数,X为卷积输入/输出浮点数据位于通道的列数,COLS为通道组大小。
进一步的,所述步骤“对卷积的系数数据进行排序,使所述系数数据在内存中按卷积时的访问顺序连续存储”包括:
根据公式(C/ct)×RK×ct+R×ct+(C%ct)对系数数据进行排列,使所述系数数据在内存中按卷积时的访问顺序连续存储,其中,所述R为系数矩阵中系数所在的行数,C为系数矩阵中系数所在的列数,K为系数矩阵的列数,M为系数矩阵的行数,RK为M向上按ct取整。
进一步的,所述步骤“输入矩阵、系数矩阵、输出矩阵分别分割成具有相同行数和相同列数的子矩阵”中,CPU处理器具有32个SIMD寄存器,其中每个SIMD寄存器可存储4个浮点数时,将输出矩阵分割为8行8列的多个子矩阵,并将输入矩阵分割为8行4列的多个子矩阵,系数矩阵分割为4行8列的多个子矩阵。8X8矩阵分割成8X4矩阵与4X8矩阵两个子矩阵。进一步的,所述步骤“输入矩阵、系数矩阵、输出矩阵分别分割成具有相同行数和相同列数的子矩阵”中,若CPU处理器具有16个SIMD寄存器,其中每个SIMD寄存器可存储4个浮点数时,将输出矩阵分割为多个6行4列子矩阵,并将输入矩阵分割为多个6行4列矩阵,系数矩阵分割为多个4行4列的子矩阵。
进一步的,还包括步骤:对卷积计算结果进行深度可分离卷积处理。
为解决上述技术问题,本发明还提供了另一技术方案:一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述程序被处理器执行时实现以上任一项技术方案所述的步骤。
为解决上述技术问题,本发明还提供了一种卷积神经网络的加速方法的应用,所述卷积神经网络的加速方法应用于深度计算引擎,所述卷积神经网络的加速方法为以上任一技术方案所述的卷积神经网络的加速方法。
为解决上述技术问题,本发明还提供了一种卷积神经网络的加速方法的应用,所述卷积神经网络的加速方法的深度计算引擎,结合人体骨骼训练模型,应用于人体骨骼识别,所述卷积神经网络的加速方法为以上任一技术方案所述的卷积神经网络的加速方法。
区别于现有技术,上述技术方案计算卷积的输入/输出数据的排序,使所述输入数据在内存中按卷积时的访问顺序连续存储,减少卷积时数据读取时间,并且通过将矩阵分割成两个以上的子矩阵进行卷积,子矩阵卷积时充分使用CPU的SIMD寄存器,使所需要的SIMD寄存器数量numreg为小于或等于CPU处理器的SIMD寄存器数量tn的最大值,从而缩短CPU卷积所需要时间,提高CPU的卷积效率。
附图说明
图1为具体实施方式所述卷积神经网络的加速方法的流程图;
图2为具体实施方式8X8矩阵积计算方法的流程图;
图3为具体实施方式无需进行深度可分离卷积处理的矩阵操作流程图;
图4为具体实施方式需要进行深度可分离卷积处理的矩阵操作流程图;
图5为具体实施方式所述计算机可读存储介质的模块图;
附图标记说明:
500、计算机可读存储介质;
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
名词说明:
ROUNDUP8:为向上取整操作,例如ROUNDUP8(X)表示对X进行向上按8取整操作;
寄存器:指NEON的SIMD寄存器;
计算:指32位单精度浮点计算;一个SIMD寄存器可以存储4个单精度浮点数;
IDX/ri:是指IDX对ri进行除法运算,并取整;
IDX%ri:是指IDX对ri进行取余数运算。
请参阅图1,本实施例提供了一种卷积神经网络的加速方法,该卷积神经网络的加速方法包括步骤:
S101、计算卷积的输入/输出数据的排序,使所述输入数据在内存中按卷积时的访问顺序连续存储。在对输入浮点数据进行排序时,先为输入数据分配索引号IDX,对于一个浮点数据位于第C通道,第Y行,第X列,令该数据的索引号为IDX=Y×W+X。然后根据公式:(IDX/ri)×ri×COLS+(N/vn)×ri×vn+(IDX%ri)×vn+(N%vn),对输入浮点数据进行排序,其中,W为N通道的卷积输入浮点数据的宽度,H为N通道的卷积输入浮点数据的高度,COLS为通道组大小。
由于在后述步骤S104中,对矩阵的分割和子矩阵的卷积计算是需要按照多层循环进行的,第一层循环中计算输入浮点数据的IDX分组,在第二层循环中计算N通道分组,在第三层循环中计算子矩阵的乘法。因此本实施方式中,按公式:(IDX/ri)×ri×COLS+(N/vn)×ri×vn+(IDX%ri)×vn+(N%vn)对输入浮点数据排列,可使每次读写的数据连续存储,即使每次读写的数据尽量排列在一起,这样可以减小内存访问时间。所述公式:(IDX/ri)×ri×COLS+(N/vn)×ri×vn+(IDX%ri)×vn+(N%vn)的具体执行步骤为:以一条SMID乘累加指令能计算的单精度浮点数数量为通道分组数(在本实施方式中此数量为4),将总共的通道数量N按通道分组数进行分组,并顺序排列,然后将数据的索引号IDX,按一次子矩阵乘法的行数进行分组(在本实施方式中为8),然后将N通道的矩阵按输入输出顺序排列,最后将所有分组的索引号顺序排列。
S102、对卷积的系数数据进行排序,使所述系数数据在内存中按卷积时的访问顺序连续存储。在对卷积的系数数据进行排序时,可根据公式(C/ct)×RK×ct+R×ct+(C%ct)为系数数据分配存储位置,其中,M为系数矩阵的行数,K为系数数据的列数,R为系数所在的行数,C为系数数据所在的列数,M为系数矩阵的行数,RK为M向上按ct取整。CPU处理器具有32个SIMD寄存器,其中每个SIMD寄存器可存储4个浮点数时,根据矩阵乘法的计算法则,每个子矩阵乘法需要加载4X8(4行8列)的系数矩阵,所以将系数矩阵的列按8进行分组并组内顺序排列,然后排列K行的数据,最后再将K×8列的矩阵顺序排列,这样可以使系数矩阵的读取也按顺序,因此可以降低内存访问时间,提高卷积效率。
根据公知常识所述1x1卷积计算等价于矩阵乘法运算,故根据矩阵运算法则,对矩阵可以适当分块,可以使高阶矩阵的运算转化为低阶矩阵的运算,因此,在步骤S103中将输入矩阵、系数矩阵、输出矩阵分别分割成具有相同行数和相同列数的子矩阵。
所述分割过程中,若所述被分割矩阵的行数不满足所述分割出的子矩阵行数的倍数,则先将所述被分割矩阵行数补全至所述分割出的子矩阵行数的倍数,同样的,若所述被分割矩阵的列数不满足所述分割出的子矩阵列数的倍数,则先将所属被分割矩阵列数补全至所述分割出的子矩阵列数的倍数。
S104、为所述子矩阵乘法运算的输入数据、系数数据以及输出数据分配SIMD寄存器进行矩阵乘法计算,使所述子矩阵乘法所需要的SIMD寄存器数量numreg为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。
具体的,所述子矩阵乘法所需要的SIMD寄存器数量numreg=ri+ct+ri×sc,且所述numreg为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。其中,ri为输入子矩阵的行数量,ct为系数子矩阵的列数量,sc为系数子矩阵的列数量ct除以SIMD乘法指令能计算的向量浮点乘法数量vn的商。
具体的,所述卷积神经网络的加速方法为基于NEON的1x1卷积计算方法,由于CPU处理的NEON的SIMD寄存器数量有限,无法满足一些较大矩阵的卷积计算,因此为了保证卷积的效率,需要将矩阵分割成两个以上的子矩阵进行卷积。在矩阵分割成子矩阵时,需要考虑子矩阵卷积所需要的SIMD寄存器数量numreg为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。
在矩阵分割成子矩阵时,可以通过以下方式确定最佳的子矩阵分组方式:
首先确定一个SIMD乘法指令做能的向量浮点乘法数量vn,然后确定SIMD寄存器组所能存储的vn数量tn(在ARM64中此数量为32而在ARM32中此数量为16)。设卷积输入矩阵的行数量为ri,系数矩阵的列数量为ct,为了使计算效率最佳需要同时满足三个下条件:
1、系数矩阵的列数量ct是向量浮点乘法数量vn的整数倍,该整数倍定义为sc,其中sc等于ct除vn,以保证存储效率。
2、使总的需要的SIMD寄存器数量numreg=ri+ct+ri×sc小于等于tn;
3、使SIMD寄存器数量numreg取最大值,即SIMD寄存器被最充分利用。
如图2所示,以计算输出子矩阵为8X8(8行8列)矩阵为例,当CPU处理为ARM64时,ARM64具有32个SIMD寄存器,因此可将计算输出子矩阵为8X8矩阵的输入矩阵设定为8X4子矩阵,同时系数矩阵为4X8子矩阵。
S201、清零目标子矩阵(8X8)所占用的输出寄存器REGDST共16个寄存器;
S202、读取以(SB0×8×INCOLS为起始地址,长度为32个卷积输入数据,并将结果存储到输入寄存器REGSRC共8个寄存器;所述INCOLS为矩阵列数;所述SB0为起始行号;
S203、读取以(SB1)×8×INCOLS为起始地址,长度为32个卷积系数数据,并将数据存储到系数寄存器REGCOEF共8个寄存器;所述SB1为起始列号;
S204、计算输入寄存器REGSRC中8X4子矩阵与系数寄存器4X8子矩阵的乘法,并将结果累加到输出寄存器REGDST,然后修改起始地址递增32个数据,修改偏移地址增加32个数据;
S205、重复以上2.3.4步骤直到INCOLS/4-1次;
S206、读取归一化所需数据到输入/系数寄存器,并对输出寄存器中所有数据做归一化处理,并将结果保存到输出寄存器;
S207、读取激活所需数据到输入/系数寄存器,并对输出寄存器中所有数据做激活处理,并将结果保存到输出寄存器。
在该实施方式中,一个SIMD乘累加指令可以计算4个单精度浮点向量乘法,8X4的矩阵共用32个浮点数,需要8个SIMD寄存器,而系数矩阵也需要8个SIMD寄存器,结果矩阵为8X8需要16个SIMD寄存器,共使用了32个SIMD寄存器,从而使ARM64的32个SIMD寄存器都被利用,从而保证卷积效率。如果矩阵过大,则需要使用更多的寄存器,由于SIMD寄存器组无法提供这么多寄存器,就必须通过内存存储,这样会增加延迟,而矩阵过小则无法充分利用32个SIMD寄存器,乘累加的指令比率降低,从而也会导致更多的计算时间。因此,本发明将输出矩阵分割为8行8列的多个子矩阵,并将输入矩阵分割为8行4列的多个子矩阵,系数矩阵分割为4行8列的多个子矩阵,在进行卷积计算时ARM64的32个SIMD寄存器均被利用,卷积效率高。
在另一实施方式中,当CPU处理器为ARM32时,一个SIMD乘法指令做能的向量浮点乘法数量vn等于4,SIMD寄存器组所能存储的向量浮点乘法数量vn的总数量tn等于16,当sc等于1,ri等于6且ct等于4时,SIMD寄存器数量numreg等于16。因此,当CPU处理器为ARM32时,本发明采用上述6×4子矩阵及4×4子矩阵进行卷积计算,可以使ARM32中16个SIMD寄存器均被使用,从而使卷积效率最高。
如图2所示,对卷积后的输出矩阵进行归一化(BACHNORM),激活(被称为RELU)等操作,激活后的数据可以被用于深度可分离卷积处理。在一实施方式中,为了进一步提高处理效率,还将所述归一化(BACHNORM)和激活(被称为RELU)操作合并处理,即在对输出矩阵进行归一化操作后不进行数据存储就紧接着进行激活操作。而在现有技术中归一化操作和激活操作是分步进行的,处理器在读取输出矩阵并进行归一化操作后,将归一化后的数据进行存储,然后再次读取该数据进行激活操作,因此需要多次存取。而本实施方式中将述归一化(BACHNORM)和激活(被称为RELU)操作合并处理,只需要一次数据存取即可完成归一化和激活操作,从而进一步提高处理效率。
如图3所示中,为矩阵卷积后不需要进行深度可分离卷积处理的矩阵操作流程图。
令起始行号SB0为IDX/8,令起始列号SB1为C/8,清零SB0,SB1。
S301、8X8输出了矩阵处理,计算输出位置行为SB0列为SB1的子矩阵乘法。其中,8X8输出了矩阵处理采用上述卷积神经网络的加速方法,将输出矩阵分割为8行8列的多个子矩阵,并将输入矩阵分割为8行4列的多个子矩阵,系数矩阵分割为4行8列的多个子矩阵;
S302、将输出寄存器按先前所述卷积输出数据保存到内存中。
S303、重复从S301到S302的步骤,直到重复次数达到输出列数OUTCOLS/8-1次,并每重复一次SB1增加1。
S304、重复从S301到S303的步骤,直到重复次数达到输入行数INROWS/8-1次,并每重复一次SB0增加1。
如图4所示,为矩阵卷积后需要进行深度可分离卷积处理的矩阵操作流程图。
令SB0为IDX/8,令SB1为C/8,并清零SB0,SB1。
S401、8X8输出了矩阵处理,计算输出位置行为SB0列为SB1的子矩阵乘法,其中,8X8输出了矩阵处理采用上述卷积神经网络的加速方法,将输出矩阵分割为8行8列的多个子矩阵,并将输入矩阵分割为8行4列的多个子矩阵,系数矩阵分割为4行8列的多个子矩阵;
S402、将输出寄存器按通道数为8的先前所述卷积输出数据格式保存到内存中。
S403、重复从S401到S403的步骤,直到重复次数达到输入行数INROWS/8-1次,并每重复一次SB0增加1。
S404、对当前已输出的输出矩阵数据进行深度可分离卷积处理,深度可分离卷积处理完后将数据按卷积输出格式保存。
S405、然后重复从S401到S405的步骤,直到重复次数达到输出列数OUTCOLS/8-1次,并每重复一次SB1增加1。
如图5所示,在另一实施方式中,提供了一种计算机可读存储介质500,计算机可读存储介质存储有计算机程序,所述程序被处理器执行时实现以上任一项实施方式所述的步骤。
在另一实施方式中,提供了一种卷积神经网络的加速方法的应用,所述卷积神经网络的加速方法应用于深度计算引擎,所述卷积神经网络的加速方法为以上任一实施方式所述的卷积神经网络的加速方法。
在另一实施方式中,还提供了一种卷积神经网络的加速方法的应用,所述卷积神经网络的加速方法的深度计算引擎,结合人体骨骼训练模型,应用于人体骨骼识别,所述卷积神经网络的加速方法以上任一实施方式所述的卷积神经网络的加速方法。
需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。
Claims (7)
1.一种卷积神经网络的加速方法,其特征在于,包括步骤:
计算1x1卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储;
对1x1卷积的系数数据进行排序,使所述系数数据在内存中按卷积时的访问顺序连续存储;
将输入矩阵、系数矩阵、输出矩阵分别分割成具有相同行数和相同列数的子矩阵;
为所述子矩阵乘法运算的输入数据、系数数据以及输出数据分配SIMD寄存器进行矩阵乘法计算,使所述子矩阵乘法所需要的SIMD寄存器数量numreg为小于或等于CPU处理器的SIMD寄存器数量tn的最大值;
所述步骤“计算卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储”包括:
分配所述输入/输出数据的索引号IDX,IDX=Y×W+X;
对N通道的卷积输入/输出数据进行分组;
根据公式(IDX/ri)×ri×COLS+(N/vn)×ri×vn+(IDX%ri)×vn+(N%vn),对卷积输入/输出浮点数据进行排列,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储,其中,N为通道数,W为N通道的卷积输入/输出浮点数据的宽度,Y为卷积输入/输出浮点数据位于通道的行数,X为卷积输入/输出浮点数据位于通道的列数,COLS为通道组大小;
所述步骤“对卷积的系数数据进行排序,使所述系数数据在内存中按卷积时的访问顺序连续存储”包括:
根据公式(C/ct)×RK×ct+R×ct+(C%ct)对系数数据进行排列,使所述系数数据在内存中按卷积时的访问顺序连续存储,其中,所述R为系数矩阵中系数所在的行数,C为系数矩阵中系数所在的列数,K为系数矩阵的列数,M为系数矩阵的行数,RK为M向上按ct取整。
2.根据权利要求1所述的卷积神经网络的加速方法,其特征在于,所述子矩阵乘法所需要的SIMD寄存器数量numreg=ri+ct+ri×sc;其中,ri为输入子矩阵的行数量,ct为系数子矩阵的列数量,sc为系数子矩阵的列数量ct除以SIMD乘法指令能计算的向量浮点乘法数量vn的商。
3.根据权利要求1所述的卷积神经网络的加速方法,其特征在于,还包括数据处理步骤:读取1x1卷积结果数据,对1x1卷积结果数据进行归一化和激活处理,存储处理后的1x1卷积数据。
4.根据权利要求1所述的卷积神经网络的加速方法,其特征在于,所述步骤“输入矩阵、系数矩阵、输出矩阵分别分割成具有相同行数和相同列数的子矩阵”中,CPU处理器具有32个SIMD寄存器,其中每个SIMD寄存器可存储4个浮点数时,将输出矩阵分割为8行8列的多个子矩阵,并将输入矩阵分割为8行4列的多个子矩阵,系数矩阵分割为4行8列的多个子矩阵。
5.根据权利要求1所述的卷积神经网络的加速方法,其特征在于,所述步骤“输入矩阵、系数矩阵、输出矩阵分别分割成具有相同行数和相同列数的子矩阵”中,若CPU处理器具有16个SIMD寄存器,其中每个SIMD寄存器可存储4个浮点数时,将输出矩阵分割为多个6行4列子矩阵,并将输入矩阵分割为多个6行4列矩阵,系数矩阵分割为多个4行4列的子矩阵。
6.根据权利要求1所述的卷积神经网络的加速方法,其特征在于,还包括步骤:对卷积计算结果进行深度可分离卷积处理。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911335752.2A CN111178505B (zh) | 2019-12-23 | 2019-12-23 | 卷积神经网络的加速方法和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911335752.2A CN111178505B (zh) | 2019-12-23 | 2019-12-23 | 卷积神经网络的加速方法和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111178505A CN111178505A (zh) | 2020-05-19 |
CN111178505B true CN111178505B (zh) | 2023-04-07 |
Family
ID=70652086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911335752.2A Active CN111178505B (zh) | 2019-12-23 | 2019-12-23 | 卷积神经网络的加速方法和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111178505B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106940815A (zh) * | 2017-02-13 | 2017-07-11 | 西安交通大学 | 一种可编程卷积神经网络协处理器ip核 |
CN107704921A (zh) * | 2017-10-19 | 2018-02-16 | 北京智芯原动科技有限公司 | 基于Neon指令的卷积神经网络的算法优化方法及装置 |
CN110050267A (zh) * | 2016-12-09 | 2019-07-23 | 北京地平线信息技术有限公司 | 用于数据管理的***和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11803377B2 (en) * | 2017-09-08 | 2023-10-31 | Oracle International Corporation | Efficient direct convolution using SIMD instructions |
-
2019
- 2019-12-23 CN CN201911335752.2A patent/CN111178505B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110050267A (zh) * | 2016-12-09 | 2019-07-23 | 北京地平线信息技术有限公司 | 用于数据管理的***和方法 |
CN106940815A (zh) * | 2017-02-13 | 2017-07-11 | 西安交通大学 | 一种可编程卷积神经网络协处理器ip核 |
CN107704921A (zh) * | 2017-10-19 | 2018-02-16 | 北京智芯原动科技有限公司 | 基于Neon指令的卷积神经网络的算法优化方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111178505A (zh) | 2020-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109992743B (zh) | 矩阵乘法器 | |
CN109729734B (zh) | 芯片装置及相关产品 | |
CN110163362B (zh) | 一种计算装置及方法 | |
CN110383300B (zh) | 一种计算装置及方法 | |
CN108205700B (zh) | 神经网络运算装置和方法 | |
US20210182025A1 (en) | Accelerating 2d convolutional layer mapping on a dot product architecture | |
WO2022037257A1 (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
CN110163350B (zh) | 一种计算装置及方法 | |
CN111626413A (zh) | 一种计算装置及方法 | |
CN111047022A (zh) | 一种计算装置及相关产品 | |
CN113762493A (zh) | 神经网络模型的压缩方法、装置、加速单元和计算*** | |
WO2021036729A1 (zh) | 一种矩阵运算方法、运算装置以及处理器 | |
CN114138231B (zh) | 执行矩阵乘法运算的方法、电路及soc | |
US11775808B2 (en) | Neural network computation device and method | |
CN110059809B (zh) | 一种计算装置及相关产品 | |
CN110909872A (zh) | 集成电路芯片装置及相关产品 | |
CN104572588A (zh) | 矩阵求逆处理方法和装置 | |
CN116888591A (zh) | 一种矩阵乘法器、矩阵计算方法及相关设备 | |
CN111178505B (zh) | 卷积神经网络的加速方法和计算机可读存储介质 | |
CN109740730B (zh) | 运算方法、装置及相关产品 | |
CN111079904B (zh) | 深度可分离卷积的加速方法和存储介质 | |
CN112434255A (zh) | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 | |
CN111738429B (zh) | 一种计算装置及相关产品 | |
CN114359683A (zh) | 一种面向文本定位的单内核hog高效异构加速方法 | |
CN111222632A (zh) | 计算装置、计算方法及相关产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |