KR102275499B1 - 컨볼루션 신경망에서 컨볼루션 층들의 연산을 수행하기 위한 방법 및 장치 - Google Patents

컨볼루션 신경망에서 컨볼루션 층들의 연산을 수행하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR102275499B1
KR102275499B1 KR1020180149479A KR20180149479A KR102275499B1 KR 102275499 B1 KR102275499 B1 KR 102275499B1 KR 1020180149479 A KR1020180149479 A KR 1020180149479A KR 20180149479 A KR20180149479 A KR 20180149479A KR 102275499 B1 KR102275499 B1 KR 102275499B1
Authority
KR
South Korea
Prior art keywords
folded
dimension
feature data
convolutional
kernel
Prior art date
Application number
KR1020180149479A
Other languages
English (en)
Other versions
KR20190062304A (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 KR20190062304A publication Critical patent/KR20190062304A/ko
Application granted granted Critical
Publication of KR102275499B1 publication Critical patent/KR102275499B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • 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
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/501Half or full adders, i.e. basic adder cells for one denomination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • G06N20/10Machine learning using kernel methods, e.g. support vector machines [SVM]
    • 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/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Complex Calculations (AREA)
  • Error Detection And Correction (AREA)
  • Image Analysis (AREA)
  • Apparatus For Radiation Diagnosis (AREA)
  • Image Processing (AREA)

Abstract

본 발명은 컨볼루션 신경망에서 컨볼루션 층의 연산을 수행하기 위한 방법 및 장치에 관한 것이다. 이러한 방법은 DRAM으로부터 최초의 컨볼루션 커널과 컨볼루션 층에 제공된 펼쳐진 특징 데이터를 판독하는 단계; 상기 폴드된 특징 데이터를 발생시키기 위해, 폭과 높이의 적어도 하나의 치수에서 폴드되지 않은 특징 데이터를 폴드하는 단계; 폴드된 특징 데이터와 최초의 컨볼루션 커널을 사전 처리하는 단계; 사전 처리된 폴드된 특징 데이터를 SRAM 내에 저장하는 단계; 상기 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 적어도 하나의 치수에서 사전 처리된 최초의 컨볼루션 커널을 폴드하는 단계; 상기 SRAM에 상기 하나 이상의 폴드된 컨볼루션 커널들을 저장하는 단계; 및 상기 하나 이상의 폴드된 컨볼루션 커널들을 가지고 상기 사전 처리된 폴드된 특징 데이터를 컨볼브하기 위한 계산 유닛 내로, 상기 사전 처리된 폴드된 특징 데이터와 상기 SRAM으로부터의 상기 하나 이상의 폴드된 컨볼루션 커널들을 판독하는 단계를 포함한다. 본 발명의 실시예들에 따른 방법 및/또는 장치에 의해, 채널 활용이 향상될 수 있고, 캐시 점유가 감소될 수 있으며, 연산 효율이 향상될 수 있다.

Description

컨볼루션 신경망에서 컨볼루션 층들의 연산을 수행하기 위한 방법 및 장치{METHOD AND APPARATUS FOR PERFORMING OPERATION OF CONVOLUTIONAL LAYERS IN CONVOLUTIONAL NEURAL NETWORK}
본 발명은 일반적으로 컨볼루션 신경망의 기술 분야에 관한 것으로, 더 구체적으로는 컨볼루션 신경망에서의 컨볼루션 층의 연산을 수행하기 위한 방법 및 장치에 관한 것이다.
컨볼루션 신경망에 근거한 딥 러닝(deep learning) 기술들은 화상 인식, 비디오 분석, 자연어(natural language) 처리, 보조 운전 등과 같은 다양한 분야에서 이미 널리 사용되어 왔다. 이러한 컨볼루션 신경망은 보통 연산 집약적이고(operation intensive), 그러한 컨볼루션 신경망에서의 연산들은 범용의(general purpose) 중앙 처리기(CPU), GPU(graphics processor), 또는 전용 가속기(accelerator) 등과 같은 하드웨어를 사용함으로써 효율적으로 수행될 수 있는 것이 바람직하다.
일 양태에서, 컨볼루션 신경망에서의 컨볼루션 층의 연산을 수행하기 위한 방법이 개시된다.
이러한 방법은 상기 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터와 상기 컨볼루션 층의 최초의 컨볼루션 커널을 DRAM(dynamic random access memory)으로부터 판독하는 단계; 폴드된 특징 데이터를 발생시키기 위해, 폭과 높이의 적어도 하나의 치수(dimension)에서 폴드되지 않은 특징 데이터를 폴드하는 단계; 상기 폴드된 특징 데이터와 상기 최초의 컨볼루션 커널을 사전 처리하는 단계; 사전 처리된 폴드된 특징 데이터를 SRAM(static random-access memory)에 저장하는 단계; 상기 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 적어도 하나의 치수에서 사전 처리된 최초의 컨볼루션 커널을 폴드하는 단계; 상기 하나 이상의 폴드된 컨볼루션 커널들을 상기 SRAM에 저장하는 단계; 및 발생된 하나 이상의 폴드된 컨볼루션 커널들을 사용하여 사전 처리된 폴드된 특징 데이터를 컨볼브(convolve)하기 위한 계산 유닛에 상기 SRAM으로부터 사전 처리된 폴드된 특징 데이터와 하나 이상의 폴드된 컨볼루션 커널들을 판독하는 단계를 포함한다.
또 다른 양태에서는, 컨볼루션 신경망에서의 컨볼루션 층에서 연산을 수행하기 위한 장치가 또한 개시되고, 이러한 장치는 명령어들을 실행하도록 구성된 하나 이상의 프로세서를 포함하며, 이러한 명령어들을 실행하는 것은 하나 이상의 프로세서로 하여금 다음 단계들, 즉 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터와 상기 컨볼루션 층의 최초의 컨볼루션 커널을 DRAM으로부터 판독하는 단계; 폴드된 특징 데이터를 발생시키기 위해 폭과 높이 중 적어도 하나의 치수에서 폴드되지 않은 특징 데이터를 폴드하는 단계; 폴드된 특징 데이터와 최초의 컨볼루션 커널을 사전 처리하는 단계; 사전 처리된 폴드된 특징 데이터를 SRAM에 저장하는 단계; 상기 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 적어도 하나의 치수에서 사전 처리된 최초의 컨볼루션 커널을 폴드하는 단계; 상기 하나 이상의 폴드된 컨볼루션 커널들을 상기 SRAM에 저장하는 단계; 및 발생된 하나 이상의 폴드된 컨볼루션 커널들을 사용하여 사전 처리된 폴드된 특징 데이터를 컨볼브(convolve)하기 위한 계산 유닛에 상기 SRAM으로부터 사전 처리된 폴드된 특징 데이터와 하나 이상의 폴드된 컨볼루션 커널들을 판독하는 단계를 수행하게 한다.
또 다른 양태에서는, 컨볼루션 신경망에서 컨볼루션 층의 연산을 수행하기 위한 장치가 또 개시되고, 이러한 장치는 폴드된 특징 데이터를 발생시키기 위해 폭과 높이 중 적어도 하나의 치수에서 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터를 폴드하도록 구성된 제1 폴딩(folding) 유닛; 폴드된 특징 데이터와, 컨볼루션 층의 최초의 컨볼루션 커널을 사전 처리하도록 구성된 사전 처리 유닛; 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해 적어도 하나의 치수에서 사전 처리된 최초의 컨볼루션 커널을 폴드하도록 구성된 제2 폴딩 유닛; 및 하나 이상의 폴드된 컨볼루션 커널들을 사용하여 사전 처리된 폴드된 특징 데이터를 컨볼브하도록 구성된 산술 연산(arithmetic) 유닛을 포함한다.
또, 본 발명은 프로그램 명령어들을 저장한 비일시적 저장 매체를 제공하는데, 이러한 프로그램 명령어들은 계산 디바이스에 의해 실행될 때 다음 단계들, 즉 즉 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터와 상기 컨볼루션 층의 최초의 컨볼루션 커널을 DRAM으로부터 판독하는 단계; 폴드된 특징 데이터를 발생시키기 위해 폭과 높이 중 적어도 하나의 치수에서 폴드되지 않은 특징 데이터를 폴드하는 단계; 폴드된 특징 데이터와 최초의 컨볼루션 커널을 사전 처리하는 단계; 사전 처리된 폴드된 특징 데이터를 SRAM에 저장하는 단계; 상기 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 적어도 하나의 치수에서 사전 처리된 최초의 컨볼루션 커널을 폴드하는 단계; 상기 하나 이상의 폴드된 컨볼루션 커널들을 상기 SRAM에 저장하는 단계; 및 발생된 하나 이상의 폴드된 컨볼루션 커널들을 사용하여 사전 처리된 폴드된 특징 데이터를 컨볼브하기 위한 계산 유닛에 상기 SRAM으로부터 사전 처리된 폴드된 특징 데이터와 하나 이상의 폴드된 컨볼루션 커널들을 판독하는 단계를 실행하기 위한 것이다.
본 발명의 실시예들에 따른 방법 및/또는 장치에 의해, 채널 활용이 개선될 수 있고, 캐시 점유(occupancy)가 감소될 수 있으며, 연산 효율이 개선될 수 있다.
도 1은 본 발명의 일 실시예에 따라서 컨볼루션 신경망에서의 컨볼루션 층에서의 연산을 수행하기 위한 방법의 흐름도를 예시하는 도면.
도 2는 본 발명의 일 실시예에 따라서 1개의 치수(dimension)로 나타낸, 폴드되지 않은 특징 데이터를 폴드하는 일 예를 예시하는 도면.
도 3은 본 발명의 일 실시예에 따라서 2개의 치수로 나타낸, 폴드되지 않은 특징 데이터를 폴드하는 일 예를 예시하는 도면.
도 4는 본 발명의 일 실시예에 따라서 폴드된 특징 데이터와 최초의 컨볼루션 커널을 사전 처리하는 일 예를 예시하는 도면.
도 5는 본 발명의 일 실시예에 따라서 1개의 치수로 나타낸 사전 처리된 최초의 컨볼루션 커널을 폴드하는 일 예를 예시하는 도면.
도 6은 본 발명의 일 실시예에 따라서 2개의 치수로 나타낸 사전 처리된 최초의 컨볼루션 커널을 폴드하는 일 예를 예시하는 도면.
도 7은 본 발명의 일 실시예에 따라서 컨볼브하는 일 예를 예시하는 도면.
도 8은 본 발명의 일 실시예에 따라서 컨볼브하는 일 예를 예시하는 도면.
도 9는 본 발명의 일 실시예에 따라서 컨볼루션 신경망에서의 컨볼루션 층의 연산을 수행하기 위한 장치의 일 예를 예시하는 도면.
도 10은 본 발명의 일 실시예에 따라서 컨볼루션 신경망에서의 컨볼루션 층의 연산을 수행하기 위한 장치의 일 예를 예시하는 도면.
도 11은 본 발명의 일 실시예에 따라서 폴드된 특징 데이터에 대한 컨볼루션 층의 연산을 수행하기 위한 장치의 일 예를 도시하는 도면.
도 12a 및 도 12b는 특징 데이터가 어떻게 정적 RAM(random access memory)에 저장되는지의 예를 보여주는 도면들.
컨볼루션 신경망에 제공된 특징 데이터는 폭, 높이, 깊이 등과 같은 복수의 치수(즉, 상이한 채널들)를 가지는 데이터 큐브(cube)로서 간주될 수 있고, 특징 데이터에서의 각각의 단일(single) 데이터는 데이터 큐브에서의 1개의 점(point)에 대응할 수 있다. 컨볼루션 신경망에서의 컨볼루션 연산을 위한 가중치(weight parameter)들을 포함하는 각각의 컨볼루션 커널 또한 데이터 큐브로서 간주될 수 있다.
보통 "슬라이스(slice)"라는 용어가 데이터 큐브를 설명할 때 사용된다. 데이터 큐브의 3개의 치수가 3차원 직교 좌표계(cartesian coordinate system)에서 각각 X축, Y축, 및 Z축에 의해 표현된 치수에 대응하는 것으로 고려될 때, X축에 의해 표현된 치수에 대응하는 제1 치수에서의 데이터 큐브의 슬라이스가 X축에 직교하는 평면을 사용하여 데이터 큐브에서 데이터를 샘플링함으로써 얻어진 결과를 나타내고, 이는 Y축과 Z축에 의해 표시된 2차원 평면에서의 직사각형 데이터(rectangular data)이다. 공식에 따라 쓰여지면, 만약 데이터 큐브가 포인트들의 세트(set), 즉 Cube = {(x,y,z)|x∈[0,W), y∈[0,H), z∈[0,D)}로서 간주되고, 이 경우 W, H 및 D가 0보다 큰 정수이라면, X축에 의해 표시된 치수에 대응하는 제1 치수에서의 데이터 큐브의 슬라이스는 Slicei={(y,z)|(x=i, y∈[0,H), x∈[0,D)}로서 나타내어질 수 있고, 이 경우 i∈[0,W)이다. 모든 데이터가 0인(또는 0과 등가인) 슬라이스는 0(zero) 슬라이스라고 불릴 수 있다.
게다가, "화소(pixel)"라는 용어가 또한 데이터 큐브를 묘사하기 위해 흔히 사용된다. 데이터 큐브의 화소는 동일한 폭(X)과 높이(Y) 좌표를 가지는 데이터 큐브에서의 포인트들을 포함하고, Pixelij={(z)|x=i, y=j, z∈[0,D)}로서 나타내어질 수 있으며, 이 경우 i∈[0,W)이고, j∈[0,H)이다. 보는 바와 같이, 하나의 슬라이스는 복수의 화소를 포함할 수 있다.
이 점에서, 편의를 위해, 특징 데이터 또는 특정 치수로 나타낸 컨볼루션 커널의 데이터를 묘사할 때 "슬라이스"라는 용어가 또한 사용되고, 예를 들면 폭 치수에서의 슬라이스{짧게 "폭 슬라이스(width slice)"라고도 한다}, 높이 치수에서의 슬라이스{짧게 "높이 슬라이스(height slice)"라고도 한다} 등과 같이, 특징 데이터 또는 컨볼루션 커널에서의 특정 치수의 데이터를 묘사할 때도 사용된다.
이 점에서, 데이터 큐브(A)의 제1 치수(예컨대, 폭 치수)에서 하나 이상의 제로(zero) 슬라이스를 패드(pad) 또는 어펜드(append)할 때, 그것은 데이터 큐브(A)의 제1 치수의 치수 값(예컨대, 폭)이 데이터 큐브(A)의 제1 치수에서의 특정 경계선(예컨대, 폭 치수에서의 좌측 또는 우측)에서의 하나 이상의 제로 슬라이스를 더함으로써 증가되는 것을 의미할 수 있고, 이 경우 각각의 더해진 제로 슬라이스는 나머지 2개의 치수(예컨대, 높이 치수와 깊이 치수)에서의 최초 데이터 큐브(A)와 동일한 치수 값(예컨대, 높이 값과 깊이 값)을 가진다.
이 점에서, 데이터 큐브(A)의 제1 치수와 제2 치수(예컨대, 폭 치수와 높이 치수 모두)에서 하나 이상의 제로 슬라이스를 패드 또는 어펜드할 때, 그것은 데이터 큐브(A)의 제1 치수(예컨대, 폭 치수에서의 좌측 또는 우측)에서의 특정 경계선에서 하나 이상의 제로 슬라이스를 더함으로써, 데이터 큐브(A)의 제1 치수의 치수 값(예컨대, 폭)이 증가되고, 각각의 더해진 제로 슬라이스는 나머지 2개의 치수(예컨대, 높이 치수와 깊이 치수 모두)에서의 최초 데이터 큐브의 것들과 같은 치수 값들(예컨대, 높이 값과 깊이 값)을 가지며, 그럴 경우 데이터 큐브(A')의 제2 치수 값(높이와 같은)을 증가시키기 위해, 폭 치수를 증가시키는 것으로부터 생기는 데이터 큐브(A')의 제2 치수에서의 특정 경계선(예컨대, 높이 치수에서의 상부측 또는 하부 측)에서 하나 이상의 제로 슬라이스가 더해지고, 각각의 더해진 제로 슬라이스는 나머지 2개의 치수(예컨대, 폭 치수와 깊이 치수 모두)에서의 데이터 큐브(A')의 것들과 동일한 치수 값들(예컨대, 폭 값과 깊이 값)을 가진다는 것을 의미할 수 있다.
이 점에서, 데이터 큐브(A)의 각각의 슬라이스가 깊이에 있어서 정렬되는 것으로 언급될 때, 그것은 데이터 큐브(A)의 더해진 슬라이스들이 바라는 깊이 값을 각각 가지도록, 깊이에 있어서 제로(0)(또는 제로과 동등한 값)가 바라는 깊이 값 없이 데이터 큐브(A)의 슬라이스(예컨대, 폭 슬라이스 또는 높이 슬라이스)에 더해진다는 것을 의미할 수 있다.
이 점에서, 패드하는 것이 데이터 큐브(A)의 제1 치수 및/또는 제2 치수에서 수행될 때, 패드가 된 제로 슬라이스들의 개수는 달리 특정되지 않는 한, 0 또는 1 또는 그 이상일 수 있다.
컨볼루션 신경망은 보통 연산 집약적이고, 범용 중앙 처리기, 그래픽 처리기, 또는 전용 가속기 등과 같은 하드웨어를 사용함으로써 컨볼루션 신경망에서 연산들을 효율적으로 수행하는 것이 바람직하다. 연산 효율을 향상시키는 것 및/또는 하드웨어 설계를 단순화하기 위해서는, 예를 들면 컨볼루션 연산을 수행하는 덧셈기 및/또는 곱셈기에 데이터를 제공하도록 멀티-채널(multi-channel) 메모리가 설계될 수 있거나, 산술 연산 유닛이 멀티-채널 연산을 지원하기 위해 설계될 수 있다.
일반적으로, 컨볼루션 신경망의 입력층에 제공된 특징 데이터는 소수의 채널(보통 3개의 채널 또는 단지 1개의 채널)을 가질 수 있고, 피드포워드(feedforward) 추론(reasoning) 방향에서 비교적 앞서는(preceding) 컨볼루션 신경망의 컨볼루션 층으로의 입력 특징 데이터가 또한 소수의 채널을 가질 수 있다. 채널들을 정렬하기 위해, 깊이 치수 또는 채널 치수에서 특징 데이터와 대응하는 컨볼루션 커널에 제로 슬라이스들이 더해져서, 캐시 및/또는 곱셈기와 같은 하드웨어의 낮은 자원(resource) 활용과 많은 쓸모없는 연산들을 야기할 수 있다.
도 1은 본 발명의 일 실시예에 따라서 컨볼루션 신경망에서의 컨볼루션 층의 연산을 수행하기 위한 전형적인 방법(100)을 예시하고, 이러한 방법은:
폴드된(folded) 특징 데이터를 발생시키기 위해, 폭 치수와 높이 치수 중 적어도 하나에서 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터를 폴드하는 단계(S101);
컨볼루션 층의 최초 컨볼루션 커널과 폴드된 특징 데이터를 사전 처리하는 단계(S105);
최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 사전 처리된 최초의 컨볼루션 커널을 폴드하는 단계(S110); 및
발생된 하나 이상의 폴드된 컨볼루션 커널을 사용하여 사전 처리된 폴드된 특징 데이터를 컨볼브하는 단계(S115)를 포함한다.
본 발명의 일 실시예에 따른 방법에 의해, 적어도 하드웨어 설계가 단순화될 수 있고, 채널 또는 하드웨어 자원들의 활용이 개선될 수 있고/있거나, 연산들의 유사성(parallelism)이 개선될 수 있다.
도 1에 도시된 것처럼, 본 발명의 일 실시예에 따라서 컨볼루션 신경망에서 컨볼루션 층의 연산을 수행하기 위한 전형적인 방법(100)은, 폭과 높이의 적어도 하나의 치수에서 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터를 폴드하는 단계(S101)에서 시작할 수 있다.
일 실시예에서, 치수(D1)에서 폴드되지 않은 최초의 특징 데이터(FD)의 (ifx×NX×jfx)번째 슬라이스에서의 모든 CX개의 채널들의 데이터가 치수(D1)에서의 FD'의 (ifx)번째 슬라이스에서의 (jfx×CX)번째 채널로부터 시작하는 연속적인 CX개의 채널들의 데이터에 대응하도록, 깊이에서 함께 치수(D1)에서의 폴드되지 않은 최초 특징 데이터(FD)의 모든 NX개의(이 경우에는 치수(D1)에서의 스플라이싱의 개수라고도 부르고, 상황이 명확한 경우에는 짧게 스플라이싱 개수라고 부른다) 연속적인 슬라이스들을 스플라이스함으로써 FD'를 발생시키기 위해, 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터(FD)가 폭과 높이의 1개의 치수(D1)에서 폴드될 수 있고, 이 경우 NX는 1보다 큰 정수이며, ifx는 0 이상인 정수이고, jfx는 0 이상 NX 미만인 정수이며, CX는 0보다 큰 정수이다.
또 다른 실시예에서는, FD'를 얻은 후, 치수(D2)에서 FD'의 (ify×Ny×jfy)번째 슬라이스에서의 모든 Cy개의 채널들의 데이터가 치수(D2)에서 FD"의 (ify)번째 슬라이스에서의 (jfy×Cy)번째 채널로부터 시작하는 연속적인 Cy개의 채널들의 데이터에 대응하도록, 깊이에서 함께 치수(D2)에서 FD'의 모든 Ny개의(이 경우에는 치수(D2)에서의 스플라이싱의 개수라고도 부르고, 상황이 명확한 경우에는 짧게 스플라이싱 개수라고 부른다) 연속적인 슬라이스들을 스플라이스함으로써 FD"을 발생시키기 위해 폭과 높이의 다른 치수(D2)에서 FD'이 폴드되고, 이 경우 Ny는 1보다 큰 정수이며, ify는 0 이상인 정수이고, jfy는 0 이상 Ny 미만인 정수이며, Cy는 0보다 큰 정수이다.
도 2는 폭에서 컨볼루션 층에 제공된 폭(6), 높이(5), 및 깊이(3)를 갖는 최초 특징 데이터(FD)를 폴드하는 일 예를 보여준다. 도 2에서, 각각의 작은 큐브는 폴드되지 않은 특징 데이터(FD)에서의 하나의 데이터 값을 표시한다(예컨대, RGB 이미지에서의 하나의 컬러의 화소 값). 각각의 작은 큐브의 전면(front surface)에는 "x, y"의 형태로 된 폭 치수 및 높이 치수에서의 좌표 값들이 표시되어 있고, 측면(side surface)에는 특징 데이터(FD)에서 작은 큐브에 의해 나타낸 데이터 값의 채널 번호가 표시되어 있다. 예를 들면, 작은 큐브의 전면 상의 라벨인 "1.1"은 특징 데이터(FD)에서의 높이 치수에서는 제1 행(row)에 그리고 특징 데이터(FD)에서의 폭 치수에서는 제1 열(column)에 작은 큐브가 위치한다는 것을 가리킨다. 또, 작은 큐브의 측면 상의 라벨 "1"은 특징 데이터(FD)에서 깊이(또는 채널) 치수에서 제1 레벨에 작은 큐브가 위치한다는 것을 가리킨다. 작은 큐브들 모두는 폴드되지 않은 특징 데이터(FD)를 구성하고, 폴드되지 않은 특징 데이터(FD)는 6개의 폭 슬라이스, 즉 특징 데이터(FD)의 제1 열에서의 모든 작은 큐브들(y=1), 특징 데이터(FD)의 제2 열에서의 모든 작은 큐브들(y=2), 특징 데이터(FD)의 제3 열에서의 모든 작은 큐브들(y=3), 특징 데이터(FD)의 제4 열에서의 모든 작은 큐브들(y=4), 특징 데이터(FD)의 제5 열에서의 모든 작은 큐브들(y=5), 및 특징 데이터(FD)의 제6 열에서의 모든 작은 큐브들(y=6)을 담고 있다.
도 2의 예에서는, 폴드된 폭 특징 데이터(FD')를 발생시키기 위해, 특징 데이터(FD)가 폴드되도록, 제1 열의 폭 슬라이스의 엔딩(ending)까지 깊이에서 제2 열의 폭 슬라이스를 스플라이스하고, 제3 열의 폭 슬라이스의 엔딩까지 깊이에서 제4 열의 폭 슬라이스를 스플라이스하며, 제5 열의 폭 슬라이스의 엔딩까지 깊이에서 제6 열의 폭 슬라이스를 스플라이스함으로써, 깊이 치수에서 함께 폭 치수에서 특징 데이터(FD)의 모든 2개의 슬라이스(Nx=2)가 스플라이스된다. 도 2에 도시된 것처럼, 예를 들면, 특징 데이터(FD)에서의 제2 열의 폭 슬라이스에서의 데이터는 특징 데이터(FD')에서의 제1 열의 폭 슬라이스에서의 제6 채널까지의 제4 채널에서의 데이터에 대응한다.
도 2에 도시된 것처럼, 특징 데이터(FD)와 비교해서, 특징 데이터(FD')의 높이는 변경되지 않지만, 그 폭은 감소하고, 그 깊이는 2배가 됨으로써, 채널의 활용 증가가 허용될 수 있고, 적어도 폭에 있어서의 연산의 양이 감소한다.
이 점에서, 도 2에 도시된 것처럼, 특징 데이터를 폴드함으로써 발생된 이미지에서의 각각의 작은 큐브는 다시 번호가 매겨지지 않는데, 이는 폴드된 특징 데이터(아래에서 설명된 컨볼루션 커널뿐만 아니라)와 폴드되지 않은 특징 데이터에서의 슬라이스들 사이의 대응 관계를 명확히 묘사하기 위해서이다. 게다가, 상황상 명확하다면, 특징 데이터(그리고 아래에서 설명된 컨볼루션 커널)에서의 작은 큐브들은 도시되지 않을 수 있고, 1개의 슬라이스를 표시하기 위해 평면(plane)이 사용될 수 있다. 예를 들면, 폭, 높이, 및 깊이의 3개의 치수가 3차원 직교 좌표계에서의 X축, Y축, 및 Z축에 각각 대응한다면, X축에 수직인 평면이 특징 데이터(또는 아래에서 설명된 컨볼루션 커널)의 폭 슬라이스를 표시하기 위해 사용될 수 있다.
도 3은 도 2의 폭 폴드된 특징 데이터(FD')가 깊이에 있어서 더 폴드되는 일 예를 보여준다. 도 3의 예에서, 특징 데이터(FD')가 높이 폴드된 특징 데이터(FD")를 발생시키기 위해 높이에서 폴드되도록, 높이에서의 FD'의 제2 슬라이스(Ny=2)는, 제 행의 높이 슬라이스의 엔딩까지 깊이에서 제2 행의 높이 슬라이스를 스플라이스하고, 제3 행의 높이 슬라이스의 엔딩까지 깊이에서 제4 행의 높이 슬라이스를 스플라이스함으로써, 깊이에서 함께 스플라이스된다. 도 3에 도시된 것처럼, 예를 들면 폭 폴드된 특징 데이터(FD')에서의 제4 열의 높이 슬라이스에서의 데이터는 높이 폴드된 특징 데이터(FD")의 제2 행의 폭 슬라이스에서 제7 번째 채널 내지 제12 번째 채널에서의 데이터에 대응한다.
도 3에 도시된 것처럼, 폴드하는 동안에, 폭 폴드된 특징 데이터(FD')에서의 어떠한 추가 높이 슬라이스도 제5 행의 높이 슬라이스의 뒤쪽(rear)으로 스플라이스될 수 없는데, 즉 높이 폴드된 특징 데이터(FD")에서의 각각의 발생된 높이 슬라이스가 깊이에서(또는 채널) 정렬되지 않도록, 폭 폴드된 특징 데이터(FD')에서 제5 행의 높이 슬라이스를 가지고, FD'에서의 어떠한 추가 높이 슬라이스도 깊이에서 스플라이스될 수 없다.
그러한 경우, 일 실시예에서 폭 폴드된 특징 데이터(FD')에서의 높이 슬라이스들의 총 개수(즉, 폭 폴드된 특징 데이터(FD')의 높이)는 폴드되기 전에 체크될 수 있고, 만약 그러한 총 개수가 Ny의 정수배가 아니라면, 폭 폴드된 특징 데이터(FD')에서의 높이 슬라이스들의 총 개수가 Ny의 정수배가 되도록, 폭 폴드된 특징 데이터(FD')(도 3에서는 미도시)의 하부 측(즉, 높이에서의 엔딩 경계선에서)에 하나 이상의 제로 슬라이스가 먼저 덧붙여질 수 있다. 덧붙여진 제로 슬라이스들의 개수는 슬라이싱 시간들(times)보다 더 작을 수 있다.
다른 실시예에서는 폴드하는 동안에 폭 폴드된 특징 데이터(FD')(즉, 제5 행의 슬라이스)에서의 마지막 높이 슬라이스에 대해서는, 그것이 여전히 슬라이스에 기초한 깊이에서 스플라이스될 필요가 있는지가 결정될 수 있다. 만약 그렇다면, 예를 들어 폭 폴드된 특징 데이터(FD')에서의 제5 행의 슬라이스와 같은 슬라이스에 대해서는, 추가적인 하나 이상의 제로 슬라이스(도 3에서의 높이 폴드된 특징 데이터(FD")에서의 각각의 도트된(dotted) 큐브(A)들에 의해 표시된 슬라이스들과 같은)가 그러한 슬라이스를 가지고 깊이에서 스플라이스하기 위해 계속해서 사용될 수 있다.
다른 실시예들에서는, 추가된 높이 폴드된 특징 데이터(FD")에서 각각의 높이 슬라이스의 채널들이 정렬되도록, 추가적인 하나 이상의 제로 슬라이스(도 3에서 높이 폴드된 특징 데이터(FD")에서의 각각의 도트된 큐브(A)들에 의해 표시된 슬라이스들과 같은)가 높이 폴드된 특징 데이터(FD")에 추가될 수 있다.
다른 실시예들에서, 하드웨어(산술 연산 유닛 또는 메모리 지원 멀티-채널과 같은)의 특성 또는 처리 용량(capacity)이 직접적으로 사용될 수 있다. 예를 들면, 만약 어떤 하드웨어가 채널들을 정렬하는 능력을 가질 수 있다면, 실제 데이터에 의해 점유되지 않은 채널이 그러한 하드웨어에 의해 제로 값을 가지는 것으로 자동적으로 간주될 수 있다. 그러한 경우, 높이 폴드된 특징 데이터(FD")에서의 각각의 슬라이스의 채널들은 그러한 하드웨어에 의해 자동적으로 정렬된다. 예를 들면, 만약 그러한 하드웨어가 동시에 32개의 채널을 지원한다면, 높이 폴드된 특징 데이터(FD")에서의 채널들의 개수는 그러한 하드웨어에 의해 32개의 채널들로서 자동적으로 정렬될 수 있다.
폭에서의 폴딩에 대해서는, 비록 도 2에는 도시되어 있지 않지만, 폴드된 특징 데이터에서의 마지막 폭 슬라이스의 채널들의 개수와 다른 폭 슬라이스들의 채널들의 개수 사이에 불일치하는 것이 또한 가능하다는 점이 주목되어야 한다. 폭에 있어서 도 3의 예에서 특징 데이터(FD' 및/또는 FD")에 대한 처리와 비슷하게, 최종적으로 얻어진 폴드된 특징 데이터에서의 각각의 폭 슬라이스의 채널들이 정렬되도록, 패드된 폴드되지 않은 특징 데이터 또는 얻어진 폴드된 특징 데이터가 폴딩(folding) 전 또는 폴딩 동안에 또는 폴딩 후에 처리될 수 있거나, 하드웨어의 특성에 의해 자동적으로 처리될 수 있다.
또, 비록 도 2가 다른 실시예들에서 도 3에 예시된 FD"를 얻기 위해 높이에서 폴드되는 FD'를 얻기 위해 FD가 폭에서 폴드되는 것을 예시하지만, 그러한 FD는 높이에서 폴드될 수 있고, 그런 다음 폭에서 폴드될 수 있거나, 폭에서만 또는 높이에서만 폴드될 수 있다.
또, 본 발명의 일 실시예에 따른 방법은 도 2에 도시된 Nx 값에 및/또는 도 3에 도시된 Ny 값에 국한되지 않는다. 스플라이싱의 개수(Nx 또는 Ny)는 3, 4이거나 1보다 큰 다른 정수일 수 있다. 일 실시예에서, 폭 폴딩 또는 높이 폴딩에 대한 스플라이딩의 개수(Nx 또는 Ny)는 하드웨어(메모리 또는 멀티-채널을 지원하는 산술 연산 유닛)에 의해 지원된 채널들의 개수에 기초하여 설정될 수 있다. 예를 들면, 하드웨어에 의해 지원된 채널들의 개수가 TC인 경우에, 치수(D1)에서의 스플라이싱 개수(Nx)는 1보다 크고 |TC/Cx| 이하인 특정 값이 되게 결정될 수 있고, 이 경우 "||"는 라운딩(rounding) 연산을 표시한다. 만약 치수(D2)에서 폴딩을 계속하는 것이 여전히 필요하다면, Nx와 Ny의 값들은 Nx×Ny≤|TC/Cx|이고, Nx와 Ny의 값들이 모두 1보다 크게 되도록 선택될 수 있다.
단계(S101) 이후에, 전형적인 방법(100)은 단계(S115)로 진행하여, 폴드된 특징 데이터와 최초 컨볼루션 커널을 사전 처리한다.
기존의 컨볼루션 연산에서는, 즉 컨볼루션 층에 공급된 최초의 폴드되지 않은 특징 데이터에 대한 컨볼루션을 수행하기 위해 최초 컨볼루션 커널이 사용되는 경우에는, 최초 컨볼루션 커널이 폭에서의 스트라이드(Sx)(1 이상인)와 높이에서의 스트라이드(Sy)(1 이상인)를 가지고 최초의 폴드되지 않은 특징 데이터 상에서 슬라이드하고, 슬라이딩 윈도우에 대응하는 최초의 폴드되지 않은 특징 데이터의 일 부분의 데이터를 컨볼브한다. 바라는 출력 특징 데이터를 얻을 수 있게 하기 위해, 컨볼브 전에, 특정된 패딩 방식으로 최초의 폴드되지 않은 특징 데이터의 폭과 높이(폭에 있어서의 시작 경계선과 끝 경계선, 그리고 높이에 있어서의 시작 경계선과 끝 경계선을 포함하는)의 2개의 치수 주위에서 제로 슬라이스들이 패드될 수 있고, 이러한 특정된 패딩 방식에 따라서 패드된 제로 슬라이스들의 개수가 0, 1, 또는 그 이상일 수 있다. 설계된 컨볼루션 신경망에 대해서, 각각의 컨볼루션 층에서 사용된 가중치(weight parameter)들(컨볼루션 커널들의 개수, 각각의 컨볼루션 커널의 폭, 높이, 깊이, 및 포함된 값)과 컨볼루션 층에 제공된 최초의 폴드되지 않은 특징 데이터에 대한 패딩 방식은 항상 알려져 있다. 이들 설정은 그러한 컨볼루션 신경망이 설계될 때 그러한 컨볼루션 신경망의 설계자에 의해 미리 특정될 수 있거나, 학습에 의해 설계 또는 조정될 수 있다.
올바른 바라는 결과들이 본 발명의 일 실시예에 따른 방법을 사용함으로써 여전히 얻어질 수 있다는 것을 확실히 하기 위해서는, 폴드된 특징 데이터외 최초의 컨볼루션 커널을 사전 처리하는 것이 필수적이다.
만약 컨볼루션 층에 제공된 최초의 폴드되지 않은 특징 데이터(FD)가 폭과 높이의 하나의 치수(D1)에서 스플라이싱 개수(Nx)에 기초하여 폴드되고, 폴드된 특징 데이터(FD')가 얻어진다면, 특징 데이터(FD)에 대한 치수(D1)에서의 시작 경계선에서 패드될 패딩 양(P1)(P1≥=0)은 컨볼루션 층에 의해 특정된 특징 데이터(FD)에 대한 패딩 방식에 따라서 결정될 수 있다. 그럴 경우, 치수(D1)에서 FD'의 시작하는 경계선에서
Figure 112018128980539-pat00001
개의 제로 슬라이스가 패드될 수 있으며, 이 경우 "
Figure 112018128980539-pat00002
"는 업워드 라운딩(upward rounding) 연산을 표시한다.
치수(D1) 내의 끝 경계선에 대해서는, 특징 데이터(FD)에 대한 치수(D1)에서의 끝 경계선에서 패드될 패딩 양(P2)(P2≥=0)은 컨볼루션 층에 의해 특정된 특징 데이터(FD)에 대한 패딩 방식에 따라 결정될 수 있다. 그럴 경우, 만약 P2>(FVx'×Nx-FVx)이라면,
Figure 112018128980539-pat00003
개의 제로 슬라이스가 치수(D1) 내의 FD'의 끝 경계선에서 패드될 수 있고, 이 경우 FVx와 FVx'는 각각 치수(D1)에서의 FD와 FD'의 치수 값들(예를 들면, D1이 폭인 경우에서의 폭 값)을 가리킨다. 또한, 치수(D1)에서의 예상된 폴드된 컨볼루션 커널의 치수 값인 KVx'=
Figure 112018128980539-pat00004
를 먼저 계산할 수 있고, 이 경우 Sx는 치수(D1)에서의 최초의 컨볼루션 커널의 스트라이드를 가리키며, KVx는 치수(D1)에서의 최초의 컨볼루션 커널의 치수 값을 가리키고, (Nx, Sx)는 Nx와 Sx의 최대 공약수를 가리킨다. 만약 Nx≠Sx이라면, (P2'+
Figure 112018128980539-pat00005
+FVx'-KVx')의 결과 값이 Sx의 정수배가 되도록, 치수(D1)에서의 끝 경계선에서의 FD'의 패딩 양(P2')이 결정될 수 있고, 그렇지 않으면 치수(D1)에서의 끝 경계선에서의 FD'의 패딩 양(P2')이 P2'<KVx'가 되도록 결정될 수 있다.
또,
Figure 112018128980539-pat00006
*Nx-P1개의 제로 슬라이스가 치수(D1)에서의 최초의 컨볼루션 커널의 시작 경계선에서 패드될 수 있다.
일 실시예에서, FD가 오로지 치수(D1)에서 폴드되고, FD'이 최종 폴드된 특징 데이터로서 얻어지는 경우에, 폭과 높이의 또 다른 치수(D2)로 FD를 패드하기 위해, 컨볼루션 층에 의해 특정된 패딩 방식에 따라서 치수(D2)에서의 FD'의 시작 경계선 및/또는 끝 경계선이 패드될 수 있다.
다른 실시예들에서는, 스플라이딩 개수(Ny)에 따라서 최종 폴드된 특징 데이터로서 FD"를 얻기 위해 치수(D2)에서 FD'이 더 폴드되는 경우에는, 단계(S105)에서 특징 데이터(FD)에서의 시작 경계에서 패드될 패딩 양(P3)(P3≥0)과 치수(D2)는 컨볼루션 층에 의해 특정된 특징 데이터(FD)에 대한 패딩 방식에 따라서 결정될 수 있다. 그럴 경우,
Figure 112018128980539-pat00007
개의 제로 슬라이스가 치수(D1)에서의 FD"의 시작 경계선에서 패드될 수 있다.
비슷하게, 치수(D2)에서의 FD"의 끝 경계선에 대해서는, 치수(D1)에서 FD의 끝 경계선에서 패드될 패딩 양(P4)(P4≥0)이 컨볼루션 층에 의해 특정된 특징 데이터(FD)에 대한 패딩 방식에 따라서 결정될 수 있다. 만약 P4>(FVy"×Ny-FVy')이라면,
Figure 112018128980539-pat00008
개의 제로 슬라이스가 치수(D2)에서의 FD"의 끝 경계선에서 패드될 수 있고, 이 경우 FVy'과 FVy"는 각각 치수(D2)에서의 FD'와 FD"의 치수 값들을 가리킨다(예를 들면, D2가 높이인 경우에서의 높이 값). 또한, 치수(D2)에서의 예상된 폴드된 컨볼루션 커널의 치수 값인 KVy'=
Figure 112018128980539-pat00009
를 먼저 계산할 수 있고, 이 경우 Sy는 치수(D2)에서의 최초의 컨볼루션 커널의 스트라이드를 가리키고, KVy는 치수(D2)에서의 최초의 컨볼루션 커널의 치수 값을 가리키며, (Ny, Sy)는 Ny와 Sy의 최대 공약수를 가리킨다. 만약 Ny≠Sy이라면, (P4'+
Figure 112018128980539-pat00010
+FVy"-KVy')의 결과 값이 Sy의 정수배가 되도록, 치수(D2)에서의 끝 경계선에서의 FD"의 패딩 양(P4')이 결정될 수 있고, 그렇지 않으면 치수(D2)에서의 끝 경계선에서의 FD"의 패딩 양(P4')이 P4'<KVy'가 되도록 결정될 수 있다.
또,
Figure 112018128980539-pat00011
*Ny-P3개의 제로 슬라이스가 치수(D2)에서의 최초의 컨볼루션 커널의 시작 경계선에서 또한 패드될 수 있다.
예를 들면, 도 2에 도시된 예에서 특징 데이터(FD)의 가중치들의 컨볼루션 커널(K)이 폭(3), 높이(3), 깊이(3), 그리고 폭과 높이 각각에서의 컨볼루션 스트라이드(1)를 가진다고 가정하고, 특징 데이터(FD)에 대해 특정된 패딩 체계(scheme)는 각각 1개의 열(즉, 1개의 제로 슬라이스)을 갖는 좌측과 우측에 패드하고, 상부측과 하부측에는 패드하지 않는 것이다. 그런 다음 단계(S105)에서는 도 4에 도시된 것처럼, 도 3에서의 특징 데이터(FD")가 좌측에서는 1개(
Figure 112018128980539-pat00012
=1)의 제로 슬라이스(FP)를 가지고, 그리고 우측에서는 1개(
Figure 112018128980539-pat00013
=1)의 제로 슬라이스(FP)를 가지고 패드될 수 있어서, 폭(5)을 가지고 사전 처리된 폴드된 특징 데이터(FD'")를 발생시키고, 최초의 컨볼루션 커널(K)은 좌측에서 1개(
Figure 112018128980539-pat00014
*2-1=1)의 제로 슬라이스(KP)로 패드될 수 있어서, 폭(4)을 가지고 사전 처리된 컨볼루션 커널(K')을 발생시킨다.
비록 도 4에의 예에서 1개의 최초 컨볼루션 커널만이 도시되어 있지만, 컨볼루션 층의 가중치들이 또한 복수의 컨볼루션 커널을 포함할 수 있다는 점을 알아야 한다. 그러한 경우, 그러한 가중치들의 각각의 컨볼루션 커널은 본 발명의 일 실시예의 방법에 따라 처리될 수 있다.
폴드된 특징 데이터와 최초의 컨볼루션 커널이 사전 처리된 후, 전형적인 방법(100)은 단계(S110)로 진행되어 사전 처리된 최초의 컨볼루션 커널을 폴드할 수 있다.
단계(S110)에서는, 사전 처리된 컨볼루션 커널(K')에 치수(D1)에서의 시작 경계선에서 kx×Sx개의 제로 슬라이스들을 가지고 패드될 수 있어서, 최초의 컨볼루션 커널(K) 또는 사전 처리된 컨볼루션 커널(K')에 대응하는 하나 이상의 변환된 컨볼루션 커널들인 K'[kx]을 발생시키고, 이 경우 Sx는 치수(D1)에서의 최초의 컨볼루션 커널(K)의 스트라이드이며, kx는 0 이상인 정수이다. 예를 들면, 최초의 컨볼루션 커널(K)에 대응하는 3개의 변환된 컨볼루션 커널들이 각각 0개의 제로 슬라이스들, Sx개의 제로 슬라이스들, 및 2×Sx개의 제로 슬라이스들을 패드함으로써 발생될 수 있다.
변환된 컨볼루션 커널들의 개수를 제한하기 위해 kx인 최대값이 설정될 수 있다. 예를 들면, kx<Ex가 설정될 수 있고, 이 경우 Ex는 Sx와 Nx의 최소 공배수를 Sx로 나눔으로써 얻어진 값, 또는 Nx를 Nx와 Sx의 최대 공약수에 의해 나눔으로써 얻어진 값, 또는 Sx=1이거나 Sx와 Nx가 서로 소인 경우에 Nx와 같은 값으로서 결정될 수 있다. 그러므로 최초의 컨볼루션 커널(K)이나 사전 처리된 컨볼루션 커널(K')에 대응하는 Ex 변환된 컨볼루션 커널들인 K'[kx]이 발생될 수 있다.
그런 다음, 치수(D1)에서 폴드된 컨볼루션 커널의 (ikx×Nx+jkx)번째 슬라이스에서의 모든 Cx개의 채널의 데이터가 치수(D1)에서 각각의 K'[kx]의 (ikx)번째 슬라이스에서의 (jkx×Cx)번째 채널로부터 시작하는 연속된 Cx개의 채널들의 데이터에 대응하도록, 변환된 컨볼루션 커널인 K'[kx]에 대응하는 폴드된 컨볼루션 커널인 K"[kx]를 발생시키기 위해 깊이에서 함께 치수(D1)에서의 모든 Nx개의 연속된 슬라이스들을 스플라이스함으로써 각각의 변환된 컨볼루션 커널인 K'[kx]가 치수(D1)에서 폴드될 수 있고, 이 경우 ikx는 0 이상인 정수이고, jkx는 0 이상 Nx 미만인 정수이다.
발생된 변환된 컨볼루션 커널인 K'[kx]는 치수(D1)에서의 상이한 치수 값들(예컨대, D1이 폭을 나타내는 경우에서의 폭 값들)을 가질 수 있거나, 대응하는 K"[kx]에서의 슬라이스들이 깊이 치수에서 정렬되지 않도록, 하나 이상의 변환된 컨볼루션 커널인 K'[kx]가 Nx의 정수배가 아닌 치수(D1)에서 치수 값을 가진다.
그러한 경우에, 모든 변환된 컨볼루션 커널들인 K'[kx]가 치수(D1)에서 동일한 치수 값들을 가지고 폴드된 컨볼루션 커널인 K"[kx]의 모든 슬라이스가 깊이 치수에서 정렬되도록, 변환된 컨볼루션 커널들인 K'[kx]가 전술한 것과 같이 특징 데이터를 처리하기 위한 방식과 비슷하게 처리될 수 있다. 예를 들면, 전술한 바와 같이, 하드웨어(산술 연산 유닛 또는 다수 채널을 지원하는 메모리와 같은)의 특성 또는 처리 능력이 활용될 수 있다. 예를 들면, 어떤 하드웨어가 채널들을 정렬하는 능력을 가질 수 있는 경우에, 실제 데이터에 의해 점유되지 않은 채널은 하드웨어에 의해 제로 값을 가지는 것으로 자동적으로 간주될 수 있다. 그러한 경우에, K"[kx]의 각 슬라이스에서의 채널들은 그러한 하드웨어에 의해 자동적으로 정렬된다. 예를 들면, 만약 어떤 하드웨어가 32개의 채널을 동시에 지원한다면, K"[kx]의 채널들의 개수는 그러한 하드웨어에 의해 32개의 채널들로서 자동적으로 정렬될 수 있다.
또, 치수(D1)에서의 각각의 변환된 컨볼루션 커널인 K'[kx]의 바라는 치수 값(EVx)은 또한 Ex, Sx, Nx, 그리고 치수(D1)에서의 사전 처리된 컨볼루션 커널(K')의 치수 값(Vx)으로부터 결정될 수 있다. 예를 들면, 치수(D1)에서의 각각의 변환된 컨볼루션 커널인 K'[kx]의 바라는 치수 값(EVx)은 수학식 EVx=
Figure 112018128980539-pat00015
×Nx에 의해 결정될 수 있다. 만약 치수(D1)에서의 변환된 컨볼루션 커널인 K'[kx]의 치수 값이 EVx보다 작다면, 치수(D1)에서의 조정된 변환된 컨볼루션 커널인 K'[kx]의 치수 값이 EVx와 같도록, 변환된 컨볼루션 커널인 K'[kx]가 치수(D1)에서의 변환된 컨볼루션 커널인 K'[kx]의 끝 경계선에서 제로 슬라이스(들)를 덧붙임으로써 조정될 수 있고, 조정된 변환된 컨볼루션 커널인 K'[kx]는 대응하는 폴드된 컨볼루션 커널인 K"[kx]를 발생시키기 위해 치수(D1)에서 폴드될 수 있다.
일 실시예에서, 만약 최종 폴드된 특징 데이터로서 FD'를 얻기 위해, 오로지 특징 데이터(FD)가 치수(D1)에서 폴드된다면, 단계(S110)에서 얻어진 폴드된 컨볼루션 커널인 K"[kx]가 최종 폴드된 컨볼루션 커널로서 사용될 수 있다.
또 다른 실시예에서는, 만약 스플라이싱 개수인 Ny에 따라서 FD"를 얻기 위해 치수(D2)에서 폴드된 특징 데이터(FD')가 더 폴드된다면, 단계(S110)에서 스플라이싱 개수인 Ny에 따라서 치수(D2)에서 각각의 폴드된 컨볼루션 커널인 k"[kx]가 더 폴드될 수 있다. Ny에 따른 치수(D2)에서의 폴딩 공정 K"[kx]는 Nx에 따른 치수(D1)에서의 사전 처리된 컨볼루션 커널(K')을 폴드하는 공정과 비슷하다.
예를 들면, 폴드된 컨볼루션 커널인 K"[kx]에는 폴드된 컨볼루션 커널인 K"[kx]에 대응하는 하나 이상의 변환된 컨볼루션 커널들인 K"[kx, ky]를 발생시키기 위해, 치수(D2)에서 시작 경계선에서 ky×Sy개의 제로 슬라이스가 패드될 수 있고, 이 경우 Sy는 치수(D2)에서의 최초의 컨볼루션 커널(K)의 스트라이드이며, ky는 0 이상인 정수이다. 또한, 최대값인 ky는 변환된 컨볼루션 커널들인 K"[kx, ky]의 개수를 제한하기 위해 설정될 수 있다. 예를 들면, ky<Ey가 설정될 수 있고, 이 경우 Ey는 Sy와 Ny의 최소 공배수를 Sy로 나눔으로써 얻어진 값, 또는 Ny를 Ny와 Sy의 최대 공약수에 의해 나눔으로써 얻어진 값, 또는 Sy=1이거나 Sy와 Ny가 서로 소인 경우에 Ny와 같은 값으로서 결정될 수 있다. 그러므로 K"[kx]에 대응하는 Ex 변환된 컨볼루션 커널들인 K"[kx, ky]가 발생될 수 있거나, K 또는 K'에 대응하는 Ex×Ey개의 변환된 컨볼루션 커널들인 K"[kx, ky]가 발생될 수 있다.
그런 다음, 치수(D2)에서 폴드된 컨볼루션 커널인 K'"[kx, ky]의 (iky×Ny+jky)번째 슬라이스에서의 모든 Cy개의 채널들의 데이터가 치수(D2)에서 폴드된 컨볼루션 커널인 K"[kx, ky]의 (iky)개의 슬라이스에서의 (jky×Cy)번째 채널로부터 시작하는 연속된 Cy개의 채널들의 데이터에 대응하도록, 변환된 컨볼루션 커널인 K"[kx, ky]에 대응하는 폴드된 컨볼루션 커널인 K'"[kx, ky]를 발생시키기 위해 깊이 치수에서 함께 치수(D2)에서의 모든 Ny개의 연속된 슬라이스들을 스플라이스함으로써 치수(D2)에서 각각의 변환된 컨볼루션 커널인 K"[kx, ky]가 폴드될 수 있고, 이 경우 iky는 0 이상인 정수이고, jky는 0 이상 Ny 미만인 정수이다.
치수(D2)에서의 각각의 변환된 컨볼루션 커널인 K"[kx, ky]의 바람직한 치수 값(EVy)은 Ey, Sy, Ny, 그리고 치수(D2)에서의 사전 처리된 컨볼루션 커널(K')의 치수 값(Vy)으로부터 결정될 수 있다. 예를 들면, 치수(D2)에서의 각각의 변환된 컨볼루션 커널인 K"[kx, ky]의 바라는 치수 값(EVy)은 수학식 EVy=
Figure 112018128980539-pat00016
×Ny에 의해 결정될 수 있다. 만약 치수(D2)에서의 변환된 컨볼루션 커널인 K"[kx, ky]의 치수 값이 EVy보다 작다면, 치수(D2)에서의 조정된 변환된 컨볼루션 커널인 K"[kx, ky]의 치수 값이 EVy와 같도록, 변환된 컨볼루션 커널인 K"[kx, ky]가 치수(D2)에서 끝 경계선에서 제로 슬라이스(들)를 덧붙임으로써 변환된 컨볼루션 커널인 K"[kx, ky]가 조정될 수 있다. 그럴 경우, 조정된 변환된 컨볼루션 커널인 K"[kx, ky]에 대응하는 폴드된 컨볼루션 커널인 K'"[kx, ky]를 발생시키기 위해 치수(D2)에서 조정된 변환된 컨볼루션 커널인 K"[kx, ky]가 폴드될 수 있다.
얻어진 Ex×Ey개의 폴드된 컨볼루션 커널들인 K'"[kx, ky]가 최종 폴드된 컨볼루션 커널들로서 사용될 수 있다.
도 5는 도 4에서 4개의 폭 슬라이스들을 담고 있는 컨볼루션 커널(k')이 도 3에서 FD"과 비슷하게 폭 치수에서 폴드되는 일 예를 보여준다. 도 5에 도시된 것처럼, Nx=2이고 Sx=1일 때, 컨볼루션 커널(K')에 대응하는 변환된 컨볼루션 커널들의 개수는 2라고 결정될 수 있다. 그런 경우, 조정된 변환된 컨볼루션 커널인 K'[0]을 얻기 위해, 컨볼루션 커널(K')에 좌측에서는 0개의 제로 슬라이스(KA)가, 그리고 우측에서는 2개의 제로 슬라이스(KA)로 패드되고(변환 1), 조정된 변환된 컨볼루션 커널인 K'[1]을 얻기 위해, 컨볼루션 커널(K')에 좌측에서는 1개의 제로 슬라이스(KA)가, 그리고 우측에서는 1개의 제로 슬라이스(KA)로 패드될 수 있다(변환 2). 조정된 변환된 컨볼루션 커널인 k'[0]과 k'[1]은 폭(6)(
Figure 112018128980539-pat00017
×2=6)을 가진다. 그런 경우, 조정된 변환된 컨볼루션 커널인 K'[0]은 폴드된 컨볼루션 커널인 K"[0]를 발생시키기 위해, 각각 슬라이스들(KP, KS2, KA)의 끝까지 슬라이스들(KS1, KS3, KA)을 스플라이스함으로써 폴드될 수 있고, 조정된 변환된 컨볼루션 커널인 K'[1]은 폴드된 컨볼루션 커널인 K"[1]를 발생시키기 위해, 각각 슬라이스들(KA, KS1, KS3)의 끝까지 슬라이스들(KP, KS2, KA)을 스플라이스함으로써 폴드될 수 있다. 폴드된 컨볼루션 커널들인 k"[0]과 k"[1]은 각각 폭(3), 높이(3), 및 깊이(6)를 가진다.
그런 다음, 폴드된 컨볼루션 커널들인 K"[0]과 K"[1]은 각각 높이 치수에서 더 폴드될 수 있다. 도 6에 도시된 것처럼, Ny=2이고 Sy=1일 때, 폴드된 컨볼루션 커널인 K"[0]에 대응하는 변환된 컨볼루션 커널들의 개수는 2라고 결정될 수 있다. 조정된 변환된 컨볼루션 커널인 K"[0,0]을 얻기 위해, 폴드된 컨볼루션 커널인 K"[0]에 상부측에서는 0개의 제로 슬라이스(KA')가, 그리고 하부측에서는 1개의 제로 슬라이스(KA')로 패드될 수 있고, 조정된 변환된 컨볼루션 커널인 K"[0,1]을 얻기 위해, 폴드된 컨볼루션 커널인 K"[0]에 상부측에서 1개의 제로 슬라이스(KA')가 패드될 수 있다. 조정된 변환된 컨볼루션 커널인 K"[1,1]과 K"[1,1]을 얻기 위해 비슷한 방식으로 폴드된 컨볼루션 커널인 K"[1]이 패드될 수 있다. 조정된 변환된 컨볼루션 커널들(K"[0,0], K"[0,1], K"[1,0], K"[1,1]) 각각은 높이 4(
Figure 112018128980539-pat00018
×2=4)를 가진다. 대응하는 폴드된 컨볼루션 커널인 K'"[0,0]를 발생시키기 위해, 변환된 컨볼루션 커널인 K"[0,0]은 각각 슬라이스들(KS1'과 KS3')의 끝까지 슬라이스들(KS2'과 KA')을 스플라이스함으로써 폴드될 수 있다. 변환된 컨볼루션 커널들(K"[0,1], K"[1,0], K"[1,1])은 각각 대응하는 폴드된 컨볼루션 커널들(K'"[0,1], K'"[1,0], K'"[1,1])을 발생시키기 위해 비슷한 방식으로 폴드될 수 있다. 폴드된 컨볼루션 커널들(K'"[0,1], K'"[1,0], K'"[1,1]) 각각은 폭(3), 높이(2), 및 깊이(12)를 가진다.
하지만, 다른 실시예들에서는, 단계(S105)가 2개의 부분으로 쪼개질 수 있고, 그 중 하나에서는 폴드된 특징 데이터를 사전 처리하고, 나머지 하나에서는 최초의 컨볼루션 커널을 사전 처리하며, 단계(S101)와 폴드된 특징 데이터에 대한 사전 처리는 최초의 컨볼루션 커널에 대한 사전 처리와 단계(S110) 후 수행될 수 있거나, 단계(S101)와 폴드된 특징 데이터에 대한 사전 처리는, 최초 컨볼루션 커널에 대한 사전 처리 및 단계(S110)와 나란히 수행될 수 있다.
그런 다음 전형적인 방법(100)은 단계(S115)로 진행하여, 단계(S110)에서 얻어진 1개 이상의 폴드된 컨볼루션 커널들을 사용하여, 단계(S105)에서 얻어진 사전 처리된 폴드된 특징 데이터를 컨볼브할 수 있다.
만약 폴드되지 않은 최초 특징 데이터(FD)가 단계(S101)에서 폴드된 특징 데이터(FD')를 얻기 위해, 스플라이싱 개수(Nx)에 따라서 폭과 높이 중 1개의 치수(D1)에서만 폴드된다면, 단계(S115)에서, 단계(S110)에서 얻은 Ex개의 폴드된 컨볼루션 커널인 K"[kx]를 사용하여 단계(S105)에서 얻어진 사전 처리된 폴드된 특징 데이터에 대해 컨볼루션 연산이 수행될 수 있다. 그러한 경우, 만약 최초의 컨볼루션 커널(K)이 Nx와 같은 치수(D1)에서 스트라이드(Sx)를 가진다면, 각각의 폴드된 컨볼루션 커널인 K"[kx]가 치수(D1)에서 스트라이드(1)를 가지고, 그렇지 않으면, 각각의 폴드된 커널인 K"[kx]가 치수(D1)에서 스트라이드(Sx)를 가진다. 게다가, 각각의 폴드된 컨볼루션 커널인 K"[kx]는 치수(D2)에서 최초의 컨볼루션 커널(K)의 스트라이드(Sy)와 같은 높이와 폭의 다른 치수(D2)에서 스트라이드를 가진다.
만약 특징 데이터(FD')가 단계(S101)에서 폴드된 특징 데이터(FD")를 얻기 위해, 스플라이싱 개수(Ny)에 따라서 폭과 높이의 치수(D2)에서 더 폴드된다면, 단계(S115)에서, 단계(S110)에서 얻은 폴드된 컨볼루션 커널인 K'"[kx, ky]를 얻기 위해, Ex×Ey를 사용하여 단계(S105)에서 얻어진 사전 처리된 폴드된 특징 데이터에 대한 컨볼루션 연산이 수행될 수 있다. 그러한 경우, 만약 최초의 컨볼루션 커널(K)이 Nx와 같은 치수(D1)에서 스트라이드(Sx)를 가진다면, 각각의 폴드된 컨볼루션 커널인 K'"[kx, ky]가 치수(D1)에서 스트라이드(1)를 가지고, 그렇지 않으면, 각각의 폴드된 커널인 K'"[kx, ky]가 치수(D1)에서 스트라이드(Sx)를 가진다. 게다가, 만약 Ny와 같은 치수(D2)에서 최초의 컨볼루션 커널(K)이 스트라이드(Sy)를 가진다면, 각각의 폴드된 컨볼루션 커널인 K'"[kx, ky]는 치수(D2)에서 스트라이드(1)를 가지고, 그렇지 않으면, 각각의 폴드된 컨볼루션 커널인 K'"[kx, ky]는 치수(D2)에서 스트라이드(Sy)를 가진다.
일 실시예에서, 단계(S115)에서는 모든 폴드된 컨볼루션 커널이 폴드된 특징 데이터의 동일한 부분을 컨볼브하기 위해 사용될 수 있고, 그런 다음 폴드된 특징 데이터의 모든 부분들이 컨볼브될 때까지 폴드된 특징 데이터의 다음 부분을 컨볼브하기 위해, 치수(D1 또는 D2)에서 스트라이드만큼 움직여질 수 있으며, 최종 출력 특징 데이터가 발생된다.
도 7은 컨볼루션 연산이 어떻게 수행될 수 있는지의 예를 예시한다. 도 7의 예에서, 도 6에서의 폴드된 컨볼루션 커널들(K'"[0,0], K'"[0,1], K'"[1,0], K'"[1,1])이 도 4에서의 폴드된 특징 데이터(FD'")를 컨볼브하기 위해 사용된다.
도 7에 도시된 것처럼, 첫째로, 데이터 (1,1), (2,1), (1,2), (2,2)를 각각 포함하는 출력 특징 데이터(FDO)의 부분을 얻기 위해, 제1 행 및 제2 행에서 데이터인 (1,1), (1,2), (1,3), (2,1), (2,2), 및 (2,3)을 담고 있는 폴드된 특징 데이터(FD'")의 부분을 컨볼브하기 위해 4개의 폴드된 컨볼루션 커널인 k"[0,0], k"[0,1], k"[1,0], 및 k"[1,1]이 사용된다. 그런 다음, 4개의 폴드된 컨볼루션 커널인 K'"[0,0], K'"[0,1], K'"[1,0], 및 K'"[1,1]이 제1 행과 제2 행에서 데이터인 (1,2), (1,3), (1,4), (2,2), (2,3), 및 (2,4)를 담고 있는 폴드된 특징 데이터(FD'")의 부분을 컨볼브하기 위해 폭에서 스트라이드(1)(즉, 폭에서의 최초의 컨볼루션 커널(K)의 스트라이드)를 움직이고, 그 결과 각각 데이터인 (1,3), (2,3), (1,4), 및 (2,4)를 포함하는 출력 특징 데이터(FDO)의 부분을 생기게 한다. 그런 다음, 4개의 폴드된 컨볼루션 커널인 K'"[0,0], K'"[0,1], K'"[1,0], 및 K'"[1,1]이 또한 제1 행과 제2 행에서 데이터인 (1,3), (1,4), (1,5), (2,3), (2,4), 및 (2,5)를 담고 있는 폴드된 특징 데이터(FD'")의 부분을 컨볼브하기 위해 폭에서 스트라이드(1)(즉, 폭에서의 최초의 컨볼루션 커널(K)의 스트라이드)를 더 움직이고, 데이터인 (1,5), (2,5), (1,6), 및 (2,5)를 포함하는 출력 특징 데이터(FDO)의 부분을 얻는다.
폴드된 특징 데이터(FD'")의 제1 행과 제2 행을 컨볼브한 후, 4개의 폴드된 컨볼루션 커널인 K'"[0,0], K'"[0,1], K'"[1,0], 및 K'"[1,1]이 폴드된 특징 데이터(FD'")의 제2 행과 제3 행을 컨볼브하기 위해 높이에서 스트라이드(1)(즉, 높이에서 최초의 컨볼루션 커널(K)의 스트라이드)를 움직인다. 폴드된 특징 데이터(FD'")의 제2 행과 제3 행에서의 컨볼루션 연산은, 4개의 폴드된 컨볼루션 커널인 K'"[0,0], K'"[0,1], K'"[1,0], 및 K'"[1,1]을 사용하여 폴드된 특징 데이터(FD'")의 제1 행과 제2 행에서의 컨볼루션 연산과 비슷하고, 그것의 반복적인 설명은 여기서 생략될 것이다.
4개의 폴드된 컨볼루션 커널인 K'"[0,0], K'"[0,1], K'"[1,0], 및 K'"[1,1]을 가지고 폴드된 특징 데이터(FD'")를 컨볼브한 후 최종 출력 특징 데이터(FDO)가 얻어진다. 출력 특징 데이터(FDO)의 데이터인 (4,1), (4,2), (4,3), (4,4), (4,5), 및 (4,6)를 포함하는 마지막 행은 필요에 따라 계속 사용되거나 버려질 수 있다. 예를 들면, 만약 3개의 행 출력 특징 데이터를 얻기 위해, 도 2에 도시된 것과 같은 폴드되지 않은 최초의 특징 데이터(FD)가 도 4에 도시된 최초의 컨볼루션 커널(K)로 컨볼브되는 것이 원해지면(따라서, 폴드되지 않은 최초의 특징 데이터(FD)는 높이에서 패드되지 않는다), 출력 특징 데이터(FDO)의 데이터인 (4,1), (4,2), (4,3), (4,4), (4,5), 및 (4,6)을 포함하는 마지막 행은 버려질 수 있다.
컨볼루션 층의 가중치들이 복수의 컨볼루션 커널들을 포함하는 경우에, 도 7의 예에서의 출력 특징 데이터(FDO)는 최종 출력 특징 데이터의 채널에서의 데이터에 대응할 수 있다.
다른 실시예들에서는, 전체 폴드된 특징 데이터를 컨볼브하기 위해 각각의 폴드된 컨볼루션 커널이 사용될 수 있다. 그러한 경우, 하드웨어에 대한 컨볼루션 명령어들을 수정할 필요는 없다. 하지만, 만약 1개의 최초 컨볼루션 커널이 복수의 폴드된 컨볼루션 커널들에 대응한다면, 각각의 폴드된 컨볼루션 커널을 사용하여 얻어진 부분적인 결과는 다수의 채널에 있게 된다. 다수의 채널들에서의 부분적인 결과는, 출력 특징 데이터가 컨볼루션 신경망의 다음 층에 제공되거나 전체 컨볼루션 신경망의 최종 출력으로서 간주되기 전에, 1개의 채널에서 완전한 출력을 얻기 위해 다시 조작되거나 폴드되지 않을 수 있다.
도 8은 컨볼루션 커널이 어떻게 수행될 수 있는지의 일 예를 예시한다. 도 7의 예와는 달리, 도 8의 예에서는 4개의 폴드된 컨볼루션 커널들인 K'"[0,0], K'"[0,1], K'"[1,0], 및 K'"[1,1] 각각이 전체 폴드된 특징 데이터(FD'")를 컨볼브하기 위해 사용된다. 도 8에 도시된 것처럼, 출력 특징 데이터(FDO)의 한 부분만이 폴드된 컨볼루션 커널들 각각을 사용하여 얻어질 수 있다. 예를 들면, 데이터인 (1,1), (1,3), (1,5), (3,1), (3,3), 및 (3,5)를 포함하는 출력 특징 데이터(FDO)의 한 부분만을 발생시키기 위해, 폴드된 컨볼루션 커널인 K'"[0,0]이 폴드된 특징 데이터(FD'")를 컨볼브할 수 있다. 각각의 폴딩 컨볼루션 커널들을 사용하여 얻어진 데이터의 부분들은 완전한 출력 특징 데이터(FDO)를 얻기 위해 함께 조직될 수 있다. 비슷하게, 컨볼루션 층의 가중치들이 복수의 컨볼루션 커널들을 포함하는 경우에, 도 8의 예에서의 출력 특징 데이터(FDO)가 최종 출력 특징 데이터의 채널에서의 데이터에 대응할 수 있다.
특징 데이터와 컨볼루션 커널을 위해 작용하는 폴딩과, 얻어진 폴드된 특징 데이터와 폴드된 컨볼루션 커널에 대한 컨볼루션 연산은 채널 활용과 연산 효율을 향상시키고, 캐시 소비를 감소시킨다.
예를 들면, 프로세서(예를 들면, 컨볼루션 연산을 위한 곱셈기들의 어레이)가 동시에 32개의 채널을 처리할 수 있고, 5×5의 컨볼루션 커널을 사용하여 720×1280의 RGB 이미지(채널들의 개수는 3임)가 컨볼브된다고 가정하여(폭과 높이 모두에서의 스트라이들은 1임), 기존 컨볼루션(즉, 폴드되지 않은 최초 특징 데이터에 대해 컨볼루션을 수행하기 위해 최초의 컨볼루션 커널을 사용함으로써 컨볼루션이 수행된다), 폭 폴드된 컨볼루션(즉, 폭에서 매 2개의 슬라이스씩 특징 데이터와 최초의 컨볼루션 커널을 폴드한 다음, 컨볼루션을 수행하는 것), 및 폭-높이 폴드된 컨볼루션(즉, 각각 폭과 높이에서 매 2개의 슬라이스마다 특징 데이터와 최초의 컨볼루션 커널을 폴드한 다음, 컨볼루션을 수행하는 것)의 연산 양들 사이의 비교가 다음 표 1에서 보여진다.
곱셈들의 개수 연산 공식 기존 컨볼루션의 연산 양 사이의 비교
유효한
연산율
기존 컨볼루션 737280000 32Х720Х1280Х5Х5/1 1 0.09375
폭 폴드된 컨볼루션 442368000 32Х360Х1280Х3Х5/(1/2) 0.6 0.1875
폭-높이 폴드된 컨볼루션 265420800 32Х360Х640Х3Х3/(1/4) 0.36 0.375
표 1에서의 데이터 예는, 특징 데이터와 컨볼루션 커널을 폴드하고, 얻어진 폴드된 특징 데이터와 폴드된 컨볼루션 커널을 사용하여 컨볼루션 연산을 수행함으로써, 연산 양이 명백히 감소될 수 있고(예를 들면, 폭-높이 폴드된 컨볼루션을 사용하는 연산 양은 기존 컨볼루션을 사용하는 연산 양의 오직 36%이다), 유효한(effective) 연산율(operation rate)이 명백히 향상될 수 있다는 것을 보여준다.
도 9와 도 10은 각각 본 발명의 일 실시예에 따른 컨볼루션 신경망에서의 컨볼루션 층의 컨볼루션 연산을 수행하기 위한 전형적인 장치의 블록도를 예시한다.
도 9에 도시된 것처럼, 그러한 전형적인 장치(900)는 프로세서(910)를 포함할 수 있다. 그러한 프로세서(910)는 범용의 CPU. GPU. 또는 신경망-전용 프로세서 또는 가속기와 같이, 데이터를 처리하는 것 및/또는 명령어들을 실행하는 것을 행할 수 있는 임의의 형태를 갖는 프로세서일 수 있다. 예를 들면, 프로세서(910)는 본 발명의 일 실시예에 따라서 특징 데이터와 컨볼루션 커널을 폴드하고, 폴드된 특징 데이터와 폴드된 컨볼루션 커널을 사용하여 컨볼루션 연산을 수행하는 방법을 행할 수 있다. 게다가, 프로세서(910)는 바라는 기능들을 수행하기 위해 장치(900)에서 다른 구성 성분들을 제어할 수 있다.
프로세서(910)는 버스 시스템 및/또는 다른 형태들을 갖는 상호 연결 메커니즘(미도시)을 통해 메모리(920) 및 I/O 인터페이스(930)에 연결될 수 있다.
메모리(920)는 예를 들면 휘발성 메모리 및/또는 비휘발성 메모리와 같이 다양한 형태를 갖는 컴퓨터 판독 가능하고 기입 가능한 저장 매체를 포함할 수 있다. 그러한 휘발성 메모리의 예들에는 RAM(random access memory) 및/또는 캐시(cache) 등이 포함될 수 있지만 이들에 국한되는 것은 아니다. 비휘발성 메모리의 예들에는 ROM(read only memory), 하드 디스크, 플래시 메모리 등이 포함될 수 있지만 이들에 국한되는 것은 아니다. 판독 가능하고 기입 가능한 저장 매체의 예들에는 전기, 자기, 광학, 전자기, 적외선, 또는 반도체 시스템, 장치, 또는 디바이스 또는 이들의 임의의 결합물이 포함될 수 있지만 이들에 국한되는 것은 아니다. 예를 들면, 신경망 전용 프로세서와 결합되어 사용될 때에는, 메모리(920)가 전용 프로세서를 지니고 있는 칩 상의 RAM일 수 있다. 메모리(920)는 본 개시물의 실시예들에 따라서, 특징 데이터와 컨볼루션 커널을 폴드하고, 폴드된 특징 데이터 및 폴드된 컨볼루션 커널을 사용하여 컨볼루션 연산을 수행하는 방법을 디바이스(900)가 실행할 것을 명령하기 위한 프로그램 명령어들을 포함할 수 있다.
I/O 인터페이스(930)는 프로세서(910)에 파라미터들 또는 데이터를 제공하고, 프로세서(910)에 의해 처리된 결과 데이터를 출력하는 역할을 할 수 있다.
도 10에 도시된 것처럼, 전형적인 장치(1000)는 제1 폴딩 유닛(1010), 사전 처리 유닛(1020), 제2 폴딩 유닛(1030), 및 산술 연산 유닛(1040)을 포함할 수 있다.
제1 폴딩 유닛(1010)은 폴드된 특징 데이터를 발생시키기 위해 폭과 높이의 적어도 하나의 치수로 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터를 폴드하도록 구성될 수 있다.
일 실시예에서, 제1 폴딩 유닛(1010)은 예를 들면 도 1에 도시된 것과 같은 전형적인 방법(100)에서의 단계(S101)를 수행하도록 구성될 수 있다.
사전 처리 유닛(1020)은 폴드된 특징 데이터와, 컨볼루션 층의 최초의 컨볼루션 커널을 사전 처리하도록 구성될 수 있다. 일 실시예에서, 사전 처리 유닛(1020)은 예를 들면 도 5에 도시된 것과 같은 전형적인 방법(100)에서의 단계(S105)를 수행하도록 구성될 수 있다.
제2 폴딩 유닛(1030)은 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 적어도 하나의 치수에서 사전 처리된 최초의 컨볼루션 커널을 폴드하도록 구성될 수 있다. 일 실시예에서, 제2 폴딩 유닛(1030)은, 예를 들면 도 1에 도시된 것처럼 전형적인 방법(100)의 단계(S110)를 수행하도록 구성될 수 있다.
산술 연산 유닛(1040)은 발생된 하나 이상의 폴드된 컨볼루션 커널을 사용하여 사전 처리된 폴드된 특징 데이터에 대한 컨볼루션 연산을 수행하도록 구성될 수 있다. 일 실시예에서, 산술 연산 유닛(1040)은, 예를 들면 도 1에 도시된 전형적인 방법(100)의 단계(S115)를 수행하도록 구성될 수 있다.
장치(900)와 장치(1000)는 도 9와 도 10에서 오로지 예들로서 도시된 것이고, 어떤 식으로든 본 발명을 제한하는 것이 아님이 이해되어야 한다. 본 발명의 실시예들에 따른 장치는 필요에 따라 다른 성분들 및/또는 구조를 포함할 수 있다.
도 11은 본 발명의 일 실시예에 따른 폴드된 특징 데이터에 대한 컨볼루션 연산을 수행하기 위한 디바이스의 일 예를 보여준다. 도 11을 참조하면, 디바이스(1100)는 호스트 프로세서(1110), DRAM(1120), 및 컨볼루션 엔진(1130)을 포함할 수 있다. 그것들은 버스 시스템(1101)을 통해 서로 상호 연결된다.
호스트 프로세서(1110)는 ARM 프로세서, 범용 CPU, 또는 임의의 다른 타입의 프로세서 또는 컨트롤러일 수 있고, 아래에 설명된 바와 같이 DRAM(1120)과 컨볼루션 엔진(1130)과 같은, 디바이스(1100)에서의 다른 성분들의 작동을 제어하기 위해 프로그램 명령어들을 실행할 수 있다.
DRAM(1120)은 DDR RAM 또는 임의의 다른 타입의 DRAM들일 수 있고, 자기 하드 디스크와 같이 비활성 저장 장치로부터 판독한 데이터를 일시적으로 저장할 수 있다. 예를 들면, 컨볼루션 신경망에서의 전술한 폴드되지 않은 특징 데이터와 컨볼루션 층에 대한 최초의 컨볼루션 커널 또는 호스트 프로세서(1110)에 의해 실행될 프로그램 명령어들이 DRAM(1120)에 일시적으로 저장될 수 있다.
컨볼루션 엔진(1130)은 전술한 방법들 중 임의의 하나에 따라 컨볼루션 연산을 수행하기 위해 DRAM(1120)으로부터 폴드되지 않은 특징 데이터와 최초의 컨볼루션 커널을 판독할 수 있다. 컨볼루션 엔진(1130)은 1개의 칩으로서 형성될 수 있고, 그것의 성분들과 연산들은 아래에서 더 상세히 논의될 것이다.
도 11을 참조하면, 컨볼루션 엔진(1130)은 SRAM(static random access memory)일 수 있는 입력 버퍼(1131)를 포함할 수 있다. 폴드되지 않은 특징 데이터와 최초의 컨볼루션 커널이 DRAM(1130)으로부터 판독될 수 있고, SRAM(1131)에서 저장된다. 도 11의 예에서, 폴드되지 않은 특징 데이터와 최초의 컨볼루션 커널이 동일한 SRAM(1131)에서 저장된다. 다른 예들에서는, 분리된 SRAM들에 그것들이 저장될 수 있다. SRAM(1131)에서 저장되기 전 또는 저장되는 동안에, 폴드되지 않은 특징 데이터와 최초의 컨볼루션 커널이 폴드될 수 있고, 도 1 내지 6을 참조하여, 전술한 바와 같이 사전 처리될 수 있다. 폴딩 및 사전 처리의 상세 내용은 본 명세서에서 반복되지 않는다.
일 실시예에서, 폴드되지 않은 특징 데이터의 폴딩, 사전 처리 및 저장은 1개의 단계에서 수행될 수 있다. 예를 들면, DRAM(1130)으로부터 판독된 폴드되지 않은 특징 데이터가 SRAM(1131) 내로 기입되는 동안, 추가적인 제로 값들이 폴드되지 않은 특징 데이터의 데이터 스트림 내로 삽입될 수 있고, SRAM(1131)에서 저장된 특징 데이터가 폴드되고 사전 처리되도록, 폴드되지 않은 특징 데이터가 SRAM(1131) 내로 미리 결정된 포맷으로 기입될 수 있다. 도 12a와 도 12b는 어떻게 특징 데이터가 SRAM(1131)에 저장되는지의 예들을 보여주고, 이 경우 도 12a는 도 1의 최초의 특징 데이터(FD)를 보여주며, 도 12b는 도 1의 폴드된 특징 데이터(FD')를 보여준다.
도 12a를 먼저 참조하면, SRAM(1131)은 복수의 열(1140)로 배치된 복수의 메모리 유닛(1141)들을 포함할 수 있고, 각각의 열(1140)은 "슬라이스"라고 불릴 수도 있다. 각각의 SRAM 슬라이스(1140)는 열 방향으로 연속적으로 어드레스되고, 폭 치수에서 복수의 비트들을 수용할 수 있다. 각각의 슬라이스(1140)가 64비트의 폭을 가진다고 가정하면, 각각의 메모리 유닛(1141)은 8개의 데이터를 저장할 수 있다. 최초의 특징 데이터(FD)가 폴드되지 않을 때에는, 각각의 셀(1141)에 오직 하나의 화소(3개의 채널에 대해 3개의 데이터)가 각각의 셀(1141)에 저장되고, 셀(1141)의 나머지 40(63-3*8)개의 비트들에 도 12a에 도시된 것처럼 5개의 제로 값들 패드된다. 하지만, 폴드된 특징 데이터(FD')에 대해서는, 각각의 셀(1141)에 2개의 화소가 저장될 수 있고, 각각의 화소의 끝에는 도 12b에 도시된 것처럼 오직 1개의 제로 값이 패드된다. 또 다른 예에서는 대신에 2개의 제로 값들이 제2 화소의 끝에서 패드될 수 있다. 만약 셀(1141)이 더 큰 폭을 가진다면, 더 많은 화소가 각각의 셀(1141)에 저장될 수 있다고 이해된다.
게다가, 최초의 컨볼루션 커널은 SRAM(1131)에서 저장되기 전에 또는 저장되는 동안에 사전 처리되고 폴드될 수 있다. 도 4 내지 6을 참조하여 위에서 설명된 것처럼, 최초의 컨볼루션 커널은 최초의 컨볼루션 커널에 대응하는 1개 이상의 폴드된 컨볼루션 커널을 발생시키기 위해, 폴드된 특징 데이터의 폴딩 방식에 따라 폭 또는 높이의 적어도 하나의 치수에서 사전 처리되고 폴드될 수 있다. 폴딩의 세부 내용은 본 명세서에서 반복되지 않을 것이다. 1개 이상의 폴드된 컨볼루션 커널이 SRAM(1131)에 저장될 수 있다. 또한, 최초의 컨볼루션 커널을 사전 처리하고, 폴드하며, 저장하는 것은 1개의 단계에서 수행될 수 있다. 예를 들면, DRAM(1120)으로부터 판독된 최초의 컨볼루션 커널의 데이터는 SRAM(1131) 내로 미리 정해진 포맷으로 기입될 수 있고, SRAM(1131)에서 저장된 컨볼루션 커널이 전술한 바와 같이 사전 처리되고 폴드되도록, 최초의 컨볼루션 커널의 데이터 스트림 내로 추가적인 제로 값들이 삽입될 수 있다. 상이한 슬라이스(1140)들에 저장되는 것을 제외하고는, 1개 이상의 폴드된 컨볼루션 커널들의 저장은 도 12a와 도 12b를 참조하여 전술한 바와 같이 폴드된 특징 데이터의 것과 비슷할 수 있다. SRAM(1131)에 커널들을 저장하는 것에 대한 세부 내용은 본 명세서에서 생략될 것이다. SRAM(1131)이 DRAM(1120)보다 작은 용량을 가지기 때문에, 그것은 한꺼번에 특징 데이터의 부분과 커널들의 부분만을 판독할 수 있다는 점을 이해해야 한다.
도 11을 다시 참조하면, 폴드된 특징 데이터와 1개 이상의 폴드된 컨볼루션 커널들은, 1개 이상의 폴드된 컨볼루션 커널들을 가지고 폴드된 특징 데이터에 대한 컨볼루션 연산을 수행하기 위해, SRAM(1131)으로부터 계산 유닛(1133) 내로 판독될 수 있다. 계산 유닛(1131)은 컨볼루션 연산을 위해 복수의 곱셈기와 복수의 덧셈기를 포함할 수 있다. 일 실시예에서, 계산 유닛(1133)은 각각 복수의 폴드된 컨볼루션 커널들의 대응하는 화소와, 폴드된 특징 데이터에서 복수의 화소들의 곱(product)들을 동시에 계산할 수 있다. 그렇게 반복적으로 행함으로써 폴드된 특징 데이터의 동일한 부분이 모든 폴드된 컨볼루션 커널들에 의해 컨볼브될 수 있다. 예를 들면, 만약 계산 유닛(1133)이 256개의 곱셈기를 포함한다면, 그것은 각각 8개의 커널들에서의 대응하는 화소(또는 4개의 채널을 가지는)와 폴드된 특징 데이터의 8개의 픽셀(각각 4개의 채널과 총 32개의 데이터를 가지는)을 동시에 곱할 수 있어서, 64개(8개의 화소*8개의 채널)의 데이터를 발생시킨다. 특징 데이터가 폴드되지 않는 기존의 경우에 비해, 계산 효율은 크게 개선된다.
계산 유닛(1133)으로부터의 계산 결과들은 출력 버퍼(SRAM)(1135)에 저장될 수 있다. 입력 버퍼(1131)와 출력 버퍼(1135)는 각각 버퍼 크로스바(crossbar) 스위치(1132, 1134)를 구비하여, 계산 유닛(1133)에 제공되거나 계산 유닛(1133)으로부터 수신한 데이터를 제어한다. 만약 필요하다면, 그러한 계산 결과들이 또한 출력 버퍼(1135)로부터 DRAM(1120)으로 이동될 수 있다.
문맥(context)이 명확히 다르게 요구하지 않는 한, 설명부와 청구범위 전반에 걸쳐, "포함하다(comprise)", "포함하는(comprising)" 등의 어구들은 한정적인 것(exclusive)과는 반대로 총괄적이거나 포괄적인 의미로 해석되어야 하는데, 즉 "~을 포함하지만 그것에 한정되지 않는"의 의미로 해석되어야 한다. 본 명세서에 일반적으로 사용된 "결합된(coupled)"이라는 어구는 직접 연결될 수 있거나 하나 이상의 중간 요소들에 의해 연결될 수 있는 2개 이상의 요소들을 가리킨다. 추가로, "여기에서(herein)", "위(above)", "아래(below)"라는 어구들과 비슷한 중요성의 어구들은 이러한 적용예에서 사용될 때, 전체로서 이러한 적용예를 가리키고, 이러한 적용예의 임의의 특정 부분들을 가리키는 것이 아니다. 문맥이 허용하는 경우에, 단수 또는 복수를 사용하는 위 설명부에서의 어구들은 각각 복수 또는 단수를 또한, 포함할 수 있다. 2개 이상의 항목의 목록을 참조할 때의 "또는(or)"이라는 어구는 그러한 어구의 후속하는 설명(interpretation)들, 즉 그러한 목록에서의 항목들 중 임의의 것, 그러한 목록에서의 항목들 전부, 및 그러한 목록에서의 항목들의 임의의 결합물 전부를 포함한다.
본 발명의 실시예들의 전술한 설명은 위에서 개시된 정밀한 형태에 본 발명을 국한하거나 총망라하는 것으로 의도되지 않는다. 본 발명의 특정 실시예들과 본 발명에 대한 예들은 위에서 예시적인 목적으로 설명되고, 당업자라면 본 발명의 범주 내에서 다양한 동등한 수정예들이 가능하다는 사실을 인지하게 된다. 예를 들면, 주어진 순서대로 프로세스들이나 블록들이 묘사되지만, 대안적인 실시예들이 단계들을 가지는 루틴(routine)들을 수행하거나, 블록들을 가지는 시스템들을 다른 순서대로 사용할 수 있고, 몇몇 프로세스들 또는 블록들은 삭제, 이동, 추가, 세분화, 결합 및/또는 수정될 수 있다. 이들 프로세스 또는 블록 각각은 다양한 상이한 방식으로 구현될 수 있다. 또한, 가끔은 프로세스들이나 블록들이 연속하여(in series) 수행되는 것으로 보이지만, 대신 이들 프로세스들 또는 블록들은 나란히(in parallel) 수행될 수 있거나, 상이한 시각들에서 수행될 수 있다.
본 명세서에서 제공된 본 발명의 가르침들은 반드시 전술한 시스템에서만 적용되는 것이 아니고 다른 시스템들에 적용될 수 있다. 전술한 다양한 실시예들의 요소들 및 행위들은 추가 실시예들을 제공하기 위해 결합될 수 있다.
본 발명들의 몇몇 실시예들이 설명되었지만, 이들 실시예는 오직 예로서 나타내진 것이고, 본 발명의 범주를 제한하려고 의도되는 것은 아니다. 실제로, 본 명세서에서 설명된 새로운 방법들 및 시스템들은 다양한 다른 형태들로 구현될 수 있고, 더 나아가, 본 명세서에서 설명된 방법들 및 시스템들의 형태에 있어서의 다양한 생략, 대체, 및 변경이 본 발명의 취지로부터 벗어나지 않으면서 이루어질 수 있다. 첨부된 청구항들과 그것들의 등가물은 본 발명의 범주와 취지 내에 있는 것으로서 그러한 형태들과 수정예들을 포함하는 것으로 의도된다.

Claims (15)

  1. 컨볼루션 신경망에서 컨볼루션 층의 연산을 수행하기 위한 방법으로서,
    상기 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터와 상기 컨볼루션 층의 최초의 컨볼루션 커널을 DRAM(dynamic random access memory)으로부터 판독하는 단계;
    폴드된 특징 데이터를 발생시키기 위해, 폭과 높이의 적어도 하나의 치수(dimension)로 상기 폴드되지 않은 특징 데이터를 폴드하는 단계;
    상기 폴드된 특징 데이터와 상기 최초의 컨볼루션 커널을 사전 처리하는 단계;
    사전 처리된 폴드된 특징 데이터를 SRAM(static random-access memory)에 저장하는 단계;
    상기 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 적어도 하나의 치수로 사전 처리된 최초의 컨볼루션 커널을 폴드하는 단계;
    상기 하나 이상의 폴드된 컨볼루션 커널들을 상기 SRAM에 저장하는 단계; 및
    상기 하나 이상의 폴드된 컨볼루션 커널들로 사전 처리된 폴드된 특징 데이터를 컨볼브(convolve)하기 위한 계산 유닛에 상기 SRAM으로부터 사전 처리된 폴드된 특징 데이터와 하나 이상의 폴드된 컨볼루션 커널들을 판독하는 단계를 포함하는, 방법.
  2. 제1 항에 있어서,
    상기 SRAM은 복수의 메모리 유닛들을 포함하고, 사전 처리된 폴드된 특징 데이터의 적어도 모든 2개의 화소가 동일한 메모리 유닛에 저장되며, 각각 폴드된 컨볼루션 커널의 적어도 모든 2개의 화소가 동일한 메모리 유닛에 저장되는, 방법.
  3. 제1 항에 있어서,
    상기 계산 유닛은 복수의 곱셈기들과 복수의 덧셈기들을 포함하는, 방법.
  4. 제3 항에 있어서,
    적어도 하나의 치수에서 폴드되지 않은 특징 데이터를 폴드하는 것은:
    깊이에서 함께 제1 치수로 모든 Nx개의 연속된 슬라이스들을 스플라이스(splice)함으로써, 제1 치수에서 폴드되지 않은 특징 데이터에 대한 제1 폴딩(folding)을 수행하는 것을 포함하고, 상기 제1 치수는 폭과 높이 중 하나이며, Nx는 1보다 큰 정수이고,
    상기 제1 치수에서 폴드되지 않은 특징 데이터의 (ifx×NX+jfx)번째 슬라이스에서의 모든 CX개의 채널들의 데이터는, 제1 치수로 제1 폴딩의 결과의 (ifx)번째 슬라이스에서의 (jfx×CX)번째 채널로부터 시작하는 연속적인 CX개의 채널들 모두의 데이터에 대응하고, ifx는 0 이상인 정수이고, jfx는 0 이상 NX 미만인 정수이며, CX는 0보다 큰 정수인, 방법.
  5. 제4 항에 있어서,
    사전 처리는:
    컨볼루션 층에 의해 특정된 패딩 방식에 따라서, 제1 치수로 상기 폴드되지 않은 특징 데이터의 시작 경계선에서 0 이상인 제1 패딩 양(P1)을 결정하는 것;
    "
    Figure 112020044423632-pat00019
    "가 업워드 라운딩(upward rounding) 연산을 나타내고, 제1 치수로 제1 폴딩의 결과의 시작 경계선에서
    Figure 112020044423632-pat00020
    개의 제로 슬라이스를 패드하는 것; 및
    제1 치수로 최초의 컨볼루션 커널의 시작 경계선에서
    Figure 112020044423632-pat00021
    *Nx-P1개의 제로 슬라이스를 패드하는 것을 포함하는, 방법
  6. 제4 항에 있어서,
    상기 최초의 컨볼루션 커널이 Nx와 같지 않은 제1 치수로 제1 스트라이드를 가질 때, 컨볼브하는 것은:
    상기 최초의 컨볼루션 커널에 대응하는 폴드된 컨볼루션 커널들 모두를 가지고 사전 처리된 폴드된 특징 데이터의 동일한 부분을 컨볼브한 후, 제1 치수로 제1 스트라이드만큼 최초의 컨볼루션 커널에 대응하는 폴드된 컨볼루션 커널들 모두를 동시에 이동시키는 것으로서, 폴드된 컨볼루션 커널들 모두를 가지고 사전 처리된 폴드된 특징 데이터의 동일한 부분을 컨볼브하는 것은, 복수의 곱셈기들에 의해, 복수의 폴드된 컨볼루션 커널들의 대응하는 화소와 사전 처리된 폴드된 특징 데이터 각각에서의 복수의 화소들의 곱(product)들을 동시에 계산하는 것을 포함하는, 상기 이동시키는 것, 또는
    최초의 컨볼루션 커널에 대응하는 폴드된 컨볼루션 커널들 각각을 가지고 전체 사전 처리된 폴드된 특징 데이터를 각각 컨볼브하는 것을 포함하고,
    상기 폴드된 컨볼루션 커널들 각각은 제1 스트라이드와 같은 제1 치수로 스트라이드를 가지고,
    상기 최초의 컨볼루션 커널이 Nx와 같은 제1 치수로 스트라이드를 가질 때에는, 폴드된 컨볼루션 커널들 각각이 제1 치수로 스트라이드(1)를 가지는, 방법.
  7. 제4 항에 있어서,
    적어도 하나의 치수로 사전 처리된 최초의 컨볼루션 커널을 폴드하는 것은:
    Sx가 제1 치수로 최초의 컨볼루션 커널의 제1 스트라이드이고, Ex가 1 이상이고 Nx와 Sx에 의존적이며, kx가 0 이상이고 Ex 미만인 정수인 경우에, Ex 개의 제1 변환된 컨볼루션 커널들을 각각 발생시키기 위해, 제1 치수로 사전 처리된 최초의 컨볼루션 커널의 시작 경계선에서 패드된 kx×Sx개의 제로 슬라이스들을 패드하는 것; 및
    대응하는 제1 폴드된 컨볼루션 커널을 발생시키기 위해, 함께 깊이에서의 제1 치수로 각각의 Nx개의 연속된 슬라이스들을 스플라이스함으로써, 제1 치수로 각각의 제1 변환된 컨볼루션 커널에 대한 제2 폴딩을 수행하는 것을 포함하고,
    제1 치수로 각각의 제1 변환된 컨볼루션 커널의 (ikx×NX+jkx)번째 슬라이스에서의 모든 Cx개의 채널들의 데이터는, 제1 치수로 대응하는 제1 폴드된 컨볼루션의 (ikx)개의 슬라이스에서의 (jkx×Cx)번째 채널로부터 시작하는 모든 연속된 Cx개의 채널들의 데이터에 대응하고, 이 경우 ikx는 0 이상인 정수이고, jkx는 0 이상이고 Nx 미만인 정수인, 방법.
  8. 제7 항에 있어서,
    적어도 하나의 치수로 폴드되지 않은 특징 데이터를 폴드하는 것은:
    제2 치수가 폭과 높이 중 하나이고, Ny가 1보다 큰 정수인 경우에, 함께 깊이에서의 제2 치수로 모든 Ny개의 연속된 슬라이스를 스플라이스함으로써, 제2 치수로 제1 폴딩의 결과에 대한 제3 폴딩을 수행하는 것을 더 포함하고,
    제2 치수로 상기 제1 폴딩의 결과의 (ify×Ny+jfy)번째 슬라이스에서의 모든 Cy개의 채널들의 데이터는, 제2 치수로 상기 제3 폴딩의 결과의 (ify)개의 슬라이스에서의 (jfy×Cy)번째 채널로부터 시작하는 연속된 Cy개의 채널들의 데이터에 대응하고, 이 경우 ify는 0 이상인 정수이고, jfy는 0 이상이고 Ny 미만인 정수이며, Cy는 0보다 큰 정수인, 방법.
  9. 제8 항에 있어서,
    사전 처리하는 것은:
    컨볼루션 층에 의해 특정된 패딩 방식에 따라서 제2 치수로 폴드되지 않은 특징 데이터의 시작 경계선에서, 0 이상인 제3 패딩 양(P3)을 결정하는 것;
    "
    Figure 112018128980539-pat00022
    "가 업워드 라운딩 연산을 나타내고, 제2 치수로 제3 폴딩의 결과의 시작 경계선에서
    Figure 112018128980539-pat00023
    개의 제로 슬라이스를 패드하는 것; 및
    제2 치수로 최초의 컨볼루션 커널의 시작 경계선에서
    Figure 112018128980539-pat00024
    *Ny-P3개의 제로 슬라이스를 패드하는 것을 포함하는, 방법.
  10. 제8 항에 있어서,
    적어도 하나의 치수로 사전 처리된 최초의 컨볼루션 커널을 폴드하는 것은:
    Sy가 제2 치수로 최초의 컨볼루션 커널의 제2 스트라이드이고, Ey가 1 이상이고 Ny와 Sy에 의존적이며, ky가 0 이상이고 Ey 미만인 정수인 경우에, 각각의 제1 폴드된 컨볼루션 커널에 대해서 Ey개의 제2 변환된 컨볼루션 커널들을 발생시키기 위해, 제2 치수로 제1 폴드된 컨볼루션 커널의 시작 경계선에서 ky×Sy개의 제로 슬라이스를 패드하는 것; 및
    제2 변환된 컨볼루션 커널에 대응하는 제2 폴드된 컨볼루션 커널을 발생시키기 위해, 함께 깊이에서의 제2 치수로 모든 Ny개의 연속된 슬라이스들을 스플라이스함으로써, 제2 치수로 각각의 제2 변환된 컨볼루션 커널에 대한 제4 폴딩을 수행하는 것을 더 포함하고,
    제2 치수로 각각의 제2 변환된 컨볼루션 커널의 (iky×Ny+jky)번째 슬라이스에서의 모든 Cy개의 채널들의 데이터는, 제2 치수로 각각의 제2 변환된 컨볼루션의 (iky)번째 슬라이스에서의 (jky×Cy)번째 채널로부터 시작하는 연속된 Cy개의 채널들의 데이터에 대응하고, 이 경우 iky는 0 이상인 정수이고, jky는 0 이상이고 Ny 미만인 정수인, 방법.
  11. 제8 항에 있어서,
    상기 최초의 컨볼루션 커널은 Ny와 같지 않은 제2 치수로 제2 스트라이드를 가지고, 컨볼브하는 것은:
    최초의 컨볼루션 커널에 대응하는 폴드된 컨볼루션 커널들 모두를 가지고 사전 처리된 폴드된 특징 데이터의 동일한 부분을 컨볼브한 후, 제2 치수로 제2 스트라이드만큼 동시에 최초의 컨볼루션 커널에 대응하는 폴드된 컨볼루션 커널들 모두를 이동시키는 것, 또는
    최초의 컨볼루션 커널에 대응하는 폴드된 컨볼루션 커널들 각각을 가지고 전체 사전 처리된 폴드된 특징 데이터를 각각 컨볼브하는 것을 더 포함하고, 상기 폴드된 컨볼루션 커널들 각각은 제2 스트라이드와 같은 제2 치수로 스트라이드를 가지고,
    상기 최초의 컨볼루션 커널이 Ny와 같은 제2 치수로 제2 스트라이드를 가질 때에는, 폴드된 컨볼루션 커널들 각각이 제2 치수로 스트라이드(1)를 가지는, 방법.
  12. 컨볼루션 신경망에서 컨볼루션 층의 연산을 수행하기 위한 장치로서,
    메모리에 저장된 명령어들을 실행하도록 구성된 하나 이상의 프로세서를 포함하고, 상기 명령어들을 실행하는 것은 상기 하나 이상의 프로세서로 하여금 다음 단계들, 즉:
    상기 컨볼루션 층에 제공된 폴드되지 않은 특징 데이터와 상기 컨볼루션 층의 최초의 컨볼루션 커널을 DRAM으로부터 판독하는 단계;
    폴드된 특징 데이터를 발생시키기 위해, 폭과 높이의 적어도 하나의 치수로 폴드되지 않은 특징 데이터를 폴드하는 단계;
    폴드된 특징 데이터와 최초의 컨볼루션 커널을 사전 처리하는 단계;
    사전 처리된 폴드된 특징 데이터를 SRAM에 저장하는 단계;
    상기 최초의 컨볼루션 커널에 대응하는 하나 이상의 폴드된 컨볼루션 커널들을 발생시키기 위해, 적어도 하나의 치수로 사전 처리된 최초의 컨볼루션 커널을 폴드하는 단계;
    상기 하나 이상의 폴드된 컨볼루션 커널들을 상기 SRAM에 저장하는 단계; 및
    상기 하나 이상의 폴드된 컨볼루션 커널들로 사전 처리된 폴드된 특징 데이터를 컨볼브하기 위한 계산 유닛에 상기 SRAM으로부터 사전 처리된 폴드된 특징 데이터와 하나 이상의 폴드된 컨볼루션 커널들을 판독하는 단계를 수행하게 하는 것인, 장치.
  13. 컨볼루션 신경망에서 컨볼루션 층의 연산을 수행하기 위한 장치로서,
    명령어들을 저장하는 메모리; 및
    상기 명령어들을 실행하도록 구성된 하나 이상의 프로세서를 포함하고,
    상기 명령어들을 실행하는 것은 상기 하나 이상의 프로세서로 하여금 제1 항 내지 제11 항 중 어느 한 항에 따른 방법을 수행하게 하는 것인, 장치.
  14. 명령어들을 저장하는 비일시적 저장 매체로서,
    상기 명령어들은 하나 이상의 프로세서에 의해 실행될 때, 제1 항 내지 제11 항 중 어느 한 항에 따른 방법을 상기 하나 이상의 프로세서가 수행하게 하는, 비일시적 저장 매체.
  15. 삭제
KR1020180149479A 2017-11-28 2018-11-28 컨볼루션 신경망에서 컨볼루션 층들의 연산을 수행하기 위한 방법 및 장치 KR102275499B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201711212061.4 2017-11-28
CN201711212061.4A CN107729994B (zh) 2017-11-28 2017-11-28 执行卷积神经网络中的卷积层的运算的方法和装置

Publications (2)

Publication Number Publication Date
KR20190062304A KR20190062304A (ko) 2019-06-05
KR102275499B1 true KR102275499B1 (ko) 2021-07-08

Family

ID=61218640

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180149479A KR102275499B1 (ko) 2017-11-28 2018-11-28 컨볼루션 신경망에서 컨볼루션 층들의 연산을 수행하기 위한 방법 및 장치

Country Status (5)

Country Link
US (1) US11822616B2 (ko)
EP (1) EP3489862B1 (ko)
JP (1) JP6775565B2 (ko)
KR (1) KR102275499B1 (ko)
CN (1) CN107729994B (ko)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110135553B (zh) * 2018-02-09 2021-09-03 宏达国际电子股份有限公司 卷积神经网络的调整方法及电子装置
CN108984426B (zh) * 2018-08-03 2021-01-26 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
CN109190758B (zh) * 2018-09-04 2021-06-15 地平线(上海)人工智能技术有限公司 用于展开卷积神经网络的张量数据的方法和装置
CN109255438B (zh) * 2018-09-17 2020-07-17 地平线(上海)人工智能技术有限公司 调整张量数据的方法和装置
KR102637733B1 (ko) * 2018-10-31 2024-02-19 삼성전자주식회사 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법
CN109948787B (zh) * 2019-02-26 2021-01-08 山东师范大学 用于神经网络卷积层的运算装置、芯片及方法
US10891537B2 (en) * 2019-03-20 2021-01-12 Huawei Technologies Co., Ltd. Convolutional neural network-based image processing method and image processing apparatus
CN110188773B (zh) * 2019-05-24 2021-06-22 北京迈格威科技有限公司 图像处理方法及装置
TWI719512B (zh) * 2019-06-24 2021-02-21 瑞昱半導體股份有限公司 使用像素通道置亂的卷積神經網路的演算方法與系統
US20200410319A1 (en) * 2019-06-26 2020-12-31 Micron Technology, Inc. Stacked artificial neural networks
US11699081B2 (en) 2019-12-20 2023-07-11 Meta Platforms, Inc. Systems and methods for reducing data movement during convolution operations in artificial neural networks
US20210216868A1 (en) * 2020-01-08 2021-07-15 Maxim Integrated Products, Inc. Systems and methods for reducing memory requirements in neural networks
JP7289427B2 (ja) * 2020-02-28 2023-06-12 株式会社Pros Cons プログラム、情報処理方法及び情報処理装置
CN111860780A (zh) * 2020-07-10 2020-10-30 逢亿科技(上海)有限公司 不规则卷积核卷积神经网络硬件加速系统及计算方法
CN111985618B (zh) * 2020-08-14 2024-03-05 杭州海康威视数字技术股份有限公司 3d卷积神经网络在神经网络处理器上的处理方法和装置
CN111985634B (zh) * 2020-08-21 2024-06-14 北京灵汐科技有限公司 神经网络的运算方法、装置、计算机设备及存储介质
CN111931123B (zh) * 2020-10-14 2020-12-25 南京风兴科技有限公司 边界卷积计算方法、装置、硬件加速器及计算机设备
EP4273751A1 (en) 2020-12-31 2023-11-08 Cambricon Technologies Corporation Limited Data processing apparatus and method for executing neural network model, and related products
CN112668717B (zh) * 2021-01-04 2023-06-02 哈尔滨工业大学 一种面向神经网络模型优化的数据处理方法和装置
CN112799598B (zh) * 2021-02-08 2022-07-15 清华大学 一种数据处理方法、处理器及电子设备
CN112686377B (zh) * 2021-03-18 2021-07-02 北京地平线机器人技术研发有限公司 利用卷积硬件对特征数据进行反卷积处理的方法和装置
CN113313787B (zh) * 2021-05-31 2023-11-07 上海阵量智能科技有限公司 一种数据处理方法、装置、计算机设备和存储介质
CN114492730A (zh) * 2021-12-23 2022-05-13 北京地平线信息技术有限公司 神经网络模型的编译方法和装置、电子设备和存储介质
CN114648107A (zh) * 2022-03-10 2022-06-21 北京宏景智驾科技有限公司 神经网络输入图像点云卷积层计算的效率提升方法及电路
CN115348432B (zh) * 2022-08-15 2024-05-07 上海壁仞科技股份有限公司 数据处理方法及装置、图像处理方法、电子设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013061958A (ja) 2002-01-10 2013-04-04 Massively Parallel Technologies Inc 並列処理システム及び方法
US20170112372A1 (en) 2015-10-23 2017-04-27 International Business Machines Corporation Automatically detecting eye type in retinal fundus images

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6469290A (en) 1987-09-09 1989-03-15 Mitsubishi Heavy Ind Ltd Current command generator circuit
US5745872A (en) 1996-05-07 1998-04-28 Texas Instruments Incorporated Method and system for compensating speech signals using vector quantization codebook adaptation
JP4957150B2 (ja) * 2006-09-27 2012-06-20 株式会社ナカヨ通信機 Ip内線電話システム、主装置、ip内線電話機、および呼出制御方法
US8634604B2 (en) * 2008-05-05 2014-01-21 Sonavation, Inc. Method and system for enhanced image alignment
US10360497B2 (en) * 2014-07-16 2019-07-23 Qualcomm Incorporated Decomposing convolution operation in neural networks
EP3035204B1 (en) * 2014-12-19 2018-08-15 Intel Corporation Storage device and method for performing convolution operations
US20160358099A1 (en) * 2015-06-04 2016-12-08 The Boeing Company Advanced analytical infrastructure for machine learning
US10706348B2 (en) 2016-07-13 2020-07-07 Google Llc Superpixel methods for convolutional neural networks
CN106447030B (zh) * 2016-08-30 2021-09-21 深圳市诺比邻科技有限公司 卷积神经网络的计算资源优化方法及系统
US10169298B1 (en) * 2017-05-11 2019-01-01 NovuMind Limited Native tensor processor, using outer product unit

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013061958A (ja) 2002-01-10 2013-04-04 Massively Parallel Technologies Inc 並列処理システム及び方法
US20170112372A1 (en) 2015-10-23 2017-04-27 International Business Machines Corporation Automatically detecting eye type in retinal fundus images

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Qiang Lan 외, "High Performance Implementation of 3D Convolutional Neural Networks on a GPU", Computational Intelligence and Neuroscience, 2017.11.08*
Qiang Lan 외, "High Performance Implementation of 3D Convolutional*
Xiaoming Chen 외, "Optimizing Memory Efficiency for Convolution Kernels*

Also Published As

Publication number Publication date
EP3489862B1 (en) 2021-08-11
US20190163716A1 (en) 2019-05-30
JP6775565B2 (ja) 2020-10-28
CN107729994B (zh) 2020-05-26
CN107729994A (zh) 2018-02-23
KR20190062304A (ko) 2019-06-05
US11822616B2 (en) 2023-11-21
EP3489862A1 (en) 2019-05-29
JP2019125351A (ja) 2019-07-25

Similar Documents

Publication Publication Date Title
KR102275499B1 (ko) 컨볼루션 신경망에서 컨볼루션 층들의 연산을 수행하기 위한 방법 및 장치
US11468301B2 (en) Method and apparatus for performing operation of convolutional layer in convolutional neural network
KR102129895B1 (ko) 폴드된 특징 데이터에 대한 컨볼루션 연산을 수행하기 위한 방법 및 장치
JP7132824B2 (ja) ニューラルネットワークにおいてデコンボルーション演算を実行する装置及びその方法
US20240152729A1 (en) Convolutional neural network (cnn) processing method and apparatus performing high-speed and precision convolution operations
CN106447030B (zh) 卷积神经网络的计算资源优化方法及系统
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
KR20200066952A (ko) 확장 컨벌루션 연산을 수행하는 장치 및 방법
US11176457B2 (en) Method and apparatus for reconstructing 3D microstructure using neural network
US20220058450A1 (en) Tabular convolution and acceleration
Wu et al. A new approach to compute cnns for extremely large images
US11481994B2 (en) Method and apparatus for extracting image data in parallel from multiple convolution windows, device, and computer-readable storage medium
CN111667052B (zh) 专用神经网络加速器的标准与非标准卷积一致性变换方法
CN111667401B (zh) 多层次渐变图像风格迁移方法及系统
CN114662647A (zh) 处理用于神经网络的层的数据
CN111832336A (zh) 一种基于改进的c3d视频行为检测方法
US20240046413A1 (en) Methods of batch-based dnn processing for efficient analytics
US20230075264A1 (en) Methods and devices for efficient general deconvolution implementation on hardware accelerator
US20240203049A1 (en) Method and device for learning 3d model reconstruction
CN115205513A (zh) 图像预处理方法和装置、图像处理方法、电子设备及介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant