基于卷积神经网络的图像硬件识别系统及部署方法与流程

专利检索2022-05-10  1



1.本发明涉及图像处理领域,具体涉及一种基于卷积神经网络的图像硬件识别系统及部署方法。


背景技术:

2.近年来,随着算力的增长以及深度学习领域的发展,卷积神经网络(cnn)在图像分类、目标检测和语音识别、计算机视觉等方面取得了很大的进展,并在实际应用中有广泛的应用。cnn的特征检测层通过训练数据进行学习,避免了显示的特征抽取,而是隐式地从训练数据中进行学习;除此之外cnn在同一特征映射面上的神经元权值相同,所以网络可以并行学习,因此cnn在准确率上远远超过其他机器学习算法,但在精度提高的同时,cnn的深度以及规模也在迅速增长。cnn的本质为卷积运算,会带来大量的资源消耗,为神经网络在移动端的部署带来了巨大的挑战。
3.目前关于cnn在移动端的实现有两个主要研究方向:一是基于asic定制电路进行实现,asic效率高,性能好但是asic设计难度大,验证周期长,且灵活性很差,定制完之后无法在更改;另一个方向是基于fpga进行部署,单纯的fpga硬件电路设计相对于asic具有较好的设计迭代速度,能够快速进行验证,但是单纯的fpga对于数据的预处理,结果数据的后处理等操作并不高效。
4.socfpga结合了arm的灵活性以及fpga的高并行度,可以将fpga的高并行度多为加速的关键,利用arm的灵活性来完成整个网络的调度,包括数据的预处理,结果数据的后处理等操作。充分发挥fpga的并行优势,加速cnn的推理过程。
5.目前大多数基于socfpga的网络部署方案需要依赖于已有的框架移植,消耗资源过多且移植较为繁琐,除此之外传统的部署方案受限于片上资源,不得不在arm和fpga之间过于频繁的数据交互,严重影响了整个网络的推理过程,无法发挥fpga硬件加速的优势。


技术实现要素:

6.发明目的:提出一种基于卷积神经网络的图像硬件识别系统,并进一步提出一种基于上述系统所提出的部署方法,该方案可以脱离框架的限制,自主完成整个网络的推理以及数据处理,且优化计算的次序,减少arm与fpga的数据交互次数,提高整个网络的推理过程,更好的满足实际应用的需求,从而解决现有技术存在的上述问题。
7.技术方案:第一方面,提供了一种基于卷积神经网络的图像硬件识别系统,该系统包括arm端和fpga端;arm端用于完成数据预处理,数据重排,网络推理,fpga配置,以及后处理操作;fpga端用于完成计算密集的任务,实现卷积加速。
8.利用arm的灵活性脱离神经网络框架,控制整个网络的推理过程,整体策略采用按通道取数的方式以及mec策略来降低数据重复率。利用fpga的高并行度来完成计算密集的任务,主要实现卷积的加速。
9.在第一方面的一些可实现方式中,arm端包括预处理模块、网络推理模块、后处理模块、驱动模块;预处理模块用于读取图片文件、将其缩放到预定尺寸,并转化为预定格式;网络推理模块与所述预处理模块建立双向通信;后处理模块与所述网络推理模块建立双向通信;驱动模块同时与所述预处理模块、网络推理模块、以及后处理模块建立双向通信,用于驱动所述fpga端。
10.在第一方面的一些可实现方式中,fpga端包括sram、多个卷积控制器、卷积核控制器、以及pe阵列;sram用于对所述arm端的数据进行传输以及卷积的存取数操作;卷积控制器根据标志位配置成dw卷积和normal卷积两种卷积计算模式;卷积核控制器用于实现卷积运算;pe阵列包括乘法器阵列以及加法树阵列,用于卷积的具体运算。
11.第二方面,提供了一种部署方法,该部署方法用于对第一方面提及的图像硬件识别系统进行部署,步骤如下:arm端完成输入数据以及权重数据、偏置数据的处理;fpga端用于完成计算密集的任务,实现卷积加速。
12.在第二方面的一些可实现方式中,arm端完成数据预处理,数据重排,网络推理,fpga配置,以及后处理,先验框生成,解码得到预测框的置信度和位置信息,以及非极大值抑制算法过滤重合的预测框。
13.在第二方面的一些可实现方式中,arm端完成输入数据以及权重数据、偏置数据的处理包括以下步骤:步骤1)数据预处理:通过opencv读取图片文件并进行缩放,缩放到1*3*300*300的固定尺寸,并进行图片格式的转化:nhwc

>nchw,方便fpfa的运算。
14.步骤2)数据量化:基于fpga资源的限制,本发明对数据进行不同位宽的量化,输入数据、权重数据、偏置数据进行8bit有符号量化。输出数据为32bit,需要及进行解量化。偏置数据的量化因子为输入数据、权重数据的量化因子的乘积。
15.以输入数据的int8量化为例,过程主要有以下几个步骤:步骤1)查找输入数据中的对大值vmax。
16.步骤2)得到量化因子fd。
17.步骤3)输入数据乘fd,映射到[

127,127]之间。
[0018]
步骤4) 权重的量化过程与输入数据一致,其量化因子为fw,偏置的量化因子为;在第二方面的一些可实现方式中,arm端根据改进mec的运算策略上述对量化数据进行重新排布,方便fpga的存取数以及运算,具体的mec运算策略包括以下步骤:步骤1)输入根据卷积核的尺寸以及步径,将输入数据按列进行取数,以3为维度,按列取数,得到abcde五个矩阵。
[0019]
步骤2)将得到的输入矩阵展依次展开成一维数据排列并拼接,受限于arm端和fpga端硬件接口为128bit,需要补零操作。
[0020]
步骤3)3*3卷积将输入数据按照3个一组进行分组,一次数据传输可以传输5组数据(120bit),补零至128bit得到第一个数据包,每四个数据包有效数据之间有两组数据(6byte)的重叠,方便下一个卷积的运算。
[0021]
步骤4)1*1卷积将输入数据按照次序传输16个数据,共128bit,无需补零。
[0022]
步骤5)将卷积核一维展开:3*3卷积核将9个数(72bit)拼接上偏置数据(8bit), 补零至128bit;1*1卷积将1个数(8bit)拼接上偏置数据(8bit), 补零至128bit。
[0023]
步骤6)按照通道的顺序,依次重复上述步骤,得到整个输入数据以及权重、偏置数据的矩阵。
[0024]
本发明基于软硬件协同的方案,因此arm端的数据排布需要有相匹配的赢家进行处理,因此,根据以上arm端的数据排布,fpga端设计特殊尺寸的sram配合数据分发模块,用于arm端数据的传输以及卷积的存取数操作。根据arm端整体运算策略,传输输入数据时一个数据包(128bit)有120bit的有效数据,pfga数据分发模块通过截位操作取得有效的120bit,四个数据包拼接成一个480bit并存入sram。传输权重数据时一个数据包(128bit)有80bit(72bit 8bit)的有效数据,pfga通过截位操作取得有效的80bit,并存入权重sram。考虑到累加对于位宽的扩展效果,本发明采用32bit来存储结果数据,以3*3卷积为例,一个完整的480bit数据可以取出18个卷积数据,即一个结果sram地址需要存储18个32bit数据,576bit。考虑到fpga端的资源限制,本发明sram设计为3种不同的尺寸,分别512*480,512*96,576*1536,分别为输入sram,权重sram,输出sram。
[0025]
在第二方面的一些可实现方式中,考虑到arm与fpga之间数据交互会耗费大量时间,因此arm端传输数据特邀进行额外的优化。arm与fpga通过avalon接口进行数据传输,最大位宽为128bit,这里的数据包括数据数据以及配置信息,两者需要进行匹配。受限于板上资源,无法将一次完整的卷积所需的数据传送到fpga端,因此计算次序采用按通道取数的分片方法有效避免同一批输入数据的反复传输,以此减少软硬件数据交互次数包括以下步骤:步骤1)计算fpga的最大存储量,oc为输出通道,oh为输出尺寸,以输出尺寸为维度,输出sram最大的存储行数(向下取整)如下所示:步骤2)根据output_row的值计算所需的输入sram深度(向下取整)以及分片总数,公式如下:公式如下:步骤3)传输所有的权重数据,再以输入sram的深度为一片数据的基本单位,按照通道的顺序,依次传输每一个通道的第一片输入数据。
[0026]
步骤4)再次按照通道顺序,传输每一个通道的第二片输入数据。直到遍历完所有的数据。
[0027]
在第二方面的一些可实现方式中,fpga端设计卷积核控制器,实现两种卷积运算,分别为1*1卷积和3*3卷积,其中3*3卷积为可配置卷积,根据标志位可以灵活配置成dw卷积
和normal卷积,两者主要是在地址生成模块有不同的模式。两种卷积控制器均设置了通道累加功能,若不是通道0的数据,则本次卷积结果会与上次卷积结果相加,即对结果sram的数据进行累加再重新存入结果sram中。为了满足计算的需求且尽可能的降低资源消耗以及功耗,fpga端设计pe阵列来完成卷积的运算。其中pe为具体的运算阵列,有效的节约fpga资源并改善时序。3*3卷积调用乘法器阵列和加法树阵列,1*1卷积调用乘法器阵列。根据数据的存储策略,一个输入sram地址所对应的最大计算量(3*3卷积)有18个卷积结果并行生成,每一个卷积结果需要9个乘法器,8个加法器,因此乘法器需要18*9=162个乘法器组成阵列,加法器需要18*8=144个加法器组成加法树阵列。
[0028]
在第二方面的一些可实现方式中,fpga计算完所有的数据之后,arm端自主实现数据后处理,在网络搭建之前先生成一系列先验框作为参考,根据先验框数据的解码预测框位置,将预测框位置矩阵与先验框位置矩阵一一对应计算得到预测框的坐标以及所有类的置信度,过程得出了网络输出的预测框位置以及置信度,最后由非极大值算法去除重合度 比较高的预测框留下最终的效果框。
[0029]
有益效果:本发明实现了基于soc的卷积神经网络的软硬件部署方案,脱离了框架的限制,在资源受限的情况下可以有较好的优化效果。
[0030]
本发明采用了mec策略对数据进行重排,并且采用按通道分片取数的方式,有效降低了对片上存储资源的消耗,提高效率。
[0031]
本发明应用可重构的思想,设计了两种卷积控制器,其中3*3卷积控制器实现了可配置。
[0032]
本发明自主实现了数据的后处理,包括先验框生成、预测框解码、非极大值抑制算法(nms)。
附图说明
[0033]
图1是本发明的软硬件部署方案总体架构。
[0034]
图2是本发明的卷积运算的mec运算策略。
[0035]
图3为发明的数据包重叠排列。
[0036]
图4是本发明设计的输入sram数据拼接及卷积数量。
[0037]
图5是本发明按通道分片取数方案示意图。
[0038]
图6是本发明两种卷积控制器示意框图。
[0039]
图7是本发明pe加法树阵列。
具体实施方式
[0040]
在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然而,对于本领域技术人员而言显而易见的是,本发明可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述。
[0041]
本发明具体实施是基于mobilenetv1 ssd实现的。arm端完成数据预处理,数据重排,网络推理,fpga配置,以及后处理,先验框生成,解码得到预测框的置信度和位置信息,
以及非极大值抑制算法过滤重合的预测框。
[0042]
arm端完成输入数据以及权重数据、偏置数据的处理包括以下步骤:步骤1)数据预处理:通过opencv读取图片文件并进行缩放,缩放到1*3*300*300的固定尺寸,并进行图片格式的转化:nhwc

>nchw,方便fpfa的运算。
[0043]
步骤2)数据量化:基于fpga资源的限制,本发明对数据进行不同位宽的量化,输入数据、权重数据、偏置数据进行8bit有符号量化。输出数据为32bit,需要及进行解量化。偏置数据的量化因子为输入数据、权重数据的量化因子的乘积。
[0044]
以输入数据的int8量化为例,过程主要有以下几个步骤:步骤1)查找输入数据中的对大值vmax。
[0045]
步骤2)得到量化因子fd。
[0046]
步骤3)输入数据乘fd,映射到[

127,127]之间。
[0047]
步骤4) 权重的量化过程与输入数据一致,其量化因子为fw,偏置的量化因子为;arm端根据改进mec的运算策略上述对量化数据进行重新排布,方便fpga的存取数以及运算,具体的mec运算策略见图2所示,包括以下步骤:步骤1)输入根据卷积核的尺寸以及步径,将输入数据按列进行取数,如图则是以3为维度,按列取数,得到abcde五个矩阵。
[0048]
步骤2)将得到的输入矩阵展依次展开成一维数据排列并拼接,受限于arm端和fpga端硬件接口为128bit,需要补零操作。
[0049]
步骤3)3*3卷积将输入数据按照3个一组进行分组,一次数据传输可以传输5组数据(120bit),补零至128bit得到第一个数据包,每四个数据包有效数据之间有两组数据(6byte)的重叠,见图3,方便下一个卷积的运算。
[0050]
步骤4)1*1卷积将输入数据按照次序传输16个数据,共128bit,无需补零。
[0051]
步骤5)将卷积核一维展开:3*3卷积核将9个数(72bit)拼接上偏置数据(8bit), 补零至128bit;1*1卷积将1个数(8bit)拼接上偏置数据(8bit), 补零至128bit。
[0052]
步骤6)按照通道的顺序,依次重复上述步骤,得到整个输入数据以及权重、偏置数据的矩阵。
[0053]
本发明基于软硬件协同的方案,因此arm端的数据排布需要有相匹配的赢家进行处理,因此,根据以上arm端的数据排布,fpga端设计特殊尺寸的sram配合数据分发模块,用于arm端数据的传输以及卷积的存取数操作。根据arm端整体运算策略,传输输入数据时一个数据包(128bit)有120bit的有效数据,pfga数据分发模块通过截位操作取得有效的120bit,四个数据包拼接成一个480bit并存入sram见图4。传输权重数据时一个数据包(128bit)有80bit(72bit 8bit)的有效数据,pfga通过截位操作取得有效的80bit,并存入权重sram。考虑到累加对于位宽的扩展效果,本发明采用32bit来存储结果数据,以3*3卷积为例,一个完整的480bit数据可以取出18个卷积数据见图4,即一个结果sram地址需要存储18个32bit数据,576bit。考虑到fpga端的资源限制,本发明sram设计为3种不同的尺寸,分别512*480,512*96,576*1536,分别为输入sram,权重sram,输出sram。
[0054]
考虑到arm与fpga之间数据交互会耗费大量时间,因此arm端传输数据特邀进行额外的优化。arm与fpga通过avalon接口进行数据传输,最大位宽为128bit,这里的数据包括数据以及配置信息,两者需要进行匹配。受限于板上资源,无法将一次完整的卷积所需的数据传送到fpga端,因此计算次序采用按通道取数的分片方法有效避免同一批输入数据的反复传输,见图5,以此减少软硬件数据交互次数包括以下步骤:步骤1)计算fpga的最大存储量,oc为输出通道,oh为输出尺寸,以输出尺寸为维度,输出sram最大的存储行数(向下取整)如下所示:步骤2)根据output_row的值计算所需的输入sram深度(向下取整)以及分片总数,公式如下:公式如下:步骤3)传输所有的权重数据,再以输入sram的深度为一片数据的基本单位,按照通道的顺序,依次传输每一个通道的第一片输入数据。
[0055]
步骤4)再次按照通道顺序,传输每一个通道的第二片输入数据。直到遍历完所有的数据。
[0056]
fpga端设计卷积核控制器,实现两种卷积运算,分别为1*1卷积和3*3卷积,其中3*3卷积为可配置卷积,根据标志位可以灵活配置成dw卷积和normal卷积,两者主要是在地址生成模块有不同的模式。两种卷积控制器均设置了通道累加功能,若不是通道0的数据,则本次卷积结果会与上次卷积结果相加,即对结果sram的数据进行累加再重新存入结果sram中。为了满足计算的需求且尽可能的降低资源消耗以及功耗,fpga端设计pe阵列来完成卷积的运算,卷积核控制器的框图见图6。其中pe为具体的运算阵列,加法树见图7所示,有效的节约fpga资源并改善时序。3*3卷积调用乘法器阵列和加法树阵列,1*1卷积调用乘法器阵列。根据数据的存储策略,一个输入sram地址所对应的最大计算量(3*3卷积)有18个卷积结果并行生成,每一个卷积结果需要9个乘法器,8个加法器,因此乘法器需要18*9=162个乘法器组成阵列,加法器需要18*8=144个加法器组成加法树阵列。
[0057]
fpga计算完所有的数据之后,arm端自主实现数据后处理,在网络搭建之前先生成一系列先验框作为参考,ssd算法是常用的onestage算法,在网络搭建之前先生成一系列先验框作为参考,用于网络训练以及结果数据解码。标准ssd算法选取了六个尺寸的特征图分割图片,每个尺寸特征图对应五个长宽比,每个长宽比对应一个尺寸系数,以及一个特殊尺寸系数。先验框是固定的值因此只需要生成一次,就可以根据先验框数据的解码预测框位置。每种特征图都会从detection层中得出两个输出,其中通道数较多的输出存放预测框对应的21个类别的置信度,通道数较少的输出存放预测框的位置及尺寸偏移信息。将预测框位置矩阵与先验框位置矩阵一一对应进行计算,就解码出预测框的坐标信息。而每个预测框对应的置信度为21个值,将其送入softmax函数并选出概率最大的值作为置信度。过程得出了网络输出的预测框位置以及置信度,下面就由非极大值算法去除重合度比较高的预测框留下最终的效果框。具体过程为先根据置信度阈值删除一部分置信度较小的预测框,以
及类别为背景的框。然后在剩余的预测框中选取一个置信度最大预测框计算剩余框与其iou(交并比),剔除iou大于阈值的框,不断重复上述过程直到剩余集合为空。
[0058]
如上所述,尽管参照特定的优选实施例已经表示和表述了本实施例,但其不得解释为对本实施例自身的限制。在不脱离所附权利要求定义的本实施例的精神和范围前提下,可对其在形式上和细节上做出各种变化。
转载请注明原文地址:https://win.8miu.com/read-250125.html

最新回复(0)