KR102065672B1 - 합성곱 연산을 위한 장치 및 방법 - Google Patents
합성곱 연산을 위한 장치 및 방법 Download PDFInfo
- Publication number
- KR102065672B1 KR102065672B1 KR1020180035104A KR20180035104A KR102065672B1 KR 102065672 B1 KR102065672 B1 KR 102065672B1 KR 1020180035104 A KR1020180035104 A KR 1020180035104A KR 20180035104 A KR20180035104 A KR 20180035104A KR 102065672 B1 KR102065672 B1 KR 102065672B1
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- partial
- matrix
- unit
- product
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 239000013598 vector Substances 0.000 claims abstract description 170
- 239000011159 matrix material Substances 0.000 claims abstract description 87
- 239000002131 composite material Substances 0.000 claims abstract description 66
- 238000004364 calculation method Methods 0.000 claims abstract description 30
- 239000000872 buffer Substances 0.000 claims description 128
- 230000015654 memory Effects 0.000 claims description 27
- 150000001875 compounds Chemical class 0.000 claims description 16
- 238000005192 partition Methods 0.000 claims description 12
- 238000000638 solvent extraction Methods 0.000 claims description 11
- 230000003247 decreasing effect Effects 0.000 claims 1
- 230000015572 biosynthetic process Effects 0.000 abstract description 2
- 238000003786 synthesis reaction Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 21
- 230000008569 process Effects 0.000 description 13
- 238000013528 artificial neural network Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 4
- 239000000284 extract Substances 0.000 description 4
- 230000004913 activation Effects 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000010606 normalization Methods 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 241000282472 Canis lupus familiaris Species 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
본 발명의 일 실시예에 따른 합성곱 연산 방법은, MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하는 단계, 상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터와, 상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 단계, 상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하는 단계 및 상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 단계를 포함할 수 있다.
Description
본 발명은 합성곱 신경망(convolution neural network, CNN)과 같은 특징 추출 모델을 이용하여 대상 데이터를 인식함에 있어서, 합성곱(convolution) 연산을 효율적으로 수행하기 위한 장치 및 방법에 관한 것이다.
영상 데이터 혹은 텍스트 데이터 등의 인식 대상 데이터를 자동으로 분석하여, 상기 인식 대상 데이터를 유형별로 분류하거나 상기 인식 대상 데이터에 포함된 정보를 추출해 내는 기술이 인공 지능(artificial intelligence, AI) 기술의 일종으로서 최근 각광받고 있다. 이와 같은 기술은 단순히 영상 데이터 내의 객체의 종류를 인식하는 것에 그치지 않고, 자율 주행, 의료 영상 판독, 보안 시스템 등 다양한 분야에서 이용될 수 있다.
특히 최근에는 딥 러닝(deep learning)과 같은 기계 학습(machine learning) 기법이 데이터 인식 기술에 적용되고 있다. 이와 같은 딥 러닝 기법 중 널리 알려진 합성곱 신경망 기법은 영상 데이터 인식에 있어 높은 성능을 보이고 있다.
다만, 합성곱 신경망 기법을 이용하여 인식 대상 데이터에 포함된 정보를 인식하는 과정에서는, 곱셈과 덧셈의 조합으로 이루어지는 합성곱(convolution) 연산이 다수 회 수행된다. 이와 같이 거듭되어 수행되는 방대한 연산량의 합성곱 연산은 합성곱 신경망 기법을 통한 데이터 인식에 걸림돌로 작용할 수 있다. 특히, 앞서 언급한 자율 주행과 같이 신속한 연산이 중요한 영상 데이터 인식 분야에 있어서는, 합성곱 연산에 소요되는 시간은 큰 문제가 될 수 있다.
또한, 상기 합성곱 연산을 효율적으로 수행하기 위한 방법에 대한 연구가 지금까지 여럿 있었지만, 이들 연구에 의한다 해도 알고리즘(algorithm)적 측면에서의 효율성을 달성하기 위한 하드웨어(hardware) 구성이 복잡해질 수 있는 등, 장치 구현 측면에서의 문제를 안고 있는 경우가 많았다.
본 발명이 해결하고자 하는 과제는, 합성곱 연산을 수행함에 있어서, 연산의 효율화와 장치 구현 관점에서의 합리화를 함께 달성할 수 있는, 합성곱 연산 장치 및 방법을 제공하는 것이다.
다만, 본 발명이 해결하고자 하는 과제는 이상에서 언급한 것으로 제한되지 않으며, 언급되지 않은 또 다른 해결하고자 하는 과제는 아래의 기재로부터 본 발명이 속하는 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
본 발명의 일 실시예에 따른 합성곱 연산 방법은, MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하는 단계, 상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터와, 상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 단계, 상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하는 단계 및 상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 단계를 포함할 수 있다.
본 발명의 일 실시예에 따른 합성곱 연산 장치는, MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하고, 상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터를 생성하는 제 1 버퍼부, 상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 제 2 버퍼부 및 상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하고, 상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 연산부를 포함할 수 있다.
본 발명의 일 실시예에 따르면, 합성곱 연산 장치의 버퍼(buffer)부를 단위 면적당 데이터 저장 효율이 높은 구조를 가지는 상위 버퍼부와 동시에 여러 위치의 데이터 값의 읽기가 가능한 구조의 하위 버퍼부의 2단계로 구성할 수 있다. 아울러, 하위 버퍼부에서의 데이터 저장 위치 선택 기법을 통해, 버퍼부 구성에 필요한 면적을 최소화할 수 있다.
이를 통해, 공간 활용의 효율성 등 장치 구현에 있어서의 효과를 달성할 수 있으며, 연산의 효율성 역시 함께 달성할 수 있다. 아울러, 다양한 크기의 합성곱 커널과 스캔 간격 등이 지원될 수 있으므로, 편의성이 더욱 향상될 수 있다.
도 1a 내지 1c는 합성곱 연산에서의 제로 스킵(zero skip)에 대해 개념적으로 설명하기 위한 도면이다.
도 2는 합성곱 신경망 기법을 적용하기 위한 하드웨어 장치를 예시적으로 도시한 도면이다.
도 3a 내지 3c는 본 발명의 일 실시예에 따른 합성곱 연산 장치의 구성에 대해 설명하기 위한 도면이다.
도 4a 내지 5c는 본 발명의 일 실시예에 따른 합성곱 연산 장치에 의해 수행되는 합성곱 연산 과정에 대해 설명하기 위한 도면이다.
도 6a 내지 6c는 본 발명의 일 실시예에 따른 합성곱 연산 과정 중 합성곱 커널 분할이 적용된 경우에 대해 설명하기 위한 도면이다.
도 7a 및 7b는 본 발명의 일 실시예에 따른 합성곱 연산 과정 중 스캔 간격 확대가 적용된 경우에 대해 설명하기 위한 도면이다.
도 8은 본 발명의 일 실시예에 따른 합성곱 연산 방법의 각 단계를 도시한 도면이다.
도 9는 본 발명의 일 실시예에 따른 합성곱 연산 방법 중 합성곱 커널 분할이 적용된 경우의 각 단계를 도시한 도면이다.
도 2는 합성곱 신경망 기법을 적용하기 위한 하드웨어 장치를 예시적으로 도시한 도면이다.
도 3a 내지 3c는 본 발명의 일 실시예에 따른 합성곱 연산 장치의 구성에 대해 설명하기 위한 도면이다.
도 4a 내지 5c는 본 발명의 일 실시예에 따른 합성곱 연산 장치에 의해 수행되는 합성곱 연산 과정에 대해 설명하기 위한 도면이다.
도 6a 내지 6c는 본 발명의 일 실시예에 따른 합성곱 연산 과정 중 합성곱 커널 분할이 적용된 경우에 대해 설명하기 위한 도면이다.
도 7a 및 7b는 본 발명의 일 실시예에 따른 합성곱 연산 과정 중 스캔 간격 확대가 적용된 경우에 대해 설명하기 위한 도면이다.
도 8은 본 발명의 일 실시예에 따른 합성곱 연산 방법의 각 단계를 도시한 도면이다.
도 9는 본 발명의 일 실시예에 따른 합성곱 연산 방법 중 합성곱 커널 분할이 적용된 경우의 각 단계를 도시한 도면이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
본 발명의 실시예들을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명의 실시예에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 1a 내지 1c는 합성곱 연산에서의 제로 스킵(zero skip)에 대해 개념적으로 설명하기 위한 도면이다. 도 1a를 보면, 인식 대상이 되는 대상 데이터의 특징을 나타내는 특징 데이터(feature data, 10)과, 상기 특징 데이터로부터 특징을 추출하기 위한 일종의 필터(filter) 역할을 하는 합성곱 커널(convolution kernel, 20)이 있음을 볼 수 있다. 특징 데이터(10)와 합성곱 커널(20)은 모두 행렬(matrix) 형태로 표현될 수 있다. 특징 데이터(10)에 합성곱 커널(20)을 적용하여 합성곱 연산을 수행할 경우, 역시 행렬 형태를 갖는 출력 데이터(30)가 도출될 수 있다.
이하에서는 출력 데이터(30) 중, 행 번호와 열 번호가 가장 앞서는 원소(Output(0,0))가 계산되는 과정에 대해 살펴보도록 한다. 상기 과정을 위해, 특징 데이터(10)의 일부로서 합성곱 커널(20)이 적용될 부분 행렬(11)의 (i, j)번째 원소에, 합성곱 커널(20)의 (i, j)번째 원소를 곱하는 과정을 모든 i 및 j에 대해 수행한 후, 상기 수행의 결과를 모두 더할 수 있다. 물론, 이와 같은 부분 행렬(11)은 합성곱 커널(20)과 같은 차원(dimension)을 가질 수 있다.
이 경우, 상기 수행의 결과는 7이 됨을 볼 수 있으며, 상기 결과의 도출을 위한 총 곱셈 수는 특징 데이터(10) 혹은 합성곱 커널(20)의 원소의 총 수와 같은 9회가 됨을 아울러 알 수 있다. 출력 데이터(30)의 총 원소 수는 16개이므로, 전체 출력 데이터(30)의 도출을 위한 곱셈의 총 횟수는 9에 16을 곱한 144가 된다.
일반적인 합성곱 신경망 모델의 특성상, 합성곱 연산의 대상이 되는 각 원소 중 0이 존재할 가능성이 매우 높다. 이에 착안하여, 곱셈의 대상인 두 개의 원소 중 0이 존재할 경우, 해당 곱셈을 생략하고 넘어가는 방법을 생각할 수 있다. 도 1b는 합성곱 커널(20)의 원소 중 0인 원소에 관한 곱셈을 생략하는 방법을 도시하고 있다. 이에 따르면, 합성곱 커널(20)의 9개의 원소 중 5개의 원소의 값이 0이므로, 출력 데이터(30)의 한 원소를 구하기 위한 곱셈의 횟수는 4회가 되며, 이에 전체 출력 데이터(30)의 도출을 위한 곱셈의 총 횟수는 4에 16을 곱한 64가 된다.
도 1c는 상기 도 1b의 방법을 보다 발전시킨 경우를 나타내고 있다. 도 1c에 의하면, 합성곱 커널(20)에 존재하는 0인 원소뿐 아니라, 특징 데이터(10)에 존재하는 0인 원소까지 고려하게 된다. 이에, 곱셈의 대상이 되는 두 원소 모두가 0이 아닌 경우에만 실제로 곱셈을 수행하게 되며, 이에 따라 도 1c의 경우 전체 출력 데이터(30)의 도출을 위한 곱셈의 총 횟수는 21에 불과하게 된다.
곱셈 연산은 그 자체로 하드웨어 자원과 시간을 소모하므로, 곱셈 연산의 횟수가 줄어든다는 것은 합성곱 연산의 효율이 증가한다는 것을 의미한다. 지금까지 살펴본 바와 같이, 곱셈의 대상 중 적어도 하나가 0인 경우 그 결과가 0이 됨이 명백하므로, 해당 경우에는 곱셈 연산을 생략하도록 하면 합성곱 연산의 효율을 대폭 증대시킬 수 있다. 하지만, 이와 같은 착상을 실제로 운용하기 위한 구체적인 방법과, 상기 방법을 수행하기 위한 하드웨어 장치의 적절한 구현이 필요하다.
도 2는 합성곱 신경망 기법을 적용하기 위한 하드웨어 장치를 예시적으로 도시한 도면이다. 도 2의 하드웨어 장치(50)는 하드웨어 장치(50)의 전체적인 동작을 제어하기 위한 프로세서(processor, 60), 하드웨어 장치(50)의 동작을 위해 필요한 데이터를 저장하는 메모리(memory, 70), 그리고 합성곱 신경망 기법에 필요한 합성곱 연산을 수행하는 신경망 가속기(neural network accelerator, 80)를 포함할 수 있다.
특히 신경망 가속기(80)는, 신경망 가속기(80)의 동작을 제어하기 위한 컨트롤러(81), 활성화(activation) 연산을 수행하는 활성화 연산부(82), 풀링(pooling) 연산을 수행하는 풀링 연산부(83), 레이어(layer) 간의 데이터 전달 시 정규화(normalization)을 수행하는 정규화 연산부(84), 데이터 저장을 위한 메모리(85) 및 합성곱 연산을 실제로 수행하는 합성곱 연산부(86)를 포함할 수 있다. 합성곱 연산부(86)에는 합성곱 연산의 적용 대상이 되는 입력 데이터의 저장을 위한 입력 버퍼(87), 상기 입력 데이터에 합성곱 연산을 적용하는 연산 유닛(PE, 88) 및 상기 연산 유닛(88)에 의해 수행된 합성곱 연산의 결과를 저장하는 출력 버퍼(89)를 포함할 수 있다.
도 3a 내지 3c는 본 발명의 일 실시예에 따른 합성곱 연산 장치의 구성을 개략적으로 도시한 도면이다. 도 3a에 도시된 바와 같이, 본 발명의 일 실시예에 따른 합성곱 연산 장치(100)는 상위 버퍼부(110), 하위 버퍼부(120), 연산부(130), 곱셈 버퍼(140), 덧셈기(150) 및 출력 버퍼(160)를 포함할 수 있다. 다만, 도 3a 내지 3c에서 설명할 합성곱 연산 장치(100)는 본 발명의 일 실시예에 불과하므로, 도 3a 내지 3c에 의해 본 발명의 기술적 사상이 제한적으로 해석되는 것은 아니다.
상위 버퍼부(110)는 특징 데이터 버퍼부(111)와 합성곱 커널 버퍼부(112)를 포함할 수 있다. 특징 데이터 버퍼부(111)는 도 1a 내지 도 1c를 참조하여 설명한 특징 데이터를, 합성곱 커널 버퍼부(112)는 합성곱 커널을 각각 저장할 수 있다. 특징 데이터 버퍼부(111)는 하위 버퍼부(120)에 비해 많은 양의 데이터를 저장해야 하는 반면, 한 개 내지 두 개의 하위 버퍼부(120)에만 자신이 저장하고 있는 0데이터의 값을 전달하면 되기 때문에, 데이터 읽기 포트의 수가 1개 내지 2개로 제한되지만 면적 대비 저장 효율이 높은 SRAM(static random access memory)을 이용하여 구현될 수 있다.
하위 버퍼부(120)는 특정한 시간 동안에 합성곱 연산에 필요한 특징 데이터및 합성곱 커널을 상위 버퍼부(110)로부터 추출하여 저장하고, 이를 복수의 곱셈 유닛(multiplier, 131)을 포함한 연산부(130)에 전달할 수 있다. 하위 버퍼부(120)는 제 1 버퍼부(121)와 제 2 버퍼부(122)를 포함할 수 있다. 제 1 버퍼부(121)는 특징 데이터 버퍼부(111)로부터, 제 2 버퍼부(122)는 합성곱 커널 버퍼부(112)로부터 각각 필요한 데이터를 획득할 수 있다. 이와 같은 하위 버퍼부(120)는, 연산부(130) 내의 복수의 곱셈 유닛(multiplier, 131)에 데이터를 끊임 없이 공급할 수 있어야 하기 때문에, 공간 활용 측면의 효율성은 떨어지더라도 동시에 여러 위치의 데이터 값을 읽어서 제공할 수 있도록 플립플롭(flip-flop)을 이용한 구조로 구현하는 것이 바람직하다.
연산부(130)는 하위 버퍼부(120)에 저장된 데이터를 이용하여 곱셈 연산을 수행하기 위한 복수의 곱셈 유닛(multiplier, 131)을 포함할 수 있다. 이와 같은 각 곱셈 유닛(131)은 특징 데이터와 한 원소와 합성곱 커널의 한 원소 간의 곱셈을 병렬적으로 수행할 수 있다. 즉, 각 개별 곱셈 연산은 상기 복수의 곱셈 유닛(131) 각각에 나뉘어 할당됨으로써 수행될 수 있다.
곱셈 버퍼(140)는 연산부(130)의 각 곱셈 유닛(131)에 의해 수행된 곱셈의 결과를 저장할 수 있다. 덧셈기(150)는 상기 곱셈 버퍼(140)에 저장된 곱셈의 결과를 서로 더하여 출력 버퍼(160)로 전달할 수 있다. 출력 버퍼(160)는 합성곱 연산의 최종 결과를 출력할 수 있다.
도 3b는 하위 버퍼부(120) 중 제 1 버퍼부(121)의 상세한 구조를 표현하고 있다. 도 3b에 도시된 바는 제 1 버퍼부(121)뿐 아니라 제 2 버퍼부(122)에도 적용될 수 있다. 즉, 제 2 버퍼부(122)는 제 1 버퍼부(121)와 실질적으로 같은 구조를 가질 수 있다. 도 3b에서 제 1 버퍼부(121)의 경계 내에 있는 구성 요소는 모두 제 1 버퍼부(121)에 포함된 하위 구성 요소라고 생각해도 좋다.
제 1 버퍼부(121)는 데이터 어레이(125)와 플래그 어레이(126)를 포함할 수 있다. 데이터 어레이(125)는 복수의 단위 기억 장치(125a)를 포함할 수 있으며, 상기 단위 기억 장치(125a) 하나는 하나의 플립플롭일 수 있다. 상기 복수의 단위 기억 장치(125a)는 PхQ 행렬을 이루도록 배열됨으로써 데이터 어레이(125)를 구성할 수 있다. 도 3b에서는 P의 값이 4, Q의 값이 16인 것으로 예시적으로 도시되어 있음을 확인할 수 있다.
마찬가지로, 플래그 어레이(126)는 역시 복수의 단위 기억 장치(126a)를 포함할 수 있으며, 상기 단위 기억 장치(126a) 하나는 하나의 플립플롭일 수 있다. 상기 복수의 단위 기억 장치(126a) 역시 상기 데이터 어레이(125)의 단위 기억 장치(125a)와 마찬가지로 PхQ 행렬을 이루도록 배열됨으로써 플래그 어레이(126)를 구성할 수 있다.
데이터 어레이(125)와 플래그 어레이(126) 모두, 특징 데이터 버퍼부(111)로부터 특징 데이터, 보다 구체적으로는 특징 데이터의 원소 중 한 번에 데이터 어레이(125)에 저장될 수 있을 만큼의 원소를 수신할 수 있다.
데이터 어레이(125)에 포함된 하나의 단위 기억 장치(125a)에는 특징 데이터의 원소 하나가 저장될 수 있다. 일반적으로 상위 버퍼부(110)의 데이터 읽기 포트 (data read port)는 한 사이클(cycle)에 복수 개의(M개의) 데이터를 하위 버퍼부(120)로 전달할 수 있도록 구성되며, 하위 버퍼부(120)에 존재하는 단위 기억 장치(125a)는 M개의 데이터 중 임의의 한 데이터를 선택해서 저장할 수 있도록 하기 위해 각각의 데이터 어레이(125)의 단위 기억 장치(125a)의 입력 측에 M-to-1 멀티플렉서(multiplixer, MUX)를 사용하는 형태로 구성된다.
그러나 데이터 어레이(125)의 각 단위 기억장치(125a)의 입력 측마다 M-to-1 멀티플렉서를 사용할 경우 하위 버퍼부(120)의 면적 효율성이 심각하게 저하되는 문제가 발생하게 된다. 이에 본 발명에서 제안하는 하위 버퍼부(120) 구조에서는, 데이터 어레이(125)의 개별 단위 기억 장치(125a)가 상위 버퍼부(110)에서 전달된 M개의 복수 개의 데이터 중 고정된 위치의 한 개의 데이터에만 연결되도록 제한함으로써, 데이터 어레이(125)의 각 단위 기억 장치(125a)의 입력 측에 별도의 M-to-1 멀티플렉서를 사용하지 않도록 하고 있다.
데이터 어레이(125)의 개별 단위 기억 장치(125a)가 상위 버퍼부(110)의 읽기 포트(read port)를 통해 전달된 복수 개의 (M개의) 데이터 중 고정된 위치의 한 데이터에만 연결되도록 제한하면, 상위 버퍼부(110)에서 연속해서 위치했던 데이터들이 하위 버퍼부(120)에서는 연속해서 위치하지 않게 되기 때문에, 데이터 어레이(125)의 개별 단위 기억장치(125a)에 들어 있는 값이 유효한 값인지 의미 없는 더미(dummy) 값(즉, garbage value)인지에 대한 정보를 저장하고, 합성곱 연산 과정에서 현재 연산에 사용하고자 하는 단위 기억 장치(125a)에 저장된 값이 유효한 값인지를 확인하는 과정이 추가로 필요하게 된다. 그러나 제로 스킵 연산을 지원하는 연산부(130)가 있는 합성곱 연산 구조에서는, 데이터 어레이(125)의 단위 기억 장치(125a)에 의미 없는 더미 값이 들어 있을 때 해당 위치에 0의 값이 들어 있는 것과 같이 해석할 수 있도록 플래그 어레이(126)의 값을 설정함으로써, M-to-1 멀티플렉서를 제거하면서 필요했던 데이터 유효성 판단 작업을 위한 회로를 추가하지 않고도 유효한 값들만을 가지고 있는 데이터 어레이(125)의 단위 기억 장치(125a)만을 합성곱 연산에 사용할 수 있게 된다.
각 단위 기억 장치(125a)에 저장된 원소들은 멀티플렉서부(127)를 통해 제 1 버퍼부(121) 외부의 연산부(130)로 전달될 수 있다. 멀티플렉서부(127)에는 복수의 멀티플렉서(multiplexer)가 포함될 수 있으며, 상기 각 멀티플렉서는 단위 기억 장치(125a)가 이루는 PхQ 행렬의 열 중 하나를 선택할 수 있다.
플래그 어레이(126)에 포함된 하나의 단위 기억 장치(126a)에는, 데이터 어레이(125)에 포함된, 상기 하나의 단위 기억 장치(126a)와 동일한 행과 열에 존재하는 단위 기억 장치(125a)의 값이 0인지 아닌지를 판별하기 위한 플래그 값이 저장될 수 있다. 이를 위해, 특징 데이터의 각 원소가 0인지를 검출하기 위한 복수의 0 검출기(129)가 구비될 수 있다. 상기 복수의 0 검출기(129)에 의해, 각 단위 기억 장치(126a)에 플래그 값이 저장될 수 있다.
각 단위 기억 장치(126a)에 저장된 원소들은 멀티플렉서부(128)를 통해 제 1 버퍼부(121) 외부의 연산부(130)로 전달될 수 있다. 멀티플렉서부(128)에는 복수의 멀티플렉서가 포함될 수 있으며, 상기 각 멀티플렉서는 단위 기억 장치(126a)가 이루는 PхQ 행렬의 열 중 하나를 선택할 수 있다.
한편, 제 2 버퍼부(122) 역시 전술한 제 1 버퍼부(121)와 동일한 구조를 가질 수 있다. 다만, 제 2 버퍼부(122)는 특징 데이터 버퍼부(111)가 아닌 합성곱 커널 버퍼부(112)로부터 데이터를 수신한다는 점이 다르다. 이에 따라, 제 2 버퍼부(122)의 데이터 어레이(125)에 포함된 단위 기억 장치(125a)들에는 합성곱 커널의 원소가 저장될 수 있으며, 제 2 버퍼부(122)의 플래그 어레이(126)에 포함된 단위 기억 장치(126a)들에는 상기 합성곱 커널의 원소들이 0인지의 여부를 알기 위한 플래그 값이 저장될 수 있다.
도 3c는 연산부(130)의 구성 및 동작에 대해 보다 자세히 설명하기 위한 도면이다. 연산부(130)는, 제 1 버퍼부(121)와 제 2 버퍼부(122)로부터 각각 입력받은 플래그 어레이(126)의 데이터(NZ_Flag)와, 연산부(130) 내에 존재하는 특징 데이터 시작 위치(feature_start_position) 및 합성곱 커널 시작 위치(weight_start_position)를 저장하는 레지스터(register)의 값을 이용해서, 데이터 어레이(125)에서 단위 기억 장치(125a)의 인덱스(index) 값이 특징 데이터 시작 위치(feature_start_position) 이상인 부분에 대해, 첫 번째로 0이 아닌(non-zero) 경우가 발생하는 위치를 찾아낼 수 있다.
연산부(130)는 상기 찾아낸 위치에 대하여, 제 1 버퍼부(121)와 제 2 버퍼부(122) 내의 데이터 어레이(125)에서 값을 읽어오게 되고, 읽어온 두 값을 곱한 후 ACC 레지스터(accumulation register, ACC_reg)에 저장되어 있는 값과 더할 수 있다. 특징 데이터 시작 위치(feature_start_position) 및 합성곱 커널 시작 위치(weight_start_position)의 값은, 현재 연산에 사용한 데이터 어레이(125)의 오프셋 인덱스(offset index) 값보다 1만큼 큰 값을 기존 값에 더하는 방식으로 갱신될 수 있다.
제 1 버퍼부(121)와 제 2 버퍼부(122)의 데이터 어레이(125)에는, 복수의 곱셈 유닛(131)이 합성곱 연산을 수행할 때에 필요한 특징 데이터 및 합성곱 커널의 값들이 저장되어 있으며, 각각의 곱셈 유닛(131)은 시작 위치를 적절히 선택함으로써 데이터 어레이(125)에서 자신이 담당할 부분을 연산하기 위해 필요한 값들을 데이터 어레이(125)에서 순서대로 접근할 수 있다. 이와 같이 도 3c를 참조하여 설명한 바는 후술할 도 4a 내지 7b 및 표 1의 구체적인 예시를 통해 보다 상세히 이해할 수 있을 것이다.도 3a 내지 3c를 참조하여 지금까지 설명한 합성곱 연산 장치(100)에 의하면, 멀티플렉서와 같은 하드웨어 장치를 최소한도로 사용하면서도 연산부(130)가 하위 버퍼부(120)에 저장된 데이터에 효율적으로 접근하여 합성곱 연산을 수행할 수 있다.
도 4a 내지 5c는 본 발명의 일 실시예에 따른 합성곱 연산 장치에 의해 수행되는 합성곱 연산 과정에 대해 설명하기 위한 도면이다. 도 4a를 보면, MxN 행렬(M과 N은 자연수, 도 4a에서는 M과 N은 각각 5와 6)인 특징 데이터(10)가 있음을 볼 수 있다. 이들 중, 도 3a 내지 3c에서 설명하는 합성곱 연산 장치(100)의 제 1 버퍼부(121)에 의해, 복수의 부분 행렬(11a, 11b, 11c, 11d)이 추출될 수 있다.
이들 복수의 부분 행렬 각각은 특징 데이터(10)의 서로 다른 일부 영역에 해당되며, 합성곱 커널과 동일한 차원을 갖는 KxL(K와 L은 자연수, 도 4a에서는 K와 L은 모두 3) 행렬일 수 있다. 부분 행렬의 개수는, 도 3a 내지 3c에서 설명한 합성곱 연산 장치(100)의 데이터 어레이(125)에 포함된 단위 기억 장치(125a)의 개수에 기초하여 결정될 수 있다.
제 1 버퍼부(121)는 상기 특징 데이터(10)의 원소 중, 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터를 생성할 수 있다. 도 4b를 보면, 이와 같은 제 1 벡터의 각 원소는 제 1 버퍼부(121)의 데이터 어레이(125)의 각 단위 기억 장치(125a)에 하나씩 저장될 수 있다. 또한, 제 2 버퍼부(122)는 상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성할 수 있다. 후술할 도 5c에 의하면, 이와 같은 제 2 벡터의 각 원소는 제 2 버퍼부(122)의 데이터 어레이(125)의 각 단위 기억 장치(125a)에 하나씩 저장될 수 있다.
이에 대해 보다 구체적으로 설명하면, 제 1 버퍼부(121)의 데이터 어레이(125) 혹은 제 2 버퍼부(122)의 데이터 어레이(125)에 포함된 단위 기억 장치(125a) 중, 행 번호가 동일한 단위 기억 장치끼리는 하나의 단위 기억 장치 세트(set)를 이룬다고 볼 수 있다. 상기 단위 기억 장치 세트 각각은 상위 버퍼부(110)에 저장된 특징 데이터 혹은 합성곱 커널의 서로 다른 열에 접근 가능하도록 연결될 수 있으며, 이러한 점은 도 3b를 통해서도 확인할 수 있다.
이 때, 하나의 단위 기억 장치 세트 내의 각 단위 기억 장치(125a)에는, 열 번호가 작은 단위 기억 장치(125a)부터, 상기 하나의 단위 기억 장치 세트에 연결된 특징 데이터 혹은 합성곱 커널의 열의 데이터 K개(합성곱 커널의 행의 개수)가 열 번호가 작은 순서에 따라 순차적으로 하나씩 채워질 수 있다.
연산부(130)는 제 1 벡터와 제 2 벡터를 이용하여 합성곱 연산을 수행할 수 있다. 보다 구체적으로, 연산부(130)는 상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하는 부분 벡터를, 상기 제 1 벡터로부터 추출할 수 있다. 즉, 상기 각 부분 행렬에 대응되는 부분 벡터는, 제 1 벡터의 일부분이다. 따라서 하나의 부분 행렬 내에서 인접해 있는 두 원소는, 제 1 벡터 내에서도 인접해 있다.
연산부(130)는 상기 부분 행렬 각각에 대해, 해당 부분 행렬에 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행할 수 있다. 다음으로 연산부(130)는 상기 곱 수행의 결과를 모두 더함으로써, 합성곱 커널과의 합성곱 연산 결과를 모든 각 부분 행렬에 대해 산출할 수 있다. 위에서 설명하였듯이, 특정 부분 행렬에 대응되는 부분 벡터는 상기 특정 부분 행렬과 동일한 원소를 공유하고, 제 2 벡터는 합성곱 커널과 동일한 원소를 공유하므로, 부분 벡터와 제 2 벡터 간의 상기 연산을 통해, 부분 행렬과 합성곱 커널 간의 합성곱 연산이 수행된 것과 같은 결과를 얻을 수 있다.
아울러, 앞서 설명한 바와 같이, 상기 부분 벡터와 제 2 벡터의 원소 간의 곱은, 상기 곱의 대상이 되는 두 원소가 모두 0이 아닐 경우에 수행될 수 있다. 이와 같이 0이 아닌 원소를 판별하는 기능은, 제 1 플래그 벡터와 제 2 플래그 벡터에 의해 달성될 수 있다.
제 1 플래그 벡터는 제 1 벡터의 각 원소가 0인지의 여부를 판별하기 위한 벡터이며, 제 2 플래그 벡터는 제 2 벡터의 각 원소가 0인지의 여부를 판별하기 위한 벡터이다. 제 1 플래그 벡터는 제 1 버퍼부(121)에 의해, 제 2 플래그 벡터는 제 2 버퍼부(122)에 의해 각각 생성될 수 있다.
기본적으로 제 1 플래그 벡터는 제 1 벡터와 동일한 개수의 원소를 가질 수 있고, 제 2 플래그 벡터는 제 2 벡터와 동일한 개수의 원소를 가질 수 있다. 만일 제 1 벡터의 원소 중 i(i는 자연수)번째 원소가 0이라면 제 1 플래그 벡터의 i번째 원소 역시 0의 값을 갖게 되며, 제 2 벡터의 원소 중 j번째 원소가 0이라면 제 2 플래그 벡터의 j(j는 자연수)번째 원소 역시 0의 값을 갖게 된다. 연산부(130)는 이와 같은 제 1 플래그 벡터 및 제 2 플래그 벡터의 각 원소의 값을 확인함으로써, 제 1 벡터 혹은 제 2 벡터의 특정 원소의 값이 0인지 아닌지를 알 수 있다.
다만 도 4b를 보면, 데이터 어레이(125)에 저장된 제 1 벡터의 원소 중에는, 특징 데이터(10)의 원소가 아닌 원소(빗금 친 부분)도 포함될 수 있음을 볼 수 있다. 이는 데이터 어레이(125) 내에 단위 기억 장치(125a)가 배열된 구조와 관련이 있다. 도 3a의 단위 기억 장치(125a)는 4행 16열의 형태로 총 64개가 배열되어 있다. 다만 도 4a의 경우 합성곱 커널 및 각 부분 행렬의 행 수가 총 3개로, 상기 단위 기억 장치(125a)가 이루는 행 수(P = 4)보다 1개 부족하기 때문에, 제 1 벡터에 부분 행렬의 원소를 3개 채워넣은 후에는 1개의 더미(dummy) 값을 채워넣는 것을, 원소 4개를 주기로 반복할 수 있다. 이는 제 1 벡터뿐 아니라 제 2 벡터에도 동일하게 적용될 수 있으며, 이에 따라 제 2 벡터에도 합성곱 커널의 원소를 3개 채워넣은 후에는 1개의 더미 값을 채워넣는 것을, 원소 4개를 주기로 반복할 수 있다.
이를 일반화하면, 합성곱 커널과 부분 행렬의 행의 값인 K의 값이 소정 값(여기에서는 단위 기억 장치(125a)가 이루는 행 수 P)에 미달하는 경우, 합성곱 커널 및 부분 행렬의 (row, col) = (r, c) 위치에 있는 원소들은 제 1 벡터 및 제 2 벡터의 (P * c) + r 번째 위치에 저장되게 되며, 제 1 벡터 및 제 2 벡터의 그 외의 위치에는 임의의 더미(dummy) 값이 채워지게 된다.
이를 달리 말하면, 제 1 벡터 및 제 2 벡터의 i번째 위치(i는 자연수) 중 i mod P (i를 P로 나눈 나머지)의 값이 K 이하의 자연수가 되는 유효 위치에만 부분 행렬 혹은 합성곱 커널의 원소가 채워지고, 상기 유효 위치 외의 다른 위치에는 임의의 더미 값이 채워진다고 할 수 있다.
물론 상기 더미 값에 대해 실제로 곱셈이 이루어질 경우 정확한 합성곱 연산의 결과가 산출될 수 없다. 따라서, 연산부(130)는 제 1 벡터 및 제 2 벡터의 더미 값을 0으로 간주하게 된다. 도 4b를 보면, 상기 더미 값에 대응되는 위치의 플래그 어레이(126)의 원소(빗금 친 부분)를 보면, 0의 값을 가짐을 볼 수 있다.
도 5a 내지 5c는, 상기 도 4a 및 4b를 통해 설명한 내용을 예시적으로 표현하고 있다. 도 5a를 통해, 합성곱 커널(20)과, 특징 데이터(10)로부터 추출될 수 있는 각 부분 행렬(11a, 11b, 11c, 11d)를 확인할 수 있다. 합성곱 연산을 수행함에 있어 특징 데이터(10) 상에서의 합성곱 커널(20)의 스캔 방향을 행(row) 방향(가로 방향), 보다 구체적으로 오른쪽 방향이라고 가정하도록 한다. 아울러, 스캔 간격(stride)은 1(단위는 행렬의 원소의 개수)로 가정하도록 한다. 따라서 각 부분 행렬은 서로 1만큼의 간격을 두고 가로 방향으로 늘어서게 된다.
이를 일반화하면, 각 부분 행렬은 스캔 간격이 v(v는 자연수)일 경우, 복수의 부분 행렬은 상기 복수의 부분 행렬 각각이 특징 데이터(10) 상에서 인접한 부분 행렬과 v의 간격을 가지며 행 방향으로 정렬되도록 추출될 수 있다.
한편, 이하에서는 스캔 방향을 행 방향으로 계속 가정하고 설명하겠지만, 스캔 방향이 열(column) 방향일 경우에도 행에 관한 서술을 열에 관한 서술로 치환시키기만 하면 본 발명의 실시예가 그대로 적용될 수 있을 것이다.
도 5b에 도시된 바와 같이, 제 1 버퍼부(121)의 데이터 어레이(125)에는 상기 각 부분 행렬 중 적어도 하나의 부분 행렬에 속하는 특징 데이터(10)의 원소들이 저장될 수 있다. 이하에서는 제 1 벡터가 데이터 어레이(125) 내에서 정렬되는 기준에 대해 설명하도록 한다. 제 1 벡터의 각 원소들은, 특징 데이터(10) 내에서 가졌던 행 번호와 열 번호의 대소에 따라 제 1 벡터 내에서 정렬될 수 있다. 보다 구체적으로, 상기 각 원소들은 열 번호가 작을수록 제 1 벡터 내에서 앞쪽에 존재하고, 열 번호가 동일할 경우 행 번호가 작을수록 앞쪽에 존재하도록 정렬될 수 있다. 즉, 스캔 방향이 행 방향이기 때문에, 열 번호가 행 번호에 비해 정렬에 있어서의 우선 순위(priority)가 높도록 설정될 수 있다.
다만, 도 5b를 기준으로 보면, 데이터 어레이(125)에서 오른쪽에 있는 원소가 "앞에 있는 원소"로서 도시되어 있다. 이와 같은 도시 기준은 데이터 어레이(125) 혹은 플래그 어레이(126)를 도시한 모든 도면에 있어서 같다. 아울러, 전술한 바와 같이, 제 1 벡터에는 더미 값을 갖는 원소가 삽입될 수 있으며, 이에 따라 데이터 어레이(125)에는 일정한 간격으로 더미 값이 저장될 수 있다.
제 1 버퍼부(121)의 플래그 어레이(126)에는 제 1 플래그 벡터가 저장될 수 있다. 도 5b에서 보는 바와 같이, 제 1 플래그 벡터의 각 원소는 제 1 벡터의 어떤 원소가 0인지를 알려주게 된다. 또한 도 5b를 보면, 제 1 플래그 벡터의 원소 중 제 1 벡터의 더미 원소에 대응되는 위치의 값은 0임을 알 수 있다. 즉, 더미 원소는 실제 값이 어떻든 0으로 취급된다. 제 1 플래그 벡터의 원소 중 1인 값은, 해당 원소에 대응되는 위치에 존재하는 제 1 벡터의 원소의 값이 0이 아님을 나타낸다.
또한 도 5c를 보면, 제 2 버퍼부(122)의 데이터 어레이(125)에 합성곱 커널(20)로부터 추출된 제 2 벡터의 각 원소가 저장되며, 플래그 어레이(126)에는 상기 제 2 벡터의 각 원소의 값이 0인지를 나타내기 위한 제 2 플래그 벡터가 저장됨을 확인할 수 있다. 제 2 벡터의 원소 중 합성곱 커널(20)로부터 추출된 원소가 아닌 원소들은 더미 값을 갖게 되며, 이에 따라 상기 더미 값에 대응되는 위치에 존재하는 제 2 플래그 벡터의 원소들도 0의 값을 갖게 된다.
특징 데이터(10)의 각 부분 행렬(11a, 11b, 11c, 11d)은 제 1 벡터 상에서 저마다의 부분 벡터를 가질 수 있음은 앞서 설명한 바와 같다. 도 5b의 시작 위치는 각 부분 행렬이 제 1 벡터 상에서 어디에서부터 시작되는지를 나타낸다. 구체적으로, 연산부(130)의 각 곱셈 유닛(131) 중 4개의 곱셈 유닛 0, 1, 2, 3은 각각 부분 행렬 11a, 11b, 11c, 11d에 대한 합성곱 커널(20)과의 합성곱 연산을 병렬적으로 수행할 수 있는데, 상기 4개의 각 곱셈 유닛(131)은 도 5b에 도시된 바와 같은 시작 위치에서 데이터 어레이(125)에 대한 엑세스(access)를 시작함으로써, 자신이 담당하는 부분 행렬의 원소의 값을 획득할 수 있다.
이와 달리, 각각 상이한 부분 행렬들에 대해서도 합성곱 커널(20)은 동일하게 적용되므로, 합성곱 커널(20)로부터 도출된 제 2 벡터를 저장하는 도 5c의 데이터 어레이(125)에 있어서의 상기 각 곱셈 유닛(131)의 시작 위치는 모두 동일하게 적용된다.
아래 표 1은 상기 도 5a 내지 5c에 도시된 바와 같은 예시에서 합성곱 연산이 수행되는 과정에 대해 정리한 표이다. 본 발명의 일 실시예에 따른 방법이 적용될 경우, 도 5a 내지 5c의 예시에서의 합성곱 연산은 3사이클(cycle)이라는 짧은 시간 안에 종료될 수 있음을 확인할 수 있다.
도 6a 내지 6c는 본 발명의 일 실시예에 따른 합성곱 연산 과정 중 합성곱 커널 분할이 적용된 경우에 대해 설명하기 위한 도면이다. 도 6의 합성곱 커널(20)은 행 수가 7개로서, 도 3b에 도시된 합성곱 연산 장치(100)의 단위 기억 장치(125a)가 이루는 행 수인 4를 초과한다. 이와 같이 합성곱 커널(20)의 행 수가, 상기 단위 기억 장치(125a)의 행 수에 의해 결정될 수 있는 소정 값을 초과하는 경우, 합성곱 커널(20)과, 합성곱 커널(20)의 적용 대상이 될 부분 행렬을 분할하여 합성곱 연산을 수행할 수 있다.
합성곱 커널 분할이 적용되지 않는다면, 도 6a에서 보는 바와 같이 특징 데이터(10)로부터 부분 행렬(11)을 추출하여 그대로 합성곱 커널(20)과 합성곱 연산을 수행하게 될 것이다. 이와 달리 합성곱 커널 분할이 적용되면, 연산부(130)는 도 6a와 같이 부분 행렬(11)을 분할하여 두 개의 제 1 분할 행렬(11a, 11b)를 생성할 수 있으며, 또한 합성곱 커널(20)을 분할하여 두 개의 제 2 분할 행렬(20a, 20b)을 생성할 수 있다. 상기 분할 행렬들의 행 수는 상기 단위 기억 장치(125a)의 행 수와 일치하는 것이 바람직하겠지만, 합성곱 커널(20)의 행 수가 단위 기억 장치(125a)의 행 수의 배수가 아닐 경우에는 행 수가 단위 기억 장치(125a)의 행 수 미만인 분할 행렬이 존재할 수도 있다.
상기 내용을 일반화하면, 연산부(130)는 R개(R는 2 이상의 자연수)의 제 1 분할 행렬로 부분 행렬을 분할하고, R개의 제 2 분할 행렬로 합성곱 커널을 분할하며, 상기 제 1 분할 행렬 중 i(i는 1 이상 R 이하의 자연수)번째 행렬과 상기 제 2 분할 행렬 중 i번째 행렬 간의 합성곱 연산을 모든 i에 대해 수행한 결과를 결합하여, 상기 부분 행렬과 합성곱 커널(20) 간의 합성곱 연산 결과를 산출할 수 있다. 이 때, 제 1 분할 행렬 각각과 제 2 분할 행렬 각각은, 행의 수가 상기 단위 기억 장치(125a)의 행 수의 값을 넘지 않고 열의 수가 합성곱 커널(20)의 열의 수와 같도록 결정될 수 있다.
도 6b 및 6c는 이와 같은 합성곱 분할이 적용된 경우의 제 1 벡터 및 제 1 플래그 벡터에 대해 나타낸 것이다. 도 6b는 제 1 분할 행렬(11a)로부터 도출된 제 1 벡터와, 상기 제 1 벡터를 위한 제 1 플래그 벡터가 데이터 어레이(125)와 플래그 어레이(126)에 각각 저장된 상황을 나타낸 것이다. 도 6c는 제 1 분할 행렬(11b)로부터 도출된 제 1 벡터와, 상기 제 1 벡터를 위한 제 1 플래그 벡터가 데이터 어레이(125)와 플래그 어레이(126)에 각각 저장된 상황을 나타낸 것이다. 합성곱 커널 분할이 적용되었다는 것을 제외하면, 도 6b 및 6c의 경우에 있어서도, 도 5b 및 5c를 참조하여 설명한 바가 적용될 수 있다.
도 7a 및 7b는 본 발명의 일 실시예에 따른 합성곱 연산 과정 중 스캔 간격 확대가 적용된 경우에 대해 설명하기 위한 도면이다. 스캔 간격은 지금까지 설명한 바와 같이 1일 수도 있지만, 2 이상의 값일 수도 있다.
도 7a에 도시된 바에 의하면, 상기 스캔 간격은 2의 값을 갖는다. 이에 따라, 특징 데이터(10)의 각 부분 행렬(11a, 11b, 11c, 11d)은 특징 데이터(10) 내에서 2의 간격을 가지며 가로 방향으로 정렬될 수 있다. 도 7b는 각 부분 행렬(11a, 11b, 11c, 11d)로부터 도출된 제 1 벡터와, 상기 제 1 벡터를 위한 제 1 플래그 벡터가 데이터 어레이(125)와 플래그 어레이(126)에 각각 저장된 상황을 나타낸 것이다. 스캔 간격 확대가 적용되었다는 것을 제외하면, 도 7b의 경우에 있어서도, 도 5b 및 5c를 참조하여 설명한 바가 적용될 수 있다.
도 8은 본 발명의 일 실시예에 따른 합성곱 연산 방법의 각 단계를 도시한 도면이다. 도 8 및 후술할 도 9의 방법은 도 3a 내지 3c을 통해 설명한 합성곱 연산 장치(100)에 의해 수행될 수 있다. 단, 도 8 및 9에 도시된 방법은 본 발명의 일 실시예에 불과하므로 도 8 및 9에 의해 본 발명의 사상이 한정 해석되는 것은 아니며, 도 8 및 9에 도시된 방법의 각 단계는 경우에 따라 도면과 그 순서를 달리하여 수행될 수 있음은 물론이다.
우선, 특징 데이터와 합성곱 커널과 같은 필요한 데이터를 상위 버퍼(110)에 저장할 수 있다(S110). 합성곱 연산 장치(100)를 제어하기 위한 프로세서(미도시)로부터 합성곱 연산 시작 신호가 수신되면(S120), 하위 버퍼(120)는 상기 필요한 데이터를 상위 버퍼(110)로부터 전달받을 수 있다(S130). 그러면 연산부(130)는 합성곱 연산에 필요한 설정을 초기화하는 단계를 거친 후(S140), 하위 버퍼(120)에 저장된 데이터를 이용하여 합성곱 연산을 수행하고(S150), 상기 합성곱 연산의 결과를 곱셈 버퍼(140)와 덧셈기(150)를 거쳐 출력 버퍼(160)로 전달할 수 있다(S160).
연산부(130)는 하위 버퍼(120)의 데이터가 모두 연산되었는지를 판단할 수 있다(S170). 모두 연산이 되지 않은 경우 단계 S140으로 돌아가지만, 모두 연산이 된 경우 연산부(130)는 상위 버퍼(110)에 추가로 연산될 데이터가 남아 있는지 판단할 수 있다(S180). 남아 있을 경우 단계 S130으로 돌아가지만, 남아 있지 않을 경우 연산부(130)는 방법의 수행을 종료할 수 있다.
도 9는 본 발명의 일 실시예에 따른 합성곱 연산 방법 중 합성곱 커널 분할이 적용된 경우의 각 단계를 도시한 도면이다.
우선, 합성곱 커널을 분할하여, 분할된 합성곱 커널(도 6a 내지 6c에서의 제 2 분할 행렬에 해당됨) 각각을 커널 리스트(kernel list)에 등록할 수 있다(S210). 그러면 연산부(130)는 합성곱 연산에 필요한 설정을 초기화할 수 있으며(S220), 커널 리스트로부터 분할된 합성곱 커널을 추출할 수 있다(S230). 하위 버퍼(120)는 합성곱 연산에 필요한 데이터를 상위 버퍼(110)로부터 전달받을 수 있다(S240).
연산부(130)는 각 곱셈 유닛(131)의 시작 위치를 초기화한 후(S250), 하위 버퍼(120)에 저장된 데이터를 이용하여 합성곱 연산을 수행할 수 있다(S260). 그리고 연산부는 커널 리스트의 모든 분할된 합성곱 커널에 대한 연산이 이루어졌는지를 판단할 수 있으며(S270), 이루어지지 않은 경우 단계 S230으로 돌아갈 수 있으나, 이루어진 경우 상기 합성곱 연산의 결과를 곱셈 버퍼(140)와 덧셈기(150)를 거쳐 출력 버퍼(160)로 전달한 후(S280), 방법의 수행을 종료할 수 있다.
본 발명의 일 실시예에 따르면, 공간 활용의 효율성 등 장치 구현에 있어서의 효과를 달성할 수 있으며, 연산의 효율성 역시 함께 달성할 수 있다. 아울러, 다양한 크기의 합성곱 커널과 스캔 간격 등이 지원될 수 있으므로, 편의성이 더욱 향상될 수 있다.
본 발명에 첨부된 블록도의 각 블록과 흐름도의 각 단계의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수도 있다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 인코딩 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 인코딩 프로세서를 통해 수행되는 그 인스트럭션들이 블록도의 각 블록 또는 흐름도의 각 단계에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 이들 컴퓨터 프로그램 인스트럭션들은 특정 방법으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 블록도의 각 블록 또는 흐름도 각 단계에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다. 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 블록도의 각 블록 및 흐름도의 각 단계에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록 또는 각 단계는 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실시예들에서는 블록들 또는 단계들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들 또는 단계들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들 또는 단계들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 품질에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 균등한 범위 내에 있는 모든 기술사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
본 발명의 일 실시예에 따르면, 합성곱 연산을 수행함에 있어서, 연산의 효율화와 장치 구현 관점에서의 합리화가 함께 달성될 수 있으므로, 합성곱 신경망 등의 특징 추출 모델을 이용한 작업이 보다 효과적으로 이루어질 수 있다.
100: 합성곱 연산 장치
110: 상위 버퍼부
111: 특징 데이터 버퍼부
112: 합성곱 커널 버퍼부
120: 하위 버퍼부
121: 제 1 버퍼부
122: 제 2 버퍼부
130: 연산부
131: 곱셈 유닛
140: 곱셈 버퍼
150: 덧셈기
160: 출력 버퍼
110: 상위 버퍼부
111: 특징 데이터 버퍼부
112: 합성곱 커널 버퍼부
120: 하위 버퍼부
121: 제 1 버퍼부
122: 제 2 버퍼부
130: 연산부
131: 곱셈 유닛
140: 곱셈 버퍼
150: 덧셈기
160: 출력 버퍼
Claims (22)
- MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하는 단계;
상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터와, 상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 단계;
상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하는 단계;
상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 단계; 및
상기 제 1 벡터의 각 원소가 0인지의 여부를 판별하기 위한 제 1 플래그 벡터와, 상기 제 2 벡터의 각 원소가 0인지의 여부를 판별하기 위한 제 2 플래그 벡터를 생성하는 단계를 포함하며,
상기 산출하는 단계는,
상기 부분 벡터의 각 원소에 대해, 상기 제 1 플래그 벡터 내에서 대응되는 위치에 존재하는 원소가 0일 경우, 0이라 판단하고, 상기 제 2 벡터의 각 원소에 대해, 상기 제 2 플래그 벡터 내에서 대응되는 위치에 존재하는 원소가 0일 경우, 0이라 판단하는 단계를 포함하는
합성곱 연산 방법. - 제 1 항에 있어서,
상기 산출하는 단계는, 상기 곱을 상기 곱의 대상이 되는 두 원소가 모두 0이 아닐 경우에 수행하는 단계를 포함하는
합성곱 연산 방법. - 제 1 항에 있어서,
상기 부분 행렬 중 서로 다른 부분 행렬에 대한 상기 합성곱 커널과의 합성곱 연산은, 서로 다른 곱셈 유닛(multiplier)을 이용하여 병렬적으로 수행되는
합성곱 연산 방법. - 삭제
- MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하는 단계;
상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터와, 상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 단계;
상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하는 단계; 및
상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 단계를 포함하며,
상기 합성곱 연산을 위한 스캔 방향이 행 방향이고 스캔 간격(stride)이 v(v는 자연수이며, 상기 스캔 간격은 행렬의 원소의 개수를 의미함)일 경우, 상기 복수의 부분 행렬은 상기 복수의 부분 행렬 각각이 상기 특징 데이터 상에서 인접한 부분 행렬과 v의 간격을 가지며 행 방향으로 정렬되도록 추출되는
합성곱 연산 방법. - 제 5 항에 있어서,
상기 제 1 벡터의 각 원소와 상기 제 2 벡터의 각 원소는, 상기 특징 데이터 혹은 상기 합성곱 커널 내에서 가졌던 행 번호와 열 번호(상기 행 번호와 상기 열 번호는 자연수)의 대소에 따라 상기 제 1 벡터와 상기 제 2 벡터 내에서 각각 정렬되되, 상기 열 번호가 작을수록 상기 제 1 벡터 혹은 상기 제 2 벡터 내에서 앞쪽에 존재하고, 상기 열 번호가 동일할 경우 상기 행 번호가 작을수록 상기 제 1 벡터 혹은 상기 제 2 벡터 내에서 앞쪽에 존재하도록 정렬되는
합성곱 연산 방법. - 제 5 항에 있어서,
상기 K의 값이, 상기 제 1 벡터 혹은 상기 제 2 벡터를 저장하는 기억 장치의 구조에 기초하여 결정되는 소정의 자연수인 P에 미달하는 경우, 상기 제 1 벡터 및 상기 제 2 벡터의 i번째 위치(i는 자연수) 중 I mod P의 값이 K 이하의 자연수가 되는 유효 위치에만 상기 부분 행렬 혹은 상기 합성곱 커널의 원소가 채워지고, 상기 유효 위치 외의 다른 위치에는 임의의 더미(dummy) 값이 채워지며,
상기 산출하는 단계는, 상기 제 1 벡터 및 상기 제 2 벡터의 상기 더미 값을 0으로 간주하는 단계를 포함하는
합성곱 연산 방법. - MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하는 단계;
상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터와, 상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 단계;
상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하는 단계; 및
상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 단계를 포함하며,
상기 합성곱 연산을 위한 스캔 방향이 행 방향이고 상기 K의 값이 소정 값을 초과하는 경우, R개(R는 2 이상의 자연수)의 제 1 분할 행렬과 R개의 제 2 분할 행렬로 상기 부분 행렬과 상기 합성곱 커널을 각각 분할하고, 상기 제 1 분할 행렬 중 i(i는 1 이상 R 이하의 자연수)번째 행렬과 상기 제 2 분할 행렬 중 i번째 행렬 간의 합성곱 연산을 모든 i에 대해 수행한 결과를 결합하여 상기 부분 행렬과 상기 합성곱 커널 간의 합성곱 연산 결과를 산출하는 것이며,
상기 제 1 분할 행렬 각각과 상기 제 2 분할 행렬 각각은, 행의 수가 상기 소정 값을 넘지 않고 열의 수가 상기 L과 같은
합성곱 연산 방법. - MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하고, 상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터를 생성하는 제 1 버퍼부;
상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 제 2 버퍼부; 및
상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하고, 상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 연산부를 포함하며,
상기 제 1 버퍼부는, 상기 제 1 벡터의 각 원소가 0인지의 여부를 판별하기 위한 제 1 플래그 벡터를 생성하고,
상기 제 2 버퍼부는, 상기 제 2 벡터의 각 원소가 0인지의 여부를 판별하기 위한 제 2 플래그 벡터를 생성하며,
상기 연산부는, 상기 부분 벡터의 각 원소에 대해, 상기 제 1 플래그 벡터 내에서 대응되는 위치에 존재하는 원소가 0일 경우, 0이라 판단하고, 상기 제 2 벡터의 각 원소에 대해, 상기 제 2 플래그 벡터 내에서 대응되는 위치에 존재하는 원소가 0일 경우, 0이라 판단하는
합성곱 연산 장치. - ◈청구항 10은(는) 설정등록료 납부시 포기되었습니다.◈제 9 항에 있어서,
상기 연산부는, 상기 곱을 상기 곱의 대상이 되는 두 원소가 모두 0이 아닐 경우에 수행하는
합성곱 연산 장치. - 제 9 항에 있어서,
상기 장치는, 상기 특징 데이터 및 상기 합성곱 커널을 저장하고, 상기 제 1 버퍼부 및 상기 제 2 버퍼부와 연결되는 상위 버퍼부를 더 포함하며,
상기 상위 버퍼부로부터, 상기 제 1 버퍼부는 상기 특징 데이터의 각 원소의 값을, 상기 제 2 버퍼부는 상기 합성곱 커널의 각 원소의 값을 각각 획득하는
합성곱 연산 장치. - 제 9 항에 있어서,
상기 연산부는, 복수의 곱셈 유닛을 포함하며,
상기 부분 행렬 중 서로 다른 부분 행렬에 대한 상기 합성곱 커널과의 합성곱 연산은, 상기 곱셈 유닛 중 서로 다른 곱셈 유닛을 이용하여 병렬적으로 수행되는
합성곱 연산 장치. - 삭제
- 삭제
- 제 9 항에 있어서,
상기 제 1 벡터의 각 원소와 상기 제 2 벡터의 각 원소는, 상기 특징 데이터 혹은 상기 합성곱 커널 내에서 가졌던 행 번호와 열 번호(상기 행 번호와 상기 열 번호는 자연수)의 대소에 따라 상기 제 1 벡터와 상기 제 2 벡터 내에서 각각 정렬되되, 상기 열 번호가 작을수록 상기 제 1 벡터 혹은 상기 제 2 벡터 내에서 앞쪽에 존재하고, 상기 열 번호가 동일할 경우 상기 행 번호가 작을수록 상기 제 1 벡터 혹은 상기 제 2 벡터 내에서 앞쪽에 존재하도록 정렬되는
합성곱 연산 장치. - MхN 행렬(M과 N은 자연수)인 특징 데이터의 일부 영역에 해당되며, KхL(K는 M 이하의 자연수, L은 N 이하의 자연수) 행렬인 합성곱 커널과 동일한 차원을 갖는 행렬인 부분 행렬을, 서로 다르게 복수 개 추출하고, 상기 특징 데이터의 원소 중 적어도 하나의 상기 부분 행렬에 속하는 원소를 원소로서 포함하는 제 1 벡터를 생성하는 제 1 버퍼부;
상기 합성곱 커널의 원소를 원소로서 포함하는 제 2 벡터를 생성하는 제 2 버퍼부; 및
상기 부분 행렬 각각에 대해, 자신의 모든 원소를 포함하며 상기 제 1 벡터의 일부인 부분 벡터를 추출하고, 상기 부분 행렬 각각에 대해, 대응되는 부분 벡터의 각 원소와, 상기 제 2 벡터 내에서 대응되는 위치에 존재하는 원소 간의 곱을 수행하고, 상기 곱 수행의 결과를 모두 더함으로써, 상기 합성곱 커널과의 합성곱 연산 결과를 산출하는 연산부를 포함하며,
상기 제 1 버퍼부 및 상기 제 2 버퍼부는, PхQ 행렬(P와 Q는 2 이상의 자연수)을 이루도록 배열된 복수의 단위 기억 장치를 포함하는 데이터 어레이(data array)를 각각 포함하고,
상기 제 1 버퍼부는, 상기 제 1 벡터의 각 원소를 상기 제 1 버퍼부의 데이터 어레이의 서로 다른 단위 기억 장치에 각각 저장하며,
상기 제 2 버퍼부는, 상기 제 2 벡터의 각 원소를 상기 제 2 버퍼부의 데이터 어레이의 서로 다른 단위 기억 장치에 각각 저장하는
합성곱 연산 장치. - 제 16 항에 있어서,
상기 K의 값이 상기 P의 값에 미달하는 경우, 상기 부분 행렬 및 상기 합성곱 커널의 각 원소에 대해, 상기 부분 행렬 혹은 상기 합성곱 커널 내에서 가졌던 행 번호와 열 번호를 각각 row 및 col이라 할 때, 상기 부분 행렬의 각 원소는 상기 제 1 벡터의 (P*col + row)번째 위치에, 상기 합성곱 커널의 각 원소는 상기 제 2 벡터의 (P*col + row)번째 위치에 각각 저장되고, 그 외의 다른 단위 기억 장치에는 임의의 더미(dummy) 값이 저장되며,
상기 연산부는, 상기 제 1 버퍼부 혹은 상기 제 2 버퍼부의 데이터 어레이의 단위 기억 장치에 저장된 상기 더미 값을 0으로 간주하는
합성곱 연산 장치. - 제 16 항에 있어서,
상기 합성곱 연산을 위한 스캔 방향이 행 방향이고 상기 K의 값이 상기 P의 값을 초과하는 경우, 상기 연산부는 R개(R는 2 이상의 자연수)의 제 1 분할 행렬로 상기 부분 행렬을 분할하고, R개의 제 2 분할 행렬로 상기 합성곱 커널을 분할하며, 상기 제 1 분할 행렬 중 i(i는 1 이상 R 이하의 자연수)번째 행렬과 상기 제 2 분할 행렬 중 i번째 행렬 간의 합성곱 연산을 모든 i에 대해 수행한 결과를 결합하여 상기 부분 행렬과 상기 합성곱 커널 간의 합성곱 연산 결과를 산출하고,
상기 제 1 분할 행렬 각각과 상기 제 2 분할 행렬 각각은, 행의 수가 상기 P의 값을 넘지 않고 열의 수가 상기 L과 같은
합성곱 연산 장치. - 제 16 항에 있어서,
상기 제 1 버퍼부의 데이터 어레이 혹은 상기 제 2 버퍼부의 데이터 어레이에 포함된 단위 기억 장치 중, 행 번호가 동일한 단위 기억 장치끼리는 하나의 단위 기억 장치 세트(set)를 이루며, 상기 단위 기억 장치 세트 각각은 상위 버퍼부에 저장된 상기 특징 데이터 혹은 상기 합성곱 커널의 서로 다른 열에 접근 가능하도록 연결되는
합성곱 연산 장치. - 제 19 항에 있어서,
상기 단위 기억 장치 세트 내의 각 단위 기억 장치에는, 열 번호가 작은 단위 기억 장치부터, 상기 단위 기억 장치 세트에 연결된 상기 특징 데이터 혹은 상기 합성곱 커널의 열의 데이터 K개가 열 번호가 작은 순서에 따라 순차적으로 하나씩 채워지는
합성곱 연산 장치. - 제 1 항 내지 제 3 항 및 제 5 항 내지 제 8 항 중 어느 한 항에 기재된 방법에 따른 각각의 단계를 수행하는
컴퓨터 판독 가능 기록매체에 저장된 프로그램. - 제 1 항 내지 제 3 항 및 제 5 항 내지 제 8 항 중 어느 한 항에 기재된 방법에 따른 각각의 단계를 수행하는 명령어를 포함하는 프로그램이 기록된
컴퓨터 판독 가능 기록매체.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020180035104A KR102065672B1 (ko) | 2018-03-27 | 2018-03-27 | 합성곱 연산을 위한 장치 및 방법 |
CN201980021781.3A CN111902813B (zh) | 2018-03-27 | 2019-03-25 | 用于卷积运算的装置以及方法 |
PCT/KR2019/003440 WO2019190139A1 (ko) | 2018-03-27 | 2019-03-25 | 합성곱 연산을 위한 장치 및 방법 |
US17/034,886 US11475100B2 (en) | 2018-03-27 | 2020-09-28 | Device and method for convolution operation |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020180035104A KR102065672B1 (ko) | 2018-03-27 | 2018-03-27 | 합성곱 연산을 위한 장치 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190113007A KR20190113007A (ko) | 2019-10-08 |
KR102065672B1 true KR102065672B1 (ko) | 2020-01-13 |
Family
ID=68059316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020180035104A KR102065672B1 (ko) | 2018-03-27 | 2018-03-27 | 합성곱 연산을 위한 장치 및 방법 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11475100B2 (ko) |
KR (1) | KR102065672B1 (ko) |
CN (1) | CN111902813B (ko) |
WO (1) | WO2019190139A1 (ko) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12014505B2 (en) * | 2019-01-31 | 2024-06-18 | Samsung Electronics Co., Ltd. | Method and apparatus with convolution neural network processing using shared operand |
US11222092B2 (en) | 2019-07-16 | 2022-01-11 | Facebook Technologies, Llc | Optimization for deconvolution |
CN110807170B (zh) * | 2019-10-21 | 2023-06-27 | 中国人民解放军国防科技大学 | 多样本多通道卷积神经网络Same卷积向量化实现方法 |
KR102410166B1 (ko) * | 2019-11-27 | 2022-06-20 | 고려대학교 산학협력단 | 이종 곱셈-누셈 유닛을 이용하는 심층 신경망의 가속기 |
US20210334072A1 (en) * | 2020-04-22 | 2021-10-28 | Facebook, Inc. | Mapping convolution to connected processing elements using distributed pipelined separable convolution operations |
KR20210156554A (ko) * | 2020-06-18 | 2021-12-27 | 삼성전자주식회사 | 텐서 처리 방법, 가속기 및 이를 포함한 전자 장치 |
CN112308837A (zh) * | 2020-10-30 | 2021-02-02 | 京东方科技集团股份有限公司 | 一种图像处理方法及装置、电子设备和可读存储介质 |
CN114764615A (zh) * | 2021-01-13 | 2022-07-19 | 华为技术有限公司 | 卷积运算的实现方法、数据处理方法及装置 |
TWI782574B (zh) * | 2021-01-28 | 2022-11-01 | 旺宏電子股份有限公司 | 乘加運算裝置以及其乘加運算的控制方法 |
KR102657104B1 (ko) * | 2021-05-24 | 2024-04-15 | 연세대학교 산학협력단 | 합성곱 연산 장치, 합성곱 연산 방법 및 합성곱 연산 방법을 실행시키도록 기록매체에 저장된 컴퓨터 프로그램 |
CN113435586B (zh) * | 2021-08-03 | 2021-11-30 | 北京大学深圳研究生院 | 用于卷积神经网络的卷积运算装置、系统和图像处理装置 |
CN113641952B (zh) * | 2021-10-14 | 2022-02-08 | 北京壁仞科技开发有限公司 | 卷积设备、卷积方法、矩阵拆聚装置以及矩阵拆聚方法 |
KR102715720B1 (ko) | 2021-12-28 | 2024-10-11 | 주식회사 퓨쳐디자인시스템 | 광폭 데이터 정렬장치 |
TWI842180B (zh) * | 2022-11-04 | 2024-05-11 | 瑞昱半導體股份有限公司 | 卷積電路與卷積計算方法 |
CN116521611A (zh) * | 2023-04-23 | 2023-08-01 | 哈尔滨理工大学 | 一种深度学习处理器的泛化架构设计方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170103311A1 (en) | 2015-10-08 | 2017-04-13 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs convolutions using collective shift register among array of neural processing units |
US20170372071A1 (en) | 2016-06-22 | 2017-12-28 | Invincea, Inc. | Methods and apparatus for detecting whether a string of characters represents malicious activity using machine learning |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100465876C (zh) * | 2007-07-12 | 2009-03-04 | 浙江大学 | 基于单fpga的矩阵乘法器装置 |
CN103294648B (zh) * | 2013-05-08 | 2016-06-01 | 中国人民解放军国防科学技术大学 | 支持多mac运算部件向量处理器的分块矩阵乘法向量化方法 |
EP3216833B1 (en) * | 2014-12-01 | 2022-07-13 | LG Chem, Ltd. | Polycarbonate resin composition and preparation method therefor |
US20160259826A1 (en) * | 2015-03-02 | 2016-09-08 | International Business Machines Corporation | Parallelized Hybrid Sparse Matrix Representations for Performing Personalized Content Ranking |
KR101719278B1 (ko) | 2015-04-14 | 2017-04-04 | (주)한국플랫폼서비스기술 | 비주얼 콘텐츠기반 영상 인식을 위한 딥러닝 프레임워크 및 영상 인식 방법 |
US10438117B1 (en) * | 2015-05-21 | 2019-10-08 | Google Llc | Computing convolutions using a neural network processor |
KR102325602B1 (ko) * | 2015-07-06 | 2021-11-12 | 삼성전자주식회사 | 데이터를 병렬적으로 처리하는 장치 및 방법 |
CN108491359B (zh) * | 2016-04-22 | 2019-12-24 | 北京中科寒武纪科技有限公司 | 子矩阵运算装置及方法 |
CN106844294B (zh) * | 2016-12-29 | 2019-05-03 | 华为机器有限公司 | 卷积运算芯片和通信设备 |
CN107977704B (zh) * | 2017-11-10 | 2020-07-31 | 中国科学院计算技术研究所 | 权重数据存储方法和基于该方法的神经网络处理器 |
US11514136B2 (en) * | 2019-05-17 | 2022-11-29 | Aspiring Sky Co. Limited | Circuit for neural network convolutional calculation of variable feature and kernel sizes |
-
2018
- 2018-03-27 KR KR1020180035104A patent/KR102065672B1/ko active IP Right Grant
-
2019
- 2019-03-25 CN CN201980021781.3A patent/CN111902813B/zh active Active
- 2019-03-25 WO PCT/KR2019/003440 patent/WO2019190139A1/ko active Application Filing
-
2020
- 2020-09-28 US US17/034,886 patent/US11475100B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170103311A1 (en) | 2015-10-08 | 2017-04-13 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs convolutions using collective shift register among array of neural processing units |
US20170372071A1 (en) | 2016-06-22 | 2017-12-28 | Invincea, Inc. | Methods and apparatus for detecting whether a string of characters represents malicious activity using machine learning |
Also Published As
Publication number | Publication date |
---|---|
KR20190113007A (ko) | 2019-10-08 |
WO2019190139A1 (ko) | 2019-10-03 |
US20210011970A1 (en) | 2021-01-14 |
CN111902813A (zh) | 2020-11-06 |
US11475100B2 (en) | 2022-10-18 |
CN111902813B (zh) | 2024-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102065672B1 (ko) | 합성곱 연산을 위한 장치 및 방법 | |
JP6736646B2 (ja) | 畳み込みニューラルネットワークにおいて畳み込み演算を実行する装置および方法 | |
JP7279226B2 (ja) | 代替ループ限界値 | |
JP6726246B2 (ja) | 畳み込みニューラルネットワークにおいて演算を実行する方法および装置並びに非一時的な記憶媒体 | |
KR102659997B1 (ko) | 저전력 컨볼루션 신경망 추론 애플리케이션을 위한 메모리 대역폭 감소 기술 | |
US11816559B2 (en) | Dilated convolution using systolic array | |
CN108205701B (zh) | 一种执行卷积计算的系统及方法 | |
KR102523263B1 (ko) | 하드웨어 기반 풀링을 위한 시스템 및 방법 | |
CN107633295B (zh) | 用于适配神经网络的参数的方法和装置 | |
CN112840356A (zh) | 运算加速器、处理方法及相关设备 | |
KR20200081044A (ko) | 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치 | |
CN113673701B (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
US11074214B2 (en) | Data processing | |
US12125124B1 (en) | Matrix transpose hardware acceleration | |
CN114207582A (zh) | 具有存储器组织器单元的三维卷积流水线 | |
KR101989793B1 (ko) | 컨볼루션 신경망을 위한 가속기 인식 가지 치기 방법 및 기록 매체 | |
US11868875B1 (en) | Data selection circuit | |
CN112991144B (zh) | 针对神经网络的图像数据进行分块的方法和系统 | |
CN112860597B (zh) | 一种神经网络运算的系统、方法、装置及存储介质 | |
CN114662647A (zh) | 处理用于神经网络的层的数据 | |
WO2020059156A1 (en) | Data processing system, method, and program | |
US20220138527A1 (en) | Process for processing data by an artificial neural network with grouped executions of individual operations to avoid side-channel attacks, and corresponding system | |
CN110968832A (zh) | 一种数据处理方法和装置 | |
Mehrez et al. | Understanding the performances of SMVP on multiprocessor platform | |
KR20240086533A (ko) | 희소 행렬에 대한 연산 최적화를 위한 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
G170 | Re-publication after modification of scope of protection [patent] |