CN110073359B - 用于卷积神经网络的有效数据布局 - Google Patents
用于卷积神经网络的有效数据布局 Download PDFInfo
- Publication number
- CN110073359B CN110073359B CN201780073892.XA CN201780073892A CN110073359B CN 110073359 B CN110073359 B CN 110073359B CN 201780073892 A CN201780073892 A CN 201780073892A CN 110073359 B CN110073359 B CN 110073359B
- Authority
- CN
- China
- Prior art keywords
- kernel
- activation map
- input activation
- layout
- stack
- 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
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 123
- 230000004913 activation Effects 0.000 claims abstract description 660
- 239000013598 vector Substances 0.000 claims description 18
- 238000004891 communication Methods 0.000 claims description 6
- 238000000034 method Methods 0.000 abstract description 150
- 238000001994 activation Methods 0.000 description 604
- 239000010410 layer Substances 0.000 description 174
- 230000008569 process Effects 0.000 description 41
- 238000012545 processing Methods 0.000 description 37
- 239000011159 matrix material Substances 0.000 description 34
- 230000006870 function Effects 0.000 description 20
- 238000010801 machine learning Methods 0.000 description 13
- 238000003709 image segmentation Methods 0.000 description 11
- 238000013528 artificial neural network Methods 0.000 description 10
- 238000007667 floating Methods 0.000 description 10
- 230000010076 replication Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000011176 pooling Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 238000012549 training Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 230000003190 augmentative effect Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000010606 normalization Methods 0.000 description 5
- 238000000926 separation method Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- 241000256837 Apidae Species 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 210000000613 ear canal Anatomy 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000004424 eye movement Effects 0.000 description 2
- 210000000744 eyelid Anatomy 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000008447 perception Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000003362 replicative effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 241001465754 Metazoa Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 210000003050 axon Anatomy 0.000 description 1
- 238000013529 biological neural network Methods 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 230000003925 brain function Effects 0.000 description 1
- 239000012792 core layer Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 210000004709 eyebrow Anatomy 0.000 description 1
- 210000000720 eyelash Anatomy 0.000 description 1
- 230000001815 facial effect Effects 0.000 description 1
- 230000020169 heat generation Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 210000005171 mammalian brain Anatomy 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 210000001747 pupil Anatomy 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 210000003786 sclera Anatomy 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 210000003491 skin Anatomy 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
- G06V40/18—Eye characteristics, e.g. of the iris
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/211—Selection of the most significant subset of features
- G06F18/2113—Selection of the most significant subset of features by ranking or filtering the set of features, e.g. using a measure of variance or of feature cross-correlation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/213—Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
- G06F18/2137—Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods based on criteria of topology preservation, e.g. multidimensional scaling or self-organising maps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/231—Hierarchical techniques, i.e. dividing or merging pattern sets so as to obtain a dendrogram
-
- 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/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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- 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/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/40—Extraction of image or video features
- G06V10/44—Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/762—Arrangements for image or video recognition or understanding using pattern recognition or machine learning using clustering, e.g. of similar faces in social networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/77—Processing image or video features in feature spaces; using data integration or data reduction, e.g. principal component analysis [PCA] or independent component analysis [ICA] or self-organising maps [SOM]; Blind source separation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/77—Processing image or video features in feature spaces; using data integration or data reduction, e.g. principal component analysis [PCA] or independent component analysis [ICA] or self-organising maps [SOM]; Blind source separation
- G06V10/771—Feature selection, e.g. selecting representative features from a multi-dimensional feature space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/82—Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
- G06V40/18—Eye characteristics, e.g. of the iris
- G06V40/193—Preprocessing; Feature extraction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/40—Extraction of image or video features
- G06V10/44—Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
- G06V10/443—Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components by matching or filtering
- G06V10/449—Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Multimedia (AREA)
- Databases & Information Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Medical Informatics (AREA)
- Ophthalmology & Optometry (AREA)
- Human Computer Interaction (AREA)
- Neurology (AREA)
- Biodiversity & Conservation Biology (AREA)
- Image Analysis (AREA)
- Complex Calculations (AREA)
- Error Detection And Correction (AREA)
- Measurement Of Velocity Or Position Using Acoustic Or Ultrasonic Waves (AREA)
- Image Processing (AREA)
Abstract
公开了用于有效实现卷积神经网络的卷积层的系统和方法。在一个方面,卷积层的内核堆栈中的内核的权重值可以被重新排序为具有槽块的块布局。可以将卷积层的输入激活图的像素值重新排序为包括多个输入激活图像素集群的交错布局。输出激活图可以使用输入激活图像素集群和内核逐块地确定。
Description
相关申请的交叉引用
本申请要求2016年10月4日提交的题为“EFFICIENT DATA LAYOUTS FORCONVOLUTIONAL NEURAL NETWORKS”的美国专利申请号No.62/403,930的优先权的权益,其内容通过引用整体结合于此。
版权和商标声明
本专利文件的公开内容的一部分包含受版权保护的材料。版权所有者不反对任何人对专利文件或专利公开内容进行传真复制,因为它出现在专利和商标局专利文件或记录中,但在其它方面保留所有版权。
技术领域
本公开一般涉及用于实现卷积神经网络的系统和方法,并且更特别地涉及用于实现卷积神经网络的卷积层的有效数据布局。
背景技术
卷积神经网络(CNN)描述一种人工神经网络的拓扑。CNN可用于眼睛图像分割和眼睛跟踪。CNN可以用于其它分类问题,诸如手势识别。为了确定CNN的卷积层的输出激活图,卷积层可以卷积输入激活图和卷积层的内核。计算卷积可能在计算上是昂贵的或密集的。
发明内容
在硬件计算系统中有效地执行卷积运算可能带来许多挑战。因此,本公开提供了用于有效实现卷积神经网络的系统和方法的示例。该系统和方法可以用于利用CNN的任何应用中,诸如例如增强现实、混合现实、虚拟现实、机器学习、计算机视觉、面部识别、眼睛跟踪、对象识别、角色、语言或语音分析、计算机游戏等。
在一个方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并包括:接收卷积神经网络的卷积层,其中卷积层包括内核堆栈中的内核,并且其中内核堆栈的内核处于基本内核布局中;将内核堆栈的内核的权重值从基本内核布局重新排序为包括多个内核块(tile)的块内核布局,其中内核块包括多个内核槽(kernel runnel),并且其中内核槽包括内核堆栈的内核的多个权重值;接收卷积层的输入激活图,其中输入激活图处于基本输入激活图布局中;将输入激活图的像素值从基本输入激活图布局重新排序为包括多个输入激活图像素集群的交错输入激活图布局;以及从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,其中输出激活图处于包括多个输出激活图像素集群的交错输出激活图布局中。
在另一方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并且包括:接收包括内核堆栈中的内核的卷积神经网络的卷积层,其中内核堆栈的内核处于包括内核槽的多个内核块的块内核布局中;接收卷积层的输入激活图,其中输入激活图处于基本输入激活图布局中;将输入激活图的像素值从基本输入激活图布局重新排序为包括多个输入激活图像素集群的交错输入激活图布局;以及从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,其中输出激活图处于包括多个输出激活图像素集群的交错输出激活图布局中。
在另一方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并且包括:接收包括内核堆栈中的内核的卷积神经网络的卷积层,其中内核堆栈的内核处于包括内核槽的多个内核块的块内核布局中;接收卷积层的输入激活图,其中输入激活图处于交错输入激活图布局中;以及从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,其中输出激活图处于包括多个输出激活图像素集群的交错输出激活图布局中。
在另一方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并且包括:接收包括内核堆栈中的内核的卷积神经网络的卷积层,其中内核堆栈的内核处于包括内核槽的多个内核块的块内核布局中,以及其中内核的维度是1;接收卷积层的输入激活图,其中输入激活图处于基本输入激活图布局中;将输入激活图的像素值从基本输入激活图布局重新排序为交错输入激活图布局,该交错输入激活图布局包括通过跨越的多个输入激活图像素集群;以及从多个内核块和多个输入激活图块确定卷积层的输出激活图,其中输出激活图是包括多个输出激活图集群的转置交错输出激活图布局。
在附图和以下描述中阐述了本说明书中描述的主题的一个或多个实施方式的细节。根据说明书、附图和权利要求,其它特征、方面和优点将变得显而易见。该概述和以下详细描述都不旨在限定或限制本发明主题的范围。
附图说明
图1示出了示例二维(2D)卷积的示意图。
图2示意性地示出了卷积神经网络的示例三维(3D)卷积层。
图3示出了未被3×3、1×3或3×1内核的卷积完全利用的宽度为4的单指令多数据(SIMD)寄存器的示意图。
图4示意性地示出了卷积神经网络的卷积层的输入激活图的像素值的示例重新排序。
图5A-5C示意性地示出了将内核堆栈的内核的权重值重新排序为包括槽块的块格式的示例。
图6A和图6B示意性地示出了将内核堆栈的内核权重重新排序为包括槽块的块格式的示例。
图7示意性地示出了将内核堆栈的内核权重重新排序为包括槽块的块格式的另一示例。
图8示意性地示出了用于示出逐块地确定输出激活图的卷积神经网络的示例3D卷积层。
图9A-9B示意性地示出了用于示出逐块地确定输出激活图的卷积神经网络的示例3D卷积层,其中内核堆栈槽跨越多行内核堆栈权重值。
图10是逐块地确定卷积神经网络的卷积层的输出激活图的示例过程的流程图,该块可选地包括将输入激活图的像素值和内核的权重值分别重新排序为交错布局和槽块。
图11示意性地示出了将内核堆栈的内核的权重值重新排序为包括槽块的块格式的示例。
图12示意性地示出了可穿戴显示系统的示例。
在整个附图中,可以重复使用附图标记来指示所引用的元件之间的对应关系。提供附图是为了说明在此描述的示例实施例,并且不旨在限制本公开的范围。
具体实施方式
概述
表示数据关系和模式的模型(诸如函数、算法、系统等)可以接受输入,并以某种方式产生与输入对应的输出。例如,模型可以实现为机器学习方法,诸如卷积神经网络(CNN)或深度神经网络(DNN)。深度学习是基于学习数据表示而不是任务特定算法的思想的机器学习方法的更广泛家族的一部分-示出解决对增强现实、混合现实、虚拟现实和机器智能至关重要的视听计算问题的巨大希望。在机器学习中,卷积神经网络(CNN或ConvNet)可以包括一类深度前馈人工神经网络,并且CNN已成功应用于分析视觉图像。机器学习方法包括一族方法,其可以为各种各样的问题实现稳健和准确的解决方案,包括眼睛图像分割和眼睛跟踪。然而,机器学习方法可能在计算上是密集的或昂贵的。因此,有效地执行机器学习方法可以在具有有限资源的嵌入式平台上实现机器学习方法的应用。
可以在称为训练的过程中学习机器学习模型的参数。例如,可以使用训练数据训练机器学习模型,该训练数据包括输入数据和与输入数据对应的模型的正确或优选输出。机器学习模型可以重复处理输入数据,并且机器学习模型的参数(例如,权重值)在多少数量上可以被修改为试错过程,直到模型产生(或“收敛”)正确或优选的输出为止。例如,可以通过称为“反向传播”的过程来执行权重值的修改。反向传播包括确定预期模型输出和所获得的模型输出之间的差异,并且然后确定如何修改模型的一些或所有参数的值,以减少预期模型输出和获得的模型输出之间的差异。
卷积神经网络(CNN)(机器学习方法的子类别)可以用于各种应用,诸如分割眼睛图像。眼睛图像可以包括眼睛的眼周区域,其包括眼睛和眼睛周围的部分,诸如眼睑、眉毛、睫毛和眼睛周围的皮肤。可以对眼睛图像进行分割以生成眼睛图像中的眼睛的瞳孔区域、虹膜区域或巩膜区域。还可以对眼睛图像进行分割以生成眼睛图像的背景,包括诸如眼睛图像中的眼睛周围的眼睑的皮肤。分割的眼睛图像可用于虹膜识别和眼睛跟踪。
眼睛跟踪可用于各种虚拟现实(VR)、增强现实(AR)或混合现实(MR)应用。例如,显示给VR、AR或MR设备的用户的虚拟菜单可以基于用户眼睛的取向(例如,关于一只或多只眼睛的偏转、俯仰或滚动)在空间上定位。当用户的眼睛移动时,可以相应地重新定位虚拟菜单。作为另一示例,VR、AR或MR设备的用户可通过眼睛移动滚动虚拟菜单。作为另一示例,用户可以使用眼睛移动向VR、AR或MR设备发出命令。此外,眼睛跟踪可以用于对准方法,诸如显示器对准和适当的渲染。相应地,因为CNN对于许多应用可以是有用的,所以实现高度硬件利用的CNN的有效实现方式可以在具有有限资源的嵌入式设备(例如,VR、AR或MR设备)上实现CNN的应用,诸如眼睛跟踪和其它计算机视觉方法的稳健实现方式。
本文公开的系统和方法可以在诸如计算机服务器、个人计算机、平板计算机、移动设备或嵌入式设备的计算设备上实现CNN的有效实现方式。计算设备可以包括矢量处理器、超长指令字(VLIW)矢量处理器或单指令多数据(SIMD)处理器。CNN的有效实现方式可以基于输入激活图、内核或输出激活图的有效数据布局。
CNN的卷积层可以包括内核的内核堆栈。卷积层的内核在应用于其输入时,可以产生结果输出激活图,示出对该特定学习内核的响应。然而,计算卷积可能在计算上是昂贵的或密集的。并且卷积层在计算上可能很昂贵。例如,卷积层可以是CNN中在计算上最昂贵的层,因为它们需要比其它类型的CNN层(例如,子采样层)更多的计算。然后,所得到的输出激活图可以由CNN的另一层处理。CNN的其它层可以包括例如归一化层(例如,亮度归一化层、批量归一化(BN)层、局部对比归一化(LCN)层或局部响应归一化(LRN)层)、整流线性层、上采样层、级联层、池化层、完全连接层、线性完全连接层、Softsign层、递归层或其任何组合。
CNN的内核堆栈可以包括M行内核和N列内核,每列也称为内核堆栈的过滤器组。内核堆栈的内核可以具有相同的宽度和相同的高度。卷积层可以具有M个输入通道,用于接收M个输入激活图。卷积层可以具有N个输出通道,用于产生N个输出激活图。每个输出激活图可以是内核堆栈的过滤器组和对应的输入激活图的三维卷积的结果。
在一些实现方式中,为了有效地实现卷积层,可以将内核堆栈的内核的权重值重新排序为内核的块布局。内核的块布局包括权重值的槽块。槽可以是具有以下两个属性的权重值的有序列表。首先,在给定权重值的数据类型的情况下,槽中的权重值的数量可以与诸如SIMD寄存器的处理器寄存器可以一次包含的权重值的数量相同。例如,对于128比特SIMD寄存器,槽可以包含8个半精度浮点权重值或4个单精度浮点权重值。其次,可以通过遍历内核堆栈的宽度维度(M)迭代填充槽,然后是内核堆栈的高度维度(N),然后是单独内核的宽度维度,并且然后是单独内核的高度维度。遍历继续,直到槽采用内核堆栈的内核的权重值完全填充为止。
在一些实现方式中,可将输入激活图的像素值重新排序为交错布局。例如,在卷积层接收M个输入激活图之后,输入激活图的像素值可以从用于输入激活图的基本布局重新排序为用于输入激活图的交错布局。在一些实现方式中,可以对像素值进行排序,使得第一输入激活图的第一像素值之后可以是第二输入激活图的第一像素,依此类推,直到最后一个(即第M个)输入激活图的第一像素值为止。最后输入激活图的第一像素值之后可以是第一输入激活图的第二像素值,第二输入激活图的第二像素值,依此类推,直到最后一个输入激活图的第二像素值为止。该重新排序可以继续,直到卷积层的所有输入激活图的所有像素值已经被类似地排序。重新排序过程可以产生大的重新排序的输入激活图,其包括所有单独的输入激活图。重新排序的输入激活图中的每个索引位置可以包括来自该索引处的单独输入激活图的像素值的集群。有利地,该重新排序需要通过例如CNN的初始卷积层或第一卷积层最多执行一次。在一些实施例中,可能不需要重新排序。例如,第一卷积层可以卷积一个输入激活图并产生多个输出激活图。在该情况下,可能不需要重新排序输入激活图的像素值。将一个输入激活图汇合以生成多个输出激活图可以被认为是并行地在一个输入激活图上执行多个二维(2D)卷积。有利地,在此公开的方法可以允许在单个输入激活图上有效地计算2D卷积。
可以逐块地确定交错布局中的卷积层的输出激活图。例如,对于输出激活图的权重值的集群:关于输出激活图像素值、重新排序的输入激活图像素值和内核块执行融合乘加运算。在一些实现方式中,交错布局中的卷积层的输出激活图可以被排序为用于输出激活图的基本布局。
基于在此公开的系统和方法的有效实现的CNN可以有利地使得能够在卷积层的处理或数学方面有效地计算输入激活图与内核的卷积。因此,基于CNN的应用可以在诸如计算机服务器、个人计算机、平板计算机、移动设备或嵌入式设备的计算设备上以交互速率操作。另外,在一些实施例中,有效实现的CNN可以允许高度利用计算设备(例如,嵌入式设备的嵌入式处理器)上可用的有限量的快速存储器,因为数据复制是不必要的,这是使用嵌入式处理器实现CNN的巨大改进。此外,在此公开的数据布局可以实现不是卷积层的CNN的其它层(例如,上采样层和下采样层)的有效处理。无需重新排列输入激活图,可以通过矢量处理器对输入激活图进行下采样或上采样。数据重新排序可以进行一次或根本不进行,这取决于CNN的结构。因此,在此公开的系统和方法的益处超出了有效的卷积计算。
此外,有效实现的CNN可以具有高性能或低功耗。在一些实现方式中,在此公开的系统和方法可以有利地降低实现CNN的计算设备的功耗,因为计算设备的处理器可以在较短的时间段内处于开启状态或高频状态。优化CNN,例如CNN的卷积层,可以在给定的功率包络上实现改进的、最优的或最大的性能,这对于具有约束性能或功率包络的计算设备(例如,嵌入式设备)是有用的。
卷积在计算上是昂贵的,并且对于映射到底层矢量处理器的能力而言是非平凡的。由于以最低成本(例如,货币、功耗和发热)最大化利用可用的硬件资源(例如,计算、存储器以及通常说分配给两者的处理器芯片空间)是非常期望的,使用本公开的方法在硬件和软件级别二者上的计算上繁重的操作的优化可以是有利的。
所公开的方法对数据进行重新排序,使得可以关于计算(例如,在某种意义上,使用该方法执行卷积所需的乘法累加次数减少到大约正确执行运算在数学上所需的最小运算次数)或关于存储器使用(例如,在与诸如im2col的竞争方法不同的情况下,需要很少或不需要额外的存储量-im2col以复制数据为代价实现高计算效率,这使得它在存储器方面效率低下)两者在矢量处理器上以改进或最优方式执行卷积。在此公开的实施例平衡了灵活性、性能和易于实现之间的折衷。
示例二维卷积
解决复杂问题的一种方法可以是分而治之的方法,通过将问题分解为更简单,更易于管理的组成部分,并且递归地继续这样做,直到复杂问题可以完全分成可以更容易作为一个单位解决的组成部分。这些子问题可以被认为是图中的节点或顶点。
在解决了这些子问题之后,需要以某种方式聚合它们的结果以得到原始的复杂问题的解决方案。用于组合子问题的结果的方法的范围可以从简单(例如,元素加法)到复杂的数学公式。组合子问题结果的运算可以表示为图中的连接或边。
该节点和边缘的图(对应于子问题并且组合子问题的结果)可以形成接收网络输入的网络,并且对输入和中间结果执行一系列计算以得到网络的所需输出。该网络可以被称为神经网络或人工神经网络,因为它表示哺乳动物大脑如何起作用,其中神经元作为形成该图的顶点,并且轴突作为边缘。在它是一个计算实体的意义上来说网络是人工的,类似于动物中的生物神经网络,但是由计算设备实现。
卷积运算可以是对两个函数(例如连续函数f和g)的数学运算,以产生第三函数。基于作为原始函数之一被转换的量的函数的两个函数的逐点乘法的积分,第三函数可以被认为是两个原始函数之一的修改版本。对两个函数f和g的卷积运算可以表示为下面的等式(1):
因此,为了确定两个函数f和g的卷积,可以通过下面的伪码来围绕变量t概括:
(1)将和变量设定为零。
(2)对于τ变量,从负无穷大到正无穷大:
(2a)将τ作为上述范围列表中的下一个值。
(2b)计算点f(τ)和g(t-τ)处的函数f和g的值。
(2c)将在(2b)处计算的两个值相乘。
(2d)将在(2c)处计算的值与和变量相加。
(2e)转到(2a)并重复该过程。
结束(2)
在图像处理中,可以类似地确定图像的卷积。例如,卷积层可以接收输入激活图作为其输入,该激活图可以类似于上面的函数g。卷积层可以将输入激活与内核卷积以确定卷积层的输出激活图,该内核可以类似于上面的函数f。内核可以是矩阵,即权重值的二维数组。输入激活图和内核的值的乘法类似于上面的动作(2c)。与连续的函数f和g不同,输入激活图包括离散像素值,并且内核包括离散权重值。因此,等式(1)中的积分可以用求和代替。
图1示出了示例100二维(2D)卷积的示意图。示例2D卷积100将输入激活图104(也称为输入特征图、输入图像或输入通道)与内核108进行卷积以确定输出激活图112(也称为输出特征图、输出图像或输出通道)。具有五个像素的宽度和五个像素的高度的输入激活图104包括25个像素值。输入激活图104中的数字表示输入激活图104的像素值。如图所示,输入激活图104的五行可以分别具有像素值(1,1,1,0,0)、(0,1,1,1,0)、(0,0,1,1,1)、(0,0,1,1,0)和(0,1,1,0,1)。所示的内核108是3×3内核,即内核108具有三个权重值的高度和三个权重值的宽度。内核108中的数字表示内核108的权重值。内核108的三行权重值可以是(1,0,1)、(0,1,0)和(1,0,1)。
输入激活图104与内核108的卷积可以由下面的等式(2)表示:
其中τ表示内核108的权重值的位置,并且t表示输出激活图112的像素值的位置。在内核108的中心处的权重值108e可以具有(0,0)的τ值。权重值108a可以具有(-1,-1)的τ值。权重值108g可以具有(-1,+1)的τ值。权重值108i可以具有(+1,+1)的τ值。
输出激活图112中的数字表示输出激活图112的像素值。输出激活图112的中心处的像素值112e位于输出激活图112的位置(2,2)。像素值112a可以处于输出激活图112的位置(1,1)。像素值112g可以处于输出激活图112的位置(1,3)。像素值112i可以处于输出激活图112的位置(3,3)。
为了确定输出激活图112的位置(1,1)处的像素值112a,可以执行以下乘法:像素值104a可以乘以权重值108j;像素值104b可以乘以权重值108i;像素值104c可以乘以权重值108h;像素值104e可以乘以权重值108g;像素值104f可以乘以权重值108f;像素值104g可以乘以权重值108e;像素值104h可以乘以权重值108c;像素值104i可以乘以权重值108b;并且像素值104j可以乘以权重值108a。此外,可以执行上述乘法的结果的累加或求和。
可以类似地确定输出激活图112的其它像素值。下面的等式(3)示出了确定输出激活图112的像素值112a-112i:
(f*g)
=((f*g)(t)|t=(+1,+1)到(+3,+3))
=(4,3,4,2,4,3,2,3,4) 等式(3)
示例三维卷积层
图2示意性地示出了卷积神经网络的示例性三维卷积层200。卷积层200可以具有M个输入通道204,用于接收M个输入激活图204a1,204b1,...,和204m1。输入激活图可以具有Q的输入激活图宽度和P的输入激活图高度。输入激活图204a1,204b1,...,和204m1可以具有相同的输入激活图宽度Q和输入激活图高度P。
卷积层200可以包括卷积层200的所有内核的内核堆栈208。内核堆栈208可以包括内核208a1-208an、208b1-208bn和208m1-208mn。内核堆栈208包括M行内核。内核堆栈208包括N列内核,每列也称为内核堆栈208的过滤器组。例如,内核列208a1,208b1,...,和208m1形成内核堆栈208的过滤器组。内核堆栈208的内核可以具有Kx的权重值的内核宽度和Ky的权重值的内核高度,以及总共Ky*Kx个权重值。内核堆栈208的内核208a1-208an、208b1-208bn和208m1-208mn可以具有相同的内核宽度Kx和内核高度Ky。
卷积层200可以具有N个输出通道212,用于产生N个输出激活图212a1、212a2和212an。每个输出激活图可以是内核堆栈208的过滤器组和相应的输入激活图的三维卷积的结果。输出激活图可以具有Q′的输出激活图宽度和P'的输出激活图高度。输出激活图212a1,212a2,...,和212an可以具有相同的输出激活图宽度Q'和输出激活图高度P'。
卷积层200的操作可以通过以下伪码来概括:
(1)对于从值1到值N的变量n:
(2a)将第n个输出激活图的像素值设定为零值。
(2b)对于从值1到值M的变量m:
(3a)第n个输出激活图的像素值+=
卷积(第m个输入激活图,内核堆栈的位置(m,n)处的内核),其中“卷积(Convolve)”表示二维卷积,并且“+=”表示输出激活图与卷积结果的逐点求和,该卷积结果为输入激活图与内核的卷积结果。
结束(2b)。
结束(1)。
单指令多数据寄存器的利用率示例
在此公开的系统和方法可以在诸如计算机服务器、个人计算机、平板计算机、移动设备或嵌入式设备的计算设备上实现CNN的有效实施方式。计算设备可以包括矢量处理器、超长指令字(VLIW)矢量处理器或单指令多数据(SIMD)处理器。具有SIMD功能的处理器或架构可以是指令集架构(ISA)或该ISA的特定硬件实施方式,能够通过使用“单指令多数据”操作来执行数据并行计算,其中单个指令可以并行执行,以对多个不相交的输入数据集执行相同的操作。这种ISA的非限制性示例包括x86上的流式SIMD扩展(SSE)扩展族、高级RISC机器(ARM)上的NEON或高级SIMD扩展、PowerPC上的AltiVec等。因此,CNN的有效实施方式可以提高利用率,诸如处理器的最大利用率,包括在实施SIMD能力架构的处理器上的存储器和单指令多数据(SIMD)执行单元的利用率。
在一些实施方式中,内核的期望特征可以包括围绕内核中心的等距离。具有奇数整数(例如,3×1内核)维度的内核可以具有这种期望特征。然而,这种内核的奇整数维度可能不能被2整除。而SIMD处理器寄存器可以具有是2的幂(因而是偶数)的寄存器宽度。如果没有一个或两个数据复制或将卷积捆绑在一起,卷积的单纯实现方式可能无法充分利用具有SIMD能力的处理器的SIMD执行单元。例如,“im2col”和“col2im”转换可用于数据复制,这会以存储器利用率为代价。此外,“im2col”和“col2im”转换在计算上可能是昂贵的。将卷积捆绑在一起可能需要(与在此公开的系统和方法相比)水平SIMD操作,其可以是能够降低SIMD执行单元的利用率的额外操作。
图3示出了未被3×3、1×3或3×1内核的卷积完全利用的宽度为4的单指令多数据(SIMD)寄存器的示意图。图3的左板块示出了3×3内核304a,每个白色方形表示内核304a的权重值。SIMD寄存器308a可以包含内核304a的四个权重值。SIMD寄存器308a可以包含的权重值的数量取决于权重值的数据类型和SIMD寄存器308a的比特宽度(例如,128比特)两者。因此,内核304a的单纯实现方式未能充分利用SIMD寄存器308a。图3的中间板块示出1×3内核304b,每个白色方形表示内核304b的权重值。SIMD寄存器308b可以包含内核304b的四个权重值。因此,内核304b的单纯实现方式可能不完全利用SIMD寄存器308b(以及除了宽度为四之外的SIMD寄存器)。图3的右板块示出了3×1内核304c,每个白色方形表示内核304c的权重值。SIMD寄存器308c可以包含内核304c的四个权重值。因此,内核304c的单纯实现方式未能充分利用SIMD寄存器308c。
卷积层输入动作图的像素值的重新排序示例
为了提高SIMD寄存器的利用率而不会对负面或基本上负面地影响存储器的利用率n,可以重新排序输入激活图的像素值。图4示意性地示出了卷积神经网络的卷积层的输入激活图的像素值的重新排序400的示例。重新排序输入激活图的像素值将输入激活图从用于输入激活图(基本输入激活图布局)的基本布局转换为用于输入激活图的交错布局(交错输入激活图布局)。
利用基本输入激活图布局,输入激活图可以逐个通道排序,使得第一输入激活图的所有像素值可以存储在第二输入激活图的所有像素之前(就存储器位置而言)等。如图4中所示,卷积层可以接收四个输入激活图404、408、412和416作为其输入。利用基本布局,可以逐个通道地存储输入激活图404、408、412和416的像素。例如,第一输入激活图404的像素值404a和404b可以存储在第二输入激活图408的像素值408a和408b之前。作为另一个示例,第二输入激活图408的像素值408a和408b可以存储在第三输入激活图412的像素值412a和412b之前。作为另一示例,第三输入激活图412的像素值412a和412b可以存储在第四输入激活图416的像素值416a和416b之前。
图4示出了来自四个输入激活图404、408、412和416的交错布局中的重新排序的输入激活图420。重新排序的输入激活图420可以包括输入激活图404、408、412和416的像素值。输入激活图404、408、412和416中的数字表示像素值的索引位置。利用交错布局,第一输入激活图404的第一像素值404a(输入激活图404的索引位置1处的像素值404a)之后可以是第二输入激活图408的第一像素值408a(输入激活图408的索引位置1处的像素值408a),第三输入激活图412的第一像素值412a(输入激活图412的索引位置1处的像素值412a),以及第四输入激活图416的第一像素值416a(输入激活图404的索引位置1处的像素值416a)。
第四输入激活图416的第一像素值416a之后可以是第一输入激活图404的第二像素值404b(输入激活图404的索引位置2处的像素值404b),第二输入激活图408的第二像素值408b(输入激活图408的索引位置2处的像素值408b),第三输入激活图412的第二像素值412b(输入激活图412的索引位置2处的像素值412b),以及第四输入激活图416的第二像素值416b(输入激活图416的索引位置2处的像素值416b)。在重新排序的输入激活图420中,可以类似地对所有输入激活图404、408、412和416的所有像素值进行排序。因此,重新排序的输入激活420中的每个索引位置可以包括来自该索引处的单独输入激活图404、408、412和416的像素值的集群。
类似地,在卷积层接收M个输入激活图之后,输入激活图的像素值可以从基本输入激活图布局重新排序为交错输入激活图布局。例如,像素值可以与第一输入激活图的第一像素值一起排序,之后是第二输入激活图的第一像素,依此类推,直到第M个输入激活图的第一像素值为止。第M个输入激活图的第一像素值之后可以是第一输入激活图的第二像素值,第二输入激活图的第二像素值,依此类推,直到第M个输入激活图的第二像素值为止。该重新排序可以继续,直到所有M个输入激活图的所有像素值已经被类似地排序。重新排序过程产生大的重新排序的输入激活图,其包括M个单独的输入激活图。重新排序的输入激活图中的每个索引位置可以包括来自该索引处的单独输入激活图的像素值的集群。
因此,输出激活图404、408、412和416以与输入激活图相同的方式交错。输入激活图404、408、412和416的行和列直接对应于重新排序的输入激活图420中的行和列。例如,输入激活图404的位置(i,j)索引到重新排序的输入激活图420的位置(i,j)处的像素的集群。
有利地,该重新排序需要通过例如CNN的初始卷积层或第一卷积层至多执行一次。在一些实施例中,可能不需要重新排序。例如,第一卷积层可以卷积一个输入激活图并产生多个输出激活图。在该情况下,可能不需要重新排序输入激活图的像素值。将一个输入激活图卷积以生成多个输出激活图可以被认为是并行地在一个输入激活图上执行多个二维(2D)卷积。有利地,在此公开的方法可以允许在单个输入激活图上的2D卷积的有效计算。
利用输入激活图交错布局,卷积层的输出激活图也可以处于类似的布局。有利地,像素值的重新排序可以通过例如CNN的初始卷积层或第一卷积层至多执行一次。因此,可以有效地实施CNN,因为可以仅对CNN的一个卷积层执行到交错布局的像素值的重新排序。
例如,用于输出激活图的交错布局(交错输出激活图布局)中的重新排序的输出激活图可以包括用于输出激活图(基本输出激活图布局)的基本布局中的输出激活图。利用交错输出激活图布局,像素值可以采用第一输出激活图的第一像素值排序,之后是第二输出激活图的第一像素,依此类推,直到第N个输出激活图的第一像素值为止。基本输出激活图布局中的输出激活图的数字可以由N表示。第N个输出激活图的第一像素值之后可以是第一输出激活图的第二像素值,第二输出激活图的第二像素值,依此类推,直到第N个输出激活图的第二像素值为止。可以类似地对N个输出激活图的其它像素值进行排序。交错布局中的输出激活图包括N个单独的输出激活图。输出激活图中的每个索引位置可以包括来自该索引处的单独输出激活图的像素值的集群。
在一些实施方式中,利用基本输出激活图布局,可以逐个信道地对输出激活图进行排序,使得属于第一输出激活图的所有像素值可以在属于第二输出激活图(就存储器位置而言)等的所有像素值之前存储。在一些实现方式中,交错输出激活图布局中的重新排序的输出激活图的像素值可以被排序为基本输出激活图布局。例如,第一输出激活图可以包括重新排序的输出激活图的第一像素、第(N+1)个像素、第(2N+1)个像素等。作为另一示例,第二输出激活图可包括重新排序的输出激活图的第二像素、第(N+2)个像素、第(2N+2)个像素等。作为另一示例,第N个输出激活图可以包括重新排序的输出激活图的第N个像素、第(2*N)个像素、第(3*N)个像素等。
有利地,在每个CNN层之后的数据重新配置可能是不必要的,因为CNN层的输出可以处于交错输出激活图布局中。因此,输入激活图仅需要被重新排序到交错布局一次(例如,CNN的输入激活图,其可以是CNN的输入层的输入激活图)。然后,交错布局可以通过CNN的后续层传播,而无需重新排序后续层的输入激活图的像素值。
将核心堆栈的内核权重值重新排序为槽块的示例
在卷积层400的输入激活图404、408、412和416被重新排序为输入激活图块布局的情况下,内核堆栈208的内核208a1-208an、208b1-208bn和208m1-208mn可以从内核的基本布局重新排序为内核的块布局中以利用用于诸如嵌入式设备的计算设备的处理器的加载、算术或存储操作的矢量操作。如图2中所示,内核堆栈208的行数和输入通道204的数量可以相同。内核堆栈208的列数和输出通道212的数量可以相同。内核堆栈208的内核可以具有Kx的权重值的内核宽度和Ky的权重值的内核高度。
图5A-5C、6A、6B和7示出了权重重新排序的示例。取决于使用的方法,通道的输入和输出数量(以及内核堆栈维度)没有限制。所描述的具有限制的方法通常更容易理解,并且稍微更快,更具平衡灵活性和计算效率权衡。关于存储器使用,它们在一些实现方式中都同样有效。第一步骤在图5A-5C、6A、6B和7中所示的所有方法之间共享。在第一步骤中,如上所述,以交错格式重新排列输入通道。换句话说,第一通道的第一像素位于第二通道的第一像素之前,…,它依次位于第n个通道的第一像素之前,位于第一通道的第二个像素之前,依此类推。随后,重新排序内核权重。该步骤基于使用的方法变化。
训练神经网络可以包括在基本内核布局中学习内核堆栈的内核的权重值。因为训练神经网络可以是离线过程(例如,在诸如计算机服务器、个人计算机、平板计算机、移动设备或嵌入式设备的计算设备之前使用所得到的神经网络来执行图像分割和眼睛跟踪),使用所公开的系统和方法重新排序内核的权重值可以有利地以离线方式执行一次(例如,在学习内核的权重值之后),而不损失神经网络的运行时间性能。在此公开的方法可以用于在具有嵌入式处理器、常规中央处理单元(CPU)、图形处理单元(GPU)或专用硬件专用集成电路(ASIC)设计的计算设备上有效地实现CNN。
图5A-5C示意性地示出了将内核堆栈208的内核的权重值重新排序为包括槽块的块格式的示例。这些示例对内核维度没有限制。图5A示出了具有两行内核和两列内核的卷积层200的2×2内核堆栈208。第一行内核包括内核504和内核508。第二行内核包括内核512和内核516。因为内核堆栈208的行数和输入通道204的数量可以相同,并且内核堆栈208的列数和输出通道212的数量可以相同,所以内核堆栈208将两个输入激活图卷积以产生两个输出激活图。内核堆栈208的内核具有3×3的维度。内核中的数字表示内核中的权重值的索引。如果内核堆栈208的内核的权重值具有32比特的大小并且诸如SIMD寄存器的处理器寄存器具有64比特的宽度,则SIMD寄存器可以一次包含两个权重值。
内核堆栈208的内核504、508、512和516的权重值504a-504i、508a-508i、512a-512i和516a-516i可以从内核的基本布局(基本内核布局)重新排序为内核的块布局(块内核布局)。内核的块布局可以包括槽块。在一些实现方式中,槽可以是具有以下属性的权重值的有序列表。首先,在给定权重值的数据类型的情况下,槽中的权重值的数量可以与诸如SIMD寄存器的处理器寄存器可以一次包含的权重值的数量相同。例如,对于128比特SIMD寄存器,槽可以包含用于半浮点内核的8个半精度浮点权重值(其是16比特浮点数),或用于浮点内核的4个单精度浮点权重值(其是32比特浮点数)。
其次,在给定内核中任意起始点的情况下,可以关于以下遍历优先级迭代填充槽:
(1)沿内核堆栈208的宽度维度(N维度或内核堆栈x方向(Sx),其对于图5A中所示的内核堆栈208等于2)遍历。
(2)沿内核堆栈208的高度维度(M维度或内核堆栈y方向(Sy),其对于图5A中所示的内核堆栈208等于2)遍历。
(3)沿单个内核的宽度维度(Kx,其对于图5A中所示的内核堆栈208的内核等于2)遍历。
(4)沿单个内核的高度维度(Ky,其对于图5A中所示的内核堆栈208的内核等于2)遍历。
遍历继续直到槽采用权重值被完全填充。
在一些实现方式中,块可以是槽的有序列表,其中可以选择槽的数量使得“块”始终在内核堆栈宽度边界(也称为内核堆栈行边界)上开始,并在内核堆栈宽度边界上结束。因此,可以使用越来越多的槽填充块,直到最后一个槽在内核堆栈行的末尾结束。
对于具有64比特宽度的SIMD寄存器,槽宽度也可以是64比特。如果内核的权重值大小为32比特,则64比特SIMD寄存器可以包含两个权重值。因此,槽可以包括两个32比特权重值。基于上述遍历优先级,每个块的槽的数量可以是1:槽可以首先在内核504的索引位置1处被填充权重值504a,然后在内核508的索引位置1处被填充权重值508a。在填充权重值504a和508a之后,完全填充槽。因为权重值504a在内核堆栈宽度边界处并且权重值508a在另一内核堆栈宽度边界处,所以具有权重值504a和508a的槽的块在内核堆栈宽度边界处开始并且在内核堆栈宽度边界处结束。因此,每个块的槽的数量可以是1。
图5B示出了在图5A中所示的基本布局中从内核堆栈208变换的块内核布局中的内核堆栈208m1。块布局中的内核堆栈208m1可以包括一个或多个块。块可以包括具有两个权重值的一个槽。内核堆栈208m1可以包括卷积层200中的所有权重值,使得内核堆栈208m1包括包含卷积层200的所有权重值所需的块。
内核堆栈208m1可以包括各自一个槽的18个块520a-520r。内核堆栈208m1可以包括表1中所示的块。
表1.内核堆栈208m1的块
总之,卷积层200将两个输入激活图与包括3×3内核的2×2内核堆栈卷积以产生两个输出激活图。内核堆栈的内核的权重值可以具有32比特的大小。因此,64比特SIMD寄存器可以包括两个权重值(SIMD通道的数量是2)。64比特槽可以包含两个权重值。并且块可以包含一个槽。
图5C示出了在图5A中所示的基本布局中从内核堆栈208变换的另一个块内核布局中的内核堆栈208m2。如果SIMD寄存器具有92比特的宽度并且内核的权重值具有32比特的大小,则92比特SIMD寄存器可以包含三个权重值。内核堆栈208m2可以包括表2中所示的块。
表2.内核堆栈208m2的块
作为另一示例,卷积层200可以将四个输入激活图与包括5×5内核的4×6内核堆栈卷积以产生六个输出激活图。内核堆栈的内核的权重值可以具有16比特的大小。因此,128比特SIMD寄存器可以包括8个权重值。128比特槽可包含八个权重值。并且块可以包括三个槽。在该示例中,每个块的槽的数量可以是三个,因为从内核堆栈宽度边界(即,行的开始)开始,可能需要三个槽来到达下一个内核堆栈宽度边界。第一槽可以包括在内核堆栈位置(1,1)、(1,2)、(1,3)、(1,4)、(1,5)、(1,6)、(2,1)和(2,2)处的内核的索引位置1处的像素值,该第一槽不在内核堆栈宽度边界处结束。第二槽可以包括在内核堆栈位置(2,3)、(2,4)、(2,5)、(2,6)、(3,1)、(3,2)、(3,3)和(3,4)处的内核的索引位置1处的像素值,该第二槽不在内核堆栈宽度边界处结束。第三槽可以包括在内核堆栈位置(3,5)、(3,6)、(4,1)、(4,2)、(4,3)、(4,4)、(4,5)和(4,6)处的内核的索引位置1处的像素值,该第三槽在内核堆栈宽度边界处结束。
内核权重的重新排序示例-输出通道的数量等于SMID寄存器宽度的倍数
图6A和图6B示意性地示出了将内核堆栈208的内核的权重值重新排序为包括槽块的块格式的示例。这些示例对内核维度没有限制。这些示例中说明的方法是最直接和最有效的,其限制是输出通道的数量(在网络中的每个和所有卷积层中)必须是矢量处理器的SIMD寄存器宽度的倍数。因此,该方法不如上面参考图5A-5C描述的方法灵活。
参考图6A,其示出了具有八行内核(M=8)和八列内核(N=8)的卷积层200的8×8内核堆栈208。第一行内核包括八个内核601-608。第二行内核包括八个内核609-616。第三行内核包括八个内核617-624。第四行内核包括八个内核625-632。第五行内核包括八个内核633-640。第六行内核包括八个内核641-648。第七行内核包括八个内核649-656。第八行内核包括八个内核657-664。
因为内核堆栈208的行数和输入通道204的数量可以相同并且内核堆栈208的列数和输出通道212的数量可以相同,所以内核堆栈208卷积八个输入激活图以生成八个输出激活图。在该示例中,内核堆栈208的内核具有3×3的维度。如果内核堆栈208的内核的权重值具有32比特的大小并且诸如SIMD寄存器的处理器寄存器具有64比特的宽度,则SIMD寄存器可以一次包含两个权重值。
图6A示出了如果寄存器宽度是四个元素则将内核权重布置在存储器中。这是在网络设计时执行的一次性操作。内核堆栈208的权重值601a-601i,602a-602i,...,663a-663i和664a-664i从内核的基本布局(基本内核布局)重新排序为内核的块布局(块内核布局)。内核权重的示意表示中的数字表示重新排序后的权重值的顺序。内核的块布局可以包括槽块。在一些实现方式中,槽可以是具有一个或多个以下属性的权重值的有序列表。首先,在给定权重值的数据类型的情况下,槽中的权重值的数量可以与诸如SIMD寄存器的处理器寄存器可以一次包含的权重值的数量相同。例如,对于128比特SIMD寄存器,槽可以包含针对半浮点内核的8个半精度浮点权重值(其是16比特浮点数),或针对浮点内核的4个单精度浮点权重值(其是32比特浮点数)。
其次,给定内核中的任意起始点,可以关于以下遍历优先级迭代地填充槽:
(1)沿内核堆栈208的宽度维度(N维度或内核堆栈x方向(Sx),其对于图6A中所示的内核堆栈208等于8)遍历。
(2)沿单个内核的宽度维度(Kx,其对于图6A中所示的内核堆栈208的内核等于3)遍历。
(3)沿内核堆栈208的高度维度(M维度或内核堆栈y维度(Sy),其对于图6A中所示的内核堆栈208等于8)遍历。
(4)沿单个内核的高度维度(Ky,其对于图6A中所示的内核堆栈208的内核等于3)遍历。
遍历继续直到槽被权重值完全填充。
该遍历可以可替代地表示为:
(1)对于每个Sx
(2)对于每个Ky
(3)对于每个Sy
(4)对于每个Kx。
在一些实现方式中,块可以是槽的有序列表,其中可以选择槽的数量使得“块”不总是在内核堆栈宽度边界(也称为内核堆栈行边界)上开始并且在内核堆栈宽度边界上结束。如图6A中所示,内核601-604、609-612、617-620、625-628、633-636、641-644、649-652和657-660的权重值可以在处理器的一个核心上重新排序和处理。内核605-608、613-616、621-624、629-632、637-640、645-649、653-656和661-664的权重值可以在处理器的另一个核心上重新排序和处理。在一些实现方式中,块可以是槽的有序列表,其中可以选择槽的数量使得“块”始终在内核堆栈宽度边界(也称为内核堆栈行边界)上开始并且在内核堆栈宽度边界上结束。
对于具有128比特宽度的SIMD寄存器,槽宽度也可以是128比特。如果内核的权重值具有8比特的大小,则128比特SIMD寄存器可以包含八个权重值。因此,槽可以包括八个8比特权重值。每个块的槽数量可以基于上述遍历优先级:槽可以填充权重值601a,602a,603a,604a,601b,602b,603b,604b,601c,602c,603c,604c,609a,...,612c,…,657a,…,660c,601d,602d,603d,604d,601e,602e,603e,604e,601f,602f,603f,604f,609d,....,612f,…,657d,…,660f,601g,602g,603g,604g,601h,602h,603h,604h,601i,602i,603i,604i,609g,…,612i,…,657g,…,和660i。可以使用一个处理器核心处理这些权重值。剩余的权重值可以如图6A中所示类似地排序,并用另一个处理器核心处理。
图6B示意性地示出了将图6A中所示的内核堆栈208的内核的权重值重新排序为包括槽块的块格式的另一示例。内核堆栈208的权重值601a-601i,602a-602i,...,663a-663i和664a-666i可以从内核的基本布局(基本内核布局)重新排序为内核的块布局(块内核布局)。内核权重的示意表示中的数字表示重新排序后的权重值的顺序。内核的块布局可以包括槽块。在一些实现方式中,槽可以是具有一个或多个以下属性的权重值的有序列表。首先,在给定权重值的数据类型的情况下,槽中的权重值的数量可以与诸如SIMD寄存器的处理器寄存器可以一次包含的权重值的数量相同。例如,对于128比特SIMD寄存器,槽可以包含针对半浮点内核的8个半精度浮点权重值(其是16比特浮点数),或针对浮点内核的4个单精度浮点权重值(其是32比特浮点数)。
其次,给定内核中的任意起始点,可以关于以下遍历优先级迭代地填充槽:
(1)沿内核堆栈208的宽度维度(N维度或内核堆栈x方向(Sx),其对于图6B中所示的内核堆栈208等于8)遍历。
(2)沿单个内核的高度维度(Ky,其对于图6B中所示的内核堆栈208的内核等于3)遍历。
(3)沿内核堆栈208的高度维度(M维度或内核堆栈y维度(Sy),其对于图6B中所示的内核堆栈208等于8)遍历。
(4)沿单个内核的宽度维度(Kx,其对于图6B中所示的内核堆栈208的内核等于3)遍历。
遍历继续直到槽被权重值完全填充。
该遍历可以可替代地表示为:
(1)对于每个Sx
(2)对于每个Kx
(3)对于每个Sy
(4)对于每个Ky。
在一些实现方式中,块可以是槽的有序列表,其中可以选择槽的数量使得“块”不总是在内核堆栈宽度边界(也称为内核堆栈行边界)上开始并且在内核堆栈宽度边界上结束。如图6A中所示,内核601-604、609-612、617-620、625-628、633-636、641-644、649-652和657-660的权重值可以在处理器的一个核心上重新排序和处理。内核605-608、613-616、621-624、629-632、637-640、645-649、653-656和661-664的权重值可以在处理器的另一个核心上重新排序和处理。在一些实现方式中,块可以是槽的有序列表,其中可以选择槽的数量使得“块”始终在内核堆栈宽度边界(也称为内核堆栈行边界)上开始并且在内核堆栈宽度边界上结束。
对于具有64比特宽度的SIMD寄存器,槽宽度也可以是64比特。如果内核的权重值具有32比特的大小,则64比特SIMD寄存器可以包含两个权重值。因此,槽可以包括两个32比特权重值。每个块的槽的数量可以基于上述遍历优先级:槽可以填充权重值601a,602a,603a,604a,601b,602b,603b,604b,601c,602c,603c,604c,609a,...,612c,...,657a,...,660c,601d,602d,603d,604d,601e,602e,603e,604e,601f,602f,603f,604f,609d,...,612f,...,657d,...,660f,601g,602g,603g,604g,601h,602h,603h,604h,601i,602i,603i,604i,609g,...,612i,...,657g,...,和660i。可以使用一个处理器核心处理这些权重值。剩余的权重值可以如图6B中所示类似地排序并用另一个处理器核心处理。
内核权重的重新排序示例-附加并行处理
图7示意性地示出了将内核堆栈208的内核的权重值重新排序为包括槽块的块格式的示例。图7中描述的方法是直接且有效的,但是比图6A-6B中描述的方法更具限制性。该方法不如图5A-5C中描述的方法灵活。然而,利用图7中描述的方法可以进行更多的并行处理。当(Kx*Ky*Sy)mod(寄存器宽度)=0时,该方法非常有效。
参考图7,其示出了具有八行内核(M=8)和八列内核(N=8)的卷积层200的8×8内核堆栈208。第一行内核包括八个内核601-608。第二行内核包括八个内核609-616。第三行内核包括八个内核617-624。第四行内核包括八个内核625-632。第五行内核包括八个内核633-640。第六行内核包括八个内核641-648。第七行内核包括八个内核649-656。第八行内核包括八个内核657-664。
因为内核堆栈208的行数和输入通道204的数量可以相同并且内核堆栈208的列数和输出通道212的数量可以相同,所以内核堆栈208卷积八个输入激活图以产生八个输出激活图。在该示例中,内核堆栈208的内核具有3×3的维度。如果内核堆栈208的内核的权重值具有32比特的大小并且诸如SIMD寄存器的处理器寄存器具有64比特的宽度,则SIMD寄存器可以一次包含两个权重值。
内核堆栈208的权重值601a-601i,602a-602i,...,663a-663i和664a-664i从内核的基本布局(基本内核布局)重新排序为内核的块布局(块内核布局)。内核权重的示意表示中的数字表示重新排序后的权重值的顺序。在一些实现方式中,槽可以是具有一个或多个以下属性的权重值的有序列表。首先,在给定权重值的数据类型的情况下,槽中的权重值的数量可以与诸如SIMD寄存器的处理器寄存器可以一次包含的权重值的数量相同。例如,对于128比特SIMD寄存器,槽可以包含针对半浮点内核的8个半精度浮点权重值(其是16比特浮点数),或针对浮点内核的4个单精度浮点权重值(其是32比特浮点数)。
其次,给定内核中的任意起始点,可以关于以下遍历优先级迭代地填充槽:
(1)沿单个内核的高度维度(Ky,,其对于图7中所示的内核堆栈208的内核等于3)遍历。
(2)沿内核堆栈208的高度维度(M维度或内核堆栈y维度(Sy),其对于图7中所示的内核堆栈208等于8)遍历。
(3)沿单个内核的宽度维度(Kx,其对于图7中所示的内核堆栈208的内核等于3)遍历。
(4)沿内核堆栈208的高度维度(M维度或内核堆栈y维度(Sx),其对于图7中所示的内核堆栈208等于8)遍历。
遍历继续直到槽被权重值完全填充。
该遍历可以可替代地表示为:
(1)对于每个Sx
(2)对于每个Sy
(3)对于每个Ky
(4)对于每个Kx。
在一些实现方式中,块可以是槽的有序列表,其中可以选择槽的数量使得“块”始终在内核堆栈高度边界(也称为内核堆栈列边界)上开始,并在内核堆栈高度边界上结束。如图6A中所示,内核601、609、617、625、633、641、649和657的权重值可以在处理器的第一核上重新排序和处理,内核602、610、618、626、634、642、650和658的权重值可以在处理器的第二核心上重新排序和处理,等等。
对于具有128比特宽度的SIMD寄存器,槽宽度也可以是128比特。如果内核的权重值具有8比特的大小,则128比特SIMD寄存器可以包含八个权重值。因此,槽可以包括八个8比特权重值。每个块的槽数量可以基于上述遍历优先级:槽可以填充权重值601a,601d,601g,609a,609d,609g,617a,617d,617g,625a,625d,625g,633a,633d,633g,641a,641d,641g,649a,649d,649g,657a,657d,657g,601b,601e,601h,...,657b,657e,657h,601c,601f,601i,...,657c,657f和657i。可以采用一个处理器核心处理这些权重值。剩余的权重值可以如图所示重新排序并采用其它处理器核心处理。
在一些实施例中,给定内核中的任意起始点,可以关于以下遍历优先级迭代地填充槽:
(1)沿单个内核的宽度维度(Kx,其对于图7中所示的内核堆栈208的内核等于3)遍历。
(2)沿单个内核的高度维度(Ky,其对于图7中所示的内核堆栈208的内核等于3)遍历。
(3)沿内核堆栈208的高度维度(M维度或内核堆栈y维度(Sy),其对于图7中所示的内核堆栈208等于8)遍历。
(4)沿内核堆栈208的高度维度(M维度或内核堆栈x维度(Sx),其对于图7中所示的内核堆栈208等于8)遍历。
遍历继续直到槽被权重值完全填充。
该遍历可以可替代地表示为:
(1)对于每个Sx
(2)对于每个Sy
(3)对于每个Kx
(4)对于每个Ky。
内核权重的重新排序示例
参考图5A-5C、6A、6B和7描述的方法可以如下所示进行概括。“REB”表示SIMD寄存器中元素的大小(以比特为单位)。“RWB”代表SIMD寄存器的宽度(以比特为单位)。“RWE”表示SIMD寄存器的宽度(以元素为单位)。槽包含N个权重的集合,其中N=RWE。换句话说,以下关系代表:RWE*REB=RWB(每个SIMD寄存器中的元素数,乘以每个元素占用的比特数等于SIMD寄存器的大小(以比特为单位))。例如,取决于硬件支持,128比特SIMD寄存器可以分为4个32比特的元素,或8个16比特的元素,或32个8比特的元素,128个1比特的元素以及所有其它可能的组合。
KW表示内核的宽度(以元素为单位)。不失一般性,内核中的每个元素都可以是REB比特。否则,SIMD寄存器可以被不同地划分,使得每个元素的大小(以比特为单位)最终将等于内核元素的大小(以比特为单位),如果硬件支持该比特深度,或者如果不支持,则促进加载时元素大小为下一个支持的大小。KH作为内核的高度(以元素为单位)。例如,3x3内核具有KW=3,并且KW=3。5x1内核具有KW=1,并且KH=5。
SW表示以内核(不是内核元素,而是单独内核)为单位的内核堆栈的宽度。SH表示以内核为单位的内核堆栈的高度。例如,由3x1内核组成的4x12内核堆栈具有SW=12(也等于输出通道数),SH=4(也等于输入通道数),KW=1,并且KH=3。
下面描述逐列和逐行对内核进行索引。索引可以是一维的。内核可以从左到右,并且从上到下进行索引,并为它们分配从1到SW*SH的数字。下面的表3描述了一个单个内核中的权重,其中上图描绘了内核堆栈中的不同内核。
表3.内核堆栈的索引内核。
1 | 2 | 3 | … | SW |
SW+1 | SW+2 | SW+3 | … | 2*SW |
… | … | … | … | … |
(SH-1)*SW+1 | (SH-1)*SW+2 | (SH-1)*SW+3 | … | SH*SW |
每个单独内核中的权重可以逐列和逐行地类似地索引。下面的表4描述了一个单个内核中的权重,其中上面的表3描述了内核堆栈中的不同内核。内核中的元素从左到右,并且从上到下递增。
表4.内核的索引内核权重。
1 | 2 | 3 | … | KW |
KW+1 | KW+2 | KW+3 | … | 2*KW |
… | … | … | … | … |
(KH-1)*KW+1 | (KH-1)*KW+2 | (KH-1)*KW+3 | … | KH*KW |
参考图6A和图6B描述的方法可以要求行可以被寄存器宽度中的元素数量整除。换句话说:(SW*KW)mod(RWE)=0。但如果这样,则所有合理的布置都可以通过以下方式给出:
开始在越来越多的关联索引中移动内核堆栈(表3)。遍历内核,一次N(其中N=RWE)个内核,并通过从每个单独内核(表4)的对应(例如,相同)索引中挑选N(其中N=RWE)个权重来组成槽。然后选择在表3中的索引之后的另一(或相同)批的N个内核,并通过挑选具有对应索引的N个权重来组成另一个槽。可以选择相同的内核,但选择的权重必须不同,否则权重最终会重复。因此,例如,最直接和合理的布置将是图6A中描绘的那些布置:内核1权重1,接着是内核2权重1,接着是内核3权重1,...,接着是内核N(其中N等于RWE)权重1,接着是内核1权重2,...,接着是内核N权重2,...,接着是内核1权重M(其中M=KW*KH),...,接着是内核N权重M,接着第二批N个内核的完全相同的模式,直到所有内核都穷尽为止。
以下遍历将给出所有可能的布置(其中大多数不是直接的但肯定是可能的):从内核堆栈的N个不同列中选择N个内核(换句话说,没有来自内核堆栈的相同列的两个内核)。然后从N(其中N=RWE)权重组成一个槽,每个权重来自上述选定的内核中的一个。通过从另一(或相同的)批的N个内核中的另一个N个权重中生成另一个槽来重复该过程,其限制是每个内核必须来自堆栈的单独列,直到所有权重都穷尽为止。由上面或下面提到的任何遍历给出的每个单独的布置需要稍微不同的算法(无论是软件代码还是硬件逻辑)以获得正确的输出。在一些实施例中,相同的算法不能应用于不同的布置。
关于参考图7描述的方法,上面的定义适用,但遍历略有不同。在该实施例中,所选择的内核可以限于一列(而不是强制它们来自不同的列,如参考图6A和图6B描述的方法)。表3可以从上到下和从左到右(而不是从左到右和从上到下)重新索引,如表5中所示。
表5.内核堆栈的索引内核。
1 | SH+1 | 2*SH+1 | … | (Sw-1)*SH+1 |
2 | SH+2 | 2*SH+2 | … | (Sw-1)*SH+2 |
… | … | … | … | … |
SH | 2*SH | 3*SH | … | Sw*SH |
在越来越多的关联索引中遍历内核堆栈(表5)。遍历内核,一次N(其中N=RWE)个内核,并从每个单独内核(表4)的对应(例如,相同)索引组成N(其中N=RWE)个权重的槽。然后根据表5中的索引选择另一(或相同)批的N个内核,并从具有对应索引的另一N个权重形成槽。通过该遍历可以实现所有可能的(但通常不是直接的)布置:从内核堆栈的同一列中选择N个内核。然后从N(其中N=RWE)个权重中形成槽,每个权重来自上述选择的内核中的一个。通过从另一个(或相同)批的N个内核中挑选另一N个权重来重复该过程,其限制是所有内核必须来自堆栈的同一列,直到所有权重都穷尽为止。不同的布置可能需要稍微不同的算法。
逐块确定输出激活图的示例过程
在重新排序输入激活图(例如,输入激活图404、408、412和416)的像素值并逐槽地重新排序存储器中的内核堆栈208的内核的权重值(例如,图5A-5C所示的重新排序)之后,可以逐块处理权重值以确定输出激活图,如下面的示例伪码所概述:
(1)对于重新排序的输出激活图的每一行r:
(2)对于输出激活图的每一列c:
(3a)将位置(c,r)处的重新排序的输出激活图的值设定为零值。
(3b)对于内核堆栈的每个块:
(4)对于内核堆栈的该块的每个槽,以及对应的重新排序的输入激活图像素值(或者两个或更多个对应的重新排序的输入激活图像素值):
(5a)将对应的重新排序的(多个)输入激活图像素值加载并复制到SIMD寄存器。
(5b)FMADD重新排序的输出激活图像素值、重新排序的输入激活图像素值和槽,
其中FMADD表示融合乘加运算。
结束(4)。
结束(3b)。
(3c)将重新排序的输出激活图的值的集群存储到位置(c,r)处的输出激活图。
结束(2)。
结束步骤(1)。
在一些实现方式中,动作(4)和(5)可以完全展开以用于FMADD操作的有效实现方式。
上面的示例伪码可以写为:
图8示意性地示出了卷积神经网络800的示例3D卷积层,用于示出逐块地确定输出激活图。CNN 800是图2中所示的CNN 200的示例,其中两个输入通道204用于接收两个输入激活图204a1和204a2(M=2),以及两个输出通道212用于确定两个输出激活图212a1和212a2(N=2)。在图8中,内核堆栈208包括内核208a1、208a2、208b1和208b2,每个内核具有1乘1(Ky=1且Kx=1)的维度。如果给定权重值的数据类型并且寄存器的宽度是2,SIMD寄存器可以包括内核堆栈208的两个权重值,则具有一个槽的块2包括内核208a1和内核208a2,并且具有一个槽的块2包括内核208b1和内核208b2。
利用从零开始的索引,确定输出通道212的通道0(即,输出激活图212a1)、行0和列0,缩写为输出(0,0,0)和输出(1,0,0),执行以下操作:
(1)加载输入(0,0,0)并复制到SIMD寄存器(输入(0,0,0)表示输入通道204的通道0(即,输入激活图204a1)、行0和列0)。
(2)将输入(0,0,0)乘以块1(包括内核208a1和208a2)的槽,并且通过动作(2)累加。
(3)加载输入(1,0,0)并复制到SIMD寄存器。
(4)将输入(1,0,0)乘以块2(包括内核208b1和208b2)的槽。
(5)连续存储输出(0,0,0)和输出(1,0,0)以保持交错排序。
为了确定输出(0,0,1)和输出(1,0,1),执行以下操作:
(1)加载输入(0,0,1)并复制到SIMD寄存器。
(2)将输入(0,0,1)乘以块1的槽。
(3)加载输入(1,0,1)并复制到SIMD寄存器。
(4)将输入(1,0,1)乘以块2的槽,并且通过动作(2)累加。
(5)连续存储输出(0,0,1)和输出(1,0,1)。
可以重复上述过程以确定输出(0,1,0)和输出(1,1,0)以及输出(0,1,1)和输出(1,1,1)。
在重新排序输入激活图的像素值并逐槽重新排序存储器中的内核堆栈208的内核的权重值(例如,图6A和图6B中所示的重新排序)之后,可以逐块地处理权重值以确定输出激活图,如下面的示例伪码所概述:
在此描述的不同布置影响斜体部分。换句话说,取决于如何布置内核,加载和相乘的交错激活图的输入的对应槽可以是不同的。
在重新排序输入激活图的像素值并逐槽地重新排序存储器中的内核堆栈208的内核的权重值(例如,图7中所示的重新排序)之后,可以逐块地处理权重值以确定输出激活图,如下面的示例伪码所概述:
对于输出激活图的每一行:
在此描述的不同布置影响倾斜部分。换句话说,取决于如何布置内核,加载和相乘的交错激活图的输入的对应槽可以是不同的。
有利地,在一些实施例中,由于槽设置,复制有效地工作:内核堆栈的宽度是SIMD寄存器可以包括的权重值的数量的倍数。在一些实施例中,内核堆栈的宽度可以不是SIMD寄存器可以包括的权重值的数量的倍数。为了有效地实施在此公开的方法,所执行的加载和存储的类型可以是专用的。可以设计CNN,使得内核堆栈的宽度是SIMD寄存器可以包括的权重值的数量的倍数。利用这种设计,可以实现更好的SIMD利用率。
采用跨越多行内核堆栈权重值的内核堆栈槽逐块地确定输出激活图的示例过程
图9A-9B示意性地示出了卷积神经网络的示例3D卷积层900,用于示出逐块地确定输出激活图,其中内核堆栈槽跨越多行内核堆栈权重值。CNN 900是图2中所示的CNN 200的示例,四个输入通道用于接收四个输入激活图(M=4),以及六个输出通道用于确定六个输出激活图(N=6)。在图9A中,具有4乘6维度的内核堆栈208包括内核208a1-208a6、208b1-208b6、208c1-208c6和208d1-208d6,每个内核具有5乘3(Ky=5且Kx=3)的维度。如图9A中所示,内核208a1-208a6、208b1-208b6、208c1-208c6和208d1-208d6分别缩写为内核0-5、6-11、12-17和18-23。
内核堆栈208的内核的权重值可以由三元组(x,y,z)表示,其中x表示内核,y表示内核x中的列/宽度坐标,并且z表示内核x中的行/高度坐标。如图9A中所示,内核208a43的权重值的三元组表示具有从零开始的索引,(3,0,0)-(3,2,0),(3,0,1)-(3,2,1),(3,0,2)-(3,2,2),(3,0,3)-(3,2,3)和(3,0,4)-(3,2,4)。
在设计时将内核堆栈208的内核的权重值重新排序为槽块可能需要知道
(1)内核堆栈208被设计用于的架构的SIMD寄存器的宽度;以及
(2)内核堆栈208的内核的权重值的数据类型。
例如,如果计算机架构的SIMD寄存器具有128比特的宽度,并且权重值是半精度浮点数(即,每个16比特),则每个槽可以保持八个权重值(128比特,SIMD寄存器的宽度除以16比特(权重值的大小))。
内核堆栈208的内核可以从内核的基本布局重新排序为内核的块布局。块布局中的内核堆栈208可以包括每个三个槽的14个块。表6示出了使用三元组表示的块布局中的内核堆栈208的权重值。在图9中,采用对角线交叉阴影图案显示块0,槽0,采用垂直交叉阴影图案显示块0,槽1,并且采用交叉阴影图案显示块0,槽2。
表6.块布局中的内核堆栈208的块
有利地,重新排序内核堆栈208的权重值可以在设计时间期间发生一次。此外,输入激活图的重新排序可以每CNN的输入图像最多发生一次。例如,CNN的输入层可以将CNN的输入图像从基本布局重新排序为交错布局。图9B示出了重新排序的输入激活图420。
在一些实施例中,内核堆栈槽每个仅包括内核堆栈中的权重值的一行或一行的一部分。因此,当逐块确定输出激活图时,可以将重新排序的输入图的像素值复制到SIMD寄存器。将重新排序的输入图的像素值复制到SIMD寄存器的过程可以被称为构造输入槽。通过以交错布局复制输入图的一个通道中的像素,可以以交错布局中的输入图构造输入槽。
在一些实施例中,内核堆栈槽可以跨越多行权重值。表6和图9A示出了跨越内核堆栈208的多行权重值的一些槽。例如,表6中的块0,槽0横跨两行。如果内核堆栈槽跨越内核堆栈208的多行权重值,则SIMD寄存器可以包含两个或更多个像素值的值。可以加载像素值并将其复制到两个或更多个SIMD寄存器。这可能是必要的,因为每个内核的每行中的所有权重值必须乘以输入激活图的通道中的像素值。可以从交错布局中的输入图构造输入槽。例如,构造输入槽可以包括将第一输入通道的对应像素值复制六次并且将第二输入通道的对应像素值复制两次。作为另一示例,构造输入槽可以包括将第二输入通道的对应像素复制四次,并且将第三输入通道的对应像素复制四次。作为另一示例,构造输入槽可以包括将第三输入通道的对应像素复制两次并且将第四(和最后)输入通道的对应像素复制六次。
图9B示出了用于图9A中所示的示例3D卷积层900的交错布局中的重新排序的输入激活图420。输入像素值的交错模式可以继续到输入激活图420的边界。具有相同阴影图案的像素属于基本布局中的相同输入激活图。在图9B中,每个三元组(x,y,z)表示通道x的行y、列z处的像素值。表7示出了用于在块布局中执行涉及内核堆栈208的块的一个卷积的输入槽。
表7.表6中所示的块布局中的内核堆栈208的输入图槽。
在逐块确定输出激活图之前重新排序输入激活图的像素值和内核权重值的示例
过程
图10是逐块确定卷积神经网络(CNN)的卷积层的输出激活图的示例过程1000的流程图,该逐块可选地包括将输入激活图的像素值和内核的权重值重新排序为槽块。过程1000在框1004处开始,其中接收卷积神经网络的卷积层200。卷积层可以是三维卷积层。如参考图2所示,卷积层200可以具有M个输入通道204,用于接收M个输入激活图。输入激活图可以具有Q的输入激活图宽度和P的输入激活图高度。输入激活图可以具有相同的输入激活图宽度Q和输入激活图高度P。
卷积层200可以包括内核的内核堆栈208。内核堆栈208包括M行内核和N列内核,每列也称为内核堆栈208的过滤器组。内核堆栈208的内核可具有Kx权重值的内核宽度以及Ky权重值的内核高度,总共Ky*Kx权重值。内核堆栈208的内核可以具有相同的内核宽度Kx和内核高度Ky。
卷积层200可以具有N个输出通道212,用于产生N个输出激活图。每个输出激活图可以是内核堆栈208的过滤器组和对应的输入激活图的三维卷积的结果。输出激活图可以具有Q’的输出激活图宽度和P’的输出激活图高度。输出激活图可以具有相同的输出激活图宽度Q,和输出激活图高度P’。
在判定框1008处,可以确定内核堆栈208的内核的权重值的格式。如果内核堆栈208的内核的权重值处于内核的基本布局中,则过程1000进行到框1008。在框1008处,内核堆栈208的内核的权重值可以从内核的基本布局重新排序为内核的块布局。可以重新排序内核的权重值以利用用于加载、算术或存储操作的矢量操作。如参考图5A-5C所示,内核的块布局可包括权重值的槽块。槽可以是具有两个属性的权重值的有序列表。首先,在给定权重值的数据类型的情况下,槽中的权重值的数量可以与诸如SIMD寄存器的处理器寄存器可以一次包含的权重值的数量相同。例如,对于128比特SIMD寄存器,槽可以包含针对半浮点内核的8个半精度浮点权重值,或针对浮点内核的4个单精度浮点权重值。其次,可以通过沿内核堆栈208的宽度维度(M)遍历,之后是沿内核堆栈208的高度维度(N)遍历,之后是沿单个内核的宽度维度(Kx)遍历,以及之后是单个内核的高度维度(Ky)遍历来迭代地填充槽。遍历继续直到槽完全填充内核堆栈208的内核的权重值。因为训练CNN可以是离线过程(例如,在诸如计算机服务器、个人计算机、平板计算机、移动设备或嵌入式设备的计算设备使用所得到的CNN来执行图像分割和眼睛跟踪之前),在框1008处重新排序内核的权重值可以有利地以离线方式(例如,在学习内核的权重值之后)执行一次,而没有神经网络的运行时间性能的损失。
在判定框1006处,如果内核堆栈208的内核的权重值处于内核的块布局中,则过程1000进行到框1012。在一些实施例中,在实施过程1000的程序的编译时静态地将内核的权重值从基本布局重新排序为内核的块布局。在编译时这种重新排序是可能的,因为内核堆栈208的宽度维度(M)、内核堆栈208的高度维度(N)、输入激活图宽度Q、输入激活图高度P,或包括卷积层200的CNN的特定设置可以在编译时是已知的。因此,在运行时可能不需要在运行时重新排序内核堆栈208的内核的权重值。
在框1012处,可以接收卷积层200的输入激活图。例如,可以接收卷积层200的M个输入通道204的M个输入激活图。输入激活图可以具有Q的输入激活图宽度和P的输入激活图高度。输入激活图可以具有相同的输入激活图宽度Q和输入激活图高度P。
在判定框1014处,可以确定输入激活图的像素值是处于输入激活图的基本布局还是交错布局中。如果输入激活图的像素值在输入激活图的基本布局中,则过程1000进行到框1016。在框1016处,将输入激活图的像素值重新排序为包括像素值集群的交错布局。例如,在卷积层接收M个输入激活图之后,输入激活图的像素值可以从输入激活图的基本布局(基本输入激活图布局)重新排序为输入激活图的交错布局(交错输入激活图布局)。利用基本输入激活图布局,可以逐个通道地对输入激活图进行排序,使得第一输入激活图的所有像素值可以存储在第二输入激活图的所有像素之前(就存储器位置而言)等等。
在一些实现方式中,可以采用第一输入激活图的第一像素值,之后是第二输入激活图的第一像素,对像素值进行排序,依此类推,直到第M个输入激活图的第一像素值为止。第M个输入激活图的第一像素值之后可以是第一输入激活图的第二像素值,第二输入激活图的第二像素值,依此类推,直到第M个输入激活图的第二像素值为止。该重新排序可以继续,直到所有M个输入激活图的所有像素值已经被类似地排序为止。重新排序过程产生大的重新排序的输入激活图,其包括M个单独的输入激活图。重新排序的输入激活图中的每个索引位置可以包括来自该索引处的单独输入激活图的像素值的集群。
在判定框1014处,如果输入激活图的像素值处于交错输入激活图布局中,则过程1000进行到框1020。在一些实施例中,输入激活图的像素值可以处于交错输入激活图布局中,因为输入激活图的像素值可以是另一个卷积层的输出激活图。该另一卷积层的输出激活图可以处于交错输入激活图布局中,因为其输入激活图处于交错输入激活图布局中。有利地,仅需要对初始卷积层的输入激活图(例如,CNN的输入激活图)进行一次重新排序,因为卷积层的所有输入和输出都可以保持数据排序。因此,在多轮数据重新排序时不需要浪费处理时间。
在框1020处,可以逐块地确定交错输出激活图布局中的卷积层的输出激活图。例如,对于输出激活图的块:FMADD对应的重新排序的输出激活图像素值、重新排序的输入激活图像素值和内核块,其中FMADD表示融合乘加运算。在一些实现方式中,用于输出激活图的交错布局(交错输出激活图布局)中的卷积层的输出激活图可被排序成用于输出激活图的基本布局(基本输出激活图布局)。利用交错输出激活图布局,可以采用第一输出激活图的第一像素值,之后是第二输出激活图的第一像素等等直到第N个输出激活图的第一像素值为止,来对像素值排序。用于输出激活图的基本布局(基本输出激活图布局)中的输出激活图的数量可以用N表示。利用基本输出激活图布局,可以逐个通道地对输出激活图进行排序,使得属于第一输出激活图的所有像素值可以存储在属于第二输出激活图(就存储器位置而言)等等的所有像素之前。
可选地,在一些实现方式中,交错输出激活图布局中的重新排序输出激活图的像素值可以被排序为基本输出激活图布局。例如,第一输出激活图可以包括重新排序的输出激活图的第一像素、第(N+1)个像素、第(2N+1)个像素等。作为另一示例,第二输出激活图可包括重新排序的输出激活图的第二像素、第(N+2)个像素、第(2N+2)个像素等。作为另一示例,第N个输出激活图可以包括重新排序的输出激活图的第N个像素、第(2*N)个像素、第(3*N)个像素等。
内核堆栈的内核的示例数据布局
上面公开的交错布局可用于执行卷积层的有效处理。矩阵乘法方法可以是许多平台上的高度优化的例程。并且它一直针对不同的架构不断进行优化。其它方法可以使用矩阵乘法来执行卷积层。然而,这些其它方法需要对每个卷积层实例进行数据复制(例如,执行“im2col”操作)。下面公开的方法显示了如何利用矩阵乘法,但消除了可能需要的昂贵的数据复制。
图11示意性地示出了将内核堆栈208的内核的权重值重新排序为包括槽块的块格式的示例。在一些实现方式中,所示出的内核布局可以用于可分离的内核。可分离的内核可以具有为1的宽度维度Kx或高度维度Ky。可分离的内核可用于许多卷积神经网络(CNN),精度损失很小。使用可分离的内核可以显著减少CNN中的浮点运算量,因为可分离的内核每次在单个维度上操作。例如,具有3x3内核的卷积层可以替换为具有1x3内核的层,之后是具有3x1内核的层(或具有3x1内核的层,之后是1x3内核层)。
使用图4中所示的输入激活图布局,输入激活图可以由等式(4)的矩阵乘法运算中的A矩阵表示。
AxB=C 等式(4)
内核堆栈可以由B矩阵表示。输出激活图可以由C矩阵表示,该C矩阵可以是后续CNN层的输入激活图。在一些实现方式中,等式(4)的矩阵乘法可以被配置为输出输出激活图的转置而不是输出激活图。利用该配置,输出激活图可以直接适合作为后续CNN层的输入激活图,这可以使用矢量化存储来实现。所使用的矢量化存储在一些实现方式中可以是有利的,因为利用用于输出激活图的交错布局,具有相同索引的输出激活图的像素值可以聚集在一起。
在图11中,由A矩阵表示的输入激活图可以具有类似于图4中所示的交错输入激活图布局的交错布局。例如,A矩阵的第一行可以包括第一输入激活图的第一像素值(第一输入激活图的位置(0,0)处的像素值),之后是第二输入激活图的第一像素值(第二输入激活图的位置(0,0)处的像素值),依此类推,直到第M个输入激活图的第一像素值(第M个输入激活图的位置(0,0)处的像素值)为止。第M个输入激活的第一像素值之后可以是第一、第二和第M个输入激活图的第二像素值(输入激活图的位置(0,1)处的像素值),并且之后是第一、第二和第M个输入激活图的第三像素值(输入激活图的位置(0,2)处的像素值)。
A矩阵的第二行包括第一、第二和第M个输入激活图的第二像素值(输入激活图的位置(0,1)处的像素值),之后是第一、第二和第M个输入激活图的第三像素值(输入激活图的位置(0,2)处的像素值),并且之后是第一、第二和第M个输入激活图的第四像素值(输入激活图的位置(0,3)处的像素值的值)。
图11中的矩阵A可能看起来需要数据复制。然而,通过修改输入激活图的跨步可以避免数据复制。行步幅可以是M,即输入通道的数量,而不是移动行的整个宽度以到达下一行。因为像素值在存储器中可以是连续的,所以修改的缩短跨步可能看起来需要数据复制而不需要实际复制数据。有利地,如果M是SIMD寄存器宽度的倍数,则修改的跨步可以保持每个加载操作可以是对齐的加载操作。对某些处理器架构可能需要对齐的加载操作。此外,对于一些处理器架构,在与未对齐的加载操作相比时,对齐的加载操作可以有利地导致性能改进,因为在访问存储器时停顿较少。因此,交错数据布局允许作为实践优化的这种跨越。
图11示出了1x3内核对交错输入图像的应用。因此,考虑到填充,Winput=Woutput+2。A矩阵在其中具有Winput*3M=(Woutput+2)*3M的值,因为对于行中的每一列,它需要来自每个输入图像的3个值来计算整个输出行。因此,C矩阵大小仅仅是指Woutput*N的单行,因为它具有来自每个输出通道的像素的输出宽度数,其中有N个输出通道。为了计算完整卷积,如果输入通道的高度是H,则图11中所示的矩阵乘法的H数获得最终输出。有利地,可以执行H个矩阵乘法而不是一个大矩阵乘法。具有减少跨步以防止需要数据复制的A矩阵的设置可能仅适用于每次单行的输出激活图。当计算输出激活图的下一行时,在此公开的方法不使用在可分离内核情况中来自的前一行的任何数据。
图11中的B矩阵示出了内核堆栈208的1×3内核的块布局。在一些实现方式中,利用可分离内核,1×3内核之后可以是与表示3×1内核的第二矩阵B2的乘法,如等式(5)所示。
A2xB2=C2,等式(5)
其中A2表示3×1内核的输入激活图,并且C2表示3×1内核的输出激活图。
在一些实现方式中,表示3×1内核的第二矩阵B2可以具有与表示1×3内核的矩阵B的布局类似或相同的布局。然而,A2矩阵可以是C矩阵的转置。对等式(4)中所示的矩阵乘法方法的简单修改可以导致C矩阵被保存为其转置。保存C矩阵作为其转置,由B2矩阵表示的内核(例如,3×1内核)可以沿着与由B矩阵表示的内核(例如,1×3内核)使用相同的缩短跨越技术移动的方向相反的方向移动。
在一些实施例中,使用可分离的内核,输入激活图可以以这样的方式布置:如果内核是N×1,则数据处于列为主的格式,并且如果内核是1×N,则数据处于行为主的格式。有利地,数据处于列为主的格式还是处于行为主的格式可能不重要,因为由于矩阵乘法而将转置矩阵保存在计算上并不昂贵。由于交错布局,这仍然利用了矢量化存储。例如,在可分离的情况下,一个N×1层之后是1×N层(反之亦然)。只要将转置保存在第一层之外,该方法对于任一内核设置(即1×N或N×1)看起来都相同。缩短的跨越技术可以是允许在没有数据复制的情况下执行计算的方法。将该乘法技术用于任何类型的可分离内核设置(即1×N或N×1)都没有障碍。
可以使用矢量化存储有利地实施将C矩阵保存为其转置。保存结果的转置并直接保存结果,无论CNN的下一层需要哪一个,都可以在没有计算费用或计算费用最小的情况下执行。因此,可能不需要数据重组或重复。如果为C矩阵保存了转置,则输出可以直接用作下一个CNN层的输入。示例性能改进
使用具有9.6GFlops/核心的绝对最大电位的处理器评估在此公开的系统和方法的示例。GFlop是十亿浮点指令,并且GFlops指的是每秒可以完成多少十亿浮点指令。通过填充SIMD寄存器,可以在每个处理器周期执行若干浮点运算。例如,对于例如保持四个浮点数的寄存器,可以在每个周期执行四个浮点运算。
然而,9.6GFlops/核心在实践中可能是不可达的数字,因为它假设每个周期执行一个多累积指令而其输出没有任何延迟,或任何必要或有用的控制代码。例如,如果在同一周期中不执行乘法运算和加法运算,这可以减少融合乘法和加法所涉及的一些延迟,则可达到的最大潜力可以是4.8GFlops/核心。
对于全空间卷积层(3×3个内核),当SIMD寄存器包括八个浮点数时,实现了大约6个GFlops/核心(绝对最大GFlops的利用率为67%)。对于可分离的层(1x3或3x1个内核),实现了大约5GFlops/核心(绝对最大GFlops的56%利用率)。可分离设置在层中需要较少的浮点运算,并且通常在每个循环中执行较少的运算,这导致每个CNN层的性能稍差。然而,采用可分离层实现了整体更好的网络性能。结果基于实验和投影的组合,同时一次一个地针对特定的内核大小,在组装中优化在此公开的方法。
可以采用在此公开的方法实现的每个核心的浮点指令的数量在不同的实现方式中可以是不同的。例如,每个核心的浮点指令的数量可以在4-100、10-90、25-75、40-60或其任何组合的GFlops/核心的范围内。可以采用在此公开的方法实现的最大GFlops的百分比利用率在不同的实现方式中可以是不同的。例如,最大GFlops的百分比利用率可以是30%-95%、40%-90%、50%-80%、60%-70%或其任何组合。
根据GFlops/核心观察到的性能基于600MHz的处理器时钟。如果时钟速度加倍,则所有这些数字将增加大约两倍,这可能取决于诸如存储器组的交互组件的其它延迟时间。因此,绝对最大GFlops的百分比利用率可能不会受到处理器时钟的显著影响。
观察到的性能改进是在矢量架构上以高效方式重新排序和处理数据的能力的结果。该类型的性能加速可以是与处理器无关的,并且相同或类似的益处可以适用于其它矢量芯片。
示例应用和优势
附加的矢量化操作
在此公开的输入激活图的交错布局可用于典型的卷积神经网络(CNN)中的其它矢量化操作,否则其可能难以矢量化。例如,最大池化是一种下采样操作,其可以应用于所有输入激活图。最大池化可以基于输入激活图中的像素窗口(对于每个维度中因子为2的下采样,为2×2)。最大池化可以将每个窗口的最大值保存为下采样输出激活图中的像素的值。然后,最大池化可以包括在每个维度中适当地跨越,使得在查找窗口中的最大值时像素值不重叠。如果没有数据重新排序,最大池化可能是有点棘手的矢量化操作,因为它需要在矢量、未对齐的载荷、多个载荷或完全不填充矢量之间进行水平比较的一些组合。利用在此公开的交错输入激活图布局,每个输入激活图的像素值可以并排存储。因此,可以同时对每个输入激活图执行最大池化,并且如果输入激活图的数量是矢量宽度的倍数,则可以完全矢量化。有利地,在此公开的方法可以用于传统上难以在单个图像上矢量化的许多操作(例如,上采样或诸如转置的操作)。
无需数据复制或后续重新排序
在一些实现方式中,输入激活图的交错布局可允许在没有或最小数据复制的情况下执行操作。因此,存储器利用效率可以很高,这对于嵌入式系统是有用的,该嵌入式系统通常可以具有较少的存储器和较少量的低延迟存储器。
此外,仅需要对初始卷积层的输入激活图(例如,CNN的输入激活图)进行一次重新排序,因为卷积层的所有输入和输出都可以保留数据排序。因此,在多轮数据重新排序时不需要浪费处理时间。
功率效率
通常,处理数据所花费的时间越少,处理器可以空闲或解锁的时间越长。通过利用在此公开的方法和系统有效地处理数据,可以通过在运行CNN的同时有效地使用处理器资源来实现功率节省。此外,通过消除数据复制以实现有效的存储器利用,可能需要较少的系统范围资源用于存储器层级中的级别之间的传输。这可以导致功率节省,因为可以更少地访问主存储器并且因为可以更好、最优或最大地利用本地高速缓存的存储器。
对匹配寄存器宽度的输入数量的相关性
在此公开的方法和系统可能不会导致具有100%SIMD利用率的每个可能的卷积层。相反,可以为许多层实现非常高数量的利用。对于某些卷积层,在完全填充寄存器以进行卷积层操作方面,可以实现完全利用。SIMD利用可以取决于层的输入/输出的数量,其是可以适合处理器架构上的寄存器的值的数量的倍数。然而,该相关性可能不是高度限制的,因为设计和训练卷积神经网络的过程可以是灵活的。例如,可以设计CNN使得CNN通常可以具有对于本公开的方法和系统工作良好的层维度。
示例可穿戴显示系统
在一些实施例中,用户设备可以是或可以包括在可穿戴显示设备中,其可以有利地提供更沉浸式虚拟现实(VR)、增强现实(AR)或混合现实(MR)体验,其中数字再现图像或其部分以它们看起来是或可能被认为是真实的方式呈现给佩戴者。
不受理论的限制,据信人眼通常可以解释有限数量的深度平面以提供深度感知。因此,通过向眼睛提供与这些有限数量的深度平面中的每一个深度平面相对应的图像的不同呈现,可以实现高度可信的感知深度模拟。例如,包含波导堆叠的显示器可以被配置为佩戴定位在用户或观看者的眼睛前方。通过使用多个波导将来自图像注入装置(例如,多路复用显示器的离散显示器或输出端,其经由一根或多根光纤传输图像信息)的光以对应于与特定波导相关联的深度平面的特定角度(和发散量)引导到观看者的眼睛,可以利用波导堆叠来向眼睛/大脑提供三维感知。
在一些实施例中,可以利用两个波导堆叠,一个用于观看者的每只眼睛,以向每只眼睛提供不同的图像。作为一个示例,增强现实场景可以使得AR技术的佩戴者看到以人、树、背景中的建筑物和混凝土平台为特征的真实世界公园式设置。除了这些项目之外,AR技术的佩戴者还可以感知到他“看到”站在真实世界平台上的机器人雕像,以及似乎是大黄蜂的拟人化的飞过的类似卡通的头像角色,即使机器人雕像和大黄蜂在真实世界中不存在。(多个)波导堆叠可用于生成与输入图像对应的光场,并且在一些实现方式中,可穿戴显示器包括可穿戴光场显示器。用于提供光场图像的可穿戴显示设备和波导堆叠的示例在美国专利公开No.2015/0016777中描述,其所包含的全部内容通过引用结合于此。
图12示出了可穿戴显示系统1200的示例,其可用于向显示系统佩戴者或观看者1204呈现VR、AR或MR体验。可穿戴显示系统1200可被编程为执行在此所描述的任何应用或实施例(例如,执行CNN,重新排序输入激活图或内核的值,眼睛图像分割或眼睛跟踪)。显示系统1200包括显示器1208,以及支持该显示器1208的功能的各种机械和电子模块和系统。显示器1208可以耦合到框架1212,该框架1212可由显示系统佩戴者或观看者1204佩戴,并且被配置为将显示器1208定位在佩戴者1204的眼睛前方。显示器1208可以是光场显示器。在一些实施例中,扬声器1216耦合到框架1212并且在一些实施例中邻近用户的耳道放置,另一个扬声器(未示出)放置在用户的另一耳道附近以提供立体声/可成形声音控制。显示器1208诸如通过有线引线或无线连接可操作地耦合1220到本地数据处理模块1224,该本地数据处理模块1224可以以各种配置安装,诸如固定地附接到框架1212,固定地附接到用户佩戴的头盔或帽子,嵌入耳机中,或以其它方式可拆卸地附接到用户1204(例如,以背包式配置,以带束耦合式配置)。
本地处理和数据模块1224可以包括硬件处理器,以及非暂态数字存储器,诸如非易失性存储器(例如闪存),两者都可以用于辅助数据的处理、高速缓存,和存储。数据包括如下数据:(a)从传感器捕获(其可以例如可操作地耦合到框架1212或以其它方式附接到佩戴者1204),诸如图像捕获设备(诸如照相机)、麦克风、惯性测量单元、加速度计、指南针、GPS单元、无线设备和/或陀螺仪;和/或(b)使用远程处理模块1228和/或远程数据存储库1232获取和/或处理,可能用于在这种处理或检索之后到显示器1208的通路。本地处理和数据模块1224可以由通信链路1236、1240诸如经由有线或无线通信链路可操作地耦合到远程处理模块1228和远程数据存储库1232,使得这些远程模块1228、1232可操作地彼此耦合并且可用作本地处理和数据模块1224的资源。(多个)图像捕获设备可用于捕获在眼睛图像分割或眼睛跟踪过程中使用的眼睛图像。
在一些实施例中,远程处理模块1228可以包括一个或多个处理器,其被配置为分析和处理数据和/或图像信息,诸如由图像捕获设备捕获的视频信息。视频数据可以本地存储在本地处理和数据模块1224中和/或远程数据存储库1232中。在一些实施例中,远程数据存储库1232可以包括数字数据存储设施,其可以通过因特网或“云”资源配置中的其它网络配置可用。在一些实施例中,存储所有数据并且在本地处理和数据模块1224中执行所有计算,允许从远程模块完全自主使用。
在一些实现方式中,本地处理和数据模块1224和/或远程处理模块1228被编程以执行在此公开的输入激活图或内核的重新排序值、眼睛图像分割或眼睛跟踪的实施例。例如,本地处理和数据模块1224和/或远程处理模块1228可以被编程为执行参考图10描述的过程1000和参考图2-9B和11描述的方法的实施例。本地处理和数据模块1224和/或远程处理模块1228可以被编程为在生物度量提取中使用在此公开的输入激活图或内核的重新排序值、眼睛图像分割或眼睛跟踪技术,例如以识别或认证佩戴者1204的身份。图像捕获设备可以捕获特定应用的视频(例如,用于眼睛跟踪应用的佩戴者眼睛的视频,或用于手势识别应用的佩戴者的手或手指的视频)。可以通过处理模块1224、1228中的一个或两个使用CNN来分析视频。在一些情况下,将输入激活图或内核的重新排序值、眼睛图像分割或眼睛跟踪中的至少一些卸载到远程处理模块(例如,在“云”中)可以提高计算的效率或速度。CNN的参数(例如,权重、偏置项、用于池化层的子采样因子、不同层中的内核的数量和大小、特征图的数量等)可以存储在数据模块1224和/或1232中。
视频分析的结果(例如,CNN的输出)可以由处理模块1224、1228中的一个或二者用于附加操作或处理。例如,在各种CNN应用中,可穿戴显示系统1200可以使用生物度量识别、眼睛跟踪、手势、对象、姿势等的识别或分类。例如,佩戴者的(两只)眼睛的视频可以用于眼睛图像分割,其进而可以由处理模块1224、1228用于通过显示器1208对佩戴者1204进行眼睛跟踪。可穿戴显示系统1200的处理模块1224、1228可以采用输入激活图或内核的重新排序值、眼睛图像分割或眼睛跟踪的一个或多个实施例来编程,以执行在此描述的任何视频或图像处理应用。
附加方面
在第1方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并包括:接收卷积神经网络的卷积层,其中卷积层包括内核堆栈中的内核,并且其中内核堆栈的内核处于基本内核布局中;将内核堆栈的内核的权重值从基本内核布局重新排序为包括多个内核块的块内核布局,其中内核块包括多个内核槽,并且其中内核槽包括内核堆栈的内核的多个权重值;接收卷积层的输入激活图,其中输入激活图处于基本输入激活图布局中;将输入激活图的像素值从基本输入激活图布局重新排序为包括多个输入激活图像素集群的交错输入激活图布局;以及从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,其中输出激活图处于交错输出激活图布局中,该布局包括多个输出激活图像素集群。
在第2方面,根据方面1所述的方法,其中,将内核堆栈的内核的权重值从基本内核布局重新排序为块内核布局迭代地包括:沿内核堆栈的宽度维度遍历;沿内核堆栈的高度维度遍历;沿内核堆栈的内核的宽度维度遍历;以及沿内核堆栈的内核的高度维度遍历。
在第3方面,根据方面1-2中任一项所述的方法,其中,内核块的第一内核槽对应于第一内核堆栈宽度边界,并且其中,内核块的最后一个内核槽对应于第一内核堆栈宽度边界之后的第二内核堆栈宽度边界。
在第4方面,根据方面1-3中任一项所述的方法,其中,将输入激活图的像素值从基本输入激活图布局重新排序为交错输入激活图布局迭代地包括:沿多个输入激活图的维度遍历;沿输入激活图的宽度维度遍历;以及沿输入激活图的高度维度遍历。
在第5方面,根据方面1-4中任一项所述的方法,进一步包括将输出激活图的像素值从交错输出激活图布局重新排序为基本输出激活图布局。
在第6方面,根据方面5所述的方法,其中,将输出激活图的像素值从交错输出激活图重新排序为基本输出激活图布局迭代地包括:沿交错输出激活图的宽度维度遍历;以及沿交错输出激活图的高度维度遍历。
在第7方面,根据方面1-6中任一项所述的方法,其中,从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图包括对多个内核块和多个输入激活图像素集群逐块地执行融合乘加运算。
在第8方面,根据方面7所述的方法,其中,对多个内核块和多个输入激活图像素集群逐块地执行融合乘加运算迭代地包括:针对每个输出激活图像素:将输出激活图像素的值设定为零值;以及针对多个内核块的每个内核块的每个内核槽,对每个内核槽、与内核槽和输出激活图像素对应的输入激活图像素,以及输出激活图像素执行融合乘加运算。
在第9方面,根据方面7所述的方法,其中,对多个内核块和多个输入激活图像素集群逐块地执行融合乘加运算迭代地包括:针对每个输出激活图像素:将输出激活图像素的值设定为零值;以及针对多个内核块的每个内核块的每个内核槽,对每个内核槽、与内核槽和输出激活图像素对应的至少一个输入激活图像素,以及输出激活图像素执行融合乘加运算。
在第10方面,根据方面9所述的方法,其中,至少一个输入激活图像素包括两个输入激活图像素。
在第11方面,根据方面1-10中任一项所述的方法,其中,以比特为单位的内核槽的大小和以比特为单位的输入激活图槽的大小相同。
在第12方面,根据任何方法11所述的方法,其中,以比特为单位的内核槽的大小和以比特为单位的输出激活图槽的大小相同。
在第13方面,根据方面11-12中任一方面所述的方法,其中,以比特为单位的内核槽的大小和以比特为单位的硬件处理器的寄存器的大小相同。
在第14方面,根据方面13所述的方法,其中,寄存器的大小是128比特。
在第15方面,根据方面1-14中任一项所述的方法,其中,硬件处理器包括单指令多数据处理器。
在第16方面,根据方面15所述的方法,其中,单指令多数据处理器包括矢量处理器。
在第17方面,根据方面1-16中任一项所述的方法,其中,基本内核布局中的内核堆栈的内核被布置在多个内核堆栈通道中,其中,多个内核堆栈通道的数量和输入激活图的数量相同,并且其中,内核堆栈通道的内核的数量和输出激活图的数量相同。
在第18方面,根据方面1-17中任一项所述的方法,其中,内核堆栈的内核堆栈宽度和输出激活图的数量相同。
在第19方面,根据方面1-18中任一项所述的方法,其中,基本内核布局中的内核堆栈的内核被布置在多个内核堆栈过滤器组中,其中,多个内核堆栈过滤器组的数量和输出激活图的数量相同,并且其中,内核堆栈过滤器组的内核的数量和输入激活图的数量相同。
在第20方面,根据方面1-19中任一项所述的方法,其中,内核堆栈的内核堆栈高度和输入激活图的数量是相同的。
在第21方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并包括:接收包括内核堆栈中的内核的卷积神经网络的卷积层,其中内核堆栈的内核处于包括内核槽的多个内核块的块内核布局中;接收卷积层的输入激活图,其中输入激活图处于基本输入激活图布局中;将输入激活图的像素值从基本输入激活图布局重新排序为包括多个输入激活图像素集群的交错输入激活图布局;以及从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,其中输出激活图处于包括多个输出激活图像素集群的交错输出激活图布局中。
在第22方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并包括:接收包括内核堆栈中的内核的卷积神经网络的卷积层,其中内核堆栈的内核处于包括内核槽的多个内核块的块内核布局中;接收卷积层的输入激活图,其中输入激活图处于交错输入激活图布局中;以及从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,其中输出激活图处于包括多个输出激活图像素集群的交错输出激活图布局中。
在第23方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并包括:接收包括内核堆栈中的内核的卷积神经网络的卷积层,其中内核堆栈的内核处于包括内核槽的多个内核块的块内核布局中,以及其中内核的维度是1;接收卷积层的输入激活图,其中输入激活图处于基本输入激活图布局中;将输入激活图的像素值从基本输入激活图布局重新排序为交错输入激活图布局,该布局包括通过跨步的多个输入激活图像素集群;以及从多个内核块和多个输入激活图块确定卷积层的输出激活图,其中输出激活图是包括多个输出激活图集群的转置交错输出激活图布局。
在第24方面,根据方面23所述的方法,其中,将输入激活图的像素值从基本输入激活图布局重新排序为交错输入激活图布局包括:通过跨越多个输入激活图的倍数的步幅大小,将输入激活图的像素值从基本输入激活图布局重新排序为包括多个输入激活图像素集群的交错输入激活图布局。
在第25方面,根据方面24所述的方法,其中,输入激活图的数量的倍数是一。
在第26方面,公开了一种用于有效实现卷积神经网络的卷积层的方法。该方法受硬件处理器的控制,并包括:接收包括内核堆栈中的内核的卷积神经网络的卷积层,其中内核堆栈的内核处于包括内核槽的多个内核块的块内核布局中,以及其中内核的维度是1;接收卷积层的输入激活图,其中输入激活图是包括多个输入激活图像素集群的交错输入激活图布局,其步幅大小为输入激活图的数量的倍数;以及从多个内核块和多个输入激活图块确定卷积层的输出激活图,其中输出激活图处于包括多个输出激活图集群的转置交错输出激活图布局中。
在第27方面,根据方面26所述的方法,其中,输入激活图的数量的倍数是一。
在第28方面,公开了一种计算机系统。该计算机系统包括:硬件处理器;其上存储有指令的非暂态存储器,该指令当由硬件处理器执行时,使处理器执行方面1-27中任一方面的方法。
在第29方面,根据方面28所述的计算机系统,其中,计算机系统包括移动设备。
在第30方面,根据方面29所述的计算机系统,其中,移动设备包括可穿戴显示系统。
在第31方面,公开了一种用于实现卷积神经网络(CNN)的系统。该系统包括:非暂态存储器,其被配置为存储:卷积神经网络的卷积层,其中卷积层包括内核堆栈中的内核,其中内核堆栈的内核处于基本内核布局中,其中内核堆栈的内核的权重值从基本内核布局重新排序为包括多个内核块的块内核布局,其中内核块包括多个内核槽,并且其中内核槽包括内核堆栈的内核的多个权重值;以及硬件处理器,其与非暂态存储器通信,该硬件处理器由可执行指令编程为:接收卷积层的输入激活图,其中输入激活图处于基本输入激活图布局中;将输入激活图的像素值从基本输入激活图布局重新排序为包括多个输入激活图像素集群的交错输入激活图布局;以及从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,其中输出激活图处于包括多个输出激活图像素集群的交错输出激活图布局中。在一些实施例中,可穿戴显示系统可包括用于实现CNN的系统。可穿戴显示系统可以包括显示器,该显示器被配置为向可穿戴显示系统的用户呈现虚拟图像,并且硬件处理器可以与显示器通信。
在第32方面,根据方面31所述的系统,其中,通过以下方式迭代地将内核堆栈的内核的权重值从基本内核布局重新排序为块内核布局:沿内核堆栈的宽度维度遍历;沿内核堆栈的高度维度遍历;沿内核堆栈的内核的宽度维度遍历;以及沿内核堆栈的内核的高度维度遍历。
在第33方面,根据方面31-32中任一项所述的系统,其中,内核块的第一内核槽对应于第一内核堆栈宽度边界,并且其中,内核块的最后一个内核槽对应于第一内核堆栈宽度边界之后的第二内核堆栈宽度边界。
在第34方面,根据方面31-33中任一项所述的系统,其中,为了将输入激活图的像素值从基本输入激活图布局重新排序为交错输入激活图布局,硬件处理器被编程为迭代地:沿多个输入激活图的维度遍历;沿输入激活图的宽度维度遍历;以及沿输入激活图的高度维度遍历。
在第35方面,根据方面31-34中任一项所述的系统,其中,硬件处理器被编程为:将输出激活图的像素值从交错输出激活图布局重新排序为基本输出激活图布局。
在第36方面,根据方面35所述的系统,其中,为了将输出激活图的像素值从交错输出激活图重新排序为基本输出激活图布局,硬件处理器被编程为迭代地:沿交错输出激活图的宽度维度遍历;以及沿交错输出激活图的高度维度遍历。
在第37方面,根据方面31-36中任一项所述的系统,其中,为了从多个内核块和多个输入激活图像素集群确定卷积层的输出激活图,硬件处理器被编程为:对多个内核块和多个输入激活图像素集群逐块地执行融合乘加运算。
在第38方面,根据方面37所述的系统,其中,对多个内核块和多个输入激活图像素集群逐块地执行融合乘加运算,迭代地包括:针对每个输出激活图像素:将输出激活图像素的值设定为零值;以及针对多个内核块的每个内核块的每个内核槽,对每个内核槽、与内核槽和输出激活图像素对应的输入激活图像素,以及输出激活图像素执行融合乘加运算。
在第39方面,根据方面37所述的系统,其中,为了对多个内核块和多个输入激活图像素集群逐块地执行融合乘加运算,硬件处理器被编程为迭代地:针对每个输出激活图像素:将输出激活图像素的值设定为零值;以及针对多个内核块的每个内核块的每个内核槽,对每个内核槽、与内核槽和输出激活图像素对应的至少一个输入激活图像素,以及输出激活图像素执行融合乘加运算。
在第40方面,根据方面39所述的系统,其中,至少一个输入激活图像素包括两个输入激活图像素。
在第41方面,根据方面31-40中任一项所述的系统,其中,以比特为单位的内核槽的大小和以比特为单位的输入激活图槽的大小相同。
在第42方面,根据任何方面41所述的系统,其中,以比特为单位的内核槽的大小和以比特为单位的输出激活图槽的大小相同。
在第43方面,根据方面41-42中任一项所述的系统,其中,以比特为单位的内核槽的大小和以比特为单位的硬件处理器的寄存器的大小相同。
在第44方面,根据方面43所述的系统,其中,寄存器的大小是128比特。
在第45方面,根据方面31-44中任一项所述的系统,其中,硬件处理器包括单指令多数据处理器。
在第46方面,根据方面45所述的系统,其中,单指令多数据处理器包括矢量处理器。
在第47方面,根据方面31-46中任一项所述的系统,其中,基本内核布局中的内核堆栈的内核被布置在多个内核堆栈通道中,其中,多个内核堆栈通道的数量和输入激活图的数量相同,以及其中,内核堆栈通道的内核的数量和输出激活图的数量相同。
在第48方面,根据方面31-47中任一项所述的系统,其中,内核堆栈的内核堆栈宽度和输出激活图的数量相同。
在第49方面,根据方面31-48中任一项所述的系统,其中,基本内核布局中的内核堆栈的内核被布置在多个内核堆栈过滤器组中,其中,多个内核堆栈过滤器组的数量和输出激活图的数量相同,以及其中,内核堆栈过滤器组的内核数量和输入激活图的数量相同。
在第50方面,根据方面31-49中任一项所述的系统,其中,内核堆栈的内核堆栈高度和输入激活图的数量相同。
结论
在此描述和/或附图中描绘的过程、方法和算法中的每一个可以在由一个或多个物理计算系统、硬件计算机处理器、专用电路和/或配置为执行具体和特定计算机指令的电子硬件执行的代码模块中体现,并且完全或部分地由代码模块自动化。例如,计算系统可以包括用特定计算机指令或专用计算机、专用电路等编程的通用计算机(例如服务器)。代码模块可以被编译并链接到可执行程序中,安装在动态链接库中,或者可以用解释的编程语言编写。在一些实现方式中,特定操作和方法可以由特定于给定功能的电路执行。
此外,本公开的功能的某些实现方式在数学上、计算上或技术上足够复杂,以使得专用硬件或一个或多个物理计算设备(利用适当的专用可执行指令)可能有必要执行功能,例如由于所涉及的计算的量或复杂性或者基本上实时地提供结果。例如,视频可以包括许多帧,每个帧具有数百万个像素,并且需要专门编程的计算机硬件来处理视频数据以在商业上合理的时间量内提供所需的图像处理任务或应用。
代码模块或任何类型的数据可以存储在任何类型的非暂态计算机可读介质上,诸如包括硬盘驱动器、固态存储器、随机存取存储器(RAM)、只读存储器(ROM)、光盘、易失性或非易失性存储设备,它们的组合等的物理计算机存储设备。方法和模块(或数据)还可以作为生成的数据信号(例如,作为载波或其它模拟或数字传播信号的一部分)在各种计算机可读传输介质(包括基于无线的和有线的/基于电缆的介质)上发送,并且可以采用多种形式(例如,作为单个或多路复用模拟信号的一部分,或者作为多个离散数字分组或帧)。所公开的过程或过程步骤的结果可以永久地或以其它方式存储在任何类型的非暂态有形计算机存储设备中,或者可以经由计算机可读传输介质传送。
在此描述和/或附图中描绘的流程图中的任何过程、框、状态、步骤或功能应当理解为潜在地表示代码模块、代码段或代码部分,其包括用于实现过程中的特定功能(例如,逻辑或算术)或步骤的一个或多个可执行指令。各种过程、块、状态、步骤或功能可以与在此提供的说明性示例组合、重新排列、添加、删除、修改或以其它方式改变。在一些实施例中,附加或不同的计算系统或代码模块可以执行在此描述的一些或全部功能。在此描述的方法和过程也不限于任何特定序列,并且与其相关的框、步骤或状态可以以适当的其它顺序执行,例如,以串行、并行或以一些其它方式。可以向所公开的示例实施例添加任务或事件或从中移除任务或事件。此外,在此描述的实现方式中的各种系统组件的分离是出于说明性目的,并且不应被理解为在所有实现方式中都需要这种分离。应当理解,所描述的程序部件、方法和系统通常可以一起集成在单个计算机产品中或打包成多个计算机产品。许多实现方式变化都是可能的。
过程、方法和系统可以在网络(或分布式)计算环境中实现。网络环境包括企业范围的计算机网络、内联网、局域网(LAN)、广域网(WAN)、个人局域网(PAN)、云计算网络、众包计算网络、互联网和万维网。网络可以是有线或无线网络或任何其它类型的通信网络。
本公开的系统和方法各自具有若干创新方面,其中没有一个单独地对在此公开的期望属性负责或要求。上述各种特征和过程可以彼此独立地使用,或者可以以各种方式组合。所有可能的组合和子组合都旨在落入本公开的范围内。对本领域技术人员来说,对本公开中描述的实现方式的各种修改是显而易见的,并且在不脱离本公开的精神或范围的情况下,在此定义的一般原理可以应用于其它实现方式。因此,权利要求不旨在限于在此所示的实现方式,而是与符合本公开、在此公开的原理和新颖特征的最宽范围相一致。
在单独实现方式的上下文中在本说明书中描述的某些特征也可以在单个实现方式中组合实现。相反,在单个实现方式的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实现方式中实现。此外,尽管上面的特征可以描述为以某些组合并且甚至最初如此声称地起作用,但是在一些情况下可以从组合中删去来自所声称的组合的一个或多个特征,并且所声称的组合可以针对子组合或子组合的变体。对于每个和所有实施例,需要单个特征或特征组并非必需或必不可少。
除非另有说明,或者在所使用的上下文中以其它方式理解,否则在此使用的条件语言,诸如“能够”、“可以”、“可能”、“可”、“例如”等通常旨在传达某些实施例包括某些特征、元件和/或步骤,而其它实施例不包括某些特征、元件和/或步骤。因此,这种条件语言通常不旨在暗示一个或多个实施例以任何方式需要特征、元素和/或步骤,或者一个或多个实施例必须包括用于决定是否在任何特定实施例中包括或将要执行这些特征、元件和/或步骤(无论是否有作者输入或提示)的逻辑。术语“包含”、“包括”、“具有”等是同义的并且以开放式方式包含使用,并且不排除附加元件、特征、动作、操作等。此外,术语“或”在其包含意义上使用(而不是在其独有意义上),因此当使用时,例如,为了连接元素列表,术语“或”表示列表中的一个、一些或全部元素。另外,除非另有说明,否则本申请和所附权利要求中使用的冠词“一”、“一个”和“该”应理解为表示“一个或多个”或“至少一个”。
如在此所使用的,指代项目列表中的“至少一个”的短语是指那些项目的任何组合,包括单个成员。例如,“A、B或C中的至少一个”旨在涵盖:A,B,C,A和B,A和C,B和C,以及A、B和C。除非另外特别说明,否则诸如短语“X、Y和Z中的至少一个”的联合语言以其它方式通过上下文理解为通常用于传达项目、术语等可以是X、Y或Z中的至少一个。因此,这种联合语言通常不旨在暗示某些实施例需要X中的至少一个、Y中的至少一个和Z中的至少一个各自存在。
类似地,虽然可以以特定顺序在附图中描绘操作,但应认识到,不需要以所示的特定顺序或按顺序执行这些操作,或者执行所有示出的操作,以实现期望的结果。此外,附图可以以流程图的形式示意性地描绘一个或多个示例过程。然而,未示出的其它操作可以包含在示意性示出的示例方法和过程中。例如,可以在任何所示操作之前、之后、同时或之间执行一个或多个附加操作。另外,可以在其它实施方式中重新排列或重新排序操作。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实现方式中的各种系统组件的分离不应被理解为在所有实现方式中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以在单个软件产品中集成在一起或者被打包到多种软件产品。另外,其它实现方式在以下权利要求的范围内。在一些情况下,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。
Claims (20)
1.一种用于通过执行卷积神经网络(CNN)来进行图像识别或分类的系统,所述系统包括:
图像捕获设备,其被配置为获取图像或视频;
非暂态存储器,其被配置为存储:
所述图像或视频;以及
卷积神经网络的卷积层,
其中,所述卷积层包括内核堆栈中的内核,
其中,所述内核堆栈的所述内核处于基本内核布局中,
其中,所述内核堆栈的所述内核的权重值从所述基本内核布局重新排序为包括多个内核块的块内核布局,
其中,内核块包括多个内核槽,以及
其中,内核槽包括所述内核堆栈的所述内核的多个所述权重值;以及
硬件处理器,其与所述非暂态存储器通信,所述硬件处理器由可执行指令编程为:
从所述图像或视频提取输入激活图;
接收所述卷积层的所述输入激活图,其中,所述输入激活图处于基本输入激活图布局中;
将所述输入激活图的像素值从所述基本输入激活图布局重新排序为包括多个输入激活图像素集群的交错输入激活图布局;以及
从所述多个内核块和所述多个输入激活图像素集群确定所述卷积层的输出激活图,
其中,所述输出激活图处于包括多个输出激活图像素集群的交错输出激活图布局中。
2.根据权利要求1所述的系统,其中,通过如下迭代地将所述内核堆栈的所述内核的所述权重值从所述基本内核布局重新排序为所述块内核布局:
沿所述内核堆栈的宽度维度遍历;
沿所述内核堆栈的高度维度遍历;
沿所述内核堆栈的内核的宽度维度遍历;以及
沿所述内核堆栈的所述内核的高度维度遍历。
3.根据权利要求1所述的系统,其中,所述内核块的第一内核槽对应于第一内核堆栈宽度边界,并且其中,所述内核块的最后一个内核槽对应于所述第一内核堆栈宽度边界之后的第二内核堆栈宽度边界。
4.根据权利要求1所述的系统,其中,为了将所述输入激活图的所述像素值从所述基本输入激活图布局重新排序为所述交错输入激活图布局,所述硬件处理器被编程为迭代地:
沿多个输入激活图的维度遍历;
沿输入激活图的宽度维度遍历;以及
沿输入激活图的高度维度遍历。
5.根据权利要求1所述的系统,其中,所述硬件处理器被编程为:将所述输出激活图的像素值从所述交错输出激活图布局重新排序为基本输出激活图布局。
6.根据权利要求5所述的系统,其中,为了将所述输出激活图的所述像素值从所述交错输出激活图重新排序为所述基本输出激活图布局,所述硬件处理器被编程为迭代地:
沿所述交错输出激活图的宽度维度遍历;以及
沿所述交错输出激活图的高度维度遍历。
7.根据权利要求1-6中任一项所述的系统,其中,为了从所述多个内核块和所述多个输入激活图像素集群确定所述卷积层的所述输出激活图,所述硬件处理器被编程为:对所述多个内核块和所述多个输入激活图像素集群逐块地执行融合乘加运算。
8.根据权利要求7所述的系统,其中,对所述多个内核块和所述多个输入激活图像素集群逐块地执行所述融合乘加运算迭代地包括:
针对每个输出激活图像素:
将所述输出激活图像素的值设定为零值;以及
针对所述多个内核块的每个内核块的每个内核槽,对所述每个内核槽、与所述内核槽和所述输出激活图像素对应的输入激活图像素,以及所述输出激活图像素执行融合乘加运算。
9.根据权利要求7所述的系统,其中,为了对所述多个内核块和所述多个输入激活图像素集群逐块地执行所述融合乘加运算,所述硬件处理器被编程为迭代地:
针对每个输出激活图像素:
将所述输出激活图像素的值设定为零值;以及
针对所述多个内核块的每个内核块的每个内核槽,对所述每个内核槽、与所述内核槽和所述输出激活图像素对应的至少一个输入激活图像素,以及所述输出激活图像素执行融合乘加运算。
10.根据权利要求9所述的系统,其中,所述至少一个输入激活图像素包括两个输入激活图像素。
11.根据权利要求1-6中任一项所述的系统,其中,以比特为单位的所述内核槽的大小和以比特为单位的所述输入激活图槽的大小相同。
12.根据权利要求11所述的系统,其中,以比特为单位的所述内核槽的所述大小和以比特为单位的所述输出激活图槽的大小相同。
13.根据权利要求11所述的系统,其中,以比特为单位的所述内核槽的所述大小和以比特为单位的所述硬件处理器的寄存器的大小相同。
14.根据权利要求13所述的系统,其中,所述寄存器的所述大小是128比特。
15.根据权利要求1-6中任一项所述的系统,其中,所述硬件处理器包括单指令多数据处理器。
16.根据权利要求15所述的系统,其中,所述单指令多数据处理器包括矢量处理器。
17.根据权利要求1-6中任一项所述的系统,
其中,所述基本内核布局中的所述内核堆栈的所述内核布置在多个内核堆栈通道中,
其中,所述多个内核堆栈通道的数量和所述输入激活图的数量相同,以及
其中,内核堆栈通道的内核的数量和所述输出激活图的数量相同。
18.根据权利要求1-6中任一项所述的系统,其中,所述内核堆栈的内核堆栈宽度和所述输出激活图的数量相同。
19.根据权利要求1-6中任一项所述的系统,
其中,所述基本内核布局中的所述内核堆栈的所述内核布置在多个内核堆栈过滤器组中,
其中,所述多个内核堆栈过滤器组的数量和所述输出激活图的数量相同,以及
其中,内核堆栈过滤器组的内核的数量和所述输入激活图的数量相同。
20.根据权利要求1-6中任一项所述的系统,其中,所述内核堆栈的内核堆栈高度和所述输入激活图的数量相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310325629.2A CN116343319A (zh) | 2016-10-04 | 2017-10-03 | 用于卷积神经网络的有效数据布局 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662403930P | 2016-10-04 | 2016-10-04 | |
US62/403,930 | 2016-10-04 | ||
PCT/US2017/054987 WO2018067603A1 (en) | 2016-10-04 | 2017-10-03 | Efficient data layouts for convolutional neural networks |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310325629.2A Division CN116343319A (zh) | 2016-10-04 | 2017-10-03 | 用于卷积神经网络的有效数据布局 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110073359A CN110073359A (zh) | 2019-07-30 |
CN110073359B true CN110073359B (zh) | 2023-04-04 |
Family
ID=61758191
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310325629.2A Pending CN116343319A (zh) | 2016-10-04 | 2017-10-03 | 用于卷积神经网络的有效数据布局 |
CN201780073892.XA Active CN110073359B (zh) | 2016-10-04 | 2017-10-03 | 用于卷积神经网络的有效数据布局 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310325629.2A Pending CN116343319A (zh) | 2016-10-04 | 2017-10-03 | 用于卷积神经网络的有效数据布局 |
Country Status (9)
Country | Link |
---|---|
US (3) | US10489680B2 (zh) |
EP (1) | EP3523751A4 (zh) |
JP (3) | JP6872011B2 (zh) |
KR (1) | KR102216019B1 (zh) |
CN (2) | CN116343319A (zh) |
AU (2) | AU2017338783B2 (zh) |
CA (1) | CA3038967A1 (zh) |
IL (3) | IL293688B2 (zh) |
WO (1) | WO2018067603A1 (zh) |
Families Citing this family (115)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105120130B (zh) * | 2015-09-17 | 2018-06-29 | 京东方科技集团股份有限公司 | 一种图像升频系统、其训练方法及图像升频方法 |
KR102648770B1 (ko) | 2016-07-14 | 2024-03-15 | 매직 립, 인코포레이티드 | 홍채 식별을 위한 딥 뉴럴 네트워크 |
US10489680B2 (en) | 2016-10-04 | 2019-11-26 | Magic Leap, Inc. | Efficient data layouts for convolutional neural networks |
IE87469B1 (en) | 2016-10-06 | 2024-01-03 | Google Llc | Image processing neural networks with separable convolutional layers |
KR102631381B1 (ko) * | 2016-11-07 | 2024-01-31 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
AU2017361061B2 (en) | 2016-11-15 | 2022-02-03 | Magic Leap, Inc. | Deep learning system for cuboid detection |
EP3373798B1 (en) * | 2016-11-22 | 2020-05-27 | Delphinium Clinic Ltd. | Method and system for classifying optic nerve head |
EP3549109B1 (en) | 2016-12-05 | 2023-04-19 | Magic Leap, Inc. | Virtual user input controls in a mixed reality environment |
US11132619B1 (en) * | 2017-02-24 | 2021-09-28 | Cadence Design Systems, Inc. | Filtering in trainable networks |
US11379688B2 (en) | 2017-03-16 | 2022-07-05 | Packsize Llc | Systems and methods for keypoint detection with convolutional neural networks |
US10657376B2 (en) | 2017-03-17 | 2020-05-19 | Magic Leap, Inc. | Room layout estimation methods and techniques |
KR102415508B1 (ko) * | 2017-03-28 | 2022-07-01 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
US11164071B2 (en) * | 2017-04-18 | 2021-11-02 | Samsung Electronics Co., Ltd. | Method and apparatus for reducing computational complexity of convolutional neural networks |
KR102301232B1 (ko) * | 2017-05-31 | 2021-09-10 | 삼성전자주식회사 | 다채널 특징맵 영상을 처리하는 방법 및 장치 |
AU2018308418A1 (en) | 2017-07-26 | 2020-01-16 | Magic Leap, Inc. | Training a neural network with representations of user interface devices |
CN107506350B (zh) * | 2017-08-16 | 2024-08-02 | 京东方科技集团股份有限公司 | 一种识别信息的方法和设备 |
US11114138B2 (en) | 2017-09-15 | 2021-09-07 | Groq, Inc. | Data structures with multiple read ports |
US11868804B1 (en) | 2019-11-18 | 2024-01-09 | Groq, Inc. | Processor instruction dispatch configuration |
US11243880B1 (en) | 2017-09-15 | 2022-02-08 | Groq, Inc. | Processor architecture |
US11360934B1 (en) | 2017-09-15 | 2022-06-14 | Groq, Inc. | Tensor streaming processor architecture |
US10719951B2 (en) | 2017-09-20 | 2020-07-21 | Magic Leap, Inc. | Personalized neural network for eye tracking |
US11170307B1 (en) | 2017-09-21 | 2021-11-09 | Groq, Inc. | Predictive model compiler for generating a statically scheduled binary with known resource constraints |
US10049323B1 (en) * | 2017-10-13 | 2018-08-14 | StradVision, Inc. | Method and device for performing activation and convolution operation at the same time and learning method and learning device for the same |
US10083375B1 (en) * | 2017-10-13 | 2018-09-25 | StradVision, Inc. | Method and device for performing activation and convolution operation at the same time and learning method and learning device for the same |
CA3078530A1 (en) | 2017-10-26 | 2019-05-02 | Magic Leap, Inc. | Gradient normalization systems and methods for adaptive loss balancing in deep multitask networks |
US10902318B2 (en) * | 2017-11-06 | 2021-01-26 | Neuralmagic Inc. | Methods and systems for improved transforms in convolutional neural networks |
CN107895174B (zh) * | 2017-11-09 | 2020-01-07 | 京东方科技集团股份有限公司 | 图像分类和转换方法、装置以及图像处理系统 |
US20190156214A1 (en) | 2017-11-18 | 2019-05-23 | Neuralmagic Inc. | Systems and methods for exchange of data in distributed training of machine learning algorithms |
US20190164037A1 (en) * | 2017-11-29 | 2019-05-30 | Electronics And Telecommunications Research Institute | Apparatus for processing convolutional neural network using systolic array and method thereof |
US11373088B2 (en) * | 2017-12-30 | 2022-06-28 | Intel Corporation | Machine learning accelerator mechanism |
WO2019154509A1 (en) | 2018-02-09 | 2019-08-15 | Pupil Labs Gmbh | Devices, systems and methods for predicting gaze-related parameters |
US11556741B2 (en) | 2018-02-09 | 2023-01-17 | Pupil Labs Gmbh | Devices, systems and methods for predicting gaze-related parameters using a neural network |
WO2019154510A1 (en) * | 2018-02-09 | 2019-08-15 | Pupil Labs Gmbh | Devices, systems and methods for predicting gaze-related parameters |
US10990650B1 (en) * | 2018-03-22 | 2021-04-27 | Amazon Technologies, Inc. | Reducing computations for data including padding |
US20190303757A1 (en) * | 2018-03-29 | 2019-10-03 | Mediatek Inc. | Weight skipping deep learning accelerator |
US11948073B2 (en) | 2018-04-20 | 2024-04-02 | Advanced Micro Devices, Inc. | Machine learning inference engine scalability |
WO2019220692A1 (ja) * | 2018-05-15 | 2019-11-21 | 三菱電機株式会社 | 演算装置 |
US11449363B2 (en) | 2018-05-31 | 2022-09-20 | Neuralmagic Inc. | Systems and methods for improved neural network execution |
US10832133B2 (en) | 2018-05-31 | 2020-11-10 | Neuralmagic Inc. | System and method of executing neural networks |
WO2019236251A1 (en) * | 2018-06-04 | 2019-12-12 | Lightmatter, Inc. | Convolutional layers for neural networks using programmable nanophotonics |
US11615300B1 (en) * | 2018-06-13 | 2023-03-28 | Xilinx, Inc. | System and method for implementing neural networks in integrated circuits |
US12099912B2 (en) | 2018-06-22 | 2024-09-24 | Samsung Electronics Co., Ltd. | Neural processor |
CN108985450B (zh) * | 2018-06-28 | 2019-10-29 | 中国人民解放军国防科技大学 | 面向向量处理器的卷积神经网络运算向量化方法 |
CN109002796B (zh) * | 2018-07-16 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 一种图像采集方法、装置和系统以及电子设备 |
CN109063749B (zh) * | 2018-07-17 | 2021-06-18 | 山东科技大学 | 一种基于角点辐射域的鲁棒卷积核数量适配方法 |
KR20200009435A (ko) * | 2018-07-19 | 2020-01-30 | 삼성전자주식회사 | 딥 러닝용 데이터 표현 관리 방법, 딥 러닝용 데이터 처리 방법 및 이를 수행하는 딥 러닝 시스템 |
CN109063822B (zh) * | 2018-07-19 | 2023-04-07 | 郑州云海信息技术有限公司 | 一种计算方法及计算装置 |
WO2020031281A1 (ja) * | 2018-08-07 | 2020-02-13 | 日本電気株式会社 | 情報処理装置、情報処理方法、及びコンピュータ読み取り可能な記録媒体 |
US11836971B2 (en) * | 2018-08-23 | 2023-12-05 | Samsung Electronics Co., Ltd. | Method and device with convolution neural network processing |
US10282864B1 (en) * | 2018-09-17 | 2019-05-07 | StradVision, Inc. | Method and device for encoding image and testing method and testing device using the same |
CN110968832B (zh) * | 2018-09-29 | 2023-10-20 | 华为技术有限公司 | 一种数据处理方法和装置 |
WO2020072274A1 (en) | 2018-10-01 | 2020-04-09 | Neuralmagic Inc. | Systems and methods for neural network pruning with accuracy preservation |
US12111878B2 (en) | 2018-10-12 | 2024-10-08 | International Business Machines Corporation | Efficient processing of convolutional neural network layers using analog-memory-based hardware |
WO2020087072A1 (en) | 2018-10-26 | 2020-04-30 | Tensil AI Company | Method and apparatus for compiling computation graphs into an integrated circuit |
US11769041B2 (en) | 2018-10-31 | 2023-09-26 | Advanced Micro Devices, Inc. | Low latency long short-term memory inference with sequence interleaving |
CN109657538B (zh) * | 2018-11-05 | 2021-04-27 | 中国科学院计算技术研究所 | 基于上下文信息指导的场景分割方法和系统 |
US11537687B2 (en) | 2018-11-19 | 2022-12-27 | Groq, Inc. | Spatial locality transform of matrices |
US11494645B2 (en) * | 2018-12-06 | 2022-11-08 | Egis Technology Inc. | Convolutional neural network processor and data processing method thereof |
US11042611B2 (en) * | 2018-12-10 | 2021-06-22 | XNOR.ai, Inc. | Digital watermarking of machine-learning models |
CN111353575A (zh) * | 2018-12-20 | 2020-06-30 | 超威半导体公司 | 用于卷积神经网络的图块化格式 |
US11544559B2 (en) | 2019-01-08 | 2023-01-03 | Neuralmagic Inc. | System and method for executing convolution in a neural network |
CN113892092B (zh) * | 2019-02-06 | 2024-08-02 | 瀚博半导体(上海)有限公司 | 卷积模型硬件加速器的方法和系统 |
US11341210B2 (en) | 2019-02-15 | 2022-05-24 | Apple Inc. | Two-dimensional multi-layer convolution for deep learning |
CN111723918A (zh) | 2019-03-18 | 2020-09-29 | 超威半导体公司 | 用于卷积内核的自动生成和调谐工具 |
CN111767204B (zh) * | 2019-04-02 | 2024-05-28 | 杭州海康威视数字技术股份有限公司 | 溢出风险检测方法、装置及设备 |
US11671111B2 (en) | 2019-04-17 | 2023-06-06 | Samsung Electronics Co., Ltd. | Hardware channel-parallel data compression/decompression |
US11410016B2 (en) | 2019-04-26 | 2022-08-09 | Alibaba Group Holding Limited | Selective performance of deterministic computations for neural networks |
US11880760B2 (en) | 2019-05-01 | 2024-01-23 | Samsung Electronics Co., Ltd. | Mixed-precision NPU tile with depth-wise convolution |
CN110210321B (zh) * | 2019-05-08 | 2020-11-24 | 华南理工大学 | 基于多维尺度变换网络与分块加权法的欠样本人脸识别方法 |
CN110147788B (zh) * | 2019-05-27 | 2021-09-21 | 东北大学 | 一种基于特征增强crnn的金属板带产品标签文字识别方法 |
US11676422B2 (en) | 2019-06-05 | 2023-06-13 | Pupil Labs Gmbh | Devices, systems and methods for predicting gaze-related parameters |
JP2020205003A (ja) * | 2019-06-19 | 2020-12-24 | キオクシア株式会社 | メモリシステム、メモリコントローラ、及び半導体記憶装置 |
TWI719512B (zh) * | 2019-06-24 | 2021-02-21 | 瑞昱半導體股份有限公司 | 使用像素通道置亂的卷積神經網路的演算方法與系統 |
US11568238B2 (en) | 2019-06-28 | 2023-01-31 | Amazon Technologies, Inc. | Dynamic processing element array expansion |
CN112183711B (zh) * | 2019-07-01 | 2023-09-12 | 瑞昱半导体股份有限公司 | 使用像素通道置乱的卷积神经网络的演算方法与系统 |
US11195095B2 (en) | 2019-08-08 | 2021-12-07 | Neuralmagic Inc. | System and method of accelerating execution of a neural network |
US11354123B2 (en) | 2019-10-18 | 2022-06-07 | Macronix International Co., Ltd. | Memory device and computing in memory method thereof |
US11475283B2 (en) * | 2019-10-24 | 2022-10-18 | Apple Inc. | Multi dimensional convolution in neural network processor |
KR20210051920A (ko) * | 2019-10-31 | 2021-05-10 | 삼성전자주식회사 | 신경망의 커널들을 정렬하는 전자 장치 및 이의 동작 방법 |
WO2021093960A1 (en) * | 2019-11-14 | 2021-05-20 | Huawei Technologies Co., Ltd. | Image processing using self-attention |
KR20210071471A (ko) | 2019-12-06 | 2021-06-16 | 삼성전자주식회사 | 뉴럴 네트워크의 행렬 곱셈 연산을 수행하는 장치 및 방법 |
CN112927174B (zh) * | 2019-12-06 | 2024-05-03 | 阿里巴巴集团控股有限公司 | 一种图像处理,图像训练以通道混洗方法和装置 |
US12112141B2 (en) | 2019-12-12 | 2024-10-08 | Samsung Electronics Co., Ltd. | Accelerating 2D convolutional layer mapping on a dot product architecture |
KR102268817B1 (ko) * | 2019-12-19 | 2021-06-24 | 국민대학교산학협력단 | 분산 클라우드 환경에서의 기계 학습 성능 평가 방법 및 장치 |
CN111222561B (zh) * | 2019-12-31 | 2023-06-09 | 深圳云天励飞技术股份有限公司 | 图像识别神经网络处理方法、装置与系统 |
KR102157007B1 (ko) * | 2019-12-31 | 2020-09-16 | 연세대학교 산학협력단 | 객체 인식을 위한 자가 학습 장치 및 방법 |
US11687778B2 (en) | 2020-01-06 | 2023-06-27 | The Research Foundation For The State University Of New York | Fakecatcher: detection of synthetic portrait videos using biological signals |
DE102020201182A1 (de) * | 2020-01-31 | 2021-08-05 | Robert Bosch Gesellschaft mit beschränkter Haftung | Hardwarebeschleunigte Berechnung von Faltungen |
US20210256384A1 (en) * | 2020-02-14 | 2021-08-19 | Northeastern University | Computer-implemented methods and systems for achieving real-time dnn execution on mobile devices with pattern-based weight pruning |
KR20210112834A (ko) * | 2020-03-06 | 2021-09-15 | 삼성전자주식회사 | 뉴럴 네트워크 내 레이어에 관한 컨볼루션 연산의 처리 방법 및 장치 |
US11494208B2 (en) * | 2020-03-17 | 2022-11-08 | Onspecta, Inc. | Multiformat data generation for neural network |
US11620503B2 (en) * | 2020-03-18 | 2023-04-04 | Arm Limited | Neural network processing |
CN113469360B (zh) * | 2020-03-31 | 2023-10-20 | 杭州海康威视数字技术股份有限公司 | 推理方法及装置 |
CN111626569B (zh) * | 2020-05-06 | 2023-06-13 | 云南电网有限责任公司怒江供电局 | 微电网群电力能源交易方法 |
US11562240B2 (en) | 2020-05-27 | 2023-01-24 | International Business Machines Corporation | Efficient tile mapping for row-by-row convolutional neural network mapping for analog artificial intelligence network inference |
GB2595696B (en) * | 2020-06-04 | 2022-12-28 | Envisics Ltd | Forming a hologram of a target image for projection using data streaming |
KR20220011090A (ko) | 2020-07-20 | 2022-01-27 | 펄스나인 주식회사 | 이미지 변환 성능 개선을 위한 시각화 맵 분석 방법 |
US11861337B2 (en) * | 2020-08-26 | 2024-01-02 | Micron Technology, Inc. | Deep neural networks compiler for a trace-based accelerator |
US20230410542A1 (en) * | 2020-11-20 | 2023-12-21 | Ephesoft Inc. | Adaptive filter generator, identifying lines and table morphology |
US11556757B1 (en) | 2020-12-10 | 2023-01-17 | Neuralmagic Ltd. | System and method of executing deep tensor columns in neural networks |
US11971949B2 (en) | 2020-12-21 | 2024-04-30 | Samsung Electronics Co., Ltd. | Flexible-access instructions for efficient access of ML data |
KR102649283B1 (ko) * | 2021-02-22 | 2024-03-18 | 건국대학교 산학협력단 | 임베디드 플랫폼을 위한 심층신경망 최적화 장치 및 방법 |
CN112596684B (zh) | 2021-03-08 | 2021-06-22 | 成都启英泰伦科技有限公司 | 一种用于语音深度神经网络运算的数据存储方法 |
JP7420100B2 (ja) * | 2021-03-15 | 2024-01-23 | オムロン株式会社 | 処理装置、処理方法、およびプログラム |
US11250061B1 (en) | 2021-03-29 | 2022-02-15 | SambaNova Systems, Inc. | Lossless tiling in convolution networks—read-modify-write in backward pass |
US11227207B1 (en) * | 2021-03-29 | 2022-01-18 | SambaNova Systems, Inc. | Lossless tiling in convolution networks—section boundaries |
US11195080B1 (en) | 2021-03-29 | 2021-12-07 | SambaNova Systems, Inc. | Lossless tiling in convolution networks—tiling configuration |
US11263170B1 (en) | 2021-03-29 | 2022-03-01 | SambaNova Systems, Inc. | Lossless tiling in convolution networks—padding before tiling, location-based tiling, and zeroing-out |
CN112990370B (zh) * | 2021-04-26 | 2021-09-10 | 腾讯科技(深圳)有限公司 | 图像数据的处理方法和装置、存储介质及电子设备 |
CN113313787B (zh) * | 2021-05-31 | 2023-11-07 | 上海阵量智能科技有限公司 | 一种数据处理方法、装置、计算机设备和存储介质 |
US12050800B2 (en) | 2021-07-01 | 2024-07-30 | Samsung Electronics Co., Ltd. | Systems and methods for reordering data in a storage device based on data access patterns |
WO2023002843A1 (ja) | 2021-07-21 | 2023-01-26 | 富士フイルム株式会社 | 検査用カートリッジ及び検査用ストリップの製造方法 |
US20230103750A1 (en) * | 2021-10-06 | 2023-04-06 | Mediatek Inc. | Balancing workload for zero skipping on deep learning accelerator |
US11960982B1 (en) | 2021-10-21 | 2024-04-16 | Neuralmagic, Inc. | System and method of determining and executing deep tensor columns in neural networks |
US11934686B2 (en) * | 2022-04-18 | 2024-03-19 | Micron Technology, Inc. | Data reordering at a memory subsystem |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9373059B1 (en) * | 2014-05-05 | 2016-06-21 | Atomwise Inc. | Systems and methods for applying a convolutional network to spatial data |
Family Cites Families (80)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5291560A (en) | 1991-07-15 | 1994-03-01 | Iri Scan Incorporated | Biometric personal identification system based on iris analysis |
US6222525B1 (en) | 1992-03-05 | 2001-04-24 | Brad A. Armstrong | Image controllers with sheet connected sensors |
US5583795A (en) | 1995-03-17 | 1996-12-10 | The United States Of America As Represented By The Secretary Of The Army | Apparatus for measuring eye gaze and fixation duration, and method therefor |
US5670988A (en) | 1995-09-05 | 1997-09-23 | Interlink Electronics, Inc. | Trigger operated electronic device |
US7685212B2 (en) | 2001-10-29 | 2010-03-23 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
US7856055B2 (en) | 2002-03-13 | 2010-12-21 | Imax Corporation | Systems and methods for digitally re-mastering or otherwise modifying motion pictures or other image sequences data |
US8098901B2 (en) | 2005-01-26 | 2012-01-17 | Honeywell International Inc. | Standoff iris recognition system |
KR20050025927A (ko) | 2003-09-08 | 2005-03-14 | 유웅덕 | 홍채인식을 위한 동공 검출 방법 및 형상기술자 추출방법과 그를 이용한 홍채 특징 추출 장치 및 그 방법과홍채인식 시스템 및 그 방법 |
US7248720B2 (en) | 2004-10-21 | 2007-07-24 | Retica Systems, Inc. | Method and system for generating a combined retina/iris pattern biometric |
US7747070B2 (en) * | 2005-08-31 | 2010-06-29 | Microsoft Corporation | Training convolutional neural networks on graphics processing units |
US20070081123A1 (en) | 2005-10-07 | 2007-04-12 | Lewis Scott W | Digital eyewear |
US8696113B2 (en) | 2005-10-07 | 2014-04-15 | Percept Technologies Inc. | Enhanced optical and perceptual digital eyewear |
US11428937B2 (en) | 2005-10-07 | 2022-08-30 | Percept Technologies | Enhanced optical and perceptual digital eyewear |
US7634137B2 (en) * | 2005-10-14 | 2009-12-15 | Microsoft Corporation | Unfolded convolution for fast feature extraction |
JP4824420B2 (ja) | 2006-02-07 | 2011-11-30 | アイテック株式会社 | 視線ベクトル検出方法及び同装置 |
US7970179B2 (en) | 2006-09-25 | 2011-06-28 | Identix Incorporated | Iris data extraction |
US8363783B2 (en) | 2007-06-04 | 2013-01-29 | Oraya Therapeutics, Inc. | Method and device for ocular alignment and coupling of ocular structures |
JP5368687B2 (ja) | 2007-09-26 | 2013-12-18 | キヤノン株式会社 | 演算処理装置および方法 |
US8098891B2 (en) | 2007-11-29 | 2012-01-17 | Nec Laboratories America, Inc. | Efficient multi-hypothesis multi-human 3D tracking in crowded scenes |
WO2010003044A2 (en) * | 2008-07-03 | 2010-01-07 | Nec Laboratories America, Inc. | Epithelial layer detector and related methods |
JP5376920B2 (ja) * | 2008-12-04 | 2013-12-25 | キヤノン株式会社 | コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置 |
WO2010129074A1 (en) | 2009-01-14 | 2010-11-11 | Indiana University Research & Technology Corporation | System and method for identifying a person with reference to a sclera image |
WO2010116908A1 (ja) | 2009-03-28 | 2010-10-14 | Hoya株式会社 | 磁気ディスク用潤滑剤化合物及び磁気ディスク |
WO2011091326A1 (en) | 2010-01-22 | 2011-07-28 | Optimedica Corporation | Apparatus for automated placement of scanned laser capsulorhexis incisions |
US8345984B2 (en) | 2010-01-28 | 2013-01-01 | Nec Laboratories America, Inc. | 3D convolutional neural networks for automatic human action recognition |
US9304319B2 (en) | 2010-11-18 | 2016-04-05 | Microsoft Technology Licensing, Llc | Automatic focus improvement for augmented reality displays |
CA2822978C (en) | 2010-12-24 | 2019-02-19 | Hong Hua | An ergonomic head mounted display device and optical system |
US10156722B2 (en) | 2010-12-24 | 2018-12-18 | Magic Leap, Inc. | Methods and systems for displaying stereoscopy with a freeform optical system with addressable focus for virtual and augmented reality |
JP6316186B2 (ja) | 2011-05-06 | 2018-04-25 | マジック リープ, インコーポレイテッドMagic Leap,Inc. | 広範囲同時遠隔ディジタル提示世界 |
US10078620B2 (en) * | 2011-05-27 | 2018-09-18 | New York University | Runtime reconfigurable dataflow processor with multi-port memory access module |
US10795448B2 (en) | 2011-09-29 | 2020-10-06 | Magic Leap, Inc. | Tactile glove for human-computer interaction |
RU2017115669A (ru) | 2011-10-28 | 2019-01-28 | Мэджик Лип, Инк. | Система и способ для дополненной и виртуальной реальности |
KR102116697B1 (ko) | 2011-11-23 | 2020-05-29 | 매직 립, 인코포레이티드 | 3차원 가상 및 증강 현실 디스플레이 시스템 |
KR102028732B1 (ko) | 2012-04-05 | 2019-10-04 | 매직 립, 인코포레이티드 | 능동 포비에이션 능력을 갖는 와이드-fov(field of view) 이미지 디바이스들 |
US9310559B2 (en) | 2012-06-11 | 2016-04-12 | Magic Leap, Inc. | Multiple depth plane three-dimensional display using a wave guide reflector array projector |
US9671566B2 (en) | 2012-06-11 | 2017-06-06 | Magic Leap, Inc. | Planar waveguide apparatus with diffraction element(s) and system employing same |
US9141916B1 (en) | 2012-06-29 | 2015-09-22 | Google Inc. | Using embedding functions with a deep network |
EP2826414B1 (en) | 2012-07-31 | 2016-11-30 | Japan Science and Technology Agency | Point-of-gaze detection device, point-of-gaze detection method, personal parameter calculating device, personal parameter calculating method, program, and computer-readable storage medium |
US8369595B1 (en) | 2012-08-10 | 2013-02-05 | EyeVerify LLC | Texture features for biometric authentication |
AU2013315607A1 (en) | 2012-09-11 | 2015-04-02 | Magic Leap, Inc | Ergonomic head mounted display device and optical system |
IL293789B2 (en) | 2013-01-15 | 2023-08-01 | Magic Leap Inc | A system for scanning electromagnetic imaging radiation |
CN105188516B (zh) | 2013-03-11 | 2017-12-22 | 奇跃公司 | 用于增强和虚拟现实的系统与方法 |
US9147154B2 (en) | 2013-03-13 | 2015-09-29 | Google Inc. | Classifying resources using a deep network |
KR102458124B1 (ko) | 2013-03-15 | 2022-10-21 | 매직 립, 인코포레이티드 | 디스플레이 시스템 및 방법 |
WO2014182769A1 (en) | 2013-05-07 | 2014-11-13 | The Johns Hopkins University | Automated and non-mydriatic fundus-perimetry camera for irreversible eye diseases |
US9275308B2 (en) | 2013-05-31 | 2016-03-01 | Google Inc. | Object detection using deep neural networks |
US9874749B2 (en) | 2013-11-27 | 2018-01-23 | Magic Leap, Inc. | Virtual and augmented reality systems and methods |
US10262462B2 (en) | 2014-04-18 | 2019-04-16 | Magic Leap, Inc. | Systems and methods for augmented and virtual reality |
US20140380249A1 (en) | 2013-06-25 | 2014-12-25 | Apple Inc. | Visual recognition of gestures |
CN103431840B (zh) | 2013-07-31 | 2016-01-20 | 北京智谷睿拓技术服务有限公司 | 眼睛光学参数检测系统及方法 |
IL302408B2 (en) | 2013-10-16 | 2024-09-01 | Magic Leap Inc | An augmented or virtual reality head device with intrapupillary distance adjustment |
US9202144B2 (en) | 2013-10-30 | 2015-12-01 | Nec Laboratories America, Inc. | Regionlets with shift invariant neural patterns for object detection |
US10095917B2 (en) | 2013-11-04 | 2018-10-09 | Facebook, Inc. | Systems and methods for facial representation |
JP6236296B2 (ja) | 2013-11-14 | 2017-11-22 | 株式会社デンソーアイティーラボラトリ | 学習装置、学習プログラム、及び学習方法 |
US9857591B2 (en) | 2014-05-30 | 2018-01-02 | Magic Leap, Inc. | Methods and system for creating focal planes in virtual and augmented reality |
CN110542938B (zh) | 2013-11-27 | 2023-04-18 | 奇跃公司 | 虚拟和增强现实系统与方法 |
US9430829B2 (en) | 2014-01-30 | 2016-08-30 | Case Western Reserve University | Automatic detection of mitosis using handcrafted and convolutional neural network features |
NZ722903A (en) | 2014-01-31 | 2020-05-29 | Magic Leap Inc | Multi-focal display system and method |
CN106461955B (zh) | 2014-01-31 | 2019-08-13 | 奇跃公司 | 显示增强现实的方法 |
US10203762B2 (en) | 2014-03-11 | 2019-02-12 | Magic Leap, Inc. | Methods and systems for creating virtual and augmented reality |
IL231862A (en) | 2014-04-01 | 2015-04-30 | Superfish Ltd | Image representation using a neural network |
WO2015164807A1 (en) | 2014-04-25 | 2015-10-29 | Texas State University | Detection of brain injury and subject state with eye movement biometrics |
JP6314628B2 (ja) | 2014-04-28 | 2018-04-25 | 株式会社デンソー | 演算処理装置 |
WO2016018488A2 (en) | 2014-05-09 | 2016-02-04 | Eyefluence, Inc. | Systems and methods for discerning eye signals and continuous biometric identification |
CN113253476B (zh) | 2014-05-30 | 2022-12-27 | 奇跃公司 | 采用虚拟或增强现实装置生成虚拟内容显示的方法和系统 |
US9536293B2 (en) | 2014-07-30 | 2017-01-03 | Adobe Systems Incorporated | Image assessment using deep convolutional neural networks |
US20160034811A1 (en) | 2014-07-31 | 2016-02-04 | Apple Inc. | Efficient generation of complementary acoustic models for performing automatic speech recognition system combination |
US10223333B2 (en) * | 2014-08-29 | 2019-03-05 | Nvidia Corporation | Performing multi-convolution operations in a parallel processing system |
US9659384B2 (en) | 2014-10-03 | 2017-05-23 | EyeEm Mobile GmbH. | Systems, methods, and computer program products for searching and sorting images by aesthetic quality |
EP3204888A4 (en) | 2014-10-09 | 2017-10-04 | Microsoft Technology Licensing, LLC | Spatial pyramid pooling networks for image processing |
WO2016054802A1 (en) | 2014-10-10 | 2016-04-14 | Beijing Kuangshi Technology Co., Ltd. | Hierarchical interlinked multi-scale convolutional network for image parsing |
US10650508B2 (en) | 2014-12-03 | 2020-05-12 | Kla-Tencor Corporation | Automatic defect classification without sampling and feature selection |
KR102276339B1 (ko) * | 2014-12-09 | 2021-07-12 | 삼성전자주식회사 | Cnn의 근사화를 위한 학습 장치 및 방법 |
USD758367S1 (en) | 2015-05-14 | 2016-06-07 | Magic Leap, Inc. | Virtual reality headset |
CN112836664A (zh) | 2015-08-21 | 2021-05-25 | 奇跃公司 | 使用眼睛姿态测量的眼睑形状估计 |
KR102442569B1 (ko) | 2016-07-14 | 2022-09-08 | 매직 립, 인코포레이티드 | 각막 곡률을 이용한 홍채 경계 추정 |
KR102648770B1 (ko) | 2016-07-14 | 2024-03-15 | 매직 립, 인코포레이티드 | 홍채 식별을 위한 딥 뉴럴 네트워크 |
US10489680B2 (en) | 2016-10-04 | 2019-11-26 | Magic Leap, Inc. | Efficient data layouts for convolutional neural networks |
US10325342B2 (en) * | 2017-04-27 | 2019-06-18 | Apple Inc. | Convolution engine for merging interleaved channel data |
KR102034659B1 (ko) * | 2017-07-31 | 2019-10-21 | 서울대학교산학협력단 | 컨볼루션 뉴럴 네트워크를 위한 하드웨어 가속기 및 컨볼루션 연산량 감소 방법 |
-
2017
- 2017-10-03 US US15/724,142 patent/US10489680B2/en active Active
- 2017-10-03 KR KR1020197012230A patent/KR102216019B1/ko active IP Right Grant
- 2017-10-03 CA CA3038967A patent/CA3038967A1/en active Pending
- 2017-10-03 CN CN202310325629.2A patent/CN116343319A/zh active Pending
- 2017-10-03 EP EP17859043.6A patent/EP3523751A4/en active Pending
- 2017-10-03 JP JP2019517768A patent/JP6872011B2/ja active Active
- 2017-10-03 IL IL293688A patent/IL293688B2/en unknown
- 2017-10-03 WO PCT/US2017/054987 patent/WO2018067603A1/en active Application Filing
- 2017-10-03 AU AU2017338783A patent/AU2017338783B2/en active Active
- 2017-10-03 IL IL281321A patent/IL281321B/en unknown
- 2017-10-03 CN CN201780073892.XA patent/CN110073359B/zh active Active
-
2019
- 2019-03-31 IL IL265720A patent/IL265720B/en active IP Right Grant
- 2019-11-11 US US16/680,335 patent/US11182645B2/en active Active
-
2021
- 2021-04-16 JP JP2021069508A patent/JP7146999B2/ja active Active
- 2021-11-19 US US17/455,863 patent/US11720800B2/en active Active
-
2022
- 2022-04-27 AU AU2022202762A patent/AU2022202762A1/en not_active Abandoned
- 2022-09-21 JP JP2022150055A patent/JP7431913B2/ja active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9373059B1 (en) * | 2014-05-05 | 2016-06-21 | Atomwise Inc. | Systems and methods for applying a convolutional network to spatial data |
Non-Patent Citations (1)
Title |
---|
Memory-Centric Accelerator Design for Convolutional Neural Networks;Maurice Peemen等;《2013 IEEE 31st International Conference on Computer Design》;第13-19页 * |
Also Published As
Publication number | Publication date |
---|---|
EP3523751A4 (en) | 2020-05-06 |
IL265720B (en) | 2021-03-25 |
US11182645B2 (en) | 2021-11-23 |
US20200082215A1 (en) | 2020-03-12 |
CN116343319A (zh) | 2023-06-27 |
CA3038967A1 (en) | 2018-04-12 |
JP7431913B2 (ja) | 2024-02-15 |
US11720800B2 (en) | 2023-08-08 |
WO2018067603A1 (en) | 2018-04-12 |
AU2017338783B2 (en) | 2022-02-10 |
JP2022171926A (ja) | 2022-11-11 |
AU2022202762A1 (en) | 2022-05-19 |
JP2019535079A (ja) | 2019-12-05 |
IL265720A (en) | 2019-05-30 |
US20180096226A1 (en) | 2018-04-05 |
KR102216019B1 (ko) | 2021-02-15 |
EP3523751A1 (en) | 2019-08-14 |
US20220076056A1 (en) | 2022-03-10 |
IL281321B (en) | 2022-07-01 |
IL293688B1 (en) | 2023-10-01 |
AU2017338783A1 (en) | 2019-04-18 |
JP6872011B2 (ja) | 2021-05-19 |
US10489680B2 (en) | 2019-11-26 |
IL293688A (en) | 2022-08-01 |
CN110073359A (zh) | 2019-07-30 |
IL293688B2 (en) | 2024-02-01 |
JP7146999B2 (ja) | 2022-10-04 |
IL281321A (en) | 2021-04-29 |
JP2021120871A (ja) | 2021-08-19 |
KR20190062481A (ko) | 2019-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110073359B (zh) | 用于卷积神经网络的有效数据布局 | |
US11775836B2 (en) | Hand pose estimation | |
KR102302725B1 (ko) | 룸 레이아웃 추정 방법들 및 기술들 | |
US20200202198A1 (en) | Neural network processor | |
CN116541647A (zh) | 运算加速器、处理方法及相关设备 | |
JP2019087252A (ja) | ニューラルネットワークにおいてデコンボルーション演算を実行する装置及びその方法 | |
CN112215332B (zh) | 神经网络结构的搜索方法、图像处理方法和装置 | |
CN110807170A (zh) | 多样本多通道卷积神经网络Same卷积向量化实现方法 | |
CN112395092A (zh) | 数据处理方法及人工智能处理器 | |
CN109447239B (zh) | 一种基于arm的嵌入式卷积神经网络加速方法 | |
CN112541972B (zh) | 一种视点图像处理方法及相关设备 | |
CN112712457A (zh) | 数据处理方法以及人工智能处理器 | |
CN113393368B (zh) | 基于神经网络模型的图像处理方法、介质和电子设备 | |
KR102494565B1 (ko) | 콘볼루션 신경망의 하드웨어 구조 최적화 방법 | |
CN113516580A (zh) | 提高神经网络图像处理效率的方法、装置及一种npu | |
US11842273B2 (en) | Neural network processing | |
KR20240025827A (ko) | Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 |
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 |