KR20180080876A - 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법 - Google Patents

컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법 Download PDF

Info

Publication number
KR20180080876A
KR20180080876A KR1020170001967A KR20170001967A KR20180080876A KR 20180080876 A KR20180080876 A KR 20180080876A KR 1020170001967 A KR1020170001967 A KR 1020170001967A KR 20170001967 A KR20170001967 A KR 20170001967A KR 20180080876 A KR20180080876 A KR 20180080876A
Authority
KR
South Korea
Prior art keywords
kernel
data
memory
buffer
input
Prior art date
Application number
KR1020170001967A
Other languages
English (en)
Other versions
KR102642853B1 (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 한국전자통신연구원
Priority to KR1020170001967A priority Critical patent/KR102642853B1/ko
Priority to US15/847,466 priority patent/US20180189643A1/en
Publication of KR20180080876A publication Critical patent/KR20180080876A/ko
Application granted granted Critical
Publication of KR102642853B1 publication Critical patent/KR102642853B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2413Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
    • G06F18/24133Distances to prototypes
    • G06F18/24143Distances to neighbourhood prototypes, e.g. restricted Coulomb energy networks [RCEN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
    • G06V10/443Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components by matching or filtering
    • G06V10/449Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters
    • G06V10/451Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters with interaction between the filter responses, e.g. cortical complex cells
    • G06V10/454Integrating the filters into a hierarchical structure, e.g. convolutional neural networks [CNN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/96Management of image or video recognition tasks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/19Recognition using electronic means
    • G06V30/192Recognition using electronic means using simultaneous comparisons or correlations of the image signals with a plurality of references
    • G06V30/194References adjustable by an adaptive method, e.g. learning

Abstract

본 발명에 따른 컨볼루션 회로의 방법은, 입력 피쳐 맵들을 수신하는 단계, 커널 단위로 병렬 처리하는 컨볼루션 연산들을 통하여 상기 입력 피쳐 맵들의 각각에 대응하는 출력 피쳐 맵들을 생성하는 단계, 및 상기 출력 피쳐 맵들을 외부 메모리로 출력하는 단계를 포함할 수 있다.

Description

컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법{CONVOLUTION CIRCUIT, APPLICATION PROCESSOR HAVING THE SAME, AND OPERATING METHOE THEREOF}
본 발명은 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법에 관한 것이다.
딥러닝(deep learning)은 다층 인공신경망을 기반으로 특징을 직접 학습하는 방식으로 신경망 내에 전처리, 특징추출, 특징선택 과정을 포함한다. 다양한 딥러닝 알고리즘 중에서 영상 분석에 널리 사용되는 딥러닝 알고리즘은, 컨볼루션 신경망 모델이다. 컨볼루션 신경망(convolutional neural network, 컨볼루션 신경망(CNN))은 심층 감독 학습을 기반으로 하는 머신러닝 (machine learning) 모델이며, 응용력이 강하며, 국부적 특징추출 및 분류에 강인하다. 가중치 공유 구조 특징 때문에 컨볼루션 신경망 모델은 생물학적 신경망과 더욱 유사하게 설계되었으며, 패턴인식 영역에서 탁월한 성과를 내고 있다.
본 발명의 목적은 어플리케이션 프로세서에 응용 가능하는 컨볼루션 회로 및 그것의 방법을 제공하는 데 있다.
본 발명의 실시 예에 따른 컨볼루션 회로의 방법은, 입력 피쳐맵들을 수신하는 단계, 커널 단위로 병렬 처리하는 컨볼루션 연산들을 통하여 상기 입력 피쳐맵들의 각각에 대응하는 출력 피쳐맵들을 생성하는 단계, 및 상기 출력 피쳐맵들을 외부 메모리로 출력하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 커널 단위는 K × K (자연수)이다.
실시 예에 있어서, 상기 입력 피쳐맵들의 각각의 대응하는 커널에 K 개의 라인에 대응하는 데이터를 칩의 내부 메모리에 저장하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 출력 피쳐맵들을 생성하는 단계는, 상기 출력 피쳐맵들을 생성하는데 필요한 커널들을 상기 외부 메모리에 저장하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 컨볼루션 연산의 부분합을 상기 외부 메모리에서 로드, 누적, 혹은 상기 외부 메모리에 스토어를 반복하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 병렬 처리하는 컨볼루션들 중 적어도 하나는 물리적으로 서로 다른 메모리를 사용할 수 있다.
실시 예에 있어서, 상기 병렬 처리하는 컨볼루션들의 각각의 결과 값들이 상기 외부 메모리에 사전에 결정된 순서로 저장될 수 있다.
실시 예에 있어서, 상기 출력 피쳐맵들 중 적어도 하나를 외부 메모리로 출력하면서, 상기 컨볼루션 연산들 중 적어도 하나가 수행될 수 있다.
실시 예에 있어서, 상기 외부 메모리로부터 복수의 피쳐맵 데이터를 수신하면서 동시에 복수의 피쳐맵 데이터가 출력될 수 있다.
본 발명의 실시 예에 따르면 컨볼루션을 시작하기 전에 입력 피쳐맵으로 구성되는 바톰 데이터와 커널 웨이트 값으로 구성되는 커널 처리 데이터는 외부 메모리에 저장되어 있고 컨볼루션이 끝난 후에는 탑 데이터에 계산된 출력 피쳐맵들이 저장되어 있게 된다.
본 발명의 실시 예에 따른 컨볼루션 회로는, 외부 메모리로부터 데이터를 읽거나, 상기 외부 메모리로 데이터를 출력하는 DMA(direct memory access) 처리부, 처리 중인 입력 피쳐맵과 N개의 출력 피쳐맵을 연결시켜 주는 N (N은 2 이상의 자연수)개의 커널 처리 데이터를 저장하는 커널 버퍼, 입력 피쳐맵에 대응하는 복수의 입력 데이터를 저장하는 바톰 버퍼, DMA 처리부의 상기 N개의 커널 처리 데이터를 상기 커널 버퍼로 전송하는 입력 데이터 로드부, 상기 바톰 버퍼의 P(P는 2 이상의 자연수)개의 입력 데이터 및 상기 커널 버퍼의 P개의 커널 처리 데이터를 출력하는 커널/데이터 공급부, 상기 P개의 커널 처리 데이터와 대응하는 K(자연수)개의 커널 웨이트 값들을 이용하여 컨볼루션 연산을 수행하는 파이프라인 병렬 커널 처리부, 상기 파이프라인 병렬 커널 처리부의 결과 값을 수신하는 결과 수신부, 상기 중간 결과 값들을 저장하는 파셜 탑 버퍼, 및 상기 DMA 제어부, 상기 커널 버퍼, 상기 바톰 버퍼, 상기 입력 데이터 로드부, 상기 커널/데이터 공급부, 상기 파이프라인 병렬 커널 처리부, 상기 결과 수신부, 및 상기 파셜 탑 버퍼를 제어하는 제어부를 포함할 수 있다.
실시 예에 있어서, 상기 DMA 처리부는, 상기 외부 메모리로부터 복수의 커널 처리 데이터를 저장하는 읽기 FIFO(first-in, first-out) 메모리, 및 상기 외부 메모리에 쓰여질 복수의 커널 처리 데이터를 저장하는 쓰기 FIFO 메모리를 포함할 수 있다.
실시 예에 있어서, 상기 커널 버퍼는, 상기 N 개의 커널 처리 데이터를 저장하면서, 동시에 병렬 처리를 위한 상기 P개의 커널 처리 데이터를 출력하는 DPRAM(dual port random access memory)로 구현될 수 있다.
실시 예에 있어서, 상기 커널 버퍼는 입력 피쳐맵의 순서로 커널 처리 데이터를 상기 외부 메모리로부터 로드하고, 상기 입력 피쳐맵을 처리할 때는 그 안에서 출력 피쳐맵들을 처리하기 위한 순서대로 커널 처리 데이터를 메모리에 로드하고, 각 커널 처리 데이터의 저장 순서는 로우 단위를 먼저 저장하고, 각 로우 안에서 컬럼 단위로 저장될 수 있다.
실시 예에 있어서, 상기 커널 버퍼는 커널의 각 로우 별로 서로 다른 물리 메모리를 배치할 수 있다.
실시 예에 있어서, 커널 버퍼는 상기 읽기 FIFO 메모리로부터 상기 K개의 웨이트 값들을 모으고, 대응하는 메모리에 저장시킬 수 있다.
실시 예에 있어서, 상기 바톰 버퍼는 상기 입력 피쳐맵에서 입력 데이터에 대한 커널 윈도우가 움직일 때 상기 커널 윈도우 안의 모든 데이터를 동시에 출력할 수 있다.
실시 예에 있어서, 상기 커널/데이터 공급부는 출력 피쳐맵의 로우 및 컬럼 인덱스에 따라 상기 바톰 버퍼에서 상기 커널 윈도우에 대응하는 입력 데이터를 읽고, 상기 커널 버퍼에서 상기 읽혀진 데이터를 처리하기 위한 상기 P개의 커널 처리 데이터를 읽을 수 있다.
실시 예에 있어서, 상기 파이프라인 병렬 커널 처리부는 상기 커널/데이터 공급부로부터 출력된 상기 입력 데이터 및 대응하는 커널 웨이트 값들에 대하여 곱셈 연산 및 덧셈 연산을 수행함으로써 상기 P개의 결과 값들을 출력할 수 있다.
실시 예에 있어서, 상기 파셜 탑 버퍼로부터 중간 결과 값들을 읽고 상기 읽혀진 중간 결과 값들을 상기 DMA 처리부의 상기 쓰기 FIFO 메모리에 전송하는 출력 데이터 저장부를 더 포함할 수 있다.
본 발명의 실시 예에 따른 어플리케이션 프로세서의 동작 방법은, 특징을 추출하기 위하여 입력 피쳐맵들의 각각에 대한 병렬 컨볼루션 연산들을 수행하는 단계, 및 상기 추출된 특징을 이용하여 분류하기 위하여 상기 병렬 컨볼루션 연산들의 결과 값들의 각각에 대한 서브샘플링 연산들을 수행하는 단계를 포함하고, 상기 병렬 컨볼루션 연산들을 수행하는 단계는, 외부 메모리로부터 입력 데이터를 수신하면서 동시에 중간 결과 값들을 상기 외부 메모리로 출력하는 단계를 포함할 수 있다.
본 발명의 실시 예에 따른 컨볼루션 회로 및 그것의 동작 방법은 최소한의 메모리를 사용하면서 병렬 처리를 통하여 비교적 적은 처리 시간을 가질 수 있다. 이에 따라, 본 발명의 실시 예에 따른 컨볼루션 회로 및 그것의 동작 방법은, CPU(central processing unit) 코어를 포함하는 어플리케이션 프로세서에서 딥러닝을 사용할 수 있다.
도 1은 일반적인 컨볼루션 신경망에서의 컨볼루션 개념도를 보여주는 도면이다.
도 2는 3×3 커널을 사용한 컨볼루션을 예시적으로 보여주는 도면이다.
도 3은 본 발명의 실시 예에 따른 컨볼루션 방식을 예시적으로 보여주는 도면이다.
도 4는 본 발명의 실시 예에 따른 컨볼루션 파라미터를 예시적으로 보여주는 도면이다.
도 5는 본 발명의 실시 예에 따른 컨볼루션 처리 타이밍도를 예시적으로 보여주는 도면이다.
도 6은 본 발명의 실시 예에 따른 컨볼루션 회로를 예시적으로 보여주는 도면이다.
도 7a, 도 7b, 및 도 7c는 본 발명의 실시 예에 따른 커널 버퍼의 구성 방법을 예시적으로 보여주는 도면이다.
도 8은 본 발명의 실시 예에 따른 하나의 입력 피쳐 맵(FM, feature map)에서 N 개의 출력 피쳐 맵(FM, feature map)을 만들기 위한 3 × 3 커널을 예시적으로 보여주는 도면이다.
도 9는 본 발명의 실시 예에 따른 커널 처리 데이터의 입력과 커널 버퍼에의 쓰기 방식을 예시적으로 보여주는 도면이다.
도 10은 본 발명의 실시 예에 따른 입력 데이터의 인덱스를 예시적으로 보여주는 도면이다.
도 11은 본 발명의 실시 예에 따른 입력 데이터의 인덱스에 따른 선택된 물리 메모리 번호를 예시적으로 보여주는 도면이다.
도 12는 본 발명의 실시 예에 다른 선택된 물리 메모리에 저장할 주소를 예시적으로 보여주는 도면이다.
도 13은 본 발명의 실시 예에 따른 커널 중심 인덱스로부터의 다른 값들 인덱스 계산을 예시적으로 보여주는 도면이다.
도 14는 본 발명의 실시 예에 따른 커널 처리기의 구조를 예시적으로 보여주는 도면이다.
도 15는 본 발명의 실시 예 따른 모바일 장치를 예시적으로 보여주는 도면이다.
도 16는 본 발명의 실시 예에 따른 어플리케이션 프로세서의 동작 방법을 예시적으로 보여주는 흐름도이다.
아래에서는 도면들을 이용하여 본 발명의 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있을 정도로 본 발명의 내용을 명확하고 상세하게 기재할 것이다.
본 발명의 개념에 따른 실시 예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시 예들을 도면에 예시하고 본 명세서에서 상세하게 설명하고자 한다. 그러나 이는 본 발명의 개념에 따른 실시 예들을 특정한 개시 형태들에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물, 혹은 대체물을 포함한다.
제 1 혹은 제 2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만, 예컨대 본 발명의 개념에 따른 권리 범위로부터 벗어나지 않은 채, 제 1 구성 요소는 제 2 구성 요소로 명명될 수 있고 유사하게 제 2 구성 요소는 제 1 구성 요소로도 명명될 수 있다.
어떤 구성 요소가 다른 구성 요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성 요소에 직접적으로 연결되어 있거나 혹은 접속되어 있을 수도 있지만, 중간에 다른 구성 요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성 요소가 다른 구성 요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는 중간에 다른 구성 요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성 요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 혹은 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로서, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 혹은 "가지다" 등의 용어는 본 명세서에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부분품 혹은 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 혹은 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 혹은 이들을 조합한 것들의 존재 혹은 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 나타낸다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
컨볼루션 신경망(convolutional neural network, CNN))은 기본적으로 뉴런들의 연결 패턴을 구성한 전방향 이공 신경망이다. 컨볼루션 신경망(CNN)은 기본적으로 컨볼루션 레이어(convolutional layer), 풀링 레이어(pooling layer), 및 전방향 레이어(feedforward layer)을 포함한다. 컨볼루션 레이어는 컨볼루션 연산을 통해 특징들을 추출하는 레이어이다. 풀링 레이어는 입력 공간을 추상화하는 레이어로써, 예를 들어, 영상 데이터의 경우 픽셀의 수가 많으면 서브-샘플링(sub-sampling) 등의 과정을 통해 차원 축소(dimensionality reduction)를 한다. 전방향 레이어는 최상위 레이어들에서 마지막에 적용되고, 하위 레이어에서 전달된 특징들을 분류한다.
도 1은 N(N 는 2 이상의 자연수) 개의 입력과 M (M은 2 이상의 자연수) 개의 출력 피쳐맵들(feature maps)을 갖는 컨볼루션 방식을 보여주는 도면이다. 최근 영상 인식은 컨볼루션 신경망(CNN)을 주로 사용하고 있다. 컨볼루션 신경망(CNN)에서 가장 많은 계산량을 차지하는 것은, 컨볼루션 연산이다. 컨볼루션 신경망(CNN)은 여러 개의 컨볼루션 층들을 포함한다. 본 발명에서는 각 컨볼루션 층은 M 개의 입력 피쳐맵들을 입력 받고, N 개의 출력 피쳐맵들을 출력하는 것으로 가정한다. 하나의 입력 피쳐맵과 하나의 출력 맵 사이에는, 그것을 위한 K×K (K는 자연수)커널이 존재한다. 실제로는 K×K 커널이 M×N 개 존재한다. 본 발명의 실시 예에 따른 컨볼루션 회로는, 외부 메모리에 있는 M×N 개의 K×K 커널을 사용하여, 외부 메모리에 있는 M 개의 입력 피쳐맵을 받아 외부 메모리에 N 개의 출력 피쳐맵을 생성하는 것을 가정하며 M이 입력 피쳐맵의 수를 의미한다.
실제 컨볼루션은 각 출력 피쳐맵의 모든 값에 출력 피쳐맵 마다 정해져 있는 하나의 바이어스 값을 더한다. 컨볼루션 신경망(CNN)을 위한 컨볼루션에서, 입력은 M 개의 피쳐맵들을 포함하고, 출력은 N 개의 피쳐맵들을 포함한다. 입력 및 출력 피쳐맵들의 각각은, 폭(Wi), 높이(Hi)와 폭(Wo), 높이(Ho)를 갖는다. 또한, 이 M 개의 입력들에서 N 개의 출력들을 만들기 위해서, K×K 커널이 사용된다. K×K 커널은, K×K 개의 웨이트 값을 가지는 폭이 K, 높이가 K 개의 사각형 모양이다. 각각의 입력 피쳐맵과 출력 피쳐맵의 쌍마다 각각 다른 커널을 가짐으로써, K×K 커널이 M×N 개 존재하게 된다.
도 2는 3×3 커널을 사용하는 컨볼루션을 보여주는 도면이다. 이 커널은, 커널의 중심이 입력 피쳐맵의 가장 윗줄에서 시작하여 맨 아랫줄로 스캐닝하고, 또한 각 줄에서는 왼쪽에서 오른쪽으로 스캐닝 하면서, 윈도우와 겹치는 데이터에 각각의 커널 가중치를 곱한 후, 그 값들을 더하여 출력 피쳐맵의 한 점의 출력값이 생성된다.
어느 출력 피쳐맵의 한 데이터의 최종 값은, 모든 입력 피쳐맵에 대해서 그 출력 피쳐맵과 각 입력 피쳐맵을 연결해 주는 커널로 처리한 값을 합한 후에, 그 출력 피쳐맵에 대응하는 바이어스 값을 더한 값이다. 이러한 최종 값은 대응 커널 영역 데이터에 의존하고, 또한 각각의 입력 피쳐맵에 대응하는 M 개의 K×K 커널 값에 의존한다. 최근의 컨볼루션 신경망(CNN)을 이용한 영상인식은, 네트워크 구성과 함께 다양한 처리방식의 특징을 추가함으로써, 성능을 개선하고 있다.
본 발명의 실시 예에 따른 컨볼루션 회로는 어플리케이션 프로세서(application processor, AP)에 적용 가능하도록 구현될 수 있다. 본 발명의 실시 예에 따른 컨볼루션 회로는, 중앙 처리 유닛(central processing unit, CPU) 코어를 포함하는 어플리케이션 프로세서(AP)에서 딥러닝을 사용할 수 있다. 본 발명의 실시 예에 따른 컨볼루션 회로는 대용량의 메모리를 사용하지 않으면서도, 빠르게 연산을 처리하도록 구현될 수 있다. 예를 들어, 본 발명의 실시 예에 따른 컨볼루션 회로는 최소한의 메모리를 사용하면서 병렬 처리를 통하여 비교적 적은 처리 시간을 가질 수 있다.
본 발명의 실시 예에 따른 컨볼루션 회로는, 칩 내부의 메모리 요구량을 최소화하기 위하여, 입력 피쳐맵을 읽고, 읽혀진 입력 피쳐맵을 사용하는 모든 출력 데이터를 생성함으로써, 동일한 입력 피쳐맵 데이터를 다시 로드 하지 않을 수 있다. 하나의 입력 피쳐맵은, 모든 출력 피쳐맵들을 만드는데 사용된다.
본 발명의 실시 예에 따른 컨볼루션 신경망(CNN)은, 모든 피쳐맵들을 동시에 만들고, 하나의 입력 피쳐맵을 사용함으로써, 모든 출력 피쳐맵들의 하나의 데이터를 만든 후에 그 중간 결과 값을 외부 메모리에 저장하고, 다음 입력 피쳐맵을 처리할 때 그 중간 결과 값을 다시 읽어 커널 처리한 결과 값을 누적하는 방식을 사용한다.
모든 출력 피쳐맵들에 대해 동시에 처리하지만, 중간 결과 값을 썼다가 읽는 단위는, 출력 피쳐맵의 한 라인이나 전체 피쳐맵이 아니라 출력 피쳐맵들의 동일한 위치의 한 점에 대한 데이터이다. 따라서, 출력 피쳐맵에 대한 온-칩 메모리 요구량은 매우 작다. 입력 피쳐맵을 반복해서 읽는 방식은, 커널에서 사용하는 데이터가 K×K 커널 크기로 인하여 많기 때문에, 메모리 접근 시간 및 칩 내부의 메모리 용량에 대한 요구가 커진다. 따라서 본 발명의 실시 예에 따른 컨볼루션 신경망(CNN)은 읽혀진 입력 피쳐맵을 다시 사용하지 않도록 모두 사용하고, 대신 출력 피쳐맵의 중간 결과 값을 썼다가 다시 읽는 방식을 사용한다.
또한, 본 발명의 실시 예에 따른 컨볼루션 신경망(CNN)은, 현재 처리 중인 입력 피쳐맵을 처리하기 위한 커널 처리 데이터만 읽고 처리함으로써, 커널 가중치를 저장하기 위한 공간을 줄일 수 있다. 커널 처리를 할 때, 본 발명의 실시 예에 따른 컨볼루션 신경망(CNN)은 여러 개의 출력 피쳐맵들에 대해 동시에 처리할 수 있다. 이를 위하여 커널 가중치 값은 필요한 만큼의 커널 값들을 동시에 읽도록 반도체 공정에서 허가하는 메모리 데이터의 비트 폭을 고려하여, 적절한 크기와 개수의 메모리를 사용한다.
커널 처리 단위는 출력 피쳐맵의 한 점 단위이다. 따라서 K×K 의 입력 데이터만 필요하지만, 하나의 로우(row)의 끝까지 간 후 다시 다음 로우의 처음 위치로 왔을 때, 커널의 크기에 따라 이전에 처리했던 하나 이상의 위의 로우의 데이터가 다시 사용되어야 한다. 이를 고려하여 K×K 커널에서 필요한 로우는 읽어 유지하고, 새롭게 읽은 로우는 다 사용된 로우의 위치에 덮어씀으로써, 항상 K 개의 로우들이 칩 안에 유지되도록 한다. 따라서, 동작 중에 입력 데이터를 저장하기 위한 메모리 요구량은 K×Wi 가 된다.
또한, 메모리에서 읽고 쓰는 시간을 충분히 따라갈 수 있도록 커널 처리할 때, 병렬 회로가 사용된다. 즉, 입력 데이터에 대해 동시에 P 개의 출력 맵의 같은 지점의 값을 생성 내는 것이 반복된다. 실시 예에 있어서, P는 2일 수 있다. 다른 실시 예에 있어서, 외부 메모리 접근 속도에 비해 내부 동작 클록 속도가 낮은 경우에는, 2보다 더 큰 P 값이 사용될 수 있다.
도 3은 본 발명의 실시 예에 따른 컨볼루션 방식을 예시적으로 보여주는 도면이다. 도 3을 참조하면, 컨볼루션 방식은 6 개의 입력 피쳐맵들과 4 개의 출력 피쳐맵들이 2 개의 병렬 처리로 연관되어 있다.
도 4는 본 발명의 실시 예에 따른 어느 컨볼루션 계층의 파라미터의 예를 보여주는 도면이다. 도 4를 참조하면, M은 64, Hi는 600, Wi는 800, N는 64, Ho는 600, Wo는 800, 및 K는 3이다.
외부 메모리는 DDR3(double data rate 3rd generation)를 사용하고 1600 MT/s (800 MHz클록), 32비트 사용을 가정하면, 6400 MBps의 속도가 제공된다. 그리고 내부 처리 클록은 800 MHz이고, 메모리 인터페이스는 128 비트 사용하고, 병렬 처리가 2라고 가정했을 경우, 상술 된 파라미터들을 갖는 컨볼루션 계층에서 하나의 입력 피쳐맵에 대해 모든 출력 피쳐맵들을 생성하는 처리 순서와 예상 시간은 다음과 같다.
메모리 접근 시간은, 칩 내부 인터페이스와 상관없이 결국 DDR3의 속도에 의존하므로, 그 속도 값을 기준으로 계산한 값이다. 또한, 최초에는 두 개의 라인들을 읽어야 컨볼루션이 가능하다. 하지만, 아래서는 평균 계산을 위한 것이므로, 전형적인 중간에 위치한 라인에 대해 컨볼루션의 시간이 계산된다.
1. N 개의 K × K 커널 읽기 시간: 예를 들어, 64 × 3 × 3 = 575 워드로써, 처리 시간은 0.36㎲ 이다.
2. 한 라인(line) 읽기 시간: 800 워드로써 처리 시간은 0.5㎲ 이다.
3. 한 라인에 대한 컨볼루션 처리 시간: 처리 시간은 64 ㎲ 이다.
3-1. 부분합 포인트들(points) 읽기 시간: 64 워드로써 처리 시간은 0.04 ㎲ (~32 클록)이다.
3-2. 입력 한 포인트에 대한 컨볼루션(출력 64 워드) 시간: 64 출력/2 병렬 = 32 클록으로써 처리 시간은 0.04 ㎲ 이다.
3-3. 부분합 포인트들 쓰기 시간: 64 워드로써 처리 시간은 0.04 ㎲ (~ 32 클록)이다. 병렬 처리는 2배로 충분하다.
위의 3-1, 3-2, 및 3-3의 읽기 + 컨볼루션 + 쓰기(새로운 point 계산하면서 마지막 처리한 포인트(point) 결과 쓰는 방식으로 진행) 반복 진행. 전체 시간은 ~ 800×0.04 × 2 = 64 ㎲이다. 상술 된 과정 2 ~ 3이 반복된다.
도 5는 본 발명의 실시 예에 따른 컨볼루션 처리 타이밍도를 예시적으로 보여주는 도면이다. 도 5를 참조하면, 상술 된 컨볼루션 처리를 단순하게 하는 경우, 따라서 전체적인 처리 과정은, 도 5의 a)와 같은 형태를 가질 수 있다. 그림에서 R-N은 N 개의 데이터(partial sum을 N 개)를 읽는 것을, C-N은 N 개의 데이터를 만드는 것을, W-N은 N 개의 데이터(partial sum N 개)를 쓰는 것을 의미한다. 그러나 처리 단계의 제어를 적절하게 조절하면, 도 5의 b)와 같이 컨볼루션을 처리하면서 앞에서 처리한 결과를 외부 메모리에 쓰는 것도 가능하다. 이 경우 전체적인 처리 시간이 줄어들 수 있다.
도 6은 본 발명의 실시 예에 따른 컨볼루션 회로(100)를 예시적으로 보여주는 도면이다. 도 6을 참조하면, 컨볼루션 회로(100)는 제어부(110), DMA 처리부(120), 입력 데이터 로드부(130), 커널 버퍼(140), 바톰 버퍼(145), 커널/데이터 공급부(150), 파이프라인 병렬 커널 처리부(160), 결과 수신부(170), 파셜 탑 버퍼(180), 및 출력 데이터 저장부(190)를 포함할 수 있다.
제어부(110)는, 프로세서 코어와 APB(advanced peripheral bus) 인터페이스를 통하여 각종 동작 설정 및 상태 확인을 하도록 구현될 수 있다. 제어부(110)는 동작에 따른 각종 인터럽트를 발생함으로써 코어에 필요한 동작을 수행하도록 구현될 수 있다. 입력 피쳐맵(FM, feature map)의 개수(M)와 출력 피쳐맵(FM, feature map)의 개수(N), 입력 피쳐맵(FM, feature map)의 높이(Hi)와 넓이(Wi), 출력 피쳐맵(FM, feature map)의 높이(Ho), 넓이 (Wo) 등은 제어부(110)의 레지스터 파일을 통해 전체 블록에 제공될 수 있다.
제어부(110)는 중앙처리유닛(CPU)의 명령/인스트럭션을 수신하고, 전체적인 컨볼루션을 지시하도록 구현될 수 있다. 예를 들어, 제어부(110)는 상태 머신과 카운터를 이용하여 입력 피쳐맵들을 차례로 선택하고, 이러한 입력 피쳐맵들을 처리하기 위한 커널을 외부 메모리에서 읽도록 DMA 처리부(120)와 입력 데이터 로드부(130)를 지시할 수 있다.
또한, 제어부(110)는 입력 피쳐맵의 각 라인을 필요한 시점에서 읽도록 DMA 처리부(120)와 입력 데이터 로드부(130)를 제어할 수 있다.
또한, 제어부(110)는 각 중간 결과(부분합) 값을 읽도록 DMA 처리부(120)와 결과 수신부(170)를 지시할 수 있다.
또한, 제어부(110)는 계산이 끝난 중간 결과 값을 외부 메모리에 쓰도록 외부 메모리와 DMA 처리부(120)를 지시할 수 있다. 이러한 지시와 대응하는 완료의 보고는, 일반적으로 파라미터 전송과 함께 요청(request)하고, 상태와 함께 완료(done) 신호를 주고 받음으로써, 이루어질 수 있다. 이후, 이러한 전체적인 처리 순서는, 입력 데이터 로드부(130)와 커널/데이터 공급부(150), 결과 수신부(170), 외부 메모리의 설명에서 자세히 다루겠다.
DMA 처리부(120)는 제어부(110)에서 제공하는 읽혀질 데이터의 시작 주소, 데이터의 개수와 함께 시작 명령을 입력 받아 AXI(advanced eXtensible interface)로부터 데이터를 읽고(최대 burst 조정 가능) 루프(loop)를 돌면서 데이터를 버퍼 입력부로 전송하도록 구현될 수 있다.
DMA 처리부(120)는 내부에 128 비트 폭의 DMA 읽기용 FIFO (first-in-first-out)와 DMA 쓰기용 FIFO를 포함할 수 있다. DMA 읽기가 진행되는 중에는, 데이터 로드부(130)에서 읽기 FIFO에 데이터가 있는 경우 데이터를 읽어 최종 목적지 메모리까지 전송하고, 마지막 데이터까지 데이터 로드부(130)가 읽으면, DMA 읽기가 완료된 것이다. DMA 쓰기가 진행 중에는, 상기 출력 데이터 저장부(190)는 쓰기 FIFO 에 빈 공간이 있는 경우 결과 데이터를 그 FIFO에 쓰고, AXI를 통해 대응 데이터가 모두 전송되면, DMA 쓰기가 완료된 것이다.
외부 메모리에서 데이터가 입력될 때, 128 비트 데이터(4 워드) 단위로 스토로브(strobe) 신호와 함께 데이터가 입력될 수 있다. AXI에서 입력될 때, 4 워드가 다 찬 상태에서 입력되지 않을 수도 있다. 이를 고려하면서 입력 데이터는 DMA 읽기 FIFO에 저장하여야 하고, AXI로부터 입력된 데이터를 쓸 때 저장된 워드의 수를 증가시키는데 32 비트 워드 단위로 관리될 수 있다.
데이터 로드부(130)는 DMA 읽기 FIFO로부터 데이터를 읽을 때 32 비트 워드 단위로 카운터를 감소할 수 있다. 마찬가지로 외부 메모리로 데이터가 출력될 때, 128비트 데이터 (4 워드) 단위로 출력된다. AXI로 출력될 때, 4 워드가 다 찬 상태로 출력되지 않을 수 있으므로, 그것을 고려하여 DMA 쓰기 FIFO에서 읽어 AXI로 전송할 때나 외부 메모리에서 출력된 데이터를 DMA 쓰기 FIFO에 쓸 때, 워드 단위로 카운터가 관리될 것이다.
데이터 로드부(130)는 제어부(110)로부터 출력된 정보를 이용하여 DMA가 시작된 것을 알 수 있다. 또한, 데이터 로드부(130)는, DMA 처리부(120)의 DMA 읽기 FIFO에 데이터가 있으면, 목표 데이터 처리가 완료될 때까지 FIFO에서 데이터를 읽어 커널 버퍼(140) 혹은 바톰 버퍼(145)에 채워 넣는다. 여기서 “커널링”은 K×K 개의 곱하기와 그 결과를 모두 더하는 것을 의미한다.
커널링 처리가 진행 중에도 다음 메모리 읽기를 진행해야 하므로, 커널 처리 데이터 및 입력 데이터를 위한 K×K의 커널 버퍼(140)는 듀얼 포트(dual port) 메모리로 구현될 수 있다. 즉, 한쪽 포트는 데이터를 읽어서 처리하고, 다른 쪽 포트는 새로운 곳에 오버라이트(overwrite) 할 수 있다. 커널 값을 교체하는 것은 상대적으로 빈번하지 않으므로, 커널 버퍼(140)에서 더블 버퍼링(double buffering)을 하지 않아도 성능에 큰 지장이 없다.
커널 버퍼(140)는 현재 처리 중인 입력 피쳐맵(FM, feature map) 하나에 대해서 N 개의 출력 피쳐맵(FM, feature map) 각각에 대해서 사용할 N 개의 K×K 커널 처리 데이터를 저장하고, 병렬 처리를 위하여 P 개의 K×K 값을 동시에 꺼내도록 구현될 수 있다.
본 발명의 실시 예에 따라 P 개의 병렬 처리부들이 파이프라이닝(pipelining)을 통하여 매 클록 커널링을 하기 위해서, P 개의 K×K 커널 웨이트들이 매 클록 다른 출력 피쳐맵(FM, feature map) 용으로 바꿔 주면서 제공될 수 있다.
하나의 데이터의 비트 수를 W라 하고(single precision의 경우 W=32), 병렬 처리 정도를 P라고 할 때(예, P=16), 커널 버퍼(140)는 K×K의 값이 하나의 짝으로 P 개를 동시에 제공할 수 있다. 만약에 이것을 하나의 메모리를 쓰면, 데이터 폭(width)이 P×K×K×W 비트이고, 깊이(depth)는 N/P이다. 따라서, 대부분의 경우 폭(width)가 너무 커져서 쓸 수 없다(K=5, P=2, N=512인 경우 폭(width) 1,600, depth 256 메모리 1개). 메모리의 폭(width)을 줄이기 위해, 출력 피쳐맵(FM, feature map)마다 별도의 메모리를 쓰면, 폭(width)이 K×K×W이고 깊이(depth)가 N인 메모리 P 개가 된다(이 경우 K=5, P=2, N=512인 경우 폭(width) 320, depth 512인 메모리 2개).
모든 방법을 사용할 수 있으나, 메모리를 더 나누고 각 커널의 로우 별로 별도 메모리를 할당함으로써 폭(width)이 32×K이고 깊이(depth)가 N인 메모리 K×P 개가 사용될 수 있다(K=5, P=2, N=512인 경우 폭(width) 160, depth 512인 메모리 10개).
도 7은 본 발명의 실시 예에 따른 커널 버퍼(140)의 구성 방법을 예시적으로 보여주는 도면이다. 도 7을 참조하면, 두 가지 컨볼루션 경우에 대해 위의 세 가지 방법에서 사용되는 메모리의 폭, 깊이와 개수를 보여 준다.
입력 피쳐맵(FM, feature map)을 차례로 처리하는 방식이기 때문에, 커널 처리 데이터는 외부 메모리에 저장될 때, 먼저 입력 피쳐맵(FM, feature map)의 순서로, 각 입력 피쳐맵(FM, feature map)의 순서 안에서 각 출력 피쳐맵(FM, feature map)의 순서로 커널 처리 데이터가 저장되고, 각 커널 처리 데이터 안에서 먼저 로우 단위로, 각 로우 안에서 컬럼(column) 단위로(row major라고 함) 저장하는 것을 가정하겠다. 하지만, 본 발명의 사상 안에서 다른 방식도 가능하다.
커널을 로우 마다 서로 다른 물리적인 메모리에 로드 하기 위해서, DMA를 통해 읽은 커널 처리 데이터는 로우 단위로 모아서 병렬 처리 단위를 고려하여 저장할 메모리와 주소를 계산하여 쓰여 질 수 있다.
도 8은 본 발명의 실시 예에 따른 하나의 입력 피쳐맵(FM, feature map)에서 N 개의 출력 피쳐맵(FM, feature map)을 만들기 위해 3×3 커널을 예시적으로 보여주는 도면이다. 도 8을 참조하면, 3×3 커널의 경우, 특정 입력 피쳐맵(FM, feature map)을 N 개의 출력 피쳐맵(FM, feature map)으로 연결해 주는 커널은, 아래와 같이 N 개가 있다. 도 8에 도시된 바와 같이, 같은 병렬 처리 단위 커널은 서로 다른 커널 버퍼에 저장될 수 있다. 추가적으로 같은 커널 처리 데이터이면서도 서로 다른 로우이면, 병렬 처리 단위 커널은 서로 다른 메모리에 저장될 수 있다. 또 화살표는 외부 메모리에 데이터가 저장되는 순서를 보여 준다.
상술 된 커널 버퍼(140)에 쓰기 위해서, AXI DMA 입력데이터를 보면서 병렬 처리 단위가 되는 K 개의 가중치들은 모아서 K×P 개의 DPRAM 중 하나를 선택하여 병렬 처리 순번에 맞는 주소에 쓰여 질 수 있다. 즉, 처음 K 개 가중치는 0번 로우의 병렬 0번에 대응하는 메모리의 0 주소에, 다음 K 개 가중치는 1 번 로우 의 병렬 0번에 대응하는 메모리의 0 주소에, 다음 K 개는 2 번 로우의 병렬 0번에 대응하는 메모리의 0 주소에, ... , 다음 K개는 K-1번 로우의 병렬 0번에 대응하는 메모리의 0번 주소에, 다음 K 개는 0번 로우의 병렬 1번에 해당하는 메모리의 0번 주소에, 다음 K개는 1번 로우의 병렬 1번에 해당하는 메모리의 0번 주소에, ... , 다음 K개는 K-1번 로우의 병렬 1번에 해당하는 메모리의 0번 주소에, ... , 이런 방법으로 쓰여 질 수 있다.
또 커널 버퍼(140)의 깊이는 출력 피쳐맵의 개수인 N이 되어야 하지만 P개씩 병렬 하는 경우 각 메모리의 깊이는 N/P가 된다. SP(single precision)의 경우 128 비트 AXI의 폭은 4 워드인데 병렬 처리 단위가 되는 커널 웨이트의 수 K×K×P가 4의 배수가 되지 않는 경우는(P=2인 경우 항상 그러함) 적어도 2×K×K×P마다 4의 배수일 수 있다. 따라서 주어진 K와 P에 대해서 K×K×P 혹은 2×K×K×P 마다 미리 계산된 패턴으로 메모리와 주소를 선택하여 쓰는 것이 가능하다. 예를 들어, K=3, P=2인 경우 36 개 워드, 즉 9 개의 128비트 데이터를 주기로 어떤 데이터를 묶을지, 어느 메모리에 쓸지를 결정할 수 있고, 그 값을 사용하여 주소를 증가시키면서 커널 처리 데이터가 대응 커널 버퍼 DPRAM(dual port random access memory)에 쓰여 질 수 있다.
DMA를 통해 외부 메모리에서 128비트 AXI 버스를 통해 입력되는 커널 처리 데이터의 입력 순서와 병렬 처리를 위하여 P 개의 커널이 동시에 출력되도록 하면서, 각 DPRAM의 데이터 폭(width)이 K×P가 되도록 하는 방법은 다양하다. 즉 이는 커널의 각 로우 별로 별도의 물리 메모리를 사용하여 물리 메모리에 저장해 주는 방식이다.
도 8은 본 발명의 실시 예에 따른 커널 처리 데이터의 입력과 커널 버퍼에의 쓰기 방식을 예시적으로 보여주는 도면이다. 도 8을 참조하면, 커널 버퍼(140)는 병렬 처리를 위하여 N 개의 K×K 커널 값 중에서 동시에 P(예를 들어 P=2)개의 K×K 커널 값을 매 클록 동시에 출력하여 컨볼루션 연산을 처리하는 파이프라인 병렬 처리부(160)에 인가할 수 있다. 여기서 N은 최대 512가 될 수도 있다. 따라서 커널 버퍼(140)는 일단 외부 메모리에서 읽은 커널 가중치 값들을 상술 된 바와 방법으로 칩 내부 커널 버퍼 DPRAM에 저장하고, 실제 커널 처리를 할 때 매 클록마다 원하는 P 개의 커널 처리 데이터를 선택할 수 있다.
상술 된 바와 같이, 메모리의 워드(word) 폭(width)과 개수를 고려하여 single precision인 경우 폭이 K×32인 메모리 K×P 개가 사용될 수 있다. 여기서 최대 K를 7으로, P를 2으로 할 때 폭(width) 224, 개수 14 개가 된다.
DMA 처리부(120)에서 입력되는 데이터는, 128 비트로 입력되고 단정도(single precision)인 경우, 한 번에 네 개의 가중치를 가지고 있다. 커널 처리 데이터를 가져오면서 사용하는 카운터를 통해 DMA 처리부(120)에서 입력되는 커널 가중치 값은 K 개씩 모아서 대응 병렬 위치(0 ~ P-1) 및 K×K 커널 안에서의 대응 로우를 담당하는 메모리에 주소를 증가시키면서 쓰여 질 수 있다.
도 9는 본 발명의 실시 예에 따른 커널 버퍼 쓰기 규칙(K=3, 128 비트 AXI 경우)을 예시적으로 보여주는 도면이다.
바톰 버퍼(145), 즉 바톰 K-라인 버퍼에 쓰기 동작은 다음과 같다. 바톰 버퍼(145)는 커널 윈도우가 움직일 때, 그것의 윈도우 안에 있는 모든 K×K 개의 데이터를 동시에 출력해 줄 수 있다. 따라서 바톰 버퍼(145)는 K×K 윈도우에 들어갈 수 있는 데이터들이 항상 물리적으로 별도의 메모리에 저장되는 제약을 가질 수 있다. 그리고 K 개의 라인들만 저장하면 되므로, 전체 용량은 K×Wi이다. 하지만, 전체 용량을 K×K 개의 메모리에 나누어 저장하므로, 각 메모리의 깊이(depth)는 K×Wi/(K×K), 즉 Wi/K가 된다(실제로는 Wi가 K로 나누어 떨어지지 않을 수도 있으므로
Figure pat00001
가 된다). 실제 컨볼루션 회로(100)를 구현할 때, K와 N, Wi는 처리할 수 있는 모든 경우에서 최대값을 사용해야 한다. 데이터 메모리의 구성은 아래와 같이 표현된다.
커널 크기 병렬 처리 정밀도 입력 수 입력 폭 깊이 개수
K P W M Wi W
Figure pat00002
K×K
7 2 32 512 800 32 114 49
3 16 32 64 800 32 267 9
바톰 데이터를 K×K 개의 메모리에 저장할 때, 후술하는 방법을 써서 데이터가 쓰여 질 메모리 K×K 개 중 하나(Mi, i = 0 ~ K×K-1)가 선택된다. 그 선택된 메모리 안에서의 그 데이터를 저장할 주소를 계산해서 저장하고, 읽을 때도 같은 방법을 써서 읽어 냄으로써, 커널이 움직이더라도 항상 원하는 데이터가 동시에 출력하는 것이 가능하다.
커널 버퍼(140)에서 P 개의 K×K 개의 커널 값이 출력되고, 바톰 버퍼(145)는 K×K 개의 메모리에서 데이터가 출력되면, 파이프라인 커널 처리부(160)는 K×K 개의 커널 가중치 값들과 데이터를 한 쌍으로 곱해져서 처리할 수 있다. 상술 된 바와 같이, 라인 버퍼(line buffer) (높이 K이고 폭(width)가 Wi인 데이터)에 있는 데이터 중에서 K×K 윈도우에 의해 곱해지는 값들은, 동시에 꺼낼 수 있다. 따라서, 그 값들은 항상 물리적으로 서로 다른 메모리에 저장되어 있다. 이것은 원래의 입력 데이터를 높이 Hi, 폭 Wi인 2차원 평면에 배치시키고, 그것을 K×K 윈도우로 나누었을 때, 각 데이터가 K×K 윈도우에 차지하는 위치에 대응하는 메모리에 저장함으로써 가능하다. 그 관계는 아래와 같이 표현할 수 있다.
PA(물리 메모리 내부의 주소) =
Figure pat00003
PM(사용할 물리 메모리) =
Figure pat00004
도 10은 본 발명의 실시 예에 따른 입력 데이터의 인덱스를 예시적으로 보여주는 도면이다. 도 10을 참조하면, K=3, Wi = 10, Hi = 8인 경우이다. 숫자는 입력 피쳐맵(FM, feature map)에서 입력 데이터의 인덱스(index)를 나타낸다(Hi=8, Wi=10, K=3인 경우). 여기서 격자가 움직일 때 어느 위치에 있든지 그 K×K 격자 안의 각 데이터는, 나중에 동시에 출력하도록 물리적으로 다른 메모리에 할당될 수 있다. 이것은 입력될 때, 전체를 K×K 크기의 창으로 나누어 (검은 격자) 그 안의 데이터들이 물리적으로 다른 메모리에 할당될 수 있다.
도 11은 본 발명의 실시 예에 따른 입력 데이터의 인덱스에 따른 선택된 물리 메모리 번호를 예시적으로 보여주는 도면이다. 도 11을 참조하면, 바톰 버퍼(145)는 모두 K×K 개가 있는데(M0 ~ MK×K-1), 도 11에 도시된 바와 같이 데이터 인덱스(data index)에서 어느 메모리(Phy Mem ID)를 선택할지 계산하는 방법과 그 결과를 보여 준다.
도 12는 본 발명의 실시 예에 다른 선택된 물리 메모리에 저장할 주소를 예시적으로 보여주는 도면이다. 도 12를 참조하면, 어느 메모리가 선택될 때, 그 메모리 안에서 어느 주소에 데이터를 저장해야 하는지 보여 준다. 한 번에 K 개의 라인들만 저장하면 되므로, 새로운 데이터 라인이 로드 되면, 다 사용한 라인의 위치에 데이터를 덮어 써도 문제가 없다. 위에서 %연산이나
Figure pat00005
같은 연산은, 카운터를 통해 쉽게 구현할 수 있다. 따라서, 어떤 바톰 데이터가 입력될 때, FM(feature map) 내에서의 주소(즉, 인덱스)을 알면, 상술된 방법으로 어느 물리 메모리에 저장할 지 혹은 어느 주소에 저장할 지 즉시 계산될 수 있다.
한편, 커널 버퍼(140) 및 바톰 버퍼(145)는 입력 데이터 로드부(130)의 설명한 대로 커널 처리 데이터와 입력 데이터를 저장하는 메모리이다. 실시 예에 있어서, 커널 버퍼(140) 및 바톰 버퍼(145)는 SRAM(synchronous random access memory)로 구현될 수 있다.
본 발명은 상술 된 바와 같이 입력 피쳐맵을 읽고 커널 윈도우의 위치를 변경하면서, 대응 윈도우 위치에 대해서 모든 출력 피쳐맵의 점들에 대해 병렬 처리 단위만큼 커널을 변경하면서, 동시에 여러 개의 출력을 만들기를 반복하는 방식이다. 이 과정에서 각 출력의 중간 결과를 읽어올 수도 있다.
커널/데이터 공급부(150)는, 제어부(110)의 명령을 받아 이러한 처리 순서에 맞게 생성할 출력 피쳐맵의 로우, 컬럼 인덱스에 따라 입력 데이터 버퍼들(140, 145)에서 커널 윈도우에 대응하는 K×K 개의 데이터를 읽어낼 수 있다.
또한 커널/데이터 공급부(150)는 읽혀진 데이터에 대해서 그것을 처리할 P 개의 K×K 커널을 차례로 읽고, 뒤따르는 커널 처리부에서 출력 피쳐맵 데이터의 중간 결과(혹은 최종결과)를 연속으로 P 개씩 생성 낼 수 있다. 즉, 커널/데이터 공급부(150)는 바톰 버퍼(145)에서 커널 윈도우의 데이터를 출력해 주고, 선택된 데이터에 대해서 생성할 출력 피쳐맵을 만들기 위한 커널 버퍼의 데이터를 읽어 P 개의 커널 처리 데이터를 출력하는 것을
Figure pat00006
번 처리할 수 있다.
한편, 파이프라인 병렬 커널 처리부(160)는 커널 처리 데이터와 입력 데이터를 사용하여 파이프라인 방식으로 출력 데이터를 만들 수 있다.
아래에서는 커널 버퍼(140)의 읽기를 설명하겠다.
커널 버퍼(140)에서 데이터를 읽어낼 때, 데이터는 커널링에서 사용할 수 있는 형태로 재배치 되어야 한다. 커널 처리는 상태 머신(state machine), 혹은 카운터를 통해 커널 윈도우의 위치를 변경하면서(index 증가로 표시함), 각 커널 윈도우 위치마다 커널을 P 개씩 변경하면서 병렬로 커널 처리하는 것을
Figure pat00007
번 루프(loop)를 반복한다. 이는 커널 버퍼(140)의 DPRAM 읽기 어드레스를 0부터
Figure pat00008
-1 까지 증가시키며 P×K 개의 메모리 Mp,r(병렬 처리번호 p = 0 ~ P-1, 저장할 커널 안에서 로우 번호 r = 0 ~ K-1)에서 각각 K 개(메모리 Mp,r 안에서 같이 저장되어 있는, 커널에서 같은 로우에 있는 K 개의 값들)의 커널 가중치 값을 꺼내어 P 개의 K×K 개 값으로 정렬하여 출력하면 된다.
아래에서는 바톰 데이터 버퍼 읽기를 설명하겠다.
바톰 데이터를 저장할 때, 선택된 물리 메모리를 Mi라고 하고, 2-D 입력 피쳐맵에서의 index d = Wi×로우_index + 컬럼_index 라고 할 때, 데이터의 인덱스(index)가 i이면, 그것은 메모리 Mh에 저장되고(h는 physical memory index), Mh안에서 어드레스 A에 저장된다는 아래의 규칙을 사용하였다.
h =
Figure pat00009
A =
Figure pat00010
따라서 커널 윈도우가 움직일 때에도 K×K 개의 데이터의 어드레스(상기 index i에 대응하는 값)를 알면, 위의 식을 이용하여 어느 메모리의 몇 번지에 해당 값이 존재하는지 알 수 있다.
도 13은 본 발명의 실시 예에 따른 커널 중심 인덱스로부터의 다른 값들 인덱스 계산을 예시적으로 보여주는 도면이다. 도 13을 참조하면, 예를 들어 K=3인 경우, 커널 윈도우에 대응하는 데이터 인덱스(data index)를 나타낸다.
위와 같이 데이터 버퍼를 읽어낼 때, 현재 처리 중인 중심 데이터의 인덱스에 따라 위와 같은 방법으로 커널의 각 지점에 대응하는 인덱스가 계산될 수 있다. 따라서 데이터를 쓸 때 사용했던 규칙을 사용하면, 어느 메모리의 어느 주소에서 읽어낼지 알 수 있다. 인덱스 값이 FM(feature map) 범위를 벗어나면, 클리핑(clipping)하여 0으로 만들고, 그렇지 않을 때, 위의 식을 대입하여 물리 메모리 인덱스와 주소가 만들어질 수 있다.
도 14는 본 발명의 실시 예에 따른 파이프라인 병렬 커널 처리부(160)를 예시적으로 보여주는 도면이다. 도 14를 참조하면, 파이프라인 병렬 커널 처리부(160)는 커널/데이터 공급부(150)로부터 출력되는 K×K 개의 바톰 데이터와 P×K×K 개의 커널 웨이트 값들을 사용하여 컨볼루션 연산을 수행한 P 개의 결과 값들을 생성할 수 있디. 도 14에 도시된 파이프라인 병렬 커널 처리부(160)가 P 개 (예, 2개) 있는 구조이다. 곱셈기(161)와 덧셈기(162)는 데이터의 정밀도(precision)에 대응하여 사용될 수 있다. 파이프라인(pipeline)을 사용하여 매 클록 새로운 결과가 나올 수 있다.
결과 수신부(170)는 파이프라인 병렬 커널 처리부(160)에서 출력되는 중간 결과(부분합) 데이터를 받아 대응하는 외부 메모리에 누적하도록 구현될 수 있다. 외부 메모리에서 읽혀진 N 개의 중간 결과 값들은 컨볼루션 연산이 시작하기 전에 P 개씩 병렬로 묶여서 결과 수신부(170)의 내부에 있는 FIFO에 저장되어 파이프라인 병렬 커널 처리부(160)의 결과 값들의 출력 타이밍에 맞추어 출력되어 더해진 후에 파셜 탑 버퍼 메모리(180)에 128비트 단위로 묶어 주소를 증가시키며 저장될 수 있다.
중간 결과 탑 입력이 저장되는 결과 수신부(170)의 내부의 FIFO는 폭(width)이 P×W 비트 이고(W는 single precision 일 경우 32), 깊이(depth)는
Figure pat00011
이다.
또한 파셜 탑 버퍼(180)는 폭(width)가 128 비트이고 깊이(depth)가 N/4이다. 파셜 탑 버퍼(180)는 결과 수신부(170)의 중간 결과를 저장하도록 구현될 수 있다.
외부 메모리는 결과 수신부(170)가 저장하여 중간 결과 탑 버퍼(180)에 저장되어 있는 중간 결과를 읽고, DMA를 통해서 외부 메모리에 저장하도록 구현될 수 있다. 외부 메모리는, 제어부(110)의 명령을 받아 중간 결과 탑 버퍼 메모리(180)에서 데이터를 차례로 읽어 128비트 단위로 DMA 처리부(120)로 전송하는데, DMA 처리부(120)의 내부에 있는 쓰기 FIFO에 빈 공간이 있으면, 그 FIFO에 쓰게 된다.
출력 데이터는, 모든 출력 피쳐맵들의 동일한 위치의 데이터들이 연속으로 배열된 형태이므로, 실제 AXI로 출력될 때 각 데이터는 Wo×Ho 만큼의 오프셋을 두고 써야 한다. 예를 들어, 필요한 경우 32비트 단위로 쓰여 질 수 있다.
데이터 사이의 어드레스 오프셋은 출력 피쳐맵의 크기가 큰 경우(예를 들어 600×800인 경우 offset은 0x75300), DDR3 메모리의 한 로우 간격을 벗어남으로써 접근 시간을 길어지게 한다. 이는 burst 쓰기의 속도가 떨어지는 단점이 된다. 일단 출력 피쳐맵을 서로 인터리브드 방식으로 썼다가, 다음 계층 처리를 위하여 차례로 읽어서 피쳐맵 단위로 재정렬하는 방법을 생각할 수 있다. DMA 처리부(120)는 내부의 DMA 쓰기 FIFO에 빈 공간이 있으면, 내부 데이터를 128 비트 단위로 쓸 수 있다.
본 발명의 실시 예에 따른 컨볼루션 회로(100)는, 외부 메모리에 있는 M×N 개의 K×K 커널을 사용하여, 외부 메모리에 있는 M 개의 입력 피쳐맵을 받아 외부 메모리에 N 개의 출력 피쳐맵을 생성 낼 수 있다.
실시 예에 있어서, 컨볼루션 회로(100)는 CPU로부터 입출력 피쳐맵의 개수와 크기, 커널의 크기, 입력 피쳐맵과 커널이 시작하는 주소, 출력 피쳐맵이 위치할 주소 등 정보와 함께 컨볼루션 시작 명령을 받아 출력 피쳐맵을 만들 수 있다. 그 방법은, 입력 피쳐맵을 하나씩 읽어 처리하는 방식이고, 이전의 입력 피쳐맵을 처리하고 계산해 둔 출력 피쳐맵의 중간 결과 값이 외부 메모리에 있는 경우, 그 값을 읽은 후, 현재 처리 중인 입력 피쳐맵에서 각 출력 피쳐맵을 만들기 위한 N 개의 커널을 읽어 입력 피쳐맵에 대해 컨볼루션 처리하여 나온 결과 값을 이전 처리한 중간 결과에 더해서 업데이트된 값으로 다시 외부 메모리에 저장하는 것을 반복하는 방법으로 출력 피쳐맵을 만들 수 있다.
실시 예에 있어서, 컨볼루션 회로는 현재 처리하는 입력 피쳐맵을 처리할 때, 입력 피쳐맵의 데이터는 입력 피쳐맵을 로우 단위로, 행 안에서는 컬럼 단위로 처리할 수 있다.
실시 예에 있어서, 커널 윈도우에 필요한 데이터를 외부 메모리에서 가져올 때, 컨볼루션 회로는 처리할 데이터의 커널 윈도우에 필요한 데이터가 포함되는 행들이 칩 내부에 있도록 라인 단위로 읽고, 항상 입력 피쳐맵에서 K 개의 행의 데이터가 칩 내부에 있도록 한다.
실시 예에 있어서, 입력 피쳐맵 데이터를 칩 내부에 로드 할 때, 컨볼루션 회로는 커널 윈도우에 의해 처리될 K×K 개의 인접한 입력 데이터를 동시에 출력할 수 있도록 물리적으로 서로 다수의 메모리에 나누어 저장할 수 있다.
실시 예에 있어서, 컨볼루션 회로는 각 물리적 메모리 안에서 사용될 데이터가 각각 다른 주소가 되도록 저장할 수 있다.
실시 예에 있어서, 컨볼루션 회로는 선택된 커널 윈도우 위치에 따라 필요한 입력 데이터 K×K 개를 선택할 수 있다.
실시 예에 있어서, 선택된 입력 데이터에 대해서 동시에 한 번에 여러 개의 출력 피쳐맵의 동일한 위치의 값을 병렬로 만들기 위하여, 컨볼루션 회로는 K×K 개의 커널을 병렬로 필요한 개수만큼 선택할 수 있다.
실시 예에 있어서, 입력 데이터와 함께 각각 처리하여 병렬로 출력 피쳐맵의 중간 결과를 생성 내는 것을 반복하고, 중간 결과는 모든 출력 피쳐맵의 동일한 지점의 중간 결과 값이 처리되면, 컨볼루션 회로는 그 결과 값을 저장할 수 있다.
도 15는 본 발명의 실시 예에 따른 모바일 장치(1000)를 예시적으로 보여주는 도면이다. 도 15를 참조하면, 모바일 장치(1000)는 프로세서(AP/ModAP, 1100), 버퍼 메모리(1200), 디스플레이/터치 모듈(1300) 및 저장 장치(1400)를 포함할 수 있다.
프로세서(1100)는 모바일 장치(1000)의 전반적인 동작 및 외부와의 유선/무선 통신을 제어하도록 구현될 수 있다. 예를 들어, 프로세서(1100)는 어플리케이션 프로세서(AP, application processor), 통합 모뎀 어플리케이션 프로세서(ModAP) 등 일 수 있다.
프로세서(1100)는 컨볼루션 회로(1120)를 포함할 수 있다. 컨볼루션 회로(1120)는 도 1 내지 도 14에서 설명된 컨볼루션 신경망 동작을 수행하도록 구현될 수 있다. 예를 들어, 컨볼루션 회로(1120)는 도 6에 도시된 컨볼루션 회로(100)으로 구현될 수 있다.
버퍼 메모리(1200)는 모바일 장치(1000)의 처리 동작 시 필요한 데이터를 임시로 저장하도록 구현될 수 있다. 실시 예에 있어서, 버퍼 메모리(1200)는 DRAM, SDRAM, MRAM 등으로 구현될 수 있다. 여기서 버퍼 메모리(1200)는 도 6에 도시된 외부 메모리으로 구현될 수 있다.
디스플레이/터치 모듈(1300)은 프로세서(1100)에서 처리된 데이터를 디스플레이 하거나, 터치 패널로부터 데이터를 입력 받도록 구현될 수 있다.
저장 장치(1400)는 사용자의 데이터를 저장하도록 구현될 수 있다. 저장 장치(2400)는 eMMC(embedded multimedia card), SSD(solid state drive), UFS(universal flash storage) 등 일 수 있다.
저장 장치(1400)는 적어도 하나의 비휘발성 메모리 장치를 포함할 수 있다.
본 발명의 실시 예에 따른 모바일 장치(1000)는 컨볼루션 신경망(CNN)을 이용하여 영상을 인식함으로써, 효율적인 인식을 제공할 수 있다.
도 16은 본 발명의 실시 예에 따른 어플리케이션 프로세서(1100)의 동작 방법을 예시적으로 보여주는 흐름도이다. 도 15 및 도 16을 참조하면, 어플리케이션 프로세서(1100)의 동작 방법은 다음과 같다.
어플리케이션 프로세서(1100)의 컨볼루션 회로(1120)는 특징을 추출하기 위하여 입력 피쳐맵들의 각각에 대한 병렬 컨볼루션 연산들을 수행할 수 있다(S110). 여기서 병렬 컨볼루션 연산들을 수행하는 단계는, 외부 메모리로부터 중간 결과 또는 입력 데이터를 수신하면서 동시에 중간 결과 값들을 상기 외부 메모리로 출력하는 단계를 포함할 수 있다. 이후, 어플리케이션 프로세서(1100)는 상기 추출된 특징을 이용하여 분류하기 위하여 상기 병렬 컨볼루션 연산들의 결과 값들의 각각에 대한 서브샘플링 연산들을 수행할 수 있다(S120).
한편, 상술 된 본 발명의 내용은 발명을 실시하기 위한 구체적인 실시 예들에 불과하다. 본 발명은 구체적이고 실제로 이용할 수 있는 수단 자체뿐 아니라, 장차 기술로 활용할 수 있는 추상적이고 개념적인 아이디어인 기술적 사상을 포함할 것이다.
100: 컨볼루션 회로
110: 제어부
120: DMA 회로
130: 입력 데이터 로드부
140: 커널 버퍼
145: 바톰 버퍼
150: 커널/데이터 공급부
160: 파이프라인 병렬 커널 처리부
170: 결과 수신부
180: 파셜 탑 버퍼
190: 출력 데이터 저장부

Claims (20)

  1. 컨볼루션 회로의 동작 방법에 있어서:
    입력 피쳐 맵들을 수신하는 단계;
    커널 단위로 병렬 처리하는 컨볼루션 연산들을 통하여 상기 입력 피쳐 맵들의 각각에 대응하는 출력 피쳐 맵들을 생성하는 단계; 및
    상기 출력 피쳐 맵들을 외부 메모리로 출력하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 커널 단위는 K × K (K는 자연수)인 방법.
  3. 제 2 항에 있어서,
    상기 입력 피쳐 맵들의 각각의 대응하는 커널에 K 개의 라인에 대응하는 칩의 내부 메모리에 메모리에 저장하는 단계를 더 포함하는 방법.
  4. 제 2 항에 있어서,
    상기 출력 피쳐 맵들을 생성하는 단계는,
    상기 출력 피쳐 맵들을 생성하는데 필요한 커널들을 상기 외부 메모리에 저장하는 단계를 포함하는 방법.
  5. 제 1 항에 있어서,
    상기 컨볼루션 연산의 부분합을 상기 외부 메모리로부터 로드 및 누적, 혹은 상기 외부 메모리에 스토어를 반복하는 단계를 더 포함하는 방법.
  6. 제 1 항에 있어서,
    상기 병렬 처리하는 컨볼루션들 중 적어도 하나는 물리적으로 서로 다른 메모리를 사용하는 방법.
  7. 제 1 항에 있어서,
    상기 병렬 처리하는 컨볼루션들의 각각의 결과 값들이 상기 외부 메모리에 사전에 결정된 순서로 저장되는 방법.
  8. 제 1 항에 있어서,
    상기 출력 피쳐 맵들 중 적어도 하나를 외부 메모리로 출력하면서, 상기 컨볼루션 연산들 중 적어도 하나가 수행되는 방법.
  9. 제 1 항에 있어서,
    상기 외부 메모리로부터 복수의 피쳐맵 데이터를 수신하면서 동시에 복수의 피쳐맵 데이터가 출력되는 방법.
  10. 외부 메모리로부터 데이터를 읽거나, 상기 외부 메모리로 데이터를 출력하는 DMA(direct memory access) 처리부;
    처리 중인 입력 피쳐맵과 N (N은 2 이상의 자연수)개의 출력 피쳐맵을 연결시켜 주는 커널 처리 데이터를 저장하는 커널 버퍼;
    입력 피쳐맵에 대응하는 복수의 입력 데이터를 저장하는 바톰 버퍼;
    DMA 처리부의 상기 N개의 커널 처리 데이터를 상기 커널 버퍼로 전송하는 입력 데이터 로드부;
    상기 바톰 버퍼의 P(P는 2 이상의 자연수)개의 입력 데이터 및 상기 커널 버퍼의 P개의 커널 처리 데이터를 출력하는 커널/데이터 공급부;
    상기 P개의 커널 처리 데이터와 대응하는 K개의 커널 웨이트 값들을 이용하여 컨볼루션 연산을 수행하는 파이프라인 병렬 커널 처리부;
    상기 파이프라인 병렬 커널 처리부의 결과 값을 수신하는 결과 수신부;
    상기 중간 결과 값들을 저장하는 파셜 탑 버퍼; 및
    상기 DMA 제어부, 상기 커널 버퍼, 상기 바톰 버퍼, 상기 입력 데이터 로드부, 상기 커널/데이터 공급부, 상기 파이프라인 병렬 커널 처리부, 상기 결과 수신부, 및 상기 파셜 탑 버퍼를 제어하는 제어부를 포함하는 컨볼루션 회로.
  11. 제 10 항에 있어서,
    상기 DMA 처리부는,
    상기 외부 메모리로부터 복수의 커널 처리될 입력 피쳐맵 데이터 및 커널 처리 데이터를 저장하는 읽기 FIFO(first-in, first-out) 메모리; 및
    상기 외부 메모리에 쓰여질 복수의 커널 처리된 데이터를 저장하는 쓰기 FIFO 메모리를 포함하는 컨볼루션 회로.
  12. 제 10 항에 있어서,
    상기 커널 버퍼는, 상기 N 개의 커널 처리 데이터를 저장하면서, 동시에 병렬 처리를 위한 상기 P개의 커널 처리 데이터를 출력하는 DPRAM(dual port random access memory)로 구현되는 컨볼루션 회로.
  13. 제 11 항에 있어서,
    상기 커널 버퍼는 입력 피쳐맵의 순서로 커널 처리 데이터를 상기 외부 메모리로부터 로드하고, 상기 입력 피쳐맵을 처리할 때 출력 피쳐맵들을 처리하기 위한 순서대로 커널 처리 데이터를 메모리에 로드하고, 각 커널 처리 데이터의 저장 순서는 로우 단위를 먼저 저장하고, 각 로우 안에서 컬럼 단위로 저장되는 컨볼루션 회로.
  14. 제 13 항에 있어서,
    상기 커널 버퍼는 커널의 각 로우 별로 서로 다른 물리 메모리를 배치하는 컨볼루션 회로.
  15. 제 11 항에 있어서,
    커널 버퍼는 상기 읽기 FIFO 메모리로부터 상기 K개의 웨이트 값들을 모으고, 대응하는 메모리에 저장시키는 컨볼루션 회로.
  16. 제 11 항에 있어서,
    상기 바톰 버퍼는 상기 입력 피쳐맵에서 입력 데이터에 대한 커널 윈도우가 움직일 때 상기 커널 윈도우 안의 모든 데이터를 동시에 출력하는 컨볼루션 회로.
  17. 제 16 항에 있어서,
    상기 커널/데이터 공급부는 출력 피쳐맵의 로우 및 컬럼 인덱스에 따라 상기 바톰 버퍼에서 상기 커널 윈도우에 대응하는 입력 데이터를 읽고, 상기 커널 버퍼에서 상기 읽혀진 데이터를 처리하기 위한 상기 P개의 커널 처리 데이터를 읽는 컨볼루션 회로.
  18. 제 17 항에 있어서,
    상기 파이프라인 병렬 커널 처리부는 상기 커널/데이터 공급부로부터 출력된 상기 입력 데이터 및 대응하는 커널 웨이트 값들에 대하여 곱셈 연산 및 덧셈 연산을 수행함으로써 상기 P개의 결과 값들을 출력하는 컨볼루션 회로.
  19. 제 11 항에 있어서,
    상기 파셜 탑 버퍼로부터 중간 결과 값들을 읽고 상기 읽혀진 중간 결과 값들을 상기 DMA 처리부의 상기 쓰기 FIFO 메모리에 전송하는 출력 데이터 저장부를 더 포함하는 컨볼루션 회로.
  20. 어플리케이션 프로세서의 동작 방법에 있어서:
    특징을 추출하기 위하여 입력 피쳐맵들의 각각에 대한 병렬 컨볼루션 연산들을 수행하는 단계; 및
    상기 추출된 특징을 분류하기 위하여 상기 병렬 컨볼루션 연산들의 결과 값들의 각각에 대한 서브샘플링 연산들을 수행하는 단계를 포함하고,
    상기 병렬 컨볼루션 연산들을 수행하는 단계는,
    외부 메모리로부터 입력 데이터를 수신하면서 동시에 중간 결과 값들을 상기 외부 메모리로 출력하는 단계를 포함하는 방법.
KR1020170001967A 2017-01-05 2017-01-05 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법 KR102642853B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170001967A KR102642853B1 (ko) 2017-01-05 2017-01-05 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법
US15/847,466 US20180189643A1 (en) 2017-01-05 2017-12-19 Convolution circuit, application processor including the same, and operating method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170001967A KR102642853B1 (ko) 2017-01-05 2017-01-05 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법

Publications (2)

Publication Number Publication Date
KR20180080876A true KR20180080876A (ko) 2018-07-13
KR102642853B1 KR102642853B1 (ko) 2024-03-05

Family

ID=62712291

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170001967A KR102642853B1 (ko) 2017-01-05 2017-01-05 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법

Country Status (2)

Country Link
US (1) US20180189643A1 (ko)
KR (1) KR102642853B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200049452A (ko) * 2018-10-29 2020-05-08 한국전자통신연구원 데이터 이동 컨트롤러를 포함하는 신경망 시스템
US10983878B2 (en) 2018-11-27 2021-04-20 Electronics And Telecommunications Research Institute Processor for detecting and preventing recognition error
US11188796B2 (en) 2019-10-01 2021-11-30 Samsung Electronics Co., Ltd. Method and apparatus with data processing

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102548718B1 (ko) * 2017-06-07 2023-06-28 삼성전자주식회사 전자 장치 및 그 제어 방법
CN108228696B (zh) * 2017-08-31 2021-03-23 深圳市商汤科技有限公司 人脸图像检索方法和系统、拍摄装置、计算机存储介质
CN109993274B (zh) * 2017-12-29 2021-01-12 深圳云天励飞技术有限公司 人工智能计算装置及相关产品
WO2020003345A1 (ja) * 2018-06-25 2020-01-02 オリンパス株式会社 演算処理装置
CN109284474B (zh) * 2018-08-13 2020-09-11 北京大学 一种加法器辅助实现图像卷积运算的闪存系统及方法
US11050494B2 (en) 2018-08-17 2021-06-29 Electronics And Telecommunications Research Institute Signal-multiplexing apparatus and method based on machine learning
US10572225B1 (en) * 2018-09-26 2020-02-25 Xilinx, Inc. Circuit arrangements and methods for performing multiply-and-accumulate operations
US11068394B2 (en) * 2018-10-29 2021-07-20 Electronics And Telecommunications Research Institute Neural network system including data moving controller
KR20200063289A (ko) 2018-11-16 2020-06-05 삼성전자주식회사 영상 처리 장치 및 그 동작방법
US11487845B2 (en) 2018-11-28 2022-11-01 Electronics And Telecommunications Research Institute Convolutional operation device with dimensional conversion
WO2020125806A1 (en) 2018-12-17 2020-06-25 Shanghai United Imaging Intelligence Co., Ltd. Systems and methods for image segmentation
CN109816093B (zh) * 2018-12-17 2020-12-04 北京理工大学 一种单路式卷积实现方法
CN109583576B (zh) * 2018-12-17 2020-11-06 上海联影智能医疗科技有限公司 一种医学图像处理装置及方法
KR20200081044A (ko) * 2018-12-27 2020-07-07 삼성전자주식회사 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
KR20200082613A (ko) * 2018-12-31 2020-07-08 에스케이하이닉스 주식회사 프로세싱 시스템
JP7227769B2 (ja) * 2019-01-10 2023-02-22 キヤノン株式会社 情報処理装置及びメモリ制御方法
CN111832713A (zh) * 2019-04-19 2020-10-27 北京灵汐科技有限公司 一种基于行缓冲Linebuffer的并行计算方法及计算设备
CN110414672B (zh) * 2019-07-23 2022-11-01 江苏鼎速网络科技有限公司 卷积运算方法、装置及系统
WO2021102946A1 (zh) * 2019-11-29 2021-06-03 深圳市大疆创新科技有限公司 计算装置、方法、处理器和可移动设备
CN112101284A (zh) * 2020-09-25 2020-12-18 北京百度网讯科技有限公司 图像识别方法、图像识别模型的训练方法、装置及系统
EP4012618A1 (en) 2020-12-08 2022-06-15 Electronics and Telecommunications Research Institute Artificial intelligence processor and method of processing deep-learning operation using the same
US20230065725A1 (en) * 2021-09-02 2023-03-02 Qualcomm Incorporated Parallel depth-wise processing architectures for neural networks

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160140394A (ko) * 2015-05-29 2016-12-07 삼성전자주식회사 신경망을 실행하는 방법 및 장치

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160140394A (ko) * 2015-05-29 2016-12-07 삼성전자주식회사 신경망을 실행하는 방법 및 장치

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Seong-Wook Park et al., An Energy-Efficient and Scalable Deep Learning/Inference Processor With Tetra-Parallel MIMD Architecture for Big Data Applications, IEEE TRANSACTIONS ON BIOMEDICAL CIRCUITS AND* *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200049452A (ko) * 2018-10-29 2020-05-08 한국전자통신연구원 데이터 이동 컨트롤러를 포함하는 신경망 시스템
US10983878B2 (en) 2018-11-27 2021-04-20 Electronics And Telecommunications Research Institute Processor for detecting and preventing recognition error
US11188796B2 (en) 2019-10-01 2021-11-30 Samsung Electronics Co., Ltd. Method and apparatus with data processing

Also Published As

Publication number Publication date
KR102642853B1 (ko) 2024-03-05
US20180189643A1 (en) 2018-07-05

Similar Documents

Publication Publication Date Title
KR20180080876A (ko) 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법
CN110097174B (zh) 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置
CN109102065B (zh) 一种基于PSoC的卷积神经网络加速器
US11003985B2 (en) Convolutional neural network system and operation method thereof
CN107392309A (zh) 一种基于fpga的通用定点数神经网络卷积加速器硬件结构
CN108573305B (zh) 一种数据处理方法、设备及装置
CN102208005B (zh) 一种2-d卷积器
US20210192246A1 (en) Convolutional neural network-based image processing method and device, and unmanned aerial vehicle
CN108520297B (zh) 可编程深度神经网络处理器
US11294851B2 (en) Reconfigurable reduced instruction set computer processor architecture with fractured cores
EP4156079A1 (en) Image data storage method, image data processing method and system, and related apparatus
CN114527953B (zh) 存储器数据处理系统、方法、装置、计算机设备和介质
JP2017151604A (ja) 演算処理装置
US20210326078A1 (en) Machine perception and dense algorithm integrated circuit
CN111984189A (zh) 神经网络计算装置和数据读取、数据存储方法及相关设备
JPWO2019216376A1 (ja) 演算処理装置
CN112884137A (zh) 神经网络的硬件实现方式
JP2022137247A (ja) 複数の入力データセットのための処理
US20220043630A1 (en) Electronic device and control method therefor
CN104679670A (zh) 一种面向fft和fir的共享数据缓存结构及管理方法
CN108416430A (zh) 卷积神经网络的池化运算装置及方法
CN108701102A (zh) 直接存储器访问控制器、数据读取方法和数据写入方法
CN104869284A (zh) 一种双线性插值放大算法的高效率fpga实现方法和装置
CN1105358C (zh) 具有运算功能的半导体存储器及使用该存储器的处理器
CN115167815A (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