CN109615067B - 一种卷积神经网络的数据调度方法及装置 - Google Patents
一种卷积神经网络的数据调度方法及装置 Download PDFInfo
- Publication number
- CN109615067B CN109615067B CN201910165121.4A CN201910165121A CN109615067B CN 109615067 B CN109615067 B CN 109615067B CN 201910165121 A CN201910165121 A CN 201910165121A CN 109615067 B CN109615067 B CN 109615067B
- Authority
- CN
- China
- Prior art keywords
- image
- weights
- data
- convolution kernel
- convolution
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Image Processing (AREA)
Abstract
本申请提供一种卷积神经网络的数据调度方法及装置,用于提供一种新的数据调度方法。该方法包括:确定N组权重数据的第一存储地址;根据所述第一存储地址,从第i个权重缓存器中读取所述N组权重数据;其中,所述第一存储地址为(rd_hcnt‑1)+RD_HCNT_VALUE_TEMP*(rd_vcnt‑1)+addr_temp1;rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,rd_hcnt用于表征所述当前卷积核对应的第几个权重数据,RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址。
Description
技术领域
本申请涉及现场可编程门阵列FPGA硬件加速领域,尤其涉及一种卷积神经网络的数据调度方法及装置。
背景技术
卷积神经网络(Convolutional Neural Network,CNN)是一种常见的深度学习架构,受生物自然视觉认知机制启发而来。20世纪90年代,LeCun et al等人发表论文,确立了CNN的现代架构。CNN能够得出原始图像的有效表征,这使得CNN能够直接从原始像素中,经过极少的预处理,识别视觉上面的规律。然而,由于当时缺乏大规模训练数据,计算机的计算能力也跟不上,CNN对于复杂问题的处理结果并不理想。
进入二十一世纪,随着计算机能力的大幅度提升,以及大数据的广泛应用,CNN的应用能力取得了重大突破,同时,CNN的平台也从中央处理器(Central Processing Unit,CPU)扩展到了图形处理器(Graphic Processing Unit,GPU)、现场可编程门阵列(FieldProgrammble Gate Array,FPGA),或专用集成电路(Application Specific IntegratedCircuit,ASIC)。
FPGA在实现卷积神经网络硬件加速器时,最基本的问题就是实现卷积计算,若要实现卷积计算,则需要获取图像数据和权重数据,而图像数据和权重数据的调度是目前本领域亟待解决的技术问题。
发明内容
本申请实施例提供一种卷积神经网络的数据调度方法及装置,用于提供一种新的卷积神经网络的数据调度方法及装置。
第一方面,提供一种卷积神经网络的数据调度方法,该方法包括:
确定N组权重数据的第一存储地址;
根据所述第一存储地址,从第i个权重缓存器中读取所述N组权重数据;
其中,所述第一存储地址为(rd_hcnt-1)+RD_HCNT_VALUE_TEMP*(rd_vcnt-1)+addr_temp1;
rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,rd_hcnt用于表征所述当前卷积核对应的第几个权重数据,RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址,i为0到M中的任一整数,M为权重缓存器的个数,N由M及卷积核的个数确定,所述N组权重数据中的一组权重数据对应一个卷积核,所述N组权重数据分别存储在所述第i个权重缓存器中的N个存储区域,N和M均为大于零的整数。
在一个可能的设计中,
对图像数据的首尾两行:rd_hcnt=1~WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32;或
对所述图像数据的除所述首尾两行外的中间行:rd_hcnt=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32;
其中,WEIGHTS_H用于表征卷积核的高度;WEIGHTS_V用于表征卷积核的宽度;WEIGHTS_S用于表征卷积核的深度。
在一个可能的设计中,所述方法还包括:
确定与卷积核的大小相同的待卷积的图像数据的第二存储地址;
根据所述第二存储地址,从图像缓存器中读取所述待卷积的图像数据;
其中,所述第二存储地址为(rd_scnt-1)+Image_Z/32*(rd_wcnt-1)+(Image_W+2)*Image_Z/32*(rd_kcnt-1)+Image_Z/32*(rd_fcnt-1)*S+(img_vcounter-1)*(WEIGHTS_V-1)*Image_Z/32-addr_temp2;
其中,Image_W用于表征图像数据的宽度,Image_Z用于表征图像数据的深度,S用于表征步长,rd_scnt用于表征所述待卷积的图像数据为第几个通道中的数据,rd_wcnt用于表征所述待卷积的图像数据为第几列中的数据,rd_kcnt用于表征所述待卷积的图像数据为第几行中的数据,rd_fcnt用于表征总的卷积次数,img_vcounter用于表征当前卷积的开始行数为第几行,addr_temp2用于计算所述待卷积的图像数据的第一个图像数据的存储地址。
在一个可能的设计中,所述方法还包括:
从外部存储器中读取权重数据;
将所述权重数据按照第三存储地址,存储到M个权重缓存器中;
其中,所述第三存储地址为(wr_hcnt-1)+WEIGHTS_S/32*WEIGHTS_H* WEIGHTS_V*(wr_vcnt-1)+16 *(wr_scnt-1);
wr_scnt用于表征当前卷积核对应N个卷积核中的第几个卷积核,wr_hcnt用于表征所述当前卷积核对应的第几个权重数据,wr_vcnt用于表征所述当前卷积核的权重数据应存储的权重缓存器为M个权重缓存器中的第几个权重缓存器。
在一个可能的设计中,所述方法还包括:
从外部存储器中读取图像数据;
将所述图像数据按照第四存储地址,存储到图像缓存器;
其中,第四存储地址为wr_addr_temp + wr_vcnt*Image_Z/32*2-Image_Z/32;wr_addr_temp用于表征当前图像数据第几个图像数据,wr_vcnt用于表征所述当前图像数据所在的层数。
第二方面,本申请提供一种数据调度装置,包括:
M个权重缓存器;
处理器,用于确定N组权重数据的第一存储地址;
根据所述第一存储地址,从第i个权重缓存器中读取所述N组权重数据;
其中,所述第一存储地址为(rd_hcnt-1) + RD_HCNT_VALUE_TEMP*(rd_vcnt-1)+addr_temp1;
rd_vcnt用于表征当前卷积核rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,rd_hcnt用于表征所述当前卷积核对应的第几个权重数据,RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址,i为0到M中的任一整数,N由M及卷积核的个数确定,所述N组权重数据中的一组权重数据对应一个卷积核,所述N组权重数据分别存储在所述第i个权重缓存器中的N个存储区域,N和M均为大于零的整数。
在一个可能的设计中,
对图像数据的首尾两行:rd_hcnt=1~WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32;或
对所述图像数据的除所述首尾两行外的中间行:rd_hcnt=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32;
其中,WEIGHTS_H用于表征卷积核的高度;WEIGHTS_V用于表征卷积核的宽度;WEIGHTS_S用于表征卷积核的深度。
在一个可能的设计中,所述装置还包括:
图像缓存器;
所述处理器用于:
确定与卷积核的大小相同的待卷积的图像数据的第二存储地址;
根据所述第二存储地址,从所述图像缓存器中读取所述待卷积的图像数据;
其中,所述第二存储地址为(rd_scnt-1)+Image_Z/32*(rd_wcnt-1)+(Image_W+2)*Image_Z/32*(rd_kcnt-1)+Image_Z/32*(rd_fcnt-1)*S+(img_vcounter-1)*(WEIGHTS_V-1)*Image_Z/32-addr_temp2;
其中,Image_W用于表征图像数据的宽度,Image_Z用于表征图像数据的深度,S用于表征步长,rd_scnt用于表征所述待卷积的图像数据为第几个通道中的数据,rd_wcnt用于表征所述待卷积的图像数据为第几列中的数据,rd_kcnt用于表征所述待卷积的图像数据为第几行中的数据,rd_fcnt用于表征总的卷积次数,img_vcounter 用于表征当前卷积的开始行数为第几行,addr_temp2用于计算所述待卷积的图像数据的第一个图像数据的存储地址。
在一个可能的设计中,所述处理器还用于:
从外部存储器中读取权重数据;
将所述权重数据按照第三存储地址,存储到M个权重缓存器中;
其中,所述第三存储地址为(wr_hcnt-1)+WEIGHTS_S/32*WEIGHTS_H WEIGHTS_V*(wr_vcnt-1)+16 *(wr_scnt-1);
wr_scnt用于表征当前卷积核为N个卷积核中的第几个卷积核,wr_hcnt用于表征所述当前卷积核对应的第几个权重数据,wr_vcnt用于表征所述当前卷积核的权重数据应存储的权重缓存器为M个权重缓存器中的第几个权重缓存器。
在一个可能的设计中,所述处理器还用于:
从外部存储器中读取图像数据;
将所述图像数据按照第四存储地址,存储到图像缓存器;
其中,第四存储地址为wr_addr_temp+wr_vcnt*Image_Z/32*2-Image_Z/32;wr_addr_temp用于表征当前图像数据为第几个图像数据,wr_vcnt用于表征所述当前图像数据所在的层数。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为卷积运算的示意图;
图2为本申请提供的一种应用场景的示意图;
图3为本申请提供的一种卷积神经网络的数据调度方法的流程示意图;
图4为本申请提供的卷积核和图像数据的示意图;
图5为本申请中将权重数据存储到权重缓存器的示意图;
图6为本申请中将权重数据存储到权重缓存器时相关参数的计数示意图;
图7为本申请中将图像数据存储到图像缓存器的示意图;
图8为本申请中将图像数据存储到图像缓存器时相关参数的计数示意图;
图9为本申请中从第i个权重缓存器中读取N组权重数据的示意图;
图10为本申请中从第i个权重缓存器中读取N组权重数据时相关参数的计数示意图;
图11-图16为本申请中从图像缓存器中读取待卷积的图像数据的示意图;
图17为本申请提供的一种数据调度装置的结构示意图;
图18为本申请的图像缓存器的示意图;
图19为本申请提供的卷积神经网络的数据调度的框架示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
以下,对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)卷积运算
假设输入是6×6×1的图像矩阵,卷积核是3×3×1权重矩阵,则图像矩阵与权重矩阵的卷积运算过程具体如下:
请参见图1,从6×6×1的图像矩阵中选取p1,p2,p3,p7,p8,p9,p13,p14,p15共9个像素点,将该9个像素点与卷积核的权重矩阵中的对应点相乘后相加,得到卷积结果V1,计算过程如下:
V1= p1*k1+ p2* k2+ p3* k3+ p7* k4+ p8* k5+ p9* k6+ p14* k7+ p15* k8+p16* k9;
同理,可以计算得到:
V2= p2*k1+ p3* k2+ p4* k3+ p8* k4+ p9* k5+ p10* k6+ p13* k7+ p14* k8+p15* k9;
V3= p3*k1+ p4* k2+ p5* k3+ p9* k4+ p10* k5+ p11* k6+ p15* k7+ p16* k8+ p17* k9;
…
V16= p22*k1+ p23* k2+ p24* k3+ p28* k4+ p29* k5+ p30* k6+ p34* k7+p35* k8+ p36* k9。
通过上面的运算过程,得到一个4×4×1的输出矩阵。在具体实现过程中,若要保证输出矩阵与图像矩阵的尺寸一样大,则可以对图像矩阵进行补零操作,也就是在图像矩阵的周围补零,变成8×8×1图像矩阵。这样,用一个3×3×1的卷积核去卷积一个8×8×1的图像矩阵之后,便可以得到一个大小为6×6×1的输出矩阵。
在上述卷积运算过程中,卷积核的个数是1个。当然,根据实际需要,卷积核的个数也可以是3,16,32,64,128,255,256,512,或者为其它值。卷积处理后的输出矩阵的通道数等于卷积核的个数,也就是输出矩阵的深度等于卷积核的个数。
(2)块随机存储器(Block RAM,BRAM),是双端口RAM,包含两套完备的36比特(bit)读写数据总线以及相应的控制总线。
请参见图2,为本申请实施例的一种应用场景。图2为卡迪尔架构,包括三部分:主机端(Host)、虚线框部分及外部存储器,外部存储器分别与主机端、虚线框部分耦接。其中,外部缓存包括:外部缓存1、外部缓存2及外部缓存3,虚线框部分包括:直接内存存取(Direct Memory Access,DMA)、AXI4(Advanced eXtensible Interface)-lite接口,AXI4,互联模块(Interconnet),缓存模块1,缓存模块2,以及计算单元,主机端能够访问DMA。计算单元包括多通道的处理单元(Processing Element,PE),用于完成乘累加计算。
基于卡迪尔架构,计算单元通过互联模块从外部存储器中读取数据,并将数据存储在缓存模块1和缓存模块2中。在计算单元需要进行卷积计算时,从缓存模块1和缓存模块2中读取数据用于进行卷积计算。
下面结合附图介绍本申请实施例提供的技术方案,在下面的介绍过程中,以将本申请提供的技术方案应用在图2所示的应用场景中为例,且在本申请实施例中,卷积神经网络可以是基于现场可编程门阵列(Field-Programmable Gate Array,FPGA)实现的。
请参见图3,本申请一实施例提供一种卷积神经网络的数据调度方法,该方法的流程描述如下:
S301:确定N组权重数据的第一存储地址;其中,所述第一存储地址为(rd_hcnt-1)+RD_HCNT_VALUE_TEMP*(rd_vcnt-1)+addr_temp1;rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,rd_hcnt用于表征所述当前卷积核对应的第几个权重数据,RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址,i为0到M中的任一整数,M为权重缓存器的个数,N由M及卷积核的个数确定,所述N组权重数据中的一组权重数据对应一个卷积核,所述N组权重数据分别存储在所述第i个权重缓存器中的N个存储区域,N和M均为大于零的整数。
N由M及卷积核的个数确定,例如,N=M/卷积核的个数。若以M是16,卷积核的个数是128为例,则N=128/16=8。也就是说,有16个权重缓存器,例如,权重缓存器0-权重缓存器15,128个卷积核,每个权重缓存器中存储8个卷积核对应的8组权重数据,也就是说将每个权重缓存器的存储区域划分成8个存储区域,每个存储区域用于存储一个卷积核对应的一组权重数据。
在本申请实施例中,以卷积核的尺寸是3×3×64,图像数据尺寸是52×52×64为例。卷积核的宽度用WEIGHTS_V表示,卷积核的高度用WEIGHTS_H表示,卷积核的深度用WEIGHTS_S表示,图像数据的宽度用Image_W表示,图像数据的高度用Image_H表示,图像数据的深度用Image_Z表示,128个3×3×64的卷积核与52×52×64的图像数据卷积之后得到的输出图像的尺寸为52×52×128,具体请参见图4。
在本申请实施例中,需要从第i个权重缓存器中读取N组权重数据,以及从图像缓存器中读取与卷积核大小相同的待卷积的图像数据。在本申请实施例中,对先读取待卷积图像,还是先读取权重数据不做限制,例如可以先读取N组权重数据,再读取待卷积图像数据,也可以是先读取待卷积图像数据,再读取N组权重数据,当然也可以是同时读取N组权重数据和待卷积图像数据。
在本申请实施例中,在执行步骤S301之前,所述方法还包括:
从外部存储器中读取权重数据;
将所述权重数据按照第三存储地址,存储到M个权重缓存器中;其中,所述第三存储地址为(wr_hcnt-1) + WEIGHTS_S/32* WEIGHTS_H *WEIGHTS_V *(wr_vcnt-1)+ 16 *(wr_scnt-1);wr_scnt用于表征当前卷积核为N个卷积核中的第几个卷积核,wr_hcnt用于表征所述当前卷积核对应的第几个权重数据,wr_vcnt用于表征所述当前卷积核的权重数据应存储的权重缓存器为M个权重缓存器中的第几个权重缓存器,外部存储器可以为双倍速率动态随机存储器(Double Data Rate,DDR),也可以为安全数码卡(Secure DigitalMemory Card,SD)。
在介绍如何将权重数据存储到M个权重缓存器之前,需要说明的是,此处的当前卷积核为当前需要存储的权重数据的卷积核。
在本申请实施例中,wr_hcnt用于表征当前卷积核对应的第几个权重数据,作为一个示例,wr_hcnt可以通过如下方式计算:
wr_hcnt=1~WEIGHTS_S/32*WEIGHTS_H*WEIGHTS_V
继续采用上述举例,wr_hcnt=1~64/32*3*3=1~18,也就是一个卷积核对应的第1个到第18个权重数据,例如,wr_hcnt=1表示当前卷积核的第一个权重数据,wr_hcnt=2表示当前卷积核的第二个权重数据,等等。
wr_vcnt用于表征当前卷积核的权重数据应存储的权重缓存器为M个权重缓存器中的第几个权重缓存器,也就是当前卷积核的权重数据存储在16个权重缓存器的哪个权重缓存器中,作为一个示例, wr_vcnt=1~16,例如,wr_vcnt=1表示当前卷积核的权重数据应存储在16个权重缓存器中的第一个权重缓存器中,wr_vcnt=2表示当前卷积核的权重数据应存储在16个权重缓存器中的第二个权重缓存器中。
wr_scnt用于表征当前卷积核为N个卷积核中的第几个卷积核,作为一个示例,wr_scnt=1~8,例如,wr_scnt=1表示当前卷积核为8个卷积核中的第一个卷积核,wr_scnt=2表示当前卷积核为8个卷积核中的第二个卷积核。
在具体实现过程中,以第一个卷积核的第一个权重数据为例,该权重数据将存储在第一权重缓存器的第一个存储区域的存储地址为0的存储区域中,将第一个卷积核的第二个权重数据存储在第一权重缓存器的第一个存储区域的存储地址为1的存储空间中,…将第一个卷积核的第18个权重数据存储在第一权重缓存器的第一存储区域的存储地址为17的存储空间中。
依次类推,将第二个卷积核的权重数据写入第二个权重缓存器的第一个存储区域中,将第三个卷积核的权重数据写入第三个权重缓存器的第一个存储区域中,…将第17个卷积核的权重数据写入第一个权重缓存器的第二个存储区域中,将第18个卷积核的权重数据写入第二个权重缓存器的第二个存储区域中,…将第128个卷积核的权重数据写入第十六个权重缓存器的第八个存储区域中,具体请参见图5,其中,每个权重缓存器的存储地址从0-1023。
在将权重数据写入权重缓存器的过程中,wr_hcnt、wr_vcnt、wr_scnt分别可以用相应的计数器实现计数,具体请参见图6。在图6中,wr_hcnt对应的计数达到18时,也就是第一个卷积核的权重数据已写入完毕,wr_vcnt加1,在wr_vcnt对应的计数达到16时,也就是第十六个卷积核的权重数据写入第十六权重缓存器,wr_scnt加1,这表明将从第一个卷积核的第二存储子区域开始继续写入后续卷积核的权重数据。
在执行步骤S301之前,还需要执行如下步骤:
从外部存储器中读取图像数据;
将所述图像数据按照第四存储地址,存储到所述图像缓存器;
其中,第四存储地址为wr_addr_temp+wr_vcnt*Image_Z/32*2-Image_Z/32;wr_addr_temp用于表征当前图像数据为第几个图像数据,wr_vcnt用于表征所述当前图像数据所在的层数。
此处需要说明的是,当前图像数据为当前时刻需要存在到图像缓存器的图像数据。wr_addr_temp用于表征当前图像数据的个数。作为一个示例,wr_addr_temp可以通过如下计算公式计算获得:
wr_addr_temp=1~Image_Z/32*Image_W*Image_H
若仍采用上述举例,wr_addr_temp=1~64/32*52*52= 1~5408;
wr_vcnt用于表征所述图像数据的层数,应理解,此处层数指的是在图像数据的深度为一个固定值时,以1为例,则52×52×64的图像数据变成52×52的图像矩阵的行数,继续沿用上述举例,vcnt=1~Image_H=1~52。
在具体实现过程中,以第一个图像数据d1为例,第一个图像数据d1的存储地址为1+1*64/32*2-64/32=3,在图7中,存储首地址为0,因此将则将该第一个图像数据d1存储到图像缓存器的地址为2的存储空间中,同样的,将第二个图像数据d2存储到图像缓存器的地址为3的存储空间中,以此类推。
图7中,存储图像数据是按照层存储的,且在图7中,左边两列和右边两列为空,这是因为对图像数据进行了补零操作,由于图像数据的深度是64,而读取图像数据的单位为32个位宽是16bit的数据,所以,图7中左边和右边分别空两列。
在将图像数据写入图像缓存器过程中,wr_vcnt的计数可以通过计数器实现,具体请参见图8。在图8中,wr_hcnt的计数值达到104时,wr_vcnt的计数值加1。其中,wr_hcnt用于表征一层所包括图像数据的个数。
在将权重数据存储到M个权重缓存器,图像数据存储到图像缓存器之后。在需要进行卷积运算时,则从权重缓存器中读取权重数据,从图像缓存器中读取对应的图像数据。下面则详细介绍如何从权重缓存器中读取权重数据以及从图像缓存器中读取对应的图像数据。
S302:根据所述第一存储地址,从第i个权重缓存器中读取所述N组权重数据。
在具体实现过程中,由于是从M个权重缓存器中同时读取权重数据,且从每个权重缓存器中读取权重数据的步骤相同。因此,在这里以读取M个权重缓存器中的第i个权重缓存器中的N组权重数据为例来介绍。
在本申请实施例中,rd_hcnt用于表征当前卷积核的第几个权重数据。针对图像数据的不同行,rd_hcnt的计算方式也不相同,例如,对图像数据的首尾两行:rd_hcnt=1~WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32 ,对图像数据的除所述首尾两行外的中间行:rd_hcnt=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32。具体的,继续沿用上述举例,对图像数据的首尾两行,rd_hcnt=1~3*(3-1)*64/32=1~12,此处的12就是不用读取补零的6个图像数据对应的权重数据,是因为对图像数据做了补零操作,而在首尾两行处补零之后,对应行在进行卷积时,卷积结果也是为零,因此,为提高数据的读取效率,针对补零处,则读取rd_hcnt=1~12个权重数据。对除首尾两行外的中间行,rd_hcnt=1~3*3*64/32=1~18。
rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,也就是当前卷积核的权重数据存储在当前权重缓存器的哪个存储区域中。继续沿用上述举例,rd_vcnt=1~8,例如rd_vcnt=1表示当前需要读取N个卷积核中的第一个卷积核的权重数据,rd_vcnt=2表示当前需要读取N个卷积核中的第二个卷积核的权重数据。
RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,对图像数据的首尾两行,RD_HCNT_VALUE_TEMP=WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32,除首尾两行外的中间行,也就是除首尾两行外的其它行:RD_HCNT_VALUE_TEMP=WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32。
继续沿用上述举例,对图像数据的首尾两行:RD_HCNT_VALUE_TEMP=3*(3-1)*64/32=12,对除首尾两行外的中间行:RD_HCNT_VALUE_TEMP=3*3*64/32=18。这里举一个示例,对于首尾两行,第i个权重缓存器中第二个卷积核的存储首地址为12*(2-1)=12;对于中间行,第i个权重缓存器第二个卷积核的存储首地址的为18*(2-1)=18。
addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址,是一个辅助参数变量,作为一个示例,对于图像数据的第一行addr_temp=IMG_Z/32*WEIGHTS_H*rd_vcnt=6* rd_vcnt;对于图像数据的最后一行addr_temp=IMG_Z/32*WEIGHTS_H*(rd_vcnt-1)= 6* (rd_vcnt-1),对于图像数据的除首尾两行外的其它行addr_temp=0。例如,继续沿用上述举例,对于图像数据的第一行,第i个权重缓存器的第一个卷积核被读取的第一个权重数据的存储地址为6,第二个卷积核被读取的第一个权重数据的存储地址为24,具体请参见图9,其中,图9中的rd_scnt用于表征一个卷积核需要进行的总的卷积次数。
在本申请实施例中,rd_hcnt、rd_vcnt、rd_scnt的计数可以分别用计数器实现,具体请参见图10。在图10中,对于图像数据的首尾两行,在rd_hcnt的计数值达到12时,也就是说已从该权重缓存器的第一个存储区域中读取第一个卷积核的权重数据, rd_vcnt的计数值加1,直至rd_vcnt的计数值为8,rd_scnt加1,由于有52*52个图像数据,则一个卷积核的权重数据要被读取52*52次。
二、从图像缓存器中读取图像数据。
从图像缓存器中读取图像数据具体包括如下步骤:
确定与卷积核的大小相同的待卷积的图像数据的第二存储地址;
根据所述第二存储地址,从图像缓存器中读取所述待卷积的图像数据;其中,所述第二存储地址为(rd_scnt-1)+Image_Z/32*(rd_wcnt-1)+(Image_W+2)*Image_Z/32*(rd_hcnt-1)+Image_Z/32*(rd_fcnt-1)*S + (img_vcounter-1)*(WEIGHTS_V-1)*Image_Z/32-addr_temp2;其中,S用于表征步长,rd_scnt用于表征所述待卷积的图像数据为第几个通道中的数据,rd_wcnt用于表征所述待卷积的图像数据为第几列中的数据,rd_kcnt用于表征所述待卷积的图像数据为第几行中的数据,rd_fcnt用于表征总的卷积次数, img_vcounter 用于表征当前卷积的开始行数为第几行,addr_temp2用于计算所述待卷积的图像数据的第一个图像数据的存储地址。
在本申请实施例中,rd_scnt用于表征待卷积的图像数据为第几个通道中的数据,作为一个示例,rd_scnt=1~Image_Z/32=1~2。此处的通道指的是,由于从图像缓存器中读取图像数据的最小单位是32个位宽为16bit的数据,因此,在图像数据的深度为64时,则64个位宽为16bit的图像数据,只需要操作两次即可。
rd_wcnt用于表征待卷积的图像数据为第几列中的数据,作为一个示例,rd_wcnt=1~WEIGHTS_H=1~3;此处的“列”指的是对应卷积核的尺寸来定义的,而并不是指图像数据的列数。
rd_hcnt用于表征待卷积的图像数据为第几行中的数据,其中,对于图像数据的首尾两行rd_hcnt=1~2,对于图像数据的除首尾两行外的其它行,rd_hcnt=1~3;此处的“行”指的是对应卷积核的尺寸来定义的,而并不是指图像数据的列数。
addr_temp2用于计算所述待卷积的图像数据的第一个图像数据的存储地址,其中,对于存储图像数据的第一行,addr_temp=0,对于存储图像数据的除第一行外的其它行,addr_temp=IMG_Z/32*(IMG_H+2)=64/32*(52+2)=2*54=108。
在具体实现过程中,以待卷积的图像数据是图像数据中的第2行的第1个点为例,则第一个图像数据的存储地址为:0,第二个图像数据的存储地址为1,图像数据的第一层的第六个图像数据的存储地址为5;待卷积的图像数据的第二层的第一个图像数据的存储地址为108,…待卷积的图像数据的第二层的第六个图像数据的存储地址为113,具体请参见图11。图12表示图像第1行第2个点进行卷积计算需要读出的数据;图13表示图像第1行第52个点进行卷积计算需要读出的数据;图14表示图像第2行第1个点进行卷积计算需要读出的数据;图15表示图像第2行第2个点进行卷积计算需要读出的数据;图16表示图像第2行第52个点进行卷积计算需要读出的数据。
此处需要说明的是,此处一个点指的是与卷积核的尺寸大小相同的数据块。图11-图16中的rd_fc_cnt用于表征一个权重缓存器存储的N组权重数据对应的N个卷积核,img_hcounter指的是一行进行的卷积次数。
在此,需要说明的是,由于是读取第i个权重缓存器中的N组权重数据,所以,需要读取8次待卷积的图像数据。
在从图像缓存器中读取待卷积图像数据,以及从第i个权重缓存器中读取N组权重数据之后,则将待卷积图像数据分别与所述N组权重数据中的每组权重数据进行卷积运算,得到N个卷积结果。
在本申请实施例中,在从权重缓存器中读取权重数据,从图像缓存器中读取图像数据之后,则将对应的点相乘后相加,便得到卷积运算的结果。继续沿用上述举例,便可得到如图4所示的输出卷积结果。
下面结合附图介绍本申请实施例提供的装置。
请参见图17,为本申请提供的一种数据调度装置1700,包括:
M个权重缓存器1701;
处理器1702,用于确定所述N组权重数据的第一存储地址;根据所述第一存储地址,从所述第i个权重缓存器中读取所述N组权重数据;其中,所述第一存储地址为(rd_hcnt-1) + RD_HCNT_VALUE_TEMP*(rd_vcnt-1)+addr_temp1;
rd_vcnt用于表征当前卷积核rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,rd_hcnt用于表征所述当前卷积核对应的第几个权重数据,RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址。
在本申请实施例中,每个权重缓存器可以是采用14个36bit BRAM生成的宽度为512bit,深度为1024的双端口,具体可参见图5。
处理器1702可以是中央处理器(central processing unit,CPU),或特定应用集成电路(application-specific integrated circuit,ASIC),可以是一个或多个用于控制程序执行的集成电路,可以是基带芯片,等等。
在一个可能的设计中,
对图像数据的首尾两行:rd_hcnt=1~WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32;或
对所述图像数据的除所述首尾两行外的中间行:rd_hcnt=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32;
其中,WEIGHTS_H用于表征卷积核的高度;WEIGHTS_V用于表征卷积核的宽度;WEIGHTS_S用于表征卷积核的深度。
在一个可能的设计中,所述装置还包括:
图像缓存器1703;
所述处理器1702用于确定待卷积的图像数据的第二存储地址;
根据所述第二存储地址,从所述图像缓存器1703中读取所述待卷积的图像数据;
其中,所述第二存储地址为(rd_scnt-1)+Image_Z/32*(rd_wcnt-1)+(Image_W+2)*Image_Z/32*(rd_kcnt-1)+Image_Z/32*(rd_fcnt-1)*S+(img_vcounter-1)*(WEIGHTS_V-1)*Image_Z/32-addr_temp2;
其中,Image_W用于表征图像数据的宽度,Image_Z用于表征图像数据的深度,S用于表征步长,rd_scnt用于表征所述待卷积的图像数据为第几个通道中的数据,rd_wcnt用于表征所述待卷积的图像数据为第几列中的数据,rd_kcnt用于表征所述待卷积的图像数据为第几行中的数据,rd_fcnt用于表征总的卷积次数,img_vcounter 用于表征当前卷积的开始行数为第几行,addr_temp2用于计算所述待卷积的图像数据的第一个图像数据的存储地址。
在本申请实施例中,图像缓存器1703可以是采用164个36bit BRAM生成的宽度为512bit,深度为11776的双端口,具体请参见图18。
在具体实现过程中,若M=16,也就是有16个权重缓存器,一个图像缓存器,请参见图19,处理器从外部存储器中读取图像数据,并将图像数据缓存在图像缓存器中,并从外部存储器中读取权重数据,并将权重数据缓存在权重缓存器中,在多通道的处理单元需要进行卷积运算时,则从图像缓存器及权重缓存器中读取相应的数据,以进行卷积运算,其中,图19中的DFF指的是D类型触发器。
在一个可能的设计中,所述处理器1702还用于:
从外部存储器中读取权重数据;
将所述权重数据按照第三存储地址,存储到M个权重缓存器1701中;
其中,所述第三存储地址为(wr_hcnt-1)+WEIGHTS_S/32**WEIGHTS_H *WEIGHTS_V*(wr_vcnt-1)+16 *(wr_scnt-1);
wr_scnt用于表征当前卷积核为N个卷积核中的第几个卷积核,wr_hcnt用于表征所述当前卷积核对应的第几个权重数据,wr_vcnt用于表征所述当前卷积核的权重数据应存储的权重缓存器为M个权重缓存器中的第几个权重缓存器。
在一个可能的设计中,所述处理器1702还用于:
从外部存储器中读取图像数据;
将所述图像数据按照第四存储地址,存储到所述图像缓存器1703;
其中,第四存储地址为wr_addr_temp+wr_vcnt*Image_Z/32*2-Image_Z/32;wr_addr_temp用于表征当前图像数据为第几个图像数据,wr_vcnt用于表征所述当前图像数据所在的层数。
在本申请实施例中,外部存储器可以为DDR,或为SD卡,或为其它类型的外部存储器,在此不做限制。
以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明实施例的方法,不应理解为对本发明实施例的限制。本技术领域的技术人员可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。
Claims (10)
1.一种卷积神经网络的数据调度方法,其特征在于,包括:
确定N组权重数据的第一存储地址;
根据所述第一存储地址,从第i个权重缓存器中读取所述N组权重数据;
其中,所述第一存储地址为(rd_hcnt-1)+RD_HCNT_VALUE_TEMP*(rd_vcnt-1)+addr_temp1;
rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,rd_hcnt用于表征所述当前卷积核对应的第几个权重数据,RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址,i为0到M中的任一整数,M为权重缓存器的个数,N由M及卷积核的个数确定,所述N组权重数据中的一组权重数据对应一个卷积核,所述N组权重数据分别存储在所述第i个权重缓存器中的N个存储区域,N和M均为大于零的整数。
2.根据权利要求1所述的方法,其特征在于,
对图像数据的首尾两行:rd_hcnt=1~WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32;或
对所述图像数据的除所述首尾两行外的中间行:rd_hcnt=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32;
其中,WEIGHTS_H用于表征卷积核的高度;WEIGHTS_V用于表征卷积核的宽度;WEIGHTS_S用于表征卷积核的深度。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定与卷积核的大小相同的待卷积的图像数据的第二存储地址;
根据所述第二存储地址,从图像缓存器中读取所述待卷积的图像数据;
其中,所述第二存储地址为(rd_scnt-1)+Image_Z/32*(rd_wcnt-1)+(Image_W+2)*Image_Z/32*(rd_kcnt-1)+Image_Z/32*(rd_fcnt-1)*S+(img_vcounter-1)*(WEIGHTS_V-1)*Image_Z/32-addr_temp2;
其中,Image_W用于表征图像数据的宽度,Image_Z用于表征图像数据的深度,S用于表征步长,rd_scnt用于表征所述待卷积的图像数据为第几个通道中的数据,rd_wcnt用于表征所述待卷积的图像数据为第几列中的数据,rd_kcnt用于表征所述待卷积的图像数据为第几行中的数据,rd_fcnt用于表征总的卷积次数,img_vcounter 用于表征当前卷积的开始行为第几行,addr_temp2用于计算所述待卷积的图像数据的第一个图像数据的存储地址。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
从外部存储器中读取权重数据;
将所述权重数据按照第三存储地址,存储到M个权重缓存器中;
其中,所述第三存储地址为(wr_hcnt-1)+WEIGHTS_S/32*WEIGHTS_H *WEIGHTS_V *(wr_vcnt-1)+16*(wr_scnt-1);
wr_scnt用于表征当前卷积核为N个卷积核中的第几个卷积核,wr_hcnt用于表征所述当前卷积核对应的第几个权重数据,wr_vcnt用于表征所述当前卷积核的权重数据应存储的权重缓存器为M个权重缓存器中的第几个权重缓存器。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
从外部存储器中读取图像数据;
将所述图像数据按照第四存储地址,存储到图像缓存器;
其中,第四存储地址为wr_addr_temp+wr_vcnt*Image_Z/32*2-Image_Z/32;wr_addr_temp用于表征当前图像数据为第几个图像数据,wr_vcnt用于表征所述当前图像数据所在的层数。
6.一种数据调度装置,其特征在于,包括:
M个权重缓存器;
处理器,用于确定N组权重数据的第一存储地址;根据所述第一存储地址,从第i个权重缓存器中读取所述N组权重数据;其中,所述第一存储地址为(rd_hcnt-1)+RD_HCNT_VALUE_TEMP*(rd_vcnt-1)+addr_temp1;rd_vcnt用于表征当前卷积核为N个卷积核中的第几个卷积核,rd_hcnt用于表征所述当前卷积核对应的第几个权重数据,RD_HCNT_VALUE_TEMP用于计算所述当前卷积核的权重数据的存储首地址,addr_temp1用于确定N个卷积核中每个卷积核的需要被读取的第一个权重数据的存储地址,i为0到M中的任一整数, N由M及卷积核的个数确定,所述N组权重数据中的一组权重数据对应一个卷积核,所述N组权重数据分别存储在所述第i个权重缓存器中的N个存储区域,N和M均为大于零的整数。
7.根据权利要求6所述的装置,其特征在于,
对图像数据的首尾两行:rd_hcnt=1~WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=WEIGHTS_H*(WEIGHTS_V-1)*WEIGHTS_S/32;或
对所述图像数据的除所述首尾两行外的中间行:rd_hcnt=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32,RD_HCNT_VALUE_TEMP=1~WEIGHTS_H*WEIGHTS_V*WEIGHTS_S/32;
其中,WEIGHTS_H用于表征卷积核的高度;WEIGHTS_V用于表征卷积核的宽度;WEIGHTS_S用于表征卷积核的深度。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
图像缓存器;
所述处理器用于确定与卷积核的大小相同的待卷积的图像数据的第二存储地址;根据所述第二存储地址,从所述图像缓存器中读取所述待卷积的图像数据;其中,所述第二存储地址为(rd_scnt-1)+Image_Z/32*(rd_wcnt-1)+(Image_W+2)*Image_Z/32*(rd_kcnt-1)+Image_Z/32*(rd_fcnt-1)*S+(img_vcounter-1)*(WEIGHTS_V-1)*Image_Z/32-addr_temp2;其中,Image_W用于表征图像数据的宽度,Image_Z用于表征图像数据的深度,S用于表征步长,rd_scnt用于表征所述待卷积的图像数据为第几个通道中的数据,rd_wcnt用于表征所述待卷积的图像数据为第几列中的数据,rd_kcnt用于表征所述待卷积的图像数据为第几行中的数据,rd_fcnt用于表征总的卷积次数,img_vcounter用于表征当前卷积的开始行为第几行,addr_temp2 addr_temp2用于计算所述待卷积的图像数据的第一个图像数据的存储地址。
9.根据权利要求6-8任一项所述的装置,其特征在于,所述处理器还用于:
从外部存储器中读取权重数据;
将所述权重数据按照第三存储地址,存储到M个权重缓存器中;
其中,所述第三存储地址为(wr_hcnt-1)+WEIGHTS_S/32* WEIGHTS_H *WEIGHTS_V *(wr_vcnt-1)+16 *(wr_scnt-1);
wr_scnt用于表征当前卷积核为N个卷积核中的第几个卷积核,wr_hcnt用于表征所述当前卷积核对应的第几个权重数据,wr_vcnt用于表征所述当前卷积核的权重数据应存储的权重缓存器为M个权重缓存器中的第几个权重缓存器。
10.根据权利要求6-8任一项所述的装置,其特征在于,所述处理器还用于:
从外部存储器中读取图像数据;
将所述图像数据按照第四存储地址,存储到图像缓存器;
其中,第四存储地址为wr_addr_temp+wr_vcnt*Image_Z/32*2-Image_Z/32;wr_addr_temp用于表征当前图像数据第几个图像数据,wr_vcnt用于表征所述当前图像数据所在的层数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910165121.4A CN109615067B (zh) | 2019-03-05 | 2019-03-05 | 一种卷积神经网络的数据调度方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910165121.4A CN109615067B (zh) | 2019-03-05 | 2019-03-05 | 一种卷积神经网络的数据调度方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109615067A CN109615067A (zh) | 2019-04-12 |
CN109615067B true CN109615067B (zh) | 2019-05-21 |
Family
ID=66019981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910165121.4A Active CN109615067B (zh) | 2019-03-05 | 2019-03-05 | 一种卷积神经网络的数据调度方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109615067B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110059808B (zh) * | 2019-06-24 | 2019-10-18 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种卷积神经网络的数据读取方法及数据读取装置 |
CN110428358A (zh) * | 2019-08-07 | 2019-11-08 | 上海安路信息科技有限公司 | 特征图像数据读写方法及读写系统 |
CN111915001B (zh) * | 2020-08-18 | 2024-04-12 | 腾讯科技(深圳)有限公司 | 卷积计算引擎、人工智能芯片以及数据处理方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5368687B2 (ja) * | 2007-09-26 | 2013-12-18 | キヤノン株式会社 | 演算処理装置および方法 |
CN106228240B (zh) * | 2016-07-30 | 2020-09-01 | 复旦大学 | 基于fpga的深度卷积神经网络实现方法 |
CN106940815B (zh) * | 2017-02-13 | 2020-07-28 | 西安交通大学 | 一种可编程卷积神经网络协处理器ip核 |
-
2019
- 2019-03-05 CN CN201910165121.4A patent/CN109615067B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109615067A (zh) | 2019-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109615067B (zh) | 一种卷积神经网络的数据调度方法及装置 | |
CN108416422B (zh) | 一种基于fpga的卷积神经网络实现方法及装置 | |
CN108108809B (zh) | 一种针对卷积神经元网络进行推理加速的硬件架构及其工作方法 | |
CN107844828B (zh) | 神经网络中的卷积计算方法和电子设备 | |
CN108280514B (zh) | 基于fpga的稀疏神经网络加速系统和设计方法 | |
CN111242277B (zh) | 一种基于fpga设计的支持稀疏剪枝的卷积神经网络加速器 | |
CN108629406B (zh) | 用于卷积神经网络的运算装置 | |
CN107169563A (zh) | 应用于二值权重卷积网络的处理系统及方法 | |
US20180089562A1 (en) | Operation apparatus and method for convolutional neural network | |
CN107066239A (zh) | 一种实现卷积神经网络前向计算的硬件结构 | |
CN102208005B (zh) | 一种2-d卷积器 | |
CN108133270A (zh) | 卷积神经网络加速方法及装置 | |
CN108681984A (zh) | 一种3*3卷积算法的加速电路 | |
CN108805272A (zh) | 一种基于fpga的通用卷积神经网络加速器 | |
CN107239823A (zh) | 一种用于实现稀疏神经网络的装置和方法 | |
CN106447034A (zh) | 一种基于数据压缩的神经网络处理器、设计方法、芯片 | |
TW201915835A (zh) | 人工神經元中以非零封包加速乘法運算的裝置及方法 | |
CN107392308A (zh) | 一种基于可编程器件的卷积神经网络加速方法与系统 | |
CN106779057A (zh) | 基于gpu的计算二值神经网络卷积的方法及装置 | |
JP7261226B2 (ja) | 演算処理装置 | |
CN107256424A (zh) | 三值权重卷积网络处理系统及方法 | |
CN110147252A (zh) | 一种卷积神经网络的并行计算方法及装置 | |
CN113673701A (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
CN107092655A (zh) | 用于Android宽屏设备中组图的循环展示方法及系统 | |
CN108171662A (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 |