KR102216019B1 - 콘볼루션 뉴럴 네트워크들을 위한 효율적인 데이터 레이아웃들 - Google Patents

콘볼루션 뉴럴 네트워크들을 위한 효율적인 데이터 레이아웃들 Download PDF

Info

Publication number
KR102216019B1
KR102216019B1 KR1020197012230A KR20197012230A KR102216019B1 KR 102216019 B1 KR102216019 B1 KR 102216019B1 KR 1020197012230 A KR1020197012230 A KR 1020197012230A KR 20197012230 A KR20197012230 A KR 20197012230A KR 102216019 B1 KR102216019 B1 KR 102216019B1
Authority
KR
South Korea
Prior art keywords
kernel
activation map
input activation
layout
kernels
Prior art date
Application number
KR1020197012230A
Other languages
English (en)
Other versions
KR20190062481A (ko
Inventor
애쉬칸 알리아바디
그레고리 데이비드 로버츠
Original Assignee
매직 립, 인코포레이티드
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 매직 립, 인코포레이티드 filed Critical 매직 립, 인코포레이티드
Publication of KR20190062481A publication Critical patent/KR20190062481A/ko
Application granted granted Critical
Publication of KR102216019B1 publication Critical patent/KR102216019B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V40/00Recognition of biometric, human-related or animal-related patterns in image or video data
    • G06V40/10Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
    • G06V40/18Eye characteristics, e.g. of the iris
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/211Selection of the most significant subset of features
    • G06F18/2113Selection 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/213Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
    • G06F18/2137Feature 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/23Clustering techniques
    • G06F18/231Hierarchical techniques, i.e. dividing or merging pattern sets so as to obtain a dendrogram
    • G06K9/0061
    • G06K9/6219
    • G06K9/623
    • G06K9/6251
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • G06N3/0454
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/762Arrangements for image or video recognition or understanding using pattern recognition or machine learning using clustering, e.g. of similar faces in social networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/77Processing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/77Processing 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/771Feature selection, e.g. selecting representative features from a multi-dimensional feature space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V40/00Recognition of biometric, human-related or animal-related patterns in image or video data
    • G06V40/10Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
    • G06V40/18Eye characteristics, e.g. of the iris
    • G06V40/193Preprocessing; Feature extraction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local 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/443Local 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/449Biologically 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

콘볼루션 뉴럴 네트워크들을 위한 효율적인 데이터 레이아웃들
[0001] 본 출원은, 2016년 10월 4일에 출원되고 명칭이 "EFFICIENT DATA LAYOUTS FOR CONVOLUTIONAL NEURAL NETWORKS"인 미국 특허 출원 제62/403,930호를 우선권으로 주장하며, 이로써, 상기 출원의 전체 내용은 인용에 의해 본원에 포함된다.
[0002] 본 특허 문헌의 개시내용의 부분은 저작권 보호를 받는 자료를 포함한다. 저작권자는 특허청의 특허 파일 또는 기록들에 나타난 대로 본 특허 문헌 또는 특허 개시내용을 어느 누군가가 팩시밀리 재생하는 것은 반대하지 않지만, 그 밖의 모든 것은 저작권으로 보호된다.
[0003] 본 개시내용은 일반적으로 콘볼루션 뉴럴 네트워크(convolutional neural network)를 구현하기 위한 시스템들 및 방법들에 관한 것이며, 더 상세하게는, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 구현하기 위한 효율적인 데이터 레이아웃들에 관한 것이다.
[0004] CNN(convolutional neural network)은 인공 뉴럴 네트워크를 위한 토폴로지를 설명한다. CNN은 눈 이미지 분할(segmentation) 및 눈 추적에 사용될 수 있다. CNN은 제스처 인식과 같은 다른 분류 문제들에 사용될 수 있다. CNN의 콘볼루션 계층의 출력 활성화 맵들을 결정하기 위해, 콘볼루션 계층은 입력 활성화 맵들과 콘볼루션 계층의 커널들(kernels)을 콘볼류션할 수 있다. 콘볼루션들의 컴퓨팅은 계산적으로 비용이 많이 들거나 집중적일 수 있다.
[0005] 하드웨어 컴퓨팅 시스템에서 콘볼루션 연산들을 효율적으로 수행하는 것은 많은 난제들이 존재할 수 있다. 따라서, 본 개시내용은 콘볼루션 뉴럴 네트워크들의 효율적인 구현을 위한 시스템들 및 방법들의 예들을 제공한다. 시스템들 및 방법들은, CNN들이 활용되는 임의의 애플리케이션, 이를테면, 예컨대, 증강 현실, 혼합 현실, 가상 현실, 머신 학습, 컴퓨터 비전, 안면 인식, 눈 추적, 오브젝트 인식, 캐릭터, 언어 또는 스피치 분석, 컴퓨터 게임들 등에서 사용될 수 있다.
[0006] 일 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 콘볼루션 계층은 커널 스택의 커널들을 포함하고, 커널 스택의 커널들은 기본 커널 레이아웃임 ― , 커널 스택의 커널들의 가중 값들을 기본 커널 레이아웃으로부터 복수의 커널 타일들을 포함하는 타일 커널 레이아웃으로 재정렬하는 것 ― 커널 타일은 복수의 커널 러널들을 포함하고, 커널 러널은 커널 스택의 커널들의 다수의 가중 값들을 포함함 ― , 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것 ― 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― , 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것, 및 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃이다.
[0007] 다른 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 커널 스택의 커널들을 포함하는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 커널 스택의 커널들은 커널 러널들의 복수의 커널 타일들을 포함하는 타일 커널 레이아웃임 ― 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것 ― 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― , 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것, 및 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃이다.
[0008] 또 다른 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 커널 스택의 커널들을 포함하는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 커널 스택의 커널들은 커널 러널들의 복수의 커널 타일들을 포함하는 타일 커널 레이아웃이고, 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것, 입력 활성화 맵들은 인터리빙된 입력 활성화 맵 레이아웃임 ― , 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃이다.
[0009] 추가의 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 커널 스택의 커널들을 포함하는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 커널 스택의 커널들은 커널 러널들의 복수의 커널 타일들을 포함하는 타일 커널 레이아웃이고, 커널의 치수는 1임 ― , 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것 ― 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― , 스트라이딩(striding)에 의해 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것, 및 복수의 커널 타일들 및 복수의 입력 활성화 맵 타일들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵들의 복수의 클러스터들을 포함하는 전치된, 인터리빙된 출력 활성화 맵 레이아웃이다.
[0010] 본 명세서에서 설명되는 청구 대상의 하나 이상의 구현들의 세부사항들은, 아래의 첨부 도면들 및 설명에서 기술된다. 다른 특징들, 양상들, 및 이점들은 설명, 도면들, 및 청구항들로부터 명백해질 것이다. 이 개요 또는 다음의 상세한 설명 어느 것도, 본 발명의 청구 대상의 범위를 한정하거나 제한하는 것으로 의도되지 않는다.
[0011] 도 1은 예시적인 2-차원(2D) 콘볼루션의 개략적인 예시를 도시한다.
[0012] 도 2는 콘볼루션 뉴럴 네트워크(convolutional neural network)의 예시적인 3-차원(3D) 콘볼루션 계층을 개략적으로 예시한다.
[0013] 도 3은 3 × 3, 1 × 3 또는 3 × 1 커널들의 콘볼루션들에 의해 완전히 활용되지 않는 폭 4의 SIMD(single instruction, multiple data) 레지스터의 개략적인 예시를 도시한다.
[0014] 도 4는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 입력 활성화 맵들의 픽셀 값들의 예시적인 재정렬을 개략적으로 예시한다.
[0015] 도 5a-5c는 커널 스택의 커널들의 가중 값들을 러널들(runnels)의 타일들을 포함하는 타일 포맷으로 재정렬하는 예들을 개략적으로 예시한다.
[0016] 도 6a 및 6b는 커널 스택의 커널 가중치들을 러널들의 타일들을 포함하는 타일 포맷으로 재정렬하는 예들을 개략적으로 예시한다.
[0017] 도 7은 커널 스택의 커널 가중치들을 러널들의 타일들을 포함하는 타일 포맷으로 재정렬하는 다른 예를 개략적으로 예시한다.
[0018] 도 8은, 출력 활성화 맵들을 타일 단위로 결정하는 것을 예시하기 위해, 콘볼루션 뉴럴 네트워크의 예시적인 3D 콘볼루션 계층을 개략적으로 예시한다.
[0019] 도 9a-9b는, 커널 스택 가중 값들의 다수의 행들을 스트래들링(straddling)하는 커널 스택 러널들을 갖는 타일 단위로 출력 활성화 맵들을 결정하는 것을 예시하기 위해, 콘볼루션 뉴럴 네트워크의 예시적인 3D 콘볼루션 계층을 개략적으로 예시한다.
[0020] 도 10은, 입력 활성화 맵들의 픽셀 값들 및 커널들의 가중 값들을 인터리빙된 레이아웃 및 러널들의 타일들로 각각 재정렬하는 것을 선택적으로 포함하는, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 출력 활성화 맵들을 타일 단위로 결정하는 예시적인 프로세스의 흐름도이다.
[0021] 도 11은 커널 스택의 커널들의 가중 값들을 러널들의 타일들을 포함하는 타일 포맷으로 재정렬하는 예들을 개략적으로 예시한다.
[0022] 도 12는 웨어러블 디스플레이 시스템의 예를 개략적으로 예시한다.
[0023] 도면들 전체에 걸쳐, 참조 번호들은 참조된 엘리먼트들 사이의 대응성(correspondence)을 표시하는 데 재사용될 수 있다. 도면들은 본원에서 설명된 예시적인 실시예들을 예시하기 위해 제공되며 본 개시내용의 범위를 제한하려는 의도는 아니다.
개관
[0024] 기능들, 알고리즘들, 시스템들 등과 같은 데이터 관계들 및 패턴들을 나타내는 모델들은 입력을 수용하고, 일부 방식으로 입력에 대응하는 출력을 생성할 수 있다. 예컨대, 모델은 CNN(convolutional neural network) 또는 DNN(deep neural network)과 같은 기계 학습 방법으로 구현될 수 있다. 심층 학습은 작업 특정 알고리즘들과 대조적으로 데이터 표현들을 학습하는 아이디어에 기반하는 광범위한 기계 학습 방법군들의 부분이고, 증강 현실, 혼합 현실, 가상 현실 및 기계 지능에서 중요한 오디오-시각적 계산 문제들을 해결하는 데 많은 가능성(promise)을 보여준다. 기계 학습에서, 콘볼루션 뉴럴 네트워크(CNN 또는 ConvNet)는 심층, 피드-포워드 인공 뉴럴 네트워크들의 클래스를 포함할 수 있고, CNN들은 시각적 이미저리의 분석에 성공적으로 적용되었다. 기계 학습 방법들은, 눈 이미지 분할 및 눈 추적을 포함하는 매우 다양한 문제들에 대한 강력하고 정확한 해결책들을 가능하게 할 수 있는 방법군들을 포함한다. 그러나, 기계 학습 방법들은 계산적으로 집약적이거나 비용이 많이들 수 있다. 따라서, 기계 학습 방법들을 효율적으로 수행하는 것은 제한된 자원들로 임베딩된 플랫폼들에 대한 기계 학습 방법들의 적용들을 가능하게 할 수 있다.
[0025] 기계 학습 모델의 파라미터들은 트레이닝으로 지칭되는 프로세스에서 학습될 수 있다. 예컨대, 기계 학습 모델은, 입력 데이터 및 대응하는 입력 데이터에 대한 모델의 정확한 또는 선호되는 출력을 포함하는 트레이닝 데이터를 사용하여 트레이닝될 수 있다. 기계 학습 모델은 반복적으로 입력 데이터를 프로세싱할 수 있으며, 기계 학습 모델의 파라미터들(예컨대, 가중 값들)은, 모델이 정확하거나 선호되는 출력을 생성(또는 그 출력으로 "수렴")할 때까지, 시행 착오 프로세스에 필요한 양으로 수정될 수 있다. 예컨대, 가중 값들의 수정은 "역 전파(back propagation)"로 지칭되는 프로세스를 통해 수행될 수 있다. 역 전파는 예상된 모델 출력과 획득된 모델 출력 간의 차이를 결정하는 것, 및 이어서 예상된 모델 출력과 획득된 모델 출력 간의 차이를 감소시키기 위해 모델의 일부 또는 모든 파라미터들의 값들을 수정하는 방법을 결정하는 것을 포함한다.
[0026] 기계 학습 방법들의 서브카테고리인 CNN(convolutional neural network)은 눈 이미지들을 분할하는 것과 같은 다양한 애플리케이션들에 사용될 수 있다. 눈 이미지들은, 눈 및 눈 주위의 부분들 이를테면, 눈꺼풀들, 눈썹들, 속눈썹들, 눈을 둘러싼 피부를 포함하는, 눈의 눈주위 구역을 포함할 수 있다. 눈 이미지는 눈 이미지에서 눈의 동공 구역, 홍채 구역 또는 공막 구역을 생성하도록 분할될 수 있다. 눈 이미지는 또한, 눈 이미지에서 눈 주위의 눈꺼풀과 같은 피부를 포함하는, 눈 이미지의 배경을 생성하도록 분할될 수 있다. 분할된 눈 이미지는 홍채 식별 및 눈 추적에 사용될 수 있다.
[0027] 눈 추적은 다양한 가상 현실(VR), 증강 현실(AR) 또는 혼합 현실(MR) 애플리케이션들에서 유용할 수 있다. 예컨대, VR, AR 또는 MR 디바이스의 사용자에게 디스플레이된 가상 메뉴는 사용자의 눈들의 배향에 공간적으로 기반하여(예컨대, 하나 이상의 눈들의 요(yaw), 피치(pitch) 또는 롤(roll)에 대해) 포지셔닝될 수 있다. 사용자의 눈들이 움직일 때, 그에 따라 가상 메뉴가 재포지셔닝될 수 있다. 다른 예로서, VR, AR 또는 MR 디바이스의 사용자는 눈 움직임들에 의해 가상 메뉴를 스크롤할 수 있다. 추가의 예로서, 사용자는 눈 움직임들을 사용하여 VR, AR 또는 MR 디바이스에 커맨드를 내릴 수 있다. 또한, 눈 추적은 디스플레이 정렬 및 적절한 렌더링과 같은 정렬 방법들에 사용될 수 있다. 따라서, CNN들이 많은 애플리케이션들에 유용할 수 있기 때문에, 하드웨어의 높은 활용도를 달성하는 CNN들의 효율적인 구현은 제한된 자원들로 임베딩된 디바이스들(예컨대, VR, AR 또는 MR 디바이스들)에 대한 CNN들의 적용들, 이를테면, 눈 추적 및 다른 컴퓨터 비전 방법들의 강력한 구현을 가능하게 할 수 있다.
[0028] 본원에 개시된 시스템들 및 방법들은 컴퓨팅 디바이스, 이를테면, 컴퓨터 서버, 퍼스널 컴퓨터, 태블릿 컴퓨터, 모바일 디바이스 또는 임베딩된 디바이스 상에서 CNN들의 효율적인 구현들을 가능하게 할 수 있다. 컴퓨팅 디바이스는 벡터 프로세서, VLIW(very long instruction word) 벡터 프로세서, 또는 SIMD(single instruction, multiple data) 프로세서들을 포함할 수 있다. CNN들의 효율적인 구현들은 입력 활성화 맵들, 커널들 또는 출력 활성화 맵들의 효율적인 데이터 레이아웃들에 기반할 수 있다.
[0029] CNN의 콘볼루션 커널 계층은 커널들의 커널 스택을 포함할 수 있다. 콘볼루션 계층의 커널은, 자신의 입력에 적용될 때, 그 특정 학습 커널에 대한 응답을 보여주는 결과적인 출력 활성화 맵을 생성할 수 있다. 그러나, 콘볼루션들을 컴퓨팅하는 것은 계산적으로 비용이 많이 들거나 집약적일 수 있다. 그리고, 콘볼루션 계층은 계산적으로 비용이 많이 들 수 있다. 예컨대, 콘볼루션 계층들이 다른 타입들의 CNN 계층들(예컨대, 서브샘플링 계층들)보다 더 많은 계산들을 요구하기 때문에, 그들은 CNN의 계산적으로 가장 비용이 많이 드는 계층들일 수 있다. 이어서, 결과적인 출력 활성화 맵은 CNN의 다른 계층에 의해 프로세싱될 수 있다. CNN의 다른 계층들은, 예컨대, 정규화 계층(예컨대, 휘도 정규화 계층, BN(batch normalization) 계층, LCN(local contrast normalization) 계층 또는 LRN(local response normalization) 계층), 정류된 선형 계층, 업 샘플링 계층, 연접 계층, 풀링 계층, 완전히 연결된 계층, 선형 완전히 연결된 계층, 소프트사인(softsigh) 계층, 반복 계층, 또는 이들의 임의의 조합을 포함할 수 있다.
[0030] CNN의 커널 스택은 커널들의 M개의 행들 및 커널들의 N개의 열들을 포함할 수 있으며, 각각의 열은 또한 커널 스택의 필터 뱅크로 지칭된다. 커널 스택의 커널들은 동일한 폭 및 동일한 높이를 가질 수 있다. 콘볼루션 계층은 M개의 입력 활성화 맵들을 수신하기 위한 M개의 입력 채널들을 가질 수 있다. 콘볼루션 계층은 N개의 출력 활성화 맵들을 생성하기 위한 N개의 출력 채널들을 가질 수 있다. 각각의 출력 활성화 맵은 커널 스택의 필터 뱅크 및 대응하는 입력 활성화 맵들의 3-차원 콘볼루션 결과일 수 있다.
[0031] 일부 구현들에서, 콘볼루션 계층을 효율적으로 구현하기 위해, 커널 스택의 커널들의 가중 값들은 커널들에 대한 타일 레이아웃으로 재정렬될 수 있다. 커널들에 대한 타일 레이아웃은 가중 값들의 러널들의 타일들을 포함한다. 러널은 다음의 2개의 특성들을 갖는 가중 값들의 정렬된 리스트일 수 있다. 첫째, 러널 내의 가중 값들의 수는, 가중 값들의 데이터 타입이 주어지면, SIMD 레지스터와 같은 프로세서 레지스터가 한번에 포함할 수 있는 가중 값들의 수와 동일할 수 있다. 예컨대, 128-비트 SIMD 레지스터에 대해, 러널은 8개의 반(half)-정밀 부동 소수점 가중 값들 또는 4개의 단일-정밀 부동 소수점 가중 값들을 포함할 수 있다. 둘째, 커널 스택의 폭 치수(M), 다음에 커널 스택의 높이 치수(N), 다음에 개별 커널의 폭 치수, 다음에 개별 커널의 높이 치수를 따라 순회함으로써, 러널들이 반복적으로 채워질 수 있다. 순회는, 러널이 커널 스택의 커널들의 가중 값들로 완전히 채워질 때까지 계속된다.
[0032] 일부 구현들에서, 입력 활성화 맵의 픽셀 값들은 인터리빙된 레이아웃으로 재정렬될 수 있다. 예컨대, 콘볼루션 계층이 M개의 입력 활성화 맵들을 수신한 후에, 입력 활성화 맵들의 픽셀 값들은 입력 활성화 맵들에 대한 기본 레이아웃으로부터 입력 활성화 맵들의 인터리빙된 레이아웃으로 재정렬될 수 있다. 일부 구현들에서, 픽셀 값들은, 제1 입력 활성화 맵의 제1 픽셀 값 다음에 제2 입력 활성화 맵의 제1 픽셀이 이어지고, 마지막(즉, 제M) 입력 활성화 맵의 제1 픽셀 값까지, 이러한 식으로 이어지도록 정렬될 수 있다. 마지막 입력 활성화 맵의 제1 픽셀 값 다음에 제1 입력 활성화 맵의 제2 픽셀 값, 제2 입력 활성화 맵의 제2 픽셀 값이 이어지고, 마지막 입력 활성화 맵의 제2 픽셀 값까지, 이러한 식으로 이어질 수 있다. 이러한 재정렬은, 콘볼루션 계층의 모든 입력 활성화 맵들의 모든 픽셀 값들이 유사하게 정렬될 때까지 계속될 수 있다. 재정렬 프로세스는, 모든 개별 입력 활성화 맵들을 포함하는 큰 재정렬된 입력 활성화 맵을 발생시킬 수 있다. 재정렬된 입력 활성화 맵의 각각의 인덱싱된 위치는 그 인덱스에서의 개별 입력 활성화 맵들로부터의 픽셀 값들의 클러스터를 포함할 수 있다. 유리하게도, 이 재정렬은, 예컨대, CNN의 초기 콘볼루션 계층 또는 제1 콘볼루션 계층에 의해 최대한으로 한번 수행될 필요가 있다. 일부 실시예들에서, 어떠한 재정렬도 필요하지 않을 수 있다. 예컨대, 제1 콘볼루션 계층은 하나의 입력 활성화 맵을 콘볼루션하고, 다수의 출력 활성화 맵들을 생성할 수 있다. 이 경우, 입력 활성화 맵의 픽셀 값의 어떠한 재정렬도 필요하지 않을 수 있다. 다수의 출력 활성화 맵들을 생성하기 위해 하나의 입력 활성화 맵을 콘볼루션하는 것은 하나의 입력 활성화 맵에 대해 다수의 2-차원(2D) 콘볼루션들을 동시에 수행하는 것으로 간주될 수 있다. 유리하게도, 본원에 개시된 방법들은 단일 입력 활성화 맵에 대한 2D 콘볼루션들의 효율적인 계산들을 허용할 수 있다.
[0033] 인터리빙된 레이아웃에서 콘볼루션 계층의 출력 활성화 맵들이 타일 단위로 결정될 수 있다. 예컨대, 출력 활성화 맵의 가중 값들 클러스터에 대해: 출력 활성화 맵 픽셀 값들, 재정렬된 입력 활성화 맵 픽셀 값들, 및 커널 타일에 대해 융합된 곱셈-합산 연산이 수행된다. 일부 구현들에서, 인터리빙된 레이아웃에서 콘볼루션 계층의 출력 활성화 맵들은 출력 활성화 맵들에 대한 기본 레이아웃으로 정렬될 수 있다.
[0034] 본원에 개시된 시스템들 및 방법들에 기반하여 효율적으로 구현된 CNN은 유리하게도 콘볼루션 계층의 프로세싱 또는 수학적 양상의 관점에서 커널과 입력 활성화 맵의 콘볼루션의 효율적인 계산을 가능하게 할 수 있다. 따라서, CNN에 기반한 애플리케이션은 컴퓨터 서버, 퍼스널 컴퓨터, 태블릿 컴퓨터, 모바일 디바이스 또는 임베딩된 디바이스와 같은 컴퓨팅 디바이스 상에서 상호작용 레이트들로 동작할 수 있다. 게다가, 일부 실시예들에서, 효율적으로 구현된 CNN은, 데이터 복제가 불필요하기 때문에 컴퓨팅 디바이스들(예컨대, 임베딩된 디바이스들의 임베딩된 프로세서들) 상에서 이용 가능한 제한된 양의 고속 메모리의 높은 활용도, 임베딩된 프로세서들을 사용하여 CNN을 구현하기 위한 거대한 개선을 허용할 수 있다. 또한, 본원에 개시된 데이터 레이아웃들은, 콘볼루션 계층들이 아닌, CNN의 다른 계층들(예컨대, 업 샘플링 및 다운 샘플링 계층들)의 효율적인 프로세싱을 가능하게 할 수 있다. 입력 활성화 맵들을 재배열할 필요없이, 입력 활성화 맵들은 벡터 프로세서에 의해 동시에 다운 샘플링되거나 업 샘플링될 수 있다. 데이터 재정렬은 CNN의 구조에 따라 한번 수행되거나 또는 전혀 수행되지 않을 수 있다. 따라서, 본원에 개시된 시스템들 및 방법들의 이점들은 효율적인 콘볼루션 계산들을 넘어 확장된다.
[0035] 또한, 효율적으로 구현된 CNN은 고성능 또는 저전력 소비를 가질 수 있다. 일부 구현들에서, 본원에 개시된 시스템들 및 방법들은, 컴퓨팅 디바이스의 프로세서가 더 짧은 시간 기간 동안 온 상태 또는 고주파수 상태에 있을 수 있기 때문에, CNN을 구현하는 컴퓨팅 디바이스의 전력 소비를 유리하게 감소시킬 수 있다. CNN, 예컨대, CNN의 콘볼루션 계층을 최적화하는 것은 정해진 전력 엔벨로프(power envelop)에서 개선된 성능, 최적 또는 최대 성능을 달성할 수 있고, 이는 제한된 성능 또는 전력 엔벨로프를 갖는 컴퓨팅 디바이스(예컨대, 임베딩된 디바이스)에 유용할 수 있다.
[0036] 콘볼루션들은 기본 벡터 프로세서들의 능력들로 맵핑하기 위해 중요할(non-trivial) 뿐만 아니라 계산적으로 비용이 많이 든다. 최저 비용(예컨대, 금전(monetary), 전력 소비 및 발열)으로 이용 가능한 하드웨어 자원들(예컨대, 컴퓨터, 메모리, 및 일반적으로 말하면 이 둘에 할당된 프로세서 다이 공간)의 활용도를 최대화하는 것이 매우 바람직하기 때문에, 본 개시내용의 방법들을 사용하는 하드웨어 및 소프트웨어 레벨 둘 모두에서 이러한 계산적으로 어려운 동작의 최적화는 유리할 수 있다.
[0037] 개시된 방법들은, (예컨대, 이 방법을 사용하여 콘볼루션들을 수행하는 데 요구되는 곱셈-누산들의 수가 대략 연산을 정확히 수행하는 데 수학적으로 요구된 연산들의 최소수로 감소한다는 의미에서) 컴퓨터뿐만 아니라 (예컨대, im2col과 같은 경쟁 방법들과 달리, 추가의 메모리량이 거의 또는 아예 요구되지 않는다는 의미에서 ― im2col은, 메모리 별로 비효율적이 되게 하는 데이터의 복제를 희생하여 높은 계산 효율성을 달성함) 메모리 사용량에 관련하여 콘볼루션들이 벡터 프로세서들 상에서 개선된 또는 최적의 방식으로 수행될 수 있도록 데이터를 재정렬한다. 본원에 개시된 실시예들은 유연성, 성능 및 구현의 용이함 간의 트레이드오프를 밸런싱한다.
예시적인 2-차원 콘볼루션
[0038] 복잡한 문제들을 해결하기 위한 하나의 접근법은, 문제를 더 간단하고 관리하기 쉬운 컴포넌트들로 분해하고, 복잡한 문제가 유닛으로 해결하기에 더 용이할 수 있는 구성요소들로 완전히 분해될 수 있을 때까지 재귀적으로 계속해서 그렇게 함으로써 분할 및 정복 방식(divide and conquer approach)일 수 있다. 이러한 하위 문제들은 그래프에서 노드들 또는 정점들(vertices)로 생각될 수 있다.
[0039] 이러한 하위 문제들을 해결하면, 그들의 결과들은 원래의 복잡한 문제에 대한 해결책에 도달하도록 어떻게든 어그리게이팅될 필요가 있다. 하위 문제들의 결과들을 결합하기 위한 방법은 간단한 수학식(예컨대, 엘리먼트 별 덧셈)으로부터 복잡한 수학식까지의 범위일 수 있다. 하위 문제들의 결과들을 결합하는 연산들은 그래프에서 연결들 또는 에지로 표현될 수 있다.
[0040] 노드들 및 에지들(하위 문제들에 대응하고, 하위 문제들의 결과들을 결합함)의 그래프는 네트워크의 입력을 수신하는 네트워크를 형성할 수 있고, 네트워크의 원하는 출력에 도달하기 위해 입력 및 중간 결과들에 대해 일련의 계산들을 수행한다. 이러한 그래프를 형성하는 에지들로서 축색 돌기들(axons) 및 정점들로서 뉴런들을 사용하여 포유류의 뇌가 어떻게 기능하는지를 네트워크가 나타낸다는 점에서, 네트워크는 뉴럴 네트워크 또는 인공 뉴럴 네트워크로 지칭될 수 있다. 네트워크가 동물들의 생물학적 뉴럴 네트워크들과 유사하지만 컴퓨팅 디바이스들에 의해 구현되는 계산 엔티티라는 의미에서, 네트워크는 인공적이다.
[0041] 콘볼루션 연산은 제3 함수를 생성하기 위해 2개의 함수들(예컨대, 연속 함수들(f 및 g))에 대한 수학적 연산일 수 있다. 제3 함수는, 오리지널 함수들 중 하나가 변환된 양의 함수로서 2개의 오리지널 함수들의 점별 곱셈의 적분에 기반하여, 2개의 함수들 중 하나의 수정된 버전으로 간주될 수 있다. 2개의 함수들(f 및 g)에 대한 콘볼루션 연산은 아래의 수학식 1과 같이 표현될 수 있다.
Figure 112019043352933-pct00001
따라서, 2개의 함수들(f 및 g)의 콘볼루션을 결정하기 위해, 변수(t)를 중심으로 아래의 의사-코드들로 요약할 수 있다.
[0042] (1) 합 변수를 0으로 설정한다.
[0043] (2) τ 변수에 대해 마이너스 무한대로부터 플러스 무한대로:
[0044] (2a) τ를 위의 범위의 리스트에서 다음 값으로 취한다.
[0045] (2b) 점들(f(τ) 및 g(t-τ))에서의 함수들(f 및 g)의 값들을 계산한다.
[0046] (2c) (2b)에서 계산된 2개의 값들을 함께 곱한다.
[0047] (2d) (2c)에서 계산된 값을 합 변수에 덧셈한다.
[0048] (2e) (2a)로 진행하고, 프로세스를 반복한다.
[0049] (2)의 종료
[0050] 이미지 프로세싱에서, 이미지들의 콘볼루션들이 유사하게 결정될 수 있다. 예컨대, 콘볼루션 계층은, 위의 함수(g)와 유사할 수 있는 입력 활성화 맵을 자신의 입력으로서 수신할 수 있다. 콘볼루션 계층은, 콘볼루션 계층의 출력 활성화 맵을 결정하기 위해, 위의 함수(f)와 유사할 수 있는 커널과 입력 활성화 맵을 콘볼루션할 수 있다. 커널은 행렬, 즉, 가중 값들의 2차원 어레이일 수 있다. 입력 활성화 맵과 커널의 값들의 곱셈은 위의 액션(2c)과 유사하다. 연속적인 함수들(f 및 g)과 달리, 입력 활성화 맵은 이산 픽셀 값들을 포함하고, 커널은 이산 가중 값들을 포함한다. 따라서, 수학식 1의 적분은 합산으로 대체될 수 있다.
[0051] 도 1은 예시적인 2-차원(2D) 콘볼루션(100)의 개략적인 예시를 도시한다. 예시적인 2D 콘볼루션(100)은 출력 활성화 맵(112)(또한 출력 피처 맵, 출력 이미지 또는 출력 채널로 지칭됨)을 결정하기 위해 커널(108)과 입력 활성화 맵(104)(또한 입력 피처 맵, 입력 이미지 또는 입력 채널로 지칭됨)을 콘볼루션한다. 5개의 픽셀들의 폭 및 5개의 픽셀의 높이를 갖는 입력 활성화 맵(104)은 25개의 픽셀 값들을 포함한다. 입력 활성화 맵(104) 내의 숫자는 입력 활성화 맵(104)의 픽셀 값들을 나타낸다. 도시된 바와 같이, 입력 활성화 맵(104)의 5개의 행들은 픽셀 값들((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)은 3개의 가중 값들의 높이 및 3개의 가중 값들의 폭을 갖는다. 커널(108) 내의 숫자들은 커널(108)의 가중 값들을 나타낸다. 커널(108)의 3개의 행들의 가중 값들은 (1,0,1), (0,1,0), (1,0,1)일 수 있다.
[0052] 입력 활성화 맵(104)과 커널(108)의 콘볼루션은 아래의 수학식 2로 표현될 수 있다.
Figure 112019043352933-pct00002
τ는 커널(108)의 가중 값들의 포지션들을 나타내고, t는 출력 활성화 맵들(112)의 픽셀 값들의 포지션들을 나타낸다. 커널(108)의 중심에서의 가중 값(108e)은 (0, 0)의 τ 값을 가질 수 있다. 가중 값(108a)은 (-1, -1)의 τ 값을 가질 수 있다. 가중 값(108g)은 (-1, +1)의 τ 값을 가질 수 있다. 가중 값(108i)은 (+1, +1)의 τ 값을 가질 수 있다.
[0053] 출력 활성화 맵(112) 내의 숫자들은 출력 활성화 맵(112)의 픽셀 값들을 나타낸다. 출력 활성화 맵(112)의 중심에서의 픽셀 값(112e)은 출력 활성화 맵(112)의 포지션(2, 2)에 있다. 픽셀 값(112a)은 출력 활성화 맵(112)의 포지션(1, 1)에 있을 수 있다. 픽셀 값(112g)은 출력 활성화 맵(112)의 포지션(1, 3)에 있을 수 있다. 픽셀 값(112i)은 출력 활성화 맵(112)의 포지션(3, 3)에 있을 수 있다.
[0054] 출력 활성화 맵(112)의 포지션(1, 1)에서의 픽셀 값(112a)을 결정하기 위해, 다음 곱셈들이 수행될 수 있고: 픽셀 값(104a)은 가중 값(108j)과 곱셈될 수 있고; 픽셀 값(104b)은 가중 값(108i)과 곱셈될 수 있고; 픽셀 값(104c)은 가중 값(108h)과 곱셈될 수 있고; 픽셀 값(104e)은 가중 값(108g)과 곱셈될 수 있고; 픽셀 값(104f)은 가중 값(108f)과 곱셈될 수 있고; 픽셀 값(104g)은 가중 값(108e)과 곱셈될 수 있고; 픽셀 값(104h)은 가중 값(108c)과 곱셈될 수 있고; 픽셀 값(104i)은 가중 값(108b)과 곱셈될 수 있고; 픽셀 값(104j)은 가중 값(108a)과 곱셈될 수 있다. 또한, 위의 곱셈들의 결과들의 누산 또는 합산이 수행될 수 있다.
[0055] 출력 활성화 맵(112)의 다른 픽셀 값들이 유사하게 결정될 수 있다. 아래의 수학식 3은 출력 활성화 맵(112)의 픽셀 값들(112a-112i)을 결정하는 것을 도시한다.
Figure 112019043352933-pct00003
예시적인 3-차원 콘볼루션 계층
[0056] 도 2는 콘볼루션 뉴럴 네트워크의 예시적인 3-차원 콘볼루션 계층(200)을 개략적으로 예시한다. 콘볼루션 계층(200)은 M개의 입력 활성화 맵들(204a1, 204b1,.., 및 204m1)을 수신하기 위한 M개의 입력 채널들(204)을 가질 수 있다. 입력 활성화 맵은 Q의 입력 활성화 맵 폭 및 P의 입력 활성화 맵 높이를 가질 수 있다. 입력 활성화 맵들(204a1, 204b1,.., 204m1)은 동일한 입력 활성화 맵 폭(Q) 및 입력 활성화 맵 높이(P)를 가질 수 있다.
[0057] 콘볼루션 계층(200)은 콘볼루션 계층(200)의 모든 커널들의 커널 스택(208)을 포함할 수 있다. 커널 스택(208)은 커널들(208a1-208an, 208b1-208bn 및 208m1-208mn)을 포함할 수 있다. 커널 스택(208)은 M개의 행들의 커널들을 포함한다. 커널 스택(208)은 N개의 열들의 커널들을 포함하고, 각각의 열은 또한 커널 스택(208)의 필터 뱅크로 지칭된다. 예컨대, 커널들(208a1, 208b1,..., 및 208m1)의 열은 커널 스택(208)의 필터 뱅크를 형성한다. 커널 스택(208)의 커널은 총
Figure 112019043352933-pct00004
*
Figure 112019043352933-pct00005
가중 값들을 갖는
Figure 112019043352933-pct00006
가중 값들의 커널 폭 및
Figure 112019043352933-pct00007
가중 값들의 커널 높이를 가질 수 있다. 커널 스택(208)의 커널들(208a1-208an, 208b1-208bn 및 208m1-208mn)은 동일한 커널 폭(
Figure 112019043352933-pct00008
) 및 커널 높이(
Figure 112019043352933-pct00009
)를 가질 수 있다.
[0058] 콘볼루션 계층(200)은 N개의 출력 활성화 맵들(212a1, 212a2, 212an)을 생성하기 위한 N개의 출력 채널들(212)을 가질 수 있다. 각각의 출력 활성화 맵은 커널 스택(208)의 필터 뱅크 및 대응하는 입력 활성화 맵들의 3-차원 콘볼루션 결과일 수 있다. 출력 활성화 맵은 Q'의 출력 활성화 맵 폭 및 P'의 출력 활성화 맵 높이를 가질 수 있다. 출력 활성화 맵들(212a1,.., 212a2,.., 212an)은 동일한 출력 활성화 맵 폭(Q') 및 출력 활성화 맵 높이(P')를 가질 수 있다.
[0059] 콘볼루션 계층(200)의 연산들은 아래의 의사-코드들로 요약될 수 있다.
[0060] (1) 값 1로부터 값 N까지의 변수 n에 대해:
[0061] (2a) 제n 출력 활성화 맵의 픽셀 값들을 제로의 값들로 설정한다.
[0062] (2b) 1의 값으로부터 M의 값까지의 변수 m에 대해:
[0063] (3a) 제n 출력 활성화 맵의 픽셀 값들 + =
(제m 입력 활성화 맵, 커널 스택의 포지션(m, n)에서의 커널)의 콘볼루션함, 여기서 "콘볼루션"은 2-차원 콘볼루션을 나타내며, "+="는 출력 활성화 맵 및 입력 활성화 맵과 커널의 콘볼루션의 결과의 점별 합산(pointwise summation)을 나타낸다.
[0064] (2b)의 종료.
[0065] (1)의 종료.
단일 명령, 다중 데이터 레지스터의 예시적인 활용
[0066] 본원에 개시된 시스템들 및 방법들은 컴퓨팅 디바이스들, 이를테면, 컴퓨터 서버, 퍼스널 컴퓨터, 태블릿 컴퓨터, 모바일 디바이스 또는 임베딩된 디바이스 상에서 CNN들의 효율적인 구현들을 가능하게 할 수 있다. 컴퓨팅 디바이스는 벡터 프로세서, VLIW(Very Long Instruction Word) 벡터 프로세서, 또는 SIMD(Single Instruction, Multiple Data) 프로세서를 포함할 수 있다. SIMD-가능 프로세서 또는 아키텍처는 “단일 명령 다중 데이터” 연산들의 사용을 통해 데이터 병렬 계산들을 수행할 수 있는 ISA(Instruction Set Architecture) 또는 그 ISA의 특정 하드웨어 구현일 수 있고, 여기서 단일 명령은 다수의 분리된 입력 데이터의 세트에 대해 동일한 연산을 수행하기 위해 병렬로 수행될 수 있다. 이러한 ISA의 비제한적 예들은 x86에 대한 SSE(Streaming SIMD extensions)의 확장군, ARM(Advanced RISC Machine)에 대한 NEON 또는 진보된 SIMD 확장, PowerPC에 대한 AltiVec 등을 포함한다. 따라서, CNN들의 효율적인 구현은, SIMD(Single Instruction, Multiple Data) 가능 아키텍처들을 구현하는 프로세서들 상의 SIMD 실행 유닛들 및 메모리의 활용도를 포함하는, 프로세서들의 최대 활용도와 같은 활용도를 개선할 수 있다.
[0067] 일부 구현들에서, 커널에 대한 바람직한 특징들은 커널의 중심 주위에 등거리를 포함할 수 있다. 홀수 정수인 치수를 갖는 커널(예컨대, 3 × 1 커널)은 이러한 바람직한 특징을 가질 수 있다. 그러나, 이러한 커널의 홀수 정수 치수는 2로 나눠질 수 없다. 그리고, SIMD 프로세서 레지스터들은 2의 거듭제곱(power)(그리고 따라서 짝수)인 레지스터 폭을 가질 수 있다. 단순한 콘볼루션의 구현들은, 데이터 복제 또는 콘볼루션들의 동시의(together) 바인딩 중 하나 또는 둘 모두 없이는, SIMD 가능 프로세서의 SIMD 실행 유닛의 완전한 활용을 달성할 수 없다. 예컨대 "im2col” 및 "col2im" 변환들은 데이터 복제에 사용할 수 있고, 이는 메모리 활용을 희생시킨다. 또한, "im2col" 및 "col2im" 변환들은 계산적으로 비용이 많이 들 수 있다. 콘볼루션들을 함께 번들링하는 것은 (본원에 개시된 시스템들 및 방법들과 비교하여) 수평 SIMD 연산들을 요구할 수 있고, 이는 SIMD 실행 유닛의 활용도를 감소시킬 수 있는 추가의 연산들일 수 있다.
[0068] 도 3은 3 × 3, 1 × 3 또는 3 × 1 커널들의 콘볼루션들에 의해 완전히 활용되지 않는 4 폭의 SIMD(single instruction, multiple data) 레지스터의 개략적인 예시를 도시한다. 도 3의 좌측 패널은 3 × 3 커널(304a)을 도시하고, 각각의 백색 정사각형은 커널(304a)의 가중 값을 나타낸다. SIMD 레지스터(308a)는 커널(304a)의 4개의 가중 값들을 포함할 수 있다. SIMD 레지스터(308a)가 포함할 수 있는 가중 값들의 수는 가중 값들의 데이터 타입 및 SIMD 레지스터(308a)의 비트 폭(예컨대, 128 비트) 둘 모두에 의존한다. 따라서, 커널(304a)의 단순한 구현은 SIMD 레지스터(308a)를 완전히 활용하는 데 실패한다. 도 3의 중간 패널은 1 × 3 커널(304b)을 도시하고, 각각의 백색 정사각형은 커널(304b)의 가중 값을 나타낸다. SIMD 레지스터(308b)는 커널(304b)의 4개의 가중 값들을 포함할 수 있다. 따라서, 커널(304b)의 단순한 구현은 (4 이외의 폭들을 갖는 SIMD 레지스터들뿐만 아니라) SIMD 레지스터(308b)를 완전히 활용할 수 없다. 도 3의 우측 패널은 3 × 1 커널(304c)을 도시하고, 각각의 백색 정사각형은 커널(304c)의 가중 값을 나타낸다. SIMD 레지스터(308c)는 커널(304c)의 4개의 가중 값들을 포함할 수 있다. 따라서, 커널(304c)의 단순한 구현은 SIMD 레지스터(308c)를 완전히 활용하는 데 실패한다.
콘볼루션 계층의 입력 액션 맵들의 픽셀 값들의 예시적인 재정렬
[0069] 메모리 활용도(n)에 부정적으로 또는 실질적으로 부정적으로 영향을 미치지 않고서, SIMD 레지스터의 활용도를 개선하기 위해, 입력 활성화 맵들의 픽셀 값들이 재정렬될 수 있다. 도 4는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 입력 활성화 맵들의 픽셀 값들의 예시적인 재정렬(400)을 개략적으로 예시한다. 입력 활성화 맵들의 픽셀 값을 재정렬하는 것은 입력 활성화 맵들을 입력 활성화 맵들에 대한 기본 레이아웃(기본 입력 활성화 맵 레이아웃)으로부터 입력 활성화 맵들에 대한 인터리빙된 레이아웃(인터리빙된 입력 활성화 맵 레이아웃)으로 변환한다.
[0070] 기본 입력 활성화 맵 레이아웃의 경우, 입력 활성화 맵은 채널 단위로 정렬될 수 있어서, 제1 입력 활성화 맵의 모든 픽셀 값들은 (메모리 위치의 관점에서) 제2 입력 활성화 맵의 모든 픽셀들 앞에 저장되고, 이러한 식일 수 있다. 도 4에 예시된 바와 같이, 콘볼루션 계층은 자신의 입력으로서 4개의 입력 활성화 맵들(404, 408, 412 및 416)을 수신할 수 있다. 기본 레이아웃의 경우, 입력 활성화 맵들(404, 408, 412 및 416)의 픽셀들은 채널 단위로 저장될 수 있다. 예컨대, 제1 입력 활성화 맵(404)의 픽셀 값들(404a 및 404b)은 제2 입력 활성화 맵(408)의 픽셀 값들(408a 및 408b) 앞에 저장될 수 있다. 다른 예로서, 제2 입력 활성화 맵(408)의 픽셀 값들(408a 및 408b)은 제3 입력 활성화 맵(412)의 픽셀 값들(412a 및 412b) 앞에 저장될 수 있다. 또 다른 예로서, 제3 입력 활성화 맵(412)의 픽셀 값(412a 및 412b)은 제4 입력 활성화 맵(416)의 픽셀 값(416a 및 416b) 앞에 저장될 수 있다.
[0071] 도 4는 4개의 입력 활성화 맵들(404, 408, 412, 및 416)로부터 인터리빙된 레이아웃의 재정렬된 입력 활성화 맵(420)을 도시한다. 재정렬된 입력 활성화 맵(420)은 입력 활성화 맵들(404, 408, 412, 416)의 픽셀 값들을 포함할 수 있다. 입력 활성화 맵들(404, 408, 412, 416) 내의 숫자들은 픽셀 값들의 인덱스 위치들을 나타낸다. 인터리빙된 레이아웃의 경우, 제1 입력 활성화 맵(404)의 제1 픽셀 값(404a)(입력 활성화 맵(404)의 인덱스 위치 1에서의 픽셀 값(404a)) 다음에 제2 입력 활성화 맵(408)의 제1 픽셀 값(408a)(입력 활성화 맵(408) 인덱스 위치 1에서의 픽셀 값(408a))이 이어지고, 다음에 제3 입력 활성화 맵(412)의 제1 픽셀 값(412a)(입력 활성화 맵(412)의 인덱스 위치 1에서의 픽셀 값(412a))이 이어지고, 다음에 그리고 제4 입력 활성화 맵(416)의 제1 픽셀 값(416a)(입력 활성화 맵(404)의 인덱스 위치 1에서의 픽셀 값(416a))이 이어질 수 있다.
[0072] 제4 입력 활성화 맵(416)의 제1 픽셀 값(416a) 다음에 제1 입력 활성화 맵(404)의 제2 픽셀 값(404b)(입력 활성화 맵(404)의 인덱스 위치 2에서의 픽셀 값(404b))이 이어지고, 다음에 제2 입력 활성화 맵(408)의 제2 픽셀 값(408b)(입력 활성화 맵(408)의 인덱스 위치 2에서의 픽셀 값(408b))이 이어지고, 다음에 제3 입력 활성화 맵(412)의 제2 픽셀 값(412b)(입력 활성화 맵(412)의 인덱스 위치 2에서의 픽셀 값(412b))이 이어지고, 다음에 그리고 제4 입력 활성화 맵(416)의 제2 픽셀 값(416b)(입력 활성화 맵(416)의 인덱스 위치 2에서의 픽셀 값(416b))이 이어질 수 있다. 재정렬된 입력 활성화 맵(420)에서, 모든 입력 활성화 맵들(404, 408, 412, 및 416)의 모든 픽셀 값들이 유사하게 정렬될 수 있다. 따라서, 재정렬된 입력 활성화(420)의 각각의 인덱싱된 위치는 그 인덱스에서의 개별 입력 활성화 맵(404, 408, 412 및 416)으로부터의 픽셀 값의 클러스터를 포함할 수 있다.
[0073] 유사하게, 콘볼루션 계층이 M개의 입력 활성화 맵들을 수신한 후에, 입력 활성화 맵들의 픽셀 값들은 기본 입력 활성화 맵 레이아웃으로부터 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬될 수 있다. 예컨대, 픽셀 값들은, 제M 입력 활성화 맵의 제1 픽셀 값까지, 제1 입력 활성화 맵의 제1 픽셀 값 다음에 제2 입력 활성화 맵의 제1 픽셀이 이어지는 식으로, 정렬될 수 있다. 제M 입력 활성화 맵의 제2 픽셀 값까지, 제M 입력 활성화 맵의 제1 픽셀 값 다음에 제1 입력 활성화 맵의 제2 픽셀 값이 이어지고 그리고 다음에 제2 입력 활성화 맵의 제2 픽셀 값이 이어질 수 있다. 이러한 재정렬은, 모든 M개의 입력 활성화 맵들의 모든 픽셀 값들이 유사하게 정렬될 때까지 계속될 수 있다. 재정렬 프로세스는, M개의 개별 입력 활성화 맵들을 포함하는 큰 재정렬 입력 활성화 맵을 발생시킨다. 재정렬된 입력 활성화 맵의 각각의 인덱싱된 위치는 그 인덱스에서의 개별 입력 활성화 맵들로부터의 픽셀 값들의 클러스터를 포함할 수 있다.
[0074] 따라서, 출력 활성화 맵들(404, 408, 412, 및 416)은 입력 활성화 맵들과 동일한 방식으로 인터리빙된다. 입력 활성화 맵들(404, 408, 412 및 416)의 행 및 열은 재정렬된 입력 활성화 맵(420)의 행 및 열에 직접적으로 대응한다. 예컨대, 입력 활성화 맵(404)의 포지션(i, j)은 재정렬된 입력 활성화 맵(420)의 포지션(i, j)에서의 픽셀들의 클러스터에 인덱스한다.
[0075] 유리하게도, 이 재정렬은, 예컨대, CNN의 초기 콘볼루션 계층 또는 제1 콘볼루션 계층에 의해 최대한으로 한번 수행될 필요가 있다. 일부 실시예들에서, 어떠한 재정렬도 필요하지 않을 수 있다. 예컨대, 제1 콘볼루션 계층은 하나의 입력 활성화 맵을 콘볼루션하고, 다수의 출력 활성화 맵들을 생성할 수 있다. 이 경우, 입력 활성화 맵의 픽셀 값들의 어떠한 재정렬도 필요하지 않을 수 있다. 다수의 출력 활성화 맵들을 생성하기 위해 하나의 입력 활성화 맵을 콘볼루션하는 것은 하나의 입력 활성화 맵에 대해 다수의 2-차원(2D) 콘볼루션들을 동시에 수행하는 것으로 간주될 수 있다. 유리하게도, 본원에 개시된 방법들은 단일 입력 활성화 맵에 대한 2D 콘볼루션들의 효율적인 계산들을 허용할 수 있다.
[0076] 입력 활성화 맵 인터리빙된 레이아웃의 경우, 콘볼루션 계층의 출력 활성화 맵들은 또한 유사한 레이아웃일 수 있다. 유리하게도, 픽셀 값들의 재정렬은, 예컨대, CNN의 초기 콘볼루션 계층 또는 제1 콘볼루션 계층에 의해 최대한으로 한번 수행될 수 있다. 따라서, 인터리빙된 레이아웃으로의 픽셀 값들의 재정렬이 CNN의 하나의 콘볼루션 계층에 대해서만 수행될 수 있기 때문에, CNN은 효율적으로 구현될 수 있다.
[0077] 예컨대, 출력 활성화 맵들에 대한 인터리빙된 레이아웃(인터리빙된 출력 활성화 맵 레이아웃)에서 재정렬 출력 활성화 맵은 출력 활성화 맵들의 기본 레이아웃(기본 출력 활성화 맵 레이아웃)의 출력 활성화 맵들을 포함할 수 있다. 인터리빙된 출력 활성화 맵 레이아웃의 경우, 픽셀 값들은, 제N 출력 활성화 맵의 제1 픽셀 값까지, 제1 출력 활성화 맵의 제1 픽셀 값 다음에 제2 출력 활성화 맵의 제1 픽셀이 이어지는 식으로, 정렬될 수 있다. 기본 출력 활성화 맵 레이아웃의 출력 활성화 맵들의 숫자는 N으로 표시될 수 있다. 제N 출력 활성화 맵의 제2 픽셀 값까지, 제N 출력 활성화 맵의 제1 픽셀 값 다음에 제1 출력 활성화 맵의 제2 픽셀 값이 이어지고 그리고 다음에 제2 출력 활성화 맵의 제2 픽셀 값이 이어질 수 있다. N개의 출력 활성화 맵들의 다른 픽셀 값들이 유사하게 정렬될 수 있다. 인터리빙된 레이아웃의 출력 활성화 맵은 N개의 개별 출력 활성화 맵들을 포함한다. 출력 활성화 맵의 각각의 인덱싱된 위치는 그 인덱스에서의 개별 출력 활성화 맵들로부터의 픽셀 값들의 클러스터를 포함할 수 있다.
[0078] 일부 구현들에서, 기본 출력 활성화 맵 레이아웃의 경우, 출력 활성화 맵은 채널 단위로 정렬될 수 있어서, 제1 출력 활성화 맵에 속하는 모든 픽셀 값들은 (메모리 위치의 관점에서) 제2 출력 활성화 맵에 속하는 모든 픽셀들 앞에 저장되고, 이러한 식일 수 있다. 일부 구현들에서, 인터리빙된 출력 활성화 맵 레이아웃의 재정렬된 출력 활성화 맵의 픽셀 값들은 기본 출력 활성화 맵 레이아웃으로 정렬될 수 있다. 예컨대, 제1 출력 활성화 맵은 재정렬된 출력 활성화 맵의 제1 픽셀, 제(N+1) 픽셀, 제(2N+1) 픽셀 등을 포함할 수 있다. 다른 예로서, 제2 출력 활성화 맵은 재정렬된 출력 활성화 맵의 제2 픽셀, 제(N+2) 픽셀, 제(2N+2) 픽셀 등을 포함할 수 있다. 또 다른 예로서, 제N 출력 활성화 맵은 재정렬된 출력 활성화 맵의 제N 픽셀, 제(2*N) 픽셀, 제(3*N) 픽셀 등을 포함할 수 있다.
[0079] 유리하게도, CNN 계층의 출력이 인터리빙된 출력 활성화 맵 레이아웃일 수 있기 때문에, 각각의 CNN 계층 이후의 데이터 리-셔플링(data re­shuffling)은 불필요할 수 있다. 결과적으로, 입력 활성화 맵들은 인터리빙된 레이아웃으로 한번에 재정렬되어야만 한다(예컨대, CNN의 입력 계층의 입력 활성화 맵들일 수 있는 CNN의 입력 활성화 맵들). 이어서, 인터리빙된 레이아웃은, 후속 계층들의 입력 활성화 맵들의 픽셀 값을 재정렬하지 않고서, CNN의 후속 계층을 통해 전파할 수 있다.
커널 스택의 커널들의 가중 값들의 러널들의 타일들로의 예시적인 재정렬
[0080] 콘볼루션 계층(400)의 입력 활성화 맵들(404, 408, 412 및 416)이 입력 활성화 맵 타일 레이아웃으로 재정렬되는 경우, 커널 스택(208)의 커널들(208a1-208an, 208b1-208bn, 및 208m1-208mn)은, 임베딩된 디바이스와 같은 컴퓨팅 디바이스의 프로세서의 로딩, 산술 또는 저장 동작들을 위한 벡터 연산들을 이용하기 위해, 커널들의 기본 레이아웃으로부터 커널들의 타일 레이아웃으로 재정렬될 수 있다. 도 2에 도시된 바와 같이, 커널 스택(208)의 행들의 수 및 입력 채널들(204)의 수는 동일할 수 있다. 커널 스택(208)의 열들의 수 및 출력 채널들(212)의 수는 동일할 수 있다. 커널 스택(208)의 커널은
Figure 112019043352933-pct00010
가중 값들의 커널 폭 및
Figure 112019043352933-pct00011
가중 값들의 커널 높이를 가질 수 있다.
[0081] 도 5a-5c, 6a, 6b 및 7은 가중 재정렬의 예들을 예시한다. 사용되는 방법에 의존하여, 채널들의 입력 및 출력 수(따라서 커널 스택 치수들)에 대한 어떠한 제한들도 없다. 제한들을 갖는 설명된 방법들은 일반적으로 이해하기가 더 쉽고, 유연성과 계산 효율성 트레이드오프를 아주 조금 더 빠르게 밸런싱한다. 메모리 사용량에 관련하여, 그들은 일부 구현들에서 동일하게 효율적이다. 제1 단계는 도 5a-5c, 6a, 6b 및 7에 예시된 모든 방법들 간에 공유된다. 제1 단계에서, 입력 채널들은 위에 설명된 바와 같이 인터리빙된 포맷으로 재배열된다. 다시 말해서, 제1 채널의 제1 픽셀은 제2 채널의 제1 픽셀 앞에 오고,..., 이는 결국 제n 채널의 제1 픽셀 앞에 오고, 이는 제1 채널의 제2 픽셀 앞에 오는 식이다. 후속으로, 커널 가중치들을 재정렬한다. 이러한 단계는 사용된 방법에 기반하여 변한다.
[0082] 뉴럴 네트워크를 트레이닝시키는 것은 기본 커널 레이아웃의 커널 스택의 커널들의 가중 값들을 학습하는 것을 포함할 수 있다. 뉴럴 네트워크의 트레이닝이 오프라인 프로세스일 수 있기 때문에(예컨대, 컴퓨터 서버, 개인용 컴퓨터, 태블릿 컴퓨터, 모바일 디바이스 또는 임베딩된 디바이스와 같은 컴퓨팅 디바이스가 결과적인 뉴럴 네트워크를 사용하여 이미지 분할 및 눈 추적을 수행하기 전에), 개시된 시스템들 및 방법들을 사용하여 커널들의 가중 값들을 재정렬하는 것은, 뉴럴 네트워크의 런타임 성능의 손실없이, 오프라인 방식으로(예컨대, 커널들의 가중 값들을 학습한 후에) 한번 유리하게 수행될 수 있다. 본원에 개시된 방법들은 임베딩된 프로세서들, 정규 CPU(central processing unit)들, GPU(graphical processing unit)들 또는 전용 하드웨어 ASIC(application specific integrated circuit) 설계들을 갖는 컴퓨팅 디바이스 상에서 CNN들을 효율적으로 구현하는 데 사용될 수 있다.
[0083] 도 5a-5c는 커널 스택(208)의 커널들의 가중 값들을 러널들(runnels)의 타일들을 포함하는 타일 포맷으로 재정렬하는 예들을 개략적으로 예시한다. 이러한 예들에서 커널 치수들에 대한 어떠한 제한들도 없다. 도 5a는 2개의 행들의 커널들 및 2개의 열들의 커널들을 갖는 콘볼루션 계층(200)의 2 × 2 커널 스택(208)을 도시한다. 커널들의 제1 행은 커널(504) 및 커널(508)을 포함한다. 커널들의 제2 열은 커널(512) 및 커널(516)을 포함한다. 커널 스택(208)의 행들의 수 및 입력 채널들의 수(204)가 동일할 수 있고, 커널 스택(208)의 열들의 수 및 출력 채널들의 수(212)가 동일할 수 있기 때문에, 커널 스택(208)은 2개의 출력 활성화 맵들을 생성하기 위해 2개의 입력 활성화 맵들을 콘볼루션한다. 커널 스택(208)의 커널은 3 × 3의 치수를 갖는다. 커널들 내의 숫자들은 커널들의 가중 값들의 인덱스를 나타낸다. 커널 스택(208)의 커널의 가중 값이 32 비트의 크기를 갖고, SIMD 레지스터와 같은 프로세서 레지스터가 64 비트의 폭을 갖는 경우, SIMD 레지스터는 2개의 가중 값들을 한번에 포함할 수 있다.
[0084] 커널 스택(208)의 커널들(504, 508, 512, 및 516)의 가중 값들(504a-504i, 508a-508i, 512a-512i 및 516a-516i)은 커널들의 기본 레이아웃(기본 커널 레이아웃)으로부터 커널들의 타일 레이아웃(타일 커널 레이아웃)으로 재정렬될 수 있다. 커널들의 타일 레이아웃은 러널들의 타일들을 포함할 수 있다. 일부 구현들에서, 러널은 다음 특성들을 갖는 가중 값들의 정렬된 리스트일 수 있다. 첫째, 러널 내의 가중 값들의 수는, 가중 값들의 데이터 타입이 주어지면, SIMD 레지스터와 같은 프로세서 레지스터가 한번에 포함할 수 있는 가중 값들의 수와 동일할 수 있다. 예컨대, 128-비트 SIMD 레지스터에 대해, 러널은 반부동들(half floats)의 커널에 대한 8개의 반정밀(half­precision) 부동 소수점 가중 값들(16-비트 부동 소수점 수들) 또는 부동들의 커널에 대한 4개의 단정밀(single­precision) 부동 소수점 가중 값들(32-비트 부동 소수점 수들) 포함할 수 있다.
[0085] 둘째, 러널들은, 커널에서 임의의 시작점이 주어지면, 다음의 순회 우선순위에 관련하여 반복적으로 채워질 수 있다:
[0086] (1) 커널 스택(208)의 폭 치수(도 5a에 예시된 커널 스택(208)에 대해 2와 동일한 N 치수 또는 커널 스택 x 방향(
Figure 112019043352933-pct00012
))를 따른 순회.
[0087] (2) 커널 스택(208)의 높이 치수(도 5a에 예시된 커널 스택(208)에 대해 2와 동일한 M 치수 또는 커널 스택 y 방향(
Figure 112019043352933-pct00013
))를 따른 순회.
[0088] (3) 개별 커널의 폭 치수(도 5a에 예시된 커널 스택(208)의 커널에 대해 2와 동일한
Figure 112019043352933-pct00014
)를 따른 순회.
[0089] (4) 개별 커널의 높이 치수(도 5a에 예시된 커널 스택(208)의 커널에 대해 2와 동일한
Figure 112019043352933-pct00015
)를 따른 순회.
[0090] 순회는, 러널이 가중 값들로 완전히 채워질 때까지 계속된다.
[0091] 일부 구현들에서, 타일은 러널들의 정렬된 리스트일 수 있고, 여기서 러널들의 수는, "타일"이 항상 커널 스택 폭 경계(또한 커널 스택 행 경계로 지칭됨)에 시작하고 커널 스택 폭 경계에서 종료하도록 선택될 수 있다. 따라서, 마지막 러널이 커널 스택 행의 끝에서 종료할 때까지, 타일은 점점 더 많은 러널들로 채워질 수 있다.
[0092] 64-비트 폭을 갖는 SIMD 레지스터에 대해, 러널 폭은 또한 64 비트일 수 있다. 커널들의 가중 값이 32 비트의 크기를 갖는다면, 64-비트 SIMD 레지스터는 2개의 가중 값들을 포함할 수 있다. 따라서, 러널은 2개의 32-비트 가중 값들을 포함할 수 있다. 타일 당 러널들의 수는 위의 순회 우선순위에 기반한 것일 수 있고, 러널은 우선 커널(504)의 인덱스 위치 1에서 가중 값(504a)으로 채워지고, 이어서 커널(508)의 인덱스 위치 1에서 가중 값(508a)으로 채워질 수 있다. 가중 값들(504a 및 508a)을 채운 후에, 러널이 완전히 채워진다. 가중 값(504a)이 커널 스택 폭 경계에 있고, 가중 값(508a)이 다른 커널 스택 폭 경계에 있기 때문에, 가중 값들(504a 및 508a)을 갖는 러널을 갖는 타일은 커널 스택 폭 경계에서 시작하고, 커널 스택 폭 경계에서 종료된다. 따라서, 타일 당 러널들의 수는 1일 수 있다.
[0093] 도 5b는 도 5a에 도시된 기본 레이아웃의 커널 스택(208)으로부터 변환된 타일 커널 레이아웃의 커널 스택(208m1)을 도시한다. 타일 레이아웃의 커널 스택(208m1)은 하나 이상의 타일들을 포함할 수 있다. 타일은 2개의 가중 값들을 가진 하나의 러널을 포함할 수 있다. 커널 스택(208m1)은, 커널 스택(208m1)이 콘볼루션 계층(200)의 모든 가중 값들을 포함하는 데 필요한 타일들을 포함하도록 콘볼루션 계층(200)의 모든 가중 값들을 포함할 수 있다.
[0094] 커널 스택(208m1)은 하나의 러널마다 18개의 타일들(520a-520r)을 포함할 수 있다. 커널 스택(208m1)은 표 1에 도시된 타일들을 포함할 수 있다.
타일 가중 값들
타일 1 520a 커널(504)의 인덱스 위치 1에서의 가중 값(504a),
커널(508)의 인덱스 위치 1에서의 가중 값(508a)
타일 2 520b 커널(512)의 인덱스 위치 1에서의 가중 값(512a),
커널(516)의 인덱스 위치 1에서의 가중 값(516a)
타일 3 520c 커널(504)의 인덱스 위치 2에서의 가중 값(504b),
커널(508)의 인덱스 위치 2에서의 가중 값(508b)
타일 4 520d 커널(512)의 인덱스 위치 2에서의 가중 값(512b),
커널(516)의 인덱스 위치 2에서의 가중 값(516b)
타일 5 520e 커널(504)의 인덱스 위치 3에서의 가중 값(504c),
커널(508)의 인덱스 위치 3에서의 가중 값(508c)
타일 6 520f 커널(512)의 인덱스 위치 3에서의 가중 값(512c),
커널(516)의 인덱스 위치 3에서의 가중 값(516c)
타일 7 520g 커널(504)의 인덱스 위치 4에서의 가중 값(504d),
커널(508)의 인덱스 위치 4에서의 가중 값(508d)
타일 8 520h 커널(512)의 인덱스 위치 4에서의 가중 값(512d),
커널(516)의 인덱스 위치 4에서의 가중 값(516d)
타일 9 520i 커널(504)의 인덱스 위치 5에서의 가중 값(504e),
커널(508)의 인덱스 위치 5에서의 가중 값(508e)
타일 10 520j 커널(512)의 인덱스 위치 5에서의 가중 값(512e),
커널(516)의 인덱스 위치 5에서의 가중 값(516e)
타일 11 520k 커널(504)의 인덱스 위치 6에서의 가중 값(504f),
커널(508)의 인덱스 위치 6에서의 가중 값(508f)
타일 12 520l 커널(512)의 인덱스 위치 6에서의 가중 값(512f),
커널(516)의 인덱스 위치 6에서의 가중 값(516f)
타일 13 520m 커널(504)의 인덱스 위치 7에서의 가중 값(504g),
커널(508)의 인덱스 위치 7에서의 가중 값(508g)
타일 14 520n 커널(512)의 인덱스 위치 7에서의 가중 값(512g),
커널(516)의 인덱스 위치 7에서의 가중 값(516g)
타일 15 520o 커널(504)의 인덱스 위치 8에서의 가중 값(504h),
커널(508)의 인덱스 위치 8에서의 가중 값(508h)
타일 16 520p 커널(512)의 인덱스 위치 8에서의 가중 값(512h),
커널(516)의 인덱스 위치 8에서의 가중 값(516h)
타일 17 520q 커널(504)의 인덱스 위치 9에서의 가중 값(504i),
커널(508)의 인덱스 위치 9에서의 가중 값(508i)
타일 18 520r 커널(512)의 인덱스 위치 9에서의 가중 값(512i),
커널(516)의 인덱스 위치 9에서의 가중 값(516i)
커널 스택(208m1)의 타일들
[0095] 요약하면, 콘볼루션 계층(200)은, 2개의 출력 활성화 맵들을 생성하기 위해 3 × 3 커널들을 포함하는 2 × 2 커널 스택과 2개의 입력 활성화 맵들을 콘볼루션한다. 커널 스택의 커널의 가중 값은 32 비트의 크기를 가질 수 있다. 따라서, 64-비트 SIMD 레지스터는 2개의 가중 값들을 포함할 수 있다(SIMD 레인들 수는 2이다). 64-비트 러널은 2의 가중 값들을 포함할 수 있다. 그리고, 타일은 하나의 러널을 포함할 수 있다.
[0096] 도 5c는 도 5a에 도시된 기본 레이아웃의 커널 스택(208)으로부터 변환된 다른 타일 커널 레이아웃의 커널 스택(208m2)을 도시한다. SIMD 레지스터가 92-비트 폭을 갖고, 커널의 가중 값이 32 비트의 크기를 갖는 경우, 92-비트 SIMD 레지스터는 3개의 가중 값들을 포함할 수 있다. 커널 스택(208m2)은 표 2에 도시된 타일들을 포함할 수 있다.
타일 러널 가중 값들
타일 1 러널 524a1 커널(504)의 인덱스 위치 1에서의 가중 값(504a),
커널(508)의 인덱스 위치 1에서의 가중 값(508a),
커널(512)의 인덱스 위치 1에서의 가중 값(512a)
러널 524a2 커널(516)의 인덱스 위치 1에서의 가중 값(516a),
커널(504)의 인덱스 위치 2에서의 가중 값(504b),
커널(508)의 인덱스 위치 2에서의 가중 값(508b)
타일 2 러널 524b1 커널(512)의 인덱스 위치 2에서의 가중 값(512b),
커널(516)의 인덱스 위치 2에서의 가중 값(516b),
커널(504)의 인덱스 위치 3에서의 가중 값(504c)
러널 524b2 커널(508)의 인덱스 위치 3에서의 가중 값(508c),
커널(512)의 인덱스 위치 3에서의 가중 값(512c),
커널(516)의 인덱스 위치 3에서의 가중 값(516c)
타일 3 러널 524c1 커널(504)의 인덱스 위치 4에서의 가중 값(504d),
커널(508)의 인덱스 위치 4에서의 가중 값(508d),
커널(512)의 인덱스 위치 4에서의 가중 값(512d)
러널 524c2 커널(516)의 인덱스 위치 4에서의 가중 값(516d),
커널(504)의 인덱스 위치 5에서의 가중 값(504e),
커널(508)의 인덱스 위치 5에서의 가중 값(508e)
타일 4 러널 524d1 커널(512)의 인덱스 위치 5에서의 가중 값(512e),
커널(516)의 인덱스 위치 5에서의 가중 값(516e),
커널(504)의 인덱스 위치 6에서의 가중 값(504f)
러널 524d2 커널(508)의 인덱스 위치 6에서의 가중 값(508f),
커널(512)의 인덱스 위치 6에서의 가중 값(512f),
커널(516)의 인덱스 위치 6에서의 가중 값(516f)
타일 5 러널 524e1 커널(504)의 인덱스 위치 7에서의 가중 값(504g),
커널(508)의 인덱스 위치 7에서의 가중 값(508g),
커널(512)의 인덱스 위치 7에서의 가중 값(512g)
러널 524e2 커널(516)의 인덱스 위치 7에서의 가중 값(516g),
커널(504)의 인덱스 위치 8에서의 가중 값(504h),
커널(508)의 인덱스 위치 8에서의 가중 값(508h)
타일 6 러널 524f1 커널(512)의 인덱스 위치 8에서의 가중 값(512h),
커널(516)의 인덱스 위치 8에서의 가중 값(516h),
커널(504)의 인덱스 위치 9에서의 가중 값(504i)
러널 524f2 커널(508)의 인덱스 위치 9에서의 가중 값(508i),
커널(512)의 인덱스 위치 9에서의 가중 값(512i),
커널(516)의 인덱스 위치 9에서의 가중 값(516i)
커널 스택(208m2)의 타일들
[0097] 또 다른 예로서, 콘볼루션 계층(200)은, 6개 출력 활성화 맵들을 생성하기 위해 5 × 5 커널을 포함하는 4 × 6 커널 스택과 4개의 입력 활성화 맵들을 콘볼루션할 수 있다. 커널 스택의 커널의 가중 값은 16 비트의 크기를 가질 수 있다. 따라서, 128-비트 SIMD 레지스터는 8개의 가중 값들을 포함할 수 있다. 128-비트 러널은 8개의 가중 값들을 포함할 수 있다. 그리고 타일은 3개의 러널들을 포함할 수 있다. 이러한 예에서, 커널 스택 폭 경계(즉, 행의 시작)에서 시작하여, 다음 커널 스택 폭 경계에 도달하기 위해 3개의 러널들이 요구될 수 있기 때문에, 타일 당 러널들의 수는 3일 수 있다. 제1 러널은, 커널 스택 폭 경계에서 종료되지 않는 커널 스택 포지션들((1,1), (1,2), (1,3), (1,4), (1,5), (1, 6), (2, 1) 및 (2, 2))에서의 커널들의 인덱스 위치 1에서 픽셀 값들을 포함할 수 있다. 제2 러널은, 커널 스택 폭 경계에서 종료되지 않는 커널 스택 포지션들((2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3) 및 (3, 4))에서의 커널들의 인덱스 위치 1에서 픽셀 값들을 포함할 수 있다. 제3 러널은, 커널 스택 폭 경계에서 종료되지 않는 커널 스택 포지션들((3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), 및 (4, 6))에서의 커널들의 인덱스 위치 1에서 픽셀 값들을 포함할 수 있다.
커널 가중치들의 예시적인 재정렬 ― 출력 채널들의 수는 SMID 레지스터 폭의 배수와 동일함
[0098] 도 6a 및 6b는 커널 스택(208)의 커널들의 가중 값들을 러널들의 타일들을 포함하는 타일 포맷으로 재정렬하는 예들을 개략적으로 예시한다. 이러한 예들에서 커널 치수들에 대한 어떠한 제한들도 없다. 이 예들에 예시된 방법은, (네트워크의 각각의 콘볼루션 계층 및 모든 각각의 콘볼루션 계층 중에서) 출력 채널들의 수가 벡터 프로세서의 SIMD 레지스터 폭의 배수이어야 한다는 제한으로, 가장 간단하고 효율이다. 따라서, 이 방법은 도 5a-5c를 참조하여 위에 설명된 방법보다 덜 유연하다.
[0099] 도 6a를 참조하면, 도 6a는 커널들의 8개의 행들(M = 8) 및 커널들의 8개의 열들(N = 8)을 갖는 콘볼루션 계층(200)의 8 × 8 커널 스택(208)을 도시한다. 커널들의 제1 행은 8개의 커널들(601-608)을 포함한다. 커널의 제2 행은 8개의 커널들(609-616)을 포함한다. 커널의 제3행은 8개의 커널들(617-624)을 포함한다. 커널의 제4 행은 8개의 커널들(625-632)을 포함한다. 제5 행의 커널은 8개의 커널들(633-640)을 포함한다. 커널의 제6 행은 8개의 커널들(641-648)을 포함한다. 커널의 제7 행은 8개의 커널들(649-656)을 포함한다. 커널의 제8 행은 8개의 커널들(657-664)을 포함한다.
[0100] 커널 스택(208)의 행들의 수 및 입력 채널들의 수(204)가 동일할 수 있고, 커널 스택(208)의 열들의 수 및 출력 채널들의 수(212)가 동일할 수 있기 때문에, 커널 스택(208)은 8개의 출력 활성화 맵들을 생성하기 위해 8개의 입력 활성화 맵들을 콘볼루션한다. 커널 스택(208)의 커널은 이 예에서 3 × 3의 치수를 갖는다. 커널 스택(208)의 커널의 가중 값이 32 비트의 크기를 갖고, SIMD 레지스터와 같은 프로세서 레지스터가 64 비트의 폭을 갖는 경우, SIMD 레지스터는 2개의 가중 값들을 한번에 포함할 수 있다.
[0101] 도 6a는 레지스터 폭이 4개의 엘리먼트들인 경우 커널 가중치들을 메모리에 배열하는 것을 도시한다. 이것은 네트워크의 설계 시에 수행되는 한번만의 동작이다. 커널 스택(208)의 가중 값들(601a-601i, 602a-602i,..., 663a-663i 및 664a-664i)은 커널들의 기본 레이아웃(기본 커널 레이아웃)으로부터 커널들의 타일 레이아웃(타일 커널 레이아웃)으로 재정렬될 수 있다. 커널 가중치들의 개략적인 표현들 내의 숫자들은 재정렬 후의 가중 값들의 순서를 나타낸다. 커널들의 타일 레이아웃은 러널들의 타일들을 포함할 수 있다. 일부 구현들에서, 러널은 다음 특성들 중 하나 이상을 갖는 가중 값들의 정렬된 리스트일 수 있다. 첫째, 러널 내의 가중 값들의 수는, 가중 값들의 데이터 타입이 주어지면, SIMD 레지스터와 같은 프로세서 레지스터가 한번에 포함할 수 있는 가중 값들의 수와 동일할 수 있다. 예컨대, 128-비트 SIMD 레지스터에 대해, 러널은 반부동들(half floats)의 커널에 대한 8개의 반정밀(half­precision) 부동 소수점 가중 값들(16-비트 부동 소수점 수들) 또는 부동들의 커널에 대한 4개의 단정밀(single­precision) 부동 소수점 가중 값들(32-비트 부동 소수점 수들) 포함할 수 있다.
[0102] 둘째, 러널들은, 커널에서 임의의 시작점이 주어지면, 다음의 순회 우선순위에 관련하여 반복적으로 채워질 수 있다:
[0103] (1) 커널 스택(208)의 폭 치수(도 6a에 예시된 커널 스택(208)에 대해 8와 동일한 N 차원 또는 커널 스택 x 방향(
Figure 112019043352933-pct00016
))를 따른 순회.
[0104] (2) 개별 커널의 폭 치수(도 6a에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00017
)을 따른 순회.
[0105] (3) 커널 스택(208)의 높이 치수(도 6a에 예시된 커널 스택(208)에 대해 8와 동일한 M 치수 또는 커널 스택 y 차원(
Figure 112019043352933-pct00018
))를 따른 순회.
[0106] (4) 개별 커널의 높이 치수(도 6a에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00019
)를 따른 순회.
[0107] 순회는, 러널이 가중 값들로 완전히 채워질 때까지 계속된다.
[0108] 이 순회는 대안적으로 다음과 같이 표현될 수 있다:
[0109] (1) 각각의
Figure 112019043352933-pct00020
에 대해
[0110] (2) 각각의
Figure 112019043352933-pct00021
에 대해
[0111] (3) 각각의
Figure 112019043352933-pct00022
에 대해
[0112] (4) 각각의
Figure 112019043352933-pct00023
에 대해.
[0113] 일부 구현들에서, 타일은 러널들의 정렬된 리스트일 수 있고, 여기서 러널들의 수는, "타일"이 항상 커널 스택 폭 경계(또한 커널 스택 행 경계로 지칭됨)에 시작하지 않고 커널 스택 폭 경계에서 종료하지 않도록 선택될 수 있다. 도 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)의 가중 값들은 재정렬되고 프로세서의 다른 코어 상에서 프로세싱될 수 있다. 일부 구현들에서, 타일은 러널들의 정렬된 리스트일 수 있고, 여기서 러널들의 수는, "타일"이 항상 커널 스택 폭 경계(또한 커널 스택 행 경계로 지칭됨)에 시작하고 커널 스택 폭 경계에서 종료하도록 선택될 수 있다.
[0114] 128-비트 폭을 갖는 SIMD 레지스터에 대해, 러널 폭은 또한 128 비트일 수 있다. 커널들의 가중 값이 8 비트의 크기를 갖는다면, 128-비트 SIMD 레지스터는 8개의 가중 값들을 포함할 수 있다. 따라서, 러널은 8개의 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에 예시된 바와 같이 유사하게 정렬될 수 있고, 또 다른 프로세서 코어로 프로세싱될 수 있다.
[0115] 도 6b는 도 6a에 도시된 커널 스택(208)의 커널들의 가중 값들을 러널들의 타일들을 포함하는 타일 포맷으로 재정렬하는 다른 예를 개략적으로 예시한다. 커널 스택(208)의 가중 값들(601a-601i, 602a-602i,..., 663a-663i 및 664a-666i)은 커널들의 기본 레이아웃(기본 커널 레이아웃)으로부터 커널들의 타일 레이아웃(타일 커널 레이아웃)으로 재정렬될 수 있다. 커널 가중치들의 개략적인 표현들 내의 숫자들은 재정렬 후의 가중 값들의 순서를 나타낸다. 커널들의 타일 레이아웃은 러널들의 타일들을 포함할 수 있다. 일부 구현들에서, 러널은 다음 특성들 중 하나 이상을 갖는 가중 값들의 정렬된 리스트일 수 있다. 첫째, 러널 내의 가중 값들의 수는, 가중 값들의 데이터 타입이 주어지면, SIMD 레지스터와 같은 프로세서 레지스터가 한번에 포함할 수 있는 가중 값들의 수와 동일할 수 있다. 예컨대, 128-비트 SIMD 레지스터에 대해, 러널은 반부동들의 커널에 대한 8개의 반정밀 부동 소수점 가중 값들(16-비트 부동 소수점 수들) 또는 부동들의 커널에 대한 4개의 단정밀 부동 소수점 가중 값들(32-비트 부동 소수점 수들) 포함할 수 있다.
[0116] 둘째, 러널들은, 커널에서 임의의 시작점이 주어지면, 다음의 순회 우선순위에 관련하여 반복적으로 채워질 수 있다:
[0117] (1) 커널 스택(208)의 폭 치수(도 6b에 예시된 커널 스택(208)에 대해 8와 동일한 N 차원 또는 커널 스택 x 방향(
Figure 112019043352933-pct00024
))를 따른 순회.
[0118] (2) 개별 커널의 높이 치수(도 6b에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00025
)를 따른 순회.
[0119] (3) 커널 스택(208)의 높이 치수(도 6b에 예시된 커널 스택(208)에 대해 8와 동일한 M 치수 또는 커널 스택 y 차원(
Figure 112019043352933-pct00026
))를 따른 순회.
[0120] (4) 개별 커널의 폭 차원(도 6b에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00027
)을 따른 순회.
[0121] 순회는, 러널이 가중 값들로 완전히 채워질 때까지 계속된다.
[0122] 이 순회는 대안적으로 다음과 같이 표현될 수 있다:
[0123] (1) 각각의
Figure 112019043352933-pct00028
에 대해
[0124] (2) 각각의
Figure 112019043352933-pct00029
에 대해
[0125] (3) 각각의
Figure 112019043352933-pct00030
에 대해
[0126] (4) 각각의
Figure 112019043352933-pct00031
에 대해.
[0127] 일부 구현들에서, 타일은 러널들의 정렬된 리스트일 수 있고, 여기서 러널들의 수는, "타일"이 항상 커널 스택 폭 경계(또한 커널 스택 행 경계로 지칭됨)에 시작하지 않고 커널 스택 폭 경계에서 종료하지 않도록 선택될 수 있다. 도 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)의 가중 값들은 재정렬되고 프로세서의 다른 코어 상에서 프로세싱될 수 있다. 일부 구현들에서, 타일은 러널들의 정렬된 리스트일 수 있고, 여기서 러널들의 수는, "타일"이 항상 커널 스택 폭 경계(또한 커널 스택 행 경계로 지칭됨)에 시작하고 커널 스택 폭 경계에서 종료하도록 선택될 수 있다.
[0128] 64-비트 폭을 갖는 SIMD 레지스터에 대해, 러널 폭은 또한 64 비트일 수 있다. 커널들의 가중 값이 32 비트의 크기를 갖는다면, 64-비트 SIMD 레지스터는 2개의 가중 값들을 포함할 수 있다. 따라서, 러널은 2개의 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에 예시된 바와 같이 유사하게 정렬될 수 있고, 또 다른 프로세서 코어로 프로세싱될 수 있다.
커널 가중치들의 예시적인 재정렬―부가적인 병렬 프로세싱
[0129] 도 7은 커널 스택(208)의 커널들의 가중 값들을 러널들의 타일들을 포함하는 타일 포맷으로 재정렬하는 예를 개략적으로 예시한다. 도 7에 설명된 방법은 간단하고 효율적이지만, 도 6a-6b에 설명된 방법보다 더 제한적이다. 이 방법은 도 5a-5c에 설명된 방법보다 덜 유연하다. 그러나, 도 7에서 설명된 방법으로 더 병렬의 프로세싱이 가능하다. 이 방법은, (
Figure 112019043352933-pct00032
*
Figure 112019043352933-pct00033
*
Figure 112019043352933-pct00034
) mod(레지스터 폭) = 0일 때 매우 효율적이다.
[0130] 도 7을 참조하면, 도 7은 커널들의 8개의 행들(M = 8) 및 커널들의 8개의 열들(N = 8)을 갖는 콘볼루션 계층(200)의 8 × 8 커널 스택(208)을 도시한다. 커널들의 제1 행은 8개의 커널들(601-608)을 포함한다. 커널의 제2 행은 8개의 커널들(609-616)을 포함한다. 커널의 제3행은 8개의 커널들(617-624)을 포함한다. 커널의 제4 행은 8개의 커널들(625-632)을 포함한다. 제5 행의 커널은 8개의 커널들(633-640)을 포함한다. 커널의 제6 행은 8개의 커널들(641-648)을 포함한다. 커널의 제7 행은 8개의 커널들(649-656)을 포함한다. 커널의 제8 행은 8개의 커널들(657-664)을 포함한다.
[0131] 커널 스택(208)의 행들의 수 및 입력 채널들의 수(204)가 동일할 수 있고, 커널 스택(208)의 열들의 수 및 출력 채널들의 수(212)가 동일할 수 있기 때문에, 커널 스택(208)은 8개의 출력 활성화 맵들을 생성하기 위해 8개의 입력 활성화 맵들을 콘볼루션한다. 커널 스택(208)의 커널은 이 예에서 3 × 3의 치수를 갖는다. 커널 스택(208)의 커널의 가중 값이 32 비트의 크기를 갖고, SIMD 레지스터와 같은 프로세서 레지스터가 64 비트의 폭을 갖는 경우, SIMD 레지스터는 2개의 가중 값들을 한번에 포함할 수 있다.
[0132] 커널 스택(208)의 가중 값들(601a-601i, 602a-602i,..., 663a-663i, 및 664a-664i)은 커널들의 기본 레이아웃(기본 커널 레이아웃)으로부터 커널들의 타일 레이아웃(타일 커널 레이아웃)으로 재정렬될 수 있다. 커널 가중치들의 개략적인 표현들 내의 숫자들은 재정렬 후의 가중 값들의 순서를 나타낸다. 일부 구현들에서, 러널은 다음 특성들 중 하나 이상을 갖는 가중 값들의 정렬된 리스트일 수 있다. 첫째, 러널 내의 가중 값들의 수는, 가중 값들의 데이터 타입이 주어지면, SIMD 레지스터와 같은 프로세서 레지스터가 한번에 포함할 수 있는 가중 값들의 수와 동일할 수 있다. 예컨대, 128-비트 SIMD 레지스터에 대해, 러널은 반부동들의 커널에 대한 8개의 반정밀 부동 소수점 가중 값들(16-비트 부동 소수점 수들) 또는 부동들의 커널에 대한 4개의 단정밀 부동 소수점 가중 값들(32-비트 부동 소수점 수들) 포함할 수 있다.
[0133] 둘째, 러널들은, 커널에서 임의의 시작점이 주어지면, 다음의 순회 우선순위에 관련하여 반복적으로 채워질 수 있다:
[0134] (1) 개별 커널의 높이 치수(도 7에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00035
)를 따른 순회.
[0135] (2) 커널 스택(208)의 높이 치수(도 7에 예시된 커널 스택(208)에 대해 8와 동일한 M 치수 또는 커널 스택 y 차원(
Figure 112019043352933-pct00036
))를 따른 순회.
[0136] (3) 개별 커널의 폭 치수(도 7에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00037
)를 따른 순회.
[0137] (4) 커널 스택(208)의 높이 치수(도 7에 예시된 커널 스택(208)에 대해 8와 동일한 M 치수 또는 커널 스택 y 차원(
Figure 112019043352933-pct00038
))를 따른 순회.
[0138] 순회는, 러널이 가중 값들로 완전히 채워질 때까지 계속된다.
[0139] 이 순회는 대안적으로 다음과 같이 표현될 수 있다:
[0140] (1) 각각의
Figure 112019043352933-pct00039
에 대해
[0141] (2) 각각의
Figure 112019043352933-pct00040
에 대해
[0142] (3) 각각의
Figure 112019043352933-pct00041
에 대해
[0143] (4) 각각의
Figure 112019043352933-pct00042
에 대해.
[0144] 일부 구현들에서, 타일은 러널들의 정렬된 리스트일 수 있고, 여기서 러널들의 수는, "타일"이 항상 커널 스택 높이 경계(또한 커널 스택 열 경계로 지칭됨)에 시작하고 커널 스택 높이 경계에서 종료하도록 선택될 수 있다. 도 6a에 예시된 바와 같이, 커널들(601, 609, 617, 625, 633, 641, 649 및 657)의 가중 값들은 재정렬되고, 프로세서의 제1 코어 상에서 프로세싱될 수 있고, 커널들(602, 610, 618, 626, 634, 642, 650 및 658)의 가중 값들은 재정렬되고, 프로세서의 제2 코어 상에서 프로세싱되고, 이러한 식일 수 있다.
[0145] 128-비트 폭을 갖는 SIMD 레지스터에 대해, 러널 폭은 또한 128 비트일 수 있다. 커널들의 가중 값이 8 비트의 크기를 갖는다면, 128-비트 SIMD 레지스터는 8개의 가중 값들을 포함할 수 있다. 따라서, 러널은 8개의 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)로 채워질 수 있다. 이 가중 값들은 하나의 프로세서 코어로 프로세싱될 수 있다. 나머지 가중 값들은 예시된 바와 같이 정렬되고, 다른 프로세서 코어들로 프로세싱될 수 있다.
[0146] 일부 실시예들에서, 러널들은, 커널에서 임의의 시작점이 주어지면, 다음의 순회 우선순위에 관련하여 반복적으로 채워질 수 있다:
[0147] (1) 개별 커널의 폭 치수(도 7에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00043
)를 따른 순회.
[0148] (2) 개별 커널의 높이 치수(도 7에 예시된 커널 스택(208)의 커널에 대해 3와 동일한
Figure 112019043352933-pct00044
)를 따른 순회.
[0149] (3) 커널 스택(208)의 높이 치수(도 7에 예시된 커널 스택(208)에 대해 8와 동일한 M 치수 또는 커널 스택 y 차원(
Figure 112019043352933-pct00045
))를 따른 순회.
[0150] (4) 커널 스택(208)의 높이 치수(도 7에 예시된 커널 스택(208)에 대해 8와 동일한 M 치수 또는 커널 스택 x 차원(
Figure 112019043352933-pct00046
))를 따른 순회.
[0151] 순회는, 러널이 가중 값들로 완전히 채워질 때까지 계속된다.
[0152] 이 순회는 대안적으로 다음과 같이 표현될 수 있다:
[0153] (1) 각각의
Figure 112019043352933-pct00047
에 대해
[0154] (2) 각각의
Figure 112019043352933-pct00048
에 대해
[0155] (3) 각각의
Figure 112019043352933-pct00049
에 대해
[0156] (4) 각각의
Figure 112019043352933-pct00050
에 대해.
커널 가중치들의 예시적인 재정렬
[0157] 도 5a-5c, 6a, 6b 및 7을 참조하여 설명된 방법들은 이하에 예시된 바와 같이 일반화될 수 있다. "REB"는 SIMD 레지스터 내의 엘리먼트의 크기를 비트 단위로 나타낸다. "RWB"는 SIMD 레지스터의 폭을 비트 단위로 나타낸다. "RWE"는 SIMD 레지스터의 폭을 엘리먼트 단위로 나타낸다. 러널은 N개의 가중치들의 콜렉션을 포함하고, 여기서 N = RWE이다. 다시 말해서, 다음의 관계는 RWE*REB = RWB를 나타낸다(각각의 SIMD 레지스터 내의 엘리먼트들의 수와 각각의 엘리먼트가 차지하는 비트들의 수의 곱은 SIMD 레지스터의 비트 단위의 크기와 동일함). 예컨대, 128-비트 SIMD 레지스터는, 하드웨어 지원에 의존하여, 32-비트의 4개의 엘리먼트들 또는 16-비트의 8개의 엘리먼트들 또는 8-비트의 32개의 엘리먼트들, 1-비트의 128개의 엘리먼트들 및 모든 다른 가능한 조합들로 분할될 수 있다.
[0158]
Figure 112019043352933-pct00051
는 커널의 폭을 엘리먼트 단위로 나타낸다. 보편성을 잃지 않고서, 커널 내의 각각의 엘리먼트는 REB 비트들일 수 있다. 그렇지 않다면, 하드웨어가 해당 비트-깊이를 지원하는 경우, 비트 단위의 각각의 엘리먼트의 크기가 결국 비트 단위의 커널 엘리먼트들의 크기와 동일하게 되거나, 그렇지 않은 경우, 로드 시에 엘리먼트 크기를 다음의 지원되는 크기로 유도하도록, SIMD 레지스터가 상이하게 분할될 수 있다.
Figure 112019043352933-pct00052
는 커널 높이를 엘리먼트 단위로 나타낸다. 예컨대, 3 × 3 커널은
Figure 112019043352933-pct00053
= 3 및
Figure 112019043352933-pct00054
= 3을 갖는다. 5x1 커널은
Figure 112019043352933-pct00055
= 1, 및
Figure 112019043352933-pct00056
= 5를 갖는다.
[0159]
Figure 112019043352933-pct00057
는 커널들(커널 엘리먼트들이 아니라, 개별 커널들)의 커널 스택의 폭을 나타낸다.
Figure 112019043352933-pct00058
는 커널들의 커널 스택의 높이를 나타낸다. 예컨대, 3 × 1 커널들로 구성된 4 × 12 커널 스택은
Figure 112019043352933-pct00059
= 12(또한 출력 채널들 수와 동일함),
Figure 112019043352933-pct00060
= 4(또한 입력 채널들의 수와 동일함),
Figure 112019043352933-pct00061
= 1 및
Figure 112019043352933-pct00062
= 3을 갖는다.
[0160] 이하는 커널들을 열 단위로 그리고 행 단위로 인덱싱하는 것을 설명한다. 인덱싱은 1 차원일 수 있다. 커널들은 좌측으로부터 우측으로 그리고 최상부에서 최하부로 인덱싱되고, 1에서
Figure 112019043352933-pct00063
*
Figure 112019043352933-pct00064
까지의 수를 그들에 할당할 수 있다. 아래의 표 3은 하나의 단일 커널의 가중치들을 보여주고, 여기서 위의 다이어그램은 커널 스택의 상이한 커널들을 묘사한 것이다.
Figure 112019043352933-pct00065
커널 스택의 커널들의 인덱싱
[0161] 각각의 개별 커널 내의 가중치들은 유사하게 열 단위로 그리고 행 단위로 인덱싱될 수 있다. 아래의 표 4는 하나의 단일 커널의 가중치들을 보여주고, 여기서 위의 표 3은 커널 스택의 상이한 커널들을 보여준다. 커널의 엘리먼트들은 좌측으로부터 우측으로 그리고 위에서 아래로 증분하여(incrementally) 인덱싱된다.
Figure 112019043352933-pct00066
커널의 커널 가중치들의 인덱싱
[0162] 도 6a 및 6b를 참조하여 설명된 방법은 행이 레지스터 폭의 엘리먼트들의 수로 나눠질 것을 요구할 수 있다. 다시 말해서, (
Figure 112019043352933-pct00067
*
Figure 112019043352933-pct00068
) mod (RWE) = 0이다. 그러나, 이것이 가능하다면, 모든 합리적인 어레인지먼트들은 다음과 같이 주어질 수 있다.
[0163] 연관된 인덱스들의 수를 증가시키는 데 있어서 커널 스택(표 3)을 워킹하기(walking) 시작한다. 한번에 커널들, 즉, N(여기서 N = RWE)개의 커널을 순회하고, 각각의 개별 커널(표 4)의 대응하는(예컨대, 동일한) 인덱스들로부터 N(여기서 N = RWE)개의 가중치들을 선택함으로써 러널을 구성한다. 이어서, 표 3의 인덱스들을 따르는 N개의 커널들의 다른(또는 동일한) 배치(batch)를 선택하고, 대응하는 인덱스들을 가진 N개의 가중치들을 선택함으로써 다른 러널을 구성한다. 동일한 커널들이 선택될 수는 있지만, 선택된 가중치들은 상이해야 하고, 그렇지 않다면 가중치들은 결국 복제될 것이다. 그래서, 예컨대, 가장 간단하고 합리적인 어레인지먼트들은 도 6a에 도시된 어레인지먼트들일 것이고, 커널 1 가중치 1 다음에 커널 2 가중치 1이 이어지고, 다음에 커널 3 가중치 1이 이어지고,..., 다음에 커널 N(여기서 N은 RWE와 동일함) 가중치 1이 이어지고, 다음에 커널 1 가중치 2가 이어지고,..., 다음에 커널 N 가중치 2가 이어지고,..., 다음에 커널 1 가중치 M(여기서 M =
Figure 112019043352933-pct00069
*
Figure 112019043352933-pct00070
)이 이어지고,..., 다음에 커널 N 가중치 M이 이어지고, 다음에, 모든 커널들이 소모될 때까지, N개의 커널들의 제2 패치에 대해 정확히 동일한 패턴이 이어진다.
[0164] 모든 가능한 어레인지먼트들(그들 중 대부분은 간단한 것이 아니라 확실히 가능함)에는 다음의 순회가 주어질 것이고, 커널 스택의 N개의 상이한 열들로부터 N개의 커널들을 선택한다(다시 말해서, 커널 스택의 동일한 열들에서 2개의 커널들이 없음). 이어서, N(여기서 N = RWE)개의 가중치들로 러널을 구성하고, 각각은 전술된 선택된 커널들 중 하나로부터의 것이다. 모든 가중치가 모두 소모될 때까지 각각의 커널이 스택의 별개의 열에서 나와야 한다는 제한을 갖고서, N 커널의 또 다른(또는 동일한) 배치(batch)로부터의 다른 N개의 가중치들로 다른 러널을 만듦으로써 프로세스를 반복한다. 위 또는 아래에 언급되는 순회들 중 임의의 것이 주어진 각각의 개별 어레인지먼트는 약간 상이한 알고리즘(이것은 소프트웨어 코드 또는 하드웨어 로직임)이 정확한 출력에 도달하는 것을 요구한다. 일부 실시예들에서, 동일한 알고리즘은 상이한 어레인지먼트들에 적용될 수 없다.
[0165] 도 7을 참조하여 설명된 방법들과 관련하여, 위의 정의들이 적용되지만, 순회는 약간 상이하다. 이러한 실시예에서, 선택된 커널들은 (도 6a 및 6b를 참조하여 설명된 방법들과 같이 커널들이 상이한 열들로부터 오는 것을 강제하는 것과 대조적으로) 하나의 열로 제한될 수 있다. 표 3은, 표 5에 도시된 바와 같이, (좌측으로부터 우측으로 그리고 최상부에서 최하부로와 대조적으로) 최상부에서 최하부로 그리고 좌측에서 우측으로 재인덱싱될 수 있다.
Figure 112019043352933-pct00071
커널 스택의 커널들의 인덱싱
[0166] 연관된 인덱스들의 수를 증가시키는 데 있어서 커널 스택(표 5)을 순회한다. 한번에 커널들, 즉, N(여기서 N = RWE)개의 커널을 순회하고, 각각의 개별 커널(표 4)의 대응하는(예컨대, 동일한) 인덱스들로부터 N(여기서 N = RWE)개의 가중치들로 러널을 구성한다. 이어서, 표 5의 인덱스들을 따르는 N개의 커널들의 다른(또는 동일한) 배치를 선택하고, 대응하는 인덱스들을 가진 다른 N개의 가중치들로부터 러널을 형성한다. 모든 가능한(그러나 대부분은 간단하지 않은) 어레인지먼트들은 이러한 순회에 의해 도달될 수 있고, 커널 스택의 동일한 열에서 N개의 커널들을 선택한다. 이어서, N(여기서 N = RWE)개의 가중치들로 러널을 만들고, 각각은 전술된 선택된 커널들 중 하나로부터의 것이다. 모든 커널들이 스택의 동일한 열에서 나와야 한다는 제한을 갖고서, 모든 가중치들이 소모될 때까지, N 커널들의 다른(또는 동일한) 배치에서 다른 N개의 가중치들을 선택함으로써 프로세스를 반복한다. 상이한 어레인지먼트들은 약간 상이한 알고리즘들을 요구할 수 있다.
출력 활성화 맵들을 타일 단위로 결정하는 예시적인 프로세스
[0167] 입력 활성화 맵들(예컨대, 입력 활성화 맵들(404, 408, 412, 및 416))의 픽셀 값들을 재정렬하고, 메모리에서 러널 단위로 커널 스택(208)의 커널들의 가중 값을 재정렬(예컨대, 도 5a-5c에 도시된 재정렬)한 후에, 가중 값들은 아래의 예시적인 의사-코드들에 의해 약술된 바와 같이 출력 활성화 맵들을 결정하기 위해 타일 단위로 프로세싱될 수 있다.
[0168] (1) 재정렬된 출력 활성화 맵의 각각의 행(r)에 대해:
[0169] (2) 출력 활성화 맵의 각각의 열(c)에 대해:
[0170] (3a) 포지션(c, r)에서의 재정렬된 출력 활성화 맵의 값을 0의 값으로 설정한다.
[0171] (3b) 커널 스택의 각각의 타일에 대해:
[0172] (4) 커널 스택의 그 타일의 각각의 러널 및 대응하는 재정렬된 입력 활성화 맵 픽셀 값(또는 2개 이상의 대응하는 재정렬된 입력 활성화 맵 픽셀 값):
[0173] (5a) 대응하는 재정렬된 입력 활성화 맵 픽셀 값(들)을 로딩하고, SIMD 레지스터에 복제한다.
[0174] (5b) 재정렬된 출력 활성화 맵 픽셀 값, 재정렬된 입력 활성화 맵 픽셀 값 및 러널을 FMADD하고,
여기서 FMADD는 융합-곱셈-덧셈 연산을 나타낸다.
[0175] (4)의 종료.
[0176] (3b)의 종료.
[0177] (3c) 재정렬된 출력 활성화 맵의 값들의 클러스터를 포지션(c, r)에서의 출력 활성화 맵에 저장한다.
[0178] (2)의 종료.
[0179] 단계(1)의 종료.
[0180] 일부 구현들에서, 액션들(4) 및 (5)는 FMADD 연산들의 효율적인 구현들을 위해 완전히 전개될 수 있다.
[0181] 위의 예시적인 의사-코드들은 다음과 같이 기록될 수 있다.
Figure 112019043352933-pct00072
[0182] 도 8은, 출력 활성화 맵들을 타일 단위로 결정하는 것을 예시하기 위해, 콘볼루션 뉴럴 네트워크(800)의 예시적인 3D 콘볼루션 계층을 개략적으로 예시한다. CNN(800)은, 2개의 입력 활성화 맵들(204a1 및 204a2)(M = 2)을 수신하기 위한 2개의 입력 채널들(204) 및 2개의 출력 활성화 맵들(212a1 및 212a2)(N = 2)을 결정하기 위한 2개의 출력 채널들(212)을 갖는, 도 2에 도시된 CNN(200)의 예이다. 도 8에서, 커널 스택(208)은 커널들(208a1, 208a2, 208b1 및 208b2)을 포함하고, 각각의 커널은 1 × 1(
Figure 112019043352933-pct00073
= 1 및
Figure 112019043352933-pct00074
= 1)의 치수를 갖는다. SIMD 레지스터가 가중 값들의 데이터 타입이 주어진 커널 스택(208)의 2개의 가중 값들을 포함할 수 있고, 레지스터의 폭이 2인 경우, 하나의 러널을 갖는 타일 2는 커널(208a1) 및 커널(208a2)을 포함하고, 하나의 러널을 갖는 타일 2는 커널(208b1) 및 커널(208b2)을 포함한다.
[0183] 0-기반 인덱싱의 경우, 출력 채널들(212)의 채널 0(즉, 출력 활성화 맵(212a1)), 행 0 및 열 0(약어로 출력(0, 0, 0) 및 출력(1, 0, 0))을 결정하기 위해, 다음의 동작들을 수행한다.
[0184] (1) 입력(0, 0, 0)을 로딩하고, SIMD 레지스터에 복제한다(입력(0, 0, 0)은 입력 채널들(204)의 채널 0(즉, 입력 활성화 맵(204a1)), 행 0, 열 0을 나타냄).
[0185] (2) 타일 1의 러널(커널들(208a1 및 208a2)을 포함함)과 입력(0, 0, 0)을 곱셈하고, 액션(2)과 누산한다.
[0186] (3) 입력(1, 0, 0)을 로딩하고, SIMD 레지스터에 복제한다.
[0187] (4) 타일 2(커널들(208b1 및 208b2)을 포함함)의 러널과 입력(1, 0, 0)을 곱셈한다.
[0188] (5) 인터리빙된 정렬을 유지하기 위해 출력(0, 0, 0) 및 출력(1, 0, 0)을 연속적으로 저장한다.
[0189] 출력(0, 0, 1) 및 출력(1, 0, 1)을 결정하기 위해, 다음의 동작들을 수행한다.
[0190] (1) 입력(0, 0, 1)을 로딩하고, SIMD 레지스터에 복제한다.
[0191] (2) 타일 1의 러널과 입력(0, 0, 1)을 곱셈한다.
[0192] (3) 입력(1, 0, 1)을 로딩하고, SIMD 레지스터에 복제한다.
[0193] (4) 타일 2의 러널과 입력(1, 0, 1)을 곱셈하고, 액션(2)과 누산한다.
[0194] (5) 출력(0, 0, 1) 및 출력(1, 0, 1)을 연속적으로 저장한다.
[0195] 위의 프로세스는 출력(0, 1, 0) 및 출력(1, 1, 0), 및 출력(0, 1, 1) 및 출력(1, 1, 1)을 결정하기 위해 반복될 수 있다.
[0196] 입력 활성화 맵들의 픽셀 값들을 재정렬하고, 메모리에서 러널 단위로 커널 스택(208)의 커널들의 가중 값을 재정렬(예컨대, 도 6a 및 6b에 도시된 재정렬)한 후에, 가중 값들은 아래의 예시적인 의사-코드들에 의해 약술된 바와 같이 출력 활성화 맵들을 결정하기 위해 타일 단위로 프로세싱될 수 있다.
Figure 112019043352933-pct00075
[0197] 본원에서 설명된 상이한 어레인지먼트들은 이탤릭체 부분에 영향을 미친다. 다시 말해서, 커널이 배열되는 방법에 의존하여, 로딩되고 곱셈된 인터리빙된 활성화 맵으로부터의 입력의 해당 러널이 상이할 수 있다.
[0198] 입력 활성화 맵들의 픽셀 값들을 재정렬하고, 메모리에서 러널 단위로 커널 스택(208)의 커널들의 가중 값을 재정렬(예컨대, 도 7에 도시된 재정렬)한 후에, 가중 값들은 아래의 예시적인 의사-코드들에 의해 약술된 바와 같이 출력 활성화 맵들을 결정하기 위해 타일 단위로 프로세싱될 수 있다.
Figure 112019043352933-pct00076
[0199] 본원에서 설명된 상이한 어레인지먼트들은 이탤릭체 부분에 영향을 미친다. 다시 말해서, 커널이 배열되는 방법에 의존하여, 로딩되고 곱셈된 인터리빙된 활성화 맵으로부터의 입력의 해당 러널이 상이할 수 있다.
[0200] 유리하게도, 일부 실시예들에서, 복제는 러널 셋업으로 인해 효율적으로 작동하고, 커널 스택의 폭은 SIMD 레지스터가 포함할 수 있는 가중 값들의 수의 배수이다. 일부 실시예들에서, 커널 스택의 폭은, SIMD 레지스터가 포함할 수 있는 가중 값들의 수의 배수가 아닐 수 있다. 본원에 개시된 방법을 효율적으로 구현하기 위해, 수행되는 로드들 및 저장들의 타입들이 전문화될 수 있다. CNN은, 커널 스택의 폭이 SIMD 레지스터가 포함할 수 있는 가중 값들의 수의 배수가 되도록 설계될 수 있다. 이러한 설계로, 더 양호한 SIMD 활용도가 달성될 수 있다.
커널 스택 가중 값들의 다수의 행들을 스트래들링하는 커널 스택 러널들로 출력 활성화 맵들을 타일 단위로 결정하는 예시적인 프로세스
[0201] 도 9a-9b는, 커널 스택 가중 값들의 다수의 행들을 스트래들링하는 커널 스택 러널들을 갖는 타일 단위로 출력 활성화 맵들을 결정하는 것을 예시하기 위해, 콘볼루션 뉴럴 네트워크의 예시적인 3D 콘볼루션 계층(900)을 개략적으로 예시한다. CNN(900)은, 4개의 입력 활성화 맵들(M = 4)을 수신하기 위한 4개의 입력 채널들 및 6개의 출력 활성화 맵들(N = 6)을 결정하기 위한 6개의 출력 채널들을 갖는, 도 2에 도시된 CNN(200)의 예이다. 도 9a에서, 4 × 6의 치수를 갖는 커널 스택(208)은 커널들(208a1-208a6, 208b1-208b6, 208b1-208b6, 208c1-208c6 및 208d1-208d6)을 포함하고, 각각의 커널은 5 × 3(
Figure 112019043352933-pct00077
= 5 및
Figure 112019043352933-pct00078
= 3)의 치수를 갖는다. 도 9a에 도시된 바와 같이, 커널들(208a1-208a6, 208b1-208b6, 208c1-208c6 및 208d1-208d6)은 각각 커널들(0-5, 6-11, 12-17 및 18-23)로 약칭된다.
[0202] 커널 스택(208)의 커널의 가중 값은 트리플릿(triplet)(x, y, z)으로 표현될 수 있고, x는 커널을 나타내고, y는 커널(x)의 열/폭 좌표를 나타내고, z는 커널(x)의 행/높이 좌표를 나타낸다. 도 9a에 도시된 바와 같이, 커널(208a4 3)의 가중 값들의 트리플릿 표현은, 0-기반 인덱싱으로, (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)이다.
[0203] 설계 시에서 커널 스택(208)의 커널들의 가중 값들을 러널들의 타일들로 재정렬하는 것은 지식(knowing)을 요구할 수 있다.
[0204] (1) 커널 스택(208)이 설계된 아키텍처의 SIMD 레지스터의 폭; 및
[0205] (2) 커널 스택(208)의 커널들의 가중 값들의 데이터 타입.
[0206] 예컨대, 컴퓨터 아키텍처의 SIMD 레지스터가 128 비트의 폭을 가지며, 가중 값들이 반 정밀 부동 소수점 수들(즉, 각각 16 비트)이면, 각각의 러널은 8개의 가중 값들(128 비트의 SIMD 레지스터의 폭을 16 비트의 가중 값의 크기로 나눈 값)을 보유할 수 있다.
[0207] 커널 스택(208)의 커널들은 커널들의 기본 레이아웃에서 커널들의 타일 레이아웃으로 재정렬될 수 있다. 타일 레이아웃의 커널 스택(208)은 3개의 러널들마다 14개의 타일들을 포함할 수 있다. 표 6은 트리플릿 표현을 사용하여 타일 레이아웃의 커널 스택(208)의 가중 값들을 보여준다. 도 9에서, 타일 0, 러널 0은 대각선 교차 해칭 패턴으로 도시되고, 타일 0, 러널 1은 수직 교차 해칭 패턴으로 도시되고, 타일 0, 러널 2는 교차 해칭 패턴으로 도시된다.
타일 러널 가중 값들
타일 0 러널 0 (0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(6,0,0),(7,0,0)
러널 1 (8,0,0),(9,0,0),(10,0,0),(11,0,0),(12,0,0),(13,0,0),(14,0,0),(15,0,0)
러널 2 (16,0,0),(17,0,0),(18,0,0),(19,0,0),(20,0,0),(21,0,0),(22,0,0),(23,0,0)
타일 1 러널 0 (0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(6,1,0),(7,1,0)
러널 1 (8,1,0),(9,1,0),(10,1,0),(11,1,0),(12,1,0),(13,1,0),(14,1,0),(15,1,0)
러널 2 (16,1,0),(17,1,0),(18,1,0),(19,1,0),(20,1,0),(21,1,0),(22,1,0),(23,1,0)
타일 2 러널 0 (0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0),(6,2,0),(7,2,0)
러널 1 (8,2,0),(9,2,0),(10,2,0),(11,2,0),(12,2,0),(13,2,0),(14,2,0),(15,2,0)
러널 2 (16,2,0),(17,2,0),(18,2,0),(19,2,0),(20,2,0),(21,2,0),(22,2,0),(23,2,0)
타일 3 러널 0 (0,0,1),(1,0,1),(2,0,1),(3,0,1),(4,0,1),(5,0,1),(6,0,1),(7,0,1)
러널 1 (8,0,1),(9,0,1),(10,0,1),(11,0,1),(12,0,1),(13,0,1),(14,0,1),(15,0,1)
러널 2 (16,0,1),(17,0,1),(18,0,1),(19,0,1),(20,0,1),(21,0,1),(22,0,1),(23,0,1)
타일 4 러널 0 (0,1,1),(1,1,1),(2,1,1),(3,1,1),(4,1,1),(5,1,1),(6,1,1),(7,1,1)
러널 1 (8,1,1),(9,1,1),(10,1,1),(11,1,1),(12,1,1),(13,1,1),(14,1,1),(15,1,1)
러널 2 (16,1,1),(17,1,1),(18,1,1),(19,1,1),(20,1,1),(21,1,1),(22,1,1),(23,1,1)
타일 5 러널 0 (0,2,1),(1,2,1),(2,2,1),(3,2,1),(4,2,1),(5,2,1),(6,2,1),(7,2,1)
러널 1 (8,2,1),(9,2,1),(10,2,1),(11,2,1),(12,2,1),(13,2,1),(14,2,1),(15,2,1)
러널 2 (16,2,1),(17,2,1),(18,2,1),(19,2,1),(20,2,1),(21,2,1),(22,2,1),(23,2,1)
타일 6 러널 0 (0,0,2),(1,0,2),(2,0,2),(3,0,2),(4,0,2),(5,0,2),(6,0,2),(7,0,2)
러널 1 (8,0,2),(9,0,2),(10,0,2),(11,0,2),(12,0,2),(13,0,2),(14,0,2),(15,0,2)
러널 2 (16,0,2),(17,0,2),(18,0,2),(19,0,2),(20,0,2),(21,0,2),(22,0,2),(23,0,2)
타일 7 러널 0 (0,1,2),(1,1,2),(2,1,2),(3,1,2),(4,1,2),(5,1,2),(6,1,2),(7,1,2)
러널 1 (8,1,2),(9,1,2),(10,1,2),(11,1,2),(12,1,2),(13,1,2),(14,1,2),(15,1,2)
러널 2 (16,1,2),(17,1,2),(18,1,2),(19,1,2),(20,1,2),(21,1,2),(22,1,2),(23,1,2)
타일 8 러널 0 (0,2,2),(1,2,2),(2,2,2),(3,2,2),(4,2,2),(5,2,2),(6,2,2),(7,2,2)
러널 1 (8,2,2),(9,2,2),(10,2,2),(11,2,2),(12,2,2),(13,2,2),(14,2,2),(15,2,2)
러널 2 (16,2,2),(17,2,2),(18,2,2),(19,2,2),(20,2,2),(21,2,2),(22,2,2),(23,2,2)
타일 9 러널 0 (0,0,3),(1,0,3),(2,0,3),(3,0,3),(4,0,3),(5,0,3),(6,0,3),(7,0,3)
러널 1 (8,0,3),(9,0,3),(10,0,3),(11,0,3),(12,0,3),(13,0,3),(14,0,3),(15,0,3)
러널 2 (16,0,3),(17,0,3),(18,0,3),(19,0,3),(20,0,3),(21,0,3),(22,0,3),(23,0,3)
타일 10 러널 0 (0,1,3),(1,1,3),(2,1,3),(3,1,3),(4,1,3),(5,1,3),(6,1,3),(7,1,3)
러널 1 (8,1,3),(9,1,3),(10,1,3),(11,1,3),(12,1,3),(13,1,3),(14,1,3),(15,1,3)
러널 2 (16,1,3),(17,1,3),(18,1,3),(19,1,3),(20,1,3),(21,1,3),(22,1,3),(23,1,3)
타일 11 러널 0 (0,2,3),(1,2,3),(2,2,3),(3,2,3),(4,2,3),(5,2,3),(6,2,3),(7,2,3)
러널 1 (8,2,3),(9,2,3),(10,2,3),(11,2,3),(12,2,3),(13,2,3),(14,2,3),(15,2,3)
러널 2 (16,2,3),(17,2,3),(18,2,3),(19,2,3),(20,2,3),(21,2,3),(22,2,3),(23,2,3)
타일 12 러널 0 (0,0,4),(1,0,4),(2,0,4),(3,0,4),(4,0,4),(5,0,4),(6,0,4),(7,0,4)
러널 1 (8,0,4),(9,0,4),(10,0,4),(11,0,4),(12,0,4),(13,0,4),(14,0,4),(15,0,4)
러널 2 (16,0,4),(17,0,4),(18,0,4),(19,0,4),(20,0,4),(21,0,4),(22,0,4),(23,0,4)
타일 13 러널 0 (0,1,4),(1,1,4),(2,1,4),(3,1,4),(4,1,4),(5,1,4),(6,1,4),(7,1,4)
러널 1 (8,1,4),(9,1,4),(10,1,4),(11,1,4),(12,1,4),(13,1,4),(14,1,4),(15,1,4)
러널 2 (16,1,4),(17,1,4),(18,1,4),(19,1,4),(20,1,4),(21,1,4),(22,1,4),(23,1,4)
타일 14 러널 0 (0,2,4),(1,2,4),(2,2,4),(3,2,4),(4,2,4),(5,2,4),(6,2,4),(7,2,4)
러널 1 (8,2,4),(9,2,4),(10,2,4),(11,2,4),(12,2,4),(13,2,4),(14,2,4),(15,2,4)
러널 2 (16,2,4),(17,2,4),(18,2,4),(19,2,4),(20,2,4),(21,2,4),(22,2,4),(23,2,4)
타일 레이아웃의 커널 스택(208)의 타일들
[0208] 유리하게도, 커널 스택(208)의 가중 값들을 재정렬하는 것은 설계 시간 동안 한번 발생할 수 있다. 또한, 입력 활성화 맵들의 재정렬은 CNN의 입력 이미지 당 최대한으로 한번 발생할 수 있다. 예컨대, CNN의 입력 계층은 CNN의 입력 이미지를 기본 레이아웃에서 인터리빙된 레이아웃으로 재정렬할 수 있다. 도 9b는 재정렬된 입력 활성화 맵(420)을 도시한다.
[0209] 일부 실시예들에서, 커널 스택 러널들 각각은 커널 스택의 가중 값들의 하나의 행 또는 하나의 행 중 일부만을 포함한다. 따라서, 재정렬된 입력 맵의 픽셀 값은, 출력 활성화 맵들을 타일 단위로 결정할 때, SIMD 레지스터에 복제될 수 있다. 재정렬된 입력 맵의 픽셀 값을 SIMD 레지스터에 복제하는 프로세스는 입력 러널을 구성하는 것으로 지칭될 수 있다. 입력 러널들은, 인터리빙된 레이아웃의 입력 맵의 하나의 채널에 픽셀들을 복제함으로써, 인터리빙된 레이아웃의 입력 맵으로부터 구성될 수 있다.
[0210] 일부 실시예들에서, 커널 스택 러널들은 다수의 행들의 가중 값들을 스트래들링할 수 있다. 표 6 및 도 9a는 커널 스택(208)의 가중 값들의 다수의 행들을 스트래들링하는 일부 러널들을 도시한다. 예컨대, 표 6의 타일 0, 러널 0은 2개의 행들을 스트래들링한다. 커널 스택이 커널 스택(208)의 가중 값들의 다수의 행들을 스트래들링하면, SIMD 레지스터는 2 개 이상의 픽셀 값들의 값들을 포함할 수 있다. 픽셀 값은 로딩되고, 2개 이상의 SIMD 레지스터들에 복제될 수 있다. 각각의 커널의 각각의 행 내의는 모든 가중 값들이 입력 활성화 맵들의 채널의 픽셀 값들과 곱셈될 수 있기 때문에, 이것이 필요할 수 있다. 입력 러널들은 인터리빙된 레이아웃의 입력 맵으로부터 구성될 수 있다. 예컨대, 입력 러널을 구성하는 것은 제1 입력 채널의 대응하는 픽셀 값을 6번 복제하고, 제2 입력 채널의 대응하는 픽셀 값을 2번 복제하는 것을 포함할 수 있다. 다른 예로서, 입력 러널을 구성하는 것은 제2 입력 채널의 대응하는 픽셀을 4번 복제하고, 제3 입력 채널의 대응하는 픽셀을 4번 복제하는 것을 포함할 수 있다. 또 다른 예로서, 입력 러널을 구성하는 것은 제3 입력 채널의 대응하는 픽셀을 2번 복제하고, 제4(및 마지막) 입력 채널의 대응하는 픽셀을 6번 복제하는 것을 포함할 수 있다.
[0211] 도 9b는 도 9a에 도시된 예시적인 3D 콘볼루션 계층(900)에 대한 인터리빙된 레이아웃의 재정렬된 입력 활성화 맵(420)을 도시한다. 입력 픽셀 값들의 인터리빙 패턴은 입력 활성화 맵(420)의 경계들까지 계속될 수 있다. 동일한 해칭 패턴들을 가진 픽셀들은 기본 레이아웃의 동일한 입력 활성화 맵에 속한다. 도 9b에서, 각각의 트리플릿(x, y, z)은 채널 x의 행 y, 열 z에서 픽셀 값을 나타낸다. 표 7은 타일 레이아웃의 커널 스택(208)의 타일들을 수반하는 하나의 콘볼루션을 수행하기 위한 입력 러널들을 도시한다.
타일 러널 가중 값들
타일 0 러널 0 (0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(1,0,0),(1,0,0)
러널 1 (1,0,0),(1,0,0),(1,0,0),(1,0,0),(2,0,0),(2,0,0),(2,0,0),(2,0,0)
러널 2 (2,0,0),(2,0,0),(3,0,0),(3,0,0),(3,0,0),(3,0,0),(3,0,0),(3,0,0)
타일 1 러널 0 (0,0,1),(0,0,1),(0,0,1),(0,0,1),(0,0,1),(0,0,1),(1,0,1),(1,0,1)
러널 1 (1,0,1),(1,0,1),(1,0,1),(1,0,1),(2,0,1),(2,0,1),(2,0,1),(2,0,1)
러널 2 (2,0,1),(2,0,1),(3,0,1),(3,0,1),(3,0,1),(3,0,1),(3,0,1),(3,0,1)
타일 2 러널 0 (0,0,2),(0,0,2),(0,0,2),(0,0,2),(0,0,2),(0,0,2),(1,0,2),(1,0,2)
러널 1 (1,0,2),(1,0,2),(1,0,2),(1,0,2),(2,0,2),(2,0,2),(2,0,2),(2,0,2)
러널 2 (2,0,2),(2,0,2),(3,0,2),(3,0,2),(3,0,2),(3,0,2),(3,0,2),(3,0,2)
타일 3 러널 0 (0,1,0),(0,1,0),(0,1,0),(0,1,0),(0,1,0),(0,1,0),(1,1,0),(1,1,0)
러널 1 (1,1,0),(1,1,0),(1,1,0),(1,1,0),(2,1,0),(2,1,0),(2,1,0),(2,1,0)
러널 2 (2,1,0),(2,1,0),(3,1,0),(3,1,0),(3,1,0),(3,1,0),(3,1,0),(3,1,0)
타일 4 러널 0 (0,1,1),(0,1,1),(0,1,1),(0,1,1),(0,1,1),(0,1,1),(1,1,1),(1,1,1)
러널 1 (1,1,1),(1,1,1),(1,1,1),(1,1,1),(2,1,1),(2,1,1),(2,1,1),(2,1,1)
러널 2 (2,1,1),(2,1,1),(3,1,1),(3,1,1),(3,1,1),(3,1,1),(3,1,1),(3,1,1)
타일 5 러널 0 (0,1,2),(0,1,2),(0,1,2),(0,1,2),(0,1,2),(0,1,2),(1,1,2),(1,1,2)
러널 1 (1,1,2),(1,1,2),(1,1,2),(1,1,2),(2,1,2),(2,1,2),(2,1,2),(2,1,2)
러널 2 (2,1,2),(2,1,2),(3,1,2),(3,1,2),(3,1,2),(3,1,2),(3,1,2),(3,1,2)
타일 6 러널 0 (0,2,0),(0,2,0),(0,2,0),(0,2,0),(0,2,0),(0,2,0),(1,2,0),(1,2,0)
러널 1 (1,2,0),(1,2,0),(1,2,0),(1,2,0),(2,2,0),(2,2,0),(2,2,0),(2,2,0)
러널 2 (2,2,0),(2,2,0),(3,2,0),(3,2,0),(3,2,0),(3,2,0),(3,2,0),(3,2,0)
타일 7 러널 0 (0,2,1),(0,2,1),(0,2,1),(0,2,1),(0,2,1),(0,2,1),(1,2,1),(1,2,1)
러널 1 (1,2,1),(1,2,1),(1,2,1),(1,2,1),(2,2,1),(2,2,1),(2,2,1),(2,2,1)
러널 2 (2,2,1),(2,2,1),(3,2,1),(3,2,1),(3,2,1),(3,2,1),(3,2,1),(3,2,1)
타일 8 러널 0 (0,2,2),(0,2,2),(0,2,2),(0,2,2),(0,2,2),(0,2,2),(1,2,2),(1,2,2)
러널 1 (1,2,2),(1,2,2),(1,2,2),(1,2,2),(2,2,2),(2,2,2),(2,2,2),(2,2,2)
러널 2 (2,2,2),(2,2,2),(3,2,2),(3,2,2),(3,2,2),(3,2,2),(3,2,2),(3,2,2)
타일 9 러널 0 (0,3,0),(0,3,0),(0,3,0),(0,3,0),(0,3,0),(0,3,0),(1,3,0),(1,3,0)
러널 1 (1,3,0),(1,3,0),(1,3,0),(1,3,0),(2,3,0),(2,3,0),(2,3,0),(2,3,0)
러널 2 (2,3,0),(2,3,0),(3,3,0),(3,3,0),(3,3,0),(3,3,0),(3,3,0),(3,3,0)
타일 10 러널 0 (0,3,1),(0,3,1),(0,3,1),(0,3,1),(0,3,1),(0,3,1),(1,3,1),(1,3,1)
러널 1 (1,3,1),(1,3,1),(1,3,1),(1,3,1),(2,3,1),(2,3,1),(2,3,1),(2,3,1)
러널 2 (2,3,1),(2,3,1),(3,3,1),(3,3,1),(3,3,1),(3,3,1),(3,3,1),(3,3,1)
타일 11 러널 0 (0,3,2),(0,3,2),(0,3,2),(0,3,2),(0,3,2),(0,3,2),(1,3,2),(1,3,2)
러널 1 (1,3,2),(1,3,2),(1,3,2),(1,3,2),(2,3,2),(2,3,2),(2,3,2),(2,3,2)
러널 2 (2,3,2),(2,3,2),(3,3,2),(3,3,2),(3,3,2),(3,3,2),(3,3,2),(3,3,2)
타일 12 러널 0 (0,4,0),(0,4,0),(0,4,0),(0,4,0),(0,4,0),(0,4,0),(1,4,0),(1,4,0)
러널 1 (1,4,0),(1,4,0),(1,4,0),(1,4,0),(2,4,0),(2,4,0),(2,4,0),(2,4,0)
러널 2 (2,4,0),(2,4,0),(3,4,0),(3,4,0),(3,4,0),(3,4,0),(3,4,0),(3,4,0)
타일 13 러널 0 (0,4,1),(0,4,1),(0,4,1),(0,4,1),(0,4,1),(0,4,1),(1,4,1),(1,4,1)
러널 1 (1,4,1),(1,4,1),(1,4,1),(1,4,1),(2,4,1),(2,4,1),(2,4,1),(2,4,1)
러널 2 (2,4,1),(2,4,1),(3,4,1),(3,4,1),(3,4,1),(3,4,1),(3,4,1),(3,4,1),
타일 14 러널 0 (0,4,2),(0,4,2),(0,4,2),(0,4,2),(0,4,2),(0,1,2),(1,4,2),(1,4,2)
러널 1 (1,4,2),(1,4,2),(1,4,2),(1,4,2),(2,4,2),(2,4,2),(2,4,2),(2,4,2),
러널 2 (2,4,2),(2,4,2),(3,4,2),(3,4,2),(3,4,2),(3,4,2),(3,4,2),(3,4,2),
표 6에 도시된 타일 레이아웃의 커널 스택(208)에 대한 입력 맵 러널들
출력 활성화 맵들을 타일 단위로 결정하기 전에, 입력 활성화 맵들의 픽셀 값들 및 커널들의 가중 값들을 재정렬하는 예시적인 프로세스
[0212] 도 10은, 입력 활성화 맵들의 픽셀 값들 및 커널들의 가중 값들을 러널들의 타일들로 재정렬하는 것을 선택적으로 포함하는, CNN(convolutional neural network)의 콘볼루션 계층의 출력 활성화 맵들을 타일 단위로 결정하는 예시적인 프로세스(1000)의 흐름도이다. 프로세스(1000)는 블록(1004)에서 시작하고, 여기서 콘볼루션 뉴럴 네트워크의 콘볼루션 계층(200)이 수신된다. 콘볼루션 계층은 3-차원 콘볼루션 계층일 수 있다. 도 2를 참조하여 예시된 바와 같이, 콘볼루션 계층(200)은 M개의 입력 활성화 맵들을 수신하기 위한 M개의 입력 채널들(204)을 가질 수 있다. 입력 활성화 맵은 Q의 입력 활성화 맵 폭 및 P의 입력 활성화 맵 높이를 가질 수 있다. 입력 활성화 맵들은 동일한 입력 활성화 맵 폭(Q) 및 입력 활성화 맵 높이(P)를 가질 수 있다.
[0213] 콘볼루션 계층(200)은 커널들의 커널 스택(208)을 포함할 수 있다. 커널 스택(208)은 커널들의 M개의 행들 및 커널들의 N개의 열들을 포함할 수 있으며, 각각의 열은 또한 커널 스택(208)의 필터 뱅크로 지칭된다. 커널 스택(208)의 커널은
Figure 112019043352933-pct00079
개의 가중 값들의 커널 폭 및
Figure 112019043352933-pct00080
개의 가중 값들의 커널 높이인 총
Figure 112019043352933-pct00081
*
Figure 112019043352933-pct00082
개의 가중 값들을 가질 수 있다. 커널 스택(208)의 커널들은 동일한 커널 폭(
Figure 112019043352933-pct00083
) 및 커널 높이(
Figure 112019043352933-pct00084
)를 가질 수 있다.
[0214] 콘볼루션 계층(200)은 N개의 출력 활성화 맵들을 생성하기 위한 N개의 출력 채널들(212)을 가질 수 있다. 각각의 출력 활성화 맵은 커널 스택(208)의 필터 뱅크와 대응하는 입력 활성화 맵들의 3-차원 콘볼루션의 결과일 수 있다. 출력 활성화 맵은 Q'의 출력 활성화 맵 폭 및 P'의 출력 활성화 맵 높이를 가질 수 있다. 출력 활성화 맵들은 동일한 출력 활성화 맵 폭(Q') 및 출력 활성화 맵 높이(P')를 가질 수 있다.
[0215] 결정 블록(1008)에서 커널 스택(208)의 커널들의 가중 값들의 포맷이 결정될 수 있다. 커널 스택(208)의 커널들의 가중 값들이 커널들에 대한 기본 레이아웃이면, 프로세스(1000)는 블록(1008)으로 진행한다. 블록(1008)에서, 커널 스택(208)의 커널들의 가중 값들은 커널들에 대한 기본 레이아웃으로부터 커널들에 대한 타일 레이아웃으로 재정렬될 수 있다. 커널들의 가중 값들은 로딩, 산술, 또는 저장 동작들을 위해 벡터 연산들을 이용하도록 재정렬될 수 있다. 도 5a-5c를 참조하여 예시된 바와 같이, 커널들에 대한 타일 레이아웃은 가중 값들의 러널들의 타일들을 포함할 수 있다. 러널은 2개의 특성들을 갖는 가중 값들의 정렬된 리스트일 수 있다. 첫째, 러널 내의 가중 값들의 수는, 가중 값들의 데이터 타입이 주어지면, SIMD 레지스터와 같은 프로세서 레지스터가 한번에 포함할 수 있는 가중 값들의 수와 동일할 수 있다. 예컨대, 128-비트 SIMD 레지스터에 대해, 러널은 반부동들(half floats)의 커널에 대한 8개의 반정밀 부동 소수점 가중 값들 또는 부동들의 커널에 대한 4개의 단정밀 부동 소수점 가중 값들을 포함할 수 있다. 둘째, 커널 스택(208)의 폭 치수(M), 다음에 커널 스택(208)의 높이 치수(N), 다음에 개별 커널의 폭 치수(
Figure 112019043352933-pct00085
), 다음에 개별 커널의 높이 치수(
Figure 112019043352933-pct00086
)를 따라 순회함으로써, 러널들이 반복적으로 채워질 수 있다. 순회는, 러널이 커널 스택(208)의 커널들의 가중 값들로 완전히 채워질 때까지 계속된다. CNN을 트레이닝하는 것이 오프라인 프로세스일 수 있기 때문에(예컨대, 컴퓨터 서버, 개인용 컴퓨터, 태블릿 컴퓨터, 모바일 디바이스 또는 임베딩된 디바이스와 같은 컴퓨팅 디바이스가 결과적 CNN을 사용하여 이미지 분할 및 눈 추적을 수행하기 전에)에서, 블록(1008)에서 커널들의 가중 값을 재정렬하는 것은, 뉴럴 네트워크의 런타임 성능의 손실없이, 오프라인 방식으로(예컨대, 커널의 가중 값을 학습한 후에) 한번 유리하게 수행될 수 있다.
[0216] 결정 블록(1006)에서, 커널 스택(208)의 커널들의 가중 값들이 커널들에 대한 타일 레이아웃이면, 프로세스(1000)는 블록(1012)으로 진행한다. 일부 실시예들에서, 커널들의 가중 값들은, 프로세스(1000)를 구현하는 프로그램의 컴파일 시에 정적으로 커널들에 대해 기본 레이아웃에서 타일 레이아웃으로 재정렬되었다. 커널 스택(208)의 폭 치수(M), 커널 스택(208)의 높이 치수(N), 입력 활성화 맵 폭(Q), P의 입력 활성화 맵 높이, 또는 콘볼루션 계층(200)을 포함하는 CNN의 특정 셋업이 컴파일 시에 알려질 수 있기 때문에, 컴파일 시에 이러한 재정렬이 가능할 수 있다. 따라서, 런타임에서 커널 스택(208)의 커널들의 가중 값들을 재정렬하는 것은 런타임에서 불필요할 수 있다.
[0217] 블록(1012)에서, 콘볼루션 계층(200)의 입력 활성화 맵들이 수신될 수 있다. 예컨대, 콘볼루션 계층(200)의 M개의 입력 채널들(204)에 대한 M개의 입력 활성화 맵들이 수신될 수 있다. 입력 활성화 맵은 Q의 입력 활성화 맵 폭 및 P의 입력 활성화 맵 높이를 가질 수 있다. 입력 활성화 맵들은 동일한 입력 활성화 맵 폭(Q) 및 입력 활성화 맵 높이(P)를 가질 수 있다.
[0218] 결정 블록(1014)에서, 입력 활성화 맵들의 픽셀 값들이 입력 활성화 맵들에 대한 기본 레이아웃인지 또는 인터리빙된 레이아웃인지가 결정될 수 있다. 입력 활성화 맵들의 픽셀 값들이 입력 활성화 맵들에 대한 기본 레이아웃이면, 프로세스(1000)는 블록(1016)으로 진행한다. 블록(1016)에서, 입력 활성화 맵들의 픽셀 값들은 픽셀 값들의 클러스터를 포함하는 인터리빙된 레이아웃으로 재정렬된다. 예컨대, 콘볼루션 계층이 M개의 입력 활성화 맵들을 수신한 후에, 입력 활성화 맵들의 픽셀 값들은 입력 활성화 맵들에 대한 기본 레이아웃(기본 입력 활성화 맵 레이아웃)으로부터 입력 활성화 맵들에 대한 인터리빙된 레이아웃(인터리빙된 입력 활성화 맵 레이아웃)으로 재정렬될 수 있다. 기본 입력 활성화 맵 레이아웃의 경우, 입력 활성화 맵은 채널 단위로 정렬될 수 있어서, 제1 입력 활성화 맵의 모든 픽셀 값들은 (메모리 위치의 관점에서) 제2 입력 활성화 맵의 모든 픽셀들 앞에 저장되고, 이러한 식일 수 있다.
[0219] 일부 구현들에서, 픽셀 값들은, 제M 입력 활성화 맵의 제1 픽셀 값까지, 제1 입력 활성화 맵의 제1 픽셀 값 다음에 제2 입력 활성화 맵의 제1 픽셀이 이어지는 식으로, 정렬될 수 있다. 제M 입력 활성화 맵의 제2 픽셀 값까지, 제M 입력 활성화 맵의 제1 픽셀 값 다음에 제1 입력 활성화 맵의 제2 픽셀 값이 이어지고 그리고 다음에 제2 입력 활성화 맵의 제2 픽셀 값이 이어질 수 있다. 이러한 재정렬은, 모든 M개의 입력 활성화 맵들의 모든 픽셀 값들이 유사하게 정렬될 때까지 계속될 수 있다. 재정렬 프로세스는, M개의 개별 입력 활성화 맵들을 포함하는 큰 재정렬 입력 활성화 맵을 발생시킨다. 재정렬된 입력 활성화 맵의 각각의 인덱싱된 위치는 그 인덱스에서의 개별 입력 활성화 맵들로부터의 픽셀 값들의 클러스터를 포함할 수 있다.
[0220] 결정 블록(1014)에서, 입력 활성화 맵들의 픽셀 값들이 인터리빙된 입력 활성화 맵 레이아웃이면, 프로세스(1000)는 블록(1020)으로 진행한다. 일부 실시예들에서, 입력 활성화 맵들의 픽셀 값들이 다른 콘볼루션 계층의 출력 활성화 맵들일 수 있기 때문에, 입력 활성화 맵들의 픽셀 값들은 인터리빙된 입력 활성화 맵 레이아웃일 수 있다. 이러한 다른 콘볼루션 계층의 입력 활성화 맵들이 인터리빙된 입력 활성화 맵 레이아웃이기 때문에, 그의 출력 활성화 맵들은 인터리빙된 입력 활성화 맵 레이아웃일 수 있다. 유리하게도, 콘볼루션 계층들에 대한 모든 입력들 및 출력들이 데이터 정렬을 보존할 수 있기 때문에, 초기 콘볼루션 계층의 입력 활성화 맵들(예컨대, CNN의 입력 활성화 맵들)만이 한번 재정렬될 필요가 있다. 따라서, 데이터 재정렬의 다중 패스들에 대해 어떠한 프로세싱 시간도 낭비될 필요가 없다.
[0221] 블록(1020)에서, 인터리빙된 출력 활성화 맵 레이아웃의 콘볼루션 계층의 출력 활성화 맵들이 타일 단위로 결정될 수 있다. 예컨대, 출력 활성화 맵들의 타일에 대해, 대응하는 재정렬된 출력 활성화 맵 픽셀 값들, 재정렬된 입력 활성화 맵 픽셀 값들 및 커널 타일을 FMADD하고, 여기서 FMADD는 융합-곱셈-덧셈 연산을 나타낸다. 일부 구현들에서, 출력 활성화 맵들에 대한 인터리빙된 레이아웃(인터리빙된 출력 활성화 맵 레이아웃)의 콘볼루션 계층의 출력 활성화 맵들은 출력 활성화 맵들의 기본 레이아웃(기본 출력 활성화 맵 레이아웃)으로 정렬될 수 있다. 인터리빙된 출력 활성화 맵 레이아웃의 경우, 픽셀 값들은, 제N 출력 활성화 맵의 제1 픽셀 값까지, 제1 출력 활성화 맵의 제1 픽셀 값 다음에 제2 출력 활성화 맵의 제1 픽셀이 이어지는 식으로, 정렬될 수 있다. 출력 활성화 맵들에 대한 기본 레이아웃(기본 출력 활성화 맵 레이아웃)의 출력 활성화 맵들의 수는 N으로 표시될 수 있다. 기본 출력 활성화 맵 레이아웃의 경우, 출력 활성화 맵은 채널 단위로 정렬될 수 있어서, 제1 출력 활성화 맵에 속하는 모든 픽셀 값들은 (메모리 위치의 관점에서) 제2 출력 활성화 맵에 속하는 모든 픽셀들 앞에 저장되고, 이러한 식일 수 있다.
[0222] 선택적으로, 일부 구현들에서, 인터리빙된 출력 활성화 맵 레이아웃의 재정렬된 출력 활성화 맵의 픽셀 값들은 기본 출력 활성화 맵 레이아웃으로 정렬될 수 있다. 예컨대, 제1 출력 활성화 맵은 재정렬된 출력 활성화 맵의 제1 픽셀, 제(N+1) 픽셀, 제(2N+1) 픽셀 등을 포함할 수 있다. 다른 예로서, 제2 출력 활성화 맵은 재정렬된 출력 활성화 맵의 제2 픽셀, 제(N+2) 픽셀, 제(2N+2) 픽셀 등을 포함할 수 있다. 또 다른 예로서, 제N 출력 활성화 맵은 재정렬된 출력 활성화 맵의 제N 픽셀, 제(2*N) 픽셀, 제(3*N) 픽셀 등을 포함할 수 있다.
커널 스택의 커널들의 예시적인 데이터 레이아웃
[0223] 위에 개시된 인터리빙된 레이아웃은 콘볼루션 계층들의 효율적인 프로세싱을 수행하는 데 활용될 수 있다. 행렬 곱셈 방법은 많은 플랫폼에서 매우 최적화된 루틴일 수 있다. 그리고, 이것은 상이한 아키텍처에 대해 항상 계속해서 최적화된다. 다른 방법들은, 콘볼루션 계층을 수행하기 위해 행렬 곱셈을 사용할 수 있다. 그러나, 이러한 다른 방법들은 모든 각각의 콘볼루션 계층 인스턴스에 대한 데이터 복제(예컨대, "im2col” 동작 수행함)를 요구한다. 아래에 개시된 방법들은 행렬 곱셈을 이용하는 방법을 보여주지만, 요구될 수 있는 비용이 많이 드는 데이터 복제를 제거한다.
[0224] 도 11은 커널 스택(208)의 커널들의 가중 값들을 러널들의 타일들을 포함하는 타일 포맷으로 재정렬하는 예를 개략적으로 예시한다. 일부 구현들에서, 예시된 커널 레이아웃은 분리 가능한 커널에 사용될 수 있다. 분리 가능한 커널은 1의 높이 치수(
Figure 112019043352933-pct00087
) 또는 폭 치수(
Figure 112019043352933-pct00088
)를 가질 수 있다. 분리 가능한 커널들은 정확도에서 작은 손실로 많은 CNN(convolutional neural network)들에 사용될 수 있다. 분리 가능한 커널들이 한번에 단일 치수들에서 동작하기 때문에, 분리 가능한 커널들을 사용하는 것은 CNN에서 부동 소수점 연산들의 양을 상당히 감소시킬 수 있다. 예컨대, 3 × 3 커널들을 가진 콘볼루션 계층은, 1 × 3 커널들을 가진 계층 다음에 3 × 1 커널들을 가진 계층(또는 3 × 1 커널들을 갖는 계층 다음에 1 × 3 커널들의 계층)으로 대체될 수 있다.
[0225] 도 4에 예시된 입력 활성화 맵 레이아웃을 사용하여, 입력 활성화 맵들은 수학식 4의 행렬 곱셈 연산에서 A 행렬로 표현될 수 있다.
Figure 112019043352933-pct00089
커널 스택은 B 행렬로 표현될 수 있다. 출력 활성화 맵들은, 후속 CNN 계층의 입력 활성화 맵일 수 있는 C 행렬로 표현될 수 있다. 일부 구현들에서, 수학식 4의 행렬 곱셈은 출력 활성화 맵들이 아닌 출력 활성화 맵들의 전치들(transposes)을 출력하도록 구성될 수 있다. 이러한 구성의 경우, 출력 활성화 맵들은, 벡터화된 저장소들을 사용하여 구현될 수 있는 후속 CNN 계층에 대한 입력 활성화 맵이 되도록 직접 보정 가능할 수 있다. 출력 활성화 맵들에 대한 인터리빙된 레이아웃의 경우, 동일한 인덱스를 가진 출력 활성화 맵들의 픽셀 값들이 함께 클러스터링될 수 있기 때문에, 벡터화된 저장소는 일부 구현들에서 유리하게 사용될 수 있다.
[0226] 도 11에서, A 행렬로 표현된 입력 활성화 맵들은 도 4에 예시된 인터리빙된 입력 활성화 맵 레이아웃과 유사한 인터리빙된 레이아웃을 가질 수 있다. 예컨대, A 행렬의 제1 행은, 제M 입력 활성화 맵의 제1 픽셀 값(제M 입력 활성화 맵의 포지션(0, 0)에서의 픽셀 값)까지, 제1 입력 활성화 맵의 제1 픽셀 값(제1 입력 활성화 맵의 포지션(0, 0)에서의 픽셀 값), 다음에 제2 입력 활성화 맵의 제1 픽셀 값(제2 입력 활성화 맵의 포지션(0,0)에서의 픽셀 값) 등을 포함할 수 있다. 제M 입력 활성화 맵의 제1 픽셀 값 다음에 제1, 제2 및 제M 입력 활성화 맵들의 제2 픽셀 값들(입력 활성화 맵들의 포지션(0, 1)에서의 픽셀 값들)이 이어지고, 다음에 제1, 제2 및 제M 입력 활성화 맵들의 제3 픽셀 값들(입력 활성화 맵들의 포지션(0, 2)에서의 픽셀 값들)이 이어질 수 있다.
[0227] A 행렬의 제2 행은, 제1, 제2, 제M 입력 활성화 맵들의 제2 픽셀 값들(입력 활성화 맵들의 포지션(0, 1)에서의 픽셀 값들), 다음에 제1, 제2, 제M 입력 활성화 맵들의 제3 픽셀 값들(입력 활성화 맵들의 포지션(0, 2)에서의 픽셀 값들), 다음에 제1, 제2, 제M 입력 활성화 맵들의 제4 픽셀 값들(입력 활성화 맵들의 포지션(0, 3)에서의 픽셀 값들)을 포함할 수 있다.
[0228] 도 11의 행렬 A는 데이터 복제를 요구하는 것처럼 보일 수 있다. 그러나, 데이터 복제는 입력 활성화 맵들의 스트라이딩(striding)의 수정에 의해 회피될 수 있다. 다음 행에 도달하기 위해 행의 전체 폭을 이동시키는 대신에, 행 스트라이드는 입력 채널의 수인 M일 수 있다. 픽셀 값들이 메모리에서 연속적일 수 있기 때문에, 수정된 단축된 스트라이딩은, 실제로 데이터를 복제할 필요없이, 데이터 복제를 요구하는 것처럼 보일 수 있다. 유리하게도, M이 SIMD 레지스터 폭의 배수이면, 수정된 스트라이딩은, 각각의 로딩 동작이 정렬된 로딩 동작일 수 있음을 보존할 수 있다. 특정 프로세서 아키텍처들에서 정렬된 로딩 동작들이 요구될 수 있다. 또한, 일부 프로세서 아키텍처들에 대해, 정렬된 로딩 동작들은, 정렬되지 않은 로딩 동작들과 비교될 때 메모리에 액세스할 때 더 적은 스톨들(stalls)로 인해, 유리하게도 성능 개선을 발생시킬 수 있다. 따라서, 인터리빙된 데이터 레이아웃은 이러한 스트라이딩이 실질적인 최적화가 되도록 한다.
[0229] 도 11은 인터리빙된 입력 이미지로의 1 × 3 커널을 적용을 도시한다. 따라서, 패딩을 고려하기 위해,
Figure 112019043352933-pct00090
이다. A 행렬이 전체 출력 행을 계산하기 위해 행의 모든 각각의 열에 대해 모든 각각의 입력 이미지들로부터 3개의 값들을 필요로 하기 때문에, A 행렬은 그 안에
Figure 112019043352933-pct00091
개의 값들을 갖는다. 따라서, C 행렬이 N개의 출력 채널들이 있는 모든 각각의 출력 채널로부터의 픽셀들의 출력 폭 수를 갖기 때문에, C 행렬 크기는 단지
Figure 112019043352933-pct00092
인 단일 행을 나타낸다. 완전한 콘볼루션의 계산을 수행하기 위해, 입력 채널들의 높이가 H이면, 마지막 출력을 획득하기 위해 도 11에 도시된 H 번의 행렬 곱셈이 수행된다. 유리하게도, 하나의 큰 행렬 곱셈 대신에, H 번의 행렬 곱셈들이 수행될 수 있다. 데이터 복제의 필요성을 방지하기 위해 스트라이딩이 감소된 A 행렬의 셋업은 한번에 출력 활성화 맵의 단일 행에 대해서만 적용될 수 있다. 출력 활성화 맵의 다음 행을 계산할 때, 본원에 개시된 방법들은 분리 가능한 커널 경우에서 이전 행으로부터의 어떠한 데이터도 사용하지 않는다.
[0230] 도 11의 B 행렬은 커널 스택(208)의 1 × 3 커널들의 타일 레이아웃을 도시한다. 일부 구현들에서, 분리 가능한 커널들의 경우, 1 × 3 커널들에는, 수학식 5에 도시된 바와 같이 3 × 1 커널들을 나타내는 제2 행렬(B2)과의 곱셈이 후속될 수 있다.
Figure 112019043352933-pct00093
여기서 A2는 3 × 1 커널들의 입력 활성화 맵들을 나타내고, C2는 3 × 1 커널들의 출력 활성화 맵들을 나타낸다.
[0231] 일부 구현들에서, 3 × 1 커널들을 나타내는 제2 행렬(B2)은 1 × 3 커널들을 나타내는 행렬(B)의 레이아웃과 유사하거나 동일한 레이아웃을 가질 수 있다. 그러나, A2 행렬은 C 행렬의 전치(transpose)일 수 있다. 수학식 4에 예시된 행렬 곱셈 방법의 간단한 수정은 C 행렬이 자신의 전치로서 저장되게 할 수 있다. C 행렬이 자신의 전치로서 저장되는 경우, B2 행렬로 표현되는 커널들(예컨대, 3 × 1 커널)은, B 행렬로 표현되는 커널들(예컨대, 1 × 3 커널)이 동일한 단축된 스트라이딩 기술을 사용하여 이동하는 방법과 반대 방향을 따라 이동할 수 있다.
[0232] 일부 실시예들에서, 분리 가능한 커널들의 경우, 커널들이 N × 1이면, 데이터가 열 주요 포맷이고, 커널들이 1 × N이면, 데이터가 행 주요 포맷이 되는 방식으로 입력 활성화 맵이 배열될 수 있다. 유리하게도, 데이터가 열 주요 포맷인지, 또는 행 주요 포맷인지는, 행렬 곱셈의 결과로서 전치 행렬을 저장하는 것이 계산적으로 비용이 많이 들지 않기 때문에, 중요하지 않을 수 있다. 이것은 인터리빙된 레이아웃으로 인해 벡터화된 저장소들을 여전히 이용한다. 예컨대, 분리 가능한 경우 1에서, N × 1 계층 다음에 1 × N 계층이 이어진다(또는 그 역도 가능함). 전치가 제1 계층에서 저장되는 한, 방법은 커널 셋업(즉, 1 × N 또는 N × 1)에 대해 동일하게 보인다. 단축된 스트라이딩 기술은, 데이터 복제 없이, 계산이 수행되도록 허용하는 방법일 수 있다. 분리 가능한 커널 셋업(즉, 1 × N 또는 N × 1)의 어떠한 타입에 대해서 이러한 곱셈 기술을 사용하는 데 어떠한 장벽도 없다.
[0233] C 행렬을 자신의 전치로서 저장하는 것은 벡터화된 저장소들을 사용하여 유리하게 구현될 수 있다. 결과의 전치를 저장하고, CNN의 다음 계층에 필요한 결과를 직접 저장하는 것은 최소의 계산 비용으로 또는 아예 없이 수행될 수 있다. 따라서, 어떠한 데이터 리셔플링 또는 복제도 필요하지 않을 수 있다. 전치가 C 행렬에 대해 저장되면, 출력은 다음 CNN 계층에 대한 입력으로서 직접 사용될 수 있다.
예시적인 성능 개선
[0234] 본원에 개시된 시스템들 및 방법들의 예들은 9.6 GFlops/core의 절대 최대 잠재력을 갖는 프로세서를 사용하여 평가되었다. Gflop는 10억개의 부동 소수점 명령들이며, GFlops는 초당 몇 억개의 부동 소수점 명령들이 행해지는지를 지칭한다. SIMD 레지스터를 채움으로써, 프로세서 사이클마다 몇몇의 부동 소수점 연산들이 수행될 수 있다. 예컨대, 4개의 부동 소수점 수들을 보유하는 레지스터에 대해, 예컨대, 사이클마다 4개의 부동 소수점 연산들이 수행될 수 있다.
[0235] 그러나, 9.6 GFlops/core는 실제로 도달 불가능한 수일 수 있는데, 왜냐하면 이것은, 자신의 출력에서 어떠한 레이턴시, 또는 어떠한 필요한 또는 유용한 제어 코드 없이, 하나의 곱셈-누산 명령이 사이클마다 수행된다고 가정하기 때문이다. 예컨대, 곱셈 연산과 덧셈 연산이 동일한 사이클에서 수행되지 않으면 ― 이는 곱셈 및 덧셈을 융합시키는 것에 수반된 레이턴시들 중 일부를 줄일 수 있음 ― , 최대 달성 가능한 잠재력은 4.8 GFlops/core일 수 있다.
[0236] 완전한 공간 콘볼루션 계층들(3 × 3 커널들)에 대해, SIMD 레지스터가 8개의 부동 소수점 수들을 포함할 때, 약 6 GFlops/core(절대 최대 GFlops의 67 %의 활용도)가 달성되었다. 분리 가능한 계층들(1 × 3 또는 3 × 1 커널들)에 대해, 약 5 GFlops/core(절대 최대 GFlops의 56 %의 활용도)가 달성되었다. 분리 가능한 셋업은 계층들에서 더 적은 부동 소수점 연산들을 요구하였고, 일반적으로 각각의 루프에서 더 적은 연산들이 수행되었고, 이는 CNN 계층 당 약간 더 악화된 성능으로 이어졌다. 그러나, 분리 가능한 계층들로 전반적으로 더 양호한 네트워크 성능이 달성되었다. 결과들은, 특정 커널 크기들 1에 대해 본원에 개시된 방법들을 어셈블리에서 한번에 최적화하면서, 실험들 및 예상들(projections)의 조합에 기반하였다.
[0237] 본원에 기술된 방법들로 달성될 수 있는 코어 당 부동 소수점 명령들의 수는 상이한 구현들에서 상이할 수 있다. 예컨대, 코어 당 부동 소수점 명령들의 수는 4-100, 10-90, 25-75, 40-60 또는 이들의 임의의 조합의 GFlops/core 범위일 수 있다. 본원에 개시된 방법들로 달성될 수 있는 최대 GFlops의 퍼센티지 활용도는 상이한 구현들에서 상이할 수 있다. 예컨대 최대 GFlops의 퍼센티지 활용도는 30%-95%, 40%-90%, 50%-80%, 60%-70% 또는 이들의 임의의 조합일 수 있다.
[0238] GFlops/core의 관점에서 관찰된 성능은 600 MHz의 프로세서 클록에 기반하였다. 클록 속도가 2배가 되면, 그 수들 모두는 대략 2 배 증가할 것이며, 이것은 메모리 뱅크들과 같은 상호작용하는 컴포넌트들의 다른 레이턴시 시간들에 의존할 수 있다. 따라서, 절대 최대 Gflops의 퍼센티지 활용도는 프로세서 클록에 의해 크게 영향을 받지 않을 수 있다.
[0239] 관찰된 성능 개선은, 벡터 아키텍처들 상에서 매우 효율적인 방식으로 데이터를 재정렬하고 프로세싱하는 능력의 결과였다. 이러한 타입의 성능 촉진(speed-up)은 프로세서 독립적일 수 있으며, 동일하거나 유사한 이점들이 다른 벡터 칩에 적용될 수 있다.
예시적인 애플리케이션들 및 이점들
부가적인 백터화된 연산들
[0240] 본원에 개시된 입력 활성화 맵들의 인터리빙된 레이아웃은, 그렇지 않으면 벡터화하기 어려울 수 있는 전형적인 CNN(convolutional neural network)들에서의 다른 벡터화된 연산들에 유용할 수 있다. 예컨대, 최대 풀링(pooling)은 모든 입력 활성화 맵들에 적용될 수 있는 다운 샘플링 연산이다. 최대 풀링은 입력 활성화 맵에서 픽셀들의 윈도우(각각의 치수에서 2배의 다운 샘플링에 대해 2 × 2)에 기반할 수 있다. 최대 풀링은 각각의 윈도우의 최대 값을, 다운 샘플링된 출력 활성화 맵의 픽셀 값으로서 저장할 수 있다. 이어서, 최대 풀링은 각각의 치수에서 스트라이딩을 적절하게 포함할 수 있고, 그래서 윈도우에서 최대치를 찾을 때 픽셀 값들이 겹치지 않는다. 데이터 재정렬 없이, 최대 풀링이 벡터에 걸쳐 수평 비교들, 정렬되지 않은 로드들, 다수의 로드들, 또는 벡터를 완전히 채우지 않는 것의 일부 조합을 행하는 것을 요구하기 때문에, 최대 풀링은 벡터화하는 데 다소 까다로운 연산일 수 있다. 본원에 개시된 인터리빙된 입력 활성화 맵 레이아웃의 경우, 모든 각각의 입력 활성화 맵에 대한 픽셀 값들은 옆에 저장될 수 있다. 따라서, 최대 풀링은 모든 각각의 입력 활성화 맵에 대해 동시에 수행될 수 있으며, 입력 활성화 맵들의 수가 벡터 폭의 배수이면, 완전히 벡터화될 수 있다. 유리하게도, 본원에 개시된 방법들은, 단일 이미지들에 대해 전통적으로 벡터화하기 어려운 많은 연산들(예컨대, 업샘플링 또는 치환(transposition)과 같은 연산들)에 활용될 수 있다.
데이터 복제 또는 후속 재정렬에 대한 필요성이 없음
[0241] 일부 구현들에서, 입력 활성화 맵들의 인터리빙된 레이아웃은 동작들이 최소의 데이터 복제로 또는 어떠한 데이터 복제도 없이 수행될 수 있게 할 수 있다. 따라서, 메모리 활용 효율은 높을 수 있으며, 이는, 일반적으로 더 적은 메모리 및 소량의 낮은 레이턴시 메모리를 가질 수 있는 임베딩된 시스템들에 유용할 수 있다.
[0242] 또한, 콘볼루션 계층들에 대한 모든 입력들 및 출력들이 데이터 정렬을 보존할 수 있기 때문에, 초기 콘볼루션 계층의 입력 활성화 맵들(예컨대, CNN의 입력 활성화 맵들)만이 한번 재정렬될 필요가 있다. 따라서, 데이터 재정렬의 다중 패스들에 대해 어떠한 프로세싱 시간도 낭비될 필요가 없다.
전력 효율
[0243] 일반적으로, 데이터를 프로세싱하는 데 소비되는 시간이 더 적을수록, 프로세서가 유휴 상태이거나 디-클로킹될 수 있는 시간이 더 많을 수 있다. 본원에 개시된 방법들 및 시스템들로 데이터를 효율적으로 프로세싱함으로써, CNN을 실행하는 동안, 프로세서 자원들을 효율적으로 사용함으로써 전력 절감이 달성될 수 있다. 또한, 효율적인 메모리 활용을 위해 데이터 복제를 제거함으로써, 메모리 계층구조(memory hierarchy)에서 레벨들 간의 전송들을 위해 시스템별 더 적은 자원들이 필요로 될 수 있다. 이는, 메인 메모리가 더 적게 액세스될 수 있기 때문에 그리고 로컬, 캐싱된 메모리가 더 양호하고, 최적으로 또는 최대로 활용될 수 있기 때문에 전력 절감을 발생시킬 수 있다.
레지스터 폭과 매칭하는 입력들 수에 대한 의존성
[0244] 본원에 개시된 방법들 및 시스템들은 100 % SIMD 활용도를 갖는 모든 각각의 가능한 콘볼루션 계층을 발생시키지 않을 수 있다. 대신에, 많은 계층들에서 매우 높은 활용량들이 달성될 수 있다. 그리고, 콘볼루션 계층들의 연산들을 위해 레지스터들을 완전히 채우는 것의 관점에서, 일부 콘볼루션 계층에 대해 완전한 활용도가 달성될 수 있다. SIMD 활용도는, 계층에 대한 입력들/출력들의 수가 프로세서 아키텍처 상의 레지스터에 들어갈(fit in) 수 있는 값들의 수의 배수인 것에 의존할 수 있다. 그러나, 콘볼루션 뉴럴 네트워크를 설계하고 트레이닝시키는 프로세스가 유연할 수 있기 때문에, 이러한 의존성은 매우 제한적이지 않을 수 있다. 예컨대, CNN은, CNN이 종종 본 개시내용의 방법들 및 시스템들에 대해 잘 작동하는 계층 치수들을 가질 수 있도록 설계될 수 있다.
예시적인 웨어러블 디스플레이 시스템
[0245] 일부 실시예들에서, 사용자 디바이스는 웨어러블 디스플레이 디바이스들일 수 있거나 이에 포함될 수 있으며, 이는 보다 몰입형 VR(virtual reality), AR(augmented reality), 또는 MR(mixed reality) 경험을 유리하게 제공할 수 있고, 여기서, 디지털방식으로 재생된 이미지들 또는 이미지들의 부분들은, 그것들이 실제인 것으로 보이거나, 실제로서 지각될 수 있는 방식으로 착용자에게 제시된다.
[0246] 이론에 의해 제한되지 않고서, 인간 눈이 통상적으로 깊이 지각을 제공하기 위하여 유한 수의 깊이 평면들을 해석할 수 있다고 여겨진다. 결과적으로, 지각된 깊이의 매우 믿을 만한 시뮬레이션은, 눈에, 이들 제한된 수의 깊이 평면들 각각에 대응하는 이미지의 상이한 프리젠테이션들을 제공함으로써 달성될 수 있다. 예컨대, 도파관들의 스택을 포함하는 디스플레이들은 사용자, 또는 뷰어의 눈들의 전면에 포지셔닝되게 착용되도록 구성될 수 있다. 도파관들의 스택은, 이미지 주입 디바이스(예컨대, 이산 디스플레이들, 또는 하나 이상의 광섬유들을 통해 이미지 정보를 파이핑(pipe)하는 멀티플렉싱된 디스플레이의 출력 단부들)로부터의 광을 특정 도파관과 연관된 깊이 평면에 대응하는 특정 각도들(및 발산 양들)로 뷰어의 눈으로 지향시키기 위해 복수의 도파관들을 사용함으로써 눈/뇌에 3차원 지각을 제공하는데 활용될 수 있다.
[0247] 일부 실시예들에서, 도파관들의 2개의 스택들(뷰어의 각각의 눈마다 하나씩)은 각각의 눈에 상이한 이미지들을 제공하기 위해 활용될 수 있다. 일 예로서, 증강 현실 장면은 AR 기술의 착용자가 배경에 있는 사람들, 나무들, 빌딩들, 및 콘크리트 플랫폼을 피처링(featuring)하는 실세계 공원-형 세팅을 보도록 이루어질 수 있다. 이들 아이템들에 더하여, AR 기술의 착용자는 또한, 그가 실세계 플랫폼 상에 서 있는 로봇 동상, 및 호박벌의 의인화인 것으로 보여지는 날고 있는 만화-형 아바타 캐릭터를 "보는 것"을 지각할 수 있더라도, 로봇 동상 및 호박벌은 실세계에 존재하지 않는다. 도파관들의 스택(들)은 입력 이미지에 대응하는 광 필드를 생성하는 데 사용될 수 있고, 일부 구현들에서 웨어러블 디스플레이는 웨어러블 광 필드 디스플레이를 포함한다. 광 필드 이미지들을 제공하기 위한 웨어러블 디스플레이 디바이스 및 도파관 스택들의 예들은 미국 특허 공보 제2015/0016777호에서 설명되며, 그리하여, 이 특허 공보는 그것이 포함하는 전부에 대해 그 전체가 인용에 의해 본원에 포함된다.
[0248] 도 12는 디스플레이 시스템 착용자 또는 뷰어(1204)에 VR, AR 또는 MR 경험을 제시하는 데 사용될 수 있는 웨어러블 디스플레이 시스템(1200)의 예를 예시한다. 웨어러블 디스플레이 시스템(1200)은 본원에서 설명된 애플리케이션들 또는 실시예들 중 임의의 것(예컨대, CNN들의 실행, 입력 활성화 맵들 또는 커널들의 값들의 재정렬, 눈 이미지 분할, 또는 눈 추적)을 수행하도록 프로그래밍될 수 있다. 디스플레이 시스템(1200)은 디스플레이(1208), 및 그 디스플레이(1208)의 기능을 지원하기 위한 다양한 기계 및 전자 모듈들 및 시스템들을 포함한다. 디스플레이(1208)는 디스플레이 시스템 착용자 또는 뷰어(1204)에 의해 착용 가능하고 그리고 착용자(1204)의 눈들의 전면에 디스플레이(1208)를 포지셔닝하도록 구성된 프레임(1212)에 커플링될 수 있다. 디스플레이(1208)는 광 필드 디스플레이일 수 있다. 일부 실시예들에서, 스피커(1216)는 프레임(1212)에 커플링되고 사용자의 외이도에 인접하게 포지셔닝되고, 일부 실시예들에서, 도시되지 않은 다른 스피커가 사용자의 다른 외이도에 인접하게 포지셔닝되어 스테레오/성형 가능(shapeable) 사운드 제어를 제공한다. 디스플레이(1208)는 이를테면, 유선 리드 또는 무선 연결성에 의해, 다양한 구성들로 장착될 수 있는, 이를테면, 프레임(1212)에 고정되게 부착되거나, 사용자에 의해 착용된 헬멧 또는 모자에 고정되게 부착되거나, 헤드폰들에 내장되거나, 그렇지 않으면 사용자(1204)에게 제거 가능하게 부착되는 (예컨대, 백팩(backpack)-스타일 구성으로, 벨트-커플링 스타일 구성으로) 로컬 데이터 프로세싱 모듈(1224)에 동작 가능하게 커플링(1220)된다.
[0249] 로컬 프로세싱 및 데이터 모듈(1224)은 하드웨어 프로세서는 물론, 비일시적인 디지털 메모리 이를테면, 비-휘발성 메모리(예컨대, 플래시 메모리)를 포함할 수 있고, 이 둘 모두는 데이터의 프로세싱, 캐싱(caching) 및 저장을 보조하기 위해 활용될 수 있다. 데이터는 a) 센서들(예컨대 프레임(1212)에 동작 가능하게 커플링되거나 그렇지 않으면 착용자(1204)에게 부착될 수 있음), 예컨대, 이미지 캡처 디바이스들(예컨대, 카메라들), 마이크로폰들, 관성 측정 유닛들, 가속도계들, 컴퍼스(compass)들, GPS 유닛들, 라디오 디바이스들, 및/또는 자이로(gyro)들로부터 캡처되고; 및/또는 b) 원격 프로세싱 모듈(1228) 및/또는 원격 데이터 저장소(repository)(1232)를 사용하여 취득 및/또는 프로세싱되는 (가능하게는, 이러한 프로세싱 또는 리트리벌(retrieval) 후 디스플레이(1208)에 전달하기 위한) 데이터를 포함할 수 있다. 로컬 프로세싱 및 데이터 모듈(1224)은 통신 링크들(1236, 1240)에 의해, 이를테면, 유선 또는 무선 통신 링크들을 통해 원격 프로세싱 모듈(1228) 및 원격 데이터 저장소(1232)에 동작 가능하게 커플링될 수 있어서, 이들 원격 모듈들(1228, 1232)은 서로 동작 가능하게 커플링되고 자원들로서 로컬 프로세싱 및 데이터 모듈(1224)에 대해 이용 가능하게 된다. 이미지 캡처 디바이스(들)는 눈 이미지 분할 또는 눈 추적 절차들에서 사용되는 눈 이미지들을 캡처하는 데 사용될 수 있다.
[0250] 일부 실시예들에서, 원격 프로세싱 모듈(1228)은 데이터 및/또는 이미지 정보, 이를테면, 이미지 캡처 디바이스에 의해 캡처된 비디오 정보를 분석 및 프로세싱하도록 구성된 하나 이상의 프로세서들을 포함할 수 있다. 비디오 데이터는 로컬 프로세싱 및 데이터 모듈(1224) 및/또는 원격 데이터 저장소(1232)에 로컬로 저장될 수 있다. 일부 실시예들에서, 원격 데이터 저장소(1232)는 "클라우드" 자원 구성에서 인터넷 또는 다른 네트워킹 구성을 통하여 이용 가능할 수 있는 디지털 데이터 저장 설비를 포함할 수 있다. 일부 실시예들에서, 모든 데이터는 저장되고 모든 계산들은 로컬 프로세싱 및 데이터 모듈(1224)에서 수행되어, 원격 모듈로부터 완전히 자율적인 사용을 허용한다.
[0251] 일부 구현들에서, 로컬 프로세싱 및 데이터 모듈(1224) 및/또는 원격 프로세싱 모듈(1228)은 본원에서 개시된 입력 활성화 맵들 또는 커널들의 값들을 재정렬하는 것, 눈 이미지 분할, 또는 눈 추적의 실시예들을 수행하도록 프로그래밍된다. 예컨대, 로컬 프로세싱 및 데이터 모듈(1224) 및/또는 원격 프로세싱 모듈(1228)은 도 10을 참조하여 설명된 프로세스(1000)의 실시예들 및 도 2-9b 및 11을 참조하여 설명된 방법들을 수행하도록 프로그래밍될 수 있다. 로컬 프로세싱 및 데이터 모듈(1224) 및 / 또는 원격 프로세싱 모듈(1228)은, 예컨대, 착용자(1204)의 아이덴티티를 식별 및 인증하기 위해, 바이오메트릭 추출 시에 본원에서 개시된 입력 활성화 맵들 또는 커널들의 값들을 재정렬하는 것, 눈 이미지 분할, 또는 눈 추적 기술들을 사용하도록 프로그래밍될 수 있다. 이미지 캡처 디바이스는 특정 애플리케이션에 대한 비디오(예컨대, 눈 추적 애플리케이션의 경우 착용자의 눈의 비디오 또는 제스처 식별 애플리케이션의 경우 착용자의 손 또는 손가락의 비디오)를 캡처할 수 있다. 비디오는 CNN을 사용하여 프로세싱 모듈들(1224, 1228) 중 하나 또는 둘 모두에 의해 분석될 수 있다. 일부 경우들에서, 입력 활성화 맵들 또는 커널들의 값들을 재정렬하는 것, 눈 이미지 분할, 또는 눈 추적 중 적어도 일부를 (예컨대, "클라우드"의) 원격 프로세싱 모듈에 분담(off-loading)하는 것은 효율성 또는 계산들의 속도를 개선할 수 있다. CNN의 파라미터들(예컨대, 가중치들, 바이어스 기간(bias term)들, 풀링 층들에 대한 서브샘플링 팩터들, 상이한 층들에서의 커널들의 수 및 크기, 특징 맵들의 수 등)는 데이터 모듈들(1224 및/또는 1232)에 저장될 수 있다.
[0252] 비디오 분석의 결과들(예컨대, CNN의 출력)은 부가적인 동작들 또는 프로세싱을 위해 프로세싱 모듈들(1224, 1228) 중 하나 또는 둘 모두에 의해 사용될 수 있다. 예컨대, 다양한 CNN 애플리케이션들에서, 바이오메트릭 식별, 눈-추적, 인식, 또는 제스처들, 객체, 포즈의 분류 등은 웨어러블 디스플레이 시스템(1200)에 의해 사용될 수 있다. 예컨대, 착용자의 눈(들)의 비디오는 눈 이미지 분할에 사용될 수 있으며, 이는 결국, 디스플레이(1208)를 통한 착용자(1204)의 눈 추적을 위해 프로세싱 모듈들(1224, 1228)에 의해 사용될 수 있다. 웨어러블 디스플레이 시스템(1200)의 프로세싱 모듈들(1224, 1228)은 본원에서 설명된 비디오 또는 이미지 프로세싱 애플리케이션들 중 임의의 것을 수행하기 위해 입력 활성화 맵들 또는 커널들의 값들을 재정렬하는 것, 눈 이미지 분할, 또는 눈 추적의 하나 이상의 실시예들로 프로그래밍될 수 있다.
부가적인 양상들
[0253] 제1 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 콘볼루션 계층은 커널 스택의 커널들을 포함하고, 커널 스택의 커널들은 기본 커널 레이아웃임 ― , 커널 스택의 커널들의 가중 값들을 기본 커널 레이아웃으로부터 복수의 커널 타일들을 포함하는 타일 커널 레이아웃으로 재정렬하는 것 ― 커널 타일은 복수의 커널 러널들을 포함하고, 커널 러널은 커널 스택의 커널들의 다수의 가중 값들을 포함함 ― 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것 ― 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― , 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것, 및 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃이다.
[0254] 제2 양상에서, 제1 양상의 방법에 있어서, 커널 스택의 커널들의 가중 값들을 기본 커널 레이아웃으로부터 타일 커널 레이아웃으로 재정렬하는 것은, 반복적으로, 커널 스택의 폭 치수를 따라 순회하는 것, 커널 스택의 높이 치수를 따라 순회하는 것, 커널 스택의 커널의 폭 치수를 따라 순회하는 것, 및 커널 스택의 커널의 높이 치수를 따라 순회하는 것을 포함한다.
[0255] 제3 양상에서, 제1 양상 또는 제2 양상의 방법에 있어서, 커널 타일의 제1 커널 러널은 제1 커널 스택 폭 경계에 대응하고, 그리고 커널 타일의 마지막 커널 러널은 제1 커널 스택 폭 경계에 후속하는 제2 커널 스택 폭 경계에 대응한다.
[0256] 제4 양상에서, 제1 양상 내지 제3 양상 중 어느 한 양상의 방법에 있어서, 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것은, 반복적으로, 입력 활성화 맵들의 수의 치수를 따라 순회하는 것, 입력 활성화 맵의 폭 치수를 따라 순회하는 것, 및 입력 활성화 맵의 높이 치수를 따라 순회하는 것을 포함한다.
[0257] 제5 양상에서, 제1 양상 내지 제4 양상 중 어느 한 양상의 방법에 있어서, 출력 활성화 맵들의 픽셀 값들을 인터리빙된 출력 활성화 맵 레이아웃으로부터 기본 출력 활성화 맵 레이아웃으로 재정렬하는 것을 더 포함한다.
[0258] 제6 양상에서, 제5 양상의 방법에 있어서, 출력 활성화 맵들의 픽셀 값들을 인터리빙된 출력 활성화 맵 레이아웃으로부터 기본 출력 활성화 맵 레이아웃으로 재정렬하는 것은, 반복적으로, 인터리빙된 출력 활성화 맵의 폭 치수를 따라 순회하는 것, 및 인터리빙된 출력 활성화 맵의 높이 치수를 따라 순회하는 것을 포함한다.
[0259] 제7 양상에서, 제1 양상 내지 제6 양상 중 어느 한 양상의 방법에 있어서, 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것은, 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하는 것을 포함한다.
[0260] 제8 양상에서, 제7 양상의 방법에 있어서, 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하는 것은, 반복적으로, 각각의 출력 활성화 맵 픽셀에 대해, 출력 활성화 맵 픽셀의 값을 0의 값으로 설정하는 것, 및 복수의 커널 타일들의 각각의 커널 타일의 각각의 커널 러널에 대해, 각각의 커널 러널, 커널 러널에 대응하는 입력 활성화 맵 픽셀 및 출력 활성화 맵 픽셀, 및 출력 활성화 맵 픽셀에 대해 융합된 곱셈-덧셈 연산을 수행하는 것을 포함한다.
[0261] 제9 양상에서, 제7 양상의 방법에 있어서, 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하는 것은, 반복적으로, 각각의 출력 활성화 맵 픽셀에 대해, 출력 활성화 맵 픽셀의 값을 0의 값으로 설정하는 것, 및 복수의 커널 타일들의 각각의 커널 타일의 각각의 커널 러널에 대해, 각각의 커널 러널, 커널 러널에 대응하는 적어도 하나의 입력 활성화 맵 픽셀 및 출력 활성화 맵 픽셀, 및 출력 활성화 맵 픽셀에 대해 융합된 곱셈-덧셈 연산을 수행하는 것을 포함한다.
[0262] 제10 양상에서, 제9 양상의 방법에 있어서, 적어도 하나의 입력 활성화 맵 픽셀은 2개의 입력 활성화 맵 픽셀들을 포함한다.
[0263] 제11 양상에서, 제1 양상 내지 제10 양상 중 어느 한 양상의 방법에 있어서, 커널 러널의 비트 단위의 크기 및 입력 활성화 맵 러널의 비트 단위의 크기는 동일하다.
[0264] 제12 양상에서, 제11 양상의 방법에 있어서, 커널 러널의 비트 단위의 크기 및 출력 활성화 맵 러널의 비트 단위의 크기는 동일하다.
[0265] 제13 양상에서, 제11 양상 또는 제12 양상의 방법에 있어서, 커널 러널의 비트 단위의 크기 및 하드웨어 프로세서의 레지스터의 비트 단위의 크기는 동일하다.
[0266] 제14 양상에서, 제13 양상의 방법에 있어서, 레지스터의 크기는 128 비트이다.
[0267] 제15 양상에서, 제1 양상 내지 제14 양상 중 어느 한 양상의 방법에 있어서, 하드웨어 프로세서는 단일 명령, 다중 데이터 프로세서를 포함한다.
[0268] 제16 양상에서, 제15 양상의 방법에 있어서, 단일 명령, 다중 데이터 프로세서는 벡터 프로세서를 포함한다.
[0269] 제17 양상에서, 제1 양상 내지 제16 양상 중 어느 한 양상의 방법에 있어서, 기본 커널 레이아웃의 커널 스택의 커널들은 복수의 커널 스택 채널들에 배열되고, 복수의 커널 스택 채널들의 수 및 입력 활성화 맵들의 수는 동일하고, 그리고 커널 스택 채널의 커널들의 수 및 출력 활성화 맵들의 수는 동일하다.
[0270] 제18 양상에서, 제1 양상 내지 제17 양상 중 어느 한 양상의 방법에 있어서, 커널 스택의 커널 스택 폭 및 출력 활성화 맵들의 수는 동일하다.
[0271] 제19 양상에서, 제1 양상 내지 제18 양상 중 어느 한 양상의 방법에 있어서, 기본 커널 레이아웃의 커널 스택의 커널들은 복수의 커널 스택 필터 뱅크들에 배열되고, 복수의 커널 스택 필터 뱅크들의 수 및 출력 활성화 맵들의 수는 동일하고, 그리고 커널 스택 필터 뱅크의 커널들의 수 및 입력 활성화 맵들의 수는 동일하다.
[0272] 제20 양상에서, 제1 양상 내지 제19 양상 중 어느 한 양상의 방법에 있어서, 커널 스택의 커널 스택 높이 및 입력 활성화 맵들의 수는 동일하다.
[0273] 제21 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 커널 스택의 커널들을 포함하는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 커널 스택의 커널들은 커널 러널들의 복수의 커널 타일들을 포함하는 타일 커널 레이아웃이고, 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것, 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― , 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것, 및 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃이다.
[0274] 제22 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 커널 스택의 커널들을 포함하는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 커널 스택의 커널들은 커널 러널들의 복수의 커널 타일들을 포함하는 타일 커널 레이아웃임 ― , 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것 ― 입력 활성화 맵들은 인터리빙된 입력 활성화 맵 레이아웃임 ― , 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃이다.
[0275] 제23 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 커널 스택의 커널들을 포함하는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 커널 스택의 커널들은 커널 러널들의 복수의 커널 타일들을 포함하는 타일 커널 레이아웃이고, 커널의 치수는 1임 ― , 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것 ― 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― , 스트라이딩(striding)에 의해 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것, 및 복수의 커널 타일들 및 복수의 입력 활성화 맵 타일들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵들의 복수의 클러스터들을 포함하는 전치된, 인터리빙된 출력 활성화 맵 레이아웃이다.
[0276] 제24 양상에서, 제23 양상의 방법에 있어서, 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것은, 입력 활성화 맵들의 수의 배수인 스트라이드 크기로 스트라이딩함으로써 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하는 것을 포함한다.
[0277] 제25 양상에서, 제24 양상의 방법에 있어서, 입력 활성화 맵들의 수의 배수는 1이다.
[0278] 제26 양상에서, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층의 효율적인 구현을 위한 방법이 개시된다. 방법은 하드웨어 프로세서의 제어 하에 있으며, 커널 스택의 커널들을 포함하는 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 수신하는 것 ― 커널 스택의 커널들은 커널 러널들의 복수의 커널 타일들을 포함하는 타일 커널 레이아웃이고, 커널의 치수는 1임 ― , 콘볼루션 계층의 입력 활성화 맵들을 수신하는 것 ― 입력 활성화 맵들은 입력 활성화 맵들의 수의 배수인 스트라이드 크기를 갖는 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃임 ― , 복수의 커널 타일들 및 복수의 입력 활성화 맵 타일들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하는 것을 포함하고, 출력 활성화 맵들은 출력 활성화 맵들의 복수의 클러스터들을 포함하는 전치된, 인터리빙된 출력 활성화 맵 레이아웃이다.
[0279] 제27 양상에서, 제26 양상의 방법에 있어서, 입력 활성화 맵들의 수의 배수는 1이다.
[0280] 제28 양상에서, 컴퓨터 시스템이 개시된다. 컴퓨터 시스템은 하드웨어, 및 명령들이 저장된 비-일시적인 메모리를 포함하고, 명령들은, 하드웨어 프로세서에 의해 실행될 때, 프로세서로 하여금, 제1 양상 내지 제27 양상 중 어느 한 양상의 방법을 수행하게 한다.
[0281] 제29 양상에서, 제28 양상의 컴퓨터 시스템에 있어서, 컴퓨터 시스템은 모바일 디바이스를 포함한다.
[0282] 제30 양상에서, 제29 양상의 컴퓨터 시스템에 있어서, 모바일 디바이스는 웨어러블 디스플레이 시스템을 포함한다.
[0283] 제31 양상에서, CNN(convolutional neural network)을 구현하기 위한 시스템이 개시된다. 시스템은, 콘볼루션 뉴럴 네트워크의 콘볼루션 계층을 저장하도록 구성된 비-일시적인 메모리 ― 콘볼루션 계층은 커널 스택의 커널들을 포함하고, 커널 스택의 커널들은 기본 커널 레이아웃이고, 커널 스택의 커널들의 가중 값들은 기본 커널 레이아웃으로부터 복수의 커널 타일들을 포함하는 타일 커널 레이아웃으로 재정렬되고, 커널 타일은 복수의 커널 러널들을 포함하고, 커널 러널은 커널 스택의 커널들의 다수의 가중 값들을 포함함 ― , 및 비-일시적인 메모리와 통신하는 하드웨어 프로세서를 포함하고, 하드웨어 프로세서는 콘볼루션 계층의 입력 활성화 맵들을 수신하고 ― 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― , 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하고, 그리고 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하도록 실행 가능한 명령들에 의해 프로그래밍되고, 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃이다. 일부 실시예들에서, 웨어러블 디스플레이 시스템은 CNN을 구현하기 위한 시스템을 포함한다. 웨어러블 디스플레이 시스템은 가상 이미지를 웨어러블 디스플레이 시스템의 사용자에게 제시하도록 구성된 디스플레이를 포함할 수 있고, 하드웨어 프로세서는 디스플레이와 통신할 수 있다.
[0284] 제32 양상에서, 제31 양상의 시스템에 있어서, 커널 스택의 커널들의 가중 값들은, 반복적으로, 커널 스택의 폭 치수를 따라 순회하고, 커널 스택의 높이 치수를 따라 순회하고, 커널 스택의 커널의 폭 치수를 따라 순회하고, 그리고 커널 스택의 커널의 높이 치수를 따라 순회함으로써, 기본 커널 레이아웃으로부터 타일 커널 레이아웃으로 재정렬된다.
[0285] 제33 양상에서, 제31 양상 또는 제32 양상의 시스템에 있어서, 커널 타일의 제1 커널 러널은 제1 커널 스택 폭 경계에 대응하고, 그리고 커널 타일의 마지막 커널 러널은 제1 커널 스택 폭 경계에 후속하는 제2 커널 스택 폭 경계에 대응한다.
[0286] 제34 양상에서, 제31 양상 내지 제33 양상 중 어느 한 양상의 시스템에 있어서, 입력 활성화 맵들의 픽셀 값들을 기본 입력 활성화 맵 레이아웃으로부터 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하기 위해, 하드웨어 프로세서는, 반복적으로, 입력 활성화 맵들의 수의 치수를 따라 순회하고, 입력 활성화 맵의 폭 치수를 따라 순회하고, 그리고 입력 활성화 맵의 높이 치수를 따라 순회하도록 프로그래밍된다.
[0287] 제35 양상에서, 제31 양상 내지 제34 양상 중 어느 한 양상의 시스템에 있어서, 하드웨어 프로세서는, 출력 활성화 맵들의 픽셀 값들을 인터리빙된 출력 활성화 맵 레이아웃으로부터 기본 출력 활성화 맵 레이아웃으로 재정렬하도록 프로그래밍된다.
[0288] 제36 양상에서, 제35 양상의 시스템에 있어서, 출력 활성화 맵들의 픽셀 값들을 인터리빙된 출력 활성화 맵 레이아웃으로부터 기본 출력 활성화 맵 레이아웃으로 재정렬하기 위해, 하드웨어 프로세서는, 반복적으로, 인터리빙된 출력 활성화 맵의 폭 치수를 따라 순회하고, 그리고 인터리빙된 출력 활성화 맵의 높이 치수를 따라 순회하도록 프로그래밍된다.
[0289] 제37 양상에서, 제31 양상 내지 제36 양상 중 어느 한 양상의 시스템에 있어서, 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 콘볼루션 계층의 출력 활성화 맵들을 결정하기 위해, 하드웨어 프로세서는 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하도록 프로그래밍된다.
[0290] 제38 양상에서, 제37 양상의 시스템에 있어서, 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하기 위해, 하드웨어 프로세서는, 반복적으로, 각각의 출력 활성화 맵 픽셀에 대해, 출력 활성화 맵 픽셀의 값을 0의 값으로 설정하고, 그리고 복수의 커널 타일들의 각각의 커널 타일의 각각의 커널 러널에 대해, 각각의 커널 러널, 커널 러널에 대응하는 입력 활성화 맵 픽셀 및 출력 활성화 맵 픽셀, 및 출력 활성화 맵 픽셀에 대해 융합된 곱셈-덧셈 연산을 수행하도록 프로그래밍된다.
[0291] 제39 양상에서, 제37 양상의 시스템에 있어서, 복수의 커널 타일들 및 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하기 위해, 하드웨어 프로세서는, 반복적으로, 각각의 출력 활성화 맵 픽셀에 대해, 출력 활성화 맵 픽셀의 값을 0의 값으로 설정하고, 그리고 복수의 커널 타일들의 각각의 커널 타일의 각각의 커널 러널에 대해, 각각의 커널 러널, 커널 러널에 대응하는 적어도 하나의 입력 활성화 맵 픽셀 및 출력 활성화 맵 픽셀, 및 출력 활성화 맵 픽셀에 대해 융합된 곱셈-덧셈 연산을 수행하도록 프로그래밍된다.
[0292] 제40 양상에서, 제39 양상의 시스템에 있어서, 적어도 하나의 입력 활성화 맵 픽셀은 2개의 입력 활성화 맵 픽셀들을 포함한다.
[0293] 제41 양상에서, 제31 양상 내지 제40 양상 중 어느 한 양상의 시스템에 있어서, 커널 러널의 비트 단위의 크기 및 입력 활성화 맵 러널의 비트 단위의 크기는 동일하다.
[0294] 제42 양상에서, 제41 양상의 시스템에 있어서, 커널 러널의 비트 단위의 크기 및 출력 활성화 맵 러널의 비트 단위의 크기는 동일하다.
[0295] 제43 양상에서, 제41 양상 또는 제42 양상의 시스템에 있어서, 커널 러널의 비트 단위의 크기 및 하드웨어 프로세서의 레지스터의 비트 단위의 크기는 동일하다.
[0296] 제44 양상에서, 제43 양상의 시스템에 있어서, 레지스터의 크기는 128 비트이다.
[0297] 제45 양상에서, 제31 양상 내지 제44 양상 중 어느 한 양상의 시스템에 있어서, 하드웨어 프로세서는 단일 명령, 다중 데이터 프로세서를 포함한다.
[0298] 제46 양상에서, 제45 양상의 시스템에 있어서, 단일 명령, 다중 데이터 프로세서는 벡터 프로세서를 포함한다.
[0299] 제47 양상에서, 제31 양상 내지 제46 양상 중 어느 한 양상의 시스템에 있어서, 기본 커널 레이아웃의 커널 스택의 커널들은 복수의 커널 스택 채널들에 배열되고, 복수의 커널 스택 채널의 수 및 입력 활성화 맵들의 수는 동일하고, 그리고 커널 스택 채널의 커널들의 수 및 출력 활성화 맵들의 수는 동일하다.
[0300] 제48 양상에서, 제31 양상 내지 제47 양상 중 어느 한 양상의 시스템에 있어서, 커널 스택의 커널 스택 폭 및 출력 활성화 맵들의 수는 동일하다.
[0301] 제49 양상에서, 제31 양상 내지 제48 양상 중 어느 한 양상의 시스템에 있어서, 기본 커널 레이아웃의 커널 스택의 커널들은 복수의 커널 스택 필터 뱅크들에 배열되고, 복수의 커널 스택 필터 뱅크들의 수 및 출력 활성화 맵들의 수는 동일하고, 그리고 커널 스택 필터 뱅크의 커널들의 수 및 입력 활성화 맵들의 수는 동일하다.
[0302] 제50 양상에서, 제31 양상 내지 제49 양상 중 어느 한 양상의 시스템에 있어서, 커널 스택의 커널 스택 높이 및 입력 활성화 맵들의 수는 동일하다.
결론
[0303] 본원에서 설명되고 그리고/또는 첨부 도면들에 도시되는 프로세스들, 방법들 및 알고리즘들 각각은 하나 이상의 물리적 컴퓨팅 시스템들, 하드웨어 컴퓨터 프로세서들, 주문형 회로 및/또는 특유 및 특정 컴퓨터 명령들을 실행하도록 구성된 전자 하드웨어에 의해 실행되는 코드 모듈들로 구현되고, 이 코드 모듈들에 의해 완전히 또는 부분적으로 자동화될 수 있다. 예컨대, 컴퓨팅 시스템들은 특정 컴퓨터 명령들로 프로그래밍된 범용 컴퓨터들(예컨대, 서버들) 또는 특수 목적 컴퓨터들, 특수 목적 회로 등을 포함할 수 있다. 코드 모듈은 실행 가능 프로그램으로 컴파일되어 링크되거나, 동적 링크 라이브러리에 설치될 수 있거나, 또는 인터프리팅된 프로그래밍 언어로 작성될 수 있다. 일부 구현들에서, 특정한 동작들 및 방법들은, 주어진 기능에 특정한 회로에 의해 수행될 수 있다.
[0304] 추가로, 본 개시내용의 기능성의 소정의 구현들은 충분히 수학적으로, 계산적으로 또는 기술적으로 복잡하여, (적절한 특수화된 실행 가능한 명령들을 활용하는) 주문형 하드웨어 또는 하나 이상의 물리적 컴퓨팅 디바이스들은 예컨대, 수반되는 계산들의 양(volume) 또는 복잡성으로 인해 또는 실질적으로 실시간으로 결과들을 제공하기 위해 그 기능성들을 수행할 필요가 있을 수 있다. 예컨대, 비디오는 다수의 프레임들(각각의 프레임은 수백만개의 픽셀들을 가짐)을 포함할 수 있고, 상업적으로 합리적인 시간량 내에 원하는 이미지 프로세싱 태스크 또는 애플리케이션을 제공하기 위해, 특별히 프로그래밍된 컴퓨터 하드웨어가 비디오 데이터를 프로세싱할 필요가 있다.
[0305] 코드 모듈들 또는 임의의 유형의 데이터는, 임의의 유형의 비-일시적인 컴퓨터-판독 가능 매체, 이를테면, 하드 드라이브, 솔리드 스테이트 메모리, RAM(random access memory), ROM(read only memory), 광학 디스크, 휘발성 또는 비-휘발성 저장소, 이들의 조합들 등을 포함하는 물리적 컴퓨터 저장소 상에 저장될 수 있다. 방법들 및 모듈들(또는 데이터)은 또한, 생성된 데이터 신호들로서(예컨대, 반송파 또는 다른 아날로그 또는 디지털 전파 신호의 일부로서) 무선-기반 및 유선/케이블-기반 매체들을 포함하는 다양한 컴퓨터-판독 가능 송신 매체들 상에서 송신될 수 있고, (예컨대, 단일 또는 멀티플렉싱된 아날로그 신호의 일부로서, 또는 다수의 이산 디지털 패킷들 또는 프레임들로서) 다양한 형태들을 취할 수 있다. 개시된 프로세스들 또는 프로세스 단계들의 결과들은 임의의 유형의 비-일시적인 유형의(tangible) 컴퓨터 저장소에 지속적으로 또는 다른 방식으로 저장될 수 있거나, 또는 컴퓨터-판독 가능 송신 매체를 통해 통신될 수 있다.
[0306] 본원에서 설명되고 그리고/또는 첨부된 도면들에 도시되는 흐름도들에서의 임의의 프로세스들, 블록들, 상태들, 단계들, 또는 기능성들은 프로세스의 단계들 또는 (예컨대, 논리적 또는 산술적) 특정 기능들을 구현하기 위한 하나 이상의 실행 가능한 명령들을 포함하는 코드 모듈들, 세그멘트들 또는 코드 부분들을 잠재적으로 나타내는 것으로 이해되어야 한다. 다양한 프로세스들, 블록들, 상태들, 단계들 또는 기능성들은 본원에서 제공된 예시적인 예들에서 조합되거나, 재배열되거나, 이들에 부가되거나, 이들로부터 제거되거나, 수정되거나, 또는 다른 방식으로 변할 수 있다. 일부 실시예들에서, 부가적인 또는 상이한 컴퓨팅 시스템들 또는 코드 모듈들은 본원에서 설명된 기능성들 중 일부 또는 전부를 수행할 수 있다. 본원에 설명된 방법들 및 프로세스들은 또한 임의의 특정 시퀀스로 제한되지 않고, 그에 관련된 블록들, 단계들 또는 상태들은 적절한 다른 시퀀스들로, 예컨대, 직렬로, 병렬로 또는 일부 다른 방식으로 수행될 수 있다. 태스크들 또는 이벤트들은 개시된 예시적인 실시예들에 부가되거나 그로부터 제거될 수 있다. 또한, 본원에서 설명된 구현들에서의 다양한 시스템 컴포넌트들의 분리는 예시 목적들을 위한 것이며, 모든 구현들에서 이러한 분리를 요구하는 것으로 이해되어서는 안 된다. 설명된 프로그램 컴포넌트들, 방법들 및 시스템들은 일반적으로 단일 컴퓨터 제품에 함께 통합되거나 다수의 컴퓨터 제품들로 패키징될 수 있다는 것이 이해되어야 한다. 다수의 구현 변동들이 가능하다.
[0307] 프로세스들, 방법들 및 시스템들은 네트워크(또는 분산형) 컴퓨팅 환경에서 구현될 수 있다. 네트워크 환경들은, 전사적(enterprise-wide) 컴퓨터 네트워크들, 인트라넷들, LAN(Local Area Network)들, WAN(Wide Area Network)들, PAN(Personal Area Network)들, 클라우드 컴퓨팅 네트워크들, 크라우드-소스드(crowd-sourced) 컴퓨팅 네트워크들, 인터넷 및 월드 와이드 웹(World Wide Web)을 포함한다. 네트워크는 유선 또는 무선 네트워크 또는 임의의 다른 유형의 통신 네트워크일 수 있다.
[0308] 본 개시내용의 시스템들 및 방법들 각각은 몇몇 혁신적인 양상들을 가지며, 그 양상들 중 어떠한 단일 양상도 본원에서 개시된 바람직한 속성들을 전적으로 담당하거나 이를 위해 요구되지 않는다. 위에서 설명된 다양한 특징들 및 프로세스들은 서로 독립적으로 사용될 수 있거나, 또는 다양한 방식들로 조합될 수 있다. 모든 가능한 조합들 및 서브조합들은 본 개시내용의 범위 내에 속하는 것으로 의도된다. 본 개시내용에서 설명된 구현들에 대한 다양한 수정들은 당업자들에게 용이하게 자명할 수 있으며, 본원에서 정의된 일반적인 원리들은 본 개시내용의 사상 또는 범위를 벗어나지 않으면서 다른 구현들에 적용될 수 있다. 따라서, 청구항들은 본 명세서에 도시된 구현들로 제한되도록 의도되는 것이 아니라, 본 명세서에 개시된 본 개시내용, 원리들 및 신규한 특성들과 일치하는 가장 넓은 범위에 부합할 것이다.
[0309] 별개의 구현들의 맥락에서 본 명세서에 설명된 소정의 특징들은 또한, 단일 구현의 조합으로 구현될 수 있다. 대조적으로, 단일 구현의 맥락에서 설명된 다양한 특징들은 또한, 별개로 다수의 구현들에서 또는 임의의 적절한 서브조합으로 구현될 수 있다. 더욱이, 특징들이 소정의 조합들로 작용하는 것으로 위에서 설명되고 심지어 초기에 이와 같이 청구될 수 있지만, 일부 경우들에서, 청구된 조합으로부터의 하나 이상의 특징들은 그 조합으로부터 제거될 수 있고, 청구된 조합은 서브조합 또는 서브조합의 변동에 관련될 수 있다. 단일 특징 또는 특징들의 그룹이 각각의 그리고 모든 각각의 실시예에 필요하거나 필수적인 것은 아니다.
[0310] 구체적으로 달리 언급되지 않거나 또는 사용된 맥락 내에서 달리 이해되지 않으면, 본원에서 사용된 조건어, 이를테면, 다른 것들 중에서도, "할 수 있다(can, could, might, may)", "예컨대" 등은 일반적으로, 소정의 실시예들이 소정의 특징들, 엘리먼트들 및/또는 단계들을 포함하지만 다른 실시예들은 이들을 포함하지 않는다는 것을 전달하도록 의도된다. 따라서, 그러한 조건어는 일반적으로, 특징들, 엘리먼트들 및/또는 단계들이 하나 이상의 실시예들을 위해 어떤 식으로든 요구된다는 것을, 또는 하나 이상의 실시예들이, 저자 입력 또는 프롬프팅(prompting)을 이용하거나 또는 이를 이용함이 없이, 이들 특징들, 엘리먼트들 및/또는 단계들이 임의의 특정 실시예에 포함되는지 또는 임의의 특정 실시예들에서 수행되어야 하는지를 판단하기 위한 로직을 반드시 포함한다는 것을 암시하도록 의도되진 않는다. "포함하는(comprising, including), "갖는(having)" 등의 용어들은 동의어이며, 오픈-엔디드(open-ended) 방식으로 포괄적으로 사용되며, 부가적인 엘리먼트들, 특징들, 행동들, 동작들 등을 배제하지 않는다. 또한, "또는"이라는 용어는 (그의 배타적인 의미가 아니라) 그의 포괄적인 의미로 사용되어서, 예컨대, 리스트의 엘리먼트들을 연결하기 위해 사용될 때, "또는"이라는 용어는 리스트 내의 엘리먼트들 중 하나, 일부, 또는 전부를 의미한다. 또한, 본 명세서 및 첨부된 청구항들에서 사용된 바와 같은 단수 표현은 달리 특정되지 않는 한 "하나 이상" 또는 "적어도 하나"를 의미하는 것으로 해석될 것이다.
[0311] 본원에서 사용된 바와 같이, 리스트의 아이템들 “중 적어도 하나”를 지칭하는 어구는 단일 멤버들을 포함하여 그 아이템들의 임의의 조합을 지칭한다. 예로서, "A, B 또는 C 중 적어도 하나"는 A; B; C; A와 B; A와 C; B와 C; 그리고 A와 B와 C를 커버하는 것으로 의도된다. 특정하게 다르게 언급되지 않으면, 구문 "X, Y 또는 Z 중 적어도 하나"와 같은 접속어는, 아이템, 용어 등이 X, Y 또는 Z 중 적어도 하나일 수 있다는 것을 전달하기 위해 일반적으로 사용되는 맥락으로 달리 이해된다. 따라서, 이러한 접속어는 일반적으로, 소정의 실시예들이 X 중 적어도 하나, Y 중 적어도 하나 및 Z 중 적어도 하나가 각각 존재할 것을 요구하는 것을 암시하는 것으로 의도되지 않는다.
[0312] 유사하게, 동작들이 특정한 순서로 도면들에 도시될 수 있지만, 원하는 결과들을 달성하기 위해, 그러한 동작들이 도시된 특정한 순서 또는 순차적인 순서로 수행될 필요가 없거나, 모든 예시된 동작들이 수행될 필요가 없다는 것이 인지될 것이다. 추가로, 도면들은 흐름도의 형태로 하나 이상의 예시적인 프로세스들을 개략적으로 도시할 수 있다. 그러나, 도시되지 않은 다른 동작들이, 개략적으로 예시된 예시적인 방법들 및 프로세스들에 통합될 수 있다. 예컨대, 하나 이상의 부가적인 동작들은, 예시된 동작들 중 임의의 동작 이전, 이후, 그들과 동시에, 또는 그들 사이에서 수행될 수 있다. 부가적으로, 동작들은 다른 구현들에서 재배열되거나 재순서화될 수 있다. 소정의 환경들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 또한, 위에서 설명된 구현에서의 다양한 시스템 컴포넌트들의 분리는 모든 구현들에서 그러한 분리를 요구하는 것으로서 이해되지는 않아야 하고, 그리고 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로, 단일 소프트웨어 제품으로 함께 통합되거나 다수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다. 부가적으로, 다른 구현들은 다음의 청구항들의 범위 내에 있다. 일부 경우들에서, 청구항들에서 열거된 액션들은, 상이한 순서로 수행될 수 있으며, 그럼에도 불구하고 원하는 결과들을 달성할 수 있다.

Claims (20)

  1. CNN(convolutional neural network)을 실행하기 위한 시스템으로서,
    콘볼루션 뉴럴 네트워크의 콘볼루션 계층(convolutional layer)을 저장하도록 구성된 비-일시적인 메모리 ― 상기 콘볼루션 계층은 커널 스택(kernel stack)의 커널들을 포함하고, 상기 커널 스택의 커널들은 기본 커널 레이아웃(basic kernel layout)이고, 상기 커널 스택의 커널들의 가중 값들은 상기 기본 커널 레이아웃으로부터 복수의 커널 타일들(kernel tiles)을 포함하는 타일 커널 레이아웃으로 재정렬되고, 커널 타일은 복수의 커널 러널들(kernel runnels)을 포함하고, 커널 러널은 상기 커널 스택의 커널들의 다수의 가중 값들을 포함함 ― , 및
    상기 비-일시적인 메모리와 통신하는 하드웨어 프로세서를 포함하고,
    상기 하드웨어 프로세서는,
    상기 콘볼루션 계층의 입력 활성화 맵들을 수신하고 ― 상기 입력 활성화 맵들은 기본 입력 활성화 맵 레이아웃임 ― ,
    상기 입력 활성화 맵들의 픽셀 값들을 상기 기본 입력 활성화 맵 레이아웃으로부터, 입력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된(interleaved) 입력 활성화 맵 레이아웃으로 재정렬하고, 그리고
    상기 복수의 커널 타일들 및 상기 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 상기 콘볼루션 계층의 출력 활성화 맵들을 결정하도록
    실행 가능한 명령들에 의해 프로그래밍되고,
    상기 출력 활성화 맵들은 출력 활성화 맵 픽셀들의 복수의 클러스터들을 포함하는 인터리빙된 출력 활성화 맵 레이아웃인,
    CNN을 실행하기 위한 시스템.
  2. 제1 항에 있어서,
    상기 커널 스택의 커널들의 가중 값들은, 반복적으로,
    상기 커널 스택의 폭 치수(width dimension)를 따라 순회(traverse)하고,
    상기 커널 스택의 높이 치수(height dimension)를 따라 순회하고,
    상기 커널 스택의 커널의 폭 치수를 따라 순회하고, 그리고
    상기 커널 스택의 커널의 높이 치수를 따라 순회함으로써, 상기 기본 커널 레이아웃으로부터 상기 타일 커널 레이아웃으로 재정렬되는,
    CNN을 실행하기 위한 시스템.
  3. 제1 항에 있어서,
    상기 커널 타일의 제1 커널 러널은 제1 커널 스택 폭 경계(boundary)에 대응하고, 상기 커널 타일의 마지막 커널 러널은 상기 제1 커널 스택 폭 경계에 후속하는 제2 커널 스택 폭 경계에 대응하는,
    CNN을 실행하기 위한 시스템.
  4. 제1 항에 있어서,
    상기 입력 활성화 맵들의 픽셀 값들을 상기 기본 입력 활성화 맵 레이아웃으로부터 상기 인터리빙된 입력 활성화 맵 레이아웃으로 재정렬하기 위해, 상기 하드웨어 프로세서는, 반복적으로,
    입력 활성화 맵들의 수의 치수를 따라 순회하고,
    입력 활성화 맵의 폭 치수를 따라 순회하고, 그리고
    입력 활성화 맵의 높이 치수를 따라 순회하도록 프로그래밍되는,
    CNN을 실행하기 위한 시스템.
  5. 제1 항에 있어서,
    상기 하드웨어 프로세서는, 상기 출력 활성화 맵들의 픽셀 값들을 상기 인터리빙된 출력 활성화 맵 레이아웃으로부터 기본 출력 활성화 맵 레이아웃으로 재정렬하도록 프로그래밍되는,
    CNN을 실행하기 위한 시스템.
  6. 제5 항에 있어서,
    상기 출력 활성화 맵들의 픽셀 값들을 상기 인터리빙된 출력 활성화 맵 레이아웃으로부터 상기 기본 출력 활성화 맵 레이아웃으로 재정렬하기 위해, 상기 하드웨어 프로세서는, 반복적으로,
    상기 인터리빙된 출력 활성화 맵의 폭 치수를 따라 순회하고, 그리고
    상기 인터리빙된 출력 활성화 맵의 높이 치수를 따라 순회하도록 프로그래밍되는,
    CNN을 실행하기 위한 시스템.
  7. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 복수의 커널 타일들 및 상기 입력 활성화 맵 픽셀들의 복수의 클러스터들로부터 상기 콘볼루션 계층의 출력 활성화 맵들을 결정하기 위해, 상기 하드웨어 프로세서는, 상기 복수의 커널 타일들 및 상기 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 융합된 곱셈-덧셈 연산들(fused-multiply-add operations)을 타일 단위로(tile by tile) 수행하도록 프로그래밍되는,
    CNN을 실행하기 위한 시스템.
  8. 제7 항에 있어서,
    상기 복수의 커널 타일들 및 상기 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 상기 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하기 위해, 상기 하드웨어 프로세서는, 반복적으로,
    각각의 출력 활성화 맵 픽셀에 대해,
    상기 출력 활성화 맵 픽셀의 값을 0의 값으로 설정하고, 그리고
    상기 복수의 커널 타일들의 각각의 커널 타일의 각각의 커널 러널에 대해,
    상기 각각의 커널 러널, 상기 커널 러널에 대응하는 입력 활성화 맵 픽셀 및 상기 출력 활성화 맵 픽셀, 및 상기 출력 활성화 맵 픽셀에 대해 융합된 곱셈-덧셈 연산을 수행하도록 프로그래밍되는,
    CNN을 실행하기 위한 시스템.
  9. 제7 항에 있어서,
    상기 복수의 커널 타일들 및 상기 입력 활성화 맵 픽셀들의 복수의 클러스터들에 대해 상기 융합된 곱셈-덧셈 연산들을 타일 단위로 수행하기 위해, 상기 하드웨어 프로세서는, 반복적으로,
    각각의 출력 활성화 맵 픽셀에 대해,
    상기 출력 활성화 맵 픽셀의 값을 0의 값으로 설정하고, 그리고
    상기 복수의 커널 타일들의 각각의 커널 타일의 각각의 커널 러널에 대해,
    상기 각각의 커널 러널, 상기 커널 러널에 대응하는 적어도 하나의 입력 활성화 맵 픽셀 및 상기 출력 활성화 맵 픽셀, 및 상기 출력 활성화 맵 픽셀에 대해 융합된 곱셈-덧셈 연산을 수행하도록 프로그래밍되는,
    CNN을 실행하기 위한 시스템.
  10. 제9 항에 있어서,
    상기 적어도 하나의 입력 활성화 맵 픽셀은 2개의 입력 활성화 맵 픽셀들을 포함하는,
    CNN을 실행하기 위한 시스템.
  11. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 커널 러널의 비트 단위의 크기 및 상기 입력 활성화 맵 러널의 비트 단위의 크기는 동일한,
    CNN을 실행하기 위한 시스템.
  12. 제11 항에 있어서,
    상기 커널 러널의 비트 단위의 크기 및 상기 출력 활성화 맵 러널의 비트 단위의 크기는 동일한,
    CNN을 실행하기 위한 시스템.
  13. 제11 항에 있어서,
    상기 커널 러널의 비트 단위의 크기 및 상기 하드웨어 프로세서의 레지스터의 비트 단위의 크기는 동일한,
    CNN을 실행하기 위한 시스템.
  14. 제13 항에 있어서,
    상기 레지스터의 크기는 128 비트인,
    CNN을 실행하기 위한 시스템.
  15. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 하드웨어 프로세서는 단일 명령, 다중 데이터 프로세서(single instruction, multiple data processor)를 포함하는,
    CNN을 실행하기 위한 시스템.
  16. 제15 항에 있어서,
    상기 단일 명령, 다중 데이터 프로세서는 벡터 프로세서를 포함하는,
    CNN을 실행하기 위한 시스템.
  17. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 기본 커널 레이아웃의 상기 커널 스택의 커널들은 복수의 커널 스택 채널들에 배열되고,
    상기 복수의 커널 스택 채널들의 수 및 상기 입력 활성화 맵들의 수는 동일하고, 그리고
    커널 스택 채널의 커널들의 수 및 상기 출력 활성화 맵들의 수는 동일한,
    CNN을 실행하기 위한 시스템.
  18. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 커널 스택의 커널 스택 폭 및 상기 출력 활성화 맵들의 수는 동일한,
    CNN을 실행하기 위한 시스템.
  19. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 기본 커널 레이아웃의 상기 커널 스택의 커널들은 복수의 커널 스택 필터 뱅크들에 배열되고,
    상기 복수의 커널 스택 필터 뱅크들의 수 및 상기 출력 활성화 맵들의 수는 동일하고, 그리고
    커널 스택 필터 뱅크의 커널들의 수 및 상기 입력 활성화 맵들의 수는 동일한,
    CNN을 실행하기 위한 시스템.
  20. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 커널 스택의 커널 스택 높이 및 상기 입력 활성화 맵들의 수는 동일한,
    CNN을 실행하기 위한 시스템.
KR1020197012230A 2016-10-04 2017-10-03 콘볼루션 뉴럴 네트워크들을 위한 효율적인 데이터 레이아웃들 KR102216019B1 (ko)

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

Publications (2)

Publication Number Publication Date
KR20190062481A KR20190062481A (ko) 2019-06-05
KR102216019B1 true KR102216019B1 (ko) 2021-02-15

Family

ID=61758191

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197012230A KR102216019B1 (ko) 2016-10-04 2017-10-03 콘볼루션 뉴럴 네트워크들을 위한 효율적인 데이터 레이아웃들

Country Status (9)

Country Link
US (3) US10489680B2 (ko)
EP (1) EP3523751A4 (ko)
JP (3) JP6872011B2 (ko)
KR (1) KR102216019B1 (ko)
CN (2) CN110073359B (ko)
AU (2) AU2017338783B2 (ko)
CA (1) CA3038967A1 (ko)
IL (3) IL281321B (ko)
WO (1) WO2018067603A1 (ko)

Families Citing this family (109)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105120130B (zh) * 2015-09-17 2018-06-29 京东方科技集团股份有限公司 一种图像升频***、其训练方法及图像升频方法
JP7001672B2 (ja) 2016-07-14 2022-01-19 マジック リープ, インコーポレイテッド 虹彩識別のためのディープニューラルネットワーク
WO2018067603A1 (en) 2016-10-04 2018-04-12 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 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
CA3043352A1 (en) 2016-11-15 2018-05-24 Magic Leap, Inc. Deep learning system for cuboid detection
WO2018095994A1 (en) * 2016-11-22 2018-05-31 Delphinium Clinic Ltd. Method and system for classifying optic nerve head
AU2017370555B2 (en) 2016-12-05 2022-12-15 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
KR102302725B1 (ko) 2017-03-17 2021-09-14 매직 립, 인코포레이티드 룸 레이아웃 추정 방법들 및 기술들
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
CN107506350A (zh) * 2017-08-16 2017-12-22 京东方科技集团股份有限公司 一种识别信息的方法和设备
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
KR20200055704A (ko) 2017-09-20 2020-05-21 매직 립, 인코포레이티드 눈 추적을 위한 개인화된 뉴럴 네트워크
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
US11537895B2 (en) 2017-10-26 2022-12-27 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 京东方科技集团股份有限公司 图像分类和转换方法、装置以及图像处理***
US11715287B2 (en) 2017-11-18 2023-08-01 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
US11393251B2 (en) * 2018-02-09 2022-07-19 Pupil Labs Gmbh Devices, systems and methods for predicting gaze-related parameters
WO2019154511A1 (en) 2018-02-09 2019-08-15 Pupil Labs Gmbh Devices, systems and methods for predicting gaze-related parameters using a neural network
EP3750028B1 (en) 2018-02-09 2022-10-19 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
JP7046171B2 (ja) * 2018-05-15 2022-04-01 三菱電機株式会社 演算装置
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
US20190370644A1 (en) * 2018-06-04 2019-12-05 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
US20190392287A1 (en) 2018-06-22 2019-12-26 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 郑州云海信息技术有限公司 一种计算方法及计算装置
JP7020555B2 (ja) * 2018-08-07 2022-02-16 日本電気株式会社 情報処理装置、情報処理方法、及びプログラム
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
US10726073B2 (en) * 2018-10-26 2020-07-28 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
CN113892092A (zh) * 2019-02-06 2022-01-04 瀚博控股公司 卷积模型硬件加速器的方法和***
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 삼성전자주식회사 신경망의 커널들을 정렬하는 전자 장치 및 이의 동작 방법
CN112927174B (zh) * 2019-12-06 2024-05-03 阿里巴巴集团控股有限公司 一种图像处理,图像训练以通道混洗方法和装置
KR20210071471A (ko) 2019-12-06 2021-06-16 삼성전자주식회사 뉴럴 네트워크의 행렬 곱셈 연산을 수행하는 장치 및 방법
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 オムロン株式会社 処理装置、処理方法、およびプログラム
US11195080B1 (en) 2021-03-29 2021-12-07 SambaNova Systems, Inc. Lossless tiling in convolution networks—tiling configuration
US11250061B1 (en) 2021-03-29 2022-02-15 SambaNova Systems, Inc. Lossless tiling in convolution networks—read-modify-write in backward pass
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
US11227207B1 (en) * 2021-03-29 2022-01-18 SambaNova Systems, Inc. Lossless tiling in convolution networks—section boundaries
CN113313787B (zh) * 2021-05-31 2023-11-07 上海阵量智能科技有限公司 一种数据处理方法、装置、计算机设备和存储介质
EP4375667A1 (en) 2021-07-21 2024-05-29 FUJIFILM Corporation Test cartridge and method for manufacturing test strip
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

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160062947A1 (en) 2014-08-29 2016-03-03 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US20160162782A1 (en) 2014-12-09 2016-06-09 Samsung Electronics Co., Ltd. Convolution neural network training apparatus and method thereof
US20180315154A1 (en) 2017-04-27 2018-11-01 Apple Inc. Convolution engine for merging interleaved channel data

Family Cites Families (78)

* Cited by examiner, † Cited by third party
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
CN1650622B (zh) 2002-03-13 2012-09-05 图象公司 用于数字重新灌录或修改电影或其他图像序列数据的***和方法
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
US11428937B2 (en) 2005-10-07 2022-08-30 Percept Technologies Enhanced optical and perceptual digital eyewear
US8696113B2 (en) 2005-10-07 2014-04-15 Percept Technologies Inc. Enhanced optical and perceptual digital eyewear
US20070081123A1 (en) 2005-10-07 2007-04-12 Lewis Scott W 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
EP2257636A4 (en) * 2008-07-03 2014-10-15 Nec Lab America Inc EPITHELIAL LAYER DETECTOR AND RELATED METHODS
JP5376920B2 (ja) * 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US8768014B2 (en) 2009-01-14 2014-07-01 Indiana University Research And Technology Corp. 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
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
EP2656135B1 (en) 2010-12-24 2022-05-04 Magic Leap, Inc. Freeform waveguide prism
WO2012154620A2 (en) 2011-05-06 2012-11-15 Magic Leap, Inc. Massive simultaneous remote digital presence world
US10078620B2 (en) * 2011-05-27 2018-09-18 New York University Runtime reconfigurable dataflow processor with multi-port memory access module
WO2013049861A1 (en) 2011-09-29 2013-04-04 Magic Leap, Inc. Tactile glove for human-computer interaction
EP3258671B1 (en) 2011-10-28 2018-09-05 Magic Leap, Inc. System and method for augmented and virtual reality
BR112014012615A2 (pt) 2011-11-23 2017-06-13 Magic Leap Inc sistema de exibição de realidade aumentada e virtual tridimensional
NZ700887A (en) 2012-04-05 2016-11-25 Magic Leap Inc Wide-field of view (fov) imaging devices with active foveation capability
CN104737061B (zh) 2012-06-11 2018-01-16 奇跃公司 使用波导反射器阵列投射器的多深度平面三维显示器
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
US9262680B2 (en) 2012-07-31 2016-02-16 Japan Science And Technology Agency Point-of-gaze detection device, point-of-gaze detecting 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
US9740006B2 (en) 2012-09-11 2017-08-22 Magic Leap, Inc. Ergonomic head mounted display device and optical system
IL301489B1 (en) 2013-01-15 2024-04-01 Magic Leap Inc A system for scanning electromagnetic imaging radiation
EP2967322A4 (en) 2013-03-11 2017-02-08 Magic Leap, Inc. System and method for augmented and virtual reality
US9147154B2 (en) 2013-03-13 2015-09-29 Google Inc. Classifying resources using a deep network
KR20230113418A (ko) 2013-03-15 2023-07-28 매직 립, 인코포레이티드 디스플레이 시스템 및 방법
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 北京智谷睿拓技术服务有限公司 眼睛光学参数检测***及方法
CN105829953B (zh) 2013-10-16 2019-05-28 奇跃公司 具有可调节的瞳距的虚拟或增强现实头戴设备
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 奇跃公司 虚拟和增强现实***与方法
US10175478B2 (en) 2014-05-30 2019-01-08 Magic Leap, Inc. Methods and systems for generating virtual content display with a virtual or augmented reality apparatus
US9430829B2 (en) * 2014-01-30 2016-08-30 Case Western Reserve University Automatic detection of mitosis using handcrafted and convolutional neural network features
WO2015117043A1 (en) 2014-01-31 2015-08-06 Magic Leap, Inc. Multi-focal display system and method
NZ722903A (en) 2014-01-31 2020-05-29 Magic Leap Inc Multi-focal display system and method
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 株式会社デンソー 演算処理装置
US9373059B1 (en) * 2014-05-05 2016-06-21 Atomwise Inc. Systems and methods for applying a convolutional network to spatial data
CN106537290B (zh) 2014-05-09 2019-08-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
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
CN105917354A (zh) 2014-10-09 2016-08-31 微软技术许可有限责任公司 用于图像处理的空间金字塔池化网络
US9530071B2 (en) 2014-10-10 2016-12-27 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
USD758367S1 (en) 2015-05-14 2016-06-07 Magic Leap, Inc. Virtual reality headset
CN112836664A (zh) 2015-08-21 2021-05-25 奇跃公司 使用眼睛姿态测量的眼睑形状估计
WO2018013199A1 (en) 2016-07-14 2018-01-18 Magic Leap, Inc. Iris boundary estimation using cornea curvature
JP7001672B2 (ja) 2016-07-14 2022-01-19 マジック リープ, インコーポレイテッド 虹彩識別のためのディープニューラルネットワーク
WO2018067603A1 (en) 2016-10-04 2018-04-12 Magic Leap, Inc. Efficient data layouts for convolutional neural networks
KR102034659B1 (ko) * 2017-07-31 2019-10-21 서울대학교산학협력단 컨볼루션 뉴럴 네트워크를 위한 하드웨어 가속기 및 컨볼루션 연산량 감소 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160062947A1 (en) 2014-08-29 2016-03-03 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US20160162782A1 (en) 2014-12-09 2016-06-09 Samsung Electronics Co., Ltd. Convolution neural network training apparatus and method thereof
US20180315154A1 (en) 2017-04-27 2018-11-01 Apple Inc. Convolution engine for merging interleaved channel data

Also Published As

Publication number Publication date
US20180096226A1 (en) 2018-04-05
CN110073359B (zh) 2023-04-04
AU2017338783B2 (en) 2022-02-10
CA3038967A1 (en) 2018-04-12
JP2019535079A (ja) 2019-12-05
IL281321A (en) 2021-04-29
IL265720A (en) 2019-05-30
WO2018067603A1 (en) 2018-04-12
US20220076056A1 (en) 2022-03-10
CN116343319A (zh) 2023-06-27
US11720800B2 (en) 2023-08-08
IL293688A (en) 2022-08-01
EP3523751A4 (en) 2020-05-06
JP7146999B2 (ja) 2022-10-04
CN110073359A (zh) 2019-07-30
AU2022202762A1 (en) 2022-05-19
US10489680B2 (en) 2019-11-26
IL281321B (en) 2022-07-01
JP2022171926A (ja) 2022-11-11
JP2021120871A (ja) 2021-08-19
JP7431913B2 (ja) 2024-02-15
IL293688B1 (en) 2023-10-01
IL265720B (en) 2021-03-25
JP6872011B2 (ja) 2021-05-19
AU2017338783A1 (en) 2019-04-18
US11182645B2 (en) 2021-11-23
KR20190062481A (ko) 2019-06-05
IL293688B2 (en) 2024-02-01
EP3523751A1 (en) 2019-08-14
US20200082215A1 (en) 2020-03-12

Similar Documents

Publication Publication Date Title
KR102216019B1 (ko) 콘볼루션 뉴럴 네트워크들을 위한 효율적인 데이터 레이아웃들
JP7132824B2 (ja) ニューラルネットワークにおいてデコンボルーション演算を実行する装置及びその方法
JP7385681B2 (ja) 手姿勢推定
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
TWI775605B (zh) 深度視覺處理器
CN112840356A (zh) 运算加速器、处理方法及相关设备
KR20180107869A (ko) 머신 러닝을 수행하는 전자 장치 및 머신 러닝 수행 방법
US11836971B2 (en) Method and device with convolution neural network processing
CA2929403C (en) Multi-dimensional sliding window operation for a vector processor
US11120328B1 (en) Systems and methods for reducing power consumption of convolution operations for artificial neural networks
KR20200095300A (ko) 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
CN111133457A (zh) 电子设备及其控制方法
CN109447239B (zh) 一种基于arm的嵌入式卷积神经网络加速方法
US12014505B2 (en) Method and apparatus with convolution neural network processing using shared operand
KR20210082970A (ko) 컨볼루션 연산을 수행하는 방법 및 장치

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant