首页 / 专利库 / 人工智能 / 嵌入式计算 / 深度可分离卷积的加速方法、存储介质及应用

深度可分离卷积的加速方法、存储介质及应用

阅读:421发布:2020-05-08

专利汇可以提供深度可分离卷积的加速方法、存储介质及应用专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种深度可分离卷积的 加速 方法及计算机可读存储介质,包括步骤:计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的 访问 顺序连续存储;计算矩阵卷积所需的寄存器数量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寄存器进行卷积,从而提高深度可分离卷积的计算效率。,下面是深度可分离卷积的加速方法、存储介质及应用专利的具体信息内容。

1.一种深度可分离卷积的加速方法,其特征在于,包括以下步骤:
计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储;
计算矩阵卷积所需的寄存器数量nr,所述nr=k×k+k+rk,其中,k为深度卷积系数大小,rk为k按一个SIMD乘法指令做能完成的向量浮点乘法数量vn向上取整的数量;
判断矩阵卷积所需的寄存器数量nr是否小于等于SIMD寄存器组所能存储的向量浮点乘法数量vn的总数量tn,若是,则使用SIMD寄存器组直接进行深度可分离卷积,若否,则将系数矩阵分割后进行卷积,使每次卷积所需的寄存器数量为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。
2.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,所述“将系数矩阵分割后进行卷积”包括步骤:
将系数矩阵分割成mk份,每次最多处理nk行,并使mk×nk小于等于k,以及使tr取小于tn的最大值,所述tr=k×nk+nk+rk;其中,所述mk为系数矩阵分割的份数,nk为分割后的矩阵的最大行数,tr为所需的寄存器总数量。
3.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,还包括数据处理步骤:读取卷积结果数据,对卷积结果数据进行激活处理,存储处理后的卷积数据。
4.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,所述步骤“计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储”包括:
分配所述输入/输出数据的索引号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为输入子矩阵的行数量。
5.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,若CPU处理器具有
32个SIMD寄存器,且每个SIMD寄存器可以存储4个浮点数时,若系数矩阵为5X5矩阵,则将系数矩阵5X5矩阵分割成4X5矩阵和1X5矩阵分别进行深度可分离卷积;若系数矩阵为7X7矩阵,则将系数矩阵7X7分割成3个2X7矩阵和1个1X7矩阵分别进行深度可分离卷积。
6.根据权利要求1所述的深度可分离卷积的加速方法,其特征在于,所述CPU处理器为嵌入式设备的CPU处理器。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至6任一项所述的步骤。
8.一种深度可分离卷积的加速方法的应用,其特征在于:所述深度可分离卷积的加速方法应用于深度计算引擎,所述深度可分离卷积的加速方法为权利要求1至6任一所述的深度可分离卷积的加速方法。
9.一种深度可分离卷积的加速方法的应用,其特征在于:所述深度可分离卷积的加速方法的深度计算引擎,结合人体骨骼训练模型,应用于人体骨骼识别,所述深度可分离卷积的加速方法为权利要求1至6任一所述的深度可分离卷积的加速方法。

说明书全文

深度可分离卷积的加速方法、存储介质及应用

技术领域

[0001] 本发明涉及神经网络卷积技术领域,特别是涉及一种深度可分离卷积的加速方法、计算机可读存储介质及应用。

背景技术

[0002] 卷积计算应用于计算机视觉各领域,随着深度卷积网络的复杂性不断提高,计算量也随之增大,从而导致深度卷积神经网络硬件计算能要求非常高。而嵌入式设备上的计算能力有限,很难达到通用计算机的计算效果。
[0003] 随着嵌入式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提供了更多的寄存器,使其在计算中具有更高的计算效率。
[0004] 随着大量嵌入式应用需求的不断增多,轻量级的神经网络结构也不断的被开发出来。这种轻量级的神经网络结构通常是将多维卷积分解为两次1X1卷积和一次深度可分离卷积,其中1X1的卷积计算与矩阵乘法计算基本一致,因此能够在计算精度略微下降的前提下,在计算量上降低几个数量级。目前一些大的公司都已经推出了开源的深度卷积计算框架,比如小米的MACE、阿里的MNN。然而现有的轻量级的神经网络结构都以GPU或DSP为主,在最广泛使用的CPU上应用时占用巨大的CPU资源,虽然CPU的计算能力变强,但在处理神经网络卷积,特别是深度可分离卷积时,计算时间相对GPU或DSP仍然很慢。
[0005] 目前的卷积计算一般应用于深度计算引擎,并与各种训练模型结合,实现人体骨骼识别、物品识别、人员识别等。专利号为CN201810601486.2,专利名称为《一种基于单目视觉、从动作识别身份的方法》,其公开了基于卷积神经网络构建了人体骨骼关键点的检测模型,利用提取的人体骨骼点点坐标序列对基于LSTM的神经网路匹配模型进行训练,使得训练的基于LSTM的神经网路匹配模型具备跨视的动作识别能力。在识别过程中,利用训练好的人体骨骼点二维坐标检测模型对单目视觉视频和已注册动作视频序列进行人体骨骼点二维坐标序列提取,再通过基于LSTM的神经网路匹配模型进行特征相似度计算,进而对测试的动作视频中人的身份进行识别,在跨视角动作识别时具有较高的准确度。该方法可被广泛应用与配备视频监控的场景,如:机场及超市的安全监控,人员识别,罪犯检测等。

发明内容

[0006] 为此,需要提供一种深度可分离卷积的加速方法,用于现有技术中通过CPU计算深度可分离卷积计算效率低的技术问题。
[0007] 为实现上述目的,发明人提供了一种深度可分离卷积的加速方法,该深度可分离卷积的加速方法包括以下步骤:
[0008] 计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储;
[0009] 计算矩阵卷积所需的寄存器数量nr,所述nr=k×k+k+rk,其中,k为深度卷积系数大小,rk为k按一个SIMD乘法指令做能完成的向量浮点乘法数量vn向上取整的数量;
[0010] 判断矩阵卷积所需的寄存器数量nr是否小于等于SIMD寄存器组所能存储向量浮点乘法数量vn的总数量tn,若是,则使用SIMD寄存器组直接进行深度可分离卷积,若否,则将系数矩阵分割成mk份,每次最多处理nk行,并使mk×nk小于等于k,以及使tr取小于tn的最大值,其中,所述tr=k×nk+nk+rk;其中,所述mk为系数矩阵分割的份数,nk为分割后的矩阵的最大行数,tr为所需的寄存器总数量。
[0011] 进一步的,还包括数据处理步骤:读取卷积结果数据,对卷积结果数据进合并激活处理,存储处理后的卷积数据。
[0012] 进一步的,所述步骤“计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储”包括:
[0013] 分配所述输入/输出数据的索引号IDX,IDX=Y×W+X,W为N通道的卷积输入/输出浮点数据的宽度,Y为卷积输入/输出浮点数据位于通道的行数,X为卷积输入/输出浮点数据位于通道的列数,COLS为通道组大小;
[0014] 对N通道的卷积输入/输出数据进行分组;
[0015] 根据公式(IDX/L)×L×COLS+(S/vn)×L×vn+(IDX%L)×vn+(S%vn),计算卷积输入/输出浮点数据的排列,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储,其中,S为数据在N通道中所在的通道数;L为输入子矩阵的行数量。
[0016] 进一步的,若CPU处理器具有32个SIMD寄存器,且每个SIMD寄存器可以存储4个浮点数时,若系数矩阵为5X5矩阵,则将系数矩阵5X5矩阵分割成4X5矩阵和1X5矩阵分别进行深度可分离卷积,若系数矩阵为7X7矩阵,则将系数矩阵7X7分割成3个2X7矩阵和1个1X7矩阵分别进行深度可分离卷积。
[0017] 进一步的,所述CPU处理器为嵌入式设备的CPU处理器。
[0018] 为解决上述技术问题,本发明还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,所述程序被处理器执行时实现如以上任一项技术方案所述的步骤。
[0019] 为解决上述技术问题,本发明还提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法应用于深度计算引擎,所述深度可分离卷积的加速方法为以上任一技术方案所述的深度可分离卷积的加速方法。
[0020] 为解决上述技术问题,本发明还提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法的深度计算引擎,结合人体骨骼训练模型,应用于人体骨骼识别,所述深度可分离卷积的加速方法为以上任一技术方案所述的深度可分离卷积的加速方法。
[0021] 区别于现有技术,上述技术方案在进行深度可分离卷积时,计算深度可分离卷积的输入/输出数据的排序,使所述输入/输出数据在内存中按卷积时的访问顺序连续存储,可提高缓存利用率和SDRAM访问效率,降低加载存储指令的内存访问停顿;并且,上述技术方案根据可以根据深度可分离卷积系数矩阵的大小,判断是否进行分割处理,若不进行分割处理,则可以通过同时计算多行多列多通道的深度可分离卷积数据,可以最大限度的使用SIMD寄存器,从而降低加载存储指令,进而提高计算时的乘累加指令比例,达到提高深度可分离卷积计算效率的效果。若进行分割处理,则可以有效避免计算时所需的SIMD寄存器超出SIMD寄存器数量,而导致计算时需要大量的临时存储所引起计算效率下降,并通过使分割后的计算所需SIMD寄存器数量为小于或等于SIMD寄存器总数量,并且分割后的计算所需SIMD寄存器数量最大,这样可以最大限度使用SIMD寄存器进行深度可分离卷积,从而降低加载存储指令,进而提高计算时的乘累加指令比例,达到提高深度可分离卷积计算效率的效果。附图说明
[0022] 图1为具体实施方式所述深度可分离卷积的加速方法的流程图
[0023] 图2为具体实施方式3X3矩阵度可分离卷积计算方法的流程图;
[0024] 图3为具体实施方式5X5矩阵度可分离卷积计算方法的流程图;
[0025] 图4为具体实施方式7X7矩阵度可分离卷积计算方法的总流程图;
[0026] 图5为具体实施方式2X7矩阵度可分离卷积计算方法的流程图;
[0027] 图6为具体实施方式1X7矩阵度可分离卷积计算方法的流程图;
[0028] 图7为具体实施方式计算机可读存储介质的模图;
[0029] 附图标记说明:
[0030] 700、计算机可读存储介质;

具体实施方式

[0031] 为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
[0032] ROUNDUP8:为向上取整操作,例如ROUNDUP8(X)表示对X进行向上按8取整操作;
[0033] 寄存器:指NEON的SIMD寄存器;
[0034] 计算:指32位单精度浮点计算;一个SIMD寄存器可以存储4个单精度浮点数;
[0035] IDX/L:是指IDX对L进行除法运算,并取整。
[0036] IDX%L:是指IDX对L进行取余数运算。
[0037] 请参阅图1至图7,本实施例提供了一种深度可分离卷积的加速方法。图1所示,该深度可分离卷积的加速方法包括以下步骤:
[0038] 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为输入子矩阵的行数量。
[0039] 由于在后述步骤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通道的矩阵输入输出顺序排列,最后将所有分组的索引号顺序排列。
[0040] 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寄存器后将数据存储回内存。
[0041] S103、判断矩阵卷积所需的寄存器数量nr是否小于等于SIMD寄存器组所能存储的向量浮点乘法数量vn的总数量tn,若是,则使用SIMD寄存器组直接进行深度可分离卷积,若否,则将系数矩阵分割后进行卷积,使每次卷积所需的寄存器数量为小于或等于CPU处理器的SIMD寄存器数量tn的最大值。
[0042] 具体的,在系数矩阵分割后进行卷积时,将系数矩阵分割成mk份,每次最多处理nk行,并使mk×nk小于等于k,以及使tr取小于tn的最大值,所述tr=k×nk+nk+rk;其中,所述mk为系数矩阵分割的份数,nk为分割后的矩阵的最大行数,tr为所需的寄存器总数量。在该实施方式中,tn为SIMD寄存器的最大值,通过本发明上述方法对系数矩阵进行分割,从而使分割得到的子矩阵的深度可分离卷积计算所需的最大SIMD寄存器数量tr小于tn。因此,本实施例最大限度使用SIMD寄存器进行深度可分离卷积,保证深度可分离卷积的计算效率。
[0043] 以下以ARM64处理器执行3X3矩阵、5X5矩阵以及7X7的深度可分离卷积为例,对本发明进行具体说明,其中,ARM64处理器具有32个SIMD寄存器。如图2所示,为3X3矩阵深度可分离卷积的流程图。由于3X3矩阵深度可分离卷积所需要的SIMD寄存器组小于32个,因此无需将3X3矩阵分割即可直接进行深度可分离卷积计算。
[0044] 首先预设RN=4;所述RN为每次处理的行数量;
[0045] 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通道的输入数据。
[0046] S202.计算TO(R+y,C+x,S)的累加数据,其中0≤y
[0047] S203.对TO(R+y,C-2,S)的数据进行激活处理,并按内存数据格式保存,其中0≤y
[0048] S204.重复S201到S203步骤,直到S等于ROUNDUP4(N)-4,并每重复一次S加4;所述N为通道数;
[0049] S205.重复S201到S204步骤,直到C等于W-1,并每重复一次C加1;所述C为列号,所述W为N通道的卷积输入浮点数据的宽度;
[0050] S206.重复S201到S205以上步骤K次直到K×RN≤H-RN,并每重复一次K加1;所述H为N通道的卷积输入浮点数据的高度;所述K为重复次数;
[0051] S207.调整RN=H-K×RN再次执行S201到S205。
[0052] 本实施方式中,对3X3矩阵深度可分离卷积计算采用了RN行3列4通道的计算组,对于每组计算只需要读取RN+2组数据,输出RN组数据,对于RN等于4的情况,每个计算组需要计算4×3×9/4条NEON乘累加指令,总的SIMD寄存器数量不超过32个,其加载存储指令需要2×4+2,其乘累加指令的比率达到了27/(27+10+其余指令数目)。
[0053] 而现有方法中,3X3矩阵深度可分离卷积一般每计算一组输出数据需要其附近的9组输入数据,乘累加指令的比率为1/(9+其余指令数目),其余指令数目一般包含循环控制及内存地址修改指令。
[0054] 由于深度可分离卷积计算的效率与计算时乘累加指令的比例成正比。在本实施例中,计算时乘累加指令的比例为27/(27+10+其余指令数目),而现有3X3矩阵深度可分离卷积计算中,乘累加指令的比率只能在1/(9+其余指令数目)。假设其余指令数目为4(一般情况下为4),采用本实施例方法,则计算时乘累加指令的比率达到0.65,而采用现有方法,其计算乘累加指令的比率为0.04。因此,采用本实施例的3X3矩阵深度可分离卷积计算方法可大大提高计算效率。
[0055] 如图3所示,为5X5矩阵深度可分离卷积的流程图。由于5X5矩阵深度可分离卷积所需要的SIMD寄存器组大于32个,因此需要对5X5矩阵进行分割进行深度可分离卷积计算。
[0056] 在本实施方式中,对5X5的深度可分离卷积计算采用了先计算该输出所需的4X5累加和,再计算1X5累加和,具体如下:
[0057] S301.加载TI(R+y,C,S)的组数据到寄存器,其中y等于-2、-1、1、2;
[0058] S302.计算TO(R,C+x,S)组数据的累加数据,其中-4≤x≤0;
[0059] S303.将TO(R,C-4,S)的数据保存回内存,该部分数据被称为TMP(C-4);所述TMP(C-4)为列号为C-4这一列的临时计算结果;
[0060] S304.重复步骤S301-S303,直到C=W-1;
[0061] S305.加载TMP(C-4)后寄存器;
[0062] S306.加载TI(R,C,S)的组数据到寄存器,计算TO(R+y,C+x,S)组数据的累加数据,其中-4≤x≤0;y=0;
[0063] S307.将TO(R,C-4,S)的数据进行激活处理,处理后按先前所属内存格式保存回内存;
[0064] S308.重复步骤S305-S307,直到C=W-1并每重复一次C加1;
[0065] S309.重复S301到S308步骤,直到S等于ROUNDUP4(N)-4并每重复一次S加4;
[0066] S310.重复S301到S309步骤,直到R等于H-1并每重复一次R加1。
[0067] 在本实施方式中,上述步骤S301-S304完成4X5的深度可分离卷积计算,上述步骤S305-S308完成1X5的深度可分离卷积计算,上述步骤S309-S310完成所有行的计算。
[0068] 本实施例对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寄存器数量。
[0069] 同时,采用本实施例的分割方法,5X5的深度可分离卷积计算的乘累加指令的比率达到25/(25+4+1+2+其他指令数目),而采用现有方法其乘累加指令比率只有1/(25+其他指令数目)。假设其余指令数目为4(一般情况下为4),采用本实施例方法,则计算时乘累加指令的比例达到0.69,而采用现有方法,其乘累加指令的比率为0.03。由于深度可分离卷积计算的效率与计算时乘累加指令的比例成正比,因此,采用本实施例的5X5矩阵深度可分离卷积计算方法可大大提高计算效率。
[0070] 如图4至图6所示,为7X7矩阵深度可分离卷积的流程图。由于7X7矩阵深度可分离卷积所需要的SIMD寄存器组大于32个,因此需要对7X7矩阵进行分割成3个2X7矩阵和一个1X7矩阵进行深度可分离卷积计算。
[0071] 其中,如图5所示,为2X7矩阵度可分离卷积计算方法的流程图。2X7矩阵度可分离卷积计算方法包括步骤:
[0072] S501.加载TI(R+rt,C,S)、TI(R+rb,C,S)的组数据到寄存器,其中rt分别等于-3、-1、2,rb分别等于-2、1、3;
[0073] S502、加载TMP(C-6);
[0074] S503.计算TO(R,C+x,S)组数据的累加数据,其中-6≤x≤0;
[0075] S504.将TO(R,C-6,S)的数据保存回内存,该组数据被称为TMP(C-6);
[0076] S505.重复步骤S501至S504,直到C=W-1,并且每重复一次C加1。
[0077] 如图6所示,为1X7矩阵度可分离卷积计算方法的流程图。1X7矩阵度可分离卷积计算方法包括步骤:
[0078] S601.加载TI(R,C,S)的组数据到寄存器;
[0079] S602.加载TMP(C-6)后寄存器;
[0080] S603.计算TO(R,C+x,S)组数据的累加数据,其中-6≤x≤0;
[0081] S604.将TO(R,C-6,S)的数据进行激活处理;
[0082] S605.处理后按先前所属内存格式保存回内存;
[0083] S606.重复以上步骤S601到S605,直到C等于W-1并且每重复一次C加1。
[0084] 图4为7X7矩阵总深度可分离卷积的总流程图。
[0085] S401.清零临时存储TMP(C);
[0086] S402.设置rt=-3,rb=-2,并按2X7子流程处理;
[0087] S403.设置rt=-1,rb=1,并按2X7子流程处理;
[0088] S404.设置rt=2,rb=3,并按2X7子流程处理;
[0089] S405.按1X7子流程处理;
[0090] S406.重复以上步骤S401到S405直到S等于ROUNDUP4(N)-4,且没重复一次S加4;
[0091] S407.重复以上步骤直到R等于H-1,且每重复一次R加1。
[0092] 本实施方式中,对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个。
[0093] 同时,采用本实施例的方法,乘累加的指令比率达到了49/(49+7+6+1+其他指令数目),而一般的7X7深度卷积滤波的乘累加指令比率只有1/(49+其他指令数目)。假设其余指令数目为4(一般情况下为4),采用本实施例方法,则计算时乘累加指令的比例达到0.73,而采用现有方法,其乘累加指令的比率为0.02。由于深度可分离卷积计算的效率与计算时乘累加指令的比例成正比,因此,采用本实施例的7X7矩阵深度可分离卷积计算方法可大大提高计算效率。
[0094] 在另一实施方式中,所述深度可分离卷积的加速方法还包括数据处理步骤:读取卷积结果数据,对卷积结果数据进行激活处理,存储处理后的卷积数据。深度可分离卷积常用的激活操作,不需要进行归一化,从而可减少数据存取次数和时间,提高数据处理效率。
[0095] 如图7所示,在另一实施方式中,还提供了一种计算机可读存储介质700,该计算机可读存储介质上存储有计算机程序,所述程序被处理器执行时实现如以上任一项实施方式所述的步骤。
[0096] 在另一实施方式中,提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法还可以应用于深度计算引擎,所述深度可分离卷积的加速方法为以上任一实施方式方案所述的深度可分离卷积的加速方法。
[0097] 在另一实施方式中,提供了一种深度可分离卷积的加速方法的应用,所述深度可分离卷积的加速方法的深度计算引擎,结合人体骨骼训练模型,可以应用于人体骨骼识别,所述深度可分离卷积的加速方法为以上任一实施方式方案所述的深度可分离卷积的加速方法。
[0098] 需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈