KR20200100812A - 하드웨어 기반 풀링을 위한 시스템 및 방법 - Google Patents

하드웨어 기반 풀링을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20200100812A
KR20200100812A KR1020207021561A KR20207021561A KR20200100812A KR 20200100812 A KR20200100812 A KR 20200100812A KR 1020207021561 A KR1020207021561 A KR 1020207021561A KR 20207021561 A KR20207021561 A KR 20207021561A KR 20200100812 A KR20200100812 A KR 20200100812A
Authority
KR
South Korea
Prior art keywords
pooling
data
output
result
array
Prior art date
Application number
KR1020207021561A
Other languages
English (en)
Other versions
KR102523263B1 (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 KR20200100812A publication Critical patent/KR20200100812A/ko
Application granted granted Critical
Publication of KR102523263B1 publication Critical patent/KR102523263B1/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/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
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06K9/342
    • G06K9/4628
    • G06K9/6267
    • G06K9/66
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • G06N3/0454
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • G06N3/0481
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/20Image preprocessing
    • G06V10/26Segmentation of patterns in the image field; Cutting or merging of image elements to establish the pattern region, e.g. clustering-based techniques; Detection of occlusion
    • G06V10/267Segmentation of patterns in the image field; Cutting or merging of image elements to establish the pattern region, e.g. clustering-based techniques; Detection of occlusion by performing operations on regions, e.g. growing, shrinking or watersheds
    • 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/764Arrangements for image or video recognition or understanding using pattern recognition or machine learning using classification, e.g. of video objects
    • 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
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/19Recognition using electronic means
    • G06V30/191Design or setup of recognition systems or techniques; Extraction of features in feature space; Clustering techniques; Blind source separation
    • G06V30/19173Classification techniques
    • 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/048Activation functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Software Systems (AREA)
  • Biomedical Technology (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Biophysics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Mathematical Physics (AREA)
  • Molecular Biology (AREA)
  • Multimedia (AREA)
  • Computational Linguistics (AREA)
  • Medical Informatics (AREA)
  • Neurology (AREA)
  • Databases & Information Systems (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Biodiversity & Conservation Biology (AREA)
  • Complex Calculations (AREA)

Abstract

콘볼루션 뉴럴 네트워크(CNN)에서 콘볼루션 계층의 출력 채널을 나타내는 콘볼루션 엔진의 출력을 처리하기 위해 새로운 하드웨어 기반 풀링 아키텍처를 이용하는 시스템 및 방법이 본 명세서에 기술된다. 풀링 시스템은 출력을 어레이들의 세트로 변환하고, 풀링 결과를 생성하기 위해 풀링 연산에 따라 어레이들을 정렬한다. 특정 실시예들에서, 이는 예를 들어, 복수의 산술 사이클에 걸쳐, 출력에서의 데이터의 어레이를 행들로 정렬하고, 서로에 대해 행들을 시프트시키는, 정렬기를 사용하여 달성된다. 풀러는, 풀링 결과를 생성하기 위해 각각의 행으로부터의 데이터의 서브세트의 조합에 풀링 연산을 적용한다.

Description

하드웨어 기반 풀링을 위한 시스템 및 방법
본 출원은, 피터 조세프 배넌, 케빈 알테어 허드가 발명자로 열거된, "하드웨어 기반 풀링을 위한 시스템 및 방법(SYSTEMS AND METHODS FOR HARDWARE-BASED POOLING)"이라는 명칭으로 2018년 1월 4일에 출원된 공동 소유의 미국 특허 출원 제15/862,369호(도켓(Docket) 번호 20150-2167)에 대한 우선권을 주장한다. 전술한 특허 문헌 각각은 그 전체가 본 명세서에 참조로 포함된다.
본 개시는 일반적으로, 계산 능력(computational power) 및 스토리지 요구(storage requirements)와 같은 컴퓨팅 자원의 활용을 개선하기 위한 시스템 및 방법에 관한 것이다. 보다 구체적으로, 본 개시는 콘볼루션 뉴럴 네트워크(CNN: convolutional neural network) 아키텍처들을 사용하여 콘볼루션 및 풀링 데이터(convolutional and pooling data)를 생성하는 컴퓨터 비전 애플리케이션들(computer vision applications)에서의 산술 프로세스들(arithmetic processes)의 효율을 개선하기 위한 시스템 및 방법에 관한 것이다.
뉴럴 네트워크 기반 이미지 분류기(Neural network-based image classifiers)는 분류 및 객체 인식(object recognition)을 위한 복잡한 특징(complex features)을 자동으로 학습하는데 있어서 상당한 개선을 달성하고 있다. 예를 들어, 콘볼루션 뉴럴 네트워크(CNN: Convolutional Neural Network) 모델은 이미지가 사람 또는 동물을 포함하는 것으로 분류(categorized)될 수 있는지 여부를 자동으로 결정하는데 사용될 수 있다. CNN은 결정 또는 예측을 할 때, 많은 수의 계층적 네트워크 계층(hierarchical network layers) 및 서브-계층(sub-layers)을 입력 이미지(input image)에 적용한다. CNN의 한 특징은 각각의 네트워크 계층이 이전 계층의 출력으로 제공(serves)되고, 이는 통상적으로 첫 번째 콘볼루션 계층(convolutional layer)으로부터 시작하여 하나 이상의 최종 계층들(final layers)로 끝난다. 예를 들어, 하나 이상의 최종 계층들은, 입력 이미지가 실제로 특정 객체를 포함하는 것으로 분류될 수 있는 가능성을 나타내는 스코어들(scores)을 전달하는 활성화 값들(activation values)을 가지는 노드들을 포함하는 완전 연결 계층(fully connected layer)일 수 있다.
콘볼루션 계층은 이미지의 콘볼루션 윈도우(convolution window)의 픽셀들에 가중치(weights)의 세트(set)를 적용하는 커널들 또는 활성화 함수들(activation functions)로 알려진 복수의 필터들을 사용할 수 있다. 가중치는 훈련 단계(training phase) 동안 CNN에 의해 학습되어 그 윈도우와 연관된 활성화 값(activation value)을 생성한다. 각각의 필터에 대해, 콘볼루션 계층은 상기 가중치의 세트에 기초하여 계산되는 활성화 값을 출력하는 하나의 노드(즉, 뉴런(neuron))을 각각의 픽셀에 대해 가질 수 있다. 콘볼루션 윈도우에 대한 활성화 값은 이미지 내의 다른 위치들에서 특징을 식별하는데 사용될 수 있는 에지(edge)와 같은 특징(feature) 또는 특성(characteristic)을 식별한다. 필터에 대한 모든 노드들이 동일한 가중치의 세트를 공유할 수 있기 때문에, 가중치를 재사용(reusing)하는 것은 스토리지 공간 및 계산 시간 모두의 활용을 증가시키는 일반적인 기술이다.
CNN의 가장 중요한 유형의 계층 중에는 풀링 계층(pooling layer)이 있으며, 이는 통상적으로 콘볼루션 계층 이후에 배치되는 기본 독립 빌딩 블록(basic, independent building block)이다. 이미지에 적용될 때, 풀링 계층은 네트워크가 특징 맵을 결정하고 이미지에 대한 특징들의 세트를 학습할 수 있게 한다. 풀링(pooling)은 최대 풀링(max-pooling) 또는 평균 풀링(average-pooling)과 같은 비선형 함수(nonlinear function)를 사용하는 비선형 서브-샘플링(sub-sampling) 또는 다운-샘플링(down-sampling)의 형태로 간주되어, 네트워크를 통해 계층으로부터 계층으로 진행(progressing)할 때 뉴런의 수를 감소시키며, 이에 의해 계산의 양을 감소시키고 계산 성능을 더욱 증가시킨다.
풀링은, 일반적으로, 선행하는 콘볼루션 계층(preceding convolution layer)의 출력의 작은 비-중첩 영역들(small, non-overlapping areas)(즉, 수용 필드(receptive field))에 걸쳐 단계적으로(stepwise) 풀링 윈도우(pooling window)(예를 들어, 폭(width)으로 복수의 픽셀들(multiple pixels)을 가지고 높이(height)로 복수의 픽셀들을 가지는 2 차원 정사각형(a two-dimensional square))를 슬라이딩(sliding)하는 것을 포함한다. 그 영역에서 뉴런들의 그룹의 값들을 집합(aggregating)시키는 것은, 로컬 이웃(local neighborhood)에서 각각의 그룹에 대한 단일 출력 값(예를 들어, 정수(integers))을 제공한다. 각각의 그룹에 할당된 이러한 출력 값들은 콘볼루션을 수행하지 않고 후속 계층으로 전달(passed)되고, 풀링된 영역에서 사용되는 풀링 함수(pooling function)의 유형(예를 들어, 평균 또는 최대)에 의존한다. 풀링 윈도우의 크기 및 위치는 풀링 스트라이드(pooling stride)(즉, 인터벌(interval) 또는 스텝 크기(step size)) 및 출력 픽셀의 위치에 의존한다. 종종, 최종 풀링 계층(last pooling layer) 뒤에는 예를 들어, 각각의 특정 클래스(class)에 대한 조건부 확률(conditional probability)의 추정치(estimate)로서 최종 예측(final prediction)을 출력하는 CNN 아키텍처의 최종 출력 계층(final output layer)(예를 들어, 소프트-맥스 비선형성(soft-max nonlinearity)을 갖는 완전 연결 계층)이 이어진다.
가중치들의 공유에 의해 콘볼루션 계층들의 성능을 개선하고, 산술 로직 유닛 활용(arithmetic logic unit utilization)을 개선하는데 있어서 큰 진전이 이루어진 반면에, 유사하게 계산 집약적인 풀링 계층들은, 주로 기존의 뉴럴 네트워크 아키텍처들에 내재된 제약들(constraints)로 인해, 무시되었다.
따라서, 전체 계산 비용을 감소시키기 위해, 이용가능한 계산 자원의 최종 이용 성능(utilization end performance)을 더 증가시킬 수 있도록 뉴럴 네트워크에서의 풀링 계층의 성능을 개선하는 시스템 및 방법을 제공하는 것이 바람직할 것이다.
본 발명의 실시예들에 대한 참조가 이루어질 것이며, 실시예들의 예가 첨부 도면들에 도시될 수 있다. 이러한 도면들은 제한적인 것은 아니며 예시적인 것으로 의도된다. 본 발명이 이러한 실시예들의 맥락에서 일반적으로 설명되었지만, 본 발명의 범위를 이들 특정 실시예들로 제한하도록 의도되지는 않는다는 것을 이해해야 한다.
도 1은 본 개시의 다양한 실시예들에 따른 풀링 연산들(pooling operations)을 수행하기 위한 풀링 유닛(pooling unit)을 사용하는 시스템의 예시적인 블록도이다.
도 2는 본 개시의 다양한 실시예들에 따른 풀링 유닛 아키텍처(pooling unit architecture)의 예시적인 블록도이다.
도 3은 도 1에 도시된 풀링 시스템(pooling system)을 사용하기 위한 예시적인 프로세스의 흐름도이다.
도 4는 도 2에 도시된 풀링 유닛 아키텍처를 사용하기 위한 예시적인 프로세스의 흐름도이다.
도 5는 본 개시의 다양한 실시예들에 따른 풀링 연산들을 수행하기 위한 예시적인 프로세스의 흐름도이다.
다음의 설명에서, 설명의 목적으로, 본 발명의 이해를 제공하기 위해 특정 세부사항들이 제시된다. 그러나, 본 발명이 이러한 세부사항 없이도 실시될 수 있다는 것은 당업자에게 명백할 것이다. 또한, 당업자는, 후술되는 본 발명의 실시예들이 프로세스, 장치, 시스템, 디바이스, 또는 유형(有形)의 컴퓨터-판독가능 매체(tangible computer- readable medium) 상의 방법과 같이 다양한 방식들로 구현될 수 있다는 것을 알 것이다.
도면에 도시된 컴포넌트(Components) 또는 모듈은 본 발명의 예시적인 실시예를 예시하며, 본 발명을 모호하게 하는 것을 피하기 위한 것이다. 또한, 본 설명 전반에 걸쳐 그 컴포넌트들은 서브-유닛들(sub-units)을 포함할 수 있는 개별 기능 유닛들(separate functional units)로 설명될 수 있지만, 당업자는 다양한 컴포넌트들, 또는 그 일부들이 개별 컴포넌트들로 분할될 수 있거나 또는 (단일 시스템 또는 컴포넌트 내에 통합된 것을 포함하여) 함께 통합될 수 있다는 것을 알고 있을 것이다. 본 명세서에서 논의된 기능들(functions) 또는 동작들(operations)은 컴포넌트들로 구현될 수 있다는 것을 유의해야 한다. 컴포넌트들은 소프트웨어, 하드웨어, 또는 이들의 조합으로 구현될 수 있다.
또한, 도면들 내의 컴포넌트들 또는 시스템들 사이의 연결들(connections)은 직접 연결들(direct connections)로 제한되도록 의도되지는 않는다. 오히려, 이들 컴포넌트들 사이에서의 데이터는 중간 컴포넌트에 의해 수정되거나, 재포맷(re-formatted)되거나, 또는 그렇지 않으면 변경될 수 있다. 또한, 추가적이거나 또는 더 적은 연결이 사용될 수 있다. 또한, "접속된(coupled)", "연결된(connected)", 또는 "통신가능하게 접속된(communicatively coupled)"이라는 용어는 직접 연결, 하나 이상의 중간 디바이스를 통한 간접(indirect) 연결, 및 무선 연결을 포함하는 것으로 이해되어야 한다.
본 명세서에서 "일 실시예(one embodiment)", "바람직한 실시예(preferred embodiment)", "실시예(embodiment)", 또는 "실시예들(embodiments)"에 대한 참조는, 실시예와 관련하여 설명된 특정 특징(feature), 구조, 특성, 또는 기능(function)이 본 발명의 적어도 하나의 실시예에 포함되고, 하나 이상의 실시예일 수 있다는 것을 의미한다. 또한, 본 명세서의 다양한 곳에서 상술된 문구들(phrases)의 출현들은 반드시 모두 동일한 실시예 또는 실시예들을 지칭하는 것은 아니다.
본 명세서의 다양한 곳에서 특정 용어들을 사용하는 것은 예시를 위한 것이며, 제한하는 것으로 해석되지 않아야 한다. 서비스, 기능(function) 또는 자원(resource)은 단일 서비스, 기능 또는 자원으로 제한되지 않으며, 이들 용어의 사용은 분산(distributed) 또는 집합(aggregated)될 수 있는 관련 서비스들, 기능들 또는 자원들의 그룹화(grouping)를 지칭할 수 있다. 또한, 메모리, 데이터베이스, 정보 베이스(information base), 데이터 저장(store), 테이블, 하드웨어 등의 사용은, 정보가 입력되거나 그렇지 않으면 기록될 수 있는 시스템 컴포넌트 또는 컴포넌트들을 지칭하기 위해 본 명세서에서 사용될 수 있다.
또한, 다음을 유의해야 한다: (1) 특정 단계들이 선택적으로 수행될 수 있다; (2) 단계들은 본 명세서에 제시된 특정 순서로 제한되지 않을 수 있다; (3) 특정 단계들은 상이한 순서들로 수행될 수 있다; (4) 특정 단계들은 동시에 수행될 수 있다.
도 1은 본 개시의 다양한 실시예들에 따른 풀링 연산들을 수행하기 위한 풀링 유닛을 사용하는 시스템의 예시적인 블록도이다. 시스템(100)은 SRAM(102), 데이터(data)/가중치 포맷터(weight formatter)(110), 매트릭스 프로세서(matrix processor)(120), 후처리 유닛(post-processing unit)(130), 풀링 유닛(pooling unit)(140), 제어 로직(control logic)(150)을 포함한다. 시스템(100)은 로직 회로 및/또는 제어 회로, 캐시들(caches), 로컬 버퍼들(local buffers), 비교기들(comparators), 상태 머신들(state machines), 추가적인 후처리 유닛들(additional post processing units), 및 관리 기능들(management functions)을 수행하는 보조 디바이스들(auxiliary devices)과 같은 추가적인 회로들 및 서브-회로들(sub-circuits)을 포함할 수 있다는 것을 이해할 수 있다.
실시예에서, 시스템(100) 내의 임의의 컴포넌트는, 예를 들어, 콘볼루션 또는 다른 수학적 계산과 같은 연산(operation)을 수행할 때, 시스템(100)의 상태 및 동작들(operations)을 모니터링할 수 있고, 상기 연산의 후속 단계에서 사용될 데이터를 검색(retrieve)하는 위치들을 계산할 수 있는 제어 로직(150)에 의해 부분적으로 또는 전체적으로 제어될 수 있다. 유사하게, 제어 로직(150)은 다른 컴포넌트들(예를 들어, 도 1에 도시되지 않은 컴포넌트들 및/또는 시스템(100) 외부의 컴포넌트들)을 관리할 수 있다.
실시예에서, SRAM(102)은, 예를 들어, 데이터 입력 매트릭스(data input matrix) 및 가중치 입력 매트릭스(weight input matrix)(104)에서, 입력 이미지 데이터를 저장하고, 입력 이미지 데이터에 액세스 가능하게 할 수 있다. 당업자는 다른 유형들의 스토리지 디바이스들(storage devices)이 사용될 수 있다는 것을 알 것이다.
실시예에서, 가중치 입력 매트릭스 및 데이터 입력 매트릭스(104)에 기초하여, 데이터/가중치 포맷터(110)는, 매트릭스 프로세서(120)에 대해, 예를 들어, 각각의 96열 폭(96-columns wide)과 같은 2 개의 출력들(108)을 생성한다. 매트릭스 프로세서(120)는, 데이터를 매트릭스 연산(matrix operation)으로 효율적으로 매핑(map)하기 위해, 매트릭스의 매우 많은 수의 엘리먼트(elements)를 병렬로 처리할 수 있다. 데이터/가중치 포맷터(110)는, 예를 들어, 매트릭스 프로세서(120)의 특정 하드웨어 요구들(specific hardware requirements)에 따라, 예를 들어, 데이터 입력 매트릭스들(data input matrices) 및 가중치 입력 매트릭스들(weight input matrices)(104)을 매트릭스 프로세서(120)에 의한 추가 처리를 위해 적합한 포맷(format)으로 변환(convert)하는 임의의 수(number)의 인라인 포맷터들(in-line formatter)로서 구현될 수 있다. 실시예에서, 포맷터(110)는, 매트릭스 프로세서(120)에 대한 입력(108)으로 이용가능한 그러한 선형화(linearized)된 또는 벡터화(vectorized)된 데이터를 만들기 전에 행(row) 또는 열(column)로 표현될 수 있는 단일 벡터(single vector) 또는 스트링(string)으로 2 차원 또는 3 차원 매트릭스들을 변환한다. 결과적으로, 매트릭스 프로세서(120)는, 예를 들어, 이미지로 재집합(reassembled)될 수 있는 출력 어레이(output array)(122)를 생성하기 위해 시스템(100)에서 콘볼루션 계산의 일부로서 매트릭스 곱셈 연산(matrix multiply operation)을 실행하는데 효율적으로 이용될 수 있다.
본 개시의 실시예들을 사용하는 뉴럴 네트워크 모델(neural network model)은 최대 풀링 계층들(max-pooling layers), 평균 풀링 계층들(averaging pooling layers), 및 다른 뉴럴 네트워크 계층들(neural network layers)을 사용하는 풀링 네트워크(pooling network)를 포함할 수 있다. 풀링 네트워크는, 실시예에 따라, 예를 들어, ReLU(Rectified Linear Unit), 로지스틱 시그모이드 함수(logistic sigmoid function) 등과 같이 알려진 함수를 사용하는 활성화 계층(activation layer)에, (및 완전 연결 계층(fully-connected layer)을 사용하는 처리 모듈에) 선행(precede)하거나 후행(followe)할 수 있다.
실시예에서, 매트릭스 프로세서(120)는 입력 이미지 내의 작은 특징들(features)을 검출하기 위해 입력 이미지 데이터에 개별 필터들(예를 들어, 가중치들)을 적용함으로써 콘볼루션 연산을 수행한다. 상이한 순서로 상이한 특징들의 시퀀스(sequence)를 분석함으로써, 매크로 특징들(macro features)이 이미지에서 식별될 수 있다. 각각의 입력 채널이 상이한 정보의 세트를 포함할 수 있으므로, 매트릭스 프로세서(120)는 각각의 입력 채널에 대해 상이한 가중치의 세트를 사용할 수 있으며, 각각의 가중치 매트릭스(weight matrix)는 상이한 특징을 검출하는데 사용될 수 있다. 실시예에서, 매트릭스 프로세서(120)는, 출력 이미지에서 출력 픽셀을 나타내는 누산(accumulated)된 내적(dot product)(즉, 정수)을 생성하기 위해 합산(summed)되는 부분 내적들을 획득하도록 직사각형 가중치 매트릭스(rectangular weight matrix)와 직사각형 입력 매트릭스(rectangular input matrix)를 곱(multiplies)한다. 실시예에서, 출력 어레이(122)는 포맷터(110)에 의해 처리되는 2 개의 매트릭스들(108)의 내적에 대응할 수 있다.
실시예에서, 매트릭스 프로세서(120)는, 콘볼루션 연산을 매트릭스 곱셈(예를 들어, 96 Х 96 매트릭스 곱셈)으로 변환함으로써, 출력(122)을 생성하기 위해, 필터를 이용하여 입력을 콘볼루션(convolve)하는 콘볼루션 연산들을 수행할 수 있다. 매트릭스 프로세서(120)는, 산술 로직 유닛들, 레지스터들, 인코더들(encoders)과 같은 회로를 포함할 수 있고, 상당한 데이터 및 가중치의 세트에 걸쳐 수학적 가속 연산(mathematical accelerated operations)을 수행하기 위해 임의의 수의 열들(columns) 및 행들(rows)을 갖도록 구현될 수 있다. 이러한 대규모 연산들(large-scale operations)은, 예를 들어, 시스템(100)내의 중복 동작들(redundant operations)을 감소시키고, 하드웨어 특정 로직(hardware specific logic)을 구현함으로써, 콘볼루션 연산들을 가속화시키(accelerate)도록 매트릭스 프로세서(120)의 특정 하드웨어 요구들에 따라 시간이 정(timed)해질 수 있다.
실시예에서, 매트릭스 프로세서(120)는 후처리 유닛(130) 내의 스토리지(storage)에 저장될 수 있는 출력 채널을 나타내는 선형화된 벡터 또는 어레이를 출력한다(122). 실시예에서, 풀링 유닛(140)은 매트릭스 프로세서(120)의 단일 출력 채널 상에서 동작하고, 출력(122) 또는 후처리된 출력(124)은 그렇지 않으면 매트릭스 연산으로 편리하게 매핑되지 않을 수 있는 어레이이다. 따라서, 실시예에서, 출력 어레이(122)는 시스템(100)의 효율을 증가시키도록 풀링 유닛(140)을 위해 적절한 포맷으로 재포맷(reformatted)될 수 있다.
대조적으로, 저장된 콘볼루션에 대한 벡터 연산들을 수행하는 벡터 엔진을 채용하는 통상적인 구현들은, 부분적으로는, 출력 어레이(122)의 일부 값들이 인접할 수 있는 반면에 다른 값들은 그렇지 않을 수 있기 때문에, 매트릭스 프로세서(120)와 같은 고효율 매트릭스 프로세서(highly efficiency matrix processor)의 출력에 대해 다소 복잡하고 비효율적으로 풀링 연산(pooling)으로 될 수 있다. 요약하면, 매트릭스 프로세서(120)에 의한 콘볼루션 연산에 후속하는 풀링 알고리즘은 일반적인 풀링 방법들(common pooling methods)에 대해 편리한 형태(shape) 또는 포맷으로 제공되지 않는 출력 어레이(122)의 값들의 조합을 처리해야 할 것이다. 따라서, 실시예에서, 출력 어레이(122)는 고효율 매트릭스 프로세서(120)에 개선된 풀링 방법들을 적용하게 하기 위해 재포맷된다.
이를 달성하기 위해, 실시예들에서, 하드웨어 풀링 유닛(hardware pooling unit)(140)은, 예를 들어, 후처리 유닛(130)에 의해 처리되는 바와 같이, 출력 어레이(122)를 수신하는 것에 응답하여, 수신된 데이터를 그리드 포맷(grid format)으로 재포맷하므로, 출력 어레이(122)의 일부 엘리먼트들이 수직 방향으로 정렬될 수 있고, 다른 엘리먼트들은 수평 방향으로 정렬될 수 있으며, 그러한 풀링은 번거롭고 계산 집약적인 중간 단계들(computational-intensive intermediate steps) 및 데이터 저장 동작들(data storage operations)을 수행할 필요 없이 직접 적용될 수 있다. 실시예에서, 포맷터(110)는 입력 매트릭스 데이터의 상이한 형태들을 매트릭스 프로세서(120)에 적합한 열들 및 행들로 재포맷할 수 있다. 실시예에서, 포맷(formatting)은 상이한 입력 크기들을 갖는 매트릭스들의 처리를 수용하도록 동적으로 수행될 수 있다.
실시예에서, 풀링 유닛(140)은, 예를 들어 특징 맵으로서, SRAM(102)에 기록되고 저장될 수 있는 풀링된 데이터(pooled data)(106)를 생성하고 출력하기 위해, 풀링 함수(예를 들어, 평균 풀링 및 최대 풀링)를 재포맷된 데이터에 적용한다. 풀링 유닛(140)의 내부 동작(internal operation)은 도 2를 참조하여 더 상세히 설명될 것이다.
실시예에서, 매트릭스 프로세서(120)는 콘볼루션 데이터의 세트(예를 들어, 출력 어레이(122))를 출력하면서, 콘볼루션 데이터의 다음 세트(next set)를 누산(accumulating)하고 계산한다. 유사하게, 풀링 유닛(140)은 매트릭스 프로세서(120)에서 시프트된 데이터로부터 온 더 플라이(on-the-fly)로 출력(106)을 생성하며, 이에 따라 풀링 비용을 커버(cover)하고, 풀링 계층을 통과하기 전에 콘볼루션이 중간 스토리지(intermediate storage)에 저장될 것을 요구하는 소프트웨어 기반 풀링 방법들과 비교할 때 계산 시간을 감소시킨다.
실시예에서, 후처리 유닛(130)은, 예를 들어, 시프트 레지스터(shift register)를 형성하는 출력 플립-플롭들(output flip-flops)(미도시)을 통해, 매트릭스 프로세서(120)의 하부 행(bottom row)으로부터 데이터(출력 채널(output channel)에 대응하는 내적 결과(dot product result))를 수신한다. 후처리 유닛(130)은 예를 들어, 비선형 ReLU 함수(non-linear ReLU)를 출력 어레이(122)에 적용할 수 있다.
미리 결정된 출력 특징 맵 크기를 획득하기 위해, 콘볼루션 계층 동작 이전에 패딩(padding)(예를 들어 제로-패딩(zero-padding))이 매트릭스의 에지들에서 수행될 수 있다는 것을 유의해야 한다. 실시예에서, 패딩은 스트라이드(stride)가 1보다 큰 값으로 설정(set)되면 인에이블될 수 있다. 패딩이 인에이블되면, 제어 로직(150)은 특정 열을 0으로 처리할 수 있으므로, 평균 풀링 연산에서의 제수(divisor)는 평균 계산과 관련된 0이 아닌 풀링 값(non-zero pooling values)의 합(sum)과 동일하도록 조절(adjust)된다.
도 2는 본 개시의 다양한 실시예들에 따른 풀링 유닛 아키텍처(pooling unit architecture)의 예시적인 블록도이다. 풀링 유닛(200)은 행 정렬기(row aligner)(206), 기록 정렬기(write aligner)(204), 풀링 어레이(pooling array)(208), 풀러(pooler)(210)를 포함할 수 있다. 실시예에서, 풀러(210)는 최대 유닛(max unit)(미도시), 평균 유닛(averaging unit)(212), 또는 출력(230)을 생성하기 위해 풀링 연산을 수행할 수 있는 임의의 다른 유닛을 포함할 수 있다. 실시예에서, 평균 유닛(212)은, 합산 엘리먼트(summing element)(214)에 이어지는 분할 및/또는 스케일 유닛(divide and/or scale unit)(216)을 사용하여 평균 함수(averaging function)를 수행한다.
입력(202)은 특징 맵들의 세트에 대응할 수 있다. 실시예에서, 입력(202)은 고효율(high-efficiency) 매트릭스 프로세서(예를 들어, "가속 수학 엔진(Accelerated Mathematical Engine)"이라는 명칭의 미국 특허 출원 제15/710,433호에 개시된 매트릭스 프로세서)의 요구들에 따라 생성된 출력 채널을 구성하며, 상기 미국 특허 출원은 본 명세서에서 그 전체가 참조로 포함된다.
실시예에서, 풀링 유닛(200)은, 입력(202)을 수신하는 것에 응답하여, 예를 들어 특징 맵들의 높이 및 폭을 1/2로 감소시키기 위해, 통상적인 풀링 방법들이 적용될 수 있는 그리드 패턴(grid pattern)의 등가물(equivalent)로 상기 데이터를 재포맷한다. 실시예에서, 풀링 유닛(200)은 입력(202)과 동일한 폭을 갖는 복수의 행들로 (예를 들어, 행 정렬기(206)에서) 입력(202)을 배열(arranging)하고 저장함으로써 재포맷(reformatting)을 수행하고, 각각의 행은, 풀링 결과(pooling result)를 획득하기 위해 풀링 연산이 적용될 수 있는 매트릭스에서 이웃 값들(neighborhood values)의 그룹에 대응하는 데이터의 섹션들을 포함한다. 실시예에서, 동일한 이웃에 속하는 그러한 섹션들이 추출(extract)될 수 있도록 행들이 정렬되면, 풀링은 예를 들어 풀러(210)에 의해 용이하게 수행될 수 있다. 실시예에서, 이러한 방식으로 풀링된 섹션들의 조합(combination)은 콘볼루션의 전체 풀링된 출력 채널의 풀링 결과를 나타낸다.
실시예에서, 행 정렬기(206)는 풀링될 데이터(to-be-pooled data)로서 풀러(210)에 의해 액세스 및 판독될 수 있는 방식으로 입력(202)을 저장한다. 다르게 말하면, 매트릭스 프로세서의 출력 채널은 입력 데이터(102)의 스트림을 유지하면서 풀러(210)에 의해 용이하게 풀링되는 판독될 수 있는 포맷으로 재포맷될 수 있다. 실시예에서, 행 정렬기(206)는, 결과를 복수의 풀링 어레이(208)(예를 들어, 상기 풀링될 데이터를 포함하는 3 개의 어레이)에 기록하기 전에 들어오는(incoming) 입력(202)을 시프트(shift)하기 위해 제어기(controller)(미도시)에 의해 제어된다.
실시예에서, 풀러(210)는 특정 풀링 계산에 사용하기 위해 행 정렬기(206)에서 적절한 값을 식별하고, 풀링 어레이(208)로부터 풀링 결과를 계산하기 위한 복수의 값을 추출한다. 풀링 결과는 사용되는 풀링 함수의 유형에 의존하고, 적절한 풀링 결과로 변환될 수 있는 평균 값, 최대 값, 또는 중간 값(intermediate value)(예를 들어, 합(sum))일 수 있다. 실시예에서, 분할 및/또는 스케일 유닛(216)은 평균 유닛(212)에 이어질 수 있고, 출력(230)을 생성하는 곱셈 시프트 회로(multiply-and-shift circuit)로 구현될 수 있다. 실시예에서, 풀러(210)는 풀링 어레이(208)에 액세스하여, 풀링 어레이(208)의 임의의 서브섹션(subsection)을 처리(process)할 수 있으며, 풀링 어레이(208)의 임의의 서브섹션은 복수의 풀링될 값을 포함한다. 예를 들어, 풀러(210)는 예를 들어 평균 풀링 값을 생성하기 위해 3x3 풀링 윈도우(pooling window)에 대응하는 9 개의 값들을 풀링(pool)할 수 있다. 풀링 윈도우는 파라미터 설정(parameters settings)에 따라 임의의 크기 및 형태를 취할 수 있는 것으로 이해된다.
실시예에서, 입력(202)은 판독되고, 예를 들어 한 번에 하나의 행과 같이 사이클마다(in every cycle) 풀링 결과들(230)을 생성하기 위해, 예를 들어 (도 4를 참조하여 더 설명되는) 데이터의 행들을 정렬하기 위한 방법을 사용하여, n 개의 산술 사이클들(arithmetic cycles)의 기간(period)에 걸쳐 재포맷이 적용된다. 실시예에서, 예를 들어 입력(202)으로서, 일단 출력 채널이 판독되면, 다음 출력 채널이 판독될 수 있고, 예를 들어 매트릭스 프로세서에 의해 제공되는 모든 출력 채널이 처리되고 결과(230)가 출력될 수 있을 때까지 상이한 풀러(212)에 데이터의 행들을 저장하는 메모리의 상이한 세트를 사용함으로써, 재포맷이 적용될 수 있다. 출력 채널의 부분들과, 일반적으로, 상이한 출력 채널들은, 도 2에 도시된 것들과 첨부된 텍스트(text)와 다른 방법들 및 다른 회로 구성들을 이용하여 상이한 시간들에서 처리될 수 있다는 것이 이해된다. 당업자가 이해할 수 있는 바와 같이, 추가적인 풀링 계층이 더 높은 레벨(higher level) 또는 정밀한(refined) 특징 맵을 출력하는데 사용될 수 있다.
실시예에서, 풀링 유닛(200)은 출력(122)을 생성하기 위해 매트릭스 프로세서(120)만큼 빠르게 풀링 결과들을 계산한다. 풀링 유닛(140)은 예를 들어, n=2 또는 n=3의 스트라이드를 적용하여 슬라이딩 윈도우가 계산들 사이에서 거치(crosses)는 엘리먼트들(elements)의 양(amount)을 제어할 수 있다. 당업자는, 평균 또는 최대 값(largest value)이 풀링 윈도우에서 선택된다는 차이가 있는, 예를 들어 2 또는 3의 일반적인 커널 크기(common kernel size)를 사용하는, 콘볼루션 계층에서의 것과 유사한 방식으로, 풀링 계층들을 위한 슬라이딩 메커니즘(sliding mechanism)이 동작(operates)한다는 것을 알 것이다.
실시예에서, 풀링 유닛(200)은 처리된 데이터를 수신하고, 서로에 대해 공간적으로 시프트될 수 있는 어레이들의 세트에 대해 계산을 수행한다. 실시예에서, 풀링 결과(124)는 출력 어레이로 상태 머신(미도시)에 의해 풀링되거나 또는 시프트된다(예를 들어, 클록 사이클 당 하나). 상태 머신은 데이터를 SRAM(102) 또는 일부 다른 후처리 유닛(미도시)으로 데이터를 전송하기 전에 풀링 결과(124)에 대해 추가적인 동작들을 수행할 수 있다.
풀링 유닛(200)은 풀링 유닛(200)과 연결(coupled)된 임의의 수의 컴포넌트들의 동작들의 시퀀스를 조정(coordinates)하는 제어 유닛과 같이, 도 2에 도시되지 않은 컴포넌트들 및 서브-회로(sub-circuit) 회로들을 더 포함할 수 있다는 것이 이해된다. 예를 들어, 제어 유닛은, 주어진 연산자체의 시퀀스를 수정하지 않고, 상기 연산에 관련된 데이터 포인트들(data points)의 수(number) 및 위치(location)를 결정할 수 있다.
도 3은 도 1에 도시된 풀링 시스템을 사용하는 예시적인 프로세스의 흐름도이다. 프로세스(300)는 콘볼루션 엔진으로부터의 데이터가 수신될 때, 예를 들어 매 n 사이클마다 풀링 유닛에서 데이터가 수신될 때, 단계(302)를 시작한다. 실시예에서, 상기 데이터는 데이터 어레이(data array)의 형태(form)로 수신되고 CNN에서 콘볼루션 계층의 출력 채널을 나타낸다.
단계(304)에서, 어레이는 풀링 연산에 따라 정렬되는 어레이들의 세트로 변환된다. 실시예에서, 단계(306)에서, 풀링 연산은, 풀링 결과들(예를 들어, 사이클 당 하나의 결과)을 생성하기 위해, 어레이들의 세트에서 적어도 2 개의 어레이들을 사용하여, 풀링 연산을 적용(apply)한다.
마지막으로, 단계(308)에서, 예를 들어 산술 사이클당 하나의 행으로서, 풀링 결과가 메모리 디바이스로 출력된다.
도 4는 도 2에 도시된 풀링 유닛 아키텍처를 사용하기 위한 예시적인 프로세스의 흐름도이다. 프로세스(400)는, 하드웨어 기반 풀링 유닛(hardware-based pooling unit)이 각각 서로 미리 정의된 관계(predefined relationship)를 갖는 데이터 어레이들의 세트를 콘볼루션 엔진으로부터 수신할 때 단계(402)를 시작한다.
단계(404)에서, 하드웨어 기반 풀링 유닛을 사용하여, 풀링 결과(예를 들어, 평균 또는 최대 풀링 결과(average or max pooling result))를 획득하기 위해, 데이터 어레이들의 세트로부터 적어도 2 개의 어레이들에서의 데이터에 풀링 연산이 적용된다. 풀링 연산은 스트라이드 값에 따라 적용될 수 있다. 또한, 이러한 하드웨어 기반 풀링 방법은 1 : 1 출력 채널 대 입력 채널 관계의 이점을 취하는데, 이는 콘볼루션 결과(convolution result)를 중간 메모리(intermediate memory)에 기록할 필요성을 제거한다는 이점이 있다.
단계(406)에서, 예를 들어, CNN의 계층에서의 뉴런을 각각 나타내는 사이클당 데이터 포인트들의 하나의 행으로서, 풀링 결과가 출력된다.
도 5는 도 2에 도시된 풀링 유닛 아키텍처를 사용하여 풀링을 수행하기 위한 프로세스를 예시하는 예시적인 블록도이다. 실시예에서, 풀링 유닛 아키텍처의 매트릭스 프로세서(502)는 출력 채널(504)을 출력한다. 풀링 연산은 고정된 가중치들(fixed weights)을 갖는 콘볼루션으로서 처리될 수 있기 때문에, 매트릭스 프로세서는 풀링 연산을 수행하는데 사용될 수 있다. 그러나, 일반적으로 풀링에서 단일 출력 채널만이 있기 때문에, 한 번에 다중 출력 채널 매트릭스 프로세서(multi-output channel matrix processor) 중 하나의 출력 채널만을 동작시키는 것은 컴퓨팅 자원들을 불필요하게 묶는 오히려 비효율적인 일이다. 따라서, 컴퓨팅 효율을 증가시키기 위해, 실시예에서, 출력 채널(504)은, 예를 들어, 도 2에 도시된 바와 같은 행 정렬기에 의해 정렬되는 복수의 행들(506-510)로 기록될 수 있으므로, 각각의 행(506-510)은 후속 사이클들(subsequent cycles)에서 다른 행에 대해 시프트된다. 실시예에서, 도 5의 행 Y=0, Y=l, 및 Y=2는 출력 채널(504)을 수용(hold)할 수 있고, 각각의 사이클 0 내지 2에서 기록 및 저장되었을 수 있다.
예를 들어, 사이클 0에서, 입력(202)의 적어도 제1 섹션(section)이 행 Y=0으로 저장된다(예를 들어, 왼쪽 정렬(left aligned)된다). 다음의 사이클(사이클 1)에서, 동일한 섹션이 행 Y=1 등으로 저장되어, 행(506-510)을 채우도록 3 번의 판독 사이클(reading cycles)이 이루어진다. 일단 행(506-510)이 채워지(populated)면, 행(506-510)으로부터의 데이터는 풀링 계산을 수행하도록 결합(combine)될 수 있다. 예를 들어, 행(506-510) 각각으로부터의 3 개의 값들은 결과로서 풀링 값(pooling value)(514)을 생성하는 9 개의 값들로 결합될 수 있다.
풀링 계산은 병렬로 수행될 수 있다는 것을 유의해야 한다. 예를 들어, 들어오는 출력 채널들(504)의 스트림(stream)을 유지하기 위해, 풀링 계산들의 수는 매트릭스 프로세서(502)에서의 출력 채널들의 총 수(total number)와 동일할 수 있으므로, 커널 크기에 관계없이, 매트릭스 프로세서(502)의 전체 폭(entire width)(518)에 대응하는 풀링 데이터가 출력될 수 있다.
실시예에서, 풀링 결과들을 생성하기 위해 매트릭스에 걸쳐 콘볼루션할 때, 하나의 행에서 다른 행으로의 시프트는 풀링 윈도우의 시프트에 대응한다. 실시예에서, 풀링 윈도우에 기인하는 시프트는 사이클들의 수에 의해 정의(define)되고, 동일한 수의 사이클에 의해 정의되는 값을 갖는 스트라이드에 대응할 수 있다. 요약하면, 스트라이드는 풀링 데이터가 얼마나 자주 출력되는지를 지시(dictate)한다. 예를 들어, 2의 스트라이드에 대해, 풀링 값들은 다른 사이클마다 출력될 수 있으며, 이에 의해 출력들 사이에서 행(또는 열)을 스킵(skip)할 수 있다.
실시예에서, 제3 사이클(512)에서, 한 번에 하나씩 슬라이드(slide)하는 스토리지(storage)의 3 개의 행들의 슬라이딩 윈도우를 생성하기 위해, 제1 행(506)의 값들은 오버라이트(overwrite)될 수 있으므로, 사이클들은 3 개의 행들(506-510)의 세트를 사용하고, 풀링 파라미터들(pooling parameters)에 기초하여 풀링 계산 결과를 출력한다.
스토리지의 행들의 수는 지원되는 커널의 크기에 대응하고, 윈도우 크기, 스트라이드 크기, 사용된 풀링의 유형(type) 등과 같은 파라미터들은 풀링 프로세스 자체와 독립적으로 결정 및 제어될 수 있다는 것이 이해된다.
당업자는 컴퓨팅 시스템 또는 프로그래밍 언어가 본 발명의 실시에 중요하지 않다는 것을 인식할 것이다. 당업자는 또한 상술된 복수의 엘리먼트들이 물리적으로 및/또는 기능적으로 서브-모듈들로 분리될 수 있거나 또는 함께 결합될 수 있다는 것을 인식할 것이다.
전술한 예 및 실시예는 예시적인 것이며 본 개시의 범위를 제한하지 않는다는 것을 당업자는 이해할 것이다. 명세서의 판독 및 도면의 검토를 통해 당업자에게 명백한 모든 치환, 향상, 등가물, 조합 및 개선이 본 개시에 맞는 사상 및 범위 내에 포함되도록 의도된다. 또한, 임의의 청구항의 구성 요소는 다수의 종속성, 구성 및 조합을 갖는 것을 포함하여 상이하게 구성될 수 있다는 것을 유의해야 한다.

Claims (20)

  1. 풀링 유닛 아키텍처(pooling unit architecture)에 있어서,
    제어기;
    상기 제어기에 연결된 정렬기 - 상기 정렬기는, 입력 데이터를 수신하는 것에 응답하여, 상기 입력 데이터를 행들로 정렬하여 풀링 어레이를 생성하고, 복수의 산술 사이클에 걸쳐, 상기 행들을 서로에 대해 시프트하여 상기 입력 데이터를 재포맷된 데이터로 재포맷함 - ; 및
    상기 정렬기에 연결된 풀러(pooler) - 상기 풀러는, 후속 산술 사이클에서, 풀링 값을 포함하는 풀링 출력을 획득하기 위해 상기 재포맷된 데이터의 적어도 일부에 풀링 연산을 적용하고, 각각의 행으로부터의 데이터의 서브세트는 상기 풀링 값이 생성된 데이터의 세트에 결합됨 -
    를 포함하는 풀링 유닛 아키텍처.
  2. 제1항에 있어서,
    상기 입력 데이터는,
    매트릭스 프로세서에 의해 생성되는,
    풀링 유닛.
  3. 제2항에 있어서,
    상기 풀링 출력은,
    상기 입력 데이터의 스트림을 유지하기 위해, 상기 매트릭스 프로세서가 상기 입력 데이터를 생성하는 레이트(rate)와 동일한 레이트로 생성되는,
    풀링 유닛.
  4. 제2항에 있어서,
    상기 풀러는,
    하나 이상의 풀링 계산들을 병렬로 수행하고,
    상기 풀링 계산들의 횟수는,
    상기 매트릭스 프로세서의 출력 채널들의 개수와 동일하고,
    상기 풀링 출력은,
    커널 크기와 관계없이, 상기 매트릭스 프로세서의 폭에 대응하는,
    풀링 유닛.
  5. 제1항에 있어서,
    상기 풀러에 연결된 곱셈 시프트 회로(multiply-and-shift circuit)
    를 더 포함하고,
    상기 곱셈 시프트 회로는,
    상기 풀링 연산에 기초하여 상기 풀링 출력을 생성하는,
    풀링 유닛.
  6. 제1항에 있어서,
    상기 입력 데이터는,
    특징 맵(feature maps)의 세트에 대응하고,
    상기 풀러는,
    미리 결정된 요소에 의하여, 상기 특징 맵의 세트의 높이 및 폭 중 적어도 하나를 감소시키기 위해 상기 재포맷된 입력 데이터를 사용하는,
    풀링 유닛.
  7. 제1항에 있어서,
    상기 행들은,
    상기 입력 데이터와 동일한 폭을 가지고,
    각각의 행은,
    매트릭스에서 이웃 값들의 세트에 대응하는 데이터의 섹션들
    을 포함하는,
    풀링 유닛.
  8. 제1항에 있어서,
    상기 풀링 출력을 출력 어레이로 시프트시키는 상태 머신
    을 더 포함하는 풀링 유닛.
  9. 제1항에 있어서,
    상기 제어기는,
    상기 풀링 연산 자체의 시퀀스를 수정하지 않고, 풀링 연산에 관련된 데이터 포인트들의 수 및 위치를 결정하는,
    풀링 유닛.
  10. 제1항에 있어서,
    하나의 행으로부터 다른 행으로의 시프트는,
    스트라이드 값(stride value)으로 매트릭스에 걸쳐 콘볼루션(convolves)하는 풀링 윈도우(pooling window)의 시프트에 대응하고,
    상기 시프트는,
    상기 산술 사이클의 수에 의해 정의되는,
    풀링 유닛.
  11. 하드웨어 기반 풀링 시스템(hardware-based pooling system)을 사용하기 위한 방법에 있어서,
    콘볼루션 뉴럴 네트워크(CNN: convolutional neural network)에서 콘볼루션 계층(convolution layer)의 출력 채널을 나타내는 데이터의 어레이를 콘볼루션 엔진(convolution engine)으로부터 수신하는 단계;
    풀링 결과를 생성하기 위해 상기 데이터의 어레이를 어레이의 세트로 변환하는 단계 - 상기 어레이의 세트는, 상기 어레이의 세트 중 적어도 2개의 어레이에 데이터를 적용하는 풀링 연산에 따라 정렬됨 - ; 및
    상기 풀링 결과를 메모리 디바이스로 출력하는 단계
    를 포함하는 방법.
  12. 제11항에 있어서,
    상기 데이터의 어레이는,
    하드웨어 기반 풀링 유닛(hardware- based pooling unit)에서 수신되는,
    방법.
  13. 제11항에 있어서,
    데이터의 어레이는,
    복수의 산술 사이클의 인터벌(intervals)에서 수신되는,
    방법.
  14. 제11항에 있어서,
    풀링 결과는,
    각각의 인터벌에서 생성되는,
    방법.
  15. 제14항에 있어서,
    풀링 결과는,
    각각의 인터벌에서 출력되는,
    방법.
  16. 제11항에 있어서,
    상기 데이터의 어레이는,
    특징 맵의 세트에 대응하는,
    방법.
  17. 풀링 유닛 아키텍처를 사용하기 위한 방법에 있어서,
    하드웨어 기반 풀링 엔진(hardware-based pooling engine)에서 서로 미리 정의된 관계를 각각 갖는 데이터 어레이의 세트를 수신하는 단계;
    콘볼루션 결과를 메모리에 기록한다는 요구를 만족시킬 필요 없이 풀링 결과를 획득하기 위하여, 상기 하드웨어 기반 풀링 엔진을 사용하여, 스트라이드 값에 따라, 상기 데이터 어레이의 세트로부터 적어도 2개의 어레이에서 데이터에 풀링 연산을 적용하는 단계; 및
    콘볼루션 뉴럴 네트워크(CNN)의 계층에서 뉴런을 각각 나타내는 데이터 포인트들의 행으로 상기 풀링 결과를 출력하는 단계
    를 포함하는 방법.
  18. 제17항에 있어서,
    상기 데이터 어레이의 세트는,
    콘볼루션 엔진으로부터 수신되는,
    방법.
  19. 제17항에 있어서,
    상기 풀링 결과를 획득하는 것은,
    출력 채널과 입력 채널 사이의 일대일 관계(one-to-one relationship)를 이용하는,
    방법.
  20. 제17항에 있어서,
    풀링 결과는,
    평균 풀링 결과 및 최대 풀링 결과 중 하나를 포함하는,
    방법.

KR1020207021561A 2018-01-04 2018-12-12 하드웨어 기반 풀링을 위한 시스템 및 방법 KR102523263B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/862,369 2018-01-04
US15/862,369 US20190205738A1 (en) 2018-01-04 2018-01-04 Systems and methods for hardware-based pooling
PCT/US2018/065290 WO2019135873A1 (en) 2018-01-04 2018-12-12 Systems and methods for hardware-based pooling

Publications (2)

Publication Number Publication Date
KR20200100812A true KR20200100812A (ko) 2020-08-26
KR102523263B1 KR102523263B1 (ko) 2023-04-19

Family

ID=67059737

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207021561A KR102523263B1 (ko) 2018-01-04 2018-12-12 하드웨어 기반 풀링을 위한 시스템 및 방법

Country Status (6)

Country Link
US (1) US20190205738A1 (ko)
EP (1) EP3735660A4 (ko)
JP (1) JP7007488B2 (ko)
KR (1) KR102523263B1 (ko)
CN (1) CN111758107B (ko)
WO (1) WO2019135873A1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102395743B1 (ko) * 2021-11-09 2022-05-09 오픈엣지테크놀로지 주식회사 1차원 어레이 풀링 방법 및 이를 위한 장치
WO2023085443A1 (ko) * 2021-11-09 2023-05-19 한국전자기술연구원 딥러닝 경량 가속장치
KR20230086233A (ko) 2021-12-08 2023-06-15 순천대학교 산학협력단 Cmp를 이용한 재구조화된 합성곱 신경망 시스템 및 그 동작 방법
WO2023120829A1 (ko) * 2021-12-24 2023-06-29 오픈엣지테크놀로지 주식회사 어레이 풀링 방법 및 이를 위한 장치

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110322389B (zh) * 2018-03-29 2023-03-21 上海熠知电子科技有限公司 池化方法、装置及***、计算机可读存储介质
KR20210014902A (ko) * 2019-07-31 2021-02-10 삼성전자주식회사 프로세서 및 그 제어 방법
CN112766453A (zh) * 2019-10-21 2021-05-07 华为技术有限公司 一种数据处理装置及数据处理方法
CN110942145A (zh) * 2019-10-23 2020-03-31 南京大学 基于可重构计算的卷积神经网络池化层、硬件实现方法及***
CN111242295B (zh) * 2020-01-20 2022-11-25 清华大学 一种可配置池化算子的方法及电路
US11507831B2 (en) * 2020-02-24 2022-11-22 Stmicroelectronics International N.V. Pooling unit for deep learning acceleration
US11144615B1 (en) 2020-04-14 2021-10-12 Apple Inc. Circuit for performing pooling operation in neural processor
CN113255897B (zh) * 2021-06-11 2023-07-07 西安微电子技术研究所 一种卷积神经网络的池化计算单元
CN114372012B (zh) * 2021-12-21 2024-02-20 中国科学院深圳先进技术研究院 一种通用、可配置的高能效池化计算单行输出***和方法
US20230351143A1 (en) * 2022-04-29 2023-11-02 Palo Alto Networks, Inc. Optimized adaptive pooling layer hyperparameters for variably sized inputs
WO2023220888A1 (en) * 2022-05-16 2023-11-23 Intel Corporation Modeling graph-structured data with point grid convolution

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009015637A (ja) * 2007-07-05 2009-01-22 Renesas Technology Corp 演算ユニット及び画像フィルタリング装置
US20150178246A1 (en) * 2013-12-20 2015-06-25 Enric Herrero Abellanas Processing device for performing convolution operations
US20160342893A1 (en) * 2015-05-21 2016-11-24 Google Inc. Rotating data for neural network computations
US20160342888A1 (en) * 2015-05-20 2016-11-24 Nec Laboratories America, Inc. Memory efficiency for convolutional neural networks operating on graphics processing units

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016006626A (ja) * 2014-05-28 2016-01-14 株式会社デンソーアイティーラボラトリ 検知装置、検知プログラム、検知方法、車両、パラメータ算出装置、パラメータ算出プログラムおよびパラメータ算出方法
US11099918B2 (en) * 2015-05-11 2021-08-24 Xilinx, Inc. Accelerating algorithms and applications on FPGAs
US10192162B2 (en) * 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
CN105184309B (zh) * 2015-08-12 2018-11-16 西安电子科技大学 基于cnn和svm的极化sar图像分类
US10726328B2 (en) * 2015-10-09 2020-07-28 Altera Corporation Method and apparatus for designing and implementing a convolution neural net accelerator
US10776690B2 (en) * 2015-10-08 2020-09-15 Via Alliance Semiconductor Co., Ltd. Neural network unit with plurality of selectable output functions
US10366302B2 (en) * 2016-10-10 2019-07-30 Gyrfalcon Technology Inc. Hierarchical category classification scheme using multiple sets of fully-connected networks with a CNN based integrated circuit as feature extractor
US10037490B2 (en) * 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware
CN106611169B (zh) * 2016-12-31 2018-10-23 中国科学技术大学 一种基于深度学习的危险驾驶行为实时检测方法
US20190095776A1 (en) * 2017-09-27 2019-03-28 Mellanox Technologies, Ltd. Efficient data distribution for parallel processing
GB2560600B (en) * 2017-11-06 2020-03-04 Imagination Tech Ltd Nueral Network Hardware

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009015637A (ja) * 2007-07-05 2009-01-22 Renesas Technology Corp 演算ユニット及び画像フィルタリング装置
US20150178246A1 (en) * 2013-12-20 2015-06-25 Enric Herrero Abellanas Processing device for performing convolution operations
US20160342888A1 (en) * 2015-05-20 2016-11-24 Nec Laboratories America, Inc. Memory efficiency for convolutional neural networks operating on graphics processing units
US20160342893A1 (en) * 2015-05-21 2016-11-24 Google Inc. Rotating data for neural network computations

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102395743B1 (ko) * 2021-11-09 2022-05-09 오픈엣지테크놀로지 주식회사 1차원 어레이 풀링 방법 및 이를 위한 장치
WO2023085535A1 (ko) * 2021-11-09 2023-05-19 오픈엣지테크놀로지 주식회사 1차원 어레이 풀링 방법 및 이를 위한 장치
WO2023085443A1 (ko) * 2021-11-09 2023-05-19 한국전자기술연구원 딥러닝 경량 가속장치
KR20230086233A (ko) 2021-12-08 2023-06-15 순천대학교 산학협력단 Cmp를 이용한 재구조화된 합성곱 신경망 시스템 및 그 동작 방법
WO2023120829A1 (ko) * 2021-12-24 2023-06-29 오픈엣지테크놀로지 주식회사 어레이 풀링 방법 및 이를 위한 장치

Also Published As

Publication number Publication date
WO2019135873A1 (en) 2019-07-11
CN111758107B (zh) 2024-07-16
CN111758107A (zh) 2020-10-09
JP2021509747A (ja) 2021-04-01
JP7007488B2 (ja) 2022-01-24
EP3735660A4 (en) 2021-08-11
EP3735660A1 (en) 2020-11-11
KR102523263B1 (ko) 2023-04-19
US20190205738A1 (en) 2019-07-04

Similar Documents

Publication Publication Date Title
KR102523263B1 (ko) 하드웨어 기반 풀링을 위한 시스템 및 방법
CN108765247B (zh) 图像处理方法、装置、存储介质及设备
CN110059710B (zh) 用于利用卷积神经网络进行图像分类的装置和方法
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
CN111465924B (zh) 用于将矩阵输入转换为矩阵处理器的向量化输入的***和方法
CN111897579B (zh) 图像数据处理方法、装置、计算机设备和存储介质
Mahmoud et al. Diffy: A Déjà vu-free differential deep neural network accelerator
US11645529B2 (en) Sparsifying neural network models
US10691996B2 (en) Hardware accelerator for compressed LSTM
US20180173676A1 (en) Adaptive execution engine for convolution computing systems
EP4357979A2 (en) Superpixel methods for convolutional neural networks
KR102325602B1 (ko) 데이터를 병렬적으로 처리하는 장치 및 방법
CN109844738A (zh) 运算处理电路和识别***
US11709911B2 (en) Energy-efficient memory systems and methods
CN112840356A (zh) 运算加速器、处理方法及相关设备
KR102610842B1 (ko) 뉴럴 네트워크에서의 프로세싱 엘리먼트 및 그 동작 방법
CN110580519B (zh) 一种卷积运算装置及其方法
KR20200081044A (ko) 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
CN110688616B (zh) 一种基于乒乓ram的条带阵列的卷积模块及其运算方法
CN112434786B (zh) 一种基于winograd动态卷积块的图像处理方法
KR20230081697A (ko) 팽창 컨볼루션 계산 가속화 방법 및 장치
KR102372869B1 (ko) 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
CN109063822B (zh) 一种计算方法及计算装置
JP7251354B2 (ja) 情報処理装置、情報処理プログラム、及び情報処理方法
CN110765413B (zh) 矩阵求和结构及神经网络计算平台

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right