CN107403221A - 卷积神经网络的硬件实现 - Google Patents
卷积神经网络的硬件实现 Download PDFInfo
- Publication number
- CN107403221A CN107403221A CN201710304906.6A CN201710304906A CN107403221A CN 107403221 A CN107403221 A CN 107403221A CN 201710304906 A CN201710304906 A CN 201710304906A CN 107403221 A CN107403221 A CN 107403221A
- Authority
- CN
- China
- Prior art keywords
- data
- subset
- cnn
- result
- input
- 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.)
- Granted
Links
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 166
- 238000000034 method Methods 0.000 claims abstract description 95
- 239000000872 buffer Substances 0.000 claims description 101
- 238000012545 processing Methods 0.000 claims description 85
- 238000004519 manufacturing process Methods 0.000 claims description 41
- 241001269238 Data Species 0.000 claims description 14
- 235000013399 edible fruits Nutrition 0.000 claims description 4
- 239000010410 layer Substances 0.000 description 182
- 230000006870 function Effects 0.000 description 55
- 230000004913 activation Effects 0.000 description 47
- 230000005055 memory storage Effects 0.000 description 34
- 230000008569 process Effects 0.000 description 24
- 238000009825 accumulation Methods 0.000 description 21
- 238000010606 normalization Methods 0.000 description 12
- 230000015572 biosynthetic process Effects 0.000 description 10
- 238000003786 synthesis reaction Methods 0.000 description 9
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 7
- 230000008859 change Effects 0.000 description 7
- 229910052710 silicon Inorganic materials 0.000 description 7
- 239000010703 silicon Substances 0.000 description 7
- 239000002356 single layer Substances 0.000 description 7
- 238000013507 mapping Methods 0.000 description 5
- 230000011664 signaling Effects 0.000 description 5
- 230000003139 buffering effect Effects 0.000 description 4
- 230000001186 cumulative effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000011068 loading method Methods 0.000 description 2
- 238000001259 photo etching Methods 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000011248 coating agent Substances 0.000 description 1
- 238000000576 coating method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
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/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
-
- 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/15—Correlation function computation including computation of convolution operations
-
- 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
-
- 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/544—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 for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- 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
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- 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/048—Activation functions
-
- 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/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Image Analysis (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
一种卷积神经网络(CNN)的硬件实现的方法,方法包括:接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第一子集,并且使用至少一个卷积引擎执行数据的第一子集的卷积以生成第一部分结果;接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第二子集,并且使用至少一个卷积引擎执行数据的第二子集的卷积以生成第二部分结果;并且组合第一部分结果和第二部分结果,以生成针对CNN层的卷积数据的至少一部分。
Description
背景技术
卷积神经网络(CNN)是可以被用于机器学习应用的一种类型的人工神经网络。特别地,CNN可以被使用在信号处理应用(包括图像处理和计算机视觉应用)中。
在其中电力资源不是重要因素的应用中已经实现CNN。尽管如此,CNN已经应用在其中被用于实现CNN的硬件的资源是功率消耗、处理能力或硅面积有限的若干不同的技术领域中。
因此,需要实现被配置为以有效的方式(即,以在操作时要求较少的硅面积或较少的处理能力的方式)实现CNN的硬件。而且,对于特定应用的CNN的定义可以随时间变化。例如,附加的训练可以导致CNN变更的定义。因此,还需要用于实现CNN的硬件以适应CNN的改变的要求。
发明内容
提供该概述以引入以在详细描述中下文进一步描述的简化形式的概念的选择。该概述不旨在标识所主张的主题的关键特征或必要特征,其也不旨在被用于限制所主张的主题的范围。
提供了一种卷积神经网络(CNN)的硬件实现中的方法,方法包括:接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第一子集,并且使用至少一个卷积引擎执行数据的第一子集的卷积以生成第一部分结果;接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第二子集,并且使用至少一个卷积引擎执行数据的第二子集的卷积以生成第二部分结果;并且将第一部分结果和第二部分结果组合以生成针对CNN的层的卷积数据的至少一部分。
数据的第一子集可以包括输入数据的第一部分和权重数据;并且数据的第二子集可以包括输入数据的第二部分和权重数据。输入数据的第二部分可以包括输入数据的第一部分的子集,并且输入数据的第一部分的子集的大小可以基于卷积核的大小。数据的第一子集和数据的第二子集可以各自包括针对特定层的所有权重数据。
数据的第一子集可以包括权重数据的第一部分和输入数据;并且数据的第二子集可以包括权重数据的第二部分和输入数据。数据的第一子集和数据的第二子集可以各自包括针对特定层的所有输入重数据。权重数据的第一部分可以包括针对层的、不同于权重数据的第二部分的权重数据的不同部分。将第一部分结果和第二部分结果组合可以包括将第一部分结果和第二部分结果写到存储器。
数据的第一子集可以包括权重的第一部分和输入数据;并且数据的第二子集可以包括权重的第二部分和输入数据。将第一部分结果和第二部分结果组合以生成针对CNN的层的卷积数据的至少一部分可以包括:使用至少一个卷积引擎执行权重的第一部分与输入数据的卷积以生成第一部分结果;使用至少一个卷积引擎执行权重的第二部分与输入数据的卷积以生成第二部分结果;将第一部分结果放置在累加器缓冲器中;在累加器中将第一部分结果与第二部分结果组合。权重的第一部分和权重的第二部分可以是相同权重的非重叠部分。
数据的第一子集的输入数据和数据的第二子集的输入数据可以包括针对层的所有输入数据。
提供了一种卷积神经网络(CNN)的硬件实现,硬件实现包括:接口,被配置为接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第一子集,并且被配置为接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第二子集;至少一个卷积引擎被配置为执行数据的第一子集的卷积以生成第一部分结果,并且被配置为执行数据的第二子集的卷积以生成第二部分结果;并且其中硬件实现被配置为将第一部分结果和第二部分结果组合,以生成针对CNN的层的卷积数据的至少一部分。
提供了一种用于被配置为实现一个或多个用户定义的激活函数的CNN的可配置的激活模块,激活模块被配置为:接收指定待应用到输入数据的激活函数的一个或多个特性的配置数据;基于接收到的配置数据,将表示激活函数的数据存储在查找表的条目中;接收表示激活函数的输入的输入数据,并且基于接收到的输入的至少一部分,从查找表读取一个或多个条目;并且基于从查找表读取的一个或多个条目,计算表示激活函数的输出的输出值。
CNN或用于CNN的激活模块的硬件实现可以被实现在集成电路上的硬件中。可以提供一种在集成电路制造***中制造CNN或用于CNN的激活模块的硬件实现的方法。可以提供一种集成电路定义数据集,其在集成电路制造***中被处理时将***配置为制造CNN或用于CNN的激活模块的硬件实现。可以提供一种已经在其上存储集成电路的计算机可读描述的非瞬态计算机可读存储介质,其被处理时使得布局处理***生成使用在集成电路制造***中的电路布局描述,以制造CNN或用于CNN的激活模块的硬件实现。
可以提供一种集成电路制造***,包括:非瞬态计算机可读存储介质,已经在其上存储描述CNN或用于CNN的激活模块的硬件实现的计算机可读集成电路描述;布局处理***,被配置为处理集成电路描述,以便生成实现CNN或用于CNN的激活模块的硬件实现的集成电路的电路布局描述;和集成电路生成***,其被配置为根据电路布局描述制造CNN或用于CNN的激活的硬件实现。
可以提供用于执行根据任何前述权利要求所述的方法的计算机程序代码。可以提供非瞬态计算机可读存储介质,其已经在其上存储当在计算机***处执行时使得计算机***执行根据任何前述权利要求所述的方法的计算机可读指令。
如对于技术人员而言将是明显的,以上特征可以适当组合并且可以与本文所描述的示例的方面中的任一个的组合。
附图说明
现在将参考附图详细描述示例,其中:
图1示出了在卷积神经网络中使用的数据的结构的示例;
图2示出了卷积神经网络的示例硬件实现;
图3示出了图2中所图示的卷积引擎的示例;
图4a示出了用于操作激活模块的示例方法;
图4b示出了可以被实现在图2、图4d和图4f的任一个所图示的激活模块中的修正线性单元(ReLU)函数;
图4c示出了可以被实现在图2、图4d和图4f的任一个所图示的激活模块中的参数修正线性单元(PReLU)函数;
图4d示出了图2所图示的激活模块的示例硬件实现;
图4e示出了图4f的激活模块中所执行的内插的示例;
图4f示出了图2所图示的激活模块的另一示例硬件实现;
图4g示出了图2所图示的激活模块的另一示例硬件实现;
图5示出了图2的CNN的硬件实现中的处理数据的示例方法;
图6示出了图2的CNN的硬件实现中的处理数据的示例方法;
图7a示出了将针对层的输入数据示例划分为用于处理的两个以上的输入数据的子集;
图7b示出了处理图7a的数据的示例方法;
图8a示出了将针对层的权重数据示例划分为用于处理的两个以上的权重数据的子集;
图8b示出了处理图8a的数据的示例方法;
图9示出了在图2的硬件实现中用于处理数据的示例方法;
图10示出了在图2的硬件实现中用于处理数据的示例方法;
图11示出了在图2的硬件实现中用于处理数据的示例方法;
图12示出了在图2的硬件实现中用于处理数据的示例方法;
图13示出了在其中实现CNN或用于CNN的激活模块的硬件实现的计算机***;以及
图14示出了用于生成实施CNN或用于CNN的硬件模块的集成电路的集成电路制造***。
附图图示了各种示例。技术人员将理解到,附图中的所图示的元件边界(例如,框、框组或其他形状)表示边界的一个示例。可以是在一些示例中,一个元件可以被设计为多个元件或多个元件可以被设计为一个元件。在适当的情况下,共同附图标记贯穿附图被用于指示类似特征。
具体实施方式
通过示例呈现以下描述以使得本领域的技术人员能够制造和使用本发明。本发明不限于在此所描述的实施例,并且所公开的实施例的各种修改对于本领域的技术人员而言将是明显的。
现在将仅通过示例的方式描述实施例。
卷积神经网络(CNN)是一种形式的人工神经网络,其包括具有与其相关联的权重的多个相互连接层,以使得CNN能够执行信号处理任务(包括计算机视觉任务)。CNN的功能完全由权重表示。在一些示例中,CNN可以被配置为接收输入图像。
在图1中图示了在CNN中利用的数据的格式的示例概览。如在图1中可以看到,在CNN中使用的数据的格式可以由多个平面形成。输入数据可以被配置为数据的P个平面,其中每个平面具有维度x×y。CNN包括多个层,其中的每个层具有与其相关联的多个滤波器w0...wn。滤波器w0...wn各自具有维度m×n×P,并且根据跨越方向s和t上若干步骤的卷积操作被应用到输入数据,如在图1所图示的。
如上文所提到的,每个层可以具有与其相关联的多个滤波器w0...wn.。如本文使用的,权重还可以被称为滤波器、滤波器权重或系数。滤波器权重的数目和值可以在层之间变化,使得对于第一层,权重的数目可以被定义为并且对于第二层,权重的数目可以被定义为其中第一层中的权重的数目是n1并且第二层中的权重的数目是n2。
对于CNN的多个层,通过使用与该层相关联的权重卷积针对该层的输入数据,来处理针对该层的输入数据。对于第一层而言,“输入数据”可以被认为是到CNN的初始输入,其可以在一些示例中是图像——例如其中CNN将被用于视觉应用。第一层处理输入数据并且生成被传递到第二层的第一中间数据集。第一中间数据集还可以采取若干数据平面的形式。第一中间数据集可以被认为是形成针对第二层的输入数据,其处理第一中间数据以产生以第二中间数据的形式的输出数据。在CNN包含第三层的情况下,第三层接收第二中间数据作为输入数据,并且处理该数据以产生第三中间数据作为输出数据。因此,对输入数据的引用可以被解译为包括对于针对任何层的输入数据的引用。例如,术语“输入数据”可以指代中间数据,其是特定层的输出和后续层的输入。这被重复直到最后层产生可以被认为是CNN的输出的输出数据。
图2图示了根据本公开的被配置为实现CNN的硬件实现200。硬件实现包括数字逻辑电路,其被配置为接收定义待实现的CNN的数据,并且被配置为根据该数据定义操作以处理输入数据以便实现CNN。因此,硬件实现可以被认为是用于实现一个或多个CNN的可配置的硬件。这样,本文对CNN的硬件实现的引用是对被配置为通过根据接收到的配置数据操作输入数据来实现CNN的硬件的引用。硬件实现自身不必被配置为实现特定CNN,并且不必预加载有针对CNN的特定配置数据。例如,CNN不需要包括预加载的(或硬编码的)权重数据和层定义。因此,硬件实现被配置为基于其接收的配置数据实现任何CNN。如此,配置数据(在本文中还被称为命令数据)定义待实现的特定CNN,包括待包括的层数、权重数据的大小和值、以及输入数据的期望格式。
定义CNN并且CNN将如何被处理的数据可以包括配置(或命令)数据、权重数据和输入数据。因此,硬件实现被配置为使用权重数据处理输入数据以便执行由CNN所定义的操作。硬件实现200包括存储器接口210、输入缓冲器控制器215、命令解码器220、系数缓冲器控制器225、系数缓冲器230、n个卷积引擎240、n个累加器245、激活模块255、标准化模块265、共享缓冲器270和池模块275。
存储器接口210被配置为提供硬件实现200与外部存储器(未示出)之间的接口。外部存储器可以被认为是与硬件实现200分离的模块或可以被认为是与硬件200集成。命令或配置数据可以例如包括关于权重数据的大小和/或格式、输入数据大小和格式、以及在外部存储器中的它们的位置的信息。
存储器接口210被配置为从外部存储器接收在CNN内的计算中待使用的权重和数据、以及控制硬件实现200的操作的命令信息。所接收到的权重(在此还被称为系数)被传递到系数缓冲器控制器225,并且接收到的数据被传递到输入缓冲器控制器215。接收到的命令被传递到命令解码器220,其进而被配置为解码命令,并且随后地将控制信息发出到硬件实现(包括系数控制缓冲器控制器225和输入缓冲器控制器215)的元件,以控制权重和输入数据被存储在缓冲器中的方式。
在外部存储器的读取期间经由存储器接口210从外部存储器接收到的权重和输入数据可以形成针对单个层的仅一部分的权重和输入数据、在处理单个层中待使用的所有权重和输入数据,或者可以包括用于处理多个层的权重和输入数据。例如,从外部存储器接收到的权重可以形成单个层的权重,并且接收到的输入数据可以形成针对单个层的输入数据的仅一部分(或反之亦然)。跨越一个或多个层的数据和权重的任何组合可以在来自存储器的单个读取中从外部存储器接收(例如,使用突发读取)。
实际上,在来自外部存储器的单个读取中接收到的权重和数据的数目将取决于系数缓冲器230和输入缓冲器235的大小。权重从系数缓冲器控制器225被传递到系数缓冲器230,并且接收到的数据从输入缓冲器控制器215被传递到多个输入缓冲器235a-235n。输入缓冲器的数目将取决于硬件200的特定实现但是可以采取任何值。跨越所有输入缓冲器235a-235n共享输入数据。输入缓冲器各自形成有效库,使得输入缓冲器的数目可以取决于应用增加或减小。
输入缓冲器235a-235n被连接到多个多路复用器的每个多路复用器,因为每个卷积引擎240a-240n要求对输入数据的所有有效“库”的访问。多路复用器各自被配置为从输入缓冲器中的一个选择输出,并且将从所选择的输入缓冲器所输出的值传递到相应的卷积引擎240a-240n。另外,来自系数缓冲器230的权重作为第二输入被提供到每个卷积引擎240a-240n中。卷积引擎被配置为使用从系数缓冲器230接收到的权重,对接收到的输入数据执行卷积操作。每个卷积引擎240a-240n的结果输出作为输入被提供到多个累加器245a-245n的相应的累加器。在图3中图示了卷积引擎240n的示例实现,其包括乘法逻辑310的多个元件和加法逻辑320的多个元件。
每个累加器245a-245n被连接到累加缓冲器250。累加缓冲器250被配置为存储从每个累加器245a-245n接收到的累加的结果。累加缓冲器250被连接到存储器接口210。如此,累加缓冲器250被配置为经由存储器接口210将数据发送到外部存储器和从外部存储器接收数据。特别地,累加缓冲器250被配置为能够经由存储器接口210从外部存储器存储以及恢复其值,如下面将更详细地描述的。累加缓冲器250被连接到累加器245a-245n的输入,并且被配置为将值反馈到累加器245a-245n以使累加计算发生。
激活模块
累加缓冲器250被配置为将累加的值传递到激活模块255。激活模块255被配置为执行若干不同的激活函数中的至少一个。提供了被配置为执行如图4a中所图示的方法的激活模块。特别地,激活模块是用于CNN中的可配置的激活模块。激活模块可以被配置为实现一个或多个用户定义的激活函数。激活模块可以被配置为在步骤401处接收指定待应用到输入数据的激活函数的一个或多个特性的配置数据。配置数据可以被用于指定例如激活函数的一个或多个数据点、激活函数的一个或多个特点、可以被用于导出或标识待实现在针对激活函数的一个或多个传递的激活模块255中的特定激活函数的一个或多个值。
激活模块255还可以被配置为在步骤402处基于接收到的配置数据在查找表的条目中存储表示激活函数的数据。在一些示例中,表示激活函数的数据可以是接收到的配置数据。在一些布置中,在配置数据包括激活函数的数据点的情况下,数据点可以自身被存储在查找表中。在一些布置中,配置数据可以被用于标识预存储的激活函数,使得表示该所标识的激活函数的数据(诸如表示该预存储的激活函数的数据点的数据)可以被加载到查找表中——例如在配置数据中使用标识符。在一些布置中,被存储在查找表中的数据可以是激活函数的至少一部分的梯度和偏移值。因此,查找表中的值可以表示激活函数的估计或近似。
激活模块255可以被配置为在步骤403处接收表示激活函数的输入的输入数据,并且可以被配置为基于接收到的输入的至少一部分,从查找表读取一个或多个条目。在一些布置中,激活模块255被配置为将接收到的输入的至少一部分用作为到查找表中的地址。例如,预定义数目的值可以被存储在查找表中,并且接收到的输入的值可以是被用作到查找表中的地址的值。例如,待使用的地址可以从输入数据的预定义数目的MSB确定。
激活模块可以被配置为在步骤404处基于从查找表读取的一个或多个条目,计算表示激活函数的输出的输出值。激活模块可以进进一步基于输入数据的至少一部分(例如,输入数据的预定义数目的LSB)计算输出值。用于在查找表中查找的一个或多个条目的输入数据的部分可以与用于计算输出值的输入数据的部分不同。
激活模块可以通过在从查找表读取的两个以上条目之间内插来计算输出值。例如,在至少两个条目从查找表被读取的情况下,可以使用两个条目和输入数据的至少一部分执行线性内插。例如,在至少三个条目从查找表被读取的情况下,可以使用三个条目和输入数据的至少一部分执行二次内插。
在一些布置中,可以在配置数据中定义数据点、函数的形状或待实现的函数的标识符。例如,可以标识待实现的若干预定义的函数中的一个。
在一些实现中,激活模块255可以被配置为通过实现ReLU函数(其可以由接收定义激活函数的点的控制数据实现)操作为修正线性单元(ReLU)。在ReLU函数中,通过标识最大值计算输出元素yi,j,k,如下面所阐述并且如在图4b中所图示的:
yi,j,k=f(xi,j,k)=max{0,xi,j,k}
因此,对于小于0的x值,y=0。
在一些实现中,激活模块255可以被配置为通过实现PReLU函数操作为参数修正线性单元(PReLU)。PReLU函数对ReLU函数执行类似的操作。特别地,在是常量的情况下,PReLU被配置为生成输出元素yi,j,k,如下面所阐述并且如在图4c中所图示的:
yi,j,k=f(xi,j,k;w1,w2,b1,b2)=max{(w1*xi,j,k+b1),(w2*xi,j,k+b2)}
在一些实现中,激活模块255可以被配置为取决于特定应用,执行一个或多个其他函数。在一些实现中,激活模块255可以被配置为利用将被执行的特定函数进行编程。例如,可以对激活模块255进行配置,使得对于CNN的特定层,其接收定义待执行的函数的数据。在激活模块中待实现的函数(即,激活函数)可以被认为是传递函数。
在表示激活函数的一种方法中,查找表中的条目可以由至少一个梯度和至少一个偏移形成。例如,接收到的数据可以表示梯度和偏移对。这样,激活模块255因而可以利用被用于中间值的线性内插,将激活函数实现为值和斜率查找表。输入值(例如来自累加缓冲器)可以被用作到查找表中的地址。在一个示例中,其中查找表是64条目表,输入的6个MSB可以被用作到查找表中的地址。查找表可以包含针对由MSB定义的点处的样本C和梯度m的值。在这种情况下,输入的剩余位可以被解译为0与1之间的值,使得激活模块的输出由以下定义:
y=m*(LSBs)+C
在图4d中图示了该布置的激活模块255的示例硬件实现。如在图4d中所图示的,激活模块255可以包括查找表410,其被配置为存储表示将被实现在激活模块255内的激活函数的值。激活模块255还包括乘法逻辑和加法逻辑以便执行上文所定义的计算。特别地,输入值的MSB被用作到查找表中的地址,并且对应的m和C值从查找表被读取并且输出。然后,输入数据的剩余的LSBs与查找表输出m相乘,其结果然后被添加到查找表C。
在另一布置中,取代存储在查找表中的m和C值,其然后被检索,确定被定位在输入值的任一侧的两个不同的粗略输出值。基于输出值的至少一部分,通过在两个粗略输出值之间内插而确定从激活模块待输出的输出值,如下面参考图4e和图4f所描述的。特别地,该布置可以包含将一组分立的输出值存储在查找表中。使用上文所描述的64条目表示例,每个条目可以表示激活函数的64个不同的输出值中的一个。然而,当输入值被接收时,输入值的六个MSB可以被用作在表中查找对应的输出值的地址。另外,还可以检索查找表中的下一地址位置处的输出值。如在图4f中所图示的,输入值的MSB可以与输入值x0一致,并且可以确定下一对应的输入值是x1。因此,所检索的两个值可以是针对所标识的输入值的对应的输出值(即,y0和y1)。从所检索的输出值y0和y1,LSB被用于内插输入值x,以确定针对对应的输出值y的估计。
图4f图示了被配置为执行上文参考图4e所描述的内插方法的示例硬件布置。在该布置中,激活模块255包括查找表410,其被配置为存储可以基于使用对应的输入值的查找检索的输出值。查找表410被配置为接收待存储在查找表410中的数据。这样,由激活模块255待执行的特定激活函数是可配置的。激活模块255还包括内插模块420,其被配置为执行内插操作以计算y。可以使用以下等式实现该内插:
如在图4f中所图示的,激活模块255被配置为接收输入值x。预定义数目的n个MSB(其与查找表中的2n个条目相对应)被用作到查找表中的地址,以检索查找表中的对应的地址处的输出值y0以及查找表中的下一输出值y1。这两个值y0和y1从查找表410被输出并且被输入在内插模块420中,其基于输入值x的剩余的LSB执行内插以确定y。内插模块420然后输出符合输入值x的输出值y。
在图4g中图示了激活模块255的另一硬件实现。在图4g的布置中,查找表被配置为基于输入值x的MSB,检索三个输出值(即,y0、y1和y2)。这使得例如二次内插能够由内插模块420执行。这样,更复杂的曲线可以通过从查找表410检索更多系数而被内插。将理解到,超过三个值可以被检索并且被用于对针对输入值的输出值进行内插。
如上文所提到的,激活模块255可以被配置为接收定义待执行的激活函数的一组值。接收到的值可以形成从查找表410待检索的值,使得其可以被加载到查找表410中。在一些实现中,激活模块255可以被配置为从命令解码器220接收定义待执行的函数的值。命令解码器220可以被布置为经由存储器接口210从外部存储器接收函数的值。在一些实现中,命令解码器220可以被配置为接收定义跨越CNN实现的多个层而将被使用的函数的值。在一些实现中,命令解码器220可以被配置为接收定义将仅被用于单个层的函数的值。因此,对于待处理的每个层而言,命令解码器220可以从外部存储器接收待***查找表410中的值。然后,命令解码器220可以继续针对每个层,将在该层的处理期间定义由激活模块255待执行的函数的不同的一组值加载到查找表410中。在一些布置中,激活模块255可以被配置为从命令解码器接收待存储在针对每个硬件通过的激活层中的不同的一组值。换句话说,可以使用不同的激活函数处理每个不同的输入值。命令解码器可以接收若干不同的命令,并且命令解码器可以被配置为控制硬件实现200,使得正由激活模块255接收的数据符合在数据被接收时被加载到激活模块255中的特定激活函数。
将理解到,存在基于查找中的值(其可以被认为是激活函数的系数)的存储而实现激活函数的其他方法。
标准化模块
由激活模块255所计算的结果值被传递,以经由共享缓冲器270由标准化模块265处理。标准化模块265被配置为执行如下面所阐述的若干不同的标准化函数中的一个。
根据下式,可以在输入数据的相同平面内执行局部响应标准化层(LocalResponse Normalisation Layer)函数:
在上式中,是标准化之前在位置x,y处的映射f中的单元的活动,S是输入数据(例如,图像数据)的大小,k是常量,并且N是用于标准化的区域的大小。该函数的输出维度等于输入维度。在一些示例中,该模块可以是以与上文关于激活模块255所描述的方式类似的方式可配置的。特别地,标准化模块可以被配置为从已经从外部存储器接收这样的参数的命令解码器220接收参数α和β。这样,局部响应标准化层函数的实现可以针对每个层而被修改,或者可以在多层的过程中被修改。
还可以跨越平面执行局部响应标准化层函数。函数与具有一些较小差异的上文所描述的标准化函数类似。特别地,单元仅由相同位置、但是在不同的平面中的其他单元的活动划分。参数N指示用于标准化的相邻滤波器的数目。例如,如果层具有32个映射,那么当N被设定为5时,第7个映射中的单元可以由第5个到第9个映射中的单元标准化。下面阐述了被用于跨越平面的局部响应标准化层函数的函数:
在上式中,F是映射的数目。与平面之间的局部响应标准化层一样,可以经由命令解码器220从外部存储器接收参数α和β。
可以使用下式在标准化模块265的硬件中实现上文所描述的标准化函数:
在上式中,EXP是指数函数ex的硬件实现,Ln是自然对数函数ln(x)的硬件实现,并且C、k和γ是被接收的常量,其中C=-β并且上文所描述的函数的一个可能的实现是证明查找表,以便以关于激活模块255上文所描述的方式类似的方式执行EXP和Ln函数。如先前所描述的,常量C、k和γ可以经由命令解码器220从外部存储器接收,并且可以每层被定义或针对层的子集被定义。标准化窗口大小可以是每层可编程的。
标准化模块265还可以被配置为实现被定义为局部响应标准化层函数,其被定义为:
在上式中,是由求和范围所定义的2D领域中的所有的平均值。局部对比度标准化可以例如使用滤波器权重的修改或使用经调节的参数ReLU操作实现。
标准化模块265可以被配置为实现上文所描述的标准化函数中的一个或多个。特别地,标准化模块265可以是可配置的,使得其能够执行上面三个函数中的任一个和任何其他适合的函数。这样,标准化模块265可以接收信令以指示标准化模块将执行哪个函数。这可以通过使用若干预定义的函数的其中一个来执行,使得由标准化函数接收到的控制信令指示标准化模块265应当执行预定义函数中的哪一个。
在其他布置中,标准化模块265以与激活模块255类似的方式配置,使得标准化模块265能够接收定义待***查找表中的值的值。这样,可以经由外部控制对标准化模块265进行配置。可以经由命令解码器220从外部存储器接收控制信令。
对于经由命令解码器220接收到激活和标准化模块的控制信令是不必要的,并且将理解到,可以经由另一外部接口或经由对存储器接口210的直接连接,控制激活255和标准化265。其他布置也是可能的。
池化
在标准化模块265中所执行的标准化函数的结果经由共享缓冲器270被传递到池模块275。在池模块275中,执行池化操作。在一些布置中,池化操作在每层定义的滑动窗口上发生。在池化层中所执行的操作与在卷积引擎240a-n中所执行的操作类似。池化函数的示例包括最大值和平均值计算。
被存储在共享缓冲器270中的结果被传递到存储器接口210,其可以将结果存储在外部存储器中,或者在不必首先被传递出到外部存储器的情况下将结果传递回到输入缓冲器中以用于进一步处理。
共享缓冲器270被配置用于两个目的,即缓冲来自激活模块255的值,直到正确样本可用于执行标准化和/或缓冲来自标准化的值,直到正确样本可用于执行池化。这样,共享缓冲器被用于存储的效率,因为在许多实现中,标准化和池化未被组合在相同过程中。
标准化可以是或者其中对来自相同平面的NxN区域标准化数据的“相同映射”,或者其中在P维度中的窗口中标准化数据的“交叉平面”。在后者情况中,滤波器总是从每个平面采取单个样本。当决定如何将较大的尺寸层细分用于处理时,必须做出标准化模式的考虑,使得共享缓冲器保持正确数据。如果窗口NxN的大小对于待保持在共享缓冲器中的部件变得太大,那么标准化变为2通(2-pass)操作。针对标准化的统计数字被集中在写出上,以及标准化被应用在针对以下层的数据的读取上。
可配置性
虽然图2的硬件实现图示了模块被布置的特定顺序以及因此数据的处理如何通过硬件实现流动,但是将理解到,所要求的特定计算和数据被跨越层处理的顺序可以变化。
在一些层中,由激活255、标准化265和池275模块所执行的函数可以被用于执行激活、标准化和池化操作。在其他层中,仅这些函数中的一个可以被执行并且不必以硬件实现20中所阐述的顺序。为了实现处理这些函数的可配置的顺序,激活255、标准化265和池275模块中的每一个可以被配置为接收将模块配置到旁路模式中的控制信令,在旁路模式中,函数未被执行并且输入值在不改变的情况下简单地穿过模块。
在一些层中,特定层的数据可能需要第一由卷积引擎240a-n并且然后第二根据激活、标准化和池模块255、265、275处理。在这些层中,来自卷积引擎240a-n的输出经由累加器245a-n被传递到累加缓冲器250并然后被传递到激活、标准化和池模块255、265、275用于进一步处理。在其他层中,数据可能需要被不同地处理。例如,数据可能需要第一根据激活、标准化和池模块255、265、275并且第二根据卷积引擎240a-n处理。
在这些布置中,数据可以经由累加缓冲器250直接地被传递到激活模块,其中累加缓冲器250已经直接地从已经从外部存储器接收数据的存储器接口210接收输入数据。这样,由卷积引擎240a-n和累加器245a-n所执行的处理被有效地跳过,并且数据可以直接地被传递到激活255、标准化265和池275模块。然后,一旦使用激活、标准化和池模块255、265、275的处理被完成,则结果值可以经由存储器接口210被传递到输入缓冲器控制器215中。在一些布置中,结果值可以首先经由存储器接口210被传递到外部存储器,并且然后在使用之前从外部存储器检索。
在其他布置中,存储器接口210可以在不将值传递到外部存储器的情况下,将结果值传递到输入缓冲器控制器215。通过避免将起因于使用激活、标准化和池模块255、265、275的计算的值传递到外部存储器的需要,存储器带宽被降低并且因此处理数据的延时也被降低。
通过提供上文所描述的特征,对于硬件实现200通过提供待执行的存储器到存储器计算的能力来处理各种不同的配置的CNN是可能的。这些存储器到存储器计算不需要与特定层直接有关。换句话说,硬件实现200适于将被实现的特定CNN。有利地,由于激活、标准化和池模块255、265、275被线性地放置,因而在不必从外部存储器检索数据的情况下背对背执行这些函数是可能的。
在一些实现中,激活、标准化和池模块255、265、275被连接的顺序可以变化。例如,激活、标准化和池模块255、265、275可以以倒序连接,使得池模块被连接到累加缓冲器250,并且激活模块被连接到存储器接口210。
部分处理
在CNN的典型的硬件实现中,期望减少对所需外部存储器的访问的次数,同时维持降低的硅占位面积(silicon footprint)并且还降低在处理CNN中所消耗的功率量。然而,在典型的CNN应用中,待处理的数据量在层之间变化。因此,CNN实现通常要求非常大的硬件实现占位面积,以处理将被处理的CNN的每个层,因为硬件实现可能要求具有缓冲器和处理能力以处理大多数处理器密集的层,即使先前或后续层要求较少的处理或数据存储。换句话说,缓冲器和计算逻辑应当足够大以能够处理任何特定层(包括具有最大权重大小、最大数目的权重和最大数据量的层)。然而,在CNN以这种方式被实现的情况下,较小层的处理是低效的,因为缓冲器和计算逻辑在其他较小层中可能未被完全地利用。
本文所描述的CNN的硬件实现提供灵活的实现,其允许CNN输入(例如,针对每个层的数据和权重)被分离或被分段为可以分开地处理以产生部分结果的若干不同的部分。这些部分结果可以然后被组合以产生来自特定层的输出。通过以下面所描述的方式分段或分割数据,CNN能够以在不对处理每层不同的大小的数据、不同的数目的权重和权重的大小的能力折中的情况下满足硅预算的方式被实现。
而且,最小化在操作CNN时执行的到存储器的获取以及写数目是优选的。在本硬件实现中所执行的到存储器的获取和写入的数目可以取决于数据缓冲器和系数缓冲器的大小。特别地,存在其中针对CNN的特定层的输入不能在来自存储器的单个读取中处理的三个场景。这可能由于到层的输入针对被实现在硬件中的缓冲器被错误地确定大小而发生,并且因此需要提供输入数据的特殊处理。
图5图示了根据本公开的处理针对层的数据的方法500。方法在步骤510处开始,其中接收针对层的数据的第一子集。可以通过控制数据定义数据的第一子集。在步骤520处,针对层的数据的第一子集被处理以生成第一部分结果。在步骤530处,接收针对相同层的数据的第二子集。在步骤540处,针对层的数据的第二子集被处理以生成第二部分结果。在步骤550处,对第一部分结果和第二部分结果进行组合。
在示例中,可以在图2所图示的硬件实现中实现图5的方法500。数据的第一子集可以是针对层的输入数据的子集、层的权重的子集或针对层的至少一个权重的部分。在数据的第一子集是针对层的输入数据的子集的情况下,第一子集经由输入缓冲器控制器215和存储器接口210在步骤510处被接收在输入缓冲器235a-235n中。在第一子集是权重数据的子集的情况下,第一子集经由系数缓冲器控制器225和存储器接口201被接收在系数缓冲器230处。
在步骤520处,数据的第一子集(即,输入数据的子集、层的权重的子集或针对层的至少一个权重的部分)被处理以生成第一部分结果。处理包含将数据的第一子集和对应的权重或输入数据传递到一个或多个卷积引擎250a至250n(取决于数据的第一子集)。卷积引擎被配置为在权重数据与输入数据之间执行卷积操作。由于硬件实现具有预定义数目的卷积引擎,因而对数据的第一子集的大小进行预配置,使得卷积引擎能够在单个通过(pass)中或在预定义数目的通过中针对数据的第一子集执行所有卷积操作是可能的。例如,在数据的第一子集是输入数据的子集的情况下,可以将输入数据分割为批次,每个批次可以在卷积引擎的单个通过中处理。对数据的第一子集的其他限制是系数缓冲器230的大小和输入缓冲器235a至235n的大小,并且数据的第一子集的标识还可以取决于输入缓冲器235a至235n和系数缓冲器230中的一个或多个的大小。
在步骤520处已经处理数据的第一子集之后,生成部分结果。生成的部分结果将取决于被选作为数据的第一子集的数据的类型。例如,数据的第一子集可以是输入数据的子集。在这种情况下,第一部分结果可以是利用权重数据处理输入数据的第一子集的结果。类似地,第一部分结果可以是利用权重数据的子集(或至少一个权重的部分)处理所有输入数据的结果。这将稍后更详细地解释。第一部分结果可以在被传递到累加缓冲器250之前被保持在累加器245a至245n中。
在步骤530处,针对相同层的数据的第二子集以与针对数据的第一子集相同的方式被接收。例如,在数据的第一子集涉及权重数据的情况下,数据的第一子集被存储在系数缓冲器中。在数据的第二子集涉及输入数据的情况下,数据的第二子集被存储在输入缓冲器235a至235n中。
在步骤540处,针对层的数据的第二子集被处理以生成第二部分结果。与数据的第一子集一样,在卷积引擎240a至240n中处理数据的第二子集。因此,将理解到,数据的第二子集使用相同卷积引擎在数据的第一子集之后被处理。这样,在卷积引擎的分离的通过中处理数据的第一子集和数据的第二子集。在步骤550处,第一部分结果和第二部分结果在累加器中被组合为被传递到累加缓冲器250以形成组合的结果,其形成针对CNN的特定层的输出的至少一部分。这样,将针对层的数据处理分割为这样的工作的较小的批次,即这些工作的较小的批次可以由太小而不能够处理单个通过中的层的所有处理的硬件实现来处理。
滤波器权重的数目
如上文所提到的,数据的第一子集可以由权重的子集形成。
可能是这种情况,例如,由于在硬件实现200中系数缓冲器230具有预定义的大小。系数缓冲器230被布置为存储经由系数缓冲器控制器225接收到的滤波器权重。例如,系数缓冲器230可以被要求将16x8权重每时钟提供到卷积引擎240a-240n。在一些布置中,系数缓冲器230可以调整大小使得其能够存储针对特定层的所有m*n*p*f个权重,其中m和n定义卷积核的大小并且f定义针对特定层的权重的数目。然而,在其他布置中,系数缓冲器可能不足够大以存储针对特定层的所有m*n*p*f个权重值。在这些情况中,硬件实现200可能被要求以不同的方式处理权重,如下面所描述的。
在示例中,权重f的数目可能太大使得并非所有滤波器权重可以在给定的时间点被存储在系数缓冲器230中。在该情况中,硬件实现200被配置为将针对特定层的权重f(每个具有大小m*n*p)的总数分割为权重的两个或两个以上子集。系数缓冲器然后能够存储两个以上子集的第一子集并且将第一子集传递到卷积引擎240a至240n。
例如,滤波器权重可以被分割为权重的第一子集和权重的第二子集,使得针对特定层的滤波器权重在或者第一子集或者第二子集中(在其他示例中,可以存在任何数目的子集)。权重的第一子集可以包括第一数目f1的滤波器权重(即),可以被存储在系数缓冲器中,如下面将描述的。一旦第一数目f1的滤波器权重已经被处理以生成第一部分结果,则结果值可以被存储在累加器中直到被传递到累加缓冲器250,或者可以经由存储器接口210被传递到外部存储器。已经存储了来自处理第一数目f1的滤波器权重的结果值,硬件实现200可以被配置为将包括第二数目f2的权重(即,)的权重的第二子集加载到系数缓冲器中并且处理权重的第二子集,如上文所描述的。f2可以等于f1或可以在值方面不同。权重的第二子集与输入数据的卷积操作的结果形成第二部分结果。然后,针对权重的第二子集的第二部分结果可以与根据权重的第一子集所计算的值组合以便得到针对特定层的合成中间数据的完整集合。
通过经由分离地处理子集将滤波器分割为两个或两个以上子集,处理在其中滤波器权重的数目太大以致于不适于系数缓冲器的层是可能的。因此,提供能够处理具有层的CNN的灵活实现是可能的,层具有与其相关联的大量的滤波器权重同时维持相对小的硅面积。
为了分别处理两个子集,存储器接口210被配置为接收针对特定层的第一组权重和输入数据(或可能地针对特定层的输入数据的子集)。如上文所阐述的,权重的第一子集被存储在系数缓冲器230中,并且针对该层的输入数据被存储在输入缓冲器235a-n中。权重的第一子集被用于处理输入数据并且通过使用权重的第一子集处理输入数据所生成的值经由存储器接口210被存储回到外部存储器中。随后地,针对该层的输入数据从存储器被重新读取(例如,相同数据再次被读取)并且被存储在输入缓冲器235a-n中。另外,针对层的权重的第二子集被检索并且被存储在系数缓冲器230中。然后以与关于权重的第一子集上文所描述的方式相同的方式使用权重的第二子集再次处理针对该层的输入数据。通过针对该层使用权重的第二子集处理输入数据所生成的值然后被存储在外部存储器中。
图6图示了根据两个以上子集中的上述权重的处理的示例方法。在步骤610处,针对层的权重的第一子集被接收并且在步骤620处通过在卷积引擎中将权重的第一子集与输入数据的至少一部分卷积被处理。该卷积操作的结果是被保持在累加缓冲器中的第一部分结果,如先前所提到的。然后,在步骤630处,针对相同层的权重的第二子集被接收并且在步骤640处使用相同卷积引擎被处理,这导致被存储在累加缓冲器中的第二部分结果的生成。第一部分结果和第二部分结果被组合以形成针对CNN层的结果的至少组合部分。
因此,在两个分开的阶段中完成整个层的处理。该过程可以被认为是通过相同输入数据集的两个以上通过,每个通过使用一起形成针对层的权重集的权重的不同的子集。虽然可以要求针对特定层的输入数据的两个分开的读取,但是这是有用的权衡,因为需要降低的硅面积以实现在本文所描述的硬件实现。
将理解到,在不同的通过中生成并且分开地处理的权重的子集的数目将取决于系数缓冲器的大小和权重的数目(和大小)。其可以是权重的两个以上子集需要被定义并分别被处理。
数据的大小
在另一情况下,可能需要将输入数据分为一个或多个子集以作为确定输入数据的大小太大以致于不能在单个通过中处理的结果。该情况可能发生,例如,在特定层中的待处理的输入数据的大小太大以致于不能被存储在输入缓冲器245a-n中的情况下。因此,需要通过硬件实现针对特定层分割输入数据以处理两个以上通过中的数据。
图7a图示了输入数据760的示例结构。输入数据的大小被定义为二维平面的序列,以及每个平面由两个维度x×y定义以及针对层的输入数据具有p个平面。为了形成分开地处理的数据的两个子集,数据区域x×y×p可以被分割为两个以上分开的子区域,每个被定义为x1×y×p和x2×y×p,如在图7a中所图示的,其中两个定义的子区域由线763分开。这样,子集的每个子集形成可以然后分开地被处理的输入的一部分。
特别地,第一数据子区域以与先前所描述的方式类似的方式定义和处理。参考图7b图示的该方法。输入数据的第一子集(即,第一数据子区域)和权重数据在步骤710处被接收并且被传递到卷积引擎240a至240n。输入数据的第一子集在步骤720处使用卷积引擎被处理以生成针对特定层的输出值的第一部分结果。已经处理输入数据的第一子集(即,第一数据子区域)并且将结果值存储回到外部存储器,输入数据的子集(即,第二数据子区域)在步骤730处被接收并且被加载到输入缓冲器中以用于以与在步骤740处用于处理方式相类似的方式处理。对于数据的第二和后续子集(子区域),还需要将第一数据子区域的一部分重新加载以允许卷积核处理第一子区域与第二子区域之间的界限附近的数据的区域。在图7a中图示了重新加载的数据的示例,其中线713与线715之间所定义的第一子区域的部分被重新加载(例如,从外部存储器)。将被重新加载的第一子区域的比例将取决于卷积核的大小(m×n)以及当其扫描通过输入数据时的其相对位置。
将理解到,可以定义任何数目的子区域,并且特定数目的子区域将取决于特定实现中的数据和输入缓冲器的大小。
滤波器权重的大小
CNN的硬件实现所接收到的输入将被不同地处理的另一情况是其中特定滤波器的大小太大以致于不能适配到系数缓冲器中的布置。为了将单个滤波器分为两个部分(在此被称为子滤波器),需要将中间计算的值存储在累加器缓冲器中并且将值恢复到累加器缓冲器中,如下面将更详细的描述。
在图8a中图示了待分为两个子滤波器的滤波器权重。滤波器权重860具有维度m×n×p。如从图8a中可以看到,滤波器权重800沿着维度p由平面863分割为两个分开的子滤波器以生成第一子滤波器861和第二子滤波器862。第一子滤波器具有维度m×n×p1,并且第二子滤波器具有维度m×n×p2。
在图8b中图示了处理第一子滤波器和第二子滤波器的方法。为了处理滤波器860将被使用的特定层,第一子滤波器861在步骤810处被接收并且针对层的输入数据被检索(例如,从外部存储器)。在步骤820处,第一子滤波器被传递到卷积引擎240a-n,并且在卷积引擎中执行卷积操作。卷积操作的结果形成然后被传递到累加缓冲器250的第一部分结果。
在示例中,起因于第一子滤波器861与针对该层的输入数据的卷积的第一部分结果经由存储器接口210从累加缓冲器250被传递到外部存储器以存储。
已经存储了第一子滤波器861与针对该层的输入数据的卷积的第一部分结果(例如,在存储器中),在图8b的步骤830处,输入数据连同第二子滤波器862一起被提供到卷积引擎(例如,再次从存储器)。第二子滤波器然后被用于在图8b的步骤840处处理输入数据,其中对应的卷积计算基于相同输入数据和第二子滤波器862被执行,并且结果形成被传递到累加缓冲器250的第二部分结果。累加缓冲器然后检索第一子滤波器861与针对该层的输入数据的卷积的中间结果(例如从存储器)。针对第一子滤波器的第一部分结果然后与针对第二子滤波器的第二部分结果组合。所组合的结果是将全部滤波器应用到输入数据的结果。在一些布置中,可以使用进一步的子滤波器,在该情况下,第一子滤波和第二子滤波器的结果的组合将形成进一步的部分结果,其将需要与其他部分结果组合。为了组合不同的子滤波器的结果以形成针对特定层的结果输出,第一子滤波器的结果经由累加器缓冲器250被加载到(一个或多个)累加器中作为第二子滤波器的结果的输出的累加器的起始值。
将理解到,上文所描述的方法可以被扩展到特定层中的每个滤波器。而且,将理解到,特定权重可以取决于滤波器权重的大小和系数缓冲器的大小被分割为任何数目的子滤波器。
因此通常,硬件实现可以被配置为将输入数据(针对该层)和权重数据(针对该层)中的至少一个分为或分割为第一和第二(或更多)部分并且分开地处理那些部分以生成部分值。然后,硬件实现可以被配置为或者通过将值一起存储在外部存储器中或者通过在累加缓冲器中将部分值数值地组合在一起将部分值组合在一起。将理解到,用于将部分值组合在一起的其他方法可以被实现。
在一些布置中,可以使用将接收到的数据分割为若干较小的数据集的上文所描述的方法中的一个或多个的组合,或者针对单个层或者跨越所有层。一些层可能不要求以上分割方法中的任一个,其中滤波器权重的大小和数目足够小以同时适配在系数缓冲器中并且其中输入数据能够适配到输入缓冲器中。
在硬件实现200的一些示例中,命令解码器200被配置为提供硬件200的控制以便实现CNN。作为该控制的一部分,命令解码器220可以接收定义CNN的操作的一系列命令。在一些布置中,定义CNN的操作的命令可以经由存储器接口210从外部存储器恢复并且可以精确地定义CNN的哪些层要求针对该层的数据被分割为分开的部分用于处理。接收到的命令还可以定义其被分割为分开的部分的方式。
另外,数据被存储在系数缓冲器和输入缓冲器中的格式可以被定义在接收到的命令中,使得硬件实现200能够从缓冲器读取数据。实现CNN中的硬件实现的性能将至少部分取决于可以一次被存储在缓冲器中的权重和输入数据的元素的数目,因为降低存储器读/写发生的次数的数目是期望的。在本申请的另一方面中,下面描述了在CNN的硬件实现中生成用于使用的配置数据和重定格式输入数据的过程。
以上布置讨论在卷积引擎中将待处理的数据可以被分离为较小的部分以进行处理的若干不同的方式。例如,输入数据可以被分割为单独地处理的子区域。权重数据可以被分割为被分别处理的分开的权重或者个体权重可以被分开用于处理。将理解到,可以在图2的硬件实现中实现该部分的任何组合。例如,在单个通过期间仅将输入数据的子区域和权重的子集提供到卷积引擎用于处理是可能的——其组合图6、图7a和图7b的布置的特征中的一些特征。将理解到,图6、图7a、图7b、图8a和图8b中所描述的处理可以以任何组合被组合。另外,参考图6、图7a和图7b所描述的处理可能需要执行多次以便使用硬件实现200完成CNN的特定层的处理。下面参考图9至图12阐述了卷积引擎的多个“通过”。
图9图示了CNN的硬件实现中的处理数据的方法900。特别地,图9的方法图示了使用例如图2的硬件实现处理CNN的所有层的方法。图9的方法900涉及在其中待处理的数据(或者权重或者输入数据或者其组合)被分为各自单独地处理的多个子集的图5的布置。
图9的方法在步骤905处开始,其中发起下一层的处理。首先,下一层是CNN中的第一层。还可以包含接收对层通用的任何命令数据(诸如在处理层时待使用的数据格式或权重以及可以被用于控制硬件实现的各种硬件块和其相互作用的控制信息)。例如,命令数据可以定义在每次通过之后累积缓冲器中的数据是否将被传递到存储器或者其是否其将被重新加载到输入缓冲器中。而且,命令数据还可以包括定义将在激活模块中被实现的激活函数的数据。命令数据还定义数据将被分到图2的卷积引擎的多个通过的方式。例如,命令数据可以定义针对特定层的数据的子集以及因此要求处理特定层的通过的数目。例如,命令数据可以定义完成特定子集的处理的通过的数目。命令数据还可以定义针对层共同地定义数据的子集的数目。
在步骤910处,接收数据的第一子集。如先前所描述的,数据的第一子集可以经由存储器接口被接收并且可以被存储在系数缓冲器或输入数据缓冲器中用于处理。针对层的数据的子集可以包括权重数据的至少一部分和/或输入数据的至少一部分,使得数据的超过一个子集被要求处理针对层的数据。在步骤920处,针对例如在图2的卷积引擎中,处理数据的第一子集。例如,在子集包括权重的子集和数据的子集的情况下,其可以是子集相互卷积。然后,在步骤930处确定子集的进一步的处理是否完成。在子集包括权重数据的情况下,权重数据应当针对所有输入数据被处理。这可以包含多个通过。在子集包括输入数据的情况下,子集应当在另一子集被接收之前针对所有输入数据被处理。总之,子集应当针对该层完全地被处理,无论针对输入数据还是权重数据,使得不需要重新加载数据的子集。
如果子集卷积未完成,则方法返回步骤920并且针对进一步的数据处理数据的第一子集。重复该过程(例如,使用图2的卷积引擎的每个通过)直到数据的第一子集已经针对所有所要求的数据(无论输入数据、权重数据还是其组合)被处理。
一旦完成,则方法继续到步骤940,其中确定针对层的所有子集是否已经处理。在第一通过中,在仅数据的第一子集已经处理的情况下,并非所有子集将已经处理。在后续的通过中,确定针对层的所有子集是否已经处理。如果并非针对层的所有子集已经处理,则方法返回到步骤910,其中后续(例如,第二)子集针对层的数据在步骤920处被处理(例如,使用图2的卷积引擎)。
一旦已经确定针对层的所有子集在步骤940处被处理,则可以推断该层的处理已经完成。在步骤950处,确定CNN的所有层是否已经处理。如果并非所有层已经处理,则方法返回步骤905,其中下一层的处理通过加载针对该层的命令或控制数据发起。然后,针对每个层重复上文所描述的处理,并且一旦完成,则CNN输出数据960是输出。
图10涉及图6的布置并且描述使用硬件实现的CNN的各层的处理。
图10的方法图示了其中子集包括针对层的权重的子集的示例。方法1000在步骤1005处开始,其中发起下一层的处理。首先,下一层是CNN中的第一层。这可以包含对层通用的任何命令数据(诸如在处理层时待使用的数据格式或权重以及可以被用于控制硬件实现的各种硬件块和其相互作用的控制信息)。例如,命令数据可以定义在每次通过之后累积缓冲器中的数据是否将被传递到存储器或者其是否将被重新加载到输入缓冲器中。而且,命令数据还可以包括定义将被实现在激活模块中的激活函数的数据。
在步骤1010处,接收权重的第一子集。如先前所描述的,权重的第一子集可以经由存储器接口被接收并且可以被存储在系数缓冲器中用于处理。在步骤1020处,可以例如在图2的卷积引擎中针对输入数据的至少一部分处理权重的第一子集。然后,在步骤1030处确定针对该层的所有输入数据是否已经与权重的第一子集卷积。如果不是的话,则方法返回步骤1020并且针对进一步的输入数据处理权重的第一子集。重复该过程(例如,使用图2的卷积引擎的每个通过)直到权重的第一部分已经针对所有输入数据被处理。
一旦完成,则方法转到步骤1040,其中确定针对层的所有权重是否已经处理。在第一通过中,在仅权重的第一子集已经被处理的情况下,并非针对层的所有权重将已经被处理,因为权重的第一子集是针对层的所有权重的子集。如果并非针对层的所有权重子集已经被处理,则方法返回到步骤1010,其中权重的后续(例如,第二)子集针对层的所有输入数据在步骤1020处被处理(例如,使用图2的卷积引擎)。
在步骤1040处一旦已经确定针对层的所有权重子集被处理,则可以推断该层的处理已经完成。在步骤1050处,确定CNN的所有层是否已经被处理。如果并非所有层已经处理,则处理返回步骤1005,其中下一层的处理通过加载针对该层的命令或控制数据发起。然后针对每个层重复上文所描述的过程并且CNN输出数据1060被输出。
图11涉及图7b的布置并且描述使用硬件实现的CNN的各层的处理。方法与图9和图10的方法类似。在该布置中,数据的子集包括输入数据的子集。图11的布置以与图9和图10的布置类似的方式操作。在图11的布置中,子集包括输入数据的子集。在步骤1120处使用权重的至少一部分(例如,使用图2的卷积引擎)处理输入数据的子集。以与图9和图10类似的方式重复该处理,以及步骤1120的每个通过以权重中的至少一些处理子集直到所有权重已经使用针对层的输入数据的子集被处理。针对层的所有子集重复该过程,并且然后再针对CNN的每个层重复该过程。如先前所提到的,由于当使用特定大小的滤波器时所要求的重叠,因而可能需要重新加载输入数据的先前处理的子集的一部分,如在图7a中所图示的。
图12图示了根据图9至图11的方法,其中第一子集包括第一子滤波器并且后续子集包括针对层的后续子滤波器。因此,方法包括在步骤1210处接收针对当前层的一个或多个子滤波器并且然后在步骤1220处使用一个或多个子滤波器处理针对层的输入数据的至少一部分。在步骤1230处,确定针对层的所有输入数据是否已经使用一个或多个子滤波器被处理,如果不是的话,方法返回步骤1220以使用一个或多个子滤波器处理输入数据的至少另一部分。针对子滤波器的每个子滤波器重复过程并且对结果进行组合(例如,在图2的硬件布置的累加缓冲器中或累加器中)。
图13示出了在其中可以实现本文所描述的CNN或用于CNN的激活模块的硬件实现的计算机***。计算机***包括CPU 1302、GPU1304、存储器1306和其他设备1314(诸如显示器1316、扬声器1318和照相机1317)。处理块1310被实现在GPU 1304上。在其他示例中,处理块1310可以被实现在CPU 1302上。处理块1310还可以被实现在分开的单元(未示出)中。处理块1310可以包括被配置为实现硬件实现200的数字逻辑。硬件实现200可以由外部处理器(诸如GPU1304或CPU 1302或未示出的另一处理器)控制。计算机***的部件可以经由通信总线1320彼此通信。存储1312被实现为存储器1306的一部分。
图1至图12中所图示的CNN或用于CNN的激活模块的硬件实现200被示出为包括若干功能块。这仅是示意性的并且不旨在在这样的实体的不同的逻辑元件之间定义严格划分。可以以任何适合的方式提供每个功能块。将理解到,如由CNN或用于CNN的激活模块的硬件实现所形成的本文所描述的中间值不需要在任何时候由CNN或用于CNN的激活模块的硬件实现物理地生成,并且可以仅表示方便地描述由在其输入与输出之间的CNN或用于CNN的激活模块的硬件实现所执行的处理。
本文所描述的CNN或用于CNN的激活模块的硬件实现可以被实现在集成电路上的硬件中。本文所描述的CNN或用于CNN的激活模块的硬件实现可以被配置为执行本文所描述的方法中的任一个。通常,可以在软件、固件、硬件(固定逻辑电路)或其任何组合中实现上文所描述功能、方法、技术或部件中的任一个。术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”在本文中被用于通常表示软件、固件、硬件或其任何组合。在软件实现的情况下,模块、功能、部件、元件、单元、块或逻辑表示当被执行在处理器上时执行指定任务的程序代码。可以通过执行使得(一个或多个)处理器执行算法/方法的代码的一个或多个处理器执行本文所描述的算法和方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪速存储器、硬盘存储器和可以使用磁性、光学和其他技术存储可以由机器访问的指令或其他数据的其他存储器设备。
如本文所使用的术语计算机程序代码和计算机可读指令指代用于处理器的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路的代码(诸如硬件描述语言或网络列表)和以编程语言代码(诸如C、Java或OpenCL)表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,其当适合地被执行、处理、解译、编译、执行在虚拟机或其他软件环境中时,使得其中支持可执行代码的计算机***的处理器执行由代码所指定的任务。
处理器、计算机或计算机***可以是具有处理能力的任何种类的设备、机器、专用电路或其集合或一部分,使得其可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、片上***、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机***可以包括一个或多个处理器。
其还旨在涵盖定义如本文所描述的硬件的配置的软件(诸如HDL(硬件描述语言)软件),如被用于设计集成电路或用于配置可编程芯片以执行期望的功能。即,可以提供已经在其上以集成电路定义数据集的形式的编码计算机可读程序代码的计算机可读存储介质,其当在集成电路制造***中处理时将***配置为制造被配置为执行本文所描述的方法中的任一个的CNN或用于CNN的激活模块的硬件实现,或者制造包括本文所描述的任何装置的CNN或用于CNN的激活模块的硬件实现。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造***处制造CNN或用于CNN的激活模块的硬件实现的方法,如本文所描述的。而且,可以提供一种集成电路定义数据集,其在集成电路制造***中处理时使得制造CNN或用于CNN的激活模块的硬件实现的方法被执行。
集成电路定义数据集可以以计算机代码的形式(例如,作为网络列表、用于配置可编程芯片的代码、作为定义任何级别处的集成电路的硬件描述语言,包括寄存器传送级(RTL)代码、作为高级电路表示(Verilog或VHDL)并且作为低级电路表示(诸如OASIS(RTM)和GDSII))。可以在计算机***处处理逻辑地定义集成电路的高级表示(诸如RTL),计算机***被配置用于在软件环境的上下文中生成集成电路的制造定义,软件环境包括电路元件的定义和用于将那些元件组合以便生成通过表示这样定义的集成电路的制造定义的规则。与通常具有在计算机***处执行以便定义机器的软件的情况一样,可以要求一个或多个中间用户步骤(例如,提供命令、变量等)以便被配置用于生成集成电路的制造定义的计算机***以执行定义集成电路的代码以便生成该集成电路的制造定义。
现在将关于图14描述在集成电路制造***处处理集成电路定义数据集以便将***配置为制造CNN或用于CNN的激活模块的硬件实现的示例。
图14示出了集成电路(IC)制造***1402的示例,其包括布局处理***1404和集成电路生成***1406。IC制造***1402被配置为接收IC定义数据集(例如,定义CNN或用于CNN的激活模块的硬件实现,如在本文示例的任一个中所描述的)、处理IC定义数据集、根据IC定义数据集生成IC(例如,其实现CNN或用于CNN的激活模块的硬件实现,如在本文示例中的任一个中所描述的)。IC定义数据集的处理将IC制造***1402配置为制造实现CNN或用于CNN的激活模块的硬件实现的集成电路,如在本文示例中的任一个中所描述的。
所述地布局处理***1404被配置为接收和处理IC定义数据集来确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以包含合成RTL代码来确定待生成的电路的门级表示(例如,在逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)方面)。可以通过确定针对逻辑部件的位置信息根据电路的门级表示确定电路布局。这可以自动地或在用户参与的情况下完成以便优化电路布局。当布局处理***1404已经确定电路布局时,其可以将电路布局定义输出到IC生成***1406。电路布局定义可以是例如电路布局描述。
IC生成***1406根据电路布局定义生成IC,如本领域中已知的。例如,IC生成***1406可以实现半导体设备制造工艺来生成IC,其可以包含在其在由半导体材料制成的晶圆上逐渐地创建电子电路期间光刻和化学处理步骤的多步顺序。电路布局定义可以以可以在用于根据电路定义生成IC的光刻工艺中使用的掩模的形式。备选地,提供给IC生成***1406的电路布局定义可以是计算机可读代码的形式,IC生成***1406可以使用来其以形成用于使用在生成IC中的适合的掩模。
由IC制造***1402所执行的不同的过程可以全部实现在一个位置中(例如,通过一方)。备选地,IC制造***1402可以是分布式***,使得过程中的一些过程可以在不同的位置处执行并且可以由不同方执行。例如,级中的一些级:(i)合成表示IC定义数据集的RTL代码以形成待生成的电路的门级表示;(ii)基于门级表示生成电路布局;(iii)根据电路布局形成掩模;和(iv)可以在不同的位置和/或通过不同方执行使用掩模制造集成电路。
在其他示例中,在集成电路制造***中集成电路定义数据集的处理可以将配置***以在IC定义数据集未被处理的情况下制造CNN或用于CNN的激活模块的硬件实现以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器(诸如FPGA)的配置,并且该数据集的处理可以配置IC制造***以生成具有该定义的配置的可重新配置的处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,当在集成电路制造***中处理时,集成电路制造定义数据集可以使得集成电路制造***生成如本文所描述的设备。例如,通过集成电路制造定义数据集以关于图14上文所描述的方式的集成电路制造***的配置可以使得如本文所描述的设备将被制造。
在一些示例中,集成电路定义数据集可以包括在数据集处所定义的硬件上运行的软件或与数据集处所定义的硬件相结合的软件。在图14中所示的示例中,IC生成***还可以由集成电路定义数据集被配置为,在制造集成电路时,根据在集成电路定义数据集处所定义的程序代码将固件加载到该集成电路上或以其他方式给程序代码提供集成电路用于与集成电路一起使用。
申请人于此孤立地公开了本文所描述的每个个体特征和两个或两个以上这样的特征的任何组合,在这样的特征或组合能够根据本领域的技术人员的公知常识、基于本说明书作为整体执行的程度上,不管这样的特征或特征的组合是否解决本文所公开的任何问题。鉴于前述描述,对于本领域的技术人员而言将明显的是,可以在本发明的范围内做出各种修改。
Claims (20)
1.一种卷积神经网络(CNN)的硬件实现的方法,所述方法包括:
接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第一子集,并且使用至少一个卷积引擎执行数据的所述第一子集的卷积以生成第一部分结果;
接收包括针对所述CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第二子集,并且使用所述至少一个卷积引擎执行数据的所述第二子集的卷积以生成第二部分结果;以及
将所述第一部分结果和所述第二部分结果组合,以生成针对所述CNN的层的卷积数据的至少一部分。
2.根据权利要求1所述的方法,其中:
所述数据的第一子集包括所述输入数据的第一部分和权重数据;以及
所述数据的第二子集包括所述输入数据的第二部分和权重数据。
3.根据权利要求2所述的方法,其中所述输入数据的所述第二部分包括所述输入数据的所述第一部分的子集,并且其中所述输入数据的所述第一部分的所述子集的所述大小基于卷积核的大小。
4.根据权利要求2或权利要求3所述的方法,其中所述数据的第一子集和所述数据的第二子集各自包括针对特定层的所有所述权重数据。
5.根据权利要求1至3中的任一项所述的方法,其中:
所述数据的第一子集包括所述权重数据的第一部分和输入数据;以及
所述数据的第二子集包括所述权重数据的第二部分和输入数据。
6.根据权利要求5所述的方法,其中所述数据的第一子集和所述数据的第二子集各自包括针对特定层的所有所述输入数据。
7.根据权利要求5或6所述的方法,其中所述权重数据的所述第一部分包括针对所述层的、不同于所述权重数据的所述第二部分的所述权重数据的不同部分。
8.根据权利要求1至7中的任一项所述的方法,其中所述第一部分结果和所述第二部分结果的所述组合包括:将所述第一部分结果和所述第二部分结果写到存储器。
9.根据权利要求1至8中的任一项所述的方法,其中:
所述数据的第一子集包括权重的第一部分和输入数据;以及
所述数据的第二子集包括权重的第二部分和输入数据。
10.根据权利要求9所述的方法,其中将所述第一部分结果和所述第二部分结果组合,以生成针对所述CNN的层的卷积数据的至少一部分包括:
使用至少一个卷积引擎,执行权重的所述第一部分与所述输入数据的卷积以生成所述第一部分结果;
使用至少一个卷积引擎,执行权重的所述第二部分与所述输入数据的卷积以生成所述第二部分结果;
将所述第一部分结果放置在累加器缓冲器中;
在累加器中将所述第一部分结果与所述第二部分结果组合。
11.根据权利要求9或权利要求10所述的方法,其中权重的所述第一部分和权重的所述第二部分是所述相同权重的非重叠部分。
12.根据权利要求5至11中的任一项所述的方法,其中所述数据的第一子集的所述输入数据和所述数据的第二子集的所述输入数据包括:针对所述层的所有所述输入数据。
13.根据任何前述权利要求所述的方法,还包括:接收定义所述数据的第一子集和所述数据的第二子集用于在所述层中处理的命令数据。
14.一种卷积神经网络(CNN)的硬件实现,所述硬件实现包括:
接口,被配置为接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第一子集,并且被配置为接收包括针对所述CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第二子集;
至少一个卷积引擎,被配置为执行所述数据的第一子集的卷积以生成第一部分结果,并且被配置为执行所述数据的第二子集的卷积以生成第二部分结果;以及
其中所述硬件实现被配置为将所述第一部分结果和所述第二部分结果组合,以生成针对所述CNN的层的卷积数据的至少一部分。
15.根据权利要求14所述的硬件实现,其中:
所述数据的第一子集包括所述输入数据的第一部分和权重数据;以及
所述数据的第二子集包括所述输入数据的第二部分和权重数据。
16.根据权利要求14或15所述的硬件实现,其中:
所述数据的第一子集包括所述权重数据的第一部分和输入数据;以及
所述数据的第二子集包括所述权重数据的第二部分和输入数据。
17.根据权利要求14至16中的任一项所述的硬件实现,其中所述硬件实现被配置为通过将所述第一部分结果和所述第二部分结果写到存储器,组合所述第一部分结果和所述第二部分结果。
18.根据权利要求14至17中的任一项所述的硬件实现,其中:
所述数据的第一子集包括权重的第一部分和输入数据;以及
所述数据的第二子集包括权重的第二部分和输入数据。
19.一种在集成电路制造***中制造根据权利要求14至18中的任一项所述的CNN的硬件实现的方法。
20.一种集成电路制造***,包括:
非瞬态计算机可读存储介质,已经在其上存储描述CNN的硬件实现的集成电路的计算机可读描述;
布局处理***,被配置为处理所述集成电路描述,以便生成实现CNN的所述硬件实现的集成电路的电路布局描述;以及
集成电路生成***,被配置为根据所述电路布局描述制造CNN的所述硬件实现,
其中CNN的所述硬件实现包括:
接口,被配置为接收包括针对CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第一子集,并且被配置为接收包括针对所述CNN层的权重数据的至少一部分和输入数据的至少一部分的数据的第二子集;
至少一个卷积引擎,其被配置为执行所述数据的第一子集的卷积以生成第一部分结果,并且被配置为执行所述数据的第二子集的卷积以生成第二部分结果;以及
其中所述硬件实现被配置为将所述第一部分结果和所述第二部分结果组合,以生成针对所述CNN的层的卷积数据的至少一部分。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311188305.5A CN117217273A (zh) | 2016-05-03 | 2017-05-03 | 实现卷积神经网络的硬件和非瞬态计算机可读存储介质 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB1607713.3A GB201607713D0 (en) | 2016-05-03 | 2016-05-03 | Convolutional neural network |
GB1607713.3 | 2016-05-03 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311188305.5A Division CN117217273A (zh) | 2016-05-03 | 2017-05-03 | 实现卷积神经网络的硬件和非瞬态计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107403221A true CN107403221A (zh) | 2017-11-28 |
CN107403221B CN107403221B (zh) | 2023-10-13 |
Family
ID=56234306
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710304906.6A Active CN107403221B (zh) | 2016-05-03 | 2017-05-03 | 用于实现卷积神经网络的方法和硬件、制造方法和*** |
CN202311188305.5A Pending CN117217273A (zh) | 2016-05-03 | 2017-05-03 | 实现卷积神经网络的硬件和非瞬态计算机可读存储介质 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311188305.5A Pending CN117217273A (zh) | 2016-05-03 | 2017-05-03 | 实现卷积神经网络的硬件和非瞬态计算机可读存储介质 |
Country Status (5)
Country | Link |
---|---|
US (5) | US11625581B2 (zh) |
EP (4) | EP3242253B1 (zh) |
JP (2) | JP7013143B2 (zh) |
CN (2) | CN107403221B (zh) |
GB (6) | GB201607713D0 (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108108811A (zh) * | 2017-12-18 | 2018-06-01 | 北京地平线信息技术有限公司 | 神经网络中的卷积计算方法和电子设备 |
CN108509382A (zh) * | 2018-03-27 | 2018-09-07 | 南开大学 | 一种基于fpga实现超长序列快速卷积运算的方法 |
CN109918204A (zh) * | 2018-03-22 | 2019-06-21 | 南京地平线机器人技术有限公司 | 数据处理***及方法 |
CN109961133A (zh) * | 2017-12-14 | 2019-07-02 | 北京中科寒武纪科技有限公司 | 集成电路芯片装置及相关产品 |
CN110009099A (zh) * | 2017-11-03 | 2019-07-12 | 畅想科技有限公司 | 用于深度神经网络的硬件实现的误差分配格式选择 |
WO2019136764A1 (zh) * | 2018-01-15 | 2019-07-18 | 深圳鲲云信息科技有限公司 | 卷积器及其所应用的人工智能处理装置 |
CN110046702A (zh) * | 2018-01-17 | 2019-07-23 | 联发科技股份有限公司 | 神经网络计算加速器及其执行的方法 |
CN110390389A (zh) * | 2018-04-17 | 2019-10-29 | 快图有限公司 | 神经网络引擎 |
WO2019223594A1 (zh) * | 2018-05-21 | 2019-11-28 | Oppo广东移动通信有限公司 | 神经网络模型处理方法和装置、图像处理方法、移动终端 |
CN110533176A (zh) * | 2018-05-25 | 2019-12-03 | 北京深鉴智能科技有限公司 | 用于神经网络计算的缓存装置及其相关计算平台 |
CN110574371A (zh) * | 2017-12-08 | 2019-12-13 | 百度时代网络技术(北京)有限公司 | 使用硬件加速器的立体摄像机深度确定 |
CN110879697A (zh) * | 2019-10-29 | 2020-03-13 | 南京大学 | 一种近似计算tanh函数的装置 |
CN110880034A (zh) * | 2018-09-06 | 2020-03-13 | 三星电子株式会社 | 使用卷积神经网络的计算装置及其操作方法 |
CN111433791A (zh) * | 2017-12-08 | 2020-07-17 | 超威半导体公司 | 用于电子装置的激活函数功能块 |
CN111832717A (zh) * | 2020-06-24 | 2020-10-27 | 上海西井信息科技有限公司 | 芯片结构及用于卷积计算的处理模块 |
CN111886605A (zh) * | 2018-03-22 | 2020-11-03 | 亚马逊技术股份有限公司 | 针对多个输入数据集的处理 |
CN112215340A (zh) * | 2019-07-11 | 2021-01-12 | 富士通株式会社 | 运算处理设备、控制方法以及计算机可读记录介质 |
CN112308199A (zh) * | 2019-07-26 | 2021-02-02 | 杭州海康威视数字技术股份有限公司 | 数据块的处理方法、装置及存储介质 |
Families Citing this family (133)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180053086A1 (en) * | 2016-08-22 | 2018-02-22 | Kneron Inc. | Artificial neuron and controlling method thereof |
FR3057090B1 (fr) * | 2016-09-30 | 2018-10-19 | Safran Identity & Security | Procedes d'apprentissage securise de parametres d'un reseau de neurones a convolution, et de classification securisee d'une donnee d'entree |
GB2554711B (en) * | 2016-10-06 | 2020-11-25 | Imagination Tech Ltd | Buffer addressing for a convolutional neural network |
US10366328B2 (en) | 2017-09-19 | 2019-07-30 | Gyrfalcon Technology Inc. | Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit |
US10360470B2 (en) | 2016-10-10 | 2019-07-23 | Gyrfalcon Technology Inc. | Implementation of MobileNet in a CNN based digital integrated circuit |
US9940534B1 (en) * | 2016-10-10 | 2018-04-10 | Gyrfalcon Technology, Inc. | Digital integrated circuit for extracting features out of an input image based on cellular neural networks |
US10043095B2 (en) * | 2016-10-10 | 2018-08-07 | Gyrfalcon Technology, Inc. | Data structure for CNN based digital integrated circuit for extracting features out of an input image |
US10339445B2 (en) | 2016-10-10 | 2019-07-02 | Gyrfalcon Technology Inc. | Implementation of ResNet in a CNN based digital integrated circuit |
US10402628B2 (en) | 2016-10-10 | 2019-09-03 | Gyrfalcon Technology Inc. | Image classification systems based on CNN based IC and light-weight classifier |
US10366302B2 (en) | 2016-10-10 | 2019-07-30 | Gyrfalcon Technology Inc. | Hierarchical category classification scheme using multiple sets of fully-connected networks with a CNN based integrated circuit as feature extractor |
US11003985B2 (en) * | 2016-11-07 | 2021-05-11 | Electronics And Telecommunications Research Institute | Convolutional neural network system and operation method thereof |
CN106557332A (zh) * | 2016-11-30 | 2017-04-05 | 上海寒武纪信息科技有限公司 | 一种指令生成过程的复用方法及装置 |
US10096384B2 (en) | 2016-12-21 | 2018-10-09 | Disco Health, LLC | Artificial intelligence expert system |
KR102415508B1 (ko) * | 2017-03-28 | 2022-07-01 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
US11037330B2 (en) * | 2017-04-08 | 2021-06-15 | Intel Corporation | Low rank matrix compression |
CN107124609A (zh) * | 2017-04-27 | 2017-09-01 | 京东方科技集团股份有限公司 | 一种视频图像的处理***、其处理方法及显示装置 |
US10474458B2 (en) * | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US20180330234A1 (en) * | 2017-05-11 | 2018-11-15 | Hussein Al-barazanchi | Partial weights sharing convolutional neural networks |
WO2019005088A1 (en) * | 2017-06-30 | 2019-01-03 | Intel Corporation | HETEROGENEOUS MULTIPLIER |
US10600147B2 (en) * | 2017-08-22 | 2020-03-24 | Intel Corporation | Efficient memory layout for enabling smart data compression in machine learning environments |
JP2019057249A (ja) * | 2017-09-22 | 2019-04-11 | 富士通株式会社 | 演算処理装置および演算処理方法 |
CN109754359B (zh) * | 2017-11-01 | 2021-12-07 | 腾讯科技(深圳)有限公司 | 一种应用于卷积神经网络的池化处理的方法及*** |
GB2568086B (en) | 2017-11-03 | 2020-05-27 | Imagination Tech Ltd | Hardware implementation of convolution layer of deep neutral network |
US11610099B2 (en) | 2017-11-06 | 2023-03-21 | Imagination Technologies Limited | Neural network architecture using single plane filters |
GB2560600B (en) * | 2017-11-06 | 2020-03-04 | Imagination Tech Ltd | Nueral Network Hardware |
KR20190052893A (ko) * | 2017-11-09 | 2019-05-17 | 삼성전자주식회사 | 뉴럴 네트워크 연산을 위한 전처리 장치 및 방법 |
US10929746B2 (en) * | 2017-11-27 | 2021-02-23 | Samsung Electronics Co., Ltd. | Low-power hardware acceleration method and system for convolution neural network computation |
US11216719B2 (en) * | 2017-12-12 | 2022-01-04 | Intel Corporation | Methods and arrangements to quantize a neural network with machine learning |
JP6789919B2 (ja) * | 2017-12-13 | 2020-11-25 | 日立オートモティブシステムズ株式会社 | 演算システム、サーバ、車載装置 |
WO2019114842A1 (zh) * | 2017-12-14 | 2019-06-20 | 北京中科寒武纪科技有限公司 | 一种集成电路芯片装置 |
CN109961137B (zh) * | 2017-12-14 | 2020-10-09 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN109978131B (zh) * | 2017-12-28 | 2020-05-22 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置、方法及相关产品 |
KR102463532B1 (ko) * | 2018-01-16 | 2022-11-08 | 한국전자통신연구원 | 신경망 컴퓨팅 장치 및 그것의 동작 방법 |
JP7107797B2 (ja) * | 2018-01-29 | 2022-07-27 | パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ | 情報処理方法及び情報処理システム |
GB201801639D0 (en) * | 2018-02-01 | 2018-03-21 | Ruff Brendan Patrick | Low precision efficient multiplication free convolutional filter bank device |
KR102143928B1 (ko) | 2018-02-05 | 2020-08-13 | 고려대학교 산학협력단 | 인공 신경망 장치 및 그 동작 방법 |
US11609760B2 (en) * | 2018-02-13 | 2023-03-21 | Shanghai Cambricon Information Technology Co., Ltd | Computing device and method |
KR102683757B1 (ko) * | 2018-02-20 | 2024-07-10 | 삼성전자주식회사 | 심층 신경망의 학습을 수행시키는 방법 및 그에 대한 장치 |
JP7056225B2 (ja) * | 2018-02-26 | 2022-04-19 | 富士通株式会社 | 演算処理装置、情報処理装置、情報処理方法、およびプログラム |
JP6540841B1 (ja) * | 2018-02-27 | 2019-07-10 | 富士通株式会社 | 演算処理装置、情報処理装置、情報処理方法、およびプログラム |
JP6757349B2 (ja) * | 2018-03-12 | 2020-09-16 | 株式会社東芝 | 固定小数点を用いて認識処理を行う多層の畳み込みニューラルネットワーク回路を実現する演算処理装置 |
JP2019164793A (ja) * | 2018-03-19 | 2019-09-26 | エスアールアイ インターナショナル | ディープニューラルネットワークの動的適応 |
US11429862B2 (en) | 2018-03-20 | 2022-08-30 | Sri International | Dynamic adaptation of deep neural networks |
US10678508B2 (en) | 2018-03-23 | 2020-06-09 | Amazon Technologies, Inc. | Accelerated quantized multiply-and-add operations |
US10621489B2 (en) * | 2018-03-30 | 2020-04-14 | International Business Machines Corporation | Massively parallel neural inference computing elements |
US11769036B2 (en) * | 2018-04-18 | 2023-09-26 | Qualcomm Incorporated | Optimizing performance of recurrent neural networks |
US11205115B1 (en) | 2018-04-20 | 2021-12-21 | Perceive Corporation | Neural network inference circuit |
US11468145B1 (en) | 2018-04-20 | 2022-10-11 | Perceive Corporation | Storage of input values within core of neural network inference circuit |
US11783167B1 (en) | 2018-04-20 | 2023-10-10 | Perceive Corporation | Data transfer for non-dot product computations on neural network inference circuit |
US11568227B1 (en) | 2018-04-20 | 2023-01-31 | Perceive Corporation | Neural network inference circuit read controller with multiple operational modes |
US10740434B1 (en) | 2018-04-20 | 2020-08-11 | Perceive Corporation | Reduced dot product computation circuit |
US11586910B1 (en) | 2018-04-20 | 2023-02-21 | Perceive Corporation | Write cache for neural network inference circuit |
CN110533175A (zh) * | 2018-05-23 | 2019-12-03 | 富士通株式会社 | 深度学习加速的方法和设备及深度神经网络 |
US11507818B2 (en) | 2018-06-05 | 2022-11-22 | Lightelligence PTE. Ltd. | Optoelectronic computing systems |
CN113159308A (zh) * | 2018-06-05 | 2021-07-23 | 光子智能股份有限公司 | 光电计算*** |
DE102018209901A1 (de) * | 2018-06-19 | 2019-12-19 | Robert Bosch Gmbh | Recheneinheit, Verfahren und Computerprogramm zum Multiplizieren zumindest zweier Multiplikanden |
DE102019205079A1 (de) | 2018-06-19 | 2019-12-19 | Robert Bosch Gmbh | Selektive Deaktivierung von Recheneinheiten für künstliche neuronale Netzwerke |
US10417342B1 (en) | 2018-07-03 | 2019-09-17 | Gyrfalcon Technology Inc. | Deep learning device for local processing classical chinese poetry and verse |
JP7120308B2 (ja) * | 2018-07-06 | 2022-08-17 | 日本電気株式会社 | データ処理装置、データ処理回路およびデータ処理方法 |
WO2020008642A1 (ja) * | 2018-07-06 | 2020-01-09 | 日本電気株式会社 | 学習装置、学習回路、学習方法および学習プログラム |
US20210350210A1 (en) * | 2018-07-30 | 2021-11-11 | Intel Corporation | Method and apparatus for keeping statistical inference accuracy with 8-bit winograd convolution |
US10311149B1 (en) | 2018-08-08 | 2019-06-04 | Gyrfalcon Technology Inc. | Natural language translation device |
WO2020039493A1 (ja) * | 2018-08-21 | 2020-02-27 | 日本電気株式会社 | 演算最適化装置、方法およびプログラム |
US11836971B2 (en) * | 2018-08-23 | 2023-12-05 | Samsung Electronics Co., Ltd. | Method and device with convolution neural network processing |
KR20200026455A (ko) | 2018-09-03 | 2020-03-11 | 삼성전자주식회사 | 인공 신경망 시스템 및 인공 신경망의 고정 소수점 제어 방법 |
KR102633139B1 (ko) | 2018-09-07 | 2024-02-02 | 삼성전자주식회사 | 데이터를 추출하는 집적 회로, 그것을 포함하는 뉴럴 네트워크 프로세서 및 뉴럴 네트워크 장치 |
US10747502B2 (en) * | 2018-09-19 | 2020-08-18 | Xilinx, Inc. | Multiply and accumulate circuit |
CN112740233A (zh) * | 2018-09-27 | 2021-04-30 | 株式会社索思未来 | 网络量化方法、推理方法以及网络量化装置 |
JP7040771B2 (ja) * | 2018-10-10 | 2022-03-23 | LeapMind株式会社 | ニューラルネットワーク処理装置、通信装置、ニューラルネットワーク処理方法、およびプログラム |
US10769846B2 (en) * | 2018-10-11 | 2020-09-08 | GM Global Technology Operations LLC | Point cloud data compression in an autonomous vehicle |
WO2020075287A1 (ja) * | 2018-10-12 | 2020-04-16 | オリンパス株式会社 | 演算処理装置 |
US10387772B1 (en) | 2018-10-22 | 2019-08-20 | Gyrfalcon Technology Inc. | Ensemble learning based image classification systems |
US11995533B1 (en) | 2018-12-05 | 2024-05-28 | Perceive Corporation | Executing replicated neural network layers on inference circuit |
CN111382832A (zh) * | 2018-12-29 | 2020-07-07 | 佳能株式会社 | 多层神经网络模型的训练和应用方法、装置及存储介质 |
CN109740737B (zh) * | 2018-12-30 | 2021-02-19 | 联想(北京)有限公司 | 卷积神经网络量化处理方法、装置及计算机设备 |
US12045724B2 (en) * | 2018-12-31 | 2024-07-23 | Microsoft Technology Licensing, Llc | Neural network activation compression with outlier block floating-point |
KR20200086581A (ko) | 2019-01-09 | 2020-07-17 | 삼성전자주식회사 | 뉴럴 네트워크 양자화를 위한 방법 및 장치 |
US11734556B2 (en) | 2019-01-14 | 2023-08-22 | Lightelligence PTE. Ltd. | Optoelectronic computing systems |
US11347297B1 (en) | 2019-01-23 | 2022-05-31 | Perceive Corporation | Neural network inference circuit employing dynamic memory sleep |
US11562247B2 (en) | 2019-01-24 | 2023-01-24 | Microsoft Technology Licensing, Llc | Neural network activation compression with non-uniform mantissas |
US20200249996A1 (en) * | 2019-02-04 | 2020-08-06 | Pathtronic Inc. | Systems and methods for artificial intelligence hardware processing |
US11544525B2 (en) | 2019-02-04 | 2023-01-03 | Sateesh Kumar Addepalli | Systems and methods for artificial intelligence with a flexible hardware processing framework |
US11150720B2 (en) | 2019-02-04 | 2021-10-19 | Sateesh Kumar Addepalli | Systems and methods for power management of hardware utilizing virtual multilane architecture |
US11507662B2 (en) * | 2019-02-04 | 2022-11-22 | Sateesh Kumar Addepalli | Systems and methods of security for trusted artificial intelligence hardware processing |
US11423454B2 (en) | 2019-02-15 | 2022-08-23 | Sateesh Kumar Addepalli | Real-time customizable AI model collaboration and marketplace service over a trusted AI model network |
JP7345262B2 (ja) | 2019-03-11 | 2023-09-15 | キヤノン株式会社 | データ圧縮装置、データ処理装置、データ圧縮方法、プログラム、及び学習済みモデル |
CN111695671B (zh) * | 2019-03-12 | 2023-08-08 | 北京地平线机器人技术研发有限公司 | 训练神经网络的方法及装置、电子设备 |
JP7188237B2 (ja) * | 2019-03-29 | 2022-12-13 | 富士通株式会社 | 情報処理装置、情報処理方法、情報処理プログラム |
JP7177000B2 (ja) * | 2019-05-16 | 2022-11-22 | 日立Astemo株式会社 | 演算装置および演算方法 |
US11868901B1 (en) | 2019-05-21 | 2024-01-09 | Percieve Corporation | Compiler for optimizing memory allocations within cores |
CN112085190B (zh) * | 2019-06-12 | 2024-04-02 | 上海寒武纪信息科技有限公司 | 一种神经网络的量化参数确定方法及相关产品 |
GB2581546B (en) * | 2019-08-22 | 2021-03-31 | Imagination Tech Ltd | Methods and systems for converting weights of a deep neural network from a first number format to a second number format |
CN114207609A (zh) * | 2019-08-26 | 2022-03-18 | 索尼集团公司 | 信息处理装置、信息处理***和信息处理方法 |
JP7419711B2 (ja) * | 2019-09-09 | 2024-01-23 | 株式会社ソシオネクスト | 量子化パラメータ最適化方法、及び、量子化パラメータ最適化装置 |
US11657282B2 (en) * | 2019-09-16 | 2023-05-23 | Qualcomm Incorporated | Efficient inferencing with fast pointwise convolution |
CN112561050B (zh) * | 2019-09-25 | 2023-09-05 | 杭州海康威视数字技术股份有限公司 | 一种神经网络模型训练方法及装置 |
CN111091548B (zh) * | 2019-12-12 | 2020-08-21 | 哈尔滨市科佳通用机电股份有限公司 | 基于深度学习的铁路货车承载鞍错位故障图像识别方法及*** |
US11363002B2 (en) * | 2019-12-13 | 2022-06-14 | TripleBlind, Inc. | Systems and methods for providing a marketplace where data and algorithms can be chosen and interact via encryption |
US11973743B2 (en) | 2019-12-13 | 2024-04-30 | TripleBlind, Inc. | Systems and methods for providing a systemic error in artificial intelligence algorithms |
US11431688B2 (en) | 2019-12-13 | 2022-08-30 | TripleBlind, Inc. | Systems and methods for providing a modified loss function in federated-split learning |
US11528259B2 (en) | 2019-12-13 | 2022-12-13 | TripleBlind, Inc. | Systems and methods for providing a systemic error in artificial intelligence algorithms |
KR20210079785A (ko) * | 2019-12-20 | 2021-06-30 | 삼성전자주식회사 | 뉴럴 네트워크의 컨볼루션 연산 처리 방법 및 장치 |
US11755683B2 (en) | 2019-12-23 | 2023-09-12 | Western Digital Technologies, Inc. | Flexible accelerator for sparse tensors (FAST) in machine learning |
JP2021111081A (ja) | 2020-01-09 | 2021-08-02 | 富士通株式会社 | 情報処理装置、ニューラルネットワークの演算プログラム及びニューラルネットワークの演算方法 |
EP4064134B1 (en) * | 2020-01-16 | 2024-05-22 | Sophgo Technologies Ltd. | Neural network processing method, device and system |
CN110866862B (zh) * | 2020-01-19 | 2020-05-15 | 光子算数(北京)科技有限责任公司 | 基于缓冲器的数据处理方法、装置、存储介质及电子设备 |
CN113408715B (zh) * | 2020-03-17 | 2024-05-28 | 杭州海康威视数字技术股份有限公司 | 一种神经网络的定点化方法、装置 |
US11462003B2 (en) * | 2020-03-25 | 2022-10-04 | Western Digital Technologies, Inc. | Flexible accelerator for sparse tensors in convolutional neural networks |
US11797830B2 (en) | 2020-03-25 | 2023-10-24 | Western Digital Technologies, Inc. | Flexible accelerator for sparse tensors in convolutional neural networks |
KR20210121946A (ko) * | 2020-03-31 | 2021-10-08 | 삼성전자주식회사 | 뉴럴 네트워크 양자화를 위한 방법 및 장치 |
TWI768326B (zh) * | 2020-04-20 | 2022-06-21 | 國立陽明交通大學 | 卷積運算模組及方法以及其適用之卷積神經網路系統 |
US11763162B2 (en) * | 2020-06-16 | 2023-09-19 | National Tsing Hua University | Dynamic gradient calibration method for computing-in-memory neural network and system thereof |
GB2596150B (en) * | 2020-06-19 | 2022-06-15 | Imagination Tech Ltd | Methods and systems for selecting number formats for deep neural networks based on network sensitivity and quantisation error |
JP2022022876A (ja) | 2020-07-09 | 2022-02-07 | キヤノン株式会社 | 畳み込みニューラルネットワーク処理装置 |
GB2599098B (en) * | 2020-09-22 | 2024-04-10 | Imagination Tech Ltd | Hardware implementation of windowed operations in three or more dimensions |
US11797832B2 (en) * | 2020-10-15 | 2023-10-24 | Gigantor Technologies Inc. | Composing arbitrary convolutional neural network models from a fixed set of duplicate pipelined components |
US11507693B2 (en) | 2020-11-20 | 2022-11-22 | TripleBlind, Inc. | Systems and methods for providing a blind de-identification of privacy data |
US11144822B1 (en) * | 2021-01-04 | 2021-10-12 | Edgecortix Pte. Ltd. | Neural network accelerator run-time reconfigurability |
CN113222148B (zh) * | 2021-05-20 | 2022-01-11 | 浙江大学 | 一种面向物料识别的神经网络推理加速方法 |
GB2611522B (en) | 2021-09-30 | 2024-04-10 | Imagination Tech Ltd | Neural network accelerator with a configurable pipeline |
GB2611520B (en) | 2021-09-30 | 2024-05-22 | Imagination Tech Ltd | Methods and devices for configuring a neural network accelerator with a configurable pipeline |
US20230177320A1 (en) | 2021-09-30 | 2023-06-08 | Imagination Technologies Limited | Neural network accelerator with a configurable pipeline |
GB2611521B (en) | 2021-09-30 | 2024-04-10 | Imagination Tech Ltd | Neural network accelerator with a configurable pipeline |
TW202331598A (zh) * | 2021-12-17 | 2023-08-01 | 美商賽發馥股份有限公司 | 四倍窄化操作 |
GB2614327A (en) | 2021-12-31 | 2023-07-05 | Imagination Tech Ltd | Configurable pooling process unit for neural network accelerator |
GB2614705B (en) | 2021-12-31 | 2024-04-17 | Imagination Tech Ltd | Neural network accelerator with configurable pooling processing unit |
CN116384444A (zh) | 2021-12-31 | 2023-07-04 | 想象技术有限公司 | 用于神经网络加速器的可配置池化处理单元 |
GB2615754B (en) * | 2022-02-15 | 2024-02-21 | Advanced Risc Mach Ltd | Method and processing unit for generating an output feature map |
GB2620167A (en) | 2022-06-29 | 2024-01-03 | Imagination Tech Ltd | Methods and systems for executing a neural network on a neural network accelerator |
GB2622875A (en) | 2022-09-30 | 2024-04-03 | Imagination Tech Ltd | Methods and systems for performing channel equalisation on a convolution layer in a neural network |
GB2622869A (en) | 2022-09-30 | 2024-04-03 | Imagination Tech Ltd | Methods and systems for online selection of number formats for network parameters of a neural network |
KR20240077167A (ko) * | 2022-11-24 | 2024-05-31 | 주식회사 모빌린트 | 합성곱 연산을 위한 데이터 처리 방법 및 컴퓨팅 장치 |
CN117217274B (zh) * | 2023-11-08 | 2024-06-04 | 深圳市九天睿芯科技有限公司 | 向量处理器、神经网络加速器、芯片及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110029471A1 (en) * | 2009-07-30 | 2011-02-03 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
CN102420931A (zh) * | 2011-07-26 | 2012-04-18 | 西安费斯达自动化工程有限公司 | 一种基于fpga的全帧率图像处理方法 |
US20140288928A1 (en) * | 2013-03-25 | 2014-09-25 | Gerald Bradley PENN | System and method for applying a convolutional neural network to speech recognition |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN105205479A (zh) * | 2015-10-28 | 2015-12-30 | 小米科技有限责任公司 | 人脸颜值评估方法、装置及终端设备 |
WO2016030230A1 (fr) * | 2014-08-28 | 2016-03-03 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Reseau de neurones convolutionnels |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07200259A (ja) * | 1993-12-28 | 1995-08-04 | Hitachi Ltd | 演算処理方法および演算処理装置 |
FR2743246B1 (fr) * | 1995-12-29 | 1998-01-23 | Thomson Broadcast Systems | Procede et dispositif de compression de donnees numeriques |
DE19826252C2 (de) * | 1998-06-15 | 2001-04-05 | Systemonic Ag | Verfahren zur digitalen Signalverarbeitung |
JP5171118B2 (ja) * | 2007-06-13 | 2013-03-27 | キヤノン株式会社 | 演算処理装置及びその制御方法 |
US20090164544A1 (en) | 2007-12-19 | 2009-06-25 | Jeffrey Dobbek | Dynamic range enhancement for arithmetic calculations in real-time control systems using fixed point hardware |
US8422821B2 (en) * | 2008-12-19 | 2013-04-16 | International Business Machines Corporation | Selectively transforming a multi-dimensional array |
GB2487375B (en) * | 2011-01-18 | 2017-09-20 | Aptina Imaging Corp | Interest point detection |
US20120191955A1 (en) | 2011-01-20 | 2012-07-26 | Jonsson Ragnar H | Method and system for floating point acceleration on fixed point digital signal processors |
US9811775B2 (en) * | 2012-12-24 | 2017-11-07 | Google Inc. | Parallelizing neural networks during training |
US9760966B2 (en) * | 2013-01-08 | 2017-09-12 | Nvidia Corporation | Parallel processor with integrated correlation and convolution engine |
US9430829B2 (en) | 2014-01-30 | 2016-08-30 | Case Western Reserve University | Automatic detection of mitosis using handcrafted and convolutional neural network features |
US20160026912A1 (en) * | 2014-07-22 | 2016-01-28 | Intel Corporation | Weight-shifting mechanism for convolutional neural networks |
US10223333B2 (en) * | 2014-08-29 | 2019-03-05 | Nvidia Corporation | Performing multi-convolution operations in a parallel processing system |
US9563825B2 (en) | 2014-11-20 | 2017-02-07 | Adobe Systems Incorporated | Convolutional neural network using a binarized convolution layer |
US9805303B2 (en) * | 2015-05-21 | 2017-10-31 | Google Inc. | Rotating data for neural network computations |
US10192162B2 (en) * | 2015-05-21 | 2019-01-29 | Google Llc | Vector computation unit in a neural network processor |
US9747546B2 (en) * | 2015-05-21 | 2017-08-29 | Google Inc. | Neural network processor |
US9886377B2 (en) * | 2015-10-05 | 2018-02-06 | Intel Corporation | Pipelined convolutional operations for processing clusters |
US10346350B2 (en) * | 2015-10-08 | 2019-07-09 | Via Alliance Semiconductor Co., Ltd. | Direct execution by an execution unit of a micro-operation loaded into an architectural register file by an architectural instruction of a processor |
US9424494B1 (en) | 2016-01-28 | 2016-08-23 | International Business Machines Corporation | Pure convolutional neural network localization |
-
2016
- 2016-05-03 GB GBGB1607713.3A patent/GB201607713D0/en not_active Ceased
-
2017
- 2017-05-03 GB GB1707039.2A patent/GB2552242B/en active Active
- 2017-05-03 GB GB2012271.9A patent/GB2584243B/en active Active
- 2017-05-03 EP EP17169307.0A patent/EP3242253B1/en active Active
- 2017-05-03 GB GB2015694.9A patent/GB2585609B/en active Active
- 2017-05-03 US US15/585,571 patent/US11625581B2/en active Active
- 2017-05-03 GB GB2008977.7A patent/GB2582519B/en active Active
- 2017-05-03 GB GB1707040.0A patent/GB2552243B/en active Active
- 2017-05-03 US US15/585,645 patent/US11144819B2/en active Active
- 2017-05-03 EP EP21172321.8A patent/EP3901832A1/en active Pending
- 2017-05-03 EP EP21177846.9A patent/EP3901835A1/en active Pending
- 2017-05-03 EP EP17169309.6A patent/EP3242254B1/en active Active
- 2017-05-03 CN CN201710304906.6A patent/CN107403221B/zh active Active
- 2017-05-03 CN CN202311188305.5A patent/CN117217273A/zh active Pending
- 2017-05-08 JP JP2017092266A patent/JP7013143B2/ja active Active
-
2021
- 2021-10-11 US US17/498,618 patent/US20220027717A1/en active Pending
-
2022
- 2022-01-19 JP JP2022006207A patent/JP7348971B2/ja active Active
-
2023
- 2023-04-10 US US18/132,929 patent/US11948070B2/en active Active
-
2024
- 2024-04-01 US US18/623,450 patent/US20240249131A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110029471A1 (en) * | 2009-07-30 | 2011-02-03 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
CN102420931A (zh) * | 2011-07-26 | 2012-04-18 | 西安费斯达自动化工程有限公司 | 一种基于fpga的全帧率图像处理方法 |
US20140288928A1 (en) * | 2013-03-25 | 2014-09-25 | Gerald Bradley PENN | System and method for applying a convolutional neural network to speech recognition |
WO2016030230A1 (fr) * | 2014-08-28 | 2016-03-03 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Reseau de neurones convolutionnels |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN105205479A (zh) * | 2015-10-28 | 2015-12-30 | 小米科技有限责任公司 | 人脸颜值评估方法、装置及终端设备 |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110009099A (zh) * | 2017-11-03 | 2019-07-12 | 畅想科技有限公司 | 用于深度神经网络的硬件实现的误差分配格式选择 |
CN110009099B (zh) * | 2017-11-03 | 2021-12-24 | 畅想科技有限公司 | 用于确定表示dnn的层的值的定点数格式的方法和*** |
US11392823B2 (en) | 2017-11-03 | 2022-07-19 | Imagination Technologies Limited | Error allocation format selection for hardware implementation of deep neural network |
US11734553B2 (en) | 2017-11-03 | 2023-08-22 | Imagination Technologies Limited | Error allocation format selection for hardware implementation of deep neural network |
CN111433791B (zh) * | 2017-12-08 | 2024-04-12 | 超威半导体公司 | 用于电子装置的激活函数功能块 |
US11182917B2 (en) | 2017-12-08 | 2021-11-23 | Baidu Usa Llc | Stereo camera depth determination using hardware accelerator |
CN111433791A (zh) * | 2017-12-08 | 2020-07-17 | 超威半导体公司 | 用于电子装置的激活函数功能块 |
CN110574371A (zh) * | 2017-12-08 | 2019-12-13 | 百度时代网络技术(北京)有限公司 | 使用硬件加速器的立体摄像机深度确定 |
CN109961133A (zh) * | 2017-12-14 | 2019-07-02 | 北京中科寒武纪科技有限公司 | 集成电路芯片装置及相关产品 |
CN108108811A (zh) * | 2017-12-18 | 2018-06-01 | 北京地平线信息技术有限公司 | 神经网络中的卷积计算方法和电子设备 |
WO2019136764A1 (zh) * | 2018-01-15 | 2019-07-18 | 深圳鲲云信息科技有限公司 | 卷积器及其所应用的人工智能处理装置 |
CN110046702B (zh) * | 2018-01-17 | 2023-05-26 | 联发科技股份有限公司 | 神经网络计算加速器及其执行的方法 |
CN110046702A (zh) * | 2018-01-17 | 2019-07-23 | 联发科技股份有限公司 | 神经网络计算加速器及其执行的方法 |
CN111886605B (zh) * | 2018-03-22 | 2024-03-22 | 亚马逊技术股份有限公司 | 针对多个输入数据集的处理 |
CN109918204A (zh) * | 2018-03-22 | 2019-06-21 | 南京地平线机器人技术有限公司 | 数据处理***及方法 |
CN111886605A (zh) * | 2018-03-22 | 2020-11-03 | 亚马逊技术股份有限公司 | 针对多个输入数据集的处理 |
CN109918204B (zh) * | 2018-03-22 | 2021-04-23 | 南京地平线机器人技术有限公司 | 数据处理***及方法 |
CN108509382B (zh) * | 2018-03-27 | 2022-06-07 | 南开大学 | 一种基于fpga实现超长序列快速卷积运算的方法 |
CN108509382A (zh) * | 2018-03-27 | 2018-09-07 | 南开大学 | 一种基于fpga实现超长序列快速卷积运算的方法 |
CN110390389A (zh) * | 2018-04-17 | 2019-10-29 | 快图有限公司 | 神经网络引擎 |
WO2019223594A1 (zh) * | 2018-05-21 | 2019-11-28 | Oppo广东移动通信有限公司 | 神经网络模型处理方法和装置、图像处理方法、移动终端 |
CN110533176A (zh) * | 2018-05-25 | 2019-12-03 | 北京深鉴智能科技有限公司 | 用于神经网络计算的缓存装置及其相关计算平台 |
CN110880034A (zh) * | 2018-09-06 | 2020-03-13 | 三星电子株式会社 | 使用卷积神经网络的计算装置及其操作方法 |
CN112215340A (zh) * | 2019-07-11 | 2021-01-12 | 富士通株式会社 | 运算处理设备、控制方法以及计算机可读记录介质 |
CN112308199A (zh) * | 2019-07-26 | 2021-02-02 | 杭州海康威视数字技术股份有限公司 | 数据块的处理方法、装置及存储介质 |
CN112308199B (zh) * | 2019-07-26 | 2024-05-10 | 杭州海康威视数字技术股份有限公司 | 数据块的处理方法、装置及存储介质 |
CN110879697B (zh) * | 2019-10-29 | 2021-09-28 | 南京大学 | 一种近似计算tanh函数的装置 |
CN110879697A (zh) * | 2019-10-29 | 2020-03-13 | 南京大学 | 一种近似计算tanh函数的装置 |
CN111832717B (zh) * | 2020-06-24 | 2021-09-28 | 上海西井信息科技有限公司 | 芯片及用于卷积计算的处理装置 |
CN111832717A (zh) * | 2020-06-24 | 2020-10-27 | 上海西井信息科技有限公司 | 芯片结构及用于卷积计算的处理模块 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107403221A (zh) | 卷积神经网络的硬件实现 | |
US11157592B2 (en) | Hardware implementation of convolutional layer of deep neural network | |
CN110009092A (zh) | 用于深度神经网络的激活函数 | |
US20230195831A1 (en) | Methods and systems for implementing a convolution transpose layer of a neural network | |
CN110020716A (zh) | 神经网络硬件 | |
CN107992943A (zh) | 用于卷积神经网络的缓冲器寻址 | |
CN108073981A (zh) | 处理卷积神经网络的方法和设备 | |
CN110033079B (zh) | 深度神经网络的硬件实现的端到端数据格式选择 | |
EP4050522A1 (en) | Implementation of softmax and exponential in hardware | |
GB2568082A (en) | Hierarchical mantissa bit length selection for hardware implementation of deep neural network | |
GB2625452A (en) | Neural network comprising matrix multiplication | |
CN115600662A (zh) | 在硬件中实施池化和反池化或反向池化 | |
CN114792124A (zh) | 在硬件中实施扩张卷积 | |
TWI674579B (zh) | 用於記憶體操作的電路和方法 | |
CN111324793A (zh) | 对存储感兴趣区域的数据的操作进行控制的方法和装置 | |
US20240160692A1 (en) | Implementing a scatter function on a neural network accelerator | |
GB2618398A (en) | Implementing a scatter function on a neural network accelerator | |
GB2618400A (en) | Implementing a scatter function on a neural network accelerator | |
GB2618399A (en) | Implementing a scatter function on a neural network accelerator | |
CN115906964A (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 |