CN111079904B - 深度可分离卷积的加速方法和存储介质 - Google Patents
深度可分离卷积的加速方法和存储介质 Download PDFInfo
- Publication number
- CN111079904B CN111079904B CN201911336362.7A CN201911336362A CN111079904B CN 111079904 B CN111079904 B CN 111079904B CN 201911336362 A CN201911336362 A CN 201911336362A CN 111079904 B CN111079904 B CN 111079904B
- Authority
- CN
- China
- Prior art keywords
- convolution
- matrix
- data
- depth separable
- input
- 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 54
- 230000001133 acceleration Effects 0.000 title claims abstract description 28
- 239000011159 matrix material Substances 0.000 claims abstract description 83
- 238000012545 processing Methods 0.000 claims abstract description 19
- 230000004913 activation Effects 0.000 claims description 3
- 238000004590 computer program Methods 0.000 claims description 3
- 238000004364 calculation method Methods 0.000 abstract description 66
- 238000013528 artificial neural network Methods 0.000 description 9
- 229910052754 neon Inorganic materials 0.000 description 6
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000003213 activating effect Effects 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 4
- 238000012549 training Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 235000009421 Myristica fragrans Nutrition 0.000 description 1
- 244000062793 Sorghum vulgare Species 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000001914 filtration 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
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 235000019713 millet Nutrition 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation 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/30098—Register arrangements
-
- 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]
-
- 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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种深度可分离卷积的加速方法和存储介质,包括步骤:计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储;计算矩阵卷积所需的寄存器数量nr,nr=k×k+k+rk,其中,k为深度卷积系数大小,rk为k按vn向上取整的数量;判断矩阵卷积所需的寄存器数量nr是否小于等于SIMD寄存器组所能存储的vn数量tn,若是,则使用SIMD寄存器组直接进行深度可分离卷积,若否,则将系数矩阵分成mk份,每次处理nk行,使mk×nk小于等于k,以及使tr取小于tn的最大值,其中,所述tr=k×nk+nk+rk。本发明可降低加载存储指令的内存访问停顿,以及最大限度使用SIMD寄存器进行卷积,从而提高深度可分离卷积的计算效率。
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计算深度可分离卷积计算效率低的技术问题。
为实现上述目的,发明人提供了一种深度可分离卷积的加速方法,该深度可分离卷积的加速方法包括以下步骤:
计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储;
计算矩阵卷积所需的寄存器数量nr,所述nr=k×k+k+rk,其中,k为深度卷积系数大小,rk为k按一个SIMD乘法指令做能完成的向量浮点乘法数量vn向上取整的数量;
判断矩阵卷积所需的寄存器数量nr是否小于等于SIMD寄存器组所能存储向量浮点乘法数量vn的总数量tn,若是,则使用SIMD寄存器组直接进行深度可分离卷积,若否,则将系数矩阵分割成mk份,每次最多处理nk行,并使mk×nk小于等于k,以及使tr取小于tn的最大值,其中,所述tr=k×nk+nk+rk;其中,所述mk为系数矩阵分割的份数,nk为分割后的矩阵的最大行数,tr为所需的寄存器总数量。
进一步的,还包括数据处理步骤:读取卷积结果数据,对卷积结果数据进合并激活处理,存储处理后的卷积数据。
进一步的,所述步骤“计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储”包括:
分配所述输入/输出数据的索引号IDX,IDX=Y×W+X,W为N通道的卷积输入/输出浮点数据的宽度,Y为卷积输入/输出浮点数据位于通道的行数,X为卷积输入/输出浮点数据位于通道的列数,COLS为通道组大小;
对N通道的卷积输入/输出数据进行分组;
根据公式(IDX/L)×L×COLS+(S/vn)×L×vn+(IDX%L)×vn+(S%vn),计算卷积输入/输出浮点数据的排列,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储,其中,S为数据在N通道中所在的通道数;L为输入子矩阵的行数量。
进一步的,若CPU处理器具有32个SIMD寄存器,且每个SIMD寄存器可以存储4个浮点数时,若系数矩阵为5X5矩阵,则将系数矩阵5X5矩阵分割成4X5矩阵和1X5矩阵分别进行深度可分离卷积,若系数矩阵为7X7矩阵,则将系数矩阵7X7分割成3个2X7矩阵和1个1X7矩阵分别进行深度可分离卷积。
进一步的,所述CPU处理器为嵌入式设备的CPU处理器。
为解决上述技术问题,本发明还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,所述程序被处理器执行时实现如以上任一项技术方案所述的步骤。
为解决上述技术问题,本发明还提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法应用于深度计算引擎,所述深度可分离卷积的加速方法为以上任一技术方案所述的深度可分离卷积的加速方法。
为解决上述技术问题,本发明还提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法的深度计算引擎,结合人体骨骼训练模型,应用于人体骨骼识别,所述深度可分离卷积的加速方法为以上任一技术方案所述的深度可分离卷积的加速方法。
区别于现有技术,上述技术方案在进行深度可分离卷积时,计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储,可提高缓存利用率和SDRAM访问效率,降低加载存储指令的内存访问停顿;并且,上述技术方案根据可以根据深度可分离卷积系数矩阵的大小,判断是否进行分割处理,若不进行分割处理,则可以通过同时计算多行多列多通道的深度可分离卷积数据,可以最大限度的使用SIMD寄存器,从而降低加载存储指令,进而提高计算时的乘累加指令比例,达到提高深度可分离卷积计算效率的效果。若进行分割处理,则可以有效避免计算时所需的SIMD寄存器超出SIMD寄存器数量,而导致计算时需要大量的临时存储所引起计算效率下降,并通过使分割后的计算所需SIMD寄存器数量为小于或等于SIMD寄存器总数量,并且分割后的计算所需SIMD寄存器数量最大,这样可以最大限度使用SIMD寄存器进行深度可分离卷积,从而降低加载存储指令,进而提高计算时的乘累加指令比例,达到提高深度可分离卷积计算效率的效果。
附图说明
图1为具体实施方式所述深度可分离卷积的加速方法的流程图;
图2为具体实施方式3X3矩阵度可分离卷积计算方法的流程图;
图3为具体实施方式5X5矩阵度可分离卷积计算方法的流程图;
图4为具体实施方式7X7矩阵度可分离卷积计算方法的总流程图;
图5为具体实施方式2X7矩阵度可分离卷积计算方法的流程图;
图6为具体实施方式1X7矩阵度可分离卷积计算方法的流程图;
图7为具体实施方式计算机可读存储介质的模块图;
附图标记说明:
700、计算机可读存储介质;
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
ROUNDUP8:为向上取整操作,例如ROUNDUP8(X)表示对X进行向上按8取整操作;
寄存器:指NEON的SIMD寄存器;
计算:指32位单精度浮点计算;一个SIMD寄存器可以存储4个单精度浮点数;
IDX/L:是指IDX对L进行除法运算,并取整。
IDX%L:是指IDX对L进行取余数运算。
请参阅图1至图7,本实施例提供了一种深度可分离卷积的加速方法。图1所示,该深度可分离卷积的加速方法包括以下步骤:
S101、计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储。由于1X1卷积处理为深度可分离卷积前级处理,计算1X1卷积通常会采样分块方式进行计算,通常可以将1X1卷积输入输出数据分成具有相同行数相同列数的子块。在对输入浮点数据进行排序时,先为输入数据分配索引号IDX,对于一个浮点数据位于第C通道,第Y行,第X列,令该数据的索引号为IDX=Y×W+X。然后根据公式:(IDX/L)×L×COLS+(S/vn)×L×vn+(IDX%L)×vn+(S%vn),对输入浮点数据进行排序,其中,W为N通道的卷积输入浮点数据的宽度,H为N通道的卷积输入浮点数据的高度,COLS为通道组大小,S为数据在N通道中所在的通道数;L为输入子矩阵的行数量。
由于在后述步骤S103中,对矩阵的深度可分离卷积计算是需要按照多层循环进行的,第一层循环中计算输入浮点数据的IDX分组,在第二层循环中计算N通道分组,在第三层循环中计算矩阵的乘法。因此本实施方式中,按公式:(IDX/L)×L×COLS+(S/vn)×L×vn+(IDX%L)×vn+(S%vn)对输入浮点数据排列,可使每次读写的数据连续存储,即使每次读写的数据尽量排列在一起,这样可以使所述输入/输出数据在内存中连续存储,可提高缓存利用率和SDRAM访问效率,降低加载存储指令的内存访问停顿,减小内存访问时间。所述公式:(IDX/L)×L×COLS+(S/vn)×L×vn+(IDX%L)×vn+(S%vn)的具体执行步骤为:以一条SMID乘累加指令做能计算的单精度浮点数数量为通道分组数(在本实施方式中此数量为4),将总共的通道数量N按通道分组数进行分组,并顺序排列,然后将数据的索引号IDX,按一次子矩阵乘法的行数进行分组L(本实施中使用ARM64处理器,其具有32个SIMD寄存器,并且每个寄存器可以存储4个浮点数时,在本实施方式中L为8),然后将N通道的矩阵输入输出顺序排列,最后将所有分组的索引号顺序排列。
S102、计算矩阵卷积所需的寄存器数量nr,所述nr=k×k+k+rk,其中,k为深度卷积系数大小,rk为k按一个SIMD乘法指令做能完成的向量浮点乘法数量vn向上取整的数量。其中,nr=k×k+k+rk的具体含义是指需要存储k×k个系数,同时需要加载一列高度为k的数据,同时需要rk个单元用于存储处理结果。深度卷积系数大小k与系数矩阵大小相关,系数矩阵大小等于k×k×vn,因此根据系数矩阵大小即可确定深度卷积系数大小k。rk为k按vn向上取整所得的数量,例如,k等于3,vn等于4时,则rk等于4(即3向上按vn取整即等于4),当k等于5,vn等于4时,则rk等于8(即5向上按vn取整即等于8)。rk的作用在于循环使用rk个SIMD寄存器用于存储计算结果,每当计算完VN点的深度可分离卷积数据,则将数据存储在一个SIMD寄存器中,当完成存储rk个SIMD寄存器后将数据存储回内存。
S103、判断矩阵卷积所需的寄存器数量nr是否小于等于SIMD寄存器组所能存储的向量浮点乘法数量vn的总数量tn,若是,则使用SIMD寄存器组直接进行深度可分离卷积,若否,则将系数矩阵分割后进行卷积,使每次卷积所需的寄存器数量为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。
具体的,在系数矩阵分割后进行卷积时,将系数矩阵分割成mk份,每次最多处理nk行,并使mk×nk小于等于k,以及使tr取小于tn的最大值,所述tr=k×nk+nk+rk;其中,所述mk为系数矩阵分割的份数,nk为分割后的矩阵的最大行数,tr为所需的寄存器总数量。在该实施方式中,tn为SIMD寄存器的最大值,通过本发明上述方法对系数矩阵进行分割,从而使分割得到的子矩阵的深度可分离卷积计算所需的最大SIMD寄存器数量tr小于tn。因此,本实施例最大限度使用SIMD寄存器进行深度可分离卷积,保证深度可分离卷积的计算效率。
以下以ARM64处理器执行3X3矩阵、5X5矩阵以及7X7的深度可分离卷积为例,对本发明进行具体说明,其中,ARM64处理器具有32个SIMD寄存器。如图2所示,为3X3矩阵深度可分离卷积的流程图。由于3X3矩阵深度可分离卷积所需要的SIMD寄存器组小于32个,因此无需将3X3矩阵分割即可直接进行深度可分离卷积计算。
首先预设RN=4;所述RN为每次处理的行数量;
S201.加载具有相同列号C,且分属RN个连续行R0到RN的组数据从内存到寄存器,其中RN是整数且1≤RN≤4,并同时加载TI(R-1,C,S),TI(R+RN,C,S)到寄存器;其中,所述TI(R-1,C,S)表示第R-1行,第C列,第S通道的输入数据,TI(R+RN,C,S)表示第R+RN行,第C列,第S通道的输入数据。
S202.计算TO(R+y,C+x,S)的累加数据,其中0≤y<RN,-2≤x≤0;所述S为数据在N通道中所在的通道数;TO为输出数据;
S203.对TO(R+y,C-2,S)的数据进行激活处理,并按内存数据格式保存,其中0≤y<RN;
S204.重复S201到S203步骤,直到S等于ROUNDUP4(N)-4,并每重复一次S加4;所述N为通道数;
S205.重复S201到S204步骤,直到C等于W-1,并每重复一次C加1;所述C为列号,所述W为N通道的卷积输入浮点数据的宽度;
S206.重复S201到S205以上步骤K次直到K×RN≤H-RN,并每重复一次K加1;所述H为N通道的卷积输入浮点数据的高度;所述K为重复次数;
S207.调整RN=H-K×RN再次执行S201到S205。
本实施方式中,对3X3矩阵深度可分离卷积计算采用了RN行3列4通道的计算组,对于每组计算只需要读取RN+2组数据,输出RN组数据,对于RN等于4的情况,每个计算组需要计算4×3×9/4条NEON乘累加指令,总的SIMD寄存器数量不超过32个,其加载存储指令需要2×4+2,其乘累加指令的比率达到了27/(27+10+其余指令数目)。
而现有方法中,3X3矩阵深度可分离卷积一般每计算一组输出数据需要其附近的9组输入数据,乘累加指令的比率为1/(9+其余指令数目),其余指令数目一般包含循环控制及内存地址修改指令。
由于深度可分离卷积计算的效率与计算时乘累加指令的比例成正比。在本实施例中,计算时乘累加指令的比例为27/(27+10+其余指令数目),而现有3X3矩阵深度可分离卷积计算中,乘累加指令的比率只能在1/(9+其余指令数目)。假设其余指令数目为4(一般情况下为4),采用本实施例方法,则计算时乘累加指令的比率达到0.65,而采用现有方法,其计算乘累加指令的比率为0.04。因此,采用本实施例的3X3矩阵深度可分离卷积计算方法可大大提高计算效率。
如图3所示,为5X5矩阵深度可分离卷积的流程图。由于5X5矩阵深度可分离卷积所需要的SIMD寄存器组大于32个,因此需要对5X5矩阵进行分割进行深度可分离卷积计算。
在本实施方式中,对5X5的深度可分离卷积计算采用了先计算该输出所需的4X5累加和,再计算1X5累加和,具体如下:
S301.加载TI(R+y,C,S)的组数据到寄存器,其中y等于-2、-1、1、2;
S302.计算TO(R,C+x,S)组数据的累加数据,其中-4≤x≤0;
S303.将TO(R,C-4,S)的数据保存回内存,该部分数据被称为TMP(C-4);所述TMP(C-4)为列号为C-4这一列的临时计算结果;
S304.重复步骤S301-S303,直到C=W-1;
S305.加载TMP(C-4)后寄存器;
S306.加载TI(R,C,S)的组数据到寄存器,计算TO(R+y,C+x,S)组数据的累加数据,其中-4≤x≤0;y=0;
S307.将TO(R,C-4,S)的数据进行激活处理,处理后按先前所属内存格式保存回内存;
S308.重复步骤S305-S307,直到C=W-1并每重复一次C加1;
S309.重复S301到S308步骤,直到S等于ROUNDUP4(N)-4并每重复一次S加4;
S310.重复S301到S309步骤,直到R等于H-1并每重复一次R加1。
在本实施方式中,上述步骤S301-S304完成4X5的深度可分离卷积计算,上述步骤S305-S308完成1X5的深度可分离卷积计算,上述步骤S309-S310完成所有行的计算。
本实施例对5X5的深度可分离卷积计算采用了先计算该输出所需的4X5累加和,再计算1X5累加和。使用ARM64处理器,其具有32个SIMD寄存器,并且每个寄存器可以存储4个浮点数时,对分割后4X5系数矩阵,进行深度可分离卷积计算,计算时需要加载4个SIMD寄存器,存储8个SIMD寄存器,系数需要20个SIMD寄存器,总共需要32个SIMD寄存器,使总的SIMD寄存器使用不超过32个,且最大限度地利用SIMD寄存器。同样的1X5深度可分离卷积计算时,需要1个SIMD寄存器,存储8个SIMD寄存器,系数需要5个SIMD寄存器,总共需要14个SIMD寄存器,未超过总的SIMD寄存器数量。
同时,采用本实施例的分割方法,5X5的深度可分离卷积计算的乘累加指令的比率达到25/(25+4+1+2+其他指令数目),而采用现有方法其乘累加指令比率只有1/(25+其他指令数目)。假设其余指令数目为4(一般情况下为4),采用本实施例方法,则计算时乘累加指令的比例达到0.69,而采用现有方法,其乘累加指令的比率为0.03。由于深度可分离卷积计算的效率与计算时乘累加指令的比例成正比,因此,采用本实施例的5X5矩阵深度可分离卷积计算方法可大大提高计算效率。
如图4至图6所示,为7X7矩阵深度可分离卷积的流程图。由于7X7矩阵深度可分离卷积所需要的SIMD寄存器组大于32个,因此需要对7X7矩阵进行分割成3个2X7矩阵和一个1X7矩阵进行深度可分离卷积计算。
其中,如图5所示,为2X7矩阵度可分离卷积计算方法的流程图。2X7矩阵度可分离卷积计算方法包括步骤:
S501.加载TI(R+rt,C,S)、TI(R+rb,C,S)的组数据到寄存器,其中rt分别等于-3、-1、2,rb分别等于-2、1、3;
S502、加载TMP(C-6);
S503.计算TO(R,C+x,S)组数据的累加数据,其中-6≤x≤0;
S504.将TO(R,C-6,S)的数据保存回内存,该组数据被称为TMP(C-6);
S505.重复步骤S501至S504,直到C=W-1,并且每重复一次C加1。
如图6所示,为1X7矩阵度可分离卷积计算方法的流程图。1X7矩阵度可分离卷积计算方法包括步骤:
S601.加载TI(R,C,S)的组数据到寄存器;
S602.加载TMP(C-6)后寄存器;
S603.计算TO(R,C+x,S)组数据的累加数据,其中-6≤x≤0;
S604.将TO(R,C-6,S)的数据进行激活处理;
S605.处理后按先前所属内存格式保存回内存;
S606.重复以上步骤S601到S605,直到C等于W-1并且每重复一次C加1。
图4为7X7矩阵总深度可分离卷积的总流程图。
S401.清零临时存储TMP(C);
S402.设置rt=-3,rb=-2,并按2X7子流程处理;
S403.设置rt=-1,rb=1,并按2X7子流程处理;
S404.设置rt=2,rb=3,并按2X7子流程处理;
S405.按1X7子流程处理;
S406.重复以上步骤S401到S405直到S等于ROUNDUP4(N)-4,且没重复一次S加4;
S407.重复以上步骤直到R等于H-1,且每重复一次R加1。
本实施方式中,对7X7的深度可分离卷积计算采用的3个2X7与1个1X7的累加。当使用ARM64处理器时,其具有32个SIMD寄存器,并且每个寄存器可以存储4个浮点数时,对分割后2X7系数矩阵,进行深度可分离卷积计算时,需要加载2个SIMD寄存器,存储8个SIMD寄存器,系数需要14个SIMD寄存器,总共需要24个SIMD寄存器,同样的1X7深度可分离卷积计算时,需要加载1个SIMD寄存器,存储需要8个SIMD寄存器,系数需要7个SIMD寄存器,总共需要16个SIMD寄存器。因此,不管2X7系数矩阵的深度可分离卷积计算,还是1X7系数矩阵的深度可分离卷积计算,其使用的总SIMD寄存器使用不超过32个。
同时,采用本实施例的方法,乘累加的指令比率达到了49/(49+7+6+1+其他指令数目),而一般的7X7深度卷积滤波的乘累加指令比率只有1/(49+其他指令数目)。假设其余指令数目为4(一般情况下为4),采用本实施例方法,则计算时乘累加指令的比例达到0.73,而采用现有方法,其乘累加指令的比率为0.02。由于深度可分离卷积计算的效率与计算时乘累加指令的比例成正比,因此,采用本实施例的7X7矩阵深度可分离卷积计算方法可大大提高计算效率。
在另一实施方式中,所述深度可分离卷积的加速方法还包括数据处理步骤:读取卷积结果数据,对卷积结果数据进行激活处理,存储处理后的卷积数据。深度可分离卷积常用的激活操作,不需要进行归一化,从而可减少数据存取次数和时间,提高数据处理效率。
如图7所示,在另一实施方式中,还提供了一种计算机可读存储介质700,该计算机可读存储介质上存储有计算机程序,所述程序被处理器执行时实现如以上任一项实施方式所述的步骤。
在另一实施方式中,提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法还可以应用于深度计算引擎,所述深度可分离卷积的加速方法为以上任一实施方式方案所述的深度可分离卷积的加速方法。
在另一实施方式中,提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法的深度计算引擎,结合人体骨骼训练模型,可以应用于人体骨骼识别,所述深度可分离卷积的加速方法为以上任一实施方式方案所述的深度可分离卷积的加速方法。
需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。
Claims (6)
1.一种深度可分离卷积的加速方法,其特征在于,包括以下步骤:
计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储;
计算矩阵卷积所需的寄存器数量nr,所述nr=k×k+k+rk,其中,k为深度卷积系数大小,rk为k按一个SIMD乘法指令做能完成的向量浮点乘法数量vn向上取整的数量;
判断矩阵卷积所需的寄存器数量nr是否小于等于SIMD寄存器组所能存储的向量浮点乘法数量vn的总数量tn,若是,则使用SIMD寄存器组直接进行深度可分离卷积,若否,则将系数矩阵分割后进行卷积,使每次卷积所需的寄存器数量为小于或等于CPU处理器的SIMD寄存器数量tn的最大值;
所述步骤“计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储”包括:
分配所述输入/输出数据的索引号IDX,IDX=Y×W+X,W为N通道的卷积输入/输出浮点数据的宽度,Y为卷积输入/输出浮点数据位于通道的行数,X为卷积输入/输出浮点数据位于通道的列数,COLS为通道组大小;
对N通道的卷积输入/输出数据进行分组;
根据公式(IDX/L)×L×COLS+(S/vn)×L×vn+(IDX%L)×vn+(S%vn),计算卷积输入/输出浮点数据的排列,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储,其中,S为数据在N通道中所在的通道数;L为输入子矩阵的行数量。
2.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,所述“将系数矩阵分割后进行卷积”包括步骤:
将系数矩阵分割成mk份,每次最多处理nk行,并使mk×nk小于等于k,以及使tr取小于tn的最大值,所述tr=k×nk+nk+rk;其中,所述mk为系数矩阵分割的份数,nk为分割后的矩阵的最大行数,tr为所需的寄存器总数量。
3.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,还包括数据处理步骤:读取卷积结果数据,对卷积结果数据进行激活处理,存储处理后的卷积数据。
4.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,若CPU处理器具有32个SIMD寄存器,且每个SIMD寄存器可以存储4个浮点数时,若系数矩阵为5X5矩阵,则将系数矩阵5X5矩阵分割成4X5矩阵和1X5矩阵分别进行深度可分离卷积;若系数矩阵为7X7矩阵,则将系数矩阵7X7分割成3个2X7矩阵和1个1X7矩阵分别进行深度可分离卷积。
5.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,所述CPU处理器为嵌入式设备的CPU处理器。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911336362.7A CN111079904B (zh) | 2019-12-23 | 2019-12-23 | 深度可分离卷积的加速方法和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911336362.7A CN111079904B (zh) | 2019-12-23 | 2019-12-23 | 深度可分离卷积的加速方法和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111079904A CN111079904A (zh) | 2020-04-28 |
CN111079904B true CN111079904B (zh) | 2023-05-23 |
Family
ID=70316987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911336362.7A Active CN111079904B (zh) | 2019-12-23 | 2019-12-23 | 深度可分离卷积的加速方法和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111079904B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113344200B (zh) * | 2021-06-17 | 2024-05-28 | 阿波罗智联(北京)科技有限公司 | 用于训练可分离卷积网络的方法、路侧设备及云控平台 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1387641A (zh) * | 1999-08-31 | 2002-12-25 | 英特尔公司 | 并行处理器中的多线程执行 |
CN110059798A (zh) * | 2017-11-06 | 2019-07-26 | 畅想科技有限公司 | 开发神经网络中的稀疏性 |
CN110458280A (zh) * | 2019-07-15 | 2019-11-15 | 武汉魅瞳科技有限公司 | 一种适用于移动端的卷积神经网络加速方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10546211B2 (en) * | 2016-07-01 | 2020-01-28 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
-
2019
- 2019-12-23 CN CN201911336362.7A patent/CN111079904B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1387641A (zh) * | 1999-08-31 | 2002-12-25 | 英特尔公司 | 并行处理器中的多线程执行 |
CN110059798A (zh) * | 2017-11-06 | 2019-07-26 | 畅想科技有限公司 | 开发神经网络中的稀疏性 |
CN110458280A (zh) * | 2019-07-15 | 2019-11-15 | 武汉魅瞳科技有限公司 | 一种适用于移动端的卷积神经网络加速方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111079904A (zh) | 2020-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111684473B (zh) | 提高神经网络阵列的性能 | |
EP3373210B1 (en) | Transposing neural network matrices in hardware | |
CN108615072B (zh) | 在硬件中执行平均池化 | |
CA3070972C (en) | Accelerated mathematical engine | |
CN110119809B (zh) | 对神经网络中非对称量化数据执行mac运算的装置和方法 | |
CN111465924B (zh) | 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法 | |
US10489479B1 (en) | Matrix multiplication engine | |
US20190095776A1 (en) | Efficient data distribution for parallel processing | |
CN109858623B (zh) | 用于执行人工神经网络正向运算的装置和方法 | |
EP3836028A1 (en) | Accelerating 2d convolutional layer mapping on a dot product architecture | |
CN110188869B (zh) | 一种基于卷积神经网络算法的集成电路加速计算的方法及系统 | |
CN107680028B (zh) | 用于缩放图像的处理器和方法 | |
CN108845828B (zh) | 一种协处理器、矩阵运算加速方法及系统 | |
CN110796236B (zh) | 多样本多通道卷积神经网络池化的向量化实现方法 | |
CN110874636A (zh) | 一种神经网络模型压缩方法、装置和计算机设备 | |
EP3093757A2 (en) | Multi-dimensional sliding window operation for a vector processor | |
CN106683043B (zh) | 一种多通道光学探测系统的并行图像拼接方法、装置 | |
Kim et al. | Efficient dilated-winograd convolutional neural networks | |
CN111079904B (zh) | 深度可分离卷积的加速方法和存储介质 | |
Limonova et al. | Computational optimization of convolutional neural networks using separated filters architecture | |
CN111178505B (zh) | 卷积神经网络的加速方法和计算机可读存储介质 | |
CN108875547B (zh) | 一种面向资源受限环境的目标跟踪方法及装置 | |
CN112927125B (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN111831207B (zh) | 一种数据处理方法、装置及其设备 | |
CN112712461B (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 |