一种基于软硬件协同加速的神经网络推断方法转让专利

申请号 : CN202010047206.5

文献号 : CN111210019B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 彭析竹梅亚军李俊燊唐鹤

申请人 : 电子科技大学

摘要 :

一种基于软硬件协同加速的神经网络推断方法,首先搭建卷积运算模块、池化运算模块和全连接运算模块并进行配置,再利用配置好的模块搭建神经网络推断系统,其中神经网络包括交替连接的卷积层和池化层以及流水连接的全连接层;然后将训练好的神经网络的参数和输入数据存入神经网络推断系统;最后神经网络推断系统开始工作,在每一个大工作周期的第1个小工作周期将第一输入信号输入到第一层卷积层,在每一个大工作周期的第2个小工作周期将第二输入信号输入到第一层卷积层,每个小工作周期神经网络完成一层运算并将运算结果输入到下一层;第一输入信号和第二输入信号依次经过神经网络的每一层运算后获得第一输入信号和第二输入信号的推断结果。

权利要求 :

1.一种基于软硬件协同加速的神经网络推断方法,所述神经网络包括输入层、N层卷积层、N层池化层、K层全连接层和输出层,其中N和K均为正整数,且 ;

第i层池化层的输入信号是第i层卷积层的输出信号,其输出信号是第i+1层卷积层的输入信号,第1层卷积层的输入信号是输入层的输出信号, ;

第j层全连接层的输入信号是第j‑1层全连接层的输出信号, ;第1层全连接层的输入信号是第N层池化层的输出信号,第K层全连接层的输出信号是输出层的输入信号;

其特征在于,所述软硬件协同加速方法包括如下步骤:

步骤一、搭建所述神经网络所需的卷积运算模块、池化运算模块和全连接运算模块并进行配置;

步骤二、利用所述步骤一搭建的所述卷积运算模块、池化运算模块和全连接运算模块搭建神经网络推断系统的硬件系统;

步骤三、训练所述神经网络,将训练好的所述神经网络的参数和输入数据存入所述神经网络推断系统中进行初始化;

步骤四、所述神经网络推断系统开始工作,在每一个大工作周期中所述神经网络同时处理2个输入数据;设定一个大工作周期中有2N个小工作周期,在每一个大工作周期的第1个小工作周期开始时将第一输入信号输入到所述神经网络的第一层卷积层,在每一个大工作周期的第2个小工作周期开始时将第二输入信号输入到所述神经网络的第一层卷积层,每个小工作周期所述神经网络完成一层运算并将运算结果输入到下一层;所述第一输入信号和第二输入信号依次经过所述神经网络的每一层运算后获得所述第一输入信号和第二输入信号的推断结果;

所述步骤一中在现场可编程逻辑门阵列中搭建所述神经网络所需的卷积运算模块、池化运算模块和全连接运算模块,配置各个模块内部的寄存器,设定每个模块的特征输入、权重和偏置,调整卷积、池化和全连接运算的规模大小;

所述步骤二中在片上系统异构平台上搭建所述神经网络推断系统的硬件系统,所述上系统异构平台包括现场可编程逻辑门阵列和处理器;

所述步骤三中在图形处理器中训练所述神经网络并将训练好的所述神经网络的参数和输入数据存入外部存储设备中,利用所述处理器将所述外部存储设备中存储的数据存入所述神经网络推断系统的存储器中。

说明书 :

一种基于软硬件协同加速的神经网络推断方法

技术领域

[0001] 本发明属于计算机技术领域,具体涉及一种基于软硬件协同加速的神经网络推断方法,能够适用于通用卷积神经网络。

背景技术

[0002] 卷积神经网络是当前人工智能深度学习领域中最为重要的模型,被广泛应用在图像分类、识别和理解等场景中,并获得了很高的准确度。1998年,LeCun等人提出了由卷积层和下采样层组成的卷积神经网络(LeNet),形成了现代卷积神经网络的雏形。2012年,在ImageNet大规模识别挑战赛中,Krizhevsky等人采用ReLU作为激活函数搭建了AlexNet卷积神经网络,获得了分类准确度为84.7%的优异成绩,成为卷积神经网络发展的重要转折点。
[0003] 标准的卷积神经网络由输入层、交替的卷积层和池化层、全连接层以及输出层构成。交替的卷积层和池化层主要用于提取输入图像的高维度特征,然后将提取到的特征输入到全连接层进行分类,最终决定输入图像所属分类结果的可能性。考虑到卷积神经网络涉及大量卷积、池化等大规模计算,导致计算过程消耗大量存储和计算资源。因此,传统的通用处理器无法为卷积神经网络提供足够的算力,运算效率非常低,不适合作为卷积神经网络的计算平台,需要使用高算力的硬件平台提升运算效率。
[0004] 目前主流的卷积神经网络训练过程是在GPU平台上实现的,GPU采用单指令多数据架构,擅长处理规则的并行计算,具备大量浮点运算单元和高带宽片内/片外存储器,提供了非常高的峰值算力。然而在实际的应用场景中,通常是将在GPU上训练好的卷积神经网络用于实现推断任务,此时硬件平台的功耗、灵活性和实时性等成为关键因素。
[0005] FPGA是一种可以根据不同算法进行硬件电路搭建的平台,具有现场可编程、硬件资源丰富、开发周期短等特点。与GPU相比,FPGA具有更强的灵活性、更高的性能功耗比以及更好的实时性等优点,因此FPGA硬件平台是加速卷积神经网络推断任务的最佳平台。
[0006] 目前用于实现卷积神经网络推断任务的主流硬件平台不是单一的FPGA,而是集成了CPU与FPGA的SoC异构系统。该异构系统充分利用了CPU灵活的控制能力和FPGA强大的计算能力,为卷积神经网络的实际应用提供了非常好的平台。
[0007] 现阶段,大部分加速卷积神经网络推断过程的设计都是将重点放在FPGA侧进行硬件加速,很少有加速设计提出能够进行软件加速的,更没有对软硬件系统整体进行协同加速的。

发明内容

[0008] 针对上述传统神经网络的推断系统只对硬件进行加速的不足之处,本发明提出一种基于软硬件协同加速的神经网络推断方法,对神经网络的推断系统进行了软硬件两方面协同加速的优化和改进,能够在节省硬件资源的情况下加速卷积神经网络的推断过程,适用于卷积神经网络和其他同样具有交替连接的卷积层和池化层以及流水连接的全连接层的结构的神经网络。
[0009] 本发明采用的技术方案如下:
[0010] 一种基于软硬件协同加速的神经网络推断方法,所述神经网络包括输入层、N层卷积层、N层池化层、K层全连接层和输出层,其中N和K均为正整数,且N≥K;
[0011] 第i层池化层的输入信号是第i层卷积层的输出信号,其输出信号是第i+1层卷积层的输入信号,第1层卷积层的输入信号是输入层的输出信号,i∈[1,N];
[0012] 第j层全连接层的输入信号是第j‑1层全连接层的输出信号,j∈[2,K];第1层全连接层的输入信号是第N层池化层的输出信号,第K层全连接层的输出信号是输出层的输入信号;
[0013] 所述软硬件协同加速方法包括如下步骤:
[0014] 步骤一、搭建所述神经网络所需的卷积运算模块、池化运算模块和全连接运算模块并进行配置;
[0015] 步骤二、利用所述步骤一搭建的所述卷积运算模块、池化运算模块和全连接运算模块搭建神经网络推断系统的硬件系统;
[0016] 步骤三、训练所述神经网络,将训练好的所述神经网络的参数和输入数据存入所述神经网络推断系统中进行初始化;
[0017] 步骤四、所述神经网络推断系统开始工作,在每一个大工作周期中所述神经网络同时处理2个输入数据;设定一个大工作周期中有2N个小工作周期,在每一个大工作周期的第1个小工作周期开始时将第一输入信号输入到所述神经网络的第一层卷积层,在每一个大工作周期的第2个小工作周期开始时将第二输入信号输入到所述神经网络的第一层卷积层,每个小工作周期所述神经网络完成一层运算并将运算结果输入到下一层;所述第一输入信号和第二输入信号依次经过所述神经网络的每一层运算后获得所述第一输入信号和第二输入信号的推断结果。
[0018] 具体的,所述步骤一中在现场可编程逻辑门阵列中搭建所述神经网络所需的卷积运算模块、池化运算模块和全连接运算模块,配置各个模块内部的寄存器,设定每个模块的特征输入、权重和偏置,调整卷积、池化和全连接运算的规模大小。
[0019] 具体的,所述步骤二中在片上系统异构平台上搭建所述神经网络推断系统的硬件系统,所述上系统异构平台包括现场可编程逻辑门阵列和处理器。
[0020] 具体的,所述步骤三中在图形处理器中训练所述神经网络并将训练好的所述神经网络的参数和输入数据存入外部存储设备中,利用所述处理器将所述外部存储设备中存储的数据存入所述神经网络推断系统的存储器中。
[0021] 本发明的有益效果为:本发明提出的推断方法能够适用于不同深度的神经网络,具有通用性;本发明对各个模块进行了复用,提高了硬件资源的利用率;本发明能够使用FPGA实现计算密集型任务,提高了系统的运算性能;本发明实现了软硬件协同加速,进一步提高了系统的运算性能。

附图说明

[0022] 图1为本发明提出的一种基于软硬件协同加速的神经网络推断方法实现软硬件协同加速的流程图。
[0023] 图2为本发明提出的一种基于软硬件协同加速的神经网络推断方法适用的一种卷积神经网络的示例结构图。
[0024] 图3为本发明提出的一种基于软硬件协同加速的神经网络推断方法中构建的通用卷积神经网络推断系统的硬件架构图。
[0025] 图4为本发明提出的一种基于软硬件协同加速的神经网络推断方法实现软硬件协同加速完成推断的时序图。

具体实施方式

[0026] 下面结合具体附图和实施例对本发明做进一步详细说明。
[0027] 本发明提出的神经网络推断方法,适用于卷积神经网络或者其他同样具有交替连接的卷积层和池化层以及流水连接的全连接层的结构的神经网络。神经网络包括输入层、N层卷积层、N层池化层、K层全连接层和输出层,其中N和K均为正整数,且N≥K;第i层池化层的输入信号是第i层卷积层的输出信号,其输出信号是第i+1层卷积层的输入信号,第1层卷积层的输入信号是输入层的输出信号,i∈[1,N];第j层全连接层的输入信号是第j‑1层全连接层的输出信号,j∈[2,K];第1层全连接层的输入信号是第N层池化层的输出信号,第K层全连接层的输出信号是输出层的输入信号。以N和K为2为例进行说明,如图2所示,本实施例中卷积神经网络包括依次连接的第1层卷积层、第1层池化层、第2层卷积层、第2层池化层、第1层全连接层和第2层全连接层。
[0028] 本发明提出的神经网络推断方法包括以下步骤。
[0029] 步骤1)模块搭建阶段:在FPGA(Field Pragramming Gate Array,现场可编程逻辑门阵列)中搭建卷积神经网络所需的卷积运算模块、池化运算模块和全连接运算模块,设计的卷积运算模块、池化运算模块和全连接运算模块都是通用的,可以通过总线配置各个模块内部的寄存器,设定特征输入、权重和偏置等运算对象以及调整卷积、池化和全连接运算的规模大小。
[0030] 步骤2)平台搭建阶段:基于Arm(Arm公司的一种通用微处理器)和FPGA组成的SoC(System‑on‑Chip,片上系统)异构平台,搭建以卷积、池化和全连接运算模块为核心的通用卷积神经网络硬件系统,为进行神经网络的正向推断任务做准备。
[0031] 步骤3)数据准备阶段:首先将GPU(Graphics Processing Unit,图形处理器)上训练好的卷积神经网络的参数和输入数据导出到SD卡上,然后Arm将SD卡上的网络参数和输入数据初始化到SoC系统中的DDR存储器(Double Data Rate Synchronous Dynamic Random Access Memory双倍速率同步动态随机存储器)中,以备后续使用。
[0032] 其中SD卡是SoC片上系统的外部设备,可以通过Arm微处理器对SD卡进行读写操作。在本阶段也可以利用PC机通过PCIe直接将网络参数和输入数据初始化到SoC片上系统的DDR存储器中,或者PC机通过PCIe直接将网络参数和输入数据发送至SoC片上系统的内部缓存中。使用FPGA作为卷积、池化和全连接等计算密集型算法的实现平台,缓解通用处理器的计算压力,通用处理器只需要负责任务调度和配置模块参数。
[0033] 图2是本实施例中用到的卷积神经网络结构图,网络结构具体描述如下:本实施例中,网络的输入是宽度和高度都为28个像素点的手写数字图片,结构是由第1层卷积运算、第1层池化运算、第2层卷积运算、第2层池化运算、第1层全连接运算和第2层全连接运算组成。第1层卷积运算由16个kernel(卷积核)组成,其中每个kernel的大小是通道数为1、高度和宽度为3,卷积运算的stride(步长)和padding(边缘填充)都为1,得到的特征图大小是通道数为16、高度和宽度都为28。第1层池化运算的kernel高度和宽度都为2、stride为2以及padding为0,得到的特征图大小是通道数为16、高度和宽度都为14。第2层卷积运算由32个kernel组成,其中每个kernel的大小是通道数为1、高度和宽度为3,卷积运算的stride和padding都为1,得到的特征图大小是通道数为32、高度和宽度都为14。第2层池化运算的kernel高度和宽度都为2、stride为2以及padding为0,得到的特征图大小是通道数为32、高度和宽度都为7,因此输入到全连接层的数据有1568个。第1层全连接运算有128个神经元节点,因此权重规模是1568x128的二维矩阵,偏置规模是128的一维矩阵。第2层全连接运算有10个神经元节点,因此权重规模是128x10的二维矩阵,偏置规模是10的一维矩阵,得到的即为十分类的结果。
[0034] 图3为本实施例中在SoC系统上搭建通用卷积神经网络推断系统的硬件架构图,架构细节描述如下:本实施例中在FPGA中设计通用的卷积、池化和全连接运算模块,然后集成到SoC异构系统中,形成完整的卷积神经网路推断系统硬件架构。工作时,Arm通过总线配置这三个模块内部的寄存器,从而调整运算对象和规模的大小。然后,这三个模块自动从DDR存储器中获取对应的数据进行运算,并将计算结果返回到DDR存储器中。
[0035] 步骤4)网络工作阶段:根据卷积神经网络中卷积层和池化层交错、再与全连接层串联的结构特点,本发明提出的推断方法优化系统设计为卷积和池化运算模块组成乒乓操作,再与全连接进行全流水操作,实现软硬件的协同加速。本发明提出的推断方法可以同时对两张图片交错处理,各个运算模块也能够保证最大程度的利用。
[0036] 对于本实施例中N取2而言,卷积运算模块先后完成的运算是第1张图片的第1层卷积运算、第2张图片的第1层卷积运算、第1张图片的第2层卷积运算、第2张图片的第2层卷积运算、第3张图片的第1层卷积运算、第4张图片的第1层卷积运算、第3张图片的第2层卷积运算、第4张图片的第2层卷积运算……。池化运算模块与卷积运算模块先后完成的操作相似,唯一的区别就是池化运算模块比卷积运算模块延迟一个小工作周期开始运算。全连接运算模块比卷积运算模块延迟四个小工作周期开始运算,先后完成的运算是第1张图片的第1层全连接运算、第1张图片的第2层全连接运算、第2张图片的第1层全连接运算、第2张图片的第2层全连接运算、第3张图片的第1层全连接运算、第3张图片的第2层全连接运算、第4张图片的第1层全连接运算、第4张图片的第2层全连接运算……。软硬件协同加速运用了乒乓操作和流水线操作,能够显著提高系统的运算性能。
[0037] 如图4所示为本实施例基于软硬件协同加速的推断方法时序图,以N、K均取2为例进行说明,该时序图的核心思想是卷积和池化运算模块进行乒乓操作,再和全连接计算模块进行流水操作,一个大工作周期包括四个小工作周期,具体实现细节包含以下步骤:
[0038] 步骤1、在t1时间段(即第1个大工作周期的第1个小工作周期),Arm配置通用卷积运算模块的参数,形成针对第1张图片的第1层卷积运算,利用Arm启动第一层卷积层对第1张图片进行第1层卷积运算。卷积模块自动从DDR中获取第1张图片的数据,完成第1张图片的第1层卷积运算,然后将结果写回DDR中,完成后返回卷积运算完成信号至Arm。
[0039] 步骤2、在t2时间段(即第1个大工作周期的第2个小工作周期),Arm配置通用卷积和池化运算模块的参数,形成针对第2张图片的第1层卷积运算和第1张图片的第1层池化运算,然后Arm同时启动第一层卷积层对第2张图片进行第1层卷积运算和第一层池化层对第1张图片进行第1层池化运算。卷积模块自动从DDR中获取第2张图片的数据,完成第2张图片的第1层卷积运算。同时,池化模块自动从DDR中获取第1张图片经过第1层卷积运算得到的结果,完成第1张图片的第1层卷积运算,将这两个结果写回DDR中,完成后返回卷积和池化运算完成信号至Arm。
[0040] 步骤3、在t3时间段(即第1个大工作周期的第3个小工作周期),Arm配置通用卷积和池化运算模块的参数,形成针对第1张图片的第2层卷积运算和第2张图片的第1层池化运算,然后Arm同时启动第二层卷积层对第1张图片进行第2层卷积运算和第一层池化层对第2张图片进行第1层池化运算。卷积模块自动从DDR中获取第1张图片经过第1层池化运算得到的结果,完成第1张图片的第2层卷积运算。同时,池化模块自动从DDR中获取第2张图片经过第1层卷积运算得到的结果,完成第2张图片的第1层池化运算,将这两个结果写回到DDR中,完成后返回卷积和池化运算完成信号至Arm。
[0041] 步骤4、在t4时间段(即第1个大工作周期的第4个小工作周期),Arm配置通用卷积和池化运算模块的参数,形成针对第2张图片的第2层卷积运算和第1张图片的第2层池化运算,然后Arm同时启动第二层卷积层对第2张图片进行第2层卷积运算和第二层池化层对第1张图片进行第2层池化运算。卷积模块自动从DDR中获取第2张图片经过第1层池化运算得到的结果,完成第2张图片的第2层卷积运算。同时,池化模块自动从DDR中获取第1张图片经过第2层卷积运算得到的结果,完成第1张图片的第2层池化运算,将这两个结果写回到DDR中,完成后返回卷积和池化运算完成信号至Arm。
[0042] 步骤5、在t5时间段(即第2个大工作周期的第1个小工作周期),Arm配置通用卷积、池化和全连接运算模块的参数,形成针对第3张图片的第1层卷积运算、第2张图片的第2层池化运算和第1张图片的第1层全连接运算,然后Arm同时启动第一层卷积层对第3张图片进行第1层卷积运算、第二层池化层对第2张图片进行第2层池化运算、第一层全连接层对第1张图片进行第1层全连接运算。卷积模块自动从DDR中获取第3张图片的数据,完成第3张图片的第1层卷积运算。同时,池化模块自动从DDR中获取第2张图片经过第2层卷积运算得到的结果,完成第2张图片的第2层池化运算。全连接模块自动从DDR中获取第1张图片经过第2层池化运算得到的结果,完成第1张图片的第1层全连接运算。将这三个结果写回到DDR中,完成后返回卷积、池化和全连接运算完成信号至Arm。
[0043] 步骤6、在t6时间段(即第2个大工作周期的第2个小工作周期),Arm配置通用卷积、池化和全连接运算模块的参数,形成针对第4张图片的第1层卷积运算、第3张图片的第1层池化运算和第1张图片的第2层全连接运算,然后Arm同时启动第一层卷积层对第4张图片进行第1层卷积运算、第一层池化层对第3张图片进行第1层池化运算、第二层全连接层对第1张图片进行第2层全连接运算。卷积模块自动从DDR中获取第4张图片的数据,完成第4张图片的第1层卷积运算。同时,池化模块自动从DDR中获取第3张图片经过第1层卷积运算得到的结果,完成第3张图片的第1层池化运算。全连接模块自动从DDR中获取第1张图片经过第1层全连接运算得到的结果,完成第1张图片的第2层全连接运算。将这三个结果写回到DDR中,完成后返回卷积、池化和全连接运算完成信号至Arm。至此,第一张图片的卷积神经网络推断过程完成,得到分类结果。
[0044] 步骤7、依此类推,形成卷积和池化运算模块组成乒乓操作,再与全连接运算模块进行全流水操作,直到所有图片完成推断。
[0045] 可以看出,第1个大工作周期的第1个小工作周期,第一层卷积层输入第1张图片,然后第1张图片依次经过第一池化层、第二卷积层、第二池化层、第一全连接层、第二全连接层,每一个小工作周期完成一层运算;第1个大工作周期的第2个小工作周期,第一层卷积层输入第2张图片,同样的,第2张图片依次经过第一池化层、第二卷积层、第二池化层、第一全连接层、第二全连接层;经过第1个大周期后,第2个大工作周期的第1个小工作周期开始,这时第1张图片已经传输到第一层全连接层,此时将第3张图片输入到第一层卷积层,再按照同样的流程依次经过第一池化层、第二卷积层、第二池化层、第一全连接层、第二全连接层;第2个大工作周期的第2个小工作周期,第一层卷积层输入第4张图片,……。因此,每1个大工作周期能够同时输入两个输入信号,第一输入信号在每1个大工作周期的第1个小工作周期输入,第二输入信号在每1个大工作周期的第2个小工作周期输入,一个小工作周期有且只有一个卷积层工作,也有且只有一个池化层工作,这样能够节省资源,也便于灵活控制。
[0046] 同样的,本发明提出的推断方法也适用于不同深度的神经网络,比如当N=4、K=3时,一个大工作周期有8个小工作周期,第1个大工作周期的第1个小工作周期将第1张图片输入到第一层卷积层,第1张图片经过8个小周期后,在第2个大工作周期的第1个小工作周期传输到第一层全连接层,同时将第2张图片输入到第一层卷积层;第1个大工作周期的第2个小工作周期将第2张图片输入到第一层卷积层,第2张图片经过8个小周期后,在第2个大工作周期的第2个小工作周期传输到第一层全连接层,同时将第4张图片输入到第一层卷积层;按照这样的方式,将本发明提出的推断方法能够推广到任意深度的神经网络中。
[0047] 综上可知,本实施例首先在FPGA中设计通用的卷积、池化和全连接运算模块,并将这些模块集成到SoC异构平台中形成完整的通用卷积神经网络推断系统;然后在GPU上训练、优化卷积神经网络,将优化好的网络推断系统移植到SoC异构平台上;最终根据搭建完成的通用卷积神经网络推断系统完成推断,本发明基于卷积神经网络中卷积层和池化层交错、再与全连接层串联的结构特点,优化系统设计为卷积和池化运算模块组成乒乓操作,再与全连接进行全流水操作,实现了软硬件的协同加速。
[0048] 上述实施例已经充分说明了本发明的必要技术内容,普通技术人员能够依据说明加以实施,故不再赘述其他技术细节。
[0049] 以上所述,仅是本发明的具体实施例方式,本说明书所公开的任一特征,除非特征叙述,均可被其他等效或具体类似目的的替代特征加以替换;所公开的所有特征、或所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以任何方式组合。