CN110097174B - 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置 - Google Patents
基于fpga和行输出优先的卷积神经网络实现方法、系统及装置 Download PDFInfo
- Publication number
- CN110097174B CN110097174B CN201910323955.3A CN201910323955A CN110097174B CN 110097174 B CN110097174 B CN 110097174B CN 201910323955 A CN201910323955 A CN 201910323955A CN 110097174 B CN110097174 B CN 110097174B
- Authority
- CN
- China
- Prior art keywords
- convolution
- module
- cache
- calculation
- output
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
Abstract
本发明公开了一种基于FPGA和行输出优先的卷积神经网络实现方法、系统及装置,包括:初始化FPGA的可编辑资源,生成输入缓存模块、输出缓存模块、PE阵列模块和池化模块;其中,输入缓存模块包括图像缓存模块、权值缓存模块和偏置缓存模块;通过FPGA的通信模块加载待处理图像数据、权值及偏置,并存储于FPGA的内存存储器;将卷积计算分组,逐组进行卷积计算并累加,获得整个卷积计算的计算结果;获得的计算结果通过FPGA的通信模块输出。本发明采用行输出优先的分组处理方法,可根据不同卷积神经网络模型结构调整特征参数,便于硬件与软件模型的匹配;基于资源有限的FPGA,可完整实现CNN多层卷积全流程的计算。
Description
技术领域
本发明属于计算机技术领域,涉及卷积神经网络的硬件实现以及图像处理、模式识别领域,特别涉及一种基于FPGA和行输出优先的卷积神经网络实现方法、系统及装置。
背景技术
目前,深度学习的相关算法已经大规模运用于图像处理、音频处理等领域中,相关算法相比传统机器学习算法有更高的精度,其中卷积神经网络(CNN)的研究尤其受到研究者的关注。
基础的卷积神经网络由卷积(convolution)、激活(activation)和池化(pooling)三种结构组成,部分网络模型中会加入归一化(LRN)结构。CNN输出的结果是每幅图像的特定特征空间。当处理图像分类任务时,将CNN输出的特征空间作为全连接层或全连接神经网络(fully connected neural network,FCN)的输入,用全连接层来完成从输入图像到标签集的映射,即分类。
在CNN网络结构中,层内计算是独立不相关的,而层间计算类似于流水线结构。由于CNN的特殊计算模式,通用处理器实现CNN并不高效,而使用GPU计算CNN带来的巨大能耗问题使之无法满足嵌入式设备的需求。FPGA作为一种计算密集型器件,利用其并行计算的优势,通过将算法映射到FPGA上不仅可以快速得到分类结果,相比GPU也可以节约能耗,非常适合应用于嵌入式设备之中。FPGA应用于CNN中存在的难点在于,卷积神经网络的结构通常较大,FPGA的资源有限,不能完整实现CNN多层卷积全流程的计算。
综上,亟需一种新型的基于FPGA的CNN快速实现的系统及方法。
发明内容
本发明的目的在于提供一种基于FPGA和行输出优先的卷积神经网络实现方法、系统及装置,以解决上述存在的技术问题。本发明采用行输出优先的分组处理方法,可根据不同卷积神经网络模型结构调整特征参数,便于硬件与软件模型的匹配;基于资源有限的FPGA,可完整实现CNN多层卷积全流程的计算。
为达到上述目的,本发明采用以下技术方案:
一种基于FPGA和行输出优先的卷积神经网络实现方法,包括以下步骤:
初始化FPGA的可编辑资源,生成输入缓存模块、输出缓存模块、PE阵列模块和池化模块;其中,输入缓存模块包括图像缓存模块、权值缓存模块和偏置缓存模块;
通过FPGA的通信模块加载待处理图像数据、权值及偏置,并存储于FPGA的内存存储器;
将卷积计算分组,逐组进行卷积计算并累加,获得整个卷积计算的计算结果;获得的计算结果通过FPGA的通信模块输出;
其中,每组卷积计算包括:
PE阵列模块通过图像缓存模块、权值缓存模块和输入总线,逐行从内存存储器调用图像数据和权值,逐行进行卷积计算并将各行的卷积结果累加,获得该组卷积计算的卷积结果;
通过输出缓存模块存储PE阵列模块输出的中间卷积结果和该组卷积计算的卷积结果;PE阵列模块进行第Q行卷积计算时,将第Q-1行的卷积结果反馈至PE阵列模块进行累加,直至该组卷积计算计算完毕,输出该组卷积计算的卷积结果;
通过偏置缓存模块和输入总线调用偏置;将调用的偏置与输出缓存模块输出的该组卷积计算的卷积结果求和后输入池化模块,通过池化模块进行最大池化处理,获得该组卷积计算的最终卷积结果,并通过输出总线存储于FPGA的内存存储器。
本发明的进一步改进在于,对于待处理图像大小为J*K*N,卷积核大小为W*H*N*C的卷积运算;其中,J表示图像的宽度,K表示图像的高度,N表示帧数,W表示卷积核宽,H表示卷积核高,C表示卷积核组数;
生成PE阵列模块的步骤具体包括:例化W*N*C/α个DSP单元,生成卷积计算PE阵列,其中,α表示卷积计算分组数;其中,W*N*C/α<DSPmax,DSPmax表示FPGA内支持的最大DSP单元数;
生成输出缓存模块的步骤具体包括:例化C/α条深度为F*α的缓存FIFO用于卷积计算的中间结果缓存,并将缓存FIFO输出反馈至PE阵列的输入;其中,F表示卷积输出图像的宽度。
本发明的进一步改进在于,逐行卷积计算的步骤具体包括:定义输入图像每个点表示为I(j,k,n),其中j、k、n分别表示输入图像数据的列、行、帧坐标,权值表示为其中w,h,n分别表示权值数据的列、行、帧坐标,c表示权值通道数,缓存FIFO中每个点表示为T(f,c),其中f,c分别表示输出缓存数据的列、帧坐标;
第1行输入图像的计算表达式为:
第1行图像与C组卷积核卷积完成后开始第2行计算;
第2行图像的卷积计算时,读出FIFO中第1行对应坐标的卷积结果缓存与第二行结果相加,并将新的结果重新存储至缓存FIFO中,新的结果表达式为:
以此类推,得到W*H*N*C的卷积结果,表达式为:
本发明的进一步改进在于,生成池化模块的步骤具体包括:例化C/α个容量为D*R*α的SRAM,用于实现CNN模型中池化算法的计算;其中,D和R分别表示池化输出图像的宽度和高度。
本发明的进一步改进在于,将SRAM的地址进行分段,用于输入卷积结果与对应坐标的缓存数据进行比较、更新;其中,低位地址表示图像的列,中间地址表示图像的行,高位地址表示图像的帧数。
本发明的进一步改进在于,送往池化层的输入图像为按行输入;
假设输入每个点表示为T(f,c),其中f,c分别表示卷积输出缓存数据的行、帧坐标,输出为P(d,r,c),其中d,r,c分别表示池化输出缓存数据的列、行、帧坐标,则第1行计算表达式为:
P(d,0,c)=max(T(2*d,c),T(2*d+1,c),T(2*d+2,c));
第1行卷积结果的池化计算完成后,将池化结果缓存至池化结果缓存第1行,等待第2行卷积结果输入;
第2行卷积结果在比较输入数据的同时,也与第1行的池化结果进行比较,表达式为:
P(d,0,c)=max(T(2*d,c),T(2*d+1,c),T(2*d+2,c),P(d,0,c));
将新得到的最大值存入池化结果缓存第1行中,即缓存的数据为卷积结果前2行的池化结果;
以此类推得到所有的池化结果。
一种基于FPGA和行输出优先的卷积神经网络实现系统,包括:
初始化模块,用于初始化FPGA的可编辑资源,生成输入缓存模块、输出缓存模块、PE阵列模块和池化模块;其中,输入缓存模块包括图像缓存模块、权值缓存模块和偏置缓存模块;
加载模块,用于通过FPGA的通信模块加载待处理图像数据、权值及偏置,并存储于FPGA的内存存储器;
卷积计算实现模块,用于将卷积计算分组,逐组进行卷积计算并累加,获得整个卷积计算的计算结果;获得的计算结果通过FPGA的通信模块输出;
其中,每组卷积计算包括:
PE阵列模块通过图像缓存模块、权值缓存模块和输入总线,逐行从内存存储器调用图像数据和权值;逐行进行卷积计算并将各行的卷积结果累加,获得该组卷积计算的卷积结果;
通过输出缓存模块存储PE阵列模块输出的卷积结果;PE阵列模块进行第Q行卷积计算时,将第Q-1行的卷积结果反馈至PE阵列模块进行累加,直至该组卷积计算计算完毕,输出该组卷积计算的卷积结果;
通过偏置缓存模块和输入总线调用偏置;将调用的偏置与输出缓存模块输出的该组卷积计算的卷积结果求和后输入池化模块,通过池化模块进行最大池化处理,获得该组卷积计算的最终卷积结果,并通过输出总线存储于FPGA的内存存储器。
一种基于FPGA和行输出优先的卷积神经网络实现装置,包括:FPGA板;所述FPGA板上设置有:
通信模块,用于输入待检测图像数据、权值和偏置以及输出计算获得的最终特征图像数据;
内部存储模块,用于存储输入的待检测图像数据、权值、偏置以及计算获得的中间特征图像数据和最终特征图像数据;
卷积模块,所述卷积模块包括图像缓存模块、权值缓存模块、偏置缓存模块、PE阵列模块和卷积输出缓存模块;
所述图像缓存模块用于按照图像调用规则通过输入总线将待检测图像数据从内部存储模块调用至所述PE阵列模块;所述图像调用规则为:在每次分步计算前将所有N张图像的当前一行的图像按照逐层逐行的顺序读入图像缓存模块中存;
所述权值缓存模块用于按照权值调用规则通过输入总线将权值从内部存储模块调用至所述PE阵列模块;所述权值调用规则为:在每层卷积计算前按照逐层逐行的顺序将当前卷积层的所有权值均读入权值缓存中存储;
所述偏置缓存模块用于通过输入总线将偏置从内部存储模块调用当前卷积层偏置;
所述PE阵列模块用于根据调用的待检测图像数据和权值逐行获得卷积结果并累加;
所述卷积输出缓存模块包括若干卷积输出缓存FIFO,用于存储所述PE阵列模块输出的卷积结果,还用于在所述PE阵列模块进行第Q行卷积计算时,将第Q-1行的卷积结果输入所述PE阵列模块;
池化模块,用于接收所述偏置缓存调用的偏置与所述卷积输出缓存模块输出的卷积结果求和后的数据,还用于将接收的数据进行最大池化处理并将获得的结果通过输出总线存入内部存储模块。
进一步地,还包括:外部存储模块;所述外部存储模块用于扩展FPGA中内部存储模块的存储空间。
进一步地,所述PE阵列模块中设置有通用的卷积计算阵列;所述卷积计算阵列的I/O端口数以及消耗的FPGA内部DSP单元数均可配置;预留有控制端口,用于在计算同一个网络的不同层时进行计算模式切换;
图像缓存模块、权值缓存模块和偏置缓存模块中,缓存的容量及缓存的数据地址空间范围均可配置;
池化模块中,例化与卷积输出缓存FIFO相同数量的SRAM作为输出缓存;每个SRAM中存储的若干个特征点数据,按照基地址加偏移地址的方式存储,分为页、行、列三部分地址
与现有技术相比,本发明具有以下有益效果:
本发明的方法,利用FPGA快速并行处理并且极低功耗的计算特性,基于资源有限的FPGA设计实现了CNN计算中所需的全部几种算法,FPGA结合外部存储器在嵌入式设备中实现了CNN的卷积全流程计算。与传统的FPGA实现CNN方法相比,本发明采用行输出优先的设计方案,对输入的多张特征图像按照分步每次计算一行的卷积并将结果缓存,再将缓存结果与下一行卷积结果累加的方式进行计算,同时在计算时保证多张图像间的行卷积计算并行进行,这样卷积的最终结果可按照行输出的顺序得到。此方法将三维的卷积计算拆分成了多步骤的二维计算,节省了硬件计算单元,便于卷积全流程计算的实现,并且可根据不同网络模型结构调整特征参数,便于硬件与软件模型的匹配。
进一步地,在池化输出缓存设计中采用分段地址的方式设计,在保持缓存图像的三维特征的同时可简化控制逻辑的设计。
本发明的系统及装置,基于资源有限的FPGA,可完整实现CNN多层卷积全流程的计算,可用于图像数据的处理。
附图说明
图1是本发明实施例的一种基于行输出优先的卷积神经网络数据处理系统的总体框架示意图;
图2是本发明实施例的一种基于行输出优先的卷积神经网络数据处理系统中卷积层计算流程示意图;
图3是本发明实施例的一种基于行输出优先的卷积神经网络数据处理系统中PE单元结构示意图;
图4是本发明实施例的一种基于行输出优先的卷积神经网络数据处理系统中池化层计算流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
本发明实施例的一种基于FPGA和行输出优先的卷积神经网络实现方法,对于图像大小为J*K*N,卷积核大小为W*H*N*C的卷积运算;其中,J表示图像的宽度,K表示图像的高度,N表示特征图像的帧数;每个卷积核宽为W,高为H,共有C组卷积核心,每组N帧与输入特征图像帧数一致;可根据本发明的方案通过以下步骤实现:
第一步:基于行输出优先的可配置卷积神经网络结构,例化W*N*C/α个DSP单元,设计卷积计算PE阵列,其中α表示卷积计算分组数。
第二步:例化C/α条深度为F*α的缓存FIFO用于卷积计算的中间结果缓存,并将FIFO输出反馈至PE阵列的输入;其中,F表示卷积输出图像的宽度。
第三步:例化C/α个容量为D*R*α的SRAM实现CNN模型的计算,D、R分别表示池化输出图像的宽度和高度。
第四步:例化池化计算模块,将SRAM的地址进行分段,低位地址表示图像的列,中间地址表示图像的行,高位地址表示图像的帧数,以此将输入卷积结果与对应坐标的缓存数据进行比较、更新。
第五步:将结果输出至外部DDR存储,用于下一层卷积计算。
优选的,
(1)对于图像大小为J*K*N,卷积核心大小为W*H*N*C的卷积运算,每次例化W*N*C/α个DSP单元(W*N*C/α<DSPmax),设计卷积计算PE阵列。其中J表示图像的宽度,K表示图像的高度,N表示特征图像的帧数,每个卷积核宽为W,高为H,共有C组卷积核心,α表示卷积计算分组数。并且在硬件的实现中采用输入图像按行输入的方式进行计算,每次输入大小为J*1*N的一行图像进行计算并缓存结果,计算下一行输入特征图卷积的结果再与前一行的结果相加得到这两行输入特征图像的卷积结果,以此类推。定义输入图像每个点表示为I(j,k,n),其中j、k、n分别表示输入图像数据的列、行、帧坐标,权值表示为其中w,h,n分别表示权值数据的列、行、帧坐标,c表示权值通道数,缓存FIFO中每个点表示为T(f,c),其中f,c分别表示输出缓存数据的列、帧坐标,则有:
(2)硬件实现过程中,在实现代码中将所述的特征值J、K、N、W、H、C、α均参数化设计,可在该设计用于不同的神经网络实现中进行参数调整,以适应不同的网络结构要求;并且分组数α以及缓存空间大小的参数化设计可以便于在不同资源量的FPGA中的快速、合理配置。
(3)假设每次输出结果大小为F*1*C,其中F表示输出特征图宽度,输出特征图帧数C与权值核心组数一致,则需要缓存FIFO共C/α条,每条FIFO中共缓存F*α个输出结果。
(4)在池化缓存模型设计中,例化与卷积输出缓存FIFO相同数量的C/α个存储器单元作为输出缓存,每个存储器单元中存储D*R*α个特征点数据,其中D表示池化输出图像的宽度,R表示池化输出图像的高度,C表示池化输出图像的帧数。实际的存储器设计可根据FPGA硬件资源决定:若硬件资源足够时可在FPGA片上例化SRAM实现;若硬件资源不足时可使用片外SRAM或DRAM进行扩展。
(5)采用分段地址的方式将池化缓存的地址分段为的帧、行、列三部分。采用这种方法设计可以在保持输出特征图像的三维特征的同时简化控制逻辑设计。由于卷积计算时使用行输出优先的方式设计,因此池化模块得到的输入的一行特征数据时,采用分段地址控制可根据数据图像坐标对应调整列地址进行数据大小比较、调整帧地址比较不同帧数的输入数据大小。并且帧、行、列地址以及存储器的个数、容量均进行了参数化设计,在不同的模型中可调整与之匹配的参数后直接调用该模块。另外,采用分段地址的方式设计也可便于特征图像帧间的数据融合操作,如NORM层计算的控制。
本发明上述的实现方法,是一种在资源有限的FPGA中实现CNN计算的内存调度设计方案,通过本发明上述几个步骤将大量的卷积运算通过分组计算、缓存的方式计算,以及将比较复杂的池化计算通过SRAM分段地址的方式处理,在资源有限的FPGA上实现了CNN多层卷积全流程的计算,可实现CNN计算中所需的全部算法。并且将输入图像大小J*K*N、卷积核心大小W*H*N*C、缓存FIFO条数C/α、SRAM个数C/α均在代码中参数化处理,在计算不同的网络模型时只需要修改这些参数并重新综合即可使用。
请参阅图1,本发明实施例的一种基于行输出优先的卷积神经网络数据处理装置,其为一种基于行输出优先的可配置卷积神经网络结构与缓存设计,主要包括:主控模块(FPGA)、外部存储模块(DDR)和通信模块(USB)。
主控模块具体为FPGA上的系统;外部存模块主要为一片DDR2芯片,用于存储所有的权值、偏置、输入待检测图像以及输出特征图像缓存;USB通信模块用于从PC端发送权值、偏置以及输入待检测图像,同时用于接收计算得到的特征图像缓存到PC端。
FPGA中设计有通用的卷积计算阵列;其中阵列的I/O端口数、消耗的FPGA内部DSP单元数均可配置,以便在不同的卷积层、不同的网络模型下可通过简单方式配置后进行复用。预留一组控制端口,使该模块在计算同一个网络的不同层时计算模式可切换。
FPGA中设计有配合该卷积计算阵列的缓存模型,主要包括输入权值缓存、输入图像缓存以及卷积输出缓存;其中,缓存的容量、缓存的数据地址空间范围均可配置,使该缓存模型在不同的网络模型下或同一模型的不同层间均可按照需求存取数据。
在每层卷积计算前将当前卷积层所有权值按照逐层逐行的顺序读入权值缓存中存储。随后在每次分步计算前将所有N张图像的当前一行的图像按照逐层逐行的顺序读入图像缓存中存储。在卷积计算时将当前N张图片的一行数据和与之坐标相对应的权值数据传输到卷积计算单元的数据接口,计算的结果存储在一组FIFO中。通俗来讲,图像跟权值的调用方式稍有不同,权值是计算前一次性读入,图像是读一行,算一行,再读下一行。
按照输出缓存的数据调度方案,池化操作也按照行的顺序进行计算。每次读取卷积计算一行结果进行大小比较(pooling)之后,将最大的一组值与当前池化计算对应坐标的缓存值进行大小比较,将较大的比较结果重新保存至该坐标的地址中,若当前坐标地址中无缓存值,则认为缓存值为0。池化缓存的坐标通过分段地址的方式控制,便于控制逻辑的设计。
完成计算后即可输出该层结果至内部或外部存储空间暂存,以便下一层计算调用,重复步骤一至四完成整个网络模型的计算。
请参阅图2,在本发明实施例中,假设卷积输入的图像大小为J*K*N,其中,J表示图像的宽度,K表示图像的高度,N表示特征图像的帧数;卷积核大小为W*H*N*C,其中,每个卷积核宽为W,高为H,共有C组卷积核心,每组N帧与输入特征图像帧数一致。
卷积计算使用滑动卷积核的方式进行,并且在硬件的实现中采用输入图像按行输入的方式进行计算,即每次缓存输入图像大小为J*1*N,以节省硬件资源开销。则每次输出结果大小为F*1*C,其中,F表示输出特征图宽度,输出特征图帧数C与权值核心组数一致。
由步长为s可知:
F=(J-(W-s))/s; (1)
定义输入图像每个点表示为I(j,k,n),其中j、k、n分别表示输入图像数据的列、行、帧坐标,权值表示为其中w,h,n分别表示权值数据的列、行、帧坐标,c表示权值通道数,缓存FIFO中每个点表示为T(f,c),其中f,c分别表示输出缓存数据的列、帧坐标。
则第1行输入图像的计算为:
在FPGA的并行化设计中优先需要考虑的硬件资源为DSP单元。每并行1组乘加运算需要使用1个DSP单元。
请参阅图3,在本发明实施例的技术方案中,每组卷积核计算需要做W*1*N次乘加运算才可以得到输出结果的1个点,即需要消耗W*N个DSP单元,共有C组卷积核心需要进行加算,因此要计算一行图像的所有卷积需要C*W*N个DSP单元。在硬件资源有限的情况下可将卷积核分为α组,分次进行计算,并满足:
W*N*C/α<DSPmax (3)
则在此方案下,需要缓存FIFO共C/α条,每条FIFO中共缓存F*α个输出结果。
第1行图像与C组卷积核卷积完成后开始第2行计算。第2行图像的卷积计算时,读出FIFO中第1行对应坐标的卷积结果缓存与第二行结果相加,并将新的结果重新存储至缓存FIFO中。
以此类推,即可得到W*H*N*C的卷积结果:
此时将FIFO中的结果读出送往Relu模块,即可进行新的一组卷积计算。重复滑动卷积核心,即可完整实现所有卷积运算。
由于Relu层的算法要求为:
FIFO中数据读出后与偏置相加,小于0的数据全部舍弃置0,仅保留大于等于0的数据送往池化模块。
请参阅图4,池化层采用MaxPooling算法计算,核心大小均为3*3。由于卷积层计算为按行计算的顺序,因此送往池化层的输入图像也是按行输入的,假设输入每个点表示为T(f,c),其中f,c分别表示卷积输出缓存数据的行、帧坐标,输出为P(d,r,c),其中d,r,c分别表示池化输出缓存数据的列、行、帧坐标,则有
P(d,0,c)=max(T(2*d,c),T(2*d+1,c),T(2*d+2,c)) (7)
第1行卷积结果的池化计算完成后,将结果缓存至池化结果第1行后等待第2行卷积结果输入。第2行卷积结果的在比较输入数据的同时也要与第1行的结果进行比较,即
P(d,0,c)=max(T(2*d,c),T(2*d+1,c),T(2*d+2,c),P(d,0,c)) (8)
再次将新得到的最大值存入池化结果缓存第1行中,即缓存的数据为卷积结果前2行的池化结果。以此类推即可得到所有的池化结果。
对于公式(7)和(8)的解释说明,公式(7)中P的第二个坐标为0是因为这里表述的是第1行计算,第1行的行坐标为0;公式(8)中虽然说的是卷积第2行,但是对于池化还是第1行,所以里面的行坐标依然都为0;公式(7)和(8)中T的下标由P的下标推算得到,所以用P的下标做运算表示。
假设卷积结果经过池化后得到的图像大小为D*R*C,其中D表示池化输出图像的宽度,R表示池化输出图像的高度,C表示池化输出图像的帧数。又由于池化核心大小为3*3,步长为2,则有:
D=(F-1)/2 (9)
为了增大并行度,则池化模块例化与卷积输出缓存FIFO相同数量的C/α个SRAM作为输出缓存,每个SRAM中存储D*R*α个特征点数据,如表1所示,按照基地址加偏移地址的方式存储,分为页、行、列三部分地址,保持其三维坐标特性。其中k2、k1、k0由实际网络模型中的数据量确定。例如CaffeNet第1层池化结果为96*27*27大小的特征图,分6组的情况下每个SRAM中存储6*27*27大小的图像,则k0=5,k1=10,k2=12,对应地址[4:0]5位地址存储27列,[9:5]5位地址存储27行,[12:10]3位地址存储6帧。
表1池化缓存单元地址分配方案
地址 | K2:k1 | k1-1:k0 | k0-1:0 |
功能 | Page | Row | Col |
由于卷积计算进行了分组就算,因此在池化操作时,地址Page先累加α次,再对地址Col累加。在池化计算时存在数据交叠的情况,采用同一数据送往多个地址的方式进行。
完成上述计算后,变换所有模块的控制信号,使所有模块的计算模式匹配下一层卷积计算要求,读取上一层的结果作为输入,重复上述步骤直到完成网络模型中所有卷积层的运算即可将最终结果通过USB发往PC端。
综上,本发明利用FPGA快速并行处理并且极低功耗的计算特性,基于资源有限的FPGA设计实现了CNN计算中所需的全部几种算法,FPGA结合外部存储器在嵌入式设备中实现了CNN的多层卷积全流程计算。与传统的FPGA实现CNN方法相比,采用行输出优先的设计方案,可根据不同网络模型结构调整特征参数,便于硬件与软件模型的匹配。在缓存设计中采用分段地址的方式设计,保持了缓存图像的三维特征的同时简化了控制逻辑的设计。
本发明的可行性及准确性验证:
为验证本发明方案的可行性与准确性,在一片Xilinx FPGA芯片xc7k325tffg900中设计实现了CaffeNet中卷积全流程计算,包含LRN层的设计实现,其中输入测试图像为227*227*3,主频为100MHz时钟。设计中DSP48E资源例化数取CaffeNet五层卷积中计算量最大的第3层进行硬件资源例化,共使用了3*1*256=768个;BRAM18K资源例化数由并行计算最多的第1层决定:共有96组权值,计算分为6组,SRAM使用了96/6=16个,每个SRAM存储6组27*27的图像,按照本发明的地址分配模式即需3位帧地址,5位行地址,5位列地址,共13位地址,存储空间至少为6K,消BRAM18K共消耗96/6*6=96个BRAM18K资源;FIFO使用了96/6=16个,每个FIFO至少需要存储6*55=330个数据,因此FIFO深度可设为512,消耗1个BRAM18K资源(资源用量为50%),共使用BRAM18K资源16个;总计使用BRAM18K资源112个。按照本发明的设计方案实际上板进行了测试,测试结果与PC端使用GPU计算得到的结果一致,即在FPGA中使用了较少的硬件资源快速完成了CaffeNet卷积全流程的计算。
以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的具体实施方式进行修改或者等同替换,这些未脱离本发明精神和范围的任何修改或者等同替换,均在申请待批的本发明的权利要求保护范围之内。
Claims (8)
1.一种基于FPGA和行输出优先的卷积神经网络实现方法,其特征在于,包括以下步骤:
初始化FPGA的可编辑资源,生成输入缓存模块、输出缓存模块、PE阵列模块和池化模块;其中,输入缓存模块包括图像缓存模块、权值缓存模块和偏置缓存模块;
通过FPGA的通信模块加载待处理图像数据、权值及偏置,并存储于FPGA的内存存储器;
将卷积计算分组,逐组进行卷积计算并累加,获得整个卷积计算的计算结果;获得的计算结果通过FPGA的通信模块输出;
其中,每组卷积计算包括:
PE阵列模块通过图像缓存模块、权值缓存模块和输入总线,逐行从内存存储器调用图像数据和权值,逐行进行卷积计算并将各行的卷积结果累加,获得该组卷积计算的卷积结果;
通过输出缓存模块存储PE阵列模块输出的中间卷积结果和该组卷积计算的卷积结果;PE阵列模块进行第Q行卷积计算时,将第Q-1行的卷积结果反馈至PE阵列模块进行累加,直至该组卷积计算计算完毕,输出该组卷积计算的卷积结果;
通过偏置缓存模块和输入总线调用偏置;将调用的偏置与输出缓存模块输出的该组卷积计算的卷积结果求和后输入池化模块,通过池化模块进行最大池化处理,获得该组卷积计算的最终卷积结果,并通过输出总线存储于FPGA的内存存储器;
对于待处理图像大小为J*K*N,卷积核大小为W*H*N*C的卷积运算;其中,J表示图像的宽度,K表示图像的高度,N表示帧数,W表示卷积核宽,H表示卷积核高,C表示卷积核组数;
生成PE阵列模块的步骤具体包括:例化W*N*C/α个DSP单元,生成卷积计算PE阵列,其中,α表示卷积计算分组数;其中,W*N*C/α<DSPmax,DSPmax表示FPGA内支持的最大DSP单元数;
生成输出缓存模块的步骤具体包括:例化C/α条深度为F*α的缓存FIFO用于卷积计算的中间结果缓存,并将缓存FIFO输出反馈至PE阵列的输入;其中,F表示卷积输出图像的宽度;
逐行卷积计算的步骤具体包括:定义输入图像每个点表示为I(j,k,n),其中j、k、n分别表示输入图像数据的列、行、帧坐标,权值表示为其中w,h,n分别表示权值数据的列、行、帧坐标,c表示权值通道数,缓存FIFO中每个点表示为T(f,c),其中f,c分别表示输出缓存数据的列、帧坐标;
第1行输入图像的计算表达式为:
第1行图像与C组卷积核卷积完成后开始第2行计算;
第2行图像的卷积计算时,读出FIFO中第1行对应坐标的卷积结果缓存与第二行结果相加,并将新的结果重新存储至缓存FIFO中,新的结果表达式为:
以此类推,得到W*H*N*C的卷积结果,表达式为:
2.根据权利要求1所述的一种基于FPGA和行输出优先的卷积神经网络实现方法,其特征在于,生成池化模块的步骤具体包括:例化C/α个容量为D*R*α的SRAM,用于实现CNN模型中池化算法的计算;其中,D和R分别表示池化输出图像的宽度和高度。
3.根据权利要求2所述的一种基于FPGA和行输出优先的卷积神经网络实现方法,其特征在于,将SRAM的地址进行分段,用于输入卷积结果与对应坐标的缓存数据进行比较、更新;其中,低位地址表示图像的列,中间地址表示图像的行,高位地址表示图像的帧数。
4.根据权利要求1所述的一种基于FPGA和行输出优先的卷积神经网络实现方法,其特征在于,送往池化层的输入图像为按行输入;
假设输入每个点表示为T(f,c),其中f,c分别表示卷积输出缓存数据的列、帧坐标,输出为P(d,r,c),其中d,r,c分别表示池化输出缓存数据的列、行、帧坐标,则第1行计算表达式为:
P(d,0,c)=max(T(2*d,c),T(2*d+1,c),T(2*d+2,c));
第1行卷积结果的池化计算完成后,将池化结果缓存至池化结果缓存第1行,等待第2行卷积结果输入;
第2行卷积结果在比较输入数据的同时,也与第1行的池化结果进行比较,表达式为:
P(d,0,c)=max(T(2*d,c),T(2*d+1,c),T(2*d+2,c),P(d,0,c));
将新得到的最大值存入池化结果缓存第1行中,即缓存的数据为卷积结果前2行的池化结果;
以此类推得到所有的池化结果。
5.一种基于FPGA和行输出优先的卷积神经网络实现系统,其特征在于,包括:
初始化模块,用于初始化FPGA的可编辑资源,生成输入缓存模块、输出缓存模块、PE阵列模块和池化模块;其中,输入缓存模块包括图像缓存模块、权值缓存模块和偏置缓存模块;
加载模块,用于通过FPGA的通信模块加载待处理图像数据、权值及偏置,并存储于FPGA的内存存储器;
卷积计算实现模块,用于将卷积计算分组,逐组进行卷积计算并累加,获得整个卷积计算的计算结果;获得的计算结果通过FPGA的通信模块输出;
其中,每组卷积计算包括:
PE阵列模块通过图像缓存模块、权值缓存模块和输入总线,逐行从内存存储器调用图像数据和权值;逐行进行卷积计算并将各行的卷积结果累加,获得该组卷积计算的卷积结果;
通过输出缓存模块存储PE阵列模块输出的卷积结果;PE阵列模块进行第Q行卷积计算时,将第Q-1行的卷积结果反馈至PE阵列模块进行累加,直至该组卷积计算计算完毕,输出该组卷积计算的卷积结果;
通过偏置缓存模块和输入总线调用偏置;将调用的偏置与输出缓存模块输出的该组卷积计算的卷积结果求和后输入池化模块,通过池化模块进行最大池化处理,获得该组卷积计算的最终卷积结果,并通过输出总线存储于FPGA的内存存储器;
其中,对于待处理图像大小为J*K*N,卷积核大小为W*H*N*C的卷积运算;其中,J表示图像的宽度,K表示图像的高度,N表示帧数,W表示卷积核宽,H表示卷积核高,C表示卷积核组数;
生成PE阵列模块的步骤具体包括:例化W*N*C/α个DSP单元,生成卷积计算PE阵列,其中,α表示卷积计算分组数;其中,W*N*C/α<DSPmax,DSPmax表示FPGA内支持的最大DSP单元数;
生成输出缓存模块的步骤具体包括:例化C/α条深度为F*α的缓存FIFO用于卷积计算的中间结果缓存,并将缓存FIFO输出反馈至PE阵列的输入;其中,F表示卷积输出图像的宽度;
逐行卷积计算的步骤具体包括:定义输入图像每个点表示为I(j,k,n),其中j、k、n分别表示输入图像数据的列、行、帧坐标,权值表示为其中w,h,n分别表示权值数据的列、行、帧坐标,c表示权值通道数,缓存FIFO中每个点表示为T(f,c),其中f,c分别表示输出缓存数据的列、帧坐标;
第1行输入图像的计算表达式为:
第1行图像与C组卷积核卷积完成后开始第2行计算;
第2行图像的卷积计算时,读出FIFO中第1行对应坐标的卷积结果缓存与第二行结果相加,并将新的结果重新存储至缓存FIFO中,新的结果表达式为:
以此类推,得到W*H*N*C的卷积结果,表达式为:
6.一种基于FPGA和行输出优先的卷积神经网络实现装置,其特征在于,基于权利要求1所述的实现方法,包括:FPGA板;所述FPGA板上设置有:
通信模块,用于输入待检测图像数据、权值和偏置以及输出计算获得的最终特征图像数据;
内部存储模块,用于存储输入的待检测图像数据、权值、偏置以及计算获得的中间特征图像数据和最终特征图像数据;
卷积模块,所述卷积模块包括图像缓存模块、权值缓存模块、偏置缓存模块、PE阵列模块和卷积输出缓存模块;
所述图像缓存模块用于按照图像调用规则通过输入总线将待检测图像数据从内部存储模块调用至所述PE阵列模块;所述图像调用规则为:在每次分步计算前将所有N张图像的当前一行的图像按照逐层逐行的顺序读入图像缓存模块中存储;
所述权值缓存模块用于按照权值调用规则通过输入总线将权值从内部存储模块调用至所述PE阵列模块;所述权值调用规则为:在每层卷积计算前按照逐层逐行的顺序将当前卷积层的所有权值均读入权值缓存中存储;
所述偏置缓存模块用于通过输入总线将偏置从内部存储模块调用当前卷积层偏置;
所述PE阵列模块用于根据调用的待检测图像数据和权值逐行获得卷积结果并累加;
所述卷积输出缓存模块包括若干卷积输出缓存FIFO,用于存储所述PE阵列模块输出的卷积结果,还用于在所述PE阵列模块进行第Q行卷积计算时,将第Q-1行的卷积结果输入所述PE阵列模块;
池化模块,用于接收所述偏置缓存调用的偏置与所述卷积输出缓存模块输出的卷积结果求和后的数据,还用于将接收的数据进行最大池化处理并将获得的结果通过输出总线存入内部存储模块。
7.根据权利要求6所述的一种基于FPGA和行输出优先的卷积神经网络实现装置,其特征在于,还包括:外部存储模块;
所述外部存储模块用于扩展FPGA中内部存储模块的存储空间。
8.根据权利要求6所述的一种基于FPGA和行输出优先的卷积神经网络实现装置,其特征在于,所述PE阵列模块中设置有通用的卷积计算阵列;所述卷积计算阵列的I/O端口数以及消耗的FPGA内部DSP单元数均可配置;预留有控制端口,用于在计算同一个网络的不同层时进行计算模式切换;
图像缓存模块、权值缓存模块和偏置缓存模块中,缓存的容量及缓存的数据地址空间范围均可配置;
池化模块中,例化与卷积输出缓存FIFO相同数量的SRAM作为输出缓存;每个SRAM中存储的若干个特征点数据,按照基地址加偏移地址的方式存储,分为页、行、列三部分地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910323955.3A CN110097174B (zh) | 2019-04-22 | 2019-04-22 | 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910323955.3A CN110097174B (zh) | 2019-04-22 | 2019-04-22 | 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110097174A CN110097174A (zh) | 2019-08-06 |
CN110097174B true CN110097174B (zh) | 2021-04-20 |
Family
ID=67445445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910323955.3A Active CN110097174B (zh) | 2019-04-22 | 2019-04-22 | 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110097174B (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110400250B (zh) * | 2019-07-29 | 2023-10-13 | 杭州凝眸智能科技有限公司 | 基于ai的智能图像预处理方法及系统 |
WO2021031154A1 (zh) * | 2019-08-21 | 2021-02-25 | 深圳市大疆创新科技有限公司 | 神经网络的特征图装载方法及设备 |
CN110738317A (zh) * | 2019-10-17 | 2020-01-31 | 中国科学院上海高等研究院 | 基于fpga的可变形卷积网络运算方法、装置和系统 |
CN111047035B (zh) * | 2019-12-09 | 2024-04-19 | Oppo广东移动通信有限公司 | 神经网络处理器、芯片和电子设备 |
CN111178519B (zh) * | 2019-12-27 | 2022-08-02 | 华中科技大学 | 卷积神经网络加速引擎、卷积神经网络加速系统及方法 |
WO2021179224A1 (zh) * | 2020-03-11 | 2021-09-16 | 深圳市大疆创新科技有限公司 | 数据处理装置、数据处理方法以及加速器 |
CN111488983B (zh) * | 2020-03-24 | 2023-04-28 | 哈尔滨工业大学 | 一种基于fpga的轻量级cnn模型计算加速器 |
CN111667053B (zh) * | 2020-06-01 | 2023-05-09 | 重庆邮电大学 | 一种卷积神经网络加速器的前向传播计算加速方法 |
CN111767243A (zh) * | 2020-06-09 | 2020-10-13 | 上海寒武纪信息科技有限公司 | 数据处理方法、相关设备及计算机可读介质 |
CN111814675B (zh) * | 2020-07-08 | 2023-09-29 | 上海雪湖科技有限公司 | 基于fpga支持动态分辨率的卷积神经网络特征图组装系统 |
CN111984189B (zh) * | 2020-07-22 | 2022-05-17 | 深圳云天励飞技术股份有限公司 | 神经网络计算装置和数据读取、数据存储方法及相关设备 |
CN111931925B (zh) * | 2020-08-10 | 2024-02-09 | 西安电子科技大学 | 基于fpga的二值化神经网络的加速系统 |
CN111931927B (zh) * | 2020-10-19 | 2021-02-19 | 翱捷智能科技(上海)有限公司 | 一种在npu中减少计算资源占用的方法及装置 |
CN112330524B (zh) * | 2020-10-26 | 2024-06-18 | 沈阳上博智像科技有限公司 | 一种在图像跟踪系统中快速实现卷积的装置和方法 |
CN112668708B (zh) * | 2020-12-28 | 2022-10-14 | 中国电子科技集团公司第五十二研究所 | 一种提高数据利用率的卷积运算装置 |
CN113392963B (zh) * | 2021-05-08 | 2023-12-19 | 北京化工大学 | 基于fpga的cnn硬件加速系统设计方法 |
CN113362292B (zh) * | 2021-05-27 | 2023-04-28 | 重庆邮电大学 | 一种基于可编程逻辑门阵列的骨龄评估方法及系统 |
CN113313171A (zh) * | 2021-05-28 | 2021-08-27 | 武汉理工大学 | 基于fpga实现图像识别的方法、装置、设备及存储介质 |
CN114429203B (zh) * | 2022-04-01 | 2022-07-01 | 浙江芯昇电子技术有限公司 | 一种卷积计算方法、卷积计算装置及其应用 |
CN115049885B (zh) * | 2022-08-16 | 2022-12-27 | 之江实验室 | 一种存算一体卷积神经网络图像分类装置及方法 |
CN115600652B (zh) * | 2022-11-29 | 2023-04-07 | 深圳市唯特视科技有限公司 | 卷积神经网络处理装置、高速目标探测方法以及设备 |
CN117196931B (zh) * | 2023-11-08 | 2024-02-09 | 苏州元脑智能科技有限公司 | 面向传感器阵列的数据处理方法、fpga及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106875012A (zh) * | 2017-02-09 | 2017-06-20 | 武汉魅瞳科技有限公司 | 一种基于fpga的深度卷积神经网络的流水化加速系统 |
CN108304923A (zh) * | 2017-12-06 | 2018-07-20 | 腾讯科技(深圳)有限公司 | 卷积运算处理方法及相关产品 |
CN108537334A (zh) * | 2018-04-26 | 2018-09-14 | 济南浪潮高新科技投资发展有限公司 | 一种针对cnn卷积层运算的加速阵列设计方法 |
CN108805272A (zh) * | 2018-05-03 | 2018-11-13 | 东南大学 | 一种基于fpga的通用卷积神经网络加速器 |
CN109598338A (zh) * | 2018-12-07 | 2019-04-09 | 东南大学 | 一种基于fpga的计算优化的卷积神经网络加速器 |
CN109635940A (zh) * | 2019-01-28 | 2019-04-16 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种基于卷积神经网络的图像处理方法及图像处理装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107066239A (zh) * | 2017-03-01 | 2017-08-18 | 智擎信息系统(上海)有限公司 | 一种实现卷积神经网络前向计算的硬件结构 |
US11775313B2 (en) * | 2017-05-26 | 2023-10-03 | Purdue Research Foundation | Hardware accelerator for convolutional neural networks and method of operation thereof |
US20190095776A1 (en) * | 2017-09-27 | 2019-03-28 | Mellanox Technologies, Ltd. | Efficient data distribution for parallel processing |
CN108416422B (zh) * | 2017-12-29 | 2024-03-01 | 国民技术股份有限公司 | 一种基于fpga的卷积神经网络实现方法及装置 |
CN108665059A (zh) * | 2018-05-22 | 2018-10-16 | 中国科学技术大学苏州研究院 | 基于现场可编程门阵列的卷积神经网络加速系统 |
CN109284475B (zh) * | 2018-09-20 | 2021-10-29 | 郑州云海信息技术有限公司 | 一种矩阵卷积计算装置及矩阵卷积计算方法 |
CN109409511B (zh) * | 2018-09-25 | 2020-07-28 | 西安交通大学 | 一种用于动态可重构阵列的卷积运算数据流调度方法 |
-
2019
- 2019-04-22 CN CN201910323955.3A patent/CN110097174B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106875012A (zh) * | 2017-02-09 | 2017-06-20 | 武汉魅瞳科技有限公司 | 一种基于fpga的深度卷积神经网络的流水化加速系统 |
CN108304923A (zh) * | 2017-12-06 | 2018-07-20 | 腾讯科技(深圳)有限公司 | 卷积运算处理方法及相关产品 |
CN108537334A (zh) * | 2018-04-26 | 2018-09-14 | 济南浪潮高新科技投资发展有限公司 | 一种针对cnn卷积层运算的加速阵列设计方法 |
CN108805272A (zh) * | 2018-05-03 | 2018-11-13 | 东南大学 | 一种基于fpga的通用卷积神经网络加速器 |
CN109598338A (zh) * | 2018-12-07 | 2019-04-09 | 东南大学 | 一种基于fpga的计算优化的卷积神经网络加速器 |
CN109635940A (zh) * | 2019-01-28 | 2019-04-16 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种基于卷积神经网络的图像处理方法及图像处理装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110097174A (zh) | 2019-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110097174B (zh) | 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置 | |
Yuan et al. | High performance CNN accelerators based on hardware and algorithm co-optimization | |
CN109102065B (zh) | 一种基于PSoC的卷积神经网络加速器 | |
US11775430B1 (en) | Memory access for multiple circuit components | |
CN109214504B (zh) | 一种基于fpga的yolo网络前向推理加速器设计方法 | |
US20230325348A1 (en) | Performing concurrent operations in a processing element | |
CN108416422B (zh) | 一种基于fpga的卷积神经网络实现方法及装置 | |
CN107657581B (zh) | 一种卷积神经网络cnn硬件加速器及加速方法 | |
EP3757901A1 (en) | Schedule-aware tensor distribution module | |
US10445638B1 (en) | Restructuring a multi-dimensional array | |
CN109948774B (zh) | 基于网络层捆绑运算的神经网络加速器及其实现方法 | |
CN108805266A (zh) | 一种可重构cnn高并发卷积加速器 | |
CN111667051A (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
CN111414994B (zh) | 一种基于FPGA的Yolov3网络计算加速系统及其加速方法 | |
CN110738308B (zh) | 一种神经网络加速器 | |
CN108229671B (zh) | 一种降低加速器外部数据存储带宽需求的系统和方法 | |
CN110222818B (zh) | 一种用于卷积神经网络数据存储的多bank行列交织读写方法 | |
CN110175670B (zh) | 一种基于FPGA实现YOLOv2检测网络的方法及系统 | |
CN109446996B (zh) | 基于fpga的人脸识别数据处理装置及处理方法 | |
Wang et al. | A low-latency sparse-winograd accelerator for convolutional neural networks | |
CN110705702A (zh) | 一种动态可扩展的卷积神经网络加速器 | |
Shahshahani et al. | Memory optimization techniques for fpga based cnn implementations | |
CN112966807B (zh) | 基于存储资源受限fpga的卷积神经网络实现方法 | |
TWI708193B (zh) | 應用於卷積神經網路之記憶體適應性處理方法及其系統 | |
JP2022137247A (ja) | 複数の入力データセットのための処理 |
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 |