CN113283591B - 基于Winograd算法和近似乘法器的高效卷积实现方法及装置 - Google Patents
基于Winograd算法和近似乘法器的高效卷积实现方法及装置 Download PDFInfo
- Publication number
- CN113283591B CN113283591B CN202110827665.XA CN202110827665A CN113283591B CN 113283591 B CN113283591 B CN 113283591B CN 202110827665 A CN202110827665 A CN 202110827665A CN 113283591 B CN113283591 B CN 113283591B
- Authority
- CN
- China
- Prior art keywords
- matrix
- bit
- convolution
- operand
- winograd
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
本申请公开了一种基于Winograd算法和近似乘法器的高效卷积实现方法及装置,所述方法包括:将获取的初始特征图分割成多个第一矩阵构成的矩阵序列,每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素;获取每一个第一矩阵对应一个输入矩阵以及初始特征图的初始卷积权重;根据初始卷积权重,计算作为Winograd卷积权重的第二矩阵;将各输入矩阵分别和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵,其中,每一个输入矩阵对应一个输出矩阵;将多个输出矩阵进行拼接,得到输出特征图。采用前述的方案,可大大降低单位卷积输出所需的乘法器的数量,提高卷积计算效率。
Description
技术领域
本申请涉及神经网络技术领域,尤其涉及一种基于Winograd算法和近似乘法器的高效卷积实现方法及装置。
背景技术
卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。随着深度学习的广泛应用与发展,卷积神经网络被使用的场景越来越多,特别是在图像识别场景中获得了突破性的发展。
卷积神经网络部署于硬件上计算时,对于传统的卷积计算方法,输入一般是一个三维矩阵,分别有长,宽和通道数三个维度,有多个卷积核与输入矩阵进行卷积操作,其中每个卷积核也是三维的,和输入矩阵具有相同通道数。每个卷积核以一定步长在输入矩阵的长宽方向上进行滑动,并将其当前所覆盖的一个三维区域内的卷积核值和对应位置的输入矩阵的值进行乘加累计,最终得到输出矩阵上的一个值。多个卷积核进行这样的操作,并将所有得到的输出进行重叠,得到最终的一个三维的卷积输出。例如图1所示,图1中采用输入为经过预处理后的图片展示了单个卷积核的计算方式,计算每一个输出矩阵中的元素需要通道数×卷积核宽×卷积核高次乘法,图1中需要3×3×3=27次乘法来计算一个输出值,对于单个卷积核的完整计算就需要224×224×27=1354752次乘法,需要硬件提供大量的乘法计算单元即乘法器来处理。
因此,由以上可见,传统的卷积计算方法耗费乘法器数量较多,计算效率往往较为低下。因此,目前亟需一种耗费乘法计算单元较少,高效率的卷积计算方法。
发明内容
本申请提供了一种基于Winograd算法和近似乘法器的高效卷积实现及装置,以解决传统的卷积计算方法耗费乘法器数量较多,计算效率往往较为低下的问题。
第一方面,本申请实施例提供一种基于Winograd算法和近似乘法器的高效卷积实现方法,所述方法用于计算卷积层中卷积核大小为3×3,步长为1的卷积运算,所述方法包括:
获取初始特征图;
将所述初始特征图分割成多个第一矩阵构成的矩阵序列,其中每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素;获取每一个所述第一矩阵对应一个输入矩阵;
获取初始特征图的初始卷积权重;
根据所述初始卷积权重,计算得到包含6行6列矩阵元素的第二矩阵,作为Winograd卷积权重;
将各输入矩阵分别和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵,其中,每一个输入矩阵对应一个输出矩阵;
将多个输出矩阵进行拼接,得到输出特征图。
结合第一方面,在一种实现方式中,所述输入矩阵由第一矩阵、第一常系数矩阵及第一常系数矩阵转置矩阵相乘得到。
结合第一方面,在一种实现方式中,所述Winograd卷积权重由初始卷积权重、第二常系数矩阵及第二常系数矩阵转置矩阵相乘得到。
结合第一方面,在一种实现方式中,所述输出矩阵使用以下公式进行计算:
结合第一方面,在一种实现方式中,所述Winograd卷积权重使用信号-量化噪音比进行量化精度的评估,具体使用以下公式计算:
其中,SQNR为信号-量化噪音比,wi表示原始的浮点数卷积权重,wqi表示量化后的定点数卷积权重。
结合第一方面,在一种实现方式中,所述近似乘法器的计算过程如下:
将所述输入矩阵和Winograd卷积权重分别量化为两个操作数;
分别对两个操作数进行截取,获得输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数;
将输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数进行乘法计算;
最后对乘法计算结果数进行向左移位操作,从而得到最终的乘法结果,其中,移位的数量是先前截取后的最后剩余段的长度和。
结合第一方面,在一种实现方式中,对操作数进行截取的方法包括:
如果操作数的首位是0,且在紧接着首位的探测段中存在取值为1的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是0,且所述探测段不存在取值为1的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段存在取值为0的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段不存在取值为0的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数。
第二方面,本申请实施例部分提供了一种基于Winograd算法和近似乘法器的高效卷积实现装置,所述装置用于计算卷积层中卷积核大小为3×3,步长为1的卷积运算,所述装置包括:
初始特征图获取模块,用于获取初始特征图;
输入矩阵获取模块,用于将所述初始特征图分割成多个第一矩阵构成的矩阵序列,其中每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素,获取每一个所述第一矩阵对应一个输入矩阵;初始卷积权重获取模块,用于获取初始特征图的初始卷积权重;
Winograd卷积权重获取模块,用于根据所述初始卷积权重,计算得到包含6行6列矩阵元素的第二矩阵,作为Winograd卷积权重;
输出矩阵获取模块,用于将各输入矩阵分别和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵,其中,每一个输入矩阵对应一个输出矩阵;
输出特征图获取模块,将多个输出矩阵进行拼接,得到输出特征图。
结合第二方面,在一种实现方式中,所述输出矩阵获取模块包括近似乘法器单元,所述近似乘法器单元用于执行以下操作:
将输入矩阵和Winograd卷积权重分别量化为两个操作数;
分别对两个操作数进行截取,获得输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数;
将输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数进行乘法计算;
最后对乘法计算结果数进行向左移位操作,从而得到最终的乘法结果,其中,移位的数量是先前截取后的最后剩余段的长度和。
结合第二方面,在一种实现方式中,对操作数进行截取的方法包括:
如果操作数的首位是0,且在紧接着首位的探测段中存在取值为1的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是0,且所述探测段不存在取值为1的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段存在取值为0的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段不存在取值为0的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数。
本申请公开了一种基于Winograd算法和近似乘法器的高效卷积实现及装置,所述方法用于计算卷积层中卷积核大小为3×3,步长为1的卷积运算,所述方法包括:获取初始特征图;将所述初始特征图分割成多个第一矩阵构成的矩阵序列,其中每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素;获取每一个所述第一矩阵对应一个输入矩阵;获取初始特征图的初始卷积权重;根据所述初始卷积权重,计算得到包含6行6列矩阵元素的第二矩阵,作为Winograd卷积权重;将各输入矩阵分别和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵,其中,每一个输入矩阵对应一个输出矩阵;将多个输出矩阵进行拼接,得到输出特征图。采用本申请实施例公开的方案,可以大大降低单位卷积输出所需的乘法计算单元即乘法器的数量,提高卷积计算效率。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是传统的卷积计算方法示意图;
图2是本申请实施例提供的一种高效卷积计算方法的流程示意图;
图3是本申请实施例提供的一种高效卷积计算方法的示意图;
图4是本申请一个实施例中Winograd卷积权重和原权重分布示意图;
图5是本申请一个实施例中传统卷积和Winograd卷积8bit量化后的卷积权重和原浮点权重之间的SQNR对比图;
图6是本申请一个实施例中传统卷积和Winograd卷积10bit量化后的卷积权重和原浮点权重之间的SQNR对比图;
图7是本申请一个实施例中近似乘法器初始操作数的示例图;
图8是本申请一个实施例中近似乘法器操作数的示例图;
图9是本申请实施例提供的一种高效卷积计算装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
由背景技术可知,目前的卷积计算中耗费乘法器数量较多,不仅降低计算效率,并且会增加硬件资源的消耗,因此针对上述问题,本申请实施例提出一种基于Winograd算法和近似乘法器的高效卷积计算方法及装置,大大降低了单位卷积输出所需的乘法计算单元数量,同时利用近似乘法器进一步降低了硬件资源的消耗。
本申请实施例公开了一种基于Winograd算法和近似乘法器的高效卷积实现方法,也即一种特征图的生成方法,所述方法用于计算卷积层中卷积核大小为3×3,步长为1的卷积运算,参照图1,所述方法包括:
S11,获取初始特征图。
其中,初始特征图也可以称为输入特征图,是对待处理的对象进行处理转换为计算机可识别的特征图,其中,所述待处理的对象可以是图像、视频等,所述特征图在图像领域可以是图像的像素值、RGB值或者灰度值等,在视频领域可以是人脸数据等。
如在图像处理领域,可以将图像中的像素作为特征,提取出图像中的像素点组成特征图,作为初始特征图。
S12,将所述初始特征图分割成多个第一矩阵构成的矩阵序列,其中每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素,获取每一个所述第一矩阵对应一个输入矩阵。相邻矩阵之间具有2行或2列相重叠的矩阵元素,是指在相邻矩阵的两个矩阵中,前一矩阵中第5行矩阵元素与后一矩阵中第1行矩阵元素相同,且前一矩阵中第6行矩阵元素与后一矩阵中第2行矩阵元素相同;或者是指,前一矩阵中第5列矩阵元素与后一矩阵中第1列矩阵元素相同,且前一矩阵中第6列矩阵元素与后一矩阵中第2列矩阵元素相同。
其中,在图像处理领域,矩阵元素可以是图像的像素值、RGB值或者灰度值等,关于矩阵元素以及行和列的理解,此处用具体的示例进行说明,例如在数字图像处理中,待处理的平面数字图像可被看做一个大矩阵,图像的每个像素对应着矩阵的每个元素,假设平面的分辨率是1024*768,那么对应的大矩阵的行数=1024,列数=768,为便于计算,可以对大矩阵进行分割,形成有固定的行数和列数的小矩阵。
步骤S11-S12是获取输入矩阵的过程,输入矩阵与第一矩阵一一对应。如图3所示,图3中a表示初始特征图及其处理过程,首先是获取初始特征图,然后初始特征图被分割成多个6×6大小的小块,即第一矩阵,且块与块之间有2行或2列的重叠,也就是两相邻的矩阵之间共用2行或2列的矩阵元素,然后将每一个6×6的小块(第一矩阵d)与第一常系数矩阵B及第一常系数矩阵转置矩阵BT进行乘法计算,由于B和其转置均为6×6大小,如下所示:
因此,BTdB的计算结果是6×6大小的矩阵,每一个6×6大小第一矩阵均采用上述计算,获取第一矩阵对应的多个6×6大小的输出矩阵。
S13,获取初始特征图的初始卷积权重。
本步骤中,初始卷积权重可以为已知数,即可以提前获取。其获取方法可以是:权重值首先被赋予一些初始值,然后通过将卷积神经网络在某个数据集上经过大量的正向计算和反向传播将这些值逐步进行修正,直到在数据集上达到一定的任务准确率(例如图片分类的准确率),也就是训练过程。神经网络的训练可以采用现有技术,本申请不做具体限定,初始卷积权重是从已经训练好的神经网络模型中提取出来的最佳值。本实施例中指的是长宽为3×3,滑动步长为1的卷积权重。
S14,根据所述初始卷积权重,计算得到包含6行6列矩阵元素的第二矩阵,作为Winograd卷积权重。
本步骤中,Winograd卷积权重的计算是将步骤S13得到的初始卷积权重g、第二常系数矩阵及第二常系数矩阵转置矩阵GT进行乘法计算,即GgGT,得到Winograd卷积权重。第二矩阵为6×6大小的矩阵。
其中,G是一个6×3的系数矩阵,GT是其转置矩阵大小为3×6,如下所示:
上述的GgGT计算式是指三个矩阵做矩阵乘法,一个6×3的矩阵,乘以一个3×3的矩阵,再乘以一个3×6的矩阵,得到一个6×6大小的矩阵,也就是适用于Winograd卷积的卷积权重,这里所有的矩阵乘运算都只是在长,宽维度上进行,卷积权重的通道维度上均采用这样的相同的二维矩阵运算,因此在硬件上都可以通过加法完成,不需要乘法器的参与,提高计算效率。
S15,将各输入矩阵分别和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵,其中,每一个输入矩阵对应一个输出矩阵。
其中,Winograd算法如下式所示:
本步骤中是将步骤S12得到的输出矩阵BTdB和S14得到的Winograd卷积权重GgGT使用近似乘法器进行运算,得到多个输出矩阵的过程。由于BTdB和GgGT计算结果都是6×6大小的矩阵,因此可以进行乘法器运算,运算结果再通过和大小为4×6的第三常系数矩阵A及第三常系数矩阵转置AT做乘法得到最后的一个4×4大小的Winograd卷积输出,得到多个输出矩阵。AT如下所示:
S16,将多个输出矩阵进行拼接,得到输出特征图。
最后,将步骤S15得到的所有4×4输出矩阵结果进行拼接,如图3中b所示,即得到对应的Winograd卷积的输出特征图。
因此,采用本申请实施例公开的方案,可以大大降低单位卷积输出所需的乘法计算单元即乘法器的数量,提高卷积计算效率。
Winograd算法在计算卷积时会将常规的3×3卷积核转换为6×6大小,而这一步会引起卷积权重值分布的变化。为了达到相同的计算精度,Winograd卷积权重量化位宽就会不同于原始卷积权重的量化位宽,而量化位宽的变化也就意味着硬件上涉及的相关计算的资源消耗不同,这一点会导致Winograd算法用于卷积计算硬件加速的资源消耗高于理论值,因此,本申请对Winograd算法在计算卷积时会产生的所有中间需要寄存的值都做了详细的量化,使得量化后的计算能达到和原神经网络几乎相同的推测精度的同时,又使各部分量化位宽尽量小来节省硬件资源。
本申请实施例在获取Winograd卷积权重时,一个长宽大小为3×3的卷积核经过上式中的转换计算大小变为6×6(通道方向维度不变),而转换矩阵中的值均小于1,因此在计算后权重的分布将会发生变化,如图4所示,图4为Winograd卷积权重与传统卷积权重分布对比图,即权重有所不同指权重的分布有不同,也意味着当在硬件上量化时需要采用不同的量化策略。图4中是以YOLOv3网络中第6层卷积层为例,将Winograd卷积权重和原权重分布做了对比,发现Winograd权重相比之下更加集中于0,理论上讲需要更长的位宽来进行量化。
针对量化误差使用SQNR(Signal-to-quantization-noise ratio,信号-量化噪音比)来进行量化精度的评估,量化误差越小,SQNR越大,SQNR的计算方法如下:
其中,wi表示原始的浮点数卷积权重,wqi表示量化后的定点数卷积权重。
然后分别对YOLOv3网络不同层的原权重和Winograd卷积权重进行了8bit和10bit的量化,并计算了相应的SQNR,如图5和图6所示,图5是针对传统卷积和Winograd卷积8bit量化后的卷积权重和原浮点权重之间的SQNR,图6是针对传统卷积和Winograd卷积10bit量化后的卷积权重和原浮点权重之间的SQNR,此外,针对一些其他网络(YOLOv3-tiny,ResNet34和MobileNet V2)的两种权重也进行了8bit和10bit的量化,并得到平均SQNR,如表1所示:
表1
从图5和图6以及表1的结果可以看出,Winograd卷积权重需要更多bit位来进行足够精度的量化。
进一步地,本申请实施例还针对4个当前比较流行的神经网络模型:YOLOv3,YOLOv3-tiny,ResNet34和MobileNet V2中的卷积计算部分进行了详细的量化,得到了不同部分的量化位宽,再在VOC数据集和ImageNet数据集上分别进行了推测。原模型的推测表现如下表2所示:
表2
针对神经网络模型YOLOv3,YOLOv3-tiny,ResNet34和MobileNet V2的量化模型的推理表现如下表3所示:
表3
因此,由以上示例可以看出,本申请在保证了使用原权重的量化模型和使用Winograd卷积权重的量化模型在推理精度上和原模型基本一致,同时又可以提高效率。
更进一步地,针对上述中,Winograd卷积权重需要更多bit位量化从而在计算乘法时可能会引起额外开销的问题,本申请实施例还提出了加入近似乘法器的进行卷积计算的技术,也就是在硬件上计算Winograd卷积需要乘法操作时,即需要使用硬件上的乘法单元,本申请实施例使用近似乘法器来取代这些乘法单元进行乘法运算,提升卷积运算效率,具体运算过程如下:
将输入矩阵和Winograd卷积权重分别量化为两个操作数。
分别对两个操作数进行截取,获得输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数;
将输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数进行乘法计算,最后对乘法计算结果数进行向左移位操作,从而得到最终的乘法结果,其中,移位的数量是先前截取后的最后剩余段的长度和。
其中,针对输入矩阵或者Winograd卷积权重对应的操作数的截取,均可以采用如下方法:
根据操作数的首位是1或者0确定是正数补码还是负数补码。
如果操作数的首位是0,为正数补码,则在紧接着首位的探测段部分查找第一个“1” (即第一个值为1的比特位)出现的位置;如果值为1的比特位出现在探测段中,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;如果探测段不存在值为1的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数。
如果操作数的首位是1,为负数补码,则在紧接着首位的探测段部分查找第一个“0” (即第一个值为0的比特位)出现的位置,如果值为0的比特位出现在探测段中,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;如果探测段不存在值为0的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数。
下面以具体的示例来进一步说明:
首先在量化完成后,参与Winograd卷积的输入矩阵和Winograd卷积权重分别被量化为16bit和21bit两个初始操作数,如图7中所示,图7中,第一初始操作数是Winograd卷积的输入矩阵被量化后的操作数,第二初始操作是Winograd卷积权重被量化后的操作数。
首先第一初始操作数首位为0,表示其为正数,则寻找其第一个“1”出现的位置。
其次第二初始操作数首位为1,表示其为负数,此时,应该寻找其第一个“0”出现的位置。
之后分别在接下来的两个探测段进行第一个“1”或“0”的探测,对于第一个操作数,在第二个探测段找到了首个“1”;对于第二个初始操作数,在第一个探测段找到了首个“0”。
然后从对应探测段的首位开始,向后截取9bit(针对第一初始操作数)/14bit(针对第二初始操作数),如图中的截取段,并在截取段前加上首位,得到近似乘法器实际的两个操作数(截取段分别长为9bit和14bit,截取后加上首位的操作数之后总长为10bit(操作数1对应第一近似乘法器操作数)和15bit(操作数2对应第二近似乘法器操作数),如图8所示。
最后将这两个截取得到的操作数进行相乘,再对结果数进行向左移位操作,移位数是先前截取的最后剩余段的长度和(对于本实施例移位数为3+6=9),即得到最终的乘法结果。
然后将上述近似乘法器运算应用到使用Winograd卷积权重的量化模型中,推测表现如下表4所示:
表4
由上表可以看出,加入近似乘法器后的推测精度相比之前仍保持相当水平。
此外,本申请实施例还公开了将使用原权重的卷积计算模块(conventional)、使用Winograd权重的卷积计算模块(Winograd)和使用Winograd权重的含有近似乘法器(Winograd with CAM)的卷积计算模块分别在硬件上实现,并使用台积电28nm的工艺综合结果如下表5所示:
表5
由以上可以看出,本申请实施例采用Winograd卷积的模块相比传统的卷积计算模块节省了72.7%的面积,在加入近似乘法器后进一步将面积节省至60.5%,大大节约了硬件资源消耗。
可见,本申请中的Winograd卷积权重相比于原权重分布不同带来的量化方式不同,同时使用Winograd算法和近似乘法器来达到双重的卷积运算加速,同时节约了硬件资源消耗。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
本申请实施例公开的一种基于Winograd算法和近似乘法器的高效卷积实现装置,所述装置用于计算卷积层中卷积核大小为3×3,步长为1的卷积运算,参照图9,所述装置包括:
初始特征图获取模块10,用于获取初始特征图。
输入矩阵获取模块20,用于将所述初始特征图分割成多个第一矩阵构成的矩阵序列,其中每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素,获取每一个所述第一矩阵对应一个输入矩阵。
初始卷积权重获取模块30,用于获取初始特征图的初始卷积权重。
Winograd卷积权重获取模块40,用于根据所述初始卷积权重,计算得到包含6行6列矩阵元素的第二矩阵,作为Winograd卷积权重。
输出矩阵获取模块50,用于将各输入矩阵和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵。
输出特征图获取模块60,将多个输出矩阵进行拼接,得到输出特征图,完成计算。
可选地,输出矩阵获取模块包括近似乘法器单元,所述近似乘法器单元用于执行以下操作:
将输入矩阵和Winograd卷积权重分别量化为两个操作数。
分别对两个操作数进行截取,获得输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数。
将输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数进行乘法计算。
最后对乘法计算结果数进行向左移位操作,从而得到最终的乘法结果,其中,移位的数量是先前截取后的最后剩余段的长度和。
可选地,对操作数进行截取的方法可以包括以下步骤:
如果操作数的首位是0,且在紧接着首位的探测段中存在取值为1的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是0,且所述探测段不存在取值为1的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段存在取值为0的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段不存在取值为0的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
以上结合具体实施方式和范例性实例对本申请进行了详细说明,不过这些说明并不能理解为对本申请的限制。本领域技术人员理解,在不偏离本申请精神和范围的情况下,可以对本申请技术方案及其实施方式进行多种等价替换、修饰或改进,这些均落入本申请的范围内。本申请的保护范围以所附权利要求为准。
Claims (6)
1.一种基于Winograd算法和近似乘法器的高效卷积实现方法,其特征在于,所述方法用于计算卷积层中卷积核大小为3×3,步长为1的卷积运算,所述方法包括:
获取初始特征图;
将所述初始特征图分割成多个第一矩阵构成的矩阵序列,其中每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素;获取每一个所述第一矩阵对应一个输入矩阵;
获取初始特征图的初始卷积权重;
根据所述初始卷积权重,计算得到包含6行6列矩阵元素的第二矩阵,作为Winograd卷积权重;
将各输入矩阵分别和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵,其中,每一个输入矩阵对应一个输出矩阵;
将多个输出矩阵进行拼接,得到输出特征图;
所述近似乘法器的计算过程如下:
将所述输入矩阵和Winograd卷积权重分别量化为两个操作数;
分别对两个操作数进行截取,获得输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数;
将输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数进行乘法计算;
最后对乘法计算结果数进行向左移位操作,从而得到最终的乘法结果,其中,移位的数量是先前截取后的最后剩余段的长度和;
其中,对操作数进行截取的方法包括:
如果操作数的首位是0,且在紧接着首位的探测段中存在取值为1的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是0,且所述探测段不存在取值为1的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段存在取值为0的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段不存在取值为0的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数。
2.根据权利要求1所述的方法,其特征在于,所述输入矩阵由第一矩阵、第一常系数矩阵及第一常系数矩阵转置矩阵相乘得到。
3.根据权利要求1所述的方法,其特征在于,所述Winograd卷积权重由初始卷积权重、第二常系数矩阵及第二常系数矩阵转置矩阵相乘得到。
6.一种基于Winograd算法和近似乘法器的高效卷积实现装置,其特征在于,所述装置用于计算卷积层中卷积核大小为3×3,步长为1的卷积运算,所述装置包括:
初始特征图获取模块,用于获取初始特征图;
输入矩阵获取模块,用于将所述初始特征图分割成多个第一矩阵构成的矩阵序列,其中每一个第一矩阵包含6行6列的矩阵元素,矩阵序列中相邻矩阵之间具有2行或2列相重叠的矩阵元素,获取每一个所述第一矩阵对应一个输入矩阵;初始卷积权重获取模块,用于获取初始特征图的初始卷积权重;
Winograd卷积权重获取模块,用于根据所述初始卷积权重,计算得到包含6行6列矩阵元素的第二矩阵,作为Winograd卷积权重;
输出矩阵获取模块,用于将各输入矩阵分别和Winograd卷积权重使用近似乘法器进行运算,得到多个输出矩阵,其中,每一个输入矩阵对应一个输出矩阵;
输出特征图获取模块,将多个输出矩阵进行拼接,得到输出特征图;
所述输出矩阵获取模块包括近似乘法器单元,所述近似乘法器单元用于执行以下操作:
将输入矩阵和Winograd卷积权重分别量化为两个操作数;
分别对两个操作数进行截取,获得输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数;
将输入矩阵对应的第一近似乘法器操作数和Winograd卷积权重对应的第二近似乘法器操作数进行乘法计算;
最后对乘法计算结果数进行向左移位操作,从而得到最终的乘法结果,其中,移位的数量是先前截取后的最后剩余段的长度和;
其中,对操作数进行截取的方法包括:
如果操作数的首位是0,且在紧接着首位的探测段中存在取值为1的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是0,且所述探测段不存在取值为1的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段存在取值为0的比特位,则从当前探测段首位开始向后截取预定长度的比特段,并加上首位作为近似乘法器操作数;
或者,如果操作数的首位是1,且所述探测段不存在取值为0的比特位,则直接在探测段后截取预定长度的比特段,作为近似乘法器操作数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110827665.XA CN113283591B (zh) | 2021-07-22 | 2021-07-22 | 基于Winograd算法和近似乘法器的高效卷积实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110827665.XA CN113283591B (zh) | 2021-07-22 | 2021-07-22 | 基于Winograd算法和近似乘法器的高效卷积实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113283591A CN113283591A (zh) | 2021-08-20 |
CN113283591B true CN113283591B (zh) | 2021-11-16 |
Family
ID=77286841
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110827665.XA Active CN113283591B (zh) | 2021-07-22 | 2021-07-22 | 基于Winograd算法和近似乘法器的高效卷积实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113283591B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114758209B (zh) * | 2022-06-14 | 2022-09-02 | 深圳思谋信息科技有限公司 | 卷积结果获取方法、装置、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107636697A (zh) * | 2015-05-08 | 2018-01-26 | 高通股份有限公司 | 基于浮点神经网络量化的定点神经网络 |
CN110288086A (zh) * | 2019-06-13 | 2019-09-27 | 天津大学 | 一种基于Winograd的可配置卷积阵列加速器结构 |
CN111428863A (zh) * | 2020-03-23 | 2020-07-17 | 河海大学常州校区 | 一种基于近似乘法器的低功耗卷积运算电路 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110263909B (zh) * | 2018-03-30 | 2022-10-28 | 腾讯科技(深圳)有限公司 | 图像识别方法及装置 |
-
2021
- 2021-07-22 CN CN202110827665.XA patent/CN113283591B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107636697A (zh) * | 2015-05-08 | 2018-01-26 | 高通股份有限公司 | 基于浮点神经网络量化的定点神经网络 |
CN110288086A (zh) * | 2019-06-13 | 2019-09-27 | 天津大学 | 一种基于Winograd的可配置卷积阵列加速器结构 |
CN111428863A (zh) * | 2020-03-23 | 2020-07-17 | 河海大学常州校区 | 一种基于近似乘法器的低功耗卷积运算电路 |
Non-Patent Citations (3)
Title |
---|
卷积神经网络中Winograd快速卷积算法;日拱一卒;《https://www.cnblogs.com/shine-lee/p/10906535.html》;20190522;第1-12页 * |
批量归一化与量化推理模型的不同角度;weixin_26704853;《https://blog.csdn.net/weixin_26704853/article/details/108499211》;20200907;第1-11页 * |
日拱一卒.卷积神经网络中Winograd快速卷积算法.《https://www.cnblogs.com/shine-lee/p/10906535.html》.2019,第1-12页. * |
Also Published As
Publication number | Publication date |
---|---|
CN113283591A (zh) | 2021-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109934331B (zh) | 用于执行人工神经网络正向运算的装置和方法 | |
CN109472353B (zh) | 一种卷积神经网络量化电路及量化方法 | |
CN109858623B (zh) | 用于执行人工神经网络正向运算的装置和方法 | |
US10096134B2 (en) | Data compaction and memory bandwidth reduction for sparse neural networks | |
US20190012559A1 (en) | Dynamic quantization for deep neural network inference system and method | |
US10491239B1 (en) | Large-scale computations using an adaptive numerical format | |
CN109214509B (zh) | 一种用于深度神经网络高速实时量化结构和运算实现方法 | |
US20190243610A1 (en) | Asymmetric quantization of multiple-and-accumulate operations in deep learning processing | |
CN112508125A (zh) | 一种图像检测模型的高效全整数量化方法 | |
CN111832719A (zh) | 一种定点量化的卷积神经网络加速器计算电路 | |
CN111612147A (zh) | 深度卷积网络的量化方法 | |
WO2020176250A1 (en) | Neural network layer processing with normalization and transformation of data | |
CN111652360B (zh) | 一种基于脉动阵列的卷积运算装置 | |
CN111240746B (zh) | 一种浮点数据反量化及量化的方法和设备 | |
CN111696149A (zh) | 针对基于cnn的立体匹配算法的量化方法 | |
CN114418057A (zh) | 卷积神经网络的运算方法及相关设备 | |
CN113283591B (zh) | 基于Winograd算法和近似乘法器的高效卷积实现方法及装置 | |
CN111882028B (zh) | 用于卷积神经网络的卷积运算装置 | |
KR20200022386A (ko) | 정보 처리 장치 및 정보 처리 방법 | |
CN112561050A (zh) | 一种神经网络模型训练方法及装置 | |
CN115936067A (zh) | 一种具有eca通道注意力机制的神经网络 | |
CN114154621A (zh) | 一种基于fpga的卷积神经网络图像处理方法及装置 | |
CN110751259A (zh) | 深度神经网络中的网络层运算方法及装置 | |
US20210034956A1 (en) | Minimum memory digital convolver | |
CN113313253A (zh) | 神经网络压缩方法、数据处理方法、装置及计算机设备 |
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 |