版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可重构卷积神经网络加速器的设计案例目录TOC\o"1-3"\h\u19065可重构卷积神经网络加速器的设计案例 1299791.1预处理模块设计 1263381.2卷积模块设计 850481.3激活函数模块设计 11166761.4池化层模块设计 141.1预处理模块设计卷积操作是对一个特定窗口进行一个乘加操作,如图1.11所示,图中描述的卷积核大小为3×3,输入特征图数据被卷积核滑动遍历,经过与卷积核的运算,才能得到输出特征图结果。图1.11滑动卷积过程设计预处理模块功能主要是对数据进行填充以及输出卷积核K×K大小的窗口数据,因此需要对输入数据进行一个行缓存,在进行窗口数据缓存时,主要有以下三种方法:1)利用BRAM生成RAM,RAM可以进行地址读写,可以按照数据存储的地址进行读取数据,获得窗口数据。2)利用寄存器进行数据缓存,将寄存器当作软件学的“数组”来运用,最后得到窗口数据。3)利用BRAM生成FIFO,用FIFO的先进先出的特性进行数据缓存,由于数据具有一定的相关性,可以减少资源利用。方法1)在对RAM进行地址操作时,地址的控制比较复杂,对控制系统要求比较高,不考虑使用。本文将对在方法2)和方法3)进行分析比较。方法2中用到了寄存器较多,而且由于需要进行多个寄存器的操作,逻辑资源需求量倍增,方法3主要是利用了FIFO进行缓存数据,用K-1个FIFO缓存K-1行数据。在进行数据缓存时,需要考虑数据之间的关联性,利用数据之间的复用性能提升效率,减少周期浪费,如图1.12所示,图中是卷积核大小为3×3(K=3),步长为1时的卷积计算图,前一个周期需要的窗口数据3×3(K×K)和下一周期所需的3×3(K×K)数据有2×3((K-1)×K)个数据是复用的,在硬件设计时采用寄存器移位操作即可,为了得到窗口数据,需要缓存K-1行数据并用K×K个16位寄存器,第一个卷积窗口数据正确时,在随后的同一行卷积窗口数据中可以通过移位操作来完成。图1.12卷积的数据复用采用方法2)进行缓存K-1行数据并选择窗口数据传递给寄存器电路图如图1.13所示。主要是利用多个寄存器进行数据缓存,等待缓存够K-1行数据后,根据指令进行数据选择,将缓存数据传递给K2个十六位寄存器,随后将K图1.13寄存器缓存数据电路图采用方法3)FIFO进行数据缓存时的电路如图1.14所示,主要是设计K-1个fifo进行缓存K-1行数据。等待K-1个FIFO模块缓存K-1行数据后第K行数据输入时,将其数据一方面传输到FIFO中进行更新,另一方面传输给寄存器,进行窗口数据输出。图1.14FIFO缓存数据电路图在FPGA中实现两种方案的资源利用如表1.1所示,表中是采用3×3卷积核缓存行数据最大为512为例子。方案1,采用寄存器进行缓存数据,方案2采用fifo进行缓存,有表可知,方案以使用较多的FF以及LUT,未利用BRAM资源,方案2,使用了一个BRAM块,但是减少了LUT以及FF的需求。表1.1缓存方案资源需求对比表资源LUTFFBRAM方案112433100400方案253710321对输入特征图进行数据填充时主要是有两种方法(下面以卷积核大小为3×3为例):(1)在进行数据缓存时进行数据填充,如图1.15所示,在进行缓存时将填充数据加入到缓存中,然后进行窗口数据输出。采用该方法会浪费时钟周期,在进行数据输入时,填充0数据会占用时钟周期,同时进行填充卷积时,需要缓存2(K-1行)数据,其中包含1(K-2)行填充数据;其次是进行窗口数据输出时会浪费时钟周期,如图1.16所示,在窗口移动到一行的结束时,后续的两个时钟周期的数据无法进行卷积运算,降低了系统的效率。图1.15缓存时进行填充图1.16换行浪费卷积周期(2)在输出数据时进行数据选择,这样在图像进行填充的时候只需要缓存1(K-2)行数据,就可进行卷积运算,使用额外9(K2)个寄存器,利用状态机进行数据的选择赋值,如图1.17所示,等待缓存1(K-2)行数据时卷积就可进行,利用9(K2)个寄存器就可得到第一个卷积窗口的数据,然后状态机对数据进行传递给下层9(K2图1.17输出时进行数据缓存图1.18换行时无时钟周期浪费本文最终设计采用第二种方法进行填充,如图1.19所示为3×3卷积核的第一行卷积窗口数据,输出九个寄存器分别进行了上边沿填充以及左侧填充。图1.19上边沿以及左侧填充仿真图在图1.20的仿真可以看出,在进进行输入特征图进行更换时,进行上下行的填充,不浪费时钟周期,每个时钟周期输出9(K2图1.20更换输入特征图仿真图在实现卷空洞卷积时,为了获得卷积窗口数据,就需要对图像进行缓存多行,常规的方法需要利用多个fifo进行缓存,这样与传统的卷积不能够兼容,经过研究,本文提出了一种与原始卷积通用的缓存模式。如图1.21是空洞卷积核大小为3×3空洞为2的空洞卷积,图中同一颜色为同一个卷积窗口,在传统模式下,需要多行缓存进行预处理获得卷积窗口,经过图像变形,得到如图1.22所示,将多行数据当作一层进行缓存,在这种情况下缓存模式与传统卷积核大小为3×3的缓存是一样的,可以通用,只是需要用多个寄存器进行数据的暂存,以获得所需的空洞卷积窗口,该方式的后续处理如图1.23所示,其中寄存器的个数跟空洞大小有关,设空洞大小为Cx,则所需寄存器个数为(Cx(K−1)+K)图1.21空洞为2的空洞卷积窗口数据图1.22空洞输入特征图行变换图1.23空洞卷积窗口数据获取电路如图1.24是对空洞卷积的仿真,由于空洞卷积的左右边沿填充数据多少与空洞有关,在图中可见连续的填充数据0。图1.24空洞卷积仿真1.2卷积模块设计卷积模块主要是对输入的特征图数据以及权重数据进行乘加操作,其中在进行乘法操作时,利用逻辑单元实现的乘法器工作频率较低,因此在片内都是采用硬核DSP资源进行乘法计算,然而在进行浮点计算时,使用的DSP较多,因此在硬件实现时,为了减少资源的使用,将数据进行定点量化。本文对权重和原始数据进行定点量化,采用16位有符号数表示,由于权重数据都比较小,根据权重的分布,16位数据1位符号位,3位整数位,12位小数位,最大误差为1/4096,如图1.25所示。图1.25定点位宽在进行乘法运算时,设A位16位有符号数,B为16为有符号数,C是32位有符号数,D为16为有符号数。 C=A×B; (1.3)要得到16位乘法结果,需要将C右移小数位12位,然后进行截取结果即可。 D=(A×B)>>12 (1.4)卷积模块主要是对数据进行一个乘加,本文对卷积主要是采用了嵌套模式,设计最小的卷积核并行PE模块,结构如图1.26为卷积核大小3×3的PE模块,一个PE模块包括九个乘法器,4个加法器,在设计中四个16位数据相加,系统可以运行在200M时钟周期,在加法器中间插入寄存器进行保存结果,采用流水线操作,流水线为两级;卷积核大小为5×5的PE模块,结构类似,需要25个乘法器,以及12个加法器,流水线为三级;卷积核大小为7×7的PE模块,需要49个乘法器,26个加法器,流水线为四级,由于硬件的结构不同,无法采用参数进行设计,设计该模块全部进行硬件实现,在综合实现时借用宏参数进行选择。1.26PE模块模块仿真图如图1.27(3×3卷积核),可见待输入图像数据后,经过乘法器以及流水线累加树,在三个周期以后陆续输出卷积结果;图1.27PE模块仿真由于采用的N个输入特征图通道输入,那么输出一个输出通道需要例化N个PE块,并将结果累加,其结构如图1.28所示,简成为输出一个特征图通道模块。图1.28输出通道模块结构图为了增加卷积的并行度,以及提高数据的复用率,并行输出M个特征图通道,嵌套例化M个输出通道模块,如图1.29所示为8个输入通道的数据进行复用,16个输出通道的结构图。图1.29输出特征图通道并行结构图1.3激活函数模块设计激活函数是为了让卷积神经网络完成非线性操作,激活函数常用的主要是Sigmoid函数、Tanh函数以及ReLu函数,在硬件设计中ReLu函数最容易实现,且需要的资源很少,Sigmoid函数和Tanh函数在硬件的实现较困难,实现所需资源较多,这两种函数里面包含了e的幂指数运算,以及除法操作。本文实现了三种激活函数,其结构图如图1.30所示,三种激活函数并行计算,其中Sigmoid函数和Tanh函数前面计算e的幂指数合用,三个激活函数采用宏参数设置,可以选择综合。图1.30激活函数模块本文在计算e的幂指数运算时采用的是泰勒展开进行计算,泰勒展开公式如下式 ƒ(x)=ƒ( (1.5)当ƒ(x)=e ex=1+x+x2在进行整个计算时,进行8级泰勒展开后,系统的误差为18!在进行实现泰勒展开计算时,对于乘法采用DSP进行计算,一个展开式需要用7个乘法DSP资源,模块采用流水线操作,如图1.31所示,整个模块利用7个乘法器完成泰勒展开,并最后采用加法树进行累加。图1.31e的幂指数泰勒展开电路结构在进行Sigmoid函数和Tanh函数计算时由于涉及到除法运算,除法运算使用逻辑电路实现,整个电路的时序不能满足200M,在进行泰勒展开计算时,除法操作是固定数除法,最大值为8,在电路中除以8可以直接进行移位操作,因此最大除法是除以7,该模块在芯片中时序可以工作在100M时钟下,在后续进行Sigmoid函数和Tanh函数结果计算时,涉及到16位的除法,系统的工作频率在50M,为了不影响整个系统的运算,因此采用同相位的异步时钟多通道进行并行处理,多通道并行处理结构图如图1.32所示。利用BRAM设计FIFO缓存,为了达到200M的数据处理需求,采用两个100M的e幂指数的泰勒展开计算模块并行计算,在后续Sigmoid函数和Tanh函数的计算中采用四个50M的处理模块,最后将数据写入到缓存中,下一级的数据处理才用200M。采用该模式的计算方式,不影响前面的卷积计算以及后续的池化操作,提高系统的效率。图1.32激活函数结构激活函数模块的仿真如图1.33所示,模块采用流水线操作,在第一个数据输入时会产生延时,在随后的时序一个周期输出一个计算结果。图1.33激活函数仿真1.4池化层模块设计池化层主要是对图像一个降采样,池化层模块的设计难点在于对数据的缓存设计,缓存池化窗口大小的数据,然后进行对数据的处理,池化分为最大池化和平均池化,本文对两种方法都进行了实现,池化窗口主要分为两种2×2窗口和3×3窗口。在整个模块实现时对于输入特征图大小不是2或3的倍数时,要进行额外处理。如进行2×2池化时,当输入特征图大小是奇数时,最后一列直接进行两行数据对比,最后一行数据,直接进行两列对比输出,最后一个数据进行直接输出结果,如图1.34为输入特征图大小为5×5,采用窗口2×2的池化计算过程。当采用3×3窗口进行池化时,操作类似,其输入特征图不是3的倍数时,特殊处理。图1.34图像大小为奇数时池化运算结构缓存模块的设计有两种方案,一种是对数据边计算边缓存数据,减少后续运算;另外一种是进行先缓存,等处理窗口数据缓存完整后进行数据运算。由于本文同时实现了最大值池化和均值池化,需要对窗口数据比较和累加,因此系统采用的是第二种方法,首先是对行数据进行缓存,后续进行数据处理,2×2池化窗口池化需要缓存数据一行,3×3的池化窗口需要图像缓存两行。池化模块池化窗口为2×2窗口的池化步骤如下,如图1.35所示,当缓存一行数据时,缓存输出一个数据给寄存器1,与此同时上层处理模块输入一个数据给寄存器2,然后在一个时钟周期内进行比较和累加,将输出数据分别传递给寄存器3和寄存器4。图1.352×2窗口池化第一时钟周期下一个时钟周期,如图1.36所示,FIFO缓存输出一个数据到寄存器1,上层处理模块输入一个数据到寄存器2,然后将寄存器3的数据与寄存器1和寄存器2的数据进行一起比较,输出最大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川成都传媒集团人力资源服务中心售前工程师、内控法务专员等岗位招聘4人笔试备考试题及答案解析
- 2026福建龙岩市消防救援局招聘政府专职消防员53人笔试模拟试题及答案解析
- 2026年江西省海济融资租赁股份有限公司社会招聘2人笔试模拟试题及答案解析
- 2026年合肥肥西县高店镇中心幼儿园聘用专任教师招聘2名笔试备考题库及答案解析
- 2026广东中山市粮食储备经营管理有限公司招聘3人考试参考题库及答案解析
- 2026北京工业大学科研助理岗位招聘1人(第二批)笔试备考试题及答案解析
- 2026河南商丘市民权法院招聘46人笔试备考试题及答案解析
- 2026浙江省心血管重点实验室招聘笔试备考题库及答案解析
- 2026辽宁省辽水集团所属辽宁北方环境保护有限公司招聘6人笔试模拟试题及答案解析
- 2026福建福州市土开商业运营管理有限公司聘用人员招聘2人笔试备考题库及答案解析
- 城市综合交通体系规划编制导则
- 数字经济概论(第二版)-课件全套 戚聿东 第1-13章 数据要素-数据垄断与算法滥用
- 2025年云南省中考语文试卷真题(含答案详解)
- 2完整版本.1.第二章-上肢-第一节-肩关节复合体
- 混凝土实验室试题及答案
- 王力版《古代汉语》常用词
- 船舶电力拖动90课件
- 《危险化学品安全法》知识培训
- 2024年上海虹口区初三二模中考数学试卷试题(含答案详解)
- 采用起重机械进行安装的工程
- 2025年湖南九嶷职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
评论
0/150
提交评论