CN107993186B - 一种基于Winograd算法的3D CNN加速方法及*** - Google Patents

一种基于Winograd算法的3D CNN加速方法及*** Download PDF

Info

Publication number
CN107993186B
CN107993186B CN201711342538.0A CN201711342538A CN107993186B CN 107993186 B CN107993186 B CN 107993186B CN 201711342538 A CN201711342538 A CN 201711342538A CN 107993186 B CN107993186 B CN 107993186B
Authority
CN
China
Prior art keywords
sub
feature map
block
formula
row
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
Application number
CN201711342538.0A
Other languages
English (en)
Other versions
CN107993186A (zh
Inventor
沈俊忠
黄友
王泽龙
乔寓然
陈照云
曹壮
文梅
张春元
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201711342538.0A priority Critical patent/CN107993186B/zh
Publication of CN107993186A publication Critical patent/CN107993186A/zh
Application granted granted Critical
Publication of CN107993186B publication Critical patent/CN107993186B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Other Investigation Or Analysis Of Materials By Electrical Means (AREA)
  • Image Analysis (AREA)

Abstract

本发明公开了一种基于Winograd算法的3D CNN加速方法及***,其方法实施步骤包括:从输入特征图中读取待变换的特征图子块,从权值缓存中读取卷积核子块,对特征图子块Bin以及卷积核子块执行3D Winograd算法输出结果并累加输出累加结果,判断是否输入特征图中的所有输入特征图都读取完毕,如果读取完毕,则将累加结果写回输出特征图缓存Out。本发明通过对Winograd算法进行了扩展并将其用于3D CNN计算中,运用了2D Winograd算法进行CNN加速并取得了良好的效果,能够有效降低CNN算法的计算复杂度、提升基于FPGA的3D CNN加速器的计算性能以及能效比。

Description

一种基于Winograd算法的3D CNN加速方法及***
技术领域
本发明涉及3D CNN(三维卷积神经网络)加速技术,具体涉及一种用于嵌入式平台下的、基于Winograd算法的3D CNN加速方法及***。
背景技术
随着人工智能领域的发展,三维卷积神经网络(Three-dimensionalConvolutional Neural Network,3D CNN)已被广泛运用于许多复杂的计算机视觉运用中,如视频分类、人体动作检测以及医疗图像分析等。与传统的二维卷积神经网络(Two-dimensional Convolutional Neural Network,2D CNN)不同的是,3D CNN在处理过程中能够保留三维图像中的时间信息,因此在三维图像识别、分类领域能够取得比2D CNN更好的效果。
随着CNN识别精度的提升,CNN网络结构越来越复杂,随之而来的是网络的计算和存储复杂度的不断提升。由于传统的CPU处理器已无法应对CNN网络强大的并行计算需求,各种类型的加速器如GPU、ASIC以及FPGA陆续被提出。在这些加速平台中,FPGA由于具备可重构能力以及大量的计算逻辑资源,渐渐得到了研究人员的青睐。再者,FPGA提供商如Intel、Xilinx陆续推出了高层次综合工具(High-level Synthesis tool,HLS),使得FPGA编程难度得到有效地降低,FPGA加速器开发周期大大缩短,更让FPGA成为加速CNN的最佳选择之一。
据本实施例所知,目前基于FPGA的CNN加速器都是面向2D CNN的,并没有公开文献对基于FPGA的3D CNN加速进行研究。与2D CNN相比,3D CNN具备更高的计算和存储复杂度,因此如何高效利用FPGA有限的计算、存储资源对复杂的3D CNN进行加速器的构建,是值得研究的关键问题。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,本发明考虑到CNN主要计算负载为卷积层中的卷积计算,提供一种基于Winograd算法的3D CNN加速方法,通过对Winograd算法进行了扩展并将其用于3D CNN计算中,运用了2D Winograd算法进行CNN加速并取得了良好的效果,能够有效降低CNN算法的计算复杂度、提升基于FPGA的3D CNN加速器的计算性能以及能效比。
为了解决上述技术问题,本发明采用的技术方案为:
本发明提供一种基于Winograd算法的3D CNN加速方法,实施步骤包括:
1)从输入特征图in中读取待变换的特征图子块Bin,从权值缓存w中读取卷积核子块Bw;
2)对特征图子块Bin以及卷积核子块Bw执行3D Winograd算法输出结果Tp1
3)对执行3D Winograd算法输出的结果Tp1进行累加,并输出累加结果Sum;
4)判断是否输入特征图in中的所有输入特征图都读取完毕,如果尚未读取完毕,则跳转执行步骤1);否则,跳转执行步骤5);
5)将累加结果Sum写回输出特征图缓存Out。
优选地,步骤1)中从输入特征图in中读取待变换的特征图子块Bin时,采用Z、R、C、M、N五重循环遍历的方式读取待变换的特征图子块Bin,其中Z,R,C分别表示输出特征图的深度、高度以及宽度,M表示输出特征图的数目,N表示输入特征图的数目,且读取待变换的特征图子块Bin采用的载入函数的函数表达式如式(1)所示,从权值缓存w中读取卷积核子块Bw采用的载入函数的函数表达式如式(2)所示;
Figure GDA0002963907640000021
式(1)中,Bin[k][j][i]表示读取下标为k,j,i的特征图子块Bin,特征图子块Bin大小为n×n×n,dep,row,col分别表示某张特征图中所要读取子块的深度、高度以及宽度方向的索引值,in表示输入特征图in,S表示卷积窗口的滑动步长,r表示卷积核的维度,W表示输入特征图宽度;
Bw[k][j][i]=w[m0][n][k][j*r+i],0≤i,j,k<r. (2)
式(2)中,Bw[k][j][i]表示读取下标为k,j,i的卷积核子块Bw,w表示权值缓存,m0,n表示卷积核的索引,权值缓存w中一共有M组权值、每组N个卷积核,r表示卷积核的维度。
优选地,步骤2)的详细步骤包括:
2.1)对大小为n×n×n的特征图子块Bin的每一个平面依次进行列变换、行变换,得到变换后的特征图子块Tin;对特征图子块Tin进行顺时针90旋转使得特征图子块Tin中各数据位置重排,得到旋转后的特征图子块TinR;针对旋转后的特征图子块TinR的每一个平面进行列变换得到变换后大小为n×n×n的特征图子块Tin1
2.2)对大小为r×r×r的卷积核子块Bw的每一个平面依次进行列变换、行变换,得到变换后的卷积核子块Tw;对卷积核子块Tw进行顺时针90旋转使得卷积核子块Tw中各数据位置重排,得到旋转后的卷积核子块TwR;针对旋转后的卷积核子块TwR的每一个平面进行列变换得到变换后的大小为n×n×n的卷积核子块Tw1
2.3)针对大小完全一致的特征图子块Tin1和卷积核子块Tw1进行点乘操作,得到大小为n×n×n的点乘操作结果P;
2.4)对大小为n×n×n的点乘操作结果P的每一个平面依次进行列变换、行变换,得到变换后的点乘操作结果Tp;对变换后的点乘操作结果Tp进行顺时针90旋转使得变换后的点乘操作结果Tp中各数据位置重排,得到旋转后的点乘操作结果TpR;针对旋转后的点乘操作结果TpR的每一个平面进行列变换得到大小为m×m×m的变换后点乘操作结果Tp1,作为执行3D Winograd算法输出的结果Tp1
优选地,步骤2.1)中进行列变换的函数表达式如式(3)所示、行变换的函数表达式如式(4)所示;
Figure GDA0002963907640000031
式(3)中,(x0 x1 x2 x3)T表示待变换输入特征图子块的某一列,(x0' x1' x2' x3')T表示列变换后对应的特征图子块的列;
Figure GDA0002963907640000032
式(4)中,(x0 x1 x2 x3)表示待变换输入特征图子块的某一行,(x0' x1' x2' x3')表示行变换后对应的特征图子块的行。
优选地,步骤2.2)中进行列变换的函数表达式如式(5)所示、行变换的函数表达式如式(6)所示;
Figure GDA0002963907640000041
式(5)中,(w0 w1 w2)T表示待变换卷积核子块的某一列,(w0' w1' w2' w3')T表示列变换后对应的卷积核子块的列;
Figure GDA0002963907640000042
式(6)中,(w0 w1 w2)表示待变换卷积核子块的某一行,(w0' w1' w2' w3')表示行变换后对应的卷积核子块的行。
优选地,步骤2.4)中进行列变换的函数表达式如式(7)所示、行变换的函数表达式如式(8)所示;
Figure GDA0002963907640000043
式(7)中,(m0 m1 m2 m3)T表示待变换点乘子块的某一列,(m0' m1')T表示列变换后对应的点乘子块的列;
Figure GDA0002963907640000044
式(8)中,(m0 m1 m2 m3)表示待变换点乘子块的某一行,(m0' m1')表示行变换后对应的点乘子块的行。
优选地,所述进行顺时针90旋转的的函数表达式如式(9)所示;
DR i,k,j←Di,j,k (9)
式(9)中,Di,j,k为进行顺时针90旋转前的某个元素,DR i,j,k为进行顺时针90旋转后的某个元素,i,j,k分别为元素行、列以及深度的索引。
优选地,步骤5)将累加结果Sum写回输出特征图缓存Out采用的写回函数的函数表达式如式(10)所示;
Out[m0][dep+k][(row+i)*C+col+j]=Sum[m0][k][i][j],0≤i,j,k≤m-1. (10)
式(10)中,Out表示输出特征图缓存,m0表示卷积核的索引,dep,row,col分别表示某张特征图中所要读取子块的深度、高度以及宽度方向的索引值,i,j,k分别为特征图的行、列以及深度的索引,Sum[m0][k][i][j]表示第m0张输出特征图的累加结果Sum中深度为k且高度为i、宽度为j像素点。
本发明还提供一种基于Winograd算法的3D CNN加速***,包括IP核,其特征在于:所述IP核被编程以执行本发明前述基于Winograd算法的3D CNN加速方法的步骤。
本发明还提供一种基于Winograd算法的3D CNN加速***,包括片外存储以及IP核,其特征在于:所述IP核包括片上存储和计算模块,所述片上存储包括输入缓存、权值缓存以及输出缓存,所述输入缓存、权值缓存以及输出缓存分别与片外存储相连,所述计算模块包括池化层单元POOL、激活层单元ReLU以及多个并行布置的处理单元PU,所述处理单元PU包括累加模块和多个并行的基本处理单元PE,多个基本处理单元PE的输入端分别同时与输入缓存、权值缓存相连,且多个基本处理单元PE的输出端分别通过累加模块、激活层单元ReLU、池化层单元POOL与输出缓存相连,所述基本处理单元PE包括输入特征图转换阵列、输入特征图缓存、输入权值转换阵列、输入权值缓存、点乘模块、点乘结果缓存、点乘结果转换阵列,所述输入特征图转换阵列的输入端与输入缓存相连、输出端通过输入特征图转换阵列、输入特征图缓存与点乘模块的一个输入端相连,所述输入权值转换阵列的输入端与权值缓存相连、输出端通过输入权值转换阵列、输入权值缓存、与点乘模块的另一个输入端相连,所述点乘模块的输出端通过点乘结果缓存、点乘结果转换阵列与累加模块的输入端相连,所述输入特征图转换阵列、输入权值转换阵列、点乘结果转换阵列均包含依次相连的列变换模块和行变换模块。
本发明基于Winograd算法的3D CNN加速方法具有下述优点:本发明基于Winograd算法的3D CNN加速方法通过对Winograd算法进行了扩展并将其用于3D CNN计算中,运用了2D Winograd算法进行CNN加速并取得了良好的效果,能够有效降低CNN算法的计算复杂度、提升基于FPGA的3D CNN加速器的计算性能以及能效比。
附图说明
图1为本发明实施例一方法的基本流程示意图。
图2为本发明实施例一方法中3D Winograd算法的原理示意图。
图3为本发明实施例一方法中3D Winograd算法的流程图。
图4为本发明实施例一方法的伪代码。
图5为本发明实施例一***的结构示意图。
图6为本发明实施例一***的基本处理单元PE的结构示意图。
图7为本发明实施例一***行列变换使用的矩阵变换模板结构示意图。
图8为本发明实施例一***全连接层加速方法的原理示意图。
图9为本发明两实施例与不同类型的加速器的对比曲线示意图。
具体实施方式
实施例一:
如图1所示,本实施例基于Winograd算法的3D CNN加速方法的实施步骤包括:
1)从输入特征图in中读取待变换的特征图子块Bin,从权值缓存w中读取卷积核子块Bw;
2)对特征图子块Bin以及卷积核子块Bw执行3D Winograd算法输出结果Tp1
3)对执行3D Winograd算法输出的结果Tp1进行累加,并输出累加结果Sum;
4)判断是否输入特征图in中的所有输入特征图都读取完毕,如果尚未读取完毕,则跳转执行步骤1);否则,跳转执行步骤5);
5)将累加结果Sum写回输出特征图缓存Out。
本实施例中,步骤1)中从输入特征图in中读取待变换的特征图子块Bin时,采用Z、R、C、M、N五重循环遍历的方式读取待变换的特征图子块Bin(参见图2),其中Z,R,C分别表示输出特征图的深度、高度以及宽度,M表示输出特征图的数目,N表示输入特征图的数目,且读取待变换的特征图子块Bin采用的载入函数的函数表达式如式(1)所示,从权值缓存w中读取卷积核子块Bw采用的载入函数的函数表达式如式(2)所示;
Figure GDA0002963907640000061
式(1)中,Bin[k][j][i]表示读取下标为k,j,i的特征图子块Bin,特征图子块Bin大小为n×n×n,dep,row,col分别表示某张特征图中所要读取子块的深度、高度以及宽度方向的索引值,in表示输入特征图in,S表示卷积窗口的滑动步长,r表示卷积核的维度,W表示输入特征图宽度;
Bw[k][j][i]=w[m0][n][k][j*r+i],0≤i,j,k<r. (2)
式(2)中,Bw[k][j][i]表示读取下标为k,j,i的卷积核子块Bw,w表示权值缓存,m0,n表示卷积核的索引,权值缓存w中一共有M组权值、每组N个卷积核,r表示卷积核的维度。
本实施例中,步骤2)的详细步骤包括:
2.1)对大小为n×n×n的特征图子块Bin的每一个平面依次进行列变换、行变换,得到变换后的特征图子块Tin;对特征图子块Tin进行顺时针90旋转使得特征图子块Tin中各数据位置重排,得到旋转后的特征图子块TinR;针对旋转后的特征图子块TinR的每一个平面进行列变换得到变换后大小为n×n×n的特征图子块Tin1
2.2)对大小为r×r×r的卷积核子块Bw的每一个平面依次进行列变换、行变换,得到变换后的卷积核子块Tw;对卷积核子块Tw进行顺时针90旋转使得卷积核子块Tw中各数据位置重排,得到旋转后的卷积核子块TwR;针对旋转后的卷积核子块TwR的每一个平面进行列变换得到变换后的大小为n×n×n的卷积核子块Tw1
2.3)针对大小完全一致的特征图子块Tin1和卷积核子块Tw1进行点乘操作,得到大小为n×n×n的点乘操作结果P;
2.4)对大小为n×n×n的点乘操作结果P的每一个平面依次进行列变换、行变换,得到变换后的点乘操作结果Tp;对变换后的点乘操作结果Tp进行顺时针90旋转使得变换后的点乘操作结果Tp中各数据位置重排,得到旋转后的点乘操作结果TpR;针对旋转后的点乘操作结果TpR的每一个平面进行列变换得到大小为m×m×m的变换后点乘操作结果Tp1,作为执行3D Winograd算法输出的结果Tp1
本实施例中,步骤2.1)中进行列变换的函数表达式如式(3)所示、行变换的函数表达式如式(4)所示;
Figure GDA0002963907640000071
式(3)中,(x0 x1 x2 x3)T表示待变换输入特征图子块的某一列,(x0' x1' x2' x3')T表示列变换后对应的特征图子块的列;
Figure GDA0002963907640000081
式(4)中,(x0 x1 x2 x3)表示待变换输入特征图子块的某一行,(x0' x1' x2' x3')表示行变换后对应的特征图子块的行。
本实施例中,步骤2.2)中进行列变换的函数表达式如式(5)所示、行变换的函数表达式如式(6)所示;
Figure GDA0002963907640000082
式(5)中,(w0w1w2)T表示待变换卷积核子块的某一列,(w0' w1' w2' w3')T表示列变换后对应的卷积核子块的列;
Figure GDA0002963907640000083
式(6)中,(w0 w1 w2)表示待变换卷积核子块的某一行,(w0' w1' w2' w3')表示行变换后对应的卷积核子块的行。
本实施例中,步骤2.4)中进行列变换的函数表达式如式(7)所示、行变换的函数表达式如式(8)所示;
Figure GDA0002963907640000084
式(7)中,(m0 m1 m2 m3)T表示待变换点乘子块的某一列,(m0' m1')T表示列变换后对应的点乘子块的列;
Figure GDA0002963907640000091
式(8)中,(m0 m1 m2 m3)表示待变换点乘子块的某一行,(m0' m1')表示行变换后对应的点乘子块的行。
本实施例中,进行顺时针90旋转的的函数表达式如式(9)所示;
DR i,k,j←Di,j,k (9)
式(9)中,Di,j,k为进行顺时针90旋转前的某个元素,DR i,j,k为进行顺时针90旋转后的某个元素,i,j,k分别为元素行、列以及深度的索引。
本实施例中,步骤5)将累加结果Sum写回输出特征图缓存Out采用的写回函数的函数表达式如式(10)所示;
Out[m0][dep+k][(row+i)*C+col+j]=Sum[m0][k][i][j],0≤i,j,k≤m-1. (10)
式(10)中,Out表示输出特征图缓存,m0表示卷积核的索引,dep,row,col分别表示某张特征图中所要读取子块的深度、高度以及宽度方向的索引值,i,j,k分别为特征图的行、列以及深度的索引,Sum[m0][k][i][j]表示第m0张输出特征图的累加结果Sum中深度为k且高度为i、宽度为j像素点。
3D CNN的计算模式与2D CNN和相似,主要包括卷积层、激活层、池化层以及全连接层等计算负载。其中,卷积层占了超过90%的计算负载,剩余的部分主要由全连接构成,而激活层、池化层而几乎忽略不计。Winograd是一种快速卷积算法,本质上是以计算复杂度较低的加法计算代替卷积中计算复杂度较高的乘法计算,因此该算法可有效降低卷积计算的复杂度。由于CNN主要计算负载为卷积层中的卷积计算,因此少数工作运用了2D Winograd算法进行CNN加速并取得了良好的效果。本发明基于Winograd算法的3D CNN加速方法对该算法进行了扩展,并将其用于3D CNN计算中。本实施例中,定义传统3D卷积计算模式为F(m×m×m,r×r×r):即采用大小为r×r×r的卷积核w对大小为n×n×n的图像x进行卷积,得到大小为m×m×m的卷积结果z,其中n=m+r-1。本实施例中,对3D Winograd算法进行了数学化表示如式(11)所示:
z=(M((XxXT)RXT⊙(WwWT)RWT)MT)RMT (11)
式(11)中,z表示得到大小为m×m×m的卷积结果,w表示大小为r×r×r的卷积核,x表示大小为n×n×n的图像,M,X,W均为常数变换矩阵,MT,XT,WT分别表示矩阵M,X,W的转置。所有矩阵的具体数值由m和r决定,⊙表示点乘操作,R表示旋转操作(顺时针方向90度)。为简单起见,本实施例中主要以F(2×2×2,3×3×3)为例进行阐述,在此前提下,即当m=2,r=3时,常数矩阵可确定如式(12)所示:
Figure GDA0002963907640000101
需要说明的是,本发明基于Winograd算法的3D CNN加速方法同样也适用于不同的m和r。假设x=(x0,x1,x2,x3),x0,x1,x2,x3表示x的四个平面,则XxXT定义如式(13)所示:
XxXT=X(x0,x1,x2,x3)XT=(Xx0XT,Xx1XT,Xx2XT,Xx3XT) (13)
式(13)中,X均为常数变换矩阵,XT分别表示矩阵X的转置。
更进一步,假设xi=(xi0,xi1,xi2,xi3),i=0,1,2,3,其中xi0,xi1,xi2,xi3为xi的各个列则有式(14)所示函数表达式:
XxiXT=X(xi0,xi1,xi2,xi3)XT=(Xxi0XT,Xxi1XT,Xxi2XT,Xxi3XT) (14)
式(14)中,Xxi0XT可以分两步进行,先是计算Xxi0,然后计算(Xxi0)XT。两个计算过程均是经典的矩阵-向量乘。可以看到,3D Winograd算法中的矩阵变换可以看做一系列的矩阵-向量乘计算(卷积核变换、点乘结果变换分析同上)。
此外,3D Winograd算法中的点乘操作由公式(15)进行定义:
mi,j,k=ai,j,k*bi,j,k,0≤i,j,k≤n-1. (15)
式(15)中,mi,j,k,ai,j,k,bi,j,k分别表示点乘结果、(XxXT)RXT、(WwWT)RWT中的任意一个点。
本实施例中,3D Winograd算法流程的图形化表达如图2所示、流程图如图3所示,图中符号F,R分别表示待处理图像或者卷积核子块的正平面和右平面,m为(XxXT)RXT和(WwWT)RWT的点乘结果。如图2和图3所示,3D Winograd算法流程描述如下:
算法输入:3D图像x(大小为n×n×n)和3D卷积核w(大小为r×r×r);
算法输出:卷积结果z(大小为m×m×m)。
算法执行过程如下:①:对3D图像x的每个平面(正视图方向,即W1,W2,W3,W4)依次进行列变换(即每个平面的每一列左乘X),行变换(即每个平面的每一行右乘XT),该步骤输出结果为XxXT(大小均为n×n×n),作为第②步的输入;②:对变换后的图像进行顺时针90度旋转,输出结果为(XxXT)R,作为第③步的输入;③:对(XxXT)R的每个平面(正视图方向,即P'1,P'2,P'3,P'4)进行列变换(即右乘XT),输出结果为(XxXT)RXT,作为第⑦步的输入。④:对3D卷积核w的每个平面(正视图方向,即P1,P2,P3,P4)依次进行列变换(即每个平面的每一列左乘W),行变换(即每个平面的每一行右乘WT),输出结果为WwWT,作为第⑤步的输入;⑤:对变换后的卷积核进行顺时针90度旋转,输出结果为(WwWT)R,作为第⑥步的输入;⑥:对(WwWT)R的每个平面(正视图方向,即W'1,W'2,W'3,W'4)进行列变换(即右乘WT),输出结果为(WwWT)RWT(大小均为n×n×n),作为第⑦步的输入;⑦:对上述变换结果(XxXT)RXT和(WwWT)RWT进行点乘操作,即将输入图像中的每个像素点与卷积核中对应位置的权值数据分别相乘,输出为大小n×n×n的点乘结果m,作为第⑧步的输入;⑧:对3D点乘结果m进行与第一至三步或第四至六步完全一致的变换过程,只是把变换矩阵替换成M和MT。输出为最终的结果z(大小为m×m×m)。其中,第①~③步、第④~⑥步两者可以并行执行。
本实施例中将3D Winograd算法应用到3D CNN中时,主要将3D Winograd算法运用到3D CNN中的卷积层计算中,其算法伪代码如图4所示。参见图4,该算法包括五重循环,其中Z,R,C分别表示输出特征图的深度、高度以及宽度,M表示输出特征图的数目(输出通道),N表示输入特征图的数目(输入通道)。以下对代码中的每个函数进行具体介绍。
Load_Image(in,n,dep,row,col,Bin):特征图载入函数,输入参数in表示特征图缓存(数据结构为三维数组),n表示特征图的索引,dep,row,col分别表示某张特征图中所要读取子块的深度、高度以及宽度方向的索引值,输出参数Bin表示读取的特征图子块,大小为n×n×n。该函数功能是从第n张特征图缓存中特定位置中读取4*4*4大小的子块。假设输入特征图大小为D×W×H,每个卷积核大小为r×r×r(Ksize),该函数如式(1)所示。
Load_Weight(w,m0,Bw):权值载入函数,输入参数w表示据结构为四维数组),输入参数m0表示卷积核的索引(一共有M组权值,每组N个卷积核),输出参数Bw表示读取的权值子块。该函数的功能是读取第m组权值缓存中的第n个卷积核,该函数如式(2)所示。
2D_Trans_X(Bin,Tin):特征图变换函数,函数的输入Bin表示待变换的特征图子块,函数的输出Tin表示变换后的特征图子块。该函数的功能是对Bin的每一行、每一列进行行、列变换,变换过程为(XInXT)。2D_Trans_W(),2D_Trans_M()同样为矩阵变换函数,变换过程与2D_Trans_X完全一致,只是将变换矩阵分别换成W(WT)和M(MT)。
Rotate(Tin,TinR):子块旋转函数,Tin表示待旋转子块,TinR表示旋转后子块,该函数的功能是对Tin进行顺时针90旋转,其本质是对子块中各数据进行位置重排。假设Di,j,k为Tin中的某个元素,DR i,j,k为TinR中的某个元素,i,j,k分别为子块中行、列以及深度的索引,则Rotate(Tin,TinR)中的变换操作如式(9)所示;
1D_Trans_X(TinR,Tin1):特征图变换函数,该函数的输入TinR表示待变换的特征图子块,即2D_Trans_X(in,Tin)的输出,函数的输出Tin1表示变换后特征图子块。假设In是TinR中的某一行或某一列,则该函数的功能是对In进行行变换或者列变换,变换过程为InXT(行变换)或XIn(列变换)。1D_Trans_W(),1D_Trans_M()同样为矩阵变换函数,变换过程与1D_Trans_X完全一致,只是将变换矩阵分别换成W(WT)和M(MT)。
3D_Mul(Tin1,Tw1,P):点乘函数,该函数输入为两个大小完全一致的3D数据块Tin1和Tw1,输出P为二者的点乘结果。点乘函数的功能可用式(16)描述:
Pi,j,k←Tini,j,k*Twi,j,k (16)
式(16)中,Pi,j,k为Tini,j,k和Twi,j,k两者的点乘结果,i,j,k分别为输入、输出子块行、列以及深度方向的索引。
3D_Accumulate(Tp1,Sum):累加函数,输入参数Tp1为每次累加的子块,输出Sum为累加结果。每一次的累加结果又作为下次累加过程的输入。该函数的功能可用式(17)描述:
Sumi,j,k←Sumi,j,k+Tpi,j,k (17)
式(17)中,Sumi,j,k表示在Sumi,j,k上累加Tpi,j,k得到的累加结果,i,j,k分别为Tp1,Sum行、列以及深度方向的索引。
Send(Sum,m0,dep,row,col,Out):结果写回函数,该函数以累加结果Sum作为输入,通过索引值m0,dep,row以及col将结果写回输出缓存Out(数据结构为三维数组)中第m张输出特征图中的指定位置。该函数的功能可由式(10)进行描述。
本实施例还提供一种基于Winograd算法的3D CNN加速***,包括IP核,且该IP核被编程以执行本实施例前述基于Winograd算法的3D CNN加速方法的步骤。
如图5所示,本实施例还提供一种基于Winograd算法的3D CNN加速***,包括片外存储以及IP核,IP核包括片上存储和计算模块,片上存储包括输入缓存、权值缓存以及输出缓存,输入缓存、权值缓存以及输出缓存分别与片外存储相连,计算模块包括池化层单元POOL、激活层单元ReLU以及多个并行布置的处理单元PU,处理单元PU包括累加模块和多个并行的基本处理单元PE,多个基本处理单元PE的输入端分别同时与输入缓存、权值缓存相连,且多个基本处理单元PE的输出端分别通过累加模块、激活层单元ReLU、池化层单元POOL与输出缓存相连。如图6所示,基本处理单元PE包括输入特征图转换阵列、输入特征图缓存、输入权值转换阵列、输入权值缓存、点乘模块、点乘结果缓存、点乘结果转换阵列,输入特征图转换阵列的输入端与输入缓存相连、输出端通过输入特征图转换阵列、输入特征图缓存与点乘模块的一个输入端相连,输入权值转换阵列的输入端与权值缓存相连、输出端通过输入权值转换阵列、输入权值缓存、与点乘模块的另一个输入端相连,点乘模块的输出端通过点乘结果缓存、点乘结果转换阵列与累加模块的输入端相连,输入特征图转换阵列、输入权值转换阵列、点乘结果转换阵列均包含依次相连的列变换模块和行变换模块。
数据的存储管理是加速器***构建的难点。由于3D CNN网络中的输入特征图以及权值的数据量往往比较大,将所有输入数据存储在片上存储容量有限的FPGA片上是无法实现的。因此,本实施例将输入数据以及最终的输出结果存储在容量较大的片外存储中。同时,本实施例对输入、输出数据的多个维度进行了分块处理,如表1所示。
表1:分块系数表。
参数 含义 分块系数
M 输出特征图数目 To
N 输入特征图数目 Ti
W 输入特征图宽度 Tw
H 输入特征图高度 Th
D 输入特征图深度 Td
C 输出特征图宽度 Tc
R 输出特征图高度 Tr
Z 输出特征图深度 Tz
由于单个卷积核相对较小,本实施例未对其进行进一步分块。每次计算时,本实施例需要读取的输入特征值数量为Ti*Tw*Th*Td,卷积核权值数量为To*Ti*Ksize(对于F(m×m×m,r×r×r),Ksize=r*r*r);假设卷积核的滑动步长为S,则分块参数间存在以下式(18)所示关系:
Figure GDA0002963907640000131
式(18)中,S为卷积核的滑动步长,r表示卷积核的维度,其余参量详见表1。
计算完成后写回外存的输出特征值数量为To*Tc*Tr*Tz。如图5所示,为了提高数据重用性,减少访存次数以及降低片外访存延迟,本实施例在片上组织了三种缓存:输入缓存、权值缓存以及输出缓存,分别用以存储分块后的输入、权值以及输出数据。对于输入缓存,本实施例采用了双缓存技术使数据预取和计算可以重叠进行,从而隐藏了数据预取延迟。同样地,本实施例对输出缓存也使用了双缓存技术用以隐藏数据写回的延迟。
依照结合Winograd算法的3D CNN的计算过程,本实施例构建了基本处理单元PE以实现该算法。参见图5和图6,可以看到,PE包括一个点乘模块以及多组变换阵列。点乘模块用以执行Winograd算法中的点乘操作,变换阵列则负责执行算法中的多种矩阵变换操作。为了充分利用点乘计算的高度并行性,同时提高点乘模块的计算吞吐量,本实施例对点乘操作进行了循环展开(输入子块的宽度、高度、以及深度三重循环),即在点乘模块中集成了n3个乘法器,同时进行n3个乘法计算,并得到n3个结果。对于矩阵变换阵列,本实施例采用了模板化思路进行构建。根据3D Winograd算法中行、列变换的对称性,本实施例发现二者可以采用相同的模板进行实现。
因此,本实施例构建了如图7(a)~7(c)所示的矩阵变换模板,7(a)的结构对应步骤2.1)中进行列变换的如式(3)所示、行变换如式(4)所示;7(b)的结构对应步骤2.2)中进行列变换的如式(5)所示、行变换如式(6)所示;7(c)的结构对应步骤2.4)中进行列变换的如式(7)所示、行变换如式(8)所示,每个变换模板都可以对被处理子块进行行变换或列变换。由于变换矩阵元素大多为1或-1,并且有较多的零元素,于是本实施例对矩阵变换中的向量乘累加操作进行展开,并将其中的乘法转化为加法或减法,同时采用右移操作代替其中特殊的乘法如×1/2等。可以看到,本实施例设计的模板采用简单的加法器、减法器以及移位器代替了资源开销比较大的乘法器,并且能在一个时钟周期内得到行或列变换结果,达到了资源与性能的良好平衡。
为了进一步提高矩阵变换过程的并行度,本实施例采用上述模板构建了矩阵变换阵列,同时对输入图像、卷积核以及点乘结果的各行、各列进行变换。
计算模块是整个加速器***的核心。本实施例采用了Xilinx公司的高层次综合工具(High-Level Synthesis,HLS)进行描述,且使用“Pragma HLS”关键字表示该工具提供的特殊指令,通过使用特殊指令可以十分方便地实现循环展开(Unroll),循环流水化(Pipeline)等优化手段。如图5所示,本实施例在计算模块中组织了两层并行结构:To个Processing Unit(PU)以及每个PU内部的Ti个Processing Element(PE)。每个PU读取相同的输入特征图子块以及不同的卷积核进行计算。PU间采用了脉动阵列结构进行组织,所有输入特征图数据均由阵列中最左边的PU进行读取,并依次传递到相邻PU。该组织形式的优点是能够有效缓解输入缓存的密集访问,使硬件模块间互连方式从集中式变为分布式,大大减低后端布局布线的复杂度,有利于加速器主频的提升。此外,本实施例采用全局互连的方式进行组织,即每个PU都有独立的访问权值缓存的通道。通过对L4进行展开,To个PU能够同时进行计算;对L5进行展开,使得每个PU中的Ti个PE单元可以进行并行计算,从而提高了计算模块的吞吐量。此外本实施例还对L3进行了循环流水化优化,使得相邻子块的处理可以同时进行,进一步降低了计算模块的延迟。每个PU内部除了包含Ti个PE之外,还集成了一个累加器模块用以对其中的PE单元所同时产生的Ti个临时结果进行累加。当所有输入特征图遍历结束,最终的累加结果经由激活层ReLU以及池化层POOL计算模块处理后被送往输出缓存。其中,池化层计算模块可根据网络具体配置进行旁路。此外,全连接层与卷积层公用一个硬件加速模块,使得整个计算模块能够加速整个3D CNN网络。
核心计算模块构建完之后,下一步本实施例通过复用计算模块以支持全连接层的加速,从而提高计算模块的利用效率,避免为加速全连接层而重新设计一套计算部件。全连接层的计算模式为矩阵-向量乘法,其输入为一维特征向量和二维权值。其中,一维特征向量由上一个计算层(一般是池化层)产生的多张二维特征图展开(flatten)得到,并拼接成一个长向量。全连接层的计算结果仍为一维特征向量,并作为下一个全连接层的输入。图8展示了本实施例提出的全连接层加速方法。本实施例采用了批处理方式进行全连接层的计算,即将Batchsize张输入特征向量组织成一张输入特征图,从而增加了权值数据的重用,有效减少访存次数。其中,Batchsize的大小与F(m×m×m,r×r×r)中进行点乘计算的子块大小相等,即n3(n=m+r-1,图中n=3)。可以看到,本实施例将Batchsize张特征向量中同一位置的像素值组织成一个大小为n3的数据块作为每个PE的输入特征图(图8中用虚线框标出)。全连接层的计算特征决定了每个PE的输入特征图数据需要共享权值,即与同一个权值做乘法计算。因此,权值缓存中的每个权值数据需要复制n3(即64遍)后才被送往PE进行计算。本实施例对计算模块中的变换模块进行旁路,使得每个PE得到的特征图以及权值数据直接进入点乘模块进行计算。PU中各个PE的乘法结果同样需要在本地ACCU中进行累加。按照上述方法,经过N/Ti次累加后,每个PU中的To个PE能同时计算得到Batchsize张输出特征图中的1个最终结果,To个PU能够同时得到Batchsize张输出特征图中的To个最终结果。为了减少输出特征图的存储访问开销,本实施例采用了片上存储对全连接层的计算结果进行缓存,从而直接为下一个全连接层计算提供输入数据。
由于本实施例提出的加速器***最终要在硬件上实现,那么在实现前对加速器进行整体资源的估计就十分必要,通过资源评估可以预先得知硬件平台是否与加速器逻辑适配,从而适当调整加速器逻辑进行适配(当加速器逻辑小于硬件平台资源量时,可以增加加速器逻辑以提升计算性能;当评估资源大于硬件平台资源量,需要适当减小加速器逻辑);而性能评估的目的是为加速器构建找到一组最优的设计参数如To,Ti等,可以有效减少设计空间,避免低效设计参数选择,从而减少加速器设计周期,最大化加速器的性能。
本实施例对DSP以及BRAM资源进行了评估,其评估模型如式(19)~式(23):
DSPused=To*Ti*f(Iw)*n3 (19)
Vin=Ti*(S*Tz+K-S)*(S*Tr+K-S)*(S*Tc+K-S) (20)
Vout=To*Tz*Tr*Tc (21)
Figure GDA0002963907640000164
Figure GDA0002963907640000161
式(19)~式(23)中,DSPused表示DSP资源的使用量,Vin表示缓存的输入特征图数据量,Vout表示缓存的输出特征图数量,
Figure GDA0002963907640000165
表示全连接层缓存权值,BRAMused表示BRAM资源的使用量,Iw表示计算模块流水线处理间隔,To*Ti表示基本处理单元PE的数目,Bwon表示片上存储单元的位宽,BRAMcapacity表示单个BRAM的容量,Part表示缓存的分块因子(partitionfactor),Partin表示输入特征图缓存的分块因子,Partout表示输出特征图缓存的分块因子,Partw表示权值缓存的分块因子,N(Bwon)由公式
Figure GDA0002963907640000162
进行确定,n3为乘法器数量。本实施例发现DSP利用率与Iw有关,通过实验本实施例得到了Iw的经验值f(Iw)≈1/Iw。DSP全部用以实现PE中的点乘模块(共包含n3个乘法器),其余计算模块如矩阵变换、ReLU、POOL等模块则采用加法器或比较器实现,因此并不消耗DSP。由于本实施例采用了双缓存技术,因此BRAM使用量翻了一倍。对于卷积层来说,由于其权值数据较少,本实施例采用了LUTRAM进行存储,因此其并未消耗BRAM资源。而对于全连接层,权值数据较大,本实施例采用了BRAM对其进行存储。全连接层的输入、输出特征向量缓存复用了卷积层的对应缓存,因此并未引入额外存储开销。
为了完成对加速器的性能评估,本实施例主要对加速器的执行时间进行建模。首先,本实施例评估了数据传输时间如式(24)~式(26):
Figure GDA0002963907640000163
Figure GDA0002963907640000171
Figure GDA0002963907640000172
式(24)~式(26)中,
Figure GDA0002963907640000173
表示卷积层计算所需的权值数据量,Data_Width表示数据位宽,BWeff表示加速器有效带宽,Vin表示缓存的输入特征图数据量,Vout表示缓存的输出特征图数量,Ttrans i和Ttrans o分别表示输入/输出数据的读取/发送时间。其次,基于式(24)~式(26),本实施例对总计算时间进行了评估,如式(27)~式(28)所示:
Figure GDA0002963907640000174
Figure GDA0002963907640000175
式(27)~式(28)中,Tcom表示计算时间,Tz表示输出特征图深度,Tr表示输出特征图高度,Tc表示输出特征图宽度,Iw表示计算模块流水线处理间隔,m3表示变换后点乘模块大小(即m*m*m),Freq表示加速器的工作频率,Ttotal表示数据预取时间,Z,R,C分别表示输出特征图的深度、高度以及宽度,M表示输出特征图的数目,N表示输入特征图的数目,To*Ti表示基本处理单元PE的数目,Ttrans i和Ttrans o分别表示输入/输出数据的读取/发送时间。
参数 含义 分块系数
M 输出特征图数目 To
N 输入特征图数目 Ti
W 输入特征图宽度 Tw
H 输入特征图高度 Th
D 输入特征图深度 Td
C 输出特征图宽度 Tc
R 输出特征图高度 Tr
Z 输出特征图深度 Tz
由于本实施例采用了双缓存技术,使得数据预取和计算相互重叠,因此核心计算时间由计算、数据预取时间之中的较大者决定,即
Figure GDA0002963907640000176
因此,为了避免加速器存储受限,本实施例对加速器所需带宽提出了一下约束条件如式(29)所示;
Figure GDA0002963907640000181
式(29)中,BWm表示加速器所需带宽,m3表示变换后点乘模块大小(即m*m*m),Freq表示加速器的工作频率,Vin表示缓存的输入特征图数据量,Vout表示缓存的输出特征图数量,Tz表示输出特征图深度,Tr表示输出特征图高度,Tc表示输出特征图宽度,Iw表示计算模块流水线处理间隔。公式(29)是基于Tcom≥Ttrans得到的。从公式(29)可以看出,影响Ttotal大小的变量较多,因此通过穷举法对设计空间进行搜索以找到最优的参数需要很大时间开销。为此,本实施例考虑到FPGA平台有限的片上资源,对设计空间进行了约束条件如式(30)所示;
Figure GDA0002963907640000182
式(30)中,DSPused表示DSP资源的使用量,BRAMused表示BRAM资源的使用量,DSPtotal表示DSP资源的总量,BRAMtotal表示BRAM资源的总量,通过上述约束,本实施例可以有效减少设计空间大小,缩短找到最优解的时间。
本实施例具体采用了Xilinx公司的HLS工具对3D CNN加速器进行实现,并封装成IP核。围绕该IP核,本实施例采用Xilinx公司的Vivado 2016.4搭建了片上***对其进行性能测试。该片上***主要包括1个嵌入式处理器核(MicroBlaze)、DDR控制器(mig_7_series_0),以及CNN加速器(baseWinograd_0)。处理器核可通过M_AXI_DP接口对加速器进行参数配置,并启动加速器进行工作。启动后,加速器自行通过DDR控制器读取数据进行计算,计算结束后将结果写回DDR,整个过程无需CPU进行干预,且通过读取计时器进行时间统计,并通过串口将信息打印出来。本实施例分别在Xilinx公司的VC709平台上实现了上述片上***。VC709平台上包含一颗Virtex-7 690t FPGA芯片以及两块DDR3芯片。加速器在VC709上的综合频率达到150MHz,VC709平台上则采用了DDR3芯片。
实施例二:
本实施例与实施例一基本相同,其主要区别点为:本实施例在S2C公司的VUS440平台上实现了上述片上***,VUS440平台与实施例一的VC709平台基本相同,其主要区别点为:VUS440平台上包含一颗Xilinx VCU440FPGA芯片以及一块DDR4芯片,加速器在VUS440平台上的综合频率达到200MHz。
为了对实施例一和实施例二的性能进行对比验证,本实施例选取了C3D网络进行测试,该3D CNN模型在视频分类领域有着广泛的运用。该网络参数如表2所示,可以看到,该网络卷积核大小均为3*3*3,卷积核步长均为1,非常适合采用Winograd算法进行计算优化。
表2:C3D网络参数。
Figure GDA0002963907640000191
实际测试中,本实施例并没有针对每一个卷积层规模都实现了一个加速器结构,而是采用了一个统一的加速器结构进行测试。统一的设计参数为Ti=4,To=32。实验结果如图9所示,可以看到,在VC709平台上加速器达到了560GOPS的峰值性能,而在VUS440平台上则达到了1112GOPS。图8中虚线指的是采用基于Winograd算法的3D CNN加速方法的加速器在两个平台上能达到的理论峰值性能,而实线指的是两个平台上评估模型所预测的计算性能。可以看到,一方面本实施例的加速器能够达到较高的计算效率(实测性能/峰值性能),比如对于CONV-2加速时,计算效率达到了80%;另一方面,本实施例的评估模型能够准确地对加速器性能进行预测。
此外,本实施例还与CPU(采用Intel E5-2680)与GPU加速器(采用NVDIA K40加速器)方案进行了对比,分别采用OpenBlas以及Cudnn进行性能优化。对比结果如表3所示。
表3:对比结果数据表。
Figure GDA0002963907640000192
参见表3可知,以CPU(采用Intel E5-2680)的速度和能效比作为基准速度:GPU加速器(采用NVDIA K40加速器)的加速比为20倍、能效比为9.2倍;在本实施例一采用的VC709平台上,采用基于Winograd算法的3D CNN加速方法的加速器的加速比为7.3倍、能效比为17.1倍;在本实施例二采用的VUS440平台上,采用基于Winograd算法的3D CNN加速方法的加速器的加速比为13.4倍、能效比为60.3倍。由此可以看到,采用本发明基于Winograd算法的3D CNN加速方法在计算性能方面远高于CPU,虽然在计算性能方面低于GPU,但是在功耗、能效比方面相对CPU、GPU均具有较大优势。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (8)

1.一种基于Winograd算法的3D CNN加速方法,其特征在于实施步骤包括:
1)从输入特征图in中读取待变换的特征图子块Bin,从权值缓存w中读取卷积核子块Bw;
2)对特征图子块Bin以及卷积核子块Bw执行3D Winograd算法输出结果Tp1
3)对执行3D Winograd算法输出的结果Tp1进行累加,并输出累加结果Sum;
4)判断是否输入特征图in中的所有输入特征图都读取完毕,如果尚未读取完毕,则跳转执行步骤1);否则,跳转执行步骤5);
5)将累加结果Sum写回输出特征图缓存Out;
步骤2)的详细步骤包括:
2.1)对大小为n×n×n的特征图子块Bin的每一个平面依次进行列变换、行变换,得到变换后的特征图子块Tin;对特征图子块Tin进行顺时针90旋转使得特征图子块Tin中各数据位置重排,得到旋转后的特征图子块TinR;针对旋转后的特征图子块TinR的每一个平面进行列变换得到变换后大小为n×n×n的特征图子块Tin1
2.2)对大小为r×r×r的卷积核子块Bw的每一个平面依次进行列变换、行变换,得到变换后的卷积核子块Tw;对卷积核子块Tw进行顺时针90旋转使得卷积核子块Tw中各数据位置重排,得到旋转后的卷积核子块TwR;针对旋转后的卷积核子块TwR的每一个平面进行列变换得到变换后的大小为n×n×n的卷积核子块Tw1
2.3)针对大小完全一致的特征图子块Tin1和卷积核子块Tw1进行点乘操作,得到大小为n×n×n的点乘操作结果P;
2.4)对大小为n×n×n的点乘操作结果P的每一个平面依次进行列变换、行变换,得到变换后的点乘操作结果Tp;对变换后的点乘操作结果Tp进行顺时针90旋转使得变换后的点乘操作结果Tp中各数据位置重排,得到旋转后的点乘操作结果TpR;针对旋转后的点乘操作结果TpR的每一个平面进行列变换得到大小为m×m×m的变换后点乘操作结果Tp1,作为执行3D Winograd算法输出的结果Tp1
2.根据权利要求1所述的基于Winograd算法的3D CNN加速方法,其特征在于,步骤1)中从输入特征图in中读取待变换的特征图子块Bin时,采用Z、R、C、M、N五重循环遍历的方式读取待变换的特征图子块Bin,其中Z,R,C分别表示输出特征图的深度、高度以及宽度,M表示输出特征图的数目,N表示输入特征图的数目,且读取待变换的特征图子块Bin采用的载入函数的函数表达式如式(1)所示,从权值缓存w中读取卷积核子块Bw采用的载入函数的函数表达式如式(2)所示;
Figure FDA0002963907630000021
式(1)中,Bin[k][j][i]表示读取下标为k,j,i的特征图子块Bin,特征图子块Bin大小为n×n×n,dep,row,col分别表示某张特征图中所要读取子块的深度、高度以及宽度方向的索引值,in表示输入特征图in,S表示卷积窗口的滑动步长,r表示卷积核的维度,W表示输入特征图宽度;
Bw[k][j][i]=w[m0][n][k][j*r+i],0≤i,j,k<r. (2)
式(2)中,Bw[k][j][i]表示读取下标为k,j,i的卷积核子块Bw,w表示权值缓存,m0,n表示卷积核的索引,权值缓存w中一共有M组权值、每组N个卷积核,r表示卷积核的维度。
3.根据权利要求1所述的基于Winograd算法的3D CNN加速方法,其特征在于,步骤2.1)中进行列变换的函数表达式如式(3)所示、行变换的函数表达式如式(4)所示;
Figure FDA0002963907630000022
式(3)中,(x0 x1 x2 x3)T表示待变换输入特征图子块的某一列,(x0' x1' x2' x3')T表示列变换后对应的特征图子块的列;
Figure FDA0002963907630000023
式(4)中,(x0 x1 x2 x3)表示待变换输入特征图子块的某一行,(x0' x1' x2' x3')表示行变换后对应的特征图子块的行。
4.根据权利要求1所述的基于Winograd算法的3D CNN加速方法,其特征在于,步骤2.2)中进行列变换的函数表达式如式(5)所示、行变换的函数表达式如式(6)所示;
Figure FDA0002963907630000031
式(5)中,(w0 w1 w2)T表示待变换卷积核子块的某一列,(w0' w1' w2' w3')T表示列变换后对应的卷积核子块的列;
Figure FDA0002963907630000032
式(6)中,(w0 w1 w2)表示待变换卷积核子块的某一行,(w0' w1' w2' w3')表示行变换后对应的卷积核子块的行。
5.根据权利要求1所述的基于Winograd算法的3D CNN加速方法,其特征在于,步骤2.4)中进行列变换的函数表达式如式(7)所示、行变换的函数表达式如式(8)所示;
Figure FDA0002963907630000033
式(7)中,(m0 m1 m2 m3)T表示待变换点乘子块的某一列,(m0' m1')T表示列变换后对应的点乘子块的列;
Figure FDA0002963907630000034
式(8)中,(m0 m1 m2 m3)表示待变换点乘子块的某一行,(m0' m1')表示行变换后对应的点乘子块的行。
6.根据权利要求1所述的基于Winograd算法的3D CNN加速方法,其特征在于,所述进行顺时针90旋转的的函数表达式如式(9)所示;
DR i,k,j←Di,j,k (9)
式(9)中,Di,j,k为进行顺时针90旋转前的某个元素,DR i,j,k为进行顺时针90旋转后的某个元素,i,j,k分别为元素行、列以及深度的索引。
7.根据权利要求1所述的基于Winograd算法的3D CNN加速方法,其特征在于,步骤5)将累加结果Sum写回输出特征图缓存Out采用的写回函数的函数表达式如式(10)所示;
Out[m0][dep+k][(row+i)*C+col+j]=Sum[m0][k][i][j],0≤i,j,k≤m-1. (10)
式(10)中,Out表示输出特征图缓存,m0表示卷积核的索引,dep,row,col分别表示某张特征图中所要读取子块的深度、高度以及宽度方向的索引值,i,j,k分别为特征图的行、列以及深度的索引,Sum[m0][k][i][j]表示第m0张输出特征图的累加结果Sum中深度为k且高度为i、宽度为j像素点,C表示输出特征图的宽度。
8.一种基于Winograd算法的3D CNN加速***,包括IP核,其特征在于:所述IP核被编程以执行权利要求1~7中任意一项基于Winograd算法的3D CNN加速方法的步骤。
CN201711342538.0A 2017-12-14 2017-12-14 一种基于Winograd算法的3D CNN加速方法及*** Active CN107993186B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711342538.0A CN107993186B (zh) 2017-12-14 2017-12-14 一种基于Winograd算法的3D CNN加速方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711342538.0A CN107993186B (zh) 2017-12-14 2017-12-14 一种基于Winograd算法的3D CNN加速方法及***

Publications (2)

Publication Number Publication Date
CN107993186A CN107993186A (zh) 2018-05-04
CN107993186B true CN107993186B (zh) 2021-05-25

Family

ID=62038616

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711342538.0A Active CN107993186B (zh) 2017-12-14 2017-12-14 一种基于Winograd算法的3D CNN加速方法及***

Country Status (1)

Country Link
CN (1) CN107993186B (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108765247B (zh) * 2018-05-15 2023-01-10 腾讯科技(深圳)有限公司 图像处理方法、装置、存储介质及设备
CN110766128A (zh) * 2018-07-26 2020-02-07 北京深鉴智能科技有限公司 卷积计算单元、计算方法及神经网络计算平台
US11954573B2 (en) * 2018-09-06 2024-04-09 Black Sesame Technologies Inc. Convolutional neural network using adaptive 3D array
CN109447241B (zh) * 2018-09-29 2022-02-22 西安交通大学 一种面向物联网领域的动态可重构卷积神经网络加速器架构
CN109740731B (zh) * 2018-12-15 2023-07-18 华南理工大学 一种自适应卷积层硬件加速器设计方法
CN109919307B (zh) * 2019-01-28 2023-04-07 广东浪潮大数据研究有限公司 Fpga及深度残差网络实现方法、***、计算机介质
CN109885407B (zh) * 2019-03-05 2021-09-21 上海商汤智能科技有限公司 数据处理方法和装置、电子设备、存储介质
CN110188865B (zh) * 2019-05-21 2022-04-26 深圳市商汤科技有限公司 信息处理方法及装置、电子设备和存储介质
JP7251354B2 (ja) * 2019-06-26 2023-04-04 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
CN110516334B (zh) * 2019-08-16 2021-12-03 浪潮电子信息产业股份有限公司 基于硬件环境的卷积计算仿真测试方法、装置及相关设备
CN112686365B (zh) * 2019-10-18 2024-03-29 华为技术有限公司 运行神经网络模型的方法、装置和计算机设备
CN112765538B (zh) * 2019-11-01 2024-03-29 中科寒武纪科技股份有限公司 数据处理方法、装置、计算机设备和存储介质
CN110930290B (zh) * 2019-11-13 2023-07-07 东软睿驰汽车技术(沈阳)有限公司 一种数据处理方法及装置
CN113033813B (zh) * 2019-12-09 2024-04-26 中科寒武纪科技股份有限公司 数据处理方法、装置、计算机设备和存储介质
CN111459877B (zh) * 2020-04-02 2023-03-24 北京工商大学 基于FPGA加速的Winograd YOLOv2目标检测模型方法
CN111626414B (zh) * 2020-07-30 2020-10-27 电子科技大学 一种动态多精度神经网络加速单元
CN112862091B (zh) * 2021-01-26 2022-09-27 合肥工业大学 一种基于快速卷积的资源复用型神经网络硬件加速电路
CN113269302A (zh) * 2021-05-11 2021-08-17 中山大学 面向2D和3D卷积神经网络的Winograd处理方法及***
CN113407904B (zh) * 2021-06-09 2023-04-07 中山大学 兼容多维度卷积神经网络的Winograd处理方法、***及介质
CN113592088B (zh) * 2021-07-30 2024-05-28 中科亿海微电子科技(苏州)有限公司 基于细粒度卷积计算结构的并行度确定方法及***
CN114003201A (zh) * 2021-10-29 2022-02-01 浙江大华技术股份有限公司 矩阵变换方法、装置及卷积神经网络加速器
CN113835758B (zh) * 2021-11-25 2022-04-15 之江实验室 基于向量指令加速计算的Winograd卷积实现方法
CN115906948A (zh) * 2023-03-09 2023-04-04 浙江芯昇电子技术有限公司 一种全连接层硬件加速装置及方法
CN116167423B (zh) * 2023-04-23 2023-08-11 南京南瑞信息通信科技有限公司 一种实现cnn卷积层的装置及加速器
CN116248252B (zh) * 2023-05-10 2023-07-14 蓝象智联(杭州)科技有限公司 一种用于联邦学习的数据点乘处理方法
CN116401502B (zh) * 2023-06-09 2023-11-03 之江实验室 一种基于NUMA***特性优化Winograd卷积的方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104881877A (zh) * 2015-06-12 2015-09-02 哈尔滨工业大学 基于fpga的卷积与时序优化的图像关键点检测的方法
US20170344876A1 (en) * 2016-05-31 2017-11-30 Samsung Electronics Co., Ltd. Efficient sparse parallel winograd-based convolution scheme
CN107169090A (zh) * 2017-05-12 2017-09-15 深圳市唯特视科技有限公司 一种利用内容环绕信息提取图像表征的特定对象检索方法
CN107392183B (zh) * 2017-08-22 2022-01-04 深圳Tcl新技术有限公司 人脸分类识别方法、装置及可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种支持优化分块策略的矩阵乘加速器设计;沈俊忠,肖涛,乔寓然,杨乾明,文梅;《计算机工程与科学》;20160930;第38卷(第9期);第1748-1754页 *

Also Published As

Publication number Publication date
CN107993186A (zh) 2018-05-04

Similar Documents

Publication Publication Date Title
CN107993186B (zh) 一种基于Winograd算法的3D CNN加速方法及***
Lu et al. SpWA: An efficient sparse winograd convolutional neural networks accelerator on FPGAs
Liang et al. Evaluating fast algorithms for convolutional neural networks on FPGAs
Zhang et al. Frequency domain acceleration of convolutional neural networks on CPU-FPGA shared memory system
Shen et al. Towards a uniform template-based architecture for accelerating 2D and 3D CNNs on FPGA
CN106940815B (zh) 一种可编程卷积神经网络协处理器ip核
CN111291859B (zh) 通用矩阵-矩阵乘法数据流加速器半导体电路
Podili et al. Fast and efficient implementation of convolutional neural networks on FPGA
Lu et al. Evaluating fast algorithms for convolutional neural networks on FPGAs
CN108241890B (zh) 一种可重构神经网络加速方法及架构
JP2024096786A (ja) ニューラルネットワーク計算ユニットにおける入力データのスパース性の活用
Wang et al. PipeCNN: An OpenCL-based FPGA accelerator for large-scale convolution neuron networks
CN110851779B (zh) 用于稀疏矩阵运算的脉动阵列架构
Shahshahani et al. Memory optimization techniques for fpga based cnn implementations
Tang et al. EF-train: Enable efficient on-device CNN training on FPGA through data reshaping for online adaptation or personalization
Huang et al. A high performance multi-bit-width booth vector systolic accelerator for NAS optimized deep learning neural networks
Wu Review on FPGA-based accelerators in deep learning
CN115221102B (zh) 用于优化片上***的卷积运算操作的方法和相关产品
CN114003201A (zh) 矩阵变换方法、装置及卷积神经网络加速器
Shabani et al. Hirac: A hierarchical accelerator with sorting-based packing for spgemms in dnn applications
Pedram et al. Transforming a linear algebra core to an FFT accelerator
CN110766136B (zh) 一种稀疏矩阵与向量的压缩方法
Akin et al. FFTs with near-optimal memory access through block data layouts: Algorithm, architecture and design automation
Waidyasooriya et al. FPGA implementation of heterogeneous multicore platform with SIMD/MIMD custom accelerators
US20220188613A1 (en) Sgcnax: a scalable graph convolutional neural network accelerator with workload balancing

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