KR20190126440A - 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진 - Google Patents

인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진 Download PDF

Info

Publication number
KR20190126440A
KR20190126440A KR1020197031687A KR20197031687A KR20190126440A KR 20190126440 A KR20190126440 A KR 20190126440A KR 1020197031687 A KR1020197031687 A KR 1020197031687A KR 20197031687 A KR20197031687 A KR 20197031687A KR 20190126440 A KR20190126440 A KR 20190126440A
Authority
KR
South Korea
Prior art keywords
convolution
values
stream
circuit
data
Prior art date
Application number
KR1020197031687A
Other languages
English (en)
Other versions
KR102163424B1 (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 KR1020207025505A priority Critical patent/KR102352102B1/ko
Publication of KR20190126440A publication Critical patent/KR20190126440A/ko
Application granted granted Critical
Publication of KR102163424B1 publication Critical patent/KR102163424B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • G06K9/00986
    • G06K9/4628
    • G06K9/4647
    • 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/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/001
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration using local operators
    • 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/40Extraction of image or video features
    • G06V10/50Extraction of image or video features by performing operations within image blocks; by using histograms, e.g. histogram of oriented gradients [HoG]; by summing image-intensity values; Projection analysis
    • G06V10/507Summing image-intensity values; Histogram projection analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/955Hardware or software architectures specially adapted for image or video understanding using specific electronic processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20081Training; Learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20084Artificial neural networks [ANN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/70Denoising; Smoothing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/73Deblurring; Sharpening

Landscapes

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

Abstract

실시예들은, 구성 정보를 수신하여, 컨볼루션, 및 다양한 포맷들의 입력 데이터를 스트리밍하는 것에 대한 다른 심층 기계 학습 동작들을 수행하는 구성가능한 컨볼루션 엔진에 관한 것이다. 컨볼루션 엔진은 입력 데이터에 컨볼루션 커널들을 적용함으로써 값들의 스트림을 각각 생성하는 2개의 컨볼루션 회로들을 포함할 수 있다. 값들의 스트림은 이미지 데이터의 하나 이상의 채널들을 각각이 한정할 수 있다. 채널 병합 회로는 선택된 동작 모드에 따라 각각의 컨볼루션 회로로부터의 값들의 스트림들을 조합한다. 하나의 모드에서, 컨볼루션 회로들로부터의 제1 및 제2 스트림들은 인터리빙된 방식으로 제1 및 제2 스트림들의 조합된 채널들을 갖는 출력 스트림으로 병합된다. 다른 모드에서, 제1 컨볼루션 회로로부터의 제1 스트림은 제2 컨볼루션 회로의 입력에 공급된다.

Description

인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진
이미지 센서에 의해 캡처되거나 다른 데이터 소스들로부터 수신된 이미지 데이터는, 종종, 추가 프로세싱 또는 소비 전에 이미지 프로세싱 파이프라인에서 프로세싱된다. 예를 들어, 미처리 이미지 데이터는 비디오 인코더와 같은 후속 컴포넌트들에 제공되기 전에 보정, 필터링, 또는 달리 수정될 수 있다. 캡처된 이미지 데이터에 대한 보정 또는 향상을 수행하기 위해, 다양한 컴포넌트들, 단위 스테이지들 또는 모듈들이 채용될 수 있다.
그러한 이미지 프로세싱 파이프라인은 캡처된 이미지 데이터에 대한 보정 또는 향상이 다른 시스템 리소스들을 소비함이 없는 편리한 방식으로 수행될 수 있도록 구조화될 수 있다. 중앙 프로세싱 유닛(CPU) 상에서 소프트웨어 프로그램들을 실행시킴으로써 많은 이미지 프로세싱 알고리즘들이 수행될 수 있지만, CPU 상에서의 그러한 프로그램들의 실행은 CPU 및 다른 주변기기 리소스들의 상당한 대역폭을 소비할 뿐만 아니라 전력 소비를 증가시킬 것이다. 따라서, 이미지 프로세싱 파이프라인들은, 종종, CPU와는 별개인 하드웨어 컴포넌트로서 구현되고, 하나 이상의 이미지 프로세싱 알고리즘들을 수행하는 데 전용된다.
다양한 타입들의 이미지 프로세싱이 커널과 데이터 사이의 컨볼루션을 수반한다. 예를 들어, 이미지를 블러링(blur)하거나 선명화(sharpen)하거나 융기(emboss)시키거나 그의 에지 검출을 수행하기 위해 상이한 커널들이 사용될 수 있다. 그러한 컨볼루션 동작들은 대체로 CPU에 의해 수행되며, 이는 다른 프로세스들에 대한 그의 이용가능성을 감소시킨다.
실시예들은 컨볼루션 엔진 내의 컴포넌트들의 동작들을 구성함으로써 원하는 방식으로 다양한 채널들의 입력 데이터의 컨볼루션 및 기계 학습 동작들을 수행하기 위한 구성가능한 컨볼루션 엔진에 관한 것이다. 컨볼루션 엔진은 제1 컨볼루션 회로, 제2 컨볼루션 회로, 및 제1 및 제2 컨볼루션 회로들에 커플링되는 채널 병합 회로를 포함한다. 제1 및 제2 컨볼루션 회로들 각각은, 특히, 컨볼루션 커널들을 입력 데이터에 적용함으로써 값들의 스트림을 생성한다. 값들의 스트림은 인터리빙된 방식으로 이미지 데이터의 하나 이상의 채널들을 각각이 한정할 수 있다. 채널 병합 회로는 선택된 동작 모드에 따라 제1 및 제2 컨볼루션 회로들로부터의 값들의 스트림들을 조합한다. 이중 컨볼루션 모드에서, 컨볼루션 회로들로부터의 제1 및 제2 스트림들은 인터리빙된 방식으로 제1 및 제2 스트림들의 조합된 채널들을 갖는 출력 스트림으로 병합된다. 캐스케이드 모드에서, 제1 컨볼루션 회로로부터의 제1 스트림은 제2 컨볼루션 회로의 입력에 공급된다. 채널 병합 회로는 제2 컨볼루션 회로의 결과를 출력 스트림으로서 출력한다. 병렬 모드에서, 채널 병합 회로는 제1 및 제2 컨볼루션 회로로부터의 제1 및 제2 스트림을 별개의 스트림들로서 출력한다.
도 1은 일 실시예에 따른 전자 디바이스의 고레벨 도면이다.
도 2는 일 실시예에 따른 전자 디바이스 내의 컴포넌트들을 도시한 블록도이다.
도 3은 일 실시예에 따른, 이미지 신호 프로세서를 사용하여 구현된 이미지 프로세싱 파이프라인들을 도시한 블록도이다.
도 4는 일 실시예에 따른, 이미지 신호 프로세서 내의 비전 모듈을 도시한 블록도이다.
도 5는 일 실시예에 따른 컨볼루션 엔진의 블록도이다.
도 6a는 일 실시예에 따른 컨볼루션 엔진의 이중 컨볼루션 모드의 블록도이다.
도 6b는 일 실시예에 따른 컨볼루션 엔진의 캐스케이드 모드의 블록도이다.
도 6c는 일 실시예에 따른 컨볼루션 엔진의 병렬 모드의 블록도이다.
도 7은 일 실시예에 따른, 복수의 모드들에서 컨볼루션 엔진을 동작시키는 방법을 도시한 흐름도이다.
도 8은 일 실시예에 따른 컨볼루션 코어 회로를 도시한 블록도이다.
도 9는 일 실시예에 따른, 응답 정류기 유닛에 의해 적용되는 비선형 변환의 플롯이다.
도 10은 일 실시예에 따른 컨볼루션 코어를 도시한 블록도이다.
도 11a는 일 실시예에 따른, 다중 평면 포맷으로 컨볼루션 코어 회로의 입력들 및 출력들을 도시한 개념도이다.
도 11b는 일 실시예에 따른, 평탄화된 포맷으로 컨볼루션 코어 회로의 입력들 및 출력들을 도시한 개념도이다.
도 12는 일 실시예에 따른 공간 풀링 회로(spatial pooling circuit)를 도시한 블록도이다.
도 13a 및 도 13b는 일 실시예에 따른, 다중 평면 포맷으로 공간 풀링 회로의 입력들 및 출력들을 도시한 개념도들이다.
도 13c 및 도 13d는 일 실시예에 따른, 평탄화된 포맷으로 공간 풀링 회로의 입력들 및 출력들을 도시한 개념도들이다.
도 14는 일 실시예에 따른, 공간 풀링 회로를 동작시키는 방법을 도시한 블록도이다.
도 15는 일 실시예에 따른 채널 병합기를 도시한 블록도이다.
도 16은 일 실시예에 따른, 평탄화된 포맷으로 채널 병합기의 입력들 및 출력들을 도시한 개념도이다.
도면들은 오로지 예시의 목적을 위해 다양한 비제한적 실시예들을 도시하고 발명을 실시하기 위한 구체적인 내용은 오로지 예시의 목적을 위해 다양한 비제한적 실시예들을 설명한다.
이제, 실시예들이 상세하게 참조될 것이며, 그 실시예들의 예들이 첨부 도면들에 예시된다. 하기의 상세한 설명에서, 많은 구체적인 세부사항들이 다양하게 기술된 실시예들의 완전한 이해를 제공하기 위해 기재된다. 그러나, 기술되는 실시예들은 이러한 특정 세부사항들 없이 실시될 수 있다. 다른 경우에, 잘 알려진 방법들, 절차들, 컴포넌트들, 회로들, 및 네트워크들은 실시예들의 태양들을 불필요하게 모호하게 하지 않기 위해 상세히 기술되지 않았다.
본 발명의 실시예들은 컨볼루션 엔진 내의 컴포넌트들의 동작들을 구성함으로써 원하는 방식으로 다양한 채널들의 입력 데이터의 컨볼루션 및 채널별 기계 학습 동작들을 수행하기 위한 구성가능한 컨볼루션 엔진에 관한 것이다. 컨볼루션 엔진은 제1 컨볼루션 회로, 제2 컨볼루션 회로, 및 제1 및 제2 컨볼루션 회로들에 커플링되는 채널 병합 회로를 포함하는 회로이다. 제1 및 제2 컨볼루션 회로들 각각은, 특히, 컨볼루션 커널들을 입력 데이터에 적용함으로써 값들의 스트림을 생성한다. 값들의 스트림은 인터리빙된 방식으로 이미지 데이터의 하나 이상의 채널들을 각각이 한정할 수 있다. 채널 병합 회로는 선택된 동작 모드에 따라 제1 및 제2 컨볼루션 회로들로부터의 값들의 스트림들을 조합할 수 있다. 이중 컨볼루션 모드에서, 값들의 스트림들은 인터리빙된 방식으로 배열되는, 제1 스트림으로부터의 채널들 및 제2 스트림으로부터의 채널들을 갖는 단일 출력 스트림으로 조합된다.
예시적인 전자 디바이스
전자 디바이스들, 그러한 디바이스들에 대한 사용자 인터페이스들, 및 그러한 디바이스들을 사용하기 위한 연관된 프로세스들의 실시예들이 기술된다. 일부 실시예들에서, 디바이스는 PDA(personal digital assistant) 및/또는 음악 재생기 기능들과 같은 다른 기능들을 또한 포함하는 휴대용 통신 디바이스, 예컨대 모바일 전화기이다. 휴대용 다기능 디바이스들의 예시적인 실시예들은 미국 캘리포니아주 쿠퍼티노 소재의 Apple Inc.로부터의 iPhone®, iPod Touch®, Apple Watch®, 및 iPad® 디바이스들을 제한 없이 포함한다. 웨어러블, 랩톱 또는 태블릿 컴퓨터와 같은 다른 휴대용 전자 디바이스들이 선택적으로 사용된다. 일부 실시예들에서, 디바이스는 휴대용 통신 디바이스가 아니라, 휴대용 용도를 위해 설계되지 않은 데스크톱 컴퓨터 또는 다른 컴퓨팅 디바이스이다. 일부 실시예들에서, 개시되는 전자 디바이스는 터치 감응형 표면(예컨대, 터치 스크린 디스플레이 및/또는 터치패드)을 포함할 수 있다. 도 1과 관련하여 아래에서 기술되는 예시적인 전자 디바이스(예컨대, 디바이스(100))는 사용자 입력을 수신하기 위한 터치 감응형 표면을 포함할 수 있다. 전자 디바이스는 또한 물리적 키보드, 마우스 및/또는 조이스틱과 같은 하나 이상의 다른 물리적 사용자 인터페이스 디바이스들을 포함할 수 있다.
도 1은 일 실시예에 따른 전자 디바이스(100)의 고레벨 도면이다. 디바이스(100)는 "홈" 또는 메뉴 버튼(104)과 같은 하나 이상의 물리적 버튼들을 포함할 수 있다. 메뉴 버튼(104)은, 예를 들어, 디바이스(100) 상에서 실행되는 애플리케이션들의 세트 내의 임의의 애플리케이션으로 내비게이팅하는 데 사용된다. 일부 실시예들에서, 메뉴 버튼(104)은 메뉴 버튼(104) 상의 지문을 식별하는 지문 센서를 포함한다. 지문 센서는 메뉴 버튼(104) 상의 손가락이 디바이스(100)를 잠금해제하기 위해 저장된 지문과 매칭하는 지문을 갖는지의 여부를 판정하는 데 사용될 수 있다. 대안으로, 일부 실시예들에서, 메뉴 버튼(104)은 터치 스크린 상에 디스플레이된 그래픽 사용자 인터페이스(GUI)에서 소프트 키로서 구현된다.
일부 실시예들에서, 디바이스(100)는 터치 스크린(150), 메뉴 버튼(104), 디바이스로의 전력을 공급/차단하고 디바이스를 잠그기 위한 푸시 버튼(106), 볼륨 조절 버튼들(108), 가입자 식별 모듈(Subscriber Identity Module, SIM) 카드 슬롯(110), 헤드셋 잭(112), 및 도킹/충전 외부 포트(124)를 포함한다. 푸시 버튼(106)은, 버튼을 누르고 사전정의된 시간 간격 동안 버튼을 누른 상태로 유지함으로써 디바이스 상에서의 전력을 턴온/턴오프시키고/시키거나; 버튼을 누르고 사전정의된 시간 간격이 경과하기 전에 버튼을 누름해제함으로써 디바이스를 잠그고/잠그거나; 디바이스를 잠금해제하거나 잠금해제 프로세스를 개시하는 데 사용될 수 있다. 대안적인 실시예에서, 디바이스(100)는 또한 마이크로폰(113)을 통해 일부 기능들의 활성화 또는 비활성화를 위한 구두 입력을 수용한다. 디바이스(100)는, 메모리(이는 하나 이상의 컴퓨터 판독가능 저장 매체들을 포함할 수 있음), 메모리 제어기, 하나 이상의 중앙 프로세싱 유닛(CPU)들, 주변기기 인터페이스, RF 회로부, 오디오 회로부, 스피커(111), 마이크로폰(113), 입출력(I/O) 서브시스템, 및 다른 입력 또는 제어 디바이스들을 포함하지만 이들로 제한되지 않는 다양한 컴포넌트들을 포함한다. 디바이스(100)는 하나 이상의 이미지 센서들(164), 하나 이상의 근접 센서들(166), 및 하나 이상의 가속도계들(168)을 포함할 수 있다. 디바이스(100)는 도 1에 도시되지 않은 컴포넌트들을 포함할 수 있다.
디바이스(100)는 전자 디바이스의 일례일 뿐이고, 디바이스(100)는 위에 열거된 것보다 더 많거나 더 적은 컴포넌트들을 가질 수 있으며, 이들 중 일부는 일 컴포넌트로 조합되거나 상이한 구성 또는 배열을 가질 수 있다. 위에 열거된 디바이스(100)의 다양한 컴포넌트들은, 하나 이상의 신호 프로세싱 및/또는 ASIC(application specific integrated circuit)들을 비롯한, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구체화된다.
도 2는 일 실시예에 따른 디바이스(100) 내의 컴포넌트들을 도시한 블록도이다. 디바이스(100)는 이미지 프로세싱을 포함하는 다양한 동작들을 수행할 수 있다. 이러한 목적 및 다른 목적들을 위해, 디바이스(100)는, 다른 컴포넌트들 중에서도, 이미지 센서(202), SOC(system-on-a chip) 컴포넌트(204), 시스템 메모리(230), 영구적 저장소(예컨대, 플래시 메모리)(228), 모션 센서(234), 및 디스플레이(216)를 포함할 수 있다. 도 2에 도시된 바와 같은 컴포넌트들은 단지 예시적인 것이다. 예를 들어, 디바이스(100)는 도 2에 도시되지 않은 다른 컴포넌트들(예컨대, 스피커 또는 마이크로폰)을 포함할 수 있다. 또한, 일부 컴포넌트들(예컨대, 모션 센서(234))은 디바이스(100)로부터 생략될 수 있다.
이미지 센서(202)는 이미지 데이터를 캡처하기 위한 컴포넌트이고, 예를 들어, CMOS(complementary metal-oxide-semiconductor) 능동 픽셀 센서, 카메라, 비디오 카메라, 또는 다른 디바이스들로서 구체화될 수 있다. 이미지 센서(202)는 추가 프로세싱을 위해 SOC 컴포넌트(204)로 전송되는 미처리 이미지 데이터를 생성한다. 일부 실시예들에서, SOC 컴포넌트(204)에 의해 프로세싱된 이미지 데이터는 디스플레이(216) 상에 디스플레이되거나, 시스템 메모리(230) 및 영구적 저장소(228)에 저장되거나, 네트워크 접속을 통해 원격 컴퓨팅 디바이스로 전송된다. 이미지 센서(202)에 의해 생성된 미처리 이미지 데이터는 베이어(Bayer) CFA(color filter array) 패턴(이하, "베이어 패턴"으로도 지칭됨)으로 있을 수 있다.
모션 센서(234)는 디바이스(100)의 모션을 감지하기 위한 컴포넌트 또는 컴포넌트들의 세트이다. 모션 센서(234)는 디바이스(100)의 배향 및/또는 가속도를 나타내는 센서 신호들을 생성할 수 있다. 센서 신호들은 디바이스(100)를 턴온시키는 것 또는 디스플레이(216) 상에 디스플레이된 이미지들을 회전시키는 것과 같은 다양한 동작들을 위해 SOC 컴포넌트(204)로 전송된다.
디스플레이(216)는 SOC 컴포넌트(204)에 의해 생성된 바와 같은 이미지들을 디스플레이하기 위한 컴포넌트이다. 디스플레이(216)는, 예를 들어, 액정 디스플레이(LCD) 디바이스 또는 유기 발광 다이오드(OLED) 디바이스를 포함할 수 있다. SOC 컴포넌트(204)로부터 수신된 데이터에 기초하여, 디스플레이(116)는 메뉴들, 선택된 동작 파라미터들, 이미지 센서(202)에 의해 캡처되고 SOC 컴포넌트(204)에 의해 프로세싱된 이미지들, 및/또는 디바이스(100)의 사용자 인터페이스로부터 수신된 다른 정보(도시되지 않음)와 같은 다양한 이미지들을 디스플레이할 수 있다.
시스템 메모리(230)는 SOC 컴포넌트(204)에 의한 실행을 위한 명령어들을 저장하기 위한 그리고 SOC 컴포넌트(204)에 의해 프로세싱되는 데이터를 저장하기 위한 컴포넌트이다. 시스템 메모리(230)는, 예를 들어, 동적 랜덤 액세스 메모리(dynamic random access memory, DRAM), 동기식 DRAM(synchronous DRAM, SDRAM), 이중 데이터 레이트(double data rate)(DDR, DDR2, DDR3 등), 램버스 DRAM(RAMBUS DRAM, RDRAM), 정적 RAM(static RAM, SRAM), 또는 이들의 조합을 포함하는 임의의 타입의 메모리로서 구체화될 수 있다. 일부 실시예들에서, 시스템 메모리(230)는 픽셀 데이터 또는 다른 이미지 데이터 또는 통계치를 다양한 포맷들로 저장할 수 있다.
영구적 저장소(228)는 데이터를 비휘발성 방식으로 저장하기 위한 컴포넌트이다. 영구적 저장소(228)는 전력이 이용가능하지 않을 때에도 데이터를 유지한다. 영구적 저장소(228)는 판독 전용 메모리(ROM), NAND 또는 NOR 플래시 메모리 또는 다른 비휘발성 랜덤 액세스 메모리 디바이스들로서 구체화될 수 있다.
SOC 컴포넌트(204)는 하나 이상의 집적 회로(IC) 칩으로서 구체화되고, 다양한 데이터 프로세싱 프로세스들을 수행한다. SOC 컴포넌트(204)는, 다른 서브컴포넌트들 중에서도, 이미지 신호 프로세서(image signal processor, ISP)(206), 중앙 프로세서 유닛(CPU)(208), 네트워크 인터페이스(210), 센서 인터페이스(212), 디스플레이 제어기(214), 그래픽 프로세서(graphics processor, GPU)(220), 메모리 제어기(222), 비디오 인코더(224), 저장소 제어기(226), 및 다양한 다른 입출력(I/O) 인터페이스(218), 및 이러한 서브컴포넌트들을 접속시키는 버스(232)를 포함할 수 있다. SOC 컴포넌트(204)는 도 2에 도시된 것들보다 더 많거나 더 적은 서브컴포넌트들을 포함할 수 있다.
ISP(206)는 이미지 프로세싱 파이프라인의 다양한 스테이지들을 수행하는 하드웨어이다. 일부 실시예들에서, ISP(206)는 이미지 센서(202)로부터 미처리 이미지 데이터를 수신할 수 있고, 미처리 이미지 데이터를, 디바이스(100)의 컴포넌트들 또는 SOC 컴포넌트(204)의 다른 서브컴포넌트들에 의해 사용가능한 형태로 프로세싱할 수 있다. ISP(206)는 이미지 변환 동작들, 수평 및 수직 스케일링, 컬러 공간 변환 및/또는 이미지 안정화 변환들과 같은 다양한 이미지 조작 동작들을 수행할 수 있는데, 이는 도 3을 참조하여 아래에서 상세히 기술되는 바와 같다.
CPU(208)는 임의의 적합한 명령어 세트 아키텍처(instruction set architecture, ISA)를 사용하여 구체화될 수 있고, 그 명령어 세트 아키텍처 내에 정의된 명령어들을 실행시키도록 구성될 수 있다. CPU(208)는 다양한 명령어 세트 아키텍처들 중 임의의 것, 예컨대 x86, PowerPC, SPARC, RISC, ARM 또는 MIPS ISA들, 또는 임의의 다른 적합한 ISA를 사용하는 범용 또는 임베디드 프로세서들일 수 있다. 도 2에 단일 CPU가 도시되어 있지만, SOC 컴포넌트(204)는 다수의 CPU들을 포함할 수 있다. 다중프로세서 시스템들에서, CPU들 각각은 보편적으로는 동일한 ISA를 구현할 수 있지만 반드시 그러한 것은 아니다.
그래픽 프로세싱 유닛(GPU)(220)은 그래픽 데이터를 수행하기 위한 그래픽 프로세싱 회로부이다. 예를 들어, GPU(220)는 프레임 버퍼(예컨대, 전체 프레임에 대한 픽셀 데이터를 포함하는 것) 내에 디스플레이될 객체들을 렌더링할 수 있다. GPU(220)는 그래픽 동작의 일부 또는 전부, 또는 소정 그래픽 동작들의 하드웨어 가속을 수행하도록 그래픽 소프트웨어를 실행시킬 수 있는 하나 이상의 그래픽 프로세서들을 포함할 수 있다.
I/O 인터페이스들(218)은 디바이스(100) 내의 다양한 입출력 컴포넌트들과 인터페이싱하기 위한 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합들이다. I/O 컴포넌트들은 디바이스들, 예컨대 키패드, 버튼, 오디오 디바이스, 및 글로벌 포지셔닝 시스템과 같은 센서를 포함할 수 있다. I/O 인터페이스들(218)은, 그러한 I/O 컴포넌트들에 데이터를 전송하기 위한 데이터를 프로세싱하거나, 그러한 I/O 컴포넌트들로부터 수신된 데이터를 프로세싱한다.
네트워크 인터페이스(210)는 하나 이상의 네트워크들(예컨대, 캐리어 또는 에이전트 디바이스들)을 통해 데이터가 디바이스들(100)과 다른 디바이스들 사이에서 교환될 수 있게 하는 서브컴포넌트이다. 예를 들어, 비디오 또는 다른 이미지 데이터는 네트워크 인터페이스(210)를 통해 다른 디바이스들로부터 수신될 수 있고, (예컨대, 도 3에서 아래에서 논의되는 바와 같은, 이미지 신호 프로세서(206)에 대한 백엔드 인터페이스를 통한) 후속 프로세싱 및 디스플레이를 위해 시스템 메모리(230)에 저장될 수 있다. 네트워크들은 근거리 통신망(Local Area Network, LAN)들(예컨대, 이더넷(Ethernet) 또는 기업 네트워크(corporate network)) 및 광역 통신망(WAN)들을 포함할 수 있지만, 이들로 제한되지 않는다. 네트워크 인터페이스(210)를 통해 수신된 이미지 데이터는 ISP(206)에 의해 이미지 프로세싱 프로세스들을 겪을 수 있다.
센서 인터페이스(212)는 모션 센서(234)와 인터페이싱하기 위한 회로부이다. 센서 인터페이스(212)는 모션 센서(234)로부터 센서 정보를 수신하고, 센서 정보를 프로세싱하여 디바이스(100)의 배향 또는 이동을 판정한다.
디스플레이 제어기(214)는 디스플레이(216) 상에 디스플레이될 이미지 데이터를 전송하기 위한 회로부이다. 디스플레이 제어기(214)는 ISP(206), CPU(208), 그래픽 프로세서(220) 또는 시스템 메모리(230)로부터 이미지 데이터를 수신하고, 이미지 데이터를 디스플레이(216) 상에 디스플레이하기에 적합한 포맷으로 프로세싱한다.
메모리 제어기(222)는 시스템 메모리(230)와 통신하기 위한 회로부이다. 메모리 제어기(222)는 ISP(206), CPU(208), GPU(220) 또는 SOC 컴포넌트(204)의 다른 서브컴포넌트들에 의한 프로세싱을 위해 시스템 메모리(230)로부터 데이터를 판독할 수 있다. 메모리 제어기(222)는, 또한, SOC 컴포넌트(204)의 다양한 서브컴포넌트들로부터 수신된 데이터를 시스템 메모리(230)에 기록할 수 있다.
비디오 인코더(224)는, 영구적 저장소(128)에 저장하기에 적합한 포맷으로 비디오 데이터를 인코딩하기 위한, 또는 네트워크를 통한 다른 디바이스로의 송신을 위해 데이터를 네트워크 인터페이스(210)에 전달하기 위한 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합이다.
일부 실시예들에서, SOC 컴포넌트(204)의 하나 이상의 서브컴포넌트들 또는 이러한 서브컴포넌트들의 일부 기능은 ISP(206), CPU(208) 또는 GPU(220) 상에서 실행되는 소프트웨어 컴포넌트들에 의해 수행될 수 있다. 그러한 소프트웨어 컴포넌트들은 시스템 메모리(230), 영구적 저장소(228), 또는 네트워크 인터페이스(210)를 통해 디바이스(100)와 통신하는 다른 디바이스에 저장될 수 있다.
이미지 데이터 또는 비디오 데이터는 SOC 컴포넌트(204) 내의 다양한 데이터 경로들을 통해 흐를 수 있다. 일례에서, 미처리 이미지 데이터는 이미지 센서(202)로부터 생성되어 ISP(206)에 의해 프로세싱될 수 있고, 이어서, 버스(232) 및 메모리 제어기(222)를 통해 시스템 메모리(230)로 전송될 수 있다. 이미지 데이터가 시스템 메모리(230)에 저장된 후에, 그것은 인코딩을 위해서는 비디오 인코더(224)에 의해 또는 디스플레이를 위해서는 디스플레이(116)에 의해, 버스(232)를 통해 액세스될 수 있다.
다른 예에서, 이미지 데이터는 이미지 센서(202) 이외의 소스들로부터 수신된다. 예를 들어, 비디오 데이터는 유선 또는 무선 네트워크를 통해 SOC 컴포넌트(204)에 스트리밍, 다운로드, 또는 달리 통신될 수 있다. 이미지 데이터는 네트워크 인터페이스(210)를 통해 수신되어 메모리 제어기(222)를 통해 시스템 메모리(230)에 기록될 수 있다. 이미지 데이터는, 이어서, 도 3을 참조하여 아래에서 상세히 기술되는 바와 같이, ISP(206)에 의해 시스템 메모리(230)로부터 획득될 수 있고, 하나 이상의 이미지 프로세싱 파이프라인 스테이지들을 통해 프로세싱될 수 있다. 이미지 데이터는, 이어서, 시스템 메모리(230)로 반환될 수 있거나, 또는 비디오 인코더(224)로, (디스플레이(216) 상에서의 디스플레이를 위해) 디스플레이 제어기(214)로, 또는 영구적 저장소(228)에서의 저장을 위해 저장소 제어기(226)로 전송될 수 있다.
예시적인 이미지 신호 프로세싱 파이프라인들
도 3은 일 실시예에 따른, ISP(206)를 사용하여 구현된 이미지 프로세싱 파이프라인들을 도시한 블록도이다. 도 3의 실시예에서, ISP(206)는 이미지 센서(202)에 커플링되어 미처리 이미지 데이터를 수신한다. ISP(206)는 생성, 캡처, 또는 수신으로부터 출력까지 이미지 정보를 프로세싱하는 스테이지들의 세트를 포함할 수 있는 이미지 프로세싱 파이프라인을 구현한다. ISP(206)는, 다른 컴포넌트들 중에서도, 센서 인터페이스(302), 중앙 제어부(320), 프론트엔드 파이프라인 스테이지들(330), 백엔드 파이프라인 스테이지들(340), 이미지 통계 모듈(304), 비전 모듈(322), 백엔드 인터페이스(342), 및 출력 인터페이스(316)를 포함할 수 있다. ISP(206)는 도 3에 도시되지 않은 다른 컴포넌트들을 포함할 수 있거나, 또는 도 3에 도시된 하나 이상의 컴포넌트들을 생략할 수 있다.
하나 이상의 실시예들에서, ISP(206)의 상이한 컴포넌트들은 상이한 레이트들로 이미지 데이터를 프로세싱한다. 도 3의 실시예에서, 프론트엔드 파이프라인 스테이지들(330)(예컨대, 미처리 프로세싱 스테이지(306) 및 리샘플(resample) 프로세싱 스테이지(308))은 초기 레이트로 이미지 데이터를 프로세싱할 수 있다. 따라서, 다양한 상이한 기법들, 조정들, 수정들, 또는 다른 프로세싱 동작들이 이러한 프론트엔드 파이프라인 스테이지들(330)에 의해 초기 레이트로 수행된다. 예를 들어, 프론트엔드 파이프라인 스테이지들(330)이 2 픽셀/클록 사이클로 프로세싱하는 경우, 미처리 프로세싱 스테이지(308)의 동작들(예컨대, 블랙 레벨 보상(black level compensatio), 하이라이트 복원, 및 결함 픽셀 보정)은 한번에 2 픽셀의 이미지 데이터를 프로세싱할 수 있다. 대조적으로, 하나 이상의 백엔드 파이프라인 스테이지들(340)은 초기 데이터 레이트보다 작은 상이한 레이트로 이미지 데이터를 프로세싱할 수 있다. 예를 들어, 도 3의 실시예에서, 백엔드 파이프라인 스테이지들(340)(예컨대, 잡음 프로세싱 스테이지(310), 컬러 프로세싱 스테이지(312), 및 출력 리스케일(output rescale)(314))은 감소된 레이트(예컨대, 1 픽셀/클록 사이클)로 프로세싱될 수 있다. 본 명세서에 기술되는 실시예들은 하나 이상의 백엔드 파이프라인 스테이지들(340)이 이미지 데이터를 초기 데이터 레이트와는 상이한 레이트로 프로세싱하는 실시예들을 포함하지만, 일부 실시예들에서, 백엔드 파이프라인 스테이지들(340)은 초기 데이터 레이트로 이미지 데이터를 프로세싱할 수 있다.
센서 인터페이스(302)는 이미지 센서(202)로부터 미처리 이미지 데이터를 수신하고, 그 미처리 이미지 데이터를 파이프라인 내의 다른 스테이지들에 의해 프로세싱가능한 이미지 데이터로 프로세싱한다. 센서 인터페이스(302)는 이미지 데이터 크기를 감소시키기 위해 이미지 크로핑(cropping), 비닝(binning) 또는 스케일링과 같은 다양한 사전프로세싱 동작들을 수행할 수 있다. 일부 실시예들에서, 픽셀들은 래스터 순서(raster order)로(즉, 수평으로, 라인별로) 이미지 센서(202)로부터 센서 인터페이스(302)로 전송된다. 파이프라인에서의 후속 프로세스들은 또한 래스터 순서로 수행될 수 있고, 그 결과도 또한 래스터 순서로 출력될 수 있다. 단일 이미지 센서(202) 및 단일 센서 인터페이스(302)만이 도 3에 도시되어 있지만, 하나 초과의 이미지 센서가 디바이스(100)에 제공될 때, 대응하는 수의 센서 인터페이스들이 ISP(206)에 제공되어 각각의 이미지 센서로부터의 미처리 이미지 데이터를 프로세싱하게 할 수 있다.
프론트엔드 파이프라인 스테이지들(330)은 이미지 데이터를 미처리 또는 풀-컬러 도메인들에서 프로세싱한다. 프론트엔드 파이프라인 스테이지들(330)은 미처리 프로세싱 스테이지(306) 및 리샘플 프로세싱 스테이지(308)를 포함할 수 있지만, 이들로 제한되지 않는다. 미처리 이미지 데이터는, 예를 들어, 베이어 미처리 포맷으로 있을 수 있다. 베이어 미처리 이미지 포맷에서, (모든 컬러들 대신에) 특정 컬러에 특정적인 값들을 갖는 픽셀 데이터가 각각의 픽셀에 제공된다. 이미지 캡처 센서에서, 이미지 데이터는 전형적으로 베이어 패턴으로 제공된다. 미처리 프로세싱 스테이지(308)는 이미지 데이터를 베이어 미처리 포맷으로 프로세싱할 수 있다.
미처리 프로세싱 스테이지(308)에 의해 수행되는 동작들은 센서 선형화, 블랙 레벨 보상, 고정 패턴 잡음 감소, 결함 픽셀 보정, 미처리 잡음 필터링, 렌즈 셰이딩 보정(lens shading correction), 화이트 밸런스 이득, 및 하이라이트 복원을 포함하지만, 이들로 제한되지 않는다. 센서 선형화는 다른 프로세싱을 위해 비선형 이미지 데이터를 선형 공간에 맵핑하는 것을 지칭한다. 블랙 레벨 보상은 이미지 데이터의 각각의 컬러 성분(예컨대, Gr, R, B, Gb)에 대해 독립적으로 디지털 이득, 오프셋 및 클립을 제공하는 것을 지칭한다. 고정 패턴 잡음 감소는, 입력 이미지로부터 다크 프레임을 감산하고 상이한 이득들을 픽셀들에 승산함(multiplying)으로써 오프셋 고정 패턴 잡음 및 이득 고정 패턴 잡음을 제거하는 것을 지칭한다. 결함 픽셀 보정은 결함 픽셀들을 검출하는 것, 및 이어서 결함 픽셀 값들을 대체시키는 것을 지칭한다. 미처리 잡음 필터링은 밝기(brightness)가 유사한 이웃 픽셀들을 평균화함으로써 이미지 데이터의 잡음을 감소시키는 것을 지칭한다. 하이라이트 복원은 다른 채널로부터 클리핑된(또는 거의 클리핑된) 그러한 픽셀들에 대한 픽셀 값들을 추정하는 것을 지칭한다. 렌즈 셰이딩 보정은 렌즈 광학 중심으로부터의 거리에 대략적으로 비례하는 세기의 드롭오프(dropoff)를 보상하도록 픽셀별 이득을 적용하는 것을 지칭한다. 화이트 밸런스 이득은 모든 컬러 성분들(예컨대, 베이어 포맷의 Gr, R, B, Gb)에 대하여 독립적으로 화이트 밸런스, 오프셋 및 클립에 대한 디지털 이득들을 제공하는 것을 지칭한다. ISP(206)의 컴포넌트들은 미처리 이미지 데이터를 풀-컬러 도메인 내의 이미지 데이터로 변환할 수 있고, 따라서, 미처리 프로세싱 스테이지(308)는, 미처리 이미지 데이터에 더하여 또는 그 대신에, 풀-컬러 도메인 내의 이미지 데이터를 프로세싱할 수 있다.
리샘플 프로세싱 스테이지(308)는 미처리 프로세싱 스테이지(306)로부터 수신된 이미지 데이터를 변환, 리샘플링, 또는 스케일링하기 위한 다양한 동작들을 수행한다. 리샘플 프로세싱 스테이지(308)에 의해 수행되는 동작들은, 디모자이크(demosaic) 동작, 픽셀별 컬러 보정 동작, 감마 맵핑 동작, 컬러 공간 변환 및 다운스케일링 또는 서브-대역 분할을 포함할 수 있지만, 이들로 제한되지 않는다. 디모자이크 동작은 누락된 컬러 샘플들을 (예를 들어, 베이어 패턴의) 미처리 이미지 데이터로부터 풀-컬러 도메인 내로의 출력 이미지 데이터로 변환 또는 보간하는 것을 지칭한다. 디모자이크 동작은 풀-컬러 픽셀들을 획득하기 위한, 보간된 샘플들에 대한 저역 통과 지향성 필터링을 포함할 수 있다. 픽셀별 컬러 보정 동작은, 각각의 컬러 채널의 상대적 잡음 표준 편차들에 관한 정보를 이용하여 픽셀 단위로 컬러 보정을 수행하여 이미지 데이터 내의 잡음을 증폭시킴이 없이 컬러를 보정하는 프로세스를 지칭한다. 감마 맵핑은 흑백 변환, 세피아 톤 변환, 네거티브 변환, 또는 솔라리제이션 변환(solarize conversion)을 비롯한 특수 이미지 효과들을 수행하기 위해 이미지 데이터를 입력 이미지 데이터 값들로부터 출력 데이터 값들로 변환하는 것을 지칭한다. 감마 맵핑의 목적을 위해, 각각의 픽셀의 채널들 또는 상이한 컬러 성분들에 대한 룩업 테이블들(또는 픽셀 값들을 다른 값으로 인덱싱하는 다른 구조물들)(예컨대, Y, Cb, 및 Cr 컬러 성분들에 대한 개별적인 룩업 테이블)이 사용될 수 있다. 컬러 공간 변환은 입력 이미지 데이터의 컬러 공간을 상이한 포맷으로 변환하는 것을 지칭한다. 일 실시예에서, 리샘플 프로세싱 스테이지(308)는 추가 프로세싱을 위해 RBD 포맷을 YCbCr 포맷으로 변환한다.
중앙 제어부(320)는 ISP(206) 내의 다른 컴포넌트들의 전체 동작을 제어 및 조정할 수 있다. 중앙 제어부(320)는, 다양한 동작 파라미터들(예컨대, 로깅 클록 사이클들, 메모리 레이턴시, 서비스 품질, 및 상태 정보)을 모니터링하는 것, ISP(206)의 다른 컴포넌트들에 대한 제어 파라미터들을 업데이트 또는 관리하는 것, 및 센서 인터페이스(302)와 인터페이싱하여 ISP(206)의 다른 컴포넌트들의 시작 및 중지를 제어하는 것을 포함하지만 이들로 제한되지 않는 동작들을 수행한다. 예를 들어, 중앙 제어부(320)는 ISP(206) 내의 다른 컴포넌트들에 대한 프로그래밍가능 파라미터들을 업데이트할 수 있는 반면, 다른 컴포넌트들은 유휴 상태에 있다. 프로그래밍가능 파라미터들을 업데이트한 후, 중앙 제어부(320)는 ISP(206)의 이러한 컴포넌트들을 실행 상태에 놓아서 하나 이상의 동작들 또는 태스크들을 수행할 수 있다. 중앙 제어부(320)는, 또한, 리샘플 프로세싱 스테이지(308) 이전에, 그 동안에, 또는 그 이후에 (예컨대, 도 2에서의 시스템 메모리(230)에 기록함으로써) 이미지 데이터를 저장할 것을 ISP(206)의 다른 컴포넌트들에게 명령할 수 있다. 이러한 방식으로, 백-엔드 파이프라인 스테이지들(340)을 통해 리샘플 프로세싱 스테이지(308)로부터 출력된 이미지 데이터를 프로세싱하는 것에 더하여 또는 그 대신에, 미처리 또는 풀-컬러 도메인 포맷의 풀-해상도 이미지 데이터가 저장될 수 있다.
이미지 통계 모듈(304)은 이미지 데이터와 연관된 통계 정보를 수집하기 위해 다양한 동작들을 수행한다. 통계 정보를 수집하기 위한 동작들은 센서 선형화, 패턴화된 결함 픽셀들의 마스킹, 미처리 이미지 데이터의 서브샘플링, 패턴화되지 않은 결함 픽셀들의 검출 및 대체, 블랙 레벨 보상, 렌즈 셰이딩 보정, 및 블랙 레벨 역보상을 포함할 수 있지만, 이들로 제한되지 않는다. 그러한 동작들 중 하나 이상을 수행한 후, 3A 통계치(AWB(Auto white balance), AE(auto exposure), AF(auto focus)), 히스토그램들(예컨대, 2D 컬러 또는 성분) 및 임의의 다른 이미지 데이터 정보와 같은 통계 정보가 수집 또는 추적될 수 있다. 일부 실시예들에서, 특정 픽셀들의 값들, 또는 픽셀 값들의 영역들은 선행 동작들이 클리핑된 픽셀들을 식별할 때 특정 통계 데이터(예컨대, AF 통계치)의 수집으로부터 배제될 수 있다. 단일 통계 모듈(304)만이 도 3에 도시되어 있지만, 다수의 이미지 통계 모듈들이 ISP(206)에 포함될 수 있다. 그러한 실시예들에서, 각각의 통계 모듈은 동일한 또는 상이한 이미지 데이터에 대한 상이한 정보를 수집하도록 중앙 제어부(320)에 의해 프로그래밍될 수 있다.
비전 모듈(322)은 이미지 데이터에서의 얼굴 검출과 같은, CPU(208)에서의 컴퓨터 비전 동작들을 용이하게 하기 위해 다양한 동작들을 수행한다. 비전 모듈(322)은 사전프로세싱, 글로벌 톤-맵핑 및 감마 보정, 비전 잡음 필터링, 크기조정, 키포인트 검출, 컨볼루션 및 HOG(histogram-of-orientation gradient)들의 생성을 포함하는 다양한 동작들을 수행할 수 있다. 사전프로세싱은, 입력 이미지 데이터가 YCrCb 포맷에 있지 않은 경우, 휘도의 서브샘플링 또는 비닝 동작 및 계산을 포함할 수 있다. 글로벌 맵핑 및 감마 보정은 휘도 이미지 상의 사전프로세싱된 데이터에 대해 수행될 수 있다. 비전 잡음 필터링은, 픽셀 결함들을 제거하고 이미지 데이터에 존재하는 잡음을 감소시키기 위해, 그리고 이에 의해, 후속 컴퓨터 비전 알고리즘들의 품질 및 성능을 개선하기 위해 수행된다. 그러한 비전 잡음 필터링은 도트들 또는 결함 픽셀들을 검출 및 고정하는 것, 및 유사한 밝기의 이웃 픽셀들을 평균함으로써 잡음을 감소시키도록 쌍방 필터링(bilateral filtering)을 수행하는 것을 포함할 수 있다. 다양한 비전 알고리즘들은 상이한 크기들 및 스케일들의 이미지들을 사용한다. 이미지의 크기조정은, 예를 들어, 비닝 또는 선형 보간 동작에 의해 수행된다. 키포인트들은 동일한 장면 또는 객체의 다른 이미지들에서의 매칭에 매우 적합한 이미지 패치들에 의해 둘러싸이는, 이미지 내의 위치들이다. 그러한 키포인트들은 이미지 정렬, 카메라 포즈 계산, 및 객체 추적에 유용하다. 키포인트 검출은 이미지에서 그러한 키포인트들을 식별하는 프로세스를 지칭한다. 컨볼루션은 이미지/비디오 프로세싱 및 머신 비전에서 사용될 수 있다. 컨볼루션은, 예를 들어, 이미지들의 에지 맵들을 생성하거나 이미지들을 평활화시키도록 수행될 수 있다. HOG는 이미지 분석 및 컴퓨터 비전에서의 태스크들을 위한 이미지 패치들의 설명을 제공한다. HOG는, 예를 들어, (i) 간단한 차이 필터를 사용하여 수평 및 수직 그레디언트(gradient)들을 계산하는 것, (ii) 수평 및 수직 그레디언트들로부터 그레디언트 배향들 및 크기들을 계산하는 것, 및 (iii) 그레디언트 배향들을 비닝하는 것에 의해 생성될 수 있다.
백엔드 인터페이스(342)는 이미지 센서(202) 이외의 다른 이미지 소스들로부터 이미지 데이터를 수신하고, 이를, 프로세싱을 위해 ISP(206)의 다른 컴포넌트들로 전달한다. 예를 들어, 이미지 데이터는 네트워크 접속을 통해 수신될 수 있고 시스템 메모리(230)에 저장될 수 있다. 백엔드 인터페이스(342)는 시스템 메모리(230)에 저장된 이미지 데이터를 검색하고, 이를, 프로세싱을 위해, 백엔드 파이프라인 스테이지들(340)에 제공한다. 백엔드 인터페이스(342)에 의해 수행되는 많은 동작들 중 하나는 검색된 이미지 데이터를 백엔드 프로세싱 스테이지들(340)에 의해 활용될 수 있는 포맷으로 변환하는 것이다. 예컨대, 백엔드 인터페이스(342)는 RGB, YCbCr 4:2:0, 또는 YCbCr 4:2:2 포맷화된 이미지 데이터를 YCbCr 4:4:4 컬러 포맷으로 변환할 수 있다.
백엔드 파이프라인 스테이지들(340)은 특정 풀-컬러 포맷(예컨대, YCbCr 4:4:4 또는 RGB)에 따라 이미지 데이터를 프로세싱한다. 일부 실시예들에서, 백엔드 파이프라인 스테이지들(340)의 컴포넌트들은 추가 프로세싱 전에 이미지 데이터를 특정 풀-컬러 포맷으로 변환할 수 있다. 백엔드 파이프라인 스테이지들(340)은, 다른 스테이지들 중에서도, 잡음 프로세싱 스테이지(310) 및 컬러 프로세싱 스테이지(312)를 포함할 수 있다. 백엔드 파이프라인 스테이지들(340)은 도 3에 도시되지 않은 다른 스테이지들을 포함할 수 있다.
잡음 프로세싱 스테이지(310)는 이미지 데이터에서의 잡음을 감소시키기 위해 다양한 동작들을 수행한다. 잡음 프로세싱 스테이지(310)에 의해 수행되는 동작들은 컬러 공간 변환, 감마/디-감마 맵핑, 시간적 필터링, 잡음 필터링, 루마 선명화, 및 크로마 잡음 감소를 포함하지만, 이들로 제한되지 않는다. 컬러 공간 변환은 이미지 데이터를 하나의 컬러 공간 포맷으로부터 다른 컬러 공간 포맷으로 변환할 수 있다(예컨대, RGB 포맷이 YCbCr 포맷으로 변환됨). 감마/디-감마 동작은 이미지 데이터를 입력 이미지 데이터 값들로부터 출력 데이터 값들로 변환하여 특수한 이미지 효과들을 수행한다. 시간적 필터링은 이전에 필터링된 이미지 프레임을 사용하여 잡음을 필터링하여, 잡음을 감소시킨다. 예를 들어, 이전 이미지 프레임의 픽셀 값들은 현재 이미지 프레임의 픽셀 값들과 조합된다. 잡음 필터링은, 예를 들어, 공간 잡음 필터링을 포함할 수 있다. 루마 선명화는 픽셀 데이터의 루마 값들을 선명화할 수 있는 반면, 크로마 억제는 크로마를 회색으로(즉, 컬러 없이) 감쇠시킬 수 있다. 일부 실시예에서, 루마 선명화 및 크로마 억제는 공간 잡음 필터링과 동시에 수행될 수 있다. 잡음 필터링의 공격성(aggressiveness)은 이미지의 상이한 영역들에 대해 상이하게 결정될 수 있다. 공간적 잡음 필터링은 시간적 필터링을 구현하는 시간적 루프의 일부로서 포함될 수 있다. 예를 들어, 이전 이미지 프레임은 다음 이미지 프레임이 프로세싱되도록 기준 프레임으로서 저장되기 전에 시간적 필터 및 공간적 잡음 필터에 의해 프로세싱될 수 있다. 다른 실시예들에서, 공간적 잡음 필터링은 시간적 필터링을 위한 시간적 루프의 일부로서 포함되지 않을 수 있다(예컨대, 공간적 잡음 필터는 이미지 프레임이 기준 이미지 프레임으로서 저장된 이후에 그 이미지 프레임에 적용될 수 있고, 따라서, 그 이미지 프레임은 공간적으로 필터링된 기준 프레임이 아님).
컬러 프로세싱 스테이지(312)는 이미지 데이터에서 컬러 정보를 조정하는 것과 연관된 다양한 동작들을 수행할 수 있다. 컬러 프로세싱 스테이지(312)에서 수행되는 동작들은 로컬 톤 맵핑, 이득/오프셋/클립, 컬러 보정, 3차원 컬러 룩업, 감마 변환, 및 컬러 공간 변환을 포함하지만, 이들로 제한되지 않는다. 로컬 톤 맵핑은, 이미지를 렌더링할 때 더 많은 제어를 제공하기 위해 공간적으로 변하는 로컬 톤 곡선들을 지칭한다. 예를 들어, 2차원 그리드의 톤 곡선들(이는 중앙 제어부(320)에 의해 프로그래밍될 수 있음)은 이중-선형으로(bi-linearly) 보간되어, 평활하게 변화하는 톤 곡선들이 이미지에 걸쳐서 생성되도록 할 수 있다. 일부 실시예들에서, 로컬 톤 맵핑은, 또한, 공간적으로 변화하고 세기가 변화하는 컬러 보정 매트릭스들을 적용할 수 있는데, 이는, 예를 들어, 이미지에서 하늘은 더 파랗게 만드는 반면 그림자 내의 청색은 더 낮추는 데 사용될 수 있다. 디지털 이득/오프셋/클립은 이미지 데이터의 각각의 컬러 채널 또는 성분에 대해 제공될 수 있다. 컬러 보정은 컬러 보정 변환 매트릭스를 이미지 데이터에 적용할 수 있다. 3D 컬러 룩업은 컬러 성분 출력 값들(예컨대, R, G, B)의 3차원 어레이를 활용하여, 향상된 톤 맵핑, 컬러 공간 변환, 및 기타 컬러 변환을 수행할 수 있다. 예를 들어 감마 보정, 톤 맵핑, 또는 히스토그램 매칭을 수행하기 위해 입력 이미지 데이터 값들을 출력 데이터 값들에 맵핑시킴으로써, 감마 변환이 수행될 수 있다. 컬러 공간 변환은 이미지 데이터를 하나의 컬러 공간으로부터 다른 컬러 공간으로(예컨대, RGB로부터 YCbCr로) 변환하도록 구현될 수 있다. 다른 프로세싱 기법들이, 또한, 흑백 변환, 세피아 톤 변환, 네거티브 변환, 또는 솔라리제이션 변환을 비롯한 다른 특수 이미지 효과들을 수행하기 위해 컬러 프로세싱 스테이지(312)의 일부로서 수행될 수 있다.
출력 리스케일 모듈(314)은 ISP(206)가 이미지 데이터를 프로세싱함에 따라 즉각적으로 왜곡을 보정하고, 변환하고, 리샘플할 수 있다. 출력 리스케일 모듈(314)은 각각의 픽셀에 대해 프랙셔널 입력 좌표(fractional input coordinate)를 계산할 수 있고, 이 프랙셔널 좌표를 사용하여, 다상(polyphase) 리샘플링 필터를 통해 출력 픽셀을 보간할 수 있다. 프랙셔널 입력 좌표는, (예컨대, 간단한 수평 및 수직 스케일링 변환을 통해) 이미지를 크기재조정 또는 크로핑하는 것, (예컨대, 비가분성(non-separable) 매트릭스 변환들을 통해) 이미지를 회전시키거나 전단(shearing)하는 것, (예컨대, 추가적인 깊이 변환을 통한) 원근 와핑(perspective warping) 및 (예컨대, 롤링 셔터로 인한) 이미지 데이터 캡처 동안 이미지 센서에서의 변화들을 고려하기 위해 스트립 구분 단위(piecewise in strips)로 적용되는 픽셀별 원근 분리(per-pixel perspective divide), 및 (예컨대, 보간된 반경 방향 이득 테이블을 인덱싱하기 위해 광학 중심으로부터의 반경 방향 거리를 계산하는 것, 및 반경 방향 렌즈 왜곡을 고려하기 위해 좌표에 반경 방향 섭동(radial perturbance)을 적용하는 것을 통한) 기하학적 왜곡 보정과 같은, 출력 좌표의 다양한 가능한 변환들로부터 생성될 수 있다.
출력 리스케일 모듈(314)은 이미지 데이터가 출력 리스케일 모듈(314)에서 프로세싱됨에 따라 그 이미지 데이터에 변환을 적용할 수 있다. 출력 리스케일 모듈(314)은 수평 및 수직 스케일링 컴포넌트들을 포함할 수 있다. 설계의 수직 부분은 수직 필터에 필요한 "지원"을 유지하기 위하여 일련의 이미지 데이터 라인 버퍼들을 구현할 수 있다. ISP(206)가 스트리밍 디바이스일 수 있기 때문에, 유한 길이 슬라이딩 윈도우의 라인들 중 이미지 데이터의 라인들만이 사용할 필터에 사용가능할 수 있다. 새로 유입되는 라인을 위한 공간을 만들기 위해 하나의 라인이 폐기되면, 라인은 이용불가능할 수 있다. 출력 리스케일 모듈(314)은 이전 라인들에 대하여 연산된 입력 Y 좌표를 통계적으로 모니터링하여, 그것을 이용하여 수직 지원 윈도우에 유지하기 위한 최적의 라인들의 세트를 계산할 수 있다. 각각의 후속 라인에 대하여, 출력 리스케일 모듈은 수직 지원 윈도우의 중심에 대한 추측을 자동으로 생성할 수 있다. 일부 실시예들에서, 출력 리스케일 모듈(314)은 이미지 프레임의 캡처 시 센서 모션에 의해 야기되는 아티팩트 및 모션을 보정하기 위하여 입력 이미지 데이터와 출력 이미지 데이터 사이의 픽셀별 원근 변환을 수행하는 디지털 차이 분석기(DDA) 스텝퍼로서 인코딩된 조각별 원근 변환의 표를 구현할 수 있다. 출력 리스케일은 출력 인터페이스(314)를 통해 시스템(100)의 다양한 다른 컴포넌트들에 이미지 데이터를 제공할 수 있고, 이는 도 1 및 도 2에 대하여 위에서 논의된 바와 같다.
다양한 실시예들에서, 컴포넌트들(302 내지 342)의 기능은 도 3에 도시된 이미지 프로세싱 파이프라인 내의 그 기능 유닛들의 순서에 의해 암시되는 순서와는 상이한 순서로 수행될 수 있거나, 또는 도 3에 도시된 것들과 상이한 기능 컴포넌트들에 의해 수행될 수 있다. 또한, 도 3에서 기술된 바와 같은 다양한 컴포넌트들은 하드웨어, 펌웨어 또는 소프트웨어의 다양한 조합들로 구체화될 수 있다.
예시적인 비전 모듈
비전 모듈(322)은, 도 3을 참조하여 전술된 바와 같이, CPU(208)에서 컴퓨터 비전 동작들을 용이하게 하기 위해 다양한 동작들을 수행한다. 이러한 목적을 위해, 비전 모듈(322)은, 도 4에 도시된 바와 같이, 다른 컴포넌트들 중에서도, HOG 모듈(412), 멀티플렉서(420) 및 컨볼루션 엔진(414)을 포함할 수 있다. 비전 모듈(322)은 도 4에 도시되지 않은 다른 컴포넌트들, 예컨대 스케일링 모듈을 포함할 수 있다.
HOG 엔진(400)은 이미지를 프로세싱하여 각각의 이미지에 대한 HOG 데이터(426)를 생성한다. HOG 데이터(426)의 일례는 이미지 내의 식별된 그레디언트 배향들에 기초하여 이미지에 대해 생성되는 HOG이다. HOG 데이터(426)는 이미지 분류, 장면 검출, 얼굴 표정 검출, 인간 검출, 객체 검출, 장면 분류, 및 텍스트 분류와 같은 다양한 컴퓨터 비전 응용들에서 사용될 수 있다.
멀티플렉서(420)는 HOG 엔진(412)으로부터 HOG 데이터(426)를 그리고 HOG 엔진(412) 이외의 이미지 프로세싱 프로세서(206)의 컴포넌트(예컨대, DRAM 메모리)로부터 픽셀 데이터(424)를 수신하고, 다양한 동작 모드들에 따라 컨볼루션 엔진(414)으로 전달될 입력 데이터(422)로서 HOG 데이터(426) 또는 픽셀 데이터(424) 중 어느 하나를 선택한다. 하나의 모드에서, 멀티플렉서(420)는 입력 데이터(422)로서 HOG 데이터(426)를 컨볼루션 엔진(414)으로 전달할 수 있다. 다른 모드에서, 멀티플렉서(420)는 선명화, 블러링 및 에지 검출과 같은 동작들을 수행하기 위한 입력 데이터(422)로서 픽셀 데이터(424)를 컨볼루션 엔진(414)으로 전달할 수 있다. 멀티플렉서(420)를 제어하기 위한 구성 신호가 중앙 제어부(320)로부터 수신될 수 있다. 픽셀 데이터(422)는 다수의 채널들의 인터리빙된 픽셀 값들의 스트림이다.
컨볼루션 엔진(414)은 입력 데이터(422)에 대해 컨볼루션 동작들을 수행하는 구성가능한 회로이다. 이를 위해, 컨볼루션 엔진(414)은, 도 5를 참조하여 아래에서 상세히 기술되는 바와 같이, 컨볼루션 커널 정보를 저장하기 위한, 계산을 수행하기 위한, 그리고 승산된 값들을 누산하여 출력(428)을 생성하기 위한 컴포넌트들을 포함한다.
도 4에 도시된 바와 같은 비전 모듈(322)의 구조는 단지 예시적인 것이며, 도 4의 구조에 대해 다양한 변경들이 이루어질 수 있다. 예를 들어, HOG 엔진(412) 및 멀티플렉서(420)와 같은 컴포넌트들은 생략될 수 있다. 대안으로, 멀티플렉서(420)는 2개 초과의 소스들로부터 픽셀 데이터를 수신할 수 있고, 스트림 입력 데이터(422)로서 컨볼루션 엔진(414)으로의 입력을 위한 하나의 소스를 선택할 수 있다.
다음의 설명에서, 입력 데이터(422)는 설명을 위해 픽셀 값들인 것으로 가정된다. 그러나, 입력 데이터(422)는 컨볼루션 동작에 적합한 다른 타입들의 데이터(예컨대, HOG 데이터)일 수 있음에 유의해야 한다.
예시적인 컨볼루션 엔진 아키텍처
도 5는 일 실시예에 따른 컨볼루션 엔진(414)을 도시한 블록도이다. 컨볼루션 엔진(414)은 이미지/비디오 프로세싱 및 컴퓨터 비전을 용이하게 하기 위해 인터리빙된 다중 채널 이미지 데이터에 대한 동작들을 수행하는 회로이다. 컨볼루션 엔진(414)은 다중 채널 이미지 데이터에 대해 다양한 타입들의 동작들, 예컨대 컨볼루션 동작들, 채널간 프로세싱 동작들, 및 채널별 프로세싱 동작들을 수행할 수 있다. 예시적인 컨볼루션 동작들은 에지 맵들 또는 평활화된 이미지들을 생성하는 것을 포함할 수 있다. 예를 들어, Gaussian 커널로 컨볼루션된 이미지는 감소된 잡음 및 앨리어싱(aliasing)을 갖는 평활한 이미지를 생성할 수 있다. 다른 예에서, 컨볼루션 엔진(414)은, 이미지가 다수의 지향성 컨볼루션 커널들의 세트와 컨볼루션될 때, 분류를 위한 Gabor 특징부들과 같은 이미지 특징부들을 생성한다. 또한, 일부 실시예들에서, 컨볼루션 엔진(414)은 사람 또는 객체 검출과 같은 심층 기계 학습 분류 태스크들에 대한 템플릿 매칭을 용이하게 한다.
컨볼루션 엔진(414)은 공간 풀링 및 로컬 응답 정규화와 같은 CNN(convolutional neural network) 태스크들을 용이하게 하기 위한 다양한 동작들을 수행한다. CNN은 이미지 분류, 객체 검출, 및 다른 컴퓨터 비전 태스크들을 수행할 수 있는 심층 학습 아키텍처이다.
컨볼루션 엔진(414)은, 예컨대 버스(232)로부터, 입력 데이터(422)를 수신하고, 저장된 컨볼루션 커널 정보에 기초하여 입력 데이터(422)에 대한 컨볼루션 동작을 수행하고, 컨볼루션 동작의 결과에 대한 채널간 및 채널별 프로세싱을 수행하고, 출력 데이터(428)를 생성한다.
컨볼루션 엔진(414)은, 다른 컴포넌트들 중에서도, 제1 컨볼루션 회로(502), 디멀티플렉서 회로(503), 제2 컨볼루션 회로(504), 및 채널 병합 회로(506)를 포함할 수 있다. 컨볼루션 엔진(414)이 제1 컨볼루션 회로(502) 및 제2 컨볼루션 회로(504)를 포함하는 것으로 도시되어 있지만, 일부 실시예들에서, 컨볼루션 엔진(414)은 N개의 컨볼루션 회로들을 포함할 수 있다. 제1 컨볼루션 회로(502)는 입력 데이터(422)의 스트림을 수신하고, 하나 이상의 컨볼루션 커널들을 입력 데이터(422)에 적용하여 값들(530)의 스트림을 생성한다. 제2 컨볼루션 회로(504)는, 또한, 입력 데이터(422)의 스트림(또는, 대안으로, 제1 컨볼루션 회로(502)로부터 출력된 값들(530)의 스트림)을 수신하고, 하나 이상의 컨볼루션 커널들을 입력 데이터(422)에 적용하여 값들(532)의 스트림을 생성한다. 컨볼루션 회로들(502 또는 504)에 의해 수신 및 프로세싱되는 입력 데이터의 스트림들 각각은 인터리빙되는 방식으로 입력 데이터의 하나 이상의 채널을 한정한다.
제1 컨볼루션 회로(502)는 멀티플렉서(508), 사전프로세싱 회로(510), 컨볼루션 코어 회로(512), 및 공간 풀링 회로(514)를 포함한다. 멀티플렉서(508)는 사전프로세싱 회로(510)에 커플링되고, 사전프로세싱 회로(510)는 컨볼루션 코어 회로(512)에 커플링되고, 컨볼루션 코어 회로(512)는 공간 풀링 회로(514)에 커플링된다.
멀티플렉서(508)는 버스(232)로부터 입력 데이터(422)를 수신하고, 입력 데이터(422)를 사전프로세싱 회로(510)에 제공한다. 일부 실시예들에서, 멀티플렉서(508)는 버스(232)로부터의 입력 데이터(424)와 하나 이상의 다른 데이터 소스들로부터의 입력 데이터(예컨대, HOG 데이터(426)) 사이에서 선택하고, 선택된 데이터를 사전프로세싱 회로(510)에 제공한다. 다른 실시예들에서, 멀티플렉서(508)는 제1 컨볼루션 회로(502)로부터 생략되고, 사전프로세싱 회로(510)는 버스(232)로부터 입력 데이터(424)를 수신한다.
사전프로세싱 회로(510)는, 예컨대 입력 데이터(422)에 이득, 오프셋 및 클리핑 동작들을 적용함으로써, 인터리빙된 입력 데이터(422)에 대한 사전프로세싱 동작들을 수행한다. 이러한 동작들은 컨볼루션 이전에 평균 감산 또는 콘트라스트 스트레칭(contrast stretching)과 같은 다양한 타입들의 프로세싱을 적용하기 위해 사용될 수 있다. 일부 실시예들에서, 사전프로세싱 회로(510)는 입력 데이터(422)의 스트림으로부터 각각의 채널에 대한 값들을 식별하고, 상이한 채널들의 입력 값들에 상이한 이득, 오프셋, 또는 클리핑 동작들을 적용하기 위해 각각의 채널을 독립적으로 처리한다. 예를 들어, 입력 데이터(422)는 인터리빙된 Gr, R, B, 및 Gb 채널들을 포함하는 베이어 미처리 포맷의 것일 수 있다. 사전프로세싱 회로(510)는 상이한 채널들의 픽셀 데이터에 상이한 이득, 오프셋, 또는 클리핑 동작들을 적용할 수 있다. 일부 실시예들에서, 사전프로세싱 회로(510)는 사전프로세싱 동작을 적용함이 없이 입력을 컨볼루션 코어 회로(512)로 전달하는 바이패스 모드에서 동작한다.
컨볼루션 코어 회로(512)는 사전프로세싱 회로(510)로부터 사전프로세싱된 입력 데이터를 수신하고, 입력 데이터에 하나 이상의 컨볼루션 커널들을 적용한다. 컨볼루션 코어 회로(512)는 또한 컨볼루션 결과들에 대해 사후프로세싱을 수행할 수 있다. 사후프로세싱은 다중 채널 정규화 교차 상관(normalized cross correlation, NCC) 또는 채널간 로컬 응답 정규화(local response normalization, LRN)와 같은 심층 기계 학습을 위해 도출되는 값들을 생성하는 동작들을 포함할 수 있다. 다중 채널 또는 채널간 동작들은 컨볼루션 결과에 대한, 2개 이상의 채널들로부터의 값들을 조합한다. 컨볼루션 코어 회로(512)에 의해 생성된 스트림 내의 값들의 시퀀스는 인터리빙된 방식으로 데이터의 다수의 채널들을 한정한다. 컨볼루션 코어 회로(512)의 결과는 공간 풀링 회로(514)에 제공된다. 일부 실시예들에서, 컨볼루션 코어 회로(512)의 결과는, 값들(436)의 스트림에 의해 나타내진 바와 같이, 컨볼루션 엔진(414)으로부터 출력된다.
공간 풀링 회로(514)는 컨볼루션 코어 회로(512)의 출력에 대해 채널별 공간 풀링 및 채널별 LRN과 같은 채널별 동작들을 수행하고, 값들(530)의 스트림을 출력한다. 채널별 동작들은 각각의 채널과 개별적으로 연관된 값들을 프로세싱한다. 채널별 LRN은 응답 맵들에서 로컬 콘트라스트를 정규화한다. 채널별 동작들은 심층 기계 학습을 용이하게 하기 위해 컨볼루션 층들 이후에 적용될 수 있다. 공간 풀링 회로(514)의 채널별 동작들은 컨볼루션 층들에 비해 더 낮은 계산 비용을 갖는데, 그 이유는 그들이 보통 더 작은 로컬 윈도우들에서 적용되고 컨볼루션 커널 계수들을 사용하지 않기 때문이다.
제2 컨볼루션 회로(504)는 멀티플렉서(518), 사전프로세싱 회로(520), 컨볼루션 코어 회로(522), 및 공간 풀링 회로(525)를 포함한다. 제1 컨볼루션 회로(502)에 관한 상기의 논의는 제2 컨볼루션 회로(504), 및 컨볼루션 엔진(414)에 포함될 수 있는 임의의 다른 컨볼루션 회로들에 적용가능할 수 있다. MUX(518)는 제1 컨볼루션 코어 회로(502)로부터 출력되는 값들(530)과 버스(232)로부터의 입력 값들(422)의 스트림 사이에서 선택하고, 선택된 입력을 사전프로세싱 회로(520)로 전송한다. 제2 컨볼루션 회로(504)는 값들(530)의 스트림 또는 입력 값들(424)의 스트림 중 어느 하나에 유사한 동작들을 적용할 수 있는데, 그 이유는 양측 스트림들 모두가 인터리빙된 방식으로 데이터의 채널들을 포함하기 때문이다. 사전프로세싱 회로(520), 컨볼루션 코어 회로(522) 및 공간 풀링 회로(524)의 동작들 및 기능들은 사전프로세싱 회로(510), 컨볼루션 코어 회로(512) 및 공간 풀링 회로(514)와 실질적으로 동일하고, 따라서, 이러한 회로들에 대한 상세한 설명이 간결함을 위해 본 명세서에서는 생략된다.
디멀티플렉서 회로(503)는, 값들(530)의 스트림을 수신하고 출력을 채널 병합 회로(506) 또는 제2 컨볼루션 회로(504) 중 하나로 라우팅하는 회로이다. 디멀티플렉서(503)는 중앙 제어부(320)로부터의 명령어들에 기초하여 라우팅을 선택할 수 있다. 중앙 제어부(320)는, 컨볼루션 회로들(502, 504)이 연속으로 동작하는 캐스케이드 모드와 컨볼루션 회로들(502, 504)이 동시에 동작하는 다른 모드들 사이의 동작 모드에 기초하여 디멀티플렉서(503)의 선택을 설정한다. 일부 실시예들에서, 디멀티플렉서 회로(503)는 컨볼루션 엔진(414)으로부터 생략된다.
채널 병합 회로(506)는 제1 컨볼루션 회로(502)의 출력에 커플링되는 입력 및 제2 컨볼루션 회로(504)의 출력에 커플링되는 다른 입력을 갖는다. 채널 병합 회로(506)는 컨볼루션 회로들(502, 504)로부터 값들(530, 532)의 스트림들을 각각 수신하고, 그 값들을 값들(428a, 428b)의 스트림들과 같은 출력 값들(428)의 하나 이상의 출력 스트림들로 조합한다. 컨볼루션 회로들(502, 504)로부터 수신된 값들의 스트림들은, 도 6a 내지 도 6c와 관련하여 아래에서 더 상세히 논의되는 바와 같이, 컨볼루션 엔진(414)을 위해 선택된 동작 모드에 따라 다양한 방식들로 프로세싱될 수 있다.
채널 병합 회로(506)는 채널 병합기(526) 및 멀티플렉서(528)를 포함한다. 채널 병합기(526)는 제1 컨볼루션 코어 회로(502)로부터 값들(530)의 스트림을 그리고 제2 컨볼루션 코어 회로(504)로부터 값들(532)의 스트림을 수신하고, 값들(530, 532)을 인터리빙하여 값들(534)의 스트림을 생성한다. 값들(534)의 스트림은, 채널 병합기(526)에 의해 인터리빙된 방식으로 조합되는 바와 같은, 값들(530)의 스트림으로부터의 채널들 및 값들(532)의 스트림으로부터의 채널들을 포함한다.
멀티플렉서(528)는 채널 병합기(526)로부터의 값들(534)의 스트림에 커플링되는 입력, 및 제2 컨볼루션 코어 회로(504)로부터의 값들(532)의 스트림에 커플링되는 입력을 갖는다. 멀티플렉서(528)는 값들(428b)의 스트림으로서의 출력을 위해 값들(534)의 스트림과 값들(532)의 스트림 사이에서 선택한다. 채널 병합 회로(506)는, 또한, 값들(428a)의 스트림으로서 제1 컨볼루션 회로(502)로부터의 값들(530)의 스트림을 출력할 수 있다.
컨볼루션 엔진 프로세싱 모드
컨볼루션 엔진(414)은 이중 컨볼루션 모드, 캐스케이드 모드, 및 병렬 모드를 비롯한 다수의 모드들에서 동작한다. 중앙 제어부(320)는 특정된 모드에서 동작하도록 컨볼루션 엔진(414)을 구성하는 구성 정보를 컨볼루션 엔진(414)으로 전송한다. 구성 정보는 컨볼루션 엔진(414)의 컴포넌트들에 대한 명령어들을 포함한다. 구성 정보는, 또한, 각각의 컨볼루션 회로(502, 504)에 의해 사용되는 컨볼루션 커널들과 같은, 컴포넌트들에 대한 입력들 및 기능을 특정할 수 있다.
도 6a는 일 실시예에 따른 컨볼루션 엔진(414)의 이중 컨볼루션 모드를 도시한 블록도이다. 이중 컨볼루션 모드에서, 컨볼루션 회로들(502, 504)은 상이한 컨볼루션 커널들을 동일한 입력 데이터(424)에 적용함으로써 동시에 동작하고, 채널 병합 회로(506)는 컨볼루션 회로들(502, 504)로부터의 결과들을 조합하여 출력 값들(428b)의 출력 스트림을 생성한다. 각각의 컨볼루션 커널과 연관된 속성들은 필터 요소 값들, 컨볼루션 커널의 커널 크기(예컨대, 커널에 의해 한정되는 윈도우의 픽셀들의 높이 및 폭), 컨볼루션 커널의 희소성 값들, 및 컨볼루션들 사이의 스텝 값을 포함할 수 있다. 제1 컨볼루션 회로(502)로부터 출력된 값들(530)의 스트림 및 제2 컨볼루션 회로(504)로부터 출력된 값들(532)의 스트림은 채널 병합 회로(506)에 입력된다. 채널 병합 회로(506)는 출력 값들(530, 532)을 인터리빙함으로써 출력 값들(428b)의 출력 스트림을 생성한다. 값들(428b)의 출력 스트림은 이중 컨볼루션 모드에서 컨볼루션 엔진(414)으로부터 출력된다.
일부 실시예들에서, 중앙 제어부(320)는 데이터 스트림들을 라우팅하기 위해 멀티플렉서들(508, 518, 528) 및 디멀티플렉서(503)에 의한 선택을 제어함으로써 컨볼루션 엔진(414)을 이중 컨볼루션 모드로 설정한다. 디멀티플렉서(503)는, 사용되는 경우, 출력 값들(428a)의 출력 스트림으로서 출력되는 값들(530)의 스트림을 채널 병합 회로(506)로 라우팅한다. 멀티플렉서(518)는 제1 컨볼루션 회로(502)로부터 출력된 값들(530)의 스트림을 제2 컨볼루션 회로(504)에 대한 입력으로서 선택한다. 멀티플렉서(528)는 출력 값들(428b)의 출력 스트림을 위해 채널 병합기(526)로부터 출력된 값들(534)의 스트림을 선택한다. 멀티플렉서(508)는, 사용되는 경우, 제1 컨볼루션 회로(502)에 대한 입력으로서 버스(232)로부터의 입력 데이터(424)를 선택한다.
이중 컨볼루션 모드는 2개의 컨볼루션 코어 회로들(502, 504) 상에서 동일한 입력 스트림을 동시에 프로세싱하는 컨볼루션 엔진(414)의 구성이다. 컨볼루션 회로들(502, 504)은 상이한 컨볼루션 커널들을 입력 데이터에 적용할 수 있다. 많은 출력 채널들의 계산을 용이하게 하기 위해, 컨볼루션 엔진(414)은 컨볼루션 회로들(502, 504) 사이에 프로세싱 태스크를 분배한다. 예를 들어, 제1 컨볼루션 회로(502)는 출력 채널들의 제1 절반을 프로세싱할 수 있는 한편, 제2 컨볼루션 회로(504)는 출력 채널들의 제2 절반을 프로세싱할 수 있다. 채널 병합 회로(506)는 컨볼루션 회로들(502, 504)로부터의 다수의 채널들의 스트림들을, 서로 인터리빙되는 양측 스트림들 모두로부터의 채널들을 갖는 단일 스트림으로 조합한다.
일부 실시예들에서, 각각의 컨볼루션 회로(502, 504)는 클록당 1 픽셀 값(pixel value per clock, ppc)을 각각 생성하는 2개의 실행 클러스터들을 갖는다. 따라서, 각각의 컨볼루션 회로(502, 504)는 2-ppc를 생성한다. 채널 병합 회로(506)는 컨볼루션 회로들(502, 504)의 결과들을 조합하여 이중 컨볼루션 모드에서 채널 병합 이후에 4-ppc 출력을 생성한다.
도 6b는 일 실시예에 따른 컨볼루션 엔진(414)의 캐스케이드 모드를 도시한 블록도이다. 캐스케이드 모드에서, 컨볼루션 회로들(502, 504)은 연속으로 동작한다. 제1 컨볼루션 회로(502)는 하나 이상의 컨볼루션 커널들을 버스(232)로부터의 입력 데이터(422)에 적용하여 값들(530)의 스트림을 생성한다. 제2 컨볼루션 회로(504)는 값들(530)의 스트림을 수신하고, 하나 이상의 제2 컨볼루션 커널들을 값들(530)에 적용하여 값들(532)의 스트림을 생성한다. 컨볼루션 회로들(502, 504)은 상이한 컨볼루션 커널들을 사용할 수 있다. 채널 병합 회로(506)는 컨볼루션 회로(504)로부터의 값들(532)의 스트림을 통과시킴으로써 출력 값들(428b)의 출력 스트림을 생성한다.
중앙 제어부(320)는 멀티플렉서들(508, 518, 528) 및 디멀티플렉서(503)에 의한 선택을 제어함으로써 컨볼루션 엔진(414)을 캐스케이드 모드로 설정한다. 멀티플렉서(508)는, 사용되는 경우, 제1 컨볼루션 회로(502)에 대한 입력으로서 버스(232)로부터의 입력 데이터(424)를 선택한다. 디멀티플렉서(503)는, 사용되는 경우, 값들(530)의 스트림을 멀티플렉서(518)로 라우팅한다. 멀티플렉서(518)는 컨볼루션 엔진(414)으로부터 출력된 값들(530)의 스트림을 제2 컨볼루션 회로(504)에 대한 입력으로서 선택한다. 멀티플렉서(528)는 출력 값들(428b)의 출력 스트림을 위해 제2 컨볼루션 회로(504)로부터 출력된 값들(532)의 스트림을 선택한다.
캐스케이드 모드에서, 컨볼루션 회로들(502, 504)은 동작들 사이에 메모리 이송을 행하지 않으면서 2개의 컨볼루션 동작들을 연속으로 수행한다. 캐스케이드 내의 제1 컨볼루션 회로(502)는, 예컨대 2개의 실행 클러스터들 중 하나만을 사용함으로써, 1-ppc를 생성한다. 제1 컨볼루션 회로(502)가 2-ppc 출력 스트림을 생성하는 경우, 후속의 제2 컨볼루션 회로(504)는 4-ppc를 2회 프로세싱할 필요가 있을 것이다. 이와 같이, 단일 실행 클러스터가 제1 컨볼루션 회로(502)에서 사용되어 제2 컨볼루션 회로(504)에 입력되는 1-ppc 스트림을 생성한다. 제2 컨볼루션 회로(504)는 제1 컨볼루션 회로(502)의 1-ppc 스트림으로부터 2-ppc 출력 스트림을 생성한다.
도 6c는 일 실시예에 따른 컨볼루션 엔진(414)의 병렬 모드를 도시한 블록도이다. 병렬 모드에서, 컨볼루션 회로들(502, 504)은 2개의 별개의 인터리빙된 출력 스트림들을 생성하기 위해 동시에 2개의 단일 유닛들로서 동작한다. 예를 들어, 이미지는 2개의 수직 스트립들로 분할될 수 있고, 각각의 컨볼루션 회로(502, 504)는 하나의 스트립을 프로세싱한다. 컨볼루션 회로들(502, 504)은 동일한 입력 데이터 또는 상이한 입력 데이터를 프로세싱할 수 있다. 입력 데이터가 동일할 때, 컨볼루션 회로들(502, 504)은 입력 데이터에 상이한 컨볼루션 커널들을 적용할 수 있다. 다른 예에서, 컨볼루션 회로들(502, 504)은 상이한 입력 데이터에 상이한 커널들을 적용한다.
제1 컨볼루션 회로(502)는 버스(232)로부터의 입력 데이터(422)에 하나 이상의 컨볼루션 커널들을 적용하여 값들(530)의 스트림을 생성한다. 제2 컨볼루션 회로(504)는 버스(232)로부터의 입력 데이터(422)에 하나 이상의 제2 컨볼루션 커널들을 적용하여 값들(532)의 스트림을 생성한다. 채널 병합 회로(506)는 값들(530)의 스트림을 통과시킴으로써 출력 값들(428a)의 출력 스트림을 생성하고, 값들(532)의 스트림을 통과시킴으로써 출력 값들(428b)의 출력 스트림을 생성한다. 별개의 출력 스트림들(428a, 428b)은 인터리빙된 방식으로 데이터의 다수의 채널들을 각각 한정할 수 있다. 병렬 모드에서, 컨볼루션 회로들(502, 504)로부터의 출력들은 인터리빙된 채널들의 단일 스트림으로 조합되기보다는 인터리빙된 채널들의 별개의 스트림들에서 유지된다.
중앙 제어부(320)는 멀티플렉서들(508, 518, 528) 및 디멀티플렉서(503)에서의 선택을 제어함으로써 컨볼루션 엔진(414)을 병렬 모드로 설정한다. 멀티플렉서(508)는, 사용되는 경우, 제1 컨볼루션 회로(502)에 대한 입력으로서 버스(232)로부터의 입력 데이터(422)를 선택한다. 디멀티플렉서(503)는, 사용되는 경우, 출력 값들(428a)의 출력 스트림으로서의 출력을 위해 제1 컨볼루션 회로(502)의 출력으로부터의 값들(530)의 스트림을 채널 병합 회로(506)로 라우팅한다. 멀티플렉서(518)는 제2 컨볼루션 회로(504)에 대한 입력으로서 버스(232)로부터의 입력 데이터(422)를 선택한다. 멀티플렉서(528)는 채널 병합 회로(506)의 출력 값들(428b)의 출력 스트림을 위해 제2 컨볼루션 회로(504)로부터 출력된 값들(532)의 스트림을 선택한다. 채널 병합 회로(506)는 또한 값들(530)의 스트림을 출력 값들(428a)의 출력 스트림에 전달한다.
병렬 모드에서, 각각의 컨볼루션 회로(502, 504)는 2개의 실행 클러스터들을 사용하여 2-ppc를 생성할 수 있다. 채널 병합 회로(506)는 제1 컨볼루션 회로(502)로부터의 제1 스트림을 2-ppc로 출력하고, 제2 컨볼루션 회로(504)로부터의 제2 스트림을 2-ppc로 출력한다.
도 7은 일 실시예에 따른, 복수의 모드들에서 컨볼루션 엔진(414)을 동작시키는 방법을 도시한 흐름도이다. 중앙 제어부(320)는 구성 정보를 컨볼루션 엔진(414)으로 전송한다(702). 구성 정보는, 컨볼루션 엔진을 이중 컨볼루션 모드, 캐스케이드 모드, 또는 직렬 모드와 같은 특정 동작 모드에 있게 하는, 컨볼루션 엔진의 컴포넌트들에 대한 파라미터들을 포함할 수 있다.
구성 정보는 각각의 컨볼루션 코어 회로(502, 504)에 입력되는 값들의 스트림을 한정하는 정보를 추가로 포함할 수 있다. 예를 들어, 구성 정보는 컨볼루션 엔진(414)의 컴포넌트들이 직렬 스트림으로부터의 각각의 채널의 픽셀들을 식별할 수 있도록 이미지 크기 및/또는 채널 카운트를 한정할 수 있다.
구성 정보는 필터 요소 값들, 커널 크기, 희소성 값들, 및 스텝 값들과 같은, 각각의 컨볼루션 코어 회로(502, 504)에 의해 사용되는 하나 이상의 컨볼루션 커널들을 한정하는 정보를 추가로 포함할 수 있다. 컨볼루션 커널들을 한정하는 구성 정보는 각각의 컨볼루션 코어 회로(502, 504)에 의해 실행되는 컨볼루션 동작들을 특정한다.
구성 정보를 수신한 후에, 컨볼루션 엔진(414)의 구성은 구성 정보에 따라 업데이트되어(704), 구성 정보에서 설명되는 바와 같은 동작들을 수행한다. 구성을 업데이트하는 것은 선택된 동작 모드에 따라 컨볼루션 엔진 내에서 스트림들을 라우팅하는 것을 포함할 수 있다. 라우팅 제어는, 도 6a 및 도 6c와 관련하여 앞서 논의된 바와 같이, 컨볼루션 엔진(414)의 멀티플렉서들(508, 518, 528)을 사용하여 설정될 수 있다. 구성을 업데이트하는 것은 컨볼루션 회로들(502, 504)에 컨볼루션 커널들을 제공하는 것을 포함할 수 있다. 컨볼루션 회로들(502, 504)은, 또한, 위에서 논의된 바와 같은 동작 모드에 따라 하나 또는 2개의 실행 클러스터들을 사용하도록 구성될 수 있다.
일부 실시예들에서, 구성 명령어들은 채널 병합에 앞서 각각의 컨볼루션 회로(502, 504)에서 컨볼루션 결과들에 대해 수행되는 하나 이상의 심층 학습 동작들을 추가로 정의할 수 있다. 예시적인 동작들은 정규화 교차 상관 계산, 응답 정류, 공간 풀링, 및 로컬 응답 정규화를 포함할 수 있다. 일부 실시예들에서, 채널간 동작들은 컨볼루션 코어 회로들(502, 504)의 사후프로세싱 회로(704)에 의해 수행될 수 있는 한편, 채널별 동작들은 공간 풀링 회로들(514, 524)에 의해 수행된다.
컨볼루션 엔진(414)의 제1 컨볼루션 회로(502)는 하나 이상의 제1 컨볼루션 커널들을 제1 입력 데이터에 적용함으로써 값들의 제1 스트림을 생성한다(706). 컨볼루션 엔진(414)의 제2 컨볼루션 회로(504)는 하나 이상의 제2 컨볼루션 커널들을 제2 입력 데이터에 적용함으로써 값들의 제2 스트림을 생성한다(708). 제1 및 제2 입력 데이터를 생성하는 것은 컨볼루션들을 수행하는 것을 포함할 수 있고, 또한, 컨볼루션 코어 회로(512/522)의 사후프로세싱 회로부, 또는 공간 풀링 회로부(514/524)를 적용하는 것을 포함할 수 있다.
이중 컨볼루션 모드에서, 컨볼루션 회로들(502, 504)에 의해 사용되는 제1 및 제2 입력 데이터는 동일할 수 있고, 제1 및 제2 컨볼루션 커널들은 상이할 수 있다. 캐스케이드 모드에서, 제2 컨볼루션 회로(504)에 의해 사용되는 제2 입력 데이터는 제1 컨볼루션 회로(502)의 출력이고, 제1 및 제2 컨볼루션 커널들은 상이할 수 있다. 병렬 모드에서, 제1 및 제2 입력 데이터는 동일할 수 있고, 제1 및 제2 컨볼루션 커널들은 상이할 수 있다.
채널 병합 회로는 제1 컨볼루션 회로(502)로부터의 값들의 제1 스트림 및 제2 컨볼루션 회로(504)로부터의 값들의 제2 스트림에 기초하여 하나 이상의 출력 스트림들을 생성한다(710). 이중 컨볼루션 모드에서, 채널 병합 회로(710)는 제1 컨볼루션 회로(502)로부터의 인터리빙된 채널 값들의 인터리빙된 제1 스트림과 제2 컨볼루션 회로(504)로부터의 인터리빙된 채널 값들의 제2 스트림을 인터리빙된 방식으로 조합함으로써 출력 스트림을 생성한다. 캐스케이드 모드에서, 채널 병합 회로(710)는 제2 컨볼루션 회로(504)로부터의 인터리빙된 채널 값들의 제2 스트림을 포함하는 출력 스트림을 생성하는데, 여기서 인터리빙된 채널 값들의 제2 스트림은 제2 컨볼루션 회로(504)에서의 인터리빙된 채널 값들의 제1 스트림에 하나 이상의 제2 컨볼루션 커널들을 적용함으로써 도출된다. 직렬 모드에서, 채널 병합 회로(710)는 제1 컨볼루션 회로(502)로부터의 인터리빙된 채널 값들의 제1 스트림을 포함하는 제1 출력 스트림, 및 제2 컨볼루션 회로(504)로부터의 인터리빙된 채널 값들의 제2 스트림을 포함하는 별개의 제2 출력 스트림을 생성한다.
도 7에 도시된 바와 같은 프로세스는 단지 예시적인 것이며, 프로세스에 대해 다양한 변경이 이루어질 수 있다. 예를 들어, 값들의 제1 스트림을 생성하는 것(706) 및 값들의 제2 스트림을 생성하는 것(708)은, 컨볼루션 엔진(414)의 구성 정보 및 동작 모드에 의해 특정된 바와 같이, 동시에 또는 연속으로 수행될 수 있다.
컨볼루션 코어 회로
도 8은 일 실시예에 따른 컨볼루션 코어 회로(800)를 도시한 블록도이다. 컨볼루션 코어 회로(800)는, 도 5에 도시된 바와 같이, 제1 컨볼루션 회로(502)의 컨볼루션 코어 회로(512), 또는 제2 컨볼루션 회로(504)의 컨볼루션 코어 회로(522)의 일례이다. 컨볼루션 코어 회로(800)는 컨볼루션 코어(802) 및 사후프로세싱 회로(804)를 포함한다. 컨볼루션 코어(802)는 입력 데이터(836)를 수신하고, 입력 데이터(836)에 하나 이상의 컨볼루션 커널들(h)을 적용함으로써 컨볼루션 동작을 수행한다. 입력 데이터(836)는 버스(323)로부터의 입력 데이터(422), 다른 컨볼루션 회로의 출력, 또는 일부 다른 소스로부터의 입력 데이터일 수 있고, 앞서 논의된 바와 같은 사전프로세싱 회로(510)에 의해 사전프로세싱될 수 있다. 사후프로세싱 회로(804)는 컨볼루션 코어(802)의 출력들에 대한 사후프로세싱을 수행한다.
컨볼루션 코어 회로(802)는 컨볼루션 프론트엔드(806), 커널 메모리(808), 실행 클러스터(810), 실행 클러스터(812), 및 컨볼루션 백엔드(814)를 포함한다. 컨볼루션 프론트엔드(806)는 실행 클러스터들(810, 812)에 커플링된다. 컨볼루션 프론트엔드(806)는 입력 데이터(836)를 수신하고, 실행 클러스터들(810, 812)에 의한 프로세싱을 위해 입력 데이터(836)를 준비한다. 컨볼루션 프론트엔드(806)는 실행 클러스터들(810, 812)을 통해 컨볼루션 커널 및 입력 데이터를 수반하는 프로세싱 태스크들을 분배한다.
각각의 실행 클러스터(810, 812)는 컨볼루션 프론트엔드 및 커널 메모리(808)에 커플링된다. 각각의 실행 클러스터(810, 812)는 다수의 MAC(multiply-and-accumulate) 유닛들을 포함할 수 있다. 다수의 출력 채널들이 사용되는 경우, 짝수 인덱스들을 갖는 출력 채널들이 하나의 실행 클러스터에 의해 프로세싱될 수 있는 한편, 짝수 인덱스들을 갖는 출력 채널들은 다른 실행 클러스터에 의해 프로세싱될 수 있다. 각각의 실행 클러스터(810, 812)는 1-ppc를 생성할 수 있고, 따라서, 컨볼루션 코어(802)는 전체적으로 2-ppc를 생성할 수 있다. 실행 클러스터(810)는 짝수 인덱스 출력 채널들을 포함하는 짝수 데이터 값들(842)의 스트림 및 홀수 인덱스 출력 채널들을 포함하는 홀수 데이터 값들(844)의 스트림을 생성한다.
커널 메모리(808)는 실행 클러스터들(810, 812)에 제공되는 하나 이상의 컨볼루션 커널들(h)을 저장한다. 일부 실시예들에서, 중앙 제어부(320)는 컨볼루션 동작을 제어하기 위해 하나 이상의 컨볼루션 커널들(h)을 커널 메모리(808)에 제공한다. 각각의 실행 클러스터(810, 812)는 컨볼루션 프론트엔드(806)에 의해 준비된 바와 같은 입력 데이터(836)에 커널 메모리(808)로부터의 컨볼루션 커널을 적용한다. 실행 클러스터들(810, 812)은 동시에 실행되어, 예를 들어, 2-ppc로 출력 값들을 생성할 수 있다. 일부 실시예들에서, 단일 실행 클러스터(810 또는 812)만이, 예를 들어 1-ppc로, 출력 값들을 생성하도록 인에이블된다.
일례에서, 실행 클러스터들(810, 812)은 입력 데이터의 상이한 부분들에 일련의 컨볼루션 커널들을 적용하여, 짝수 인덱스 출력 채널들을 포함하는 짝수 데이터 값들(842)의 스트림 및 홀수 인덱스 출력 채널들을 포함하는 홀수 데이터 값들(844)의 스트림을 생성한다. 짝수 데이터 값들(842) 및 홀수 데이터 값들(844)은 다중 채널 데이터를 표현하는데, 이들은 로컬 응답 정규화 및 정규화 교차 상관과 같은 채널간 동작들로 사후프로세싱 파이프라인들에서 개별적으로 프로세싱된다.
일부 실시예들에서, 컨볼루션 프론트엔드(806)는 커널 메모리(808)에 저장되고 실행 클러스터들(810, 812)에 의해 프로세싱되는 컨볼루션 커널에 대한 커널 통계치(840)를 생성한다. 커널 통계치는 컨볼루션 커널의 속성들로부터 도출될 수 있다. 커널 통계치(840)는 ∑ H 및 ∑ H2를 포함할 수 있으며, 여기서 H는 컨볼루션 커널의 커널 데이터이다. 컨볼루션 코어(802)는 커널 통계치(840)를 사후프로세싱 회로(804)로 전송한다.
컨볼루션 백엔드(814)는 실행 클러스터들(810, 812)의 출력들에 커플링된다. 컨볼루션 백엔드(814)는 각각의 실행 클러스터로부터의 출력 값들의 추가 프로세싱을 수행한다. 그러한 동작들은 큰 비트 크기 데이터에 대한 다중-사이클 누산(multi-cycle accumulation)을 포함할 수 있지만, 이로 제한되지 않는다.
일부 실시예들에서, 컨볼루션 백엔드(814) 또는 컨볼루션 코어(802)의 일부 다른 컴포넌트는 입력 데이터(836)에 기초하여 로컬 통계치를 생성한다. 로컬 통계치는 ∑ I, ∑ I2, 및 ∑ I* H를 포함할 수 있으며, 여기서 I는 입력 데이터(836)이고, H는 입력 데이터(836)에 적용되는 컨볼루션 커널이다. 일부 실시예들에서, 로컬 통계치는 짝수 데이터 값들(842)의 스트림 및 홀수 데이터 값들(844)의 스트림을 통해 사후프로세싱 회로(804)로 송신된다. 예를 들어, 로컬 통계치는 다중 채널 스트림들의 마지막 활성 채널들과 같은, 스트림들(842, 844)의 보조 채널들일 수 있다. 다른 실시예들에서, 로컬 통계치는 커널 통계치(840)를 갖는 스트림으로 또는 별개의 스트림으로 송신될 수 있다.
따라서, 컨볼루션 코어(802)는 짝수 데이터 값들(842)의 스트림, 홀수 데이터 값들(844)의 스트림, 커널 통계치(840), 및 로컬 통계치를 생성한다. 이러한 값들은 추가 프로세싱을 위해 사후프로세싱 회로(804)에 제공된다. 컨볼루션 코어(802)의 예시적인 회로부가 도 10과 관련하여 아래에서 더 상세히 논의된다.
사후프로세싱 회로(804)는 각각의 출력 스트림들(842, 844)을 처리하기 위해 각각의 실행 클러스터(810, 812)에 대한 프로세싱 파이프라인을 포함한다. 실행 클러스터(810)로부터의 스트림(842)을 프로세싱하기 위해, 사후프로세싱 회로(804)는 다중 채널 정규화 교차 상관(NCC) 유닛(816), 응답 정류기 유닛(818), 채널간 로컬 응답 정규화(LRN) 유닛(820), 및 출력 생성 유닛(822)을 포함한다. 실행 클러스터(812)로부터의 스트림(844)을 프로세싱하기 위해, 사후프로세싱 회로(804)는 다중 채널 NCC 유닛(824), 응답 정류기 유닛(826), 채널간 LRN 유닛(828), 및 출력 생성 유닛(830)을 포함한다. 사후프로세싱 회로(804)는 피크 파인더(843), 디멀티플렉서(832), 및 코어 병합기(846)를 추가로 포함할 수 있다.
다중 채널 NCC 유닛(816)은 짝수 데이터 값들(842)의 스트림에 대한 NCC 스코어들 및 정규화 커널 통계치를 계산한다. 다중 채널 NCC 유닛(816)은 컨볼루션 코어(802)에 커플링되어, 짝수 데이터 값들(842), 로컬 통계치, 및 커널 통계치(840)의 스트림을 수신한다. 다중 채널 NCC 유닛(816)은 짝수 데이터 값들(842), 로컬 통계치, 및 커널 통계치(840)에 기초하여 각각의 컨볼루션 커널에 대한 NCC 스코어를 결정한다.
다중 채널 NCC 유닛(816)은 각각의 컨볼루션 커널에 대한 NCC 스코어를 계산할 수 있다. NCC 스코어들은 로컬 통계치에 의해 한정되는 바와 같은 입력 분산에 의해 그리고 커널 통계치에 의해 한정되는 바와 같은 커널의 분산에 의해 정규화된다. NCC 스코어들은 2개의 프레임들 사이의 최상의 대응성을 찾는 데 사용될 수 있다.
각각의 컨볼루션 커널에 대해, NCC 스코어는 수학식 1에 의해 정의될 수 있다:
Figure pct00001
(1)
여기서, I는 입력 데이터이고, H는 커널 데이터이고, MI 및 MH는 I 및 H의 평균이고, σI 및 σH는 I 및 H의 표준 편차이고, N은 컨볼루션 커널의 크기이다. 0으로 나누는 것을 회피하고 양자화 에러를 감소시키기 위해 추가의 스케일 및 오프셋 인자들이 적용될 수 있다.
다중 채널 NCC 유닛(816)은 또한 정규화 커널 통계치를 계산할 수 있다. 예를 들어, 다중 채널 NCC 유닛(816)은 수학식 2에 의해 정의된 바와 같이 커널 통계치를 계산한다:
Figure pct00002
(2)
여기서 N은 컨볼루션 커널의 크기이고, H는 커널 데이터이다. 수학식 2는 수학식 1의 분모의 일부를 형성하고, 따라서, 커널 통계치는 NCC 스코어들을 계산하는 과정에서 계산될 수 있다.
정규화 커널 통계치는 스케일 인자를 사용하여 프로세싱된 커널 통계치의 스케일링된 버전이다. 스케일 인자는 수학식 3에 의해 정의될 수 있다:
Figure pct00003
(3)
여기서 N은 컨볼루션 커널의 크기이다. 스케일 인자는 커널 통계치를 커널 크기에 독립적이도록 정규화한다. 다중 채널 NCC 유닛(816)은 정규화 커널 통계치(852) 및/또는 NCC 스코어들을 피크 파인더(834)로 전송한다.
응답 정류기 유닛(818)은 다중 채널 NCC 유닛(816)에 커플링된다. 응답 정류기 유닛(818)은 데이터 값들(842)의 스트림을 수신하고, 데이터 값들(842)에 대한 비선형 변환을 수행한다. 비-선형 변환은 설명의 하이 레벨 특징부들의 심층 기계 학습을 용이하게 한다. 응답 정류기 유닛에 입력되는 데이터 값들(842)의 스트림은 다중 채널 NCC 유닛(816)으로부터 송신될 수 있다. 일부 실시예들에서, 다중 채널 NCC 유닛(816)은 사후프로세싱 회로(804)로부터 생략되고, 응답 정류기 유닛(818)은 실행 클러스터로부터 데이터 값들(842)의 스트림을 수신한다.
도 9는 일부 실시예에 따른, 응답 정류기 유닛(818)에 의해 적용되는 비선형 변환의 플롯이다. 응답 정류기 유닛(818)은 입력으로서 값들(842)의 스트림을 수신하고, 오프셋 파라미터(912)를 값들(842)에 적용한다. 오프셋 파라미터(912)는 심층 학습 아키텍처들에서 컨볼루션 층들 이후에 적용되는 바이어스를 모델링하도록 선택될 수 있다. 오프셋을 적용한 후에, 응답 정류기 유닛(818)은 구성가능한 스케일링 인자(904)에 기초하여 네거티브 입력 값들에 스케일링을 적용한다. 응답 정류기 유닛(818)은 정류된 데이터 값들의 스트림을 출력한다. 일부 실시예들에서, 응답 정류기 유닛(818)은 네거티브 값들을 0으로 클리핑한다. 다른 실시예들에서, 응답 정류기 유닛(818)은 네거티브 값들을 포지티브 값들로 변환한다.
다시 도 8을 참조하면, 응답 정류기 유닛(818)은 상이한 채널들에 대해 상이한 오프셋 및 스케일링 파라미터들을 적용할 수 있다. 응답 정류기 유닛(818)의 파라미터들은 중앙 제어부(320)에 의해 특정될 수 있다. 일부 실시예들에서, 중앙 제어부(320)는 응답 정류기 유닛(818)을 비활성화시킬 수 있다. 여기서, 응답 정류기 유닛(818)은 사후프로세싱 파이프라인에서 값들의 스트림에 대한 바이패스로서 동작할 수 있다. 일부 실시예들에서, 응답 정류기 유닛(818)은 사후프로세싱 회로(804)로부터 생략된다.
채널간 LRN 유닛(820)은 응답 정류기 유닛(818)에 커플링되고, 응답 정류기 유닛(818)의 출력에 대해 채널간 LRN을 수행한다. 특히, 채널간 LRN 유닛(820)은 데이터 값들(842) 및 로컬 통계치의 스트림을 수신하고, 로컬 응답 정규화를 수행하여 데이터 값들의 정규화 컨볼루션 출력 스트림을 생성한다. 채널간 LRN 유닛(820)은 심층 학습 아키텍처에서 사용되는 프로세싱을 용이하게 한다. 채널간 LRN 유닛(1200)은 수학식 4에 의해 정의된 동작의 고정 포인트 근사화를 수행할 수 있다:
Figure pct00004
(4)
여기서, x i 는 픽셀 인덱스 값이고, α는 정규화의 강도이고, i'은 x i 주위의 로컬 윈도우 내측의 픽셀들의 인덱스이고, N은 윈도우 내의 픽셀들의 수이다. 로컬 윈도우에 대해서는 채널간에 지원되며, 따라서, 평탄화된 포맷의 직사각형 영역으로서 표현된다. 채널간 LRN 유닛(820)은 인터리빙된 채널들의 연속 스트림들을 레버리징하기 위해 사후프로세싱 스테이지에서 채널간 LRN을 수행하는 한편, 채널별 정규화는, 예컨대 공간 풀링 회로(514)에 의해, 개별적으로 처리된다.
출력 생성 유닛(822)은 채널간 LRN 유닛(820)에 커플링된다. 출력 생성 유닛(822)은 채널간 LRN 유닛(820)의 출력에 스케일링, 오프셋 및 시프트를 적용한다.
홀수 값들(844)의 스트림에 대한 사후프로세싱 파이프라인은 짝수 값들(842)의 스트림에 대한 프로세싱 파이프라인과 실질적으로 동일하게 동작할 수 있고, 따라서, 이러한 회로들에 대한 상세한 설명은 간결함을 위해 본 명세서에서 생략된다.
코어 병합기(846)는 (예컨대, 사후프로세싱 후에) 짝수 및 홀수 채널들을 갖는 짝수 및 홀수 스트림들(842, 844)을, 인터리빙된 방식으로 짝수 및 홀수 채널들을 포함하는 데이터 값들(848)의 스트림으로 조합한다. 코어 병합기(847)는 출력 생성 유닛(822) 및 출력 생성 유닛(830)에 커플링된다.
사후프로세싱 회로(804)는 디멀티플렉서(832)를 추가로 포함할 수 있다. 디멀티플렉서(832)는 출력 생성 유닛(830)에 커플링되고, 출력 생성 유닛(830)으로부터의 값들의 스트림을 (출력 스트림(848)에의 조합을 위해) 코어 병합기(846)에 또는 출력 스트림(850)으로서 선택적으로 제공한다. 값들(848)의 스트림은 실행 클러스터(810, 812) 양측 모두로부터의 픽셀 값들을 조합하고, 따라서, 코어 병합기(846)는, 예를 들어, 2-ppc로 출력을 생성한다. 값들(850)의 스트림은 실행 클러스터(812)로부터의 값들만을 사용하여 생성되고, 따라서, 예를 들어, 1-ppc로 생성될 수 있다. 도 6a 내지 도 6c와 관련하여 위에서 논의된 바와 같이, 컨볼루션 코어 회로(800)는 컨볼루션 엔진(414)의 상이한 동작 모드들에서 1-ppc 또는 2-ppc를 생성하도록 설정될 수 있다.
피크 파인더(834)는 제1 사후프로세싱 파이프라인의 다중 채널 NCC 유닛(816) 및 출력 생성 유닛(822)에 커플링되고, 제2 사후프로세싱 파이프라인의 다중 채널 NCC 유닛(824) 및 출력 생성 유닛(830)에 커플링된다. 일부 실시예들에서, 정규화 커널 통계치는 템플릿 매칭 결과의 신뢰성에 대한 신뢰도 측정치로서 사용될 수 있다. 피크 파인더(834)는 정규화 커널 통계치(852) 및 컨볼루션 결과들을 수신하고, NCC 스코어들에 기초하여 템플릿에 대한 최상 매칭 위치를 제공하는 위치를 결정한다. 피크 파인더(843)는 사전결정된 기준에 기초하여 위치를 결정한다. 예를 들어, 피크 파인더(843)는 선택된 채널에 대한 최소 또는 최대 픽셀 위치를 찾을 수 있다. 고차원 특징부 벡터들의 리스트가 입력 데이터로서 주어지는 경우, 피크 파인더는 컨볼루션 코어에 의해 평가되는 거리 메트릭에 기초하여 원점에 가장 가까운 벡터를 찾을 수 있다.
일부 실시예들에서, 피크 파인더(834)는 출력 생성 유닛들(822, 830)로부터의 데이터의 스트림들을 모니터링한다. 선택된 채널에 대해, 피크 파인더(834)는 스트림들 내의 채널의 각각의 값에 액세스하여, 최소 또는 최대 값을 갖는 위치를 추적한다. 선택된 출력 채널은 NCC 스코어들 또는 임의의 다른 컨볼루션 결과들을 포함할 수 있다. 채널이 NCC 스코어들을 포함하는 경우(예컨대, 다중 채널 NCC 유닛(816)이 선택된 채널에 대해 인에이블됨), 피크 파인더(834)는 피크 위치 및 피크 NCC 스코어를 갖는 정규화 커널 통계치를 출력한다. NCC가 인에이블되지 않은 경우, 피크 파인더(834)는 피크 위치 및 피크 값을 출력한다.
일부 실시예들에서, 중앙 제어부(320)는 컨볼루션 코어 회로(800)의 컨볼루션 코어(802) 및 사후프로세싱 회로(804)로 구성 정보를 전송한다. 구성 명령어들은 각각의 사후프로세싱 회로(804)의 각각의 파이프라인에 대한 사후프로세싱 명령어들을 포함할 수 있고, 컨볼루션 코어(802)로부터의 컨볼루션 결과들에 적용될 사후프로세싱을 정의할 수 있다.
사후프로세싱 명령어들은 다중 채널 NCC 유닛들, 응답 정류기 유닛들, 채널간 LRN 유닛들, 또는 피크 파인더가 인에이블되는지 아니면 디스에이블되는지를 정의한다. 일부 실시예들에서, 사후프로세싱 회로(804)는 사후프로세싱 명령어들에 의해 특정된 바와 같은 복수의 모드들에서 동작한다. NCC 모드에서, 다중 채널 NCC 유닛들은 인에이블되고 채널간 LRN 유닛들은 디스에이블된다. LRN 모드에서, 다중 채널 NCC 유닛들은 디스에이블되고 채널간 LRN 유닛들은 인에이블된다. 혼합된 LRN/NCC 모드에서, 다중 채널 NCC 유닛들 및 채널간 LRN 유닛들이 인에이블된다. 통과 모드에서, 다중 채널 NCC 유닛들 및 채널간 LRN 유닛들이 디스에이블된다. 사후프로세싱 파이프라인 내의 디스에이블된 컴포넌트는, 스트림을 프로세싱함이 없이 그의 입력 데이터 스트림을 사후프로세싱 파이프라인 내의 다음 컴포넌트로 전달할 수 있다.
도 10은 일 실시예에 따른 컨볼루션 코어(802)를 도시한 블록도이다. 위에서 논의된 바와 같이, 컨볼루션 코어(802)는 컨볼루션 프론트엔드(806), 실행 클러스터들(810, 812), 및 컨볼루션 백엔드(814)와 같은 회로부를 포함한다.
컨볼루션 프론트엔드(806)는 입력 버퍼(1002), 데이터패스 라우터(1006), 시퀀서(1018), 및 커널 통계 유닛(1024)을 포함할 수 있다. 입력 버퍼(1002)는 입력 데이터(836)가 컨볼루션 프론트엔드(806)로 스트리밍됨에 따라 그 입력 데이터를 저장한다. 입력 데이터(836)는 인터리빙된 방식으로 다수의 입력 채널들의 데이터를 갖는 값들의 스트림일 수 있다. 입력 데이터(836)는 픽셀 데이터, HOG 데이터, 컨볼루션 회로(800)의 이전 사이클의 출력, 다른 컨볼루션 회로(800)의 출력, 또는 디바이스(100)의 다른 컴포넌트들로부터 수신된 다른 데이터일 수 있다.
데이터패스 라우터(1006)는, 스캔 시퀀스에서의 입력 버퍼(1002)의 사전결정된 위치들에서의 데이터(1004)의 세트를 판독하고, 컨볼루션된 값들의 계산을 위해 판독 데이터(1008)를 실행 클러스터(810 또는 812)로 전송하는 회로이다. 데이터패스 라우터(1006)는 컨볼루션 커널을 사용한 동시 프로세싱을 위해 입력 데이터(836)의 상이한 부분들을 실행 클러스터(810, 812)로 전송할 수 있다. 본 명세서에 기술된 스캔 시퀀스는 입력 데이터의 서브세트를 프로세싱하는 동작을 지칭한다. 데이터패스 라우터(1006)는 컨볼루션 엔진(414)의 프로세싱 사이클 내에서 다수의 스캔 시퀀스들에 대해 데이터의 판독 및 전송을 수행하여, 실행 클러스터들(810, 812)을 픽셀 값들로 채울 수 있다. 일 실시예에서, 데이터패스 라우터(1006)는 희소성 값들에 따라 다른 이웃 픽셀들을 스킵하면서 중심 픽셀에 이웃한 픽셀들의 서브세트에 대한 픽셀 값들 및 중심 픽셀의 픽셀 값들을 선택적으로 판독한다. 또한, 스캔 시퀀스 내에서 프로세싱될 중심 픽셀들은 스텝 값들에 의해 정의되는 다수의 픽셀들에 의해 분리될 수 있다. 후속 스캔에서, 동일하거나 상이한 수의 픽셀들에 의해 분리된 중심 픽셀들의 새로운 세트가 프로세싱될 수 있다.
커널 메모리(808)는 커널 정보를 저장하는 회로이다. 커널 정보는 컨볼루션 커널들에서의 필터 요소들에 대한 값들, 희소성 값들, 스텝 값들, 커널 크기 등을 포함한다. 커널 정보(1022)는 실행 클러스터(810)로 전송되어, 실행 클러스터(810)의 승산기 회로들(FE0 내지 FEN) 내의 레지스터를 채운다. 커널 정보(1022)는, 또한, 실행 클러스터(812)로 전송되어, 실행 클러스터(812)의 승산기 회로들(FE0 내지 FEN) 내의 레지스터를 채운다. 커널 메모리(808)는 픽셀 데이터의 상이한 채널들과의 컨볼루션을 수행하기 위한 그리고/또는 픽셀 데이터의 동일한 채널과의 컨볼루션을 수행하기 위한 복수의 컨볼루션 커널들을 저장할 수 있다.
실행 클러스터들(810, 812)은 계산 동작들을 수행하는 프로그래밍가능 회로들이다. 이를 위해, 실행 클러스터들(810, 812)은 승산기 회로들(FE0 내지 FEN), 압축기(1010) 및 다중-사이클 누산기(1014)를 포함할 수 있다. 승산기 회로들(FE0 내지 FEN) 각각은 판독 데이터(1008) 내의 픽셀 값 및 커널 메모리(808) 내의 대응하는 필터 요소 값을 저장할 수 있다. 픽셀 값 및 대응하는 필터 요소 값은 승산기 회로에서 승산되어 승산된 값(1009)을 생성한다. 일부 실시예들에서, 압축기(1010)는 승산된 값들(1009)을 수신하고, 승산된 값들(1009)의 서브세트들을 누산하여 압축된 값들(1012)을 생성한다. 다른 실시예들에서, 승산된 값들(1009)의 서브세트들을 누산하는 대신, 압축기(1010)는 승산된 값들(1009)의 각각의 서브세트로부터 (i) 최소 값, (ii) 최대 값, 또는 (iii) 중간 값을 선택할 수 있다. 다중-사이클 누산기(1014)는 압축된 값들(1012)을 수신하고, 컨볼루션 코어(802)의 다수의 프로세싱 사이클들에 걸쳐서 생성된 압축된 값들(1012)에 대해 누산(또는 최소 값, 최대 값 또는 중간 값의 선택)을 수행한다.
컨볼루션 프론트엔드(806)로 되돌아가면, 시퀀서(1018)는 다수의 동작 사이클들을 수행하기 위해 컨볼루션 코어(802)의 다른 컴포넌트들의 동작들을 제어한다. 시퀀서(1018)는 실행 클러스터들(810, 812) 사이에 프로세싱 태스크들을 효율적으로 분산시킬 수 있다. 위에서 논의된 바와 같이, 실행 클러스터들(810, 812)은 입력 데이터의 상이한 부분들에 일련의 컨볼루션 커널들을 적용하여, 짝수 인덱스 출력 채널들을 포함하는 짝수 데이터 값들(842)의 스트림 및 홀수 인덱스 출력 채널들을 포함하는 홀수 데이터 값들(844)의 스트림을 생성할 수 있다. 예를 들어, 커널 메모리(808)는 승산기 회로들(FE0 내지 FEN)에 저장된 픽셀 데이터의 각각의 세트에 컨볼루션 커널들의 시퀀스의 필터 요소들을 제공한다. 각각의 컨볼루션 커널은 짝수 데이터 값들(842) 및 홀수 데이터 값들(844)의 상이한 출력 채널을 생성한다.
시퀀서(1018)의 다른 예시적인 동작에서, 입력 데이터의 크기 및/또는 컨볼루션 커널들의 개수 또는 크기는 실행 클러스터의 단일 프로세싱 사이클에서 모든 계산을 수행하기에는 너무 클 수 있다. 시퀀서(1018)는 짝수 출력 채널들과 홀수 출력 채널들 사이의 계산 동작을 분할하여, 짝수 채널들에 대한 프로세싱 태스크들을 실행 클러스터(810)로 그리고 홀수 채널들에 대한 프로세싱 태스크들을 실행 클러스터(812)로 분배한다.
일부 실시예들에서, 입력 데이터의 크기 및/또는 컨볼루션 커널들의 개수 또는 크기는 실행 코어들 양측 모두를 사용하여 컨볼루션 코어(802)의 단일 프로세싱 사이클에서 모든 계산을 수행하기에는 너무 클 수 있다. 그러한 경우에, 시퀀서(1018)는 계산 동작들을 다수의 배치(batch)들로 분배하고, 단일 사이클에서 입력 데이터의 서브세트 또는 컨볼루션 커널들의 서브세트에 기초하여 계산을 수행한다. 각각의 사이클에서의 계산된 결과들은 다수의 사이클들에 걸쳐서 출력 값들(1013)을 생성하도록 다중 사이클 누산기(1014)에 의해 프로세싱된다. 다중-사이클 동작을 수행하도록 다른 컴포넌트들을 구성하기 위해, 시퀀서(1018)는 다중-사이클 제어 신호들(1019)을 다른 컴포넌트들로 전송한다.
컨볼루션 백엔드(814)는 출력 버퍼(1024), 대량 데이터 핸들러(1028), 및 출력 버퍼(1030), 및 대량 데이터 핸들러(1032)를 포함한다. 출력 버퍼(1024)는 그의 지정된 위치들에 출력 값들(1013)을 저장하는 회로이다. 일 실시예에서, 다수의 출력 채널들에 대한 일련의 출력 값들이 출력 버퍼(1024)에서 인터리빙된다. 실행 클러스터(810)의 출력 값들(1015)이 컨볼루션 프론트엔드(806)에서 입력 데이터(836)로서 다시 피드백되는 동작들에서, 출력 버퍼(1024) 내의 데이터는 컨볼루션 동작의 다음 사이클을 위해 입력 버퍼(1002)에 복사될 수 있다. 출력 버퍼(1024)는 실행 클러스터(810)의 출력 값들(1013)을 처리하고, 출력 버퍼(1030)는 실행 클러스터(812)의 출력 값들(1013)을 처리한다.
대량 데이터 핸들러(1032)는 출력 버퍼(1024)에 저장된 출력 값들의 추가 프로세싱을 수행하는 회로이다. 예를 들어, 컨볼루션 코어(802)는 8- 비트 또는 16-비트 정밀도 중 어느 하나와 같은 상이한 비트 크기들을 갖는 입력 데이터 및 컨볼루션 커널들을 프로세싱할 수 있다. 입력 데이터 또는 컨볼루션 커널 중 어느 하나가 16-비트 정밀도를 가질 때, 클록 사이클들의 수의 2배가 각각의 출력 픽셀에 대해 사용된다. 입력 데이터 및 컨볼루션 커널 양측 모두가 16-비트 정밀도를 가질 때, 4배 더 많은 클록 사이클들이 사용된다. 컨볼루션 백엔드(814)는 다수의 클록 사이클들로부터의 8-비트 픽셀 데이터 컨볼루션의 결과들을 16-비트 정밀도를 갖는 데이터로 병합할 수 있다. 대량 데이터 핸들러(1032)는 실행 클러스터(812)로부터 출력 버퍼(1024)에 저장된 출력 값들에 대해 유사한 프로세싱을 수행할 수 있다. 짝수 데이터 값들(842)의 스트림은 대량 데이터 핸들러(1028)로부터 출력되고, 홀수 데이터 값들(844)의 스트림은 대량 데이터 핸들러(1032)로부터 출력된다. 일부 실시예들에서, 대량 데이터 핸들러들(1028, 1032)은 컨볼루션 백엔드(814)로부터 생략된다. 짝수 및 홀수 데이터 값들(842, 844)의 스트림들은 출력 버퍼들(1024, 1030)로부터 각각 출력된다. 더 작은 데이터 크기들은 기계 추론 태스크들, 또는 더 낮은 정밀도 데이터가 사용될 수 있는 다른 태스크들에 대해 더 빠른 프로세싱을 지원할 수 있다. 대조적으로, 더 큰 데이터 크기들은 기계 트레이닝 또는 더 높은 정밀도 태스크들을 위해 사용될 수 있다.
컨볼루션 코어(802) 내의 컴포넌트들(뿐만 아니라 컨볼루션 엔진(414)의 다른 컴포넌트들)은 중앙 제어부(320)로부터 구성 정보를 수신함으로써 구성 기간 동안 구성될 수 있다. 구성 정보에서 지시되는 바와 같은 구성가능 파라미터들 및 모드들은 희소성 값들, 스텝 값들, 픽셀 데이터 값들과 필터 요소들 사이의 맵핑, 압축기(1010)에서 수행될 동작들의 타입(예컨대, 누산, 최소, 최대 또는 중간), 입력 데이터 또는 출력 값들의 채널들의 수, 및 사후프로세싱 회로(804)에서 수행될 사후프로세싱 동작들의 선택을 포함할 수 있지만, 이들로 제한되지 않는다.
도 10에서의 컨볼루션 코어(802)의 구조는 단지 예시적인 것이다. 예를 들어, 다중 사이클 누산기(1014)는 단일 사이클 동작만이 컨볼루션 엔진에서 수행되도록 생략될 수 있다.
도 11a는 일 실시예에 따른, 다중 평면 포맷으로 컨볼루션 코어 회로(800)의 입력들 및 출력들을 도시한 개념도이다. 컨볼루션 코어 회로(800)는 다중 채널 입력 데이터(1102)에 대해 컨볼루션을 수행하고, 다중 채널 출력 데이터(1110)를 생성한다. 입력 채널들과 출력 채널들의 수는 상이할 수 있다. 도 11a에 도시된 다중 평면 포맷은 각각의 입력 및 출력 채널을 개별 이미지 평면으로서 표현한다. 다중 채널 입력 데이터(1102)는 3개의 입력 채널들(1104, 1106, 1108)에 대한 픽셀 값들을 갖는다. 각각의 입력 채널(1104, 1106, 1108)은 하나 이상의 커널들로 프로세싱될 수 있다. 예를 들어, 도 11a에 도시된 바와 같이, 4개의 컨볼루션 커널들, 즉 kernel0 내지 kernel3을 채널(1106)에 적용하는 것은 4개의 출력 채널들(1112, 1114, 1116, 1118)을 포함하는 다중 채널 출력 데이터(1110)를 생성한다. 동일한 4개의 컨볼루션 커널들 kernel0 내지 kernel3이 (예컨대, 희소성 커널을 사용하여) 채널 단위로 입력 채널들1104, 1106, 1108) 각각에 적용되는 경우, 다중 채널 출력은 12개의 전체 출력 채널들에 대해 각각의 프로세싱된 입력 채널마다 4개의 채널들을 포함할 것이다. 상이한 컨볼루션 커널이 각각의 별개의 출력 채널을 생성하는 데 사용될 수 있다. 컨볼루션 커널의 크기, 희소성 값들 및 스텝 값들은 상이한 응용들에 대해 상이한 타입들의 컨볼루션들을 허용하도록 유연할 수 있다.
도 11b는 일 실시예에 따른, 평탄화된 포맷으로 컨볼루션 코어 회로(800)의 입력들 및 출력들을 도시한 개념도이다. 다중 채널 입력 데이터(1102) 및 다중 채널 출력 데이터(1110)는 인터리빙된 방식으로 다수의 채널들의 스트림들에 의해 각각 한정되는데, 여기서 각각의 채널의 대응하는 픽셀 값들(도 11b에서 상이하게 해칭된 패턴들의 박스들에 의해 식별됨)이 스트림 내에서 서로 인접하고, 그 뒤에 평탄화된 포맷에 의해 도시된 바와 같은 래스터 방식으로, 다음 픽셀의 각각의 채널의 대응하는 픽셀 값들이 이어지고, 등등이 된다. 평탄화된 포맷은 인터리빙된 채널들의 단일 이미지 평면으로서 표현되는 다수의 인터리빙된 채널들로부터의 이미지들을 포함한다.
다중 채널 입력 데이터(1102)는 상이한 채널들로부터의 상관된 픽셀 값들이 평탄화된 포맷으로 서로 인접한 스트림에 의해 한정된다. 예를 들어, 제1 채널 픽셀(1124), 제2 채널 픽셀(1126), 및 제3 채널 픽셀(1128)은 다중 채널 입력 데이터(1102)에 의해 한정된 입력 이미지의 제1 (0, 0) 픽셀을 표현한다. 다중 채널 입력 데이터(1102)의 다음 픽셀 (0, 1)에 대한 픽셀 값들은 픽셀들(1124, 1126, 1128)을 따른다. 다음 픽셀 (0, 1)은 제1 채널 픽셀(1130), 제2 채널 픽셀(132), 및 제3 채널 픽셀(1134)을 포함한다. 제1 행(row) (0) 내의 후속 픽셀들은 그에 따라 (0, 1) 픽셀을 따를 수 있다. 후속 행 (1)에 대한 픽셀 값들은 제1 행에 대한 픽셀 값들을 따를 수 있다. 예를 들어, 제2 행 내의 제1 픽셀 (1, 0)은 제1 채널 픽셀(1136), 그 뒤의 제2 채널 픽셀(1138), 및 그 뒤의 제3 채널 픽셀(1140)을 포함한다.
일례에서, 다중 채널 입력 데이터(1102)의 입력 채널들은 RGB 컬러 채널들을 포함한다. 다른 예에서, 다중 채널 입력 데이터(1102)는 YCbCr 컬러 채널들을 포함할 수 있다. 다른 예에서, 다중 채널 입력 데이터(1102)는 컨볼루션 커널들로 도출된 컨볼루션 결과들의 출력 채널들을 포함할 수 있다.
다중 채널 출력 데이터(1110)는 컨볼루션 커널(1150)과 같은 컨볼루션 커널들을 적용함으로써 다중 채널 입력 데이터(1102)로부터 도출된다. 다중 채널 출력 데이터(1100)는, 평탄화된 포맷에 의해 도시된 바와 같이, 스트림 내의 서로 인접한 상이한 출력 채널들로부터의 상관 픽셀 값들의 스트림을 포함한다. 예를 들어, 출력 채널 픽셀들(1142, 1144, 1146, 1148)은 출력 데이터(1110)의 (0, 0) 픽셀과 대응한다. 출력 채널 픽셀들(1142, 1144, 1146, 1148)은 도 11a에 도시된 바와 같은 출력 채널들(1112, 1114, 1116, 1118)에 각각 속한다. 이와 같이, 직렬 스트림은 래스터 방식으로 출력 데이터(1110)의 인터리빙된 채널들을 한정할 수 있다.
컨볼루션 엔진(414)이 캐스케이드 모드에서 동작할 때, 컨볼루션 코어 회로(800)는, 도 6b와 관련하여 위에서 논의된 바와 같이, 입력으로서 다른 컨볼루션 코어 회로(800)의 출력을 사용한다. 컨볼루션 코어 회로(800)의 다중 채널 입력 데이터(1102) 및 다중 채널 출력 데이터(1110)는 컨볼루션 코어 회로(800)의 출력 데이터를 다른 컨볼루션 코어 회로(800)의 입력 데이터로서 사용하는 모드들을 비롯한 다수의 동작 모드들을 가능하게 하는 공통 인터리빙된 포맷을 갖는다.
채널별 공간 풀링 및 정규화
도 12는 일 실시예에 따른 공간 풀링 회로(1200)를 도시한 블록도이다. 공간 풀링 회로(1200)는 다수의 인터리빙된 채널들을 갖는 스트림에 대한 채널별 공간 풀링 또는 정규화 동작들을 수행하고, 출력 스트림, 및 또한 다수의 인터리빙된 채널들을 생성한다. 도 5와 관련하여 위에서 논의된 바와 같이, 컨볼루션 회로들(502, 504)은 개개의 컨볼루션 코어 회로(512, 522)의 출력 스트림을 프로세싱하기 위해 공간 풀링 회로(514) 및 공간 풀링 회로(524)를 각각 포함한다. 공간 풀링 회로(1200)는 제1 컨볼루션 회로(502)의 공간 풀링 회로(512), 또는 제2 컨볼루션 회로(504)의 공간 풀링 회로(524)의 일 실시예이다. 중앙 제어부(320)로부터의 명령어들에 따르면, 공간 풀링 회로(1200)는 입력 인터리빙된 채널들 중 일부 또는 전부에 대해 채널별 공간 풀링 및/또는 채널별 로컬 응답 정규화를 수행한다.
공간 풀링 회로(1200)는 입력 버퍼(1202), 픽셀별 계산 블록(1204), 열(column) 압축기(1206), 열 누산 버퍼(1208), 행 압축기(1210), 지연기(1222), 및 공간 풀링 및 정규화(spatial pooling and normalization, SPN) 프로세서(1212)를 포함한다. SPN 프로세서(1212)는 제곱근 유닛(1214), 로컬 응답 정규화(LRN) 유닛(1216), 멀티플렉서(1218), 및 SPN 사후프로세서(1220)를 포함한다.
입력 버퍼(1202)는 컨볼루션 코어 회로(512)로부터의 값들(1232)의 스트림을 수신하고, 입력 데이터를 저장한다. 입력 데이터는 인터리빙된 방식으로 다수의 채널들을 한정하는 데이터 값들의 스트림을 포함하고, 이러한 데이터 값들은 그들이 스트림에서 수신됨에 따라 입력 버퍼(1202)에 저장된다. 입력 버퍼(1202)는 채널별 프로세싱을 용이하게 하기 위해 동일한 채널의 다수의 픽셀 값들을 저장한다. 공간적으로 풀링된 픽셀을 생성하기 위해, 입력 버퍼(1202)는 적어도 로컬 윈도우에 맞추기에 충분한 입력 픽셀 값들을 저장하도록 크기설정된다. 다수의 인터리빙된 채널들로부터의 픽셀 값들이 단일 이미지 평면으로서 표현되는 평탄화된 포맷에서, 로컬 윈도우는 단일 채널에 대해서만 픽셀 값들을 선택하는 희소성을 갖는다. 공간적으로 풀링되는 동일한 채널의 픽셀 값들의 수를 한정하는 로컬 윈도우의 크기(예컨대, 높이 또는 폭)는, 예컨대 중앙 제어부(320)로부터의 명령어들에 의해 구성가능할 수 있다. 로컬 윈도우의 중심 픽셀들 사이의 픽셀 공간을 한정하는, 로컬 윈도우의 수평 스트라이드(stride)는, 또한, 예컨대 중앙 제어부(320)로부터의 명령어들에 의해 구성가능할 수 있다. 입력 버퍼(1202)가 채널들에 대한 픽셀 값들이 하나 이상의 다른 채널들에 대한 픽셀 값들에 의해 분리되는 인터리빙된 채널들의 스트림을 수신하기 때문에, 입력 버퍼(1202)는 다수의 채널들 각각에 대한 다수의 픽셀 값들을 저장한다.
로컬 윈도우는 공간적으로 풀링된 픽셀 값에 공간적으로 풀링될 단일 채널의 다수의 픽셀 값들을 포함할 수 있다. 각각의 공간적으로 풀링된 픽셀에 대해, 공간 풀링 회로(1200)는 로컬 윈도우의 열로부터의 픽셀 값들을 조합하기 위한 열 풀링(column pooling), 및 이어서, 로컬 윈도우의 열 풀링된 값들을 조합하기 위한 행 풀링(row pooling)을 수행한다. "행" 및 "열"은 평탄화된 이미지의 수직의 픽셀 라인들을 지칭하고, 반드시 특정 수평 또는 수직 배향들을 지칭하는 것은 아니라는 것에 유의한다.
각각의 공간적으로 풀링된 픽셀에 대해, 픽셀 별 계산(1204)은 입력 버퍼(1202)로부터 로컬 윈도우의 채널의 데이터 값들을 인출하고, 데이터 값들에 대한 동작들을 수행한다. 동작들은 데이터 값에 오프셋을 적용하는 것, 데이터 값을 제곱하는 것, 또는 데이터 값의 절대 값을 결정하는 것을 포함할 수 있다.
열 압축기(1206)는 로컬 윈도우의 열과 연관된 픽셀별 계산(1204)으로부터의 다수의 데이터 값들을, 열을 표현하는 단일의 공간적으로 풀링된 값으로 조합한다. 열 압축기(1206)는, 중앙 제어부(320)에 의해 특정될 수 있는 바와 같이, 다양한 방식들로 다수의 데이터 값들을 조합할 수 있다. 예를 들어, 열 압축기(1206)는 최소 값, 최대 값을 선택할 수 있거나, 또는 값들을 합계로 조합할 수 있다.
열 누산 버퍼(1208)는 열 압축기(1204)로부터 다수의 공간적으로 풀링된 열 값들을 수신하고, 공간적으로 풀링된 열 픽셀 값들을 저장한다. 예를 들어, 열 누산 버퍼(1208)는 로컬 윈도우의 각각의 열의 적어도 공간적으로 풀링된 열 값들을 저장한다.
행 압축기(1210)는 로컬 윈도우의 각각의 열의 공간적으로 풀링된 열 값들을 조합한다. 열 압축기(1206)와 마찬가지로, 행 압축기(1210)는 중앙 제어부(320)에 의해 특정될 수 있는 바와 같이, 다양한 방식들로 다수의 데이터 값들을 조합할 수 있다. 예를 들어, 행 압축기(1210)는 최소 값, 최대 값을 선택할 수 있거나, 또는 값들을 합계로 조합할 수 있다. 행 압축기(1210)의 출력은 로컬 윈도우의 각각의 픽셀로부터 도출되는 공간적으로 풀링된 값을 표현한다.
SPN 프로세서(1202)는 행 압축기(1210)로부터 수신된 공간적으로 풀링된 값들을 프로세싱한다. 예를 들어, SPN 프로세서(1202)는 공간적으로 풀링된 값들의 제곱근들을 결정할 수 있다. SPN 프로세서(1202)는, 대안으로 또는 추가로, 공간적으로 풀링된 값들을 사용하여 입력 스트림(1222)에 대한 로컬 응답 정규화를 수행할 수 있다.
SPN 프로세서(1202)는 제곱근 유닛(1214), LRN 유닛(1216), 멀티플렉서(1218), 및 SPN 사후프로세서(1220)를 포함한다. 제곱근 유닛(1214)은 행 압축기(1210)로부터 공간적으로 풀링된 값들의 제곱근을 계산한다.
LRN 유닛(1216)은, 행 압축기로부터의 공간적으로 풀링된 값들을 지연기(1222)에 저장된 입력 값들에 적용함으로써 로컬 응답 정규화를 수행하여 채널별 정규화 값들을 생성한다. 지연기(1222)는 공간적으로 풀링된 값들을 입력 버퍼(1202)로부터의 대응하는 입력 값들과 동기화시킴으로써 로컬 응답 정규화를 가능하게 한다. 지연기(1222)는 입력 버퍼(1202) 및 LRN 유닛(1216)에 커플링된다. 지연기(1222)는 선입선출(first-in-first-out, FIFO) 메모리 버퍼를 포함할 수 있다.
멀티플렉서(1218)는 행 압축기(1210)의 공간적으로 풀링된 값들, 제곱근 유닛(1214)으로부터의 공간적으로 풀링된 값들의 제곱근, 또는 LRN 유닛(1216)으로부터의 정규화 값들로부터 출력을 선택한다. SPN 사후프로세서(1220)는 멀티플렉서(1218)의 선택된 출력을 수신하고, 스케일링, 오프셋, 및/또는 시프트 동작을 수행한다. SPN 사후프로세서(1220)의 출력은 인터리빙된 방식으로 다수의 채널들을 한정하는 픽셀 값들의 스트림이며, 여기서 픽셀 값들은 채널별 공간 풀링 및/또는 채널별 정규화로 프로세싱된다.
일부 실시예들에서, 중앙 제어부(320)는 컴포넌트들에 대한 동작의 조합들을 구성함으로써 공간 풀링 회로(1200)를 상이한 모드들로 동작시킨다.
도 5와 관련하여 위에서 논의된 바와 같이, 제1 컨볼루션 회로(502)의 공간 풀링 회로(514)의 출력 스트림(530)은 제2 컨볼루션 회로(504)로의 입력으로서 사용될 수 있거나, 또는 제2 컨볼루션 회로(504)의 출력과 인터리빙하기 위해 채널 병합 회로(506)에 제공될 수 있다.
도 13a 및 도 13b는 일 실시예에 따른, 다중 평면 포맷으로 공간 풀링 회로(1200)의 입력들 및 출력들을 도시한 개념도들이다. 공간 풀링 회로(1200)는 다중 채널 입력 이미지에 대해 채널별 공간 풀링 및/또는 채널별 LRN을 수행하고, 다중 채널 출력을 생성한다. 입력 채널들과 출력 채널들의 수는 보존되며, 이때 각각의 이미지의 픽셀 이미지 크기는 공간 풀링을 통해 감소된다.
도 13a 및 도 13b의 다중 평면 포맷은 각각의 입력 및 출력 채널을 개별 이미지 평면으로서 표현한다. 다중 채널 입력 데이터(1302)는 채널들(1304, 1306, 1308)과 같은 다수의 채널들로부터의 픽셀 값들을 갖는다. 이 예에서 3개의 픽셀들의 폭 및 높이를 갖는 로컬 윈도우(1310)의 픽셀 값들은 출력 채널(1304)에 대한 공간적으로 풀링된 값(1312)을 생성하도록 공간적으로 풀링된다. 공간 풀링 회로(1200)는 개별 단위로 각각의 채널에 대한 로컬 윈도우(1310)를 사용하여 채널들(1304, 1306, 1308)에 대한 다중 채널 출력 데이터(1314)를 생성한다.
다수의 채널들의 제1 공간적으로 풀링된 값들(예컨대, 값(1312))이 도 13a에 도시된 바와 같이 계산된 후에, 로컬 윈도우(1310)는 채널들의 다음의 공간적으로 풀링된 값들(예컨대, 값(1322))을 계산하기 위해 도 13b에 도시된 바와 같이 시프트된다. 이 예에서, 로컬 윈도우(1310)는 래스터 방식에 따라 열 차원에서 2개의 픽셀들만큼 시프트된다. 이는 로컬 윈도우(1310)의 중심 픽셀이 열 차원에서 2개의 픽셀들만큼 시프트되는 결과를 가져온다. 공간적으로 풀링된 픽셀 계산에 따른 로컬 윈도우(1310)의 중심 픽셀 시프트의 양은 구성가능할 수 있다. 로컬 윈도우는, 모든 공간적으로 풀링된 픽셀들이 계산될 때까지, 각각의 공간적으로 풀링된 픽셀에 대한 사전정의된 행("StrideX") 및 열("StrideY") 파라미터들에 따라 래스터 방식으로 시프트할 수 있다. 1 보다 큰 StrideX 및 StrideY 파라미터들을 사용하는 것은 데이터 크기 및 계산 비용을 감소시키기 위해 서브샘플링을 초래한다. 이러한 인자들이 1인 경우, 어떠한 출력 픽셀도 스킵되지 않는다. 시프트된 로컬 윈도우(1310)의 픽셀 값들은 출력 채널(1316)의 공간적으로 풀링된 값(1322)을 생성하도록 공간적으로 풀링된다.
도 13c 및 도 13d는 일 실시예에 따른, 평탄화된 포맷으로 공간 풀링 회로(1200)의 입력들 및 출력들을 도시한 개념도들이다. 도 13c는 도 13a에 도시된 다중 평면 포맷과 대응하고, 도 13d는 도 13b에 도시된 다중 평면 포맷과 대응한다. 평탄화된 포맷에서, 각각의 입력 채널은 Cin의 수평 간격으로 배치되는 픽셀 열들로서 표현되며, 여기서 Cin은 입력 채널들의 수를 나타낸다. 따라서, 채널별 동작이 로컬 윈도우들에 적용될 때, 커널 지원은 로컬 윈도우(1310)에 의해 나타내진 바와 같은 평탄화된 포맷으로 희소해진다.
행("StrideX") 및 열("StrideY") 시프트 값들은 다중 평면 포맷에서 채널의 공간 좌표 내의 픽셀들의 단위들로 정의된다. 평면 포맷에서, 행 시프트의 실제 양은 행 시프트 값(StrideX)을 입력 채널들의 수(Cin)로 승산함으로써 결정된다.
도 14는 일 실시예에 따른, 공간 풀링 회로(1200)를 동작시키는 방법(1400)을 도시한 흐름도이다. 중앙 제어부(320)는 구성 정보를 공간 풀링 회로(1200)로 전송한다(1402). 구성 명령어들은, 방법(700)의 702에서 논의된 바와 같이, 컨볼루션 엔진(414)에 대한 다른 구성 명령어들과 관련하여 전송될 수 있다.
구성 명령어들은 공간 풀링 회로(1200)의 동작 모드를 정의하는 명령어들을 포함할 수 있다. 상이한 동작 모드들은 상이한 타입들의 공간 풀링 또는 채널별 LRN을 정의할 수 있다. 최대 풀링 모드에서, 열 압축기(1206) 및 행 압축기(1210)는 최대 값들을 선택하고, 멀티플렉서(1218)는 행 압축기(1210)의 출력을 선택한다. 여기서, SPN 프로세서(1212)의 누산후 프로세싱(post-accumulation processing)은 공간 풀링 회로(1200)의 출력이 어떠한 로컬 응답 정규화 또는 제곱근 응용물도 갖지 않도록 바이패스된다. 평균 풀링 모드에서, 열 압축기(1206) 및 행 압축기(1210)는 합계들을 생성하고, 멀티플렉서(1218)는 누산후 프로세싱을 바이패스하기 위해 행 압축기(1210)의 출력을 선택한다.
L1 풀링 모드에서, 픽셀별 계산(1204)은 절대 값들을 결정하고, 열 압축기(1206) 및 행 압축기(1210)는 절대 값들의 합계들을 계산하고, 멀티플렉서(1218)는 누산후 프로세싱을 바이패스하기 위해 행 압축기(1210)의 출력을 선택한다. L2 풀링 모드에서, 픽셀별 계산(1204)은 제곱 값들을 결정하고, 열 압축기(1206) 및 행 압축기(1210)는 제곱 값들의 합계들을 계산하고, 제곱근 유닛(1214)은 제곱 값들의 합계들의 제곱근을 결정하고, 멀티플렉서(1218)는 제곱근 유닛(1214)의 출력을 선택한다.
채널별 LRN 모드에서, 픽셀별 계산(1204)은 제곱 값들을 결정하고, 열 압축기(1206) 및 행 압축기(1210)는 제곱 값들의 합계들을 계산하고, LRN 유닛(1216)은 제곱 값들의 합계들의 제곱근을 사용하여 값들을 정규화하고, 멀티플렉서(1218)는 LRN 유닛(1216)의 출력을 선택한다.
구성 정보를 수신한 후에, 공간 풀링 회로(1200)의 구성은 구성 정보에서 설명되는 바와 같은 동작들을 수행하도록 구성 정보에 따라 업데이트된다(1404). 구성을 업데이트하는 것은 구성 정보에 의해 정의된 동작 모드에 따라 픽셀별 계산(1204), 열 압축기(1206) 및 행 압축기(1210), 제곱근 유닛(1214), 및 멀티플렉서(1218)의 동작을 설정하는 것을 포함할 수 있다.
컨볼루션 코어 회로(512)(또는 522)는 입력 데이터에 대해 컨볼루션 동작들을 수행함으로써 인터리빙된 방식으로 다수의 채널들의 값들의 스트림을 생성한다(1406). 예를 들어, 컨볼루션 코어 회로(512)는 다수의 컨볼루션 커널들을 사용하여 입력 데이터에 대한 컨볼루션 동작들을 수행하여, 구성 명령어들에 따라 다수의 채널들을 포함하는 값들의 스트림을 생성한다. 컨볼루션 회로(512)는 구성 명령어들에 의해 특정된 바와 같은 컨볼루션 결과들에 대한 하나 이상의 사후프로세싱 동작들을 추가로 수행할 수 있다. 일부 실시예들에서, 사후프로세싱 동작들은 다중 채널 NCC 및 채널간 LRN과 같은 채널간 동작들을 포함한다. 이러한 동작들은 상이한 채널들로부터의 값들을 조합하고, 공간 풀링 회로(1200)의 채널별 동작들과는 상이하다. 컨볼루션 코어 회로(512)가 다수의 실행 클러스터들을 포함하는 경우, 다수의 실행 클러스터들의 출력 스트림들은 컨볼루션 코어 회로(512)에 의해 출력되는 인터리빙된 방식으로 다수의 채널들의 값들의 스트림을 생성하도록 조합될 수 있다.
공간 풀링 회로(1200)는 각각의 채널로부터의 값들의 서브세트들을 서로 풀링함으로써 공간적으로 풀링된 값들을 생성한다(1408). 예를 들어, 컨볼루션 코어 회로(512)로부터의 스트림이 제1 및 제2 인터리빙된 채널을 포함하는 경우, 공간 풀링 회로(1200)는 제1 채널의 값들의 서브세트들(예컨대, 로컬 윈도우들에 의해 정의되는 바와 같음)을 풀링함으로써 공간적으로 풀링된 값들을 생성하고, 제2 채널의 값들의 서브세트들을 풀링함으로써 제2 공간적으로 풀링된 값들을 생성한다. 입력 버퍼(1202)는 스트림(1224)으로부터의 단일 채널의 값들의 서브세트가 공간 풀링을 용이하게 하도록 저장됨을 보장한다. 각각의 채널로부터의 값들의 서브세트들은 픽셀별 계산(1204), 열 압축기(1206), 행 압축기(1210), 및 SPN 프로세서(1212)의 선택된 동작들에 기초하여 다양한 방식들로 풀링될 수 있다. 공간적으로 풀링된 값들은 최대 풀링 모드, 평균 풀링 모드, L1 풀링 모드, 또는 L2 풀링 모드와 같은 상이한 타입들의 공간 풀링으로부터 도출된 값들을 포함할 수 있다. 다른 예에서, 공간적으로 풀링된 값들은 채널별 LRN 모드와 같은 정규화로부터 도출된 값들을 포함할 수 있다.
공간 풀링 회로(1200)는 다수의 채널들로부터의 공간적으로 풀링된 값들을 출력 스트림(1226) 내로 인터리빙한다(1410). 따라서, 공간 풀링 회로(1200)는, 입력 스트림(1224)에 대해 채널별 심층 기계 학습 동작들을 수행하는 동안, 출력 스트림(1226)에서, 입력 스트림(1224)으로서 수신된 다중 채널 인터리빙된 포맷을 유지한다.
공간 풀링 회로(1200)는 컨볼루션 코어 회로(512)(또는 504)로부터 2-ppc 입력 스트림을 수신할 수 있고, 2-ppc 출력 스트림을 생성한다. 컨볼루션 코어 회로(512)가 1-ppc 스트림을 제공하는 경우, 공간 풀링 회로(1200)는 무효 값들을 무시하고 유효한 값들만을 프로세싱한다. 출력 프레임의 총 폭이 홀수인 경우, 폭을 균일하게 만들기 위해 각각의 라인의 단부에 0이 추가될 수 있다.
도 14에 도시된 바와 같은 프로세스는 단지 예시적인 것이며, 프로세스에 대해 다양한 변경이 이루어질 수 있다. 예를 들어, 바이패스 모드에서, 공간 풀링 회로(1200)는 입력 스트림을 재패킷화하여, 유효 값들을 포함하는 2-ppc 출력 스트림을 보장할 수 있다. 픽셀 프로세싱 컴포넌트들, 예컨대 픽셀별 계산(1204), 및 열 및 행 압축기들(1206, 1210)은 바이패스 모드에서 바이패스될 수 있다.
인터리빙된 채널 병합
응용예들이 높은 처리율을 필요로 할 때 또는 대규모 심층 학습 모델들이 사용될 때, 2개의 컨볼루션 회로들(502, 504)은 도 6a와 관련하여 위에서 논의된 바와 같은 이중 컨볼루션 모드에서 동시에 구동될 수 있다. 2개의 컨볼루션 회로들(502, 504)은 동일한 입력 스트림에 대해 상이한 컨볼루션 커널들을 적용한다. 예를 들어, 제1 컨볼루션 회로(502)는 하나 이상의 컨볼루션 커널들로 출력 채널들의 제1 절반을 생성하는 한편, 제2 컨볼루션 회로(504)는 하나 이상의 상이한 컨볼루션 커널들로 제2 절반을 생성한다. 채널 병합 회로(506)는 컨볼루션 회로들(502, 504)로부터 스트림들을 수신하고, 스트림들을, 인터리빙된 방식으로 출력 채널들의 제1 절반 및 출력 채널들의 제2 절반을 포함하는 단일 출력 스트림으로 조합한다. 인터리빙을 수행하기 위해, 채널 병합 회로는 채널 병합기(526)를 갖는다.
도 15는 일 실시예에 따른 채널 병합기(1500)를 도시한 블록도이다. 채널 병합기(1500)는 채널 병합 회로(506)의 채널 병합기(526)의 일 실시예이다. 채널 병합기(1500)의 출력은 이중 컨볼루션 모드에서 동작할 때 컨볼루션 엔진(414)의 출력으로서 선택된다.
채널 병합기(1500)는 입력 버퍼(1502), 멀티플렉서(1504), 및 채널 선택기(1506)를 포함한다. 입력 버퍼(1502)는 컨볼루션 회로(502)에 커플링되어 값들(530)의 스트림을 수신하고, 컨볼루션 회로(504)에 커플링되어 값들(532)의 스트림을 수신한다. 값들(530, 532)의 스트림은 각각 다수의 인터리빙된 채널들을 포함할 수 있다. 입력 버퍼(1502)는 인터리빙을 위한 값들의 동기화를 용이하게 하기 위해 값들(530, 532)을 저장한다.
멀티플렉서(1504)는 입력 버퍼에 커플링되고 입력 버퍼(1502)로부터 값들(530, 532)의 스트림을 수신한다. 채널 선택기(1506)는 출력 값들(534)의 출력 스트림에의 삽입을 위해 입력 스트림으로부터의 값의 선택을 제어하기 위한 선택 신호를 멀티플렉서(1504)에 제공한다. 멀티플렉서는, 예컨대 각각의 입력 스트림으로부터 하나 이상의 값들을 교번 선택함으로써, 값들(530, 532)의 스트림을 인터리빙하여, 출력 값들(534)의 출력 스트림을 생성한다. 특정 입력 스트림으로부터 선택된 순차적 값들의 수는 스트림 내의 픽셀당 채널들의 수에 의해 한정될 수 있다. 출력 값들(534)의 시퀀스는 인터리빙된 방식으로 값들(530, 532)의 스트림의 채널들을 한정한다.
채널 병합기(1500)는, 임의의 입력 스트림을 느리게 함이 없이, 동기화되는 2개의 2-ppc 입력 스트림들을 지원한다. 병합된 출력의 처리율은 4-ppc이다. 2개의 입력 스트림들이 동기화되지 않는 경우, 입력 소스들 중 하나 이상이 입력 버퍼(1502)를 사용하여 저장되어, 채널 병합기(1500)가 입력 스트림들 양측 모두로부터 동기화된 입력을 수신하도록 지연을 제공할 수 있다.
도 16은 일 실시예에 따른, 평탄화된 포맷으로 채널 병합기(1500)의 입력들 및 출력들을 도시한 개념도이다. 일부 실시예들에서, 채널 병합기(1500)는, 다중 채널 입력 데이터(1602) 및 다중 채널 입력 데이터(1604)에 의해 나타내진 바와 같이, 동일한 크기를 갖는 2개의 입력 프레임들을 조합한다. 또한, 입력 스트림들(530, 532)은 동일한 수(Cin)의 입력 채널들을 갖는다. 이 예에서, Cin은 5이고, 따라서, 각각의 픽셀 P0, P1, P2 등은 각각의 스트림에 대해 값들의 5개의 채널들을 갖는다. 채널 병합기(1500)는 제1 스트림의 P0 픽셀의 각각의 채널에 대한 픽셀 값들 뒤에 제2 스트림의 P0 픽셀의 각각의 채널에 대한 픽셀 값들이 오도록 다중 채널 입력 데이터(1602) 및 다중 채널 입력 데이터(1604)를 인터리빙함으로써 다중 채널 출력 데이터(1606)를 생성한다. 평탄화된 포맷으로 래스터 방식으로 진행하여, 제1 스트림의 P1 픽셀의 각각의 채널에 대한 픽셀 값들은 제2 스트림의 P0 픽셀의 픽셀 값 뒤에 온다. P1 픽셀에 대해, 제1 스트림의 P1 픽셀의 각각의 채널에 대한 픽셀 값들 뒤에 제2 스트림의 P1 픽셀의 각각의 채널에 대한 픽셀 값들이 온다.
채널 병합기(1500)는 입력 스트림(530)(다중 채널 입력 데이터(1602)를 포함함) 및 입력 스트림(532)(다중 채널 입력 데이터(1604)를 포함함) 각각으로부터의 입력 채널들의 개수로서 채널들의 수의 2배를 갖는 출력 값들(534)의 출력 스트림을 생성한다. 예를 들어, 다중 채널 출력 데이터의 각각의 픽셀 P0, P1 등은 10-채널 출력(Cout)을 갖는다.
일부 실시예들에서, 입력 스트림들(530, 532) 내의 이미지들의 높이 및 폭이 매칭되지 않을 때, 또는 입력 스트림(530, 532) 내의 채널들의 수가 매칭되지 않을 때, 채널 병합 회로(506)에서 채널 병합기(1500)가 디스에이블된다. 이중 컨볼루션 모드에서 동작하기보다는, 컨볼루션 엔진(414)은, 도 6b에 도시된 캐스케이드 모드 또는 도 6c에 도시된 병렬 모드와 같은, 채널 병합기(1500)를 바이패스하는 상이한 모드에서 동작할 수 있다.
일부 실시예들에서, 채널 병합기(1500)는 코어 병합기(846)의 일 실시예이다. 코어 병합기(847)는 (별개의 파이프라인들에서의 사후프로세싱에 후속하여) 각각의 실행 클러스터(810, 812)로부터 2개의 1-ppc 입력 스트림들을 수신하고, 1-ppc 입력 스트림들을 컨볼루션 코어 회로(800)의 2-ppc 출력 스트림으로 조합한다. 대조적으로, 채널 병합기(526)는 2-ppc 입력 스트림들을 수신하고, 4-ppc 출력 스트림을 생성한다. 따라서, 채널 병합기(526)는 코어 병합기(847)보다 더 높은 처리율을 갖는다. 코어 병합기(847)는 짝수 및 홀수 스트림들(842, 844)로부터 데이터 값들을 선택하여 출력 스트림을 생성하는 멀티플렉서, 및 멀티플렉서에 의한 값들의 선택을 제어하는 채널 선택기를 포함할 수 있다. 일부 실시예들에서, 코어 병합기(846)는 짝수 및 홀수 스트림들(842, 844) 중 하나 이상을 저장함으로써 인터리빙의 동기화를 용이하게 하기 위해 하나 이상의 입력 버퍼들을 포함할 수 있다. 코어 병합기(846)의 메모리 및 프로세싱 컴포넌트들의 크기는 더 낮은 처리율 때문에 채널 병합기(1500)의 메모리 및 프로세싱 컴포넌트들의 크기보다 작을 수 있다.

Claims (20)

  1. 컨볼루션 엔진으로서,
    하나 이상의 제1 컨볼루션 커널들을 제1 입력 데이터에 적용함으로써 제1 값들의 제1 스트림을 생성하도록 구성된 제1 컨볼루션 회로 - 상기 제1 스트림 내의 제1 값들은 인터리빙된 방식으로 데이터의 제1 복수의 채널들을 한정함-;
    하나 이상의 제2 컨볼루션 커널들을 제2 입력 데이터에 적용함으로써 제2 값들의 제2 스트림을 생성하도록 구성된 제2 컨볼루션 회로 - 상기 제2 스트림 내의 제2 값들은 인터리빙된 방식으로 데이터의 제2 복수의 채널들을 한정함-; 및
    상기 제1 컨볼루션 회로에 커플링되어 상기 제1 스트림을 수신하고 상기 제2 컨볼루션 회로에 커플링되어 상기 제2 스트림을 수신하는 채널 병합 회로를 포함하고, 상기 채널 병합 회로는,
    상기 컨볼루션 엔진의 제1 모드에서, 상기 제2 값들과 인터리빙되는 상기 제1 값들을 포함하는 제1 출력 스트림을 생성하도록 - 상기 제1 출력 스트림은 인터리빙된 방식으로 상기 제1 복수의 채널들 및 상기 제2 복수의 채널들을 한정하고, 상기 제1 컨볼루션 회로에 의해 수신된 상기 제1 입력 데이터는 상기 제2 컨볼루션 회로에 의해 수신된 상기 제2 입력 데이터와 동일함 -; 그리고
    상기 컨볼루션 엔진의 제2 모드에서, 상기 제2 컨볼루션 회로로부터의 상기 제2 값들의 제2 스트림을 포함하는 제2 출력 스트림을 생성하도록 - 상기 제2 컨볼루션 회로에 의해 사용되는 상기 제2 입력 데이터는 상기 제1 컨볼루션 회로에 의해 생성되는 상기 제1 값들의 제1 스트림임 - 구성된, 컨볼루션 엔진.
  2. 제1항에 있어서, 상기 컨볼루션 엔진의 제3 모드에서, 상기 채널 병합 회로는 상기 제1 값들을 포함하는 제3 출력 스트림 및 상기 제2 값들을 포함하는 제4 출력 스트림을 생성하도록 - 상기 제1 컨볼루션 회로에 의해 수신된 상기 제1 입력 데이터는 상기 제2 컨볼루션 회로에 의해 수신된 상기 제2 입력 데이터와 동일함 - 구성된, 컨볼루션 엔진.
  3. 제1항에 있어서, 상기 제1 컨볼루션 회로는 상기 제1 입력 데이터에 제1 컨볼루션 커널을 적용하고, 이와 동시에, 상기 제2 컨볼루션 회로는 상기 입력 데이터에 제2 컨볼루션 커널을 적용하고, 상기 제1 컨볼루션 커널은 제1 필터 요소들을 갖고, 상기 제2 컨볼루션 커널은 상기 제1 필터 요소들과는 상이한 제2 필터 요소들을 갖는, 컨볼루션 엔진.
  4. 제1항에 있어서, 상기 제1 컨볼루션 회로는,
    컨볼루션 코어; 및
    사후프로세싱 회로를 포함하고,
    상기 컨볼루션 코어는,
    데이터의 상기 제1 복수의 채널들 중 짝수 채널들을 한정하는 짝수 데이터 값들의 스트림을 생성하도록 구성된 제1 실행 클러스터; 및
    데이터의 상기 제1 복수의 채널들 중 홀수 채널들을 한정하는 홀수 데이터 값들의 스트림을 생성하도록 구성된 제2 실행 클러스터를 포함하고,
    상기 사후프로세싱 회로는,
    상기 제1 실행 클러스터에 커플링되어 상기 짝수 데이터 값들의 스트림을 수신하고, 상기 제2 실행 클러스터에 커플링되어 상기 홀수 데이터 값들의 스트림을 수신하며, 상기 짝수 데이터 값들의 스트림 및 상기 홀수 데이터 값들의 스트림으로부터 상기 제1 값들의 제1 스트림을 생성하도록 구성된, 컨볼루션 엔진.
  5. 제4항에 있어서, 상기 사후프로세싱 회로는,
    상기 제1 실행 클러스터로부터 상기 짝수 데이터 값들의 스트림 및 복수의 제1 컨볼루션 커널들에 대한 제1 다중 채널 정규화 교차 상관(normalized cross correlation, NCC) 스코어들을 계산하도록 구성된 제1 다중 채널 NCC 유닛; 및
    상기 제2 실행 클러스터로부터 상기 홀수 데이터 값들의 스트림 및 상기 복수의 제1 컨볼루션 커널들에 대한 제2 다중 채널 NCC 스코어들을 계산하도록 구성된 제2 다중 채널 NCC 유닛을 포함하는, 컨볼루션 엔진.
  6. 제5항에 있어서, 상기 사후프로세싱 회로는 데이터의 상기 제1 복수의 채널들 중 적어도 하나의 채널과 연관된 최대 또는 최소 값을 결정하도록 구성된 피크 파인더(peak finder)를 추가로 포함하는, 컨볼루션 엔진.
  7. 제4항에 있어서, 상기 사후프로세싱 회로는,
    상기 제1 실행 클러스터로부터 상기 짝수 데이터 값들의 스트림으로의 비선형 변환을 수행하도록 구성된 제1 응답 정류기 유닛; 및
    상기 제2 실행 클러스터로부터 상기 홀수 데이터 값들의 스트림으로의 비선형 변환을 수행하도록 구성된 제2 응답 정류기 유닛을 포함하는, 컨볼루션 엔진.
  8. 제4항에 있어서, 상기 사후프로세싱 회로는,
    데이터의 상기 제1 복수의 채널들 중 상기 짝수 채널들을 한정하는 상기 짝수 데이터 값들에 대한 채널간 로컬 응답 정규화(local response normalization, LRN)를 수행하도록 구성된 제1 채널간 로컬 응답 정규화 유닛; 및
    데이터의 상기 제1 복수의 채널들 중 상기 홀수 채널들을 한정하는 상기 홀수 데이터 값들에 대한 채널간 로컬 응답 정규화를 수행하도록 구성된 제2 채널간 LRN 유닛을 포함하는, 컨볼루션 엔진.
  9. 제1항에 있어서, 상기 제1 컨볼루션 회로는,
    복수의 제1 컨볼루션 커널들을 상기 제1 입력 데이터에 적용함으로써 데이터의 상기 제1 복수의 채널들에 대한 데이터 값들의 적어도 일부분을 생성하도록 구성된 실행 클러스터를 포함하는 컨볼루션 코어; 및
    사후프로세싱 회로를 포함하고,
    상기 사후프로세싱 회로는,
    상기 실행 클러스터에 커플링되고, 데이터 값들의 적어도 일부분 및 상기 복수의 제1 컨볼루션 커널들에 대한 정규화 교차 상관(NCC) 스코어들을 계산하도록 구성된 다중 채널NCC 유닛;
    상기 다중 채널 NCC에 커플링되고, 데이터 값들의 상기 적어도 일부분에 대해 비선형 변환을 수행하도록 구성된 응답 정류기 유닛;
    상기 응답 정류기 유닛에 커플링되고, 상기 응답 정류기 유닛의 출력에 대한 채널간 로컬 응답 정규화를 수행하도록 구성된 채널간 로컬 응답 정규화(LRN) 유닛; 및
    데이터의 상기 제1 복수의 채널들 중 적어도 하나의 채널과 연관된 최대 또는 최소 값을 결정하도록 구성된 피크 파인더를 포함하고,
    상기 컨볼루션 엔진은 상기 다중 채널 NCC 유닛, 상기 응답 정류기 유닛, 상기 채널간 LRN 유닛, 및 상기 피크 파인더를 선택적으로 활성화 또는 비활성화시키도록 구성된 제어 회로를 추가로 포함하는, 컨볼루션 엔진.
  10. 제1항에 있어서, 상기 컨볼루션 엔진으로 하여금 상기 제1 및 제2 모드들을 포함하는 복수의 모드들 사이에서 스위칭하게 하도록 구성된 제어 회로를 추가로 포함하는, 컨볼루션 엔진.
  11. 제10항에 있어서,
    상기 제2 컨볼루션 회로는 제1 멀티플렉서를 포함하고,
    상기 채널 병합 회로는 제2 멀티플렉서를 포함하고,
    상기 제어 회로는,
    상기 컨볼루션 엔진의 제1 모드에서:
    상기 제1 멀티플렉서가 상기 제1 입력 데이터를 상기 제2 컨볼루션 회로에 대한 상기 제2 입력 데이터로서 선택하게 하도록; 그리고
    상기 제2 멀티플렉서가 상기 제1 출력 스트림을 상기 채널 병합 회로의 출력으로서 선택하게 하도록; 그리고
    상기 컨볼루션 엔진의 제2 모드에서:
    상기 제1 멀티플렉서가 상기 제1 컨볼루션 회로에 의해 생성된 상기 제1 값들의 제1 스트림을 상기 제2 컨볼루션 회로에 대한 상기 제2 입력 데이터로서 선택하게 하도록; 그리고
    상기 제2 멀티플렉서가 상기 제2 컨볼루션 회로에 의해 생성된 상기 제2 값들의 제2 스트림을 상기 채널 병합 회로의 출력으로서 선택하게 하도록 추가로 구성된, 컨볼루션 엔진.
  12. 제11항에 있어서, 상기 컨볼루션 엔진의 제3 모드에서:
    상기 채널 병합 회로는 상기 제1 값들을 포함하는 제3 출력 스트림 및 상기 제2 값들을 포함하는 제4 출력 스트림을 생성하도록 구성되고,
    상기 제어 회로는,
    상기 제1 멀티플렉서가 상기 제1 입력 데이터를 상기 제2 컨볼루션 회로에 대한 상기 제2 입력 데이터로서 선택하게 하도록; 그리고
    상기 제2 멀티플렉서가 상기 제2 값들의 제2 스트림을 상기 채널 병합 회로의 출력으로서 선택하게 하도록 추가로 구성된, 컨볼루션 엔진.
  13. 방법으로서,
    컨볼루션 엔진에 의해, 하나 이상의 제1 컨볼루션 커널들을 제1 입력 데이터에 적용함으로써 제1 값들의 제1 스트림을 생성하는 단계 - 상기 제1 스트림 내의 제1 값들은 인터리빙된 방식으로 데이터의 제1 복수의 채널들을 한정함-;
    상기 컨볼루션 엔진에 의해, 하나 이상의 제2 컨볼루션 커널들을 제2 입력 데이터에 적용함으로써 제2 값들의 제2 스트림을 생성하는 단계 - 상기 제2 스트림 내의 제2 값들은 인터리빙된 방식으로 데이터의 제2 복수의 채널들을 한정함-;
    상기 컨볼루션 엔진의 제1 모드에서, 상기 제2 값들과 인터리빙되는 상기 제1 값들을 포함하는 제1 출력 스트림을 생성하는 단계 - 상기 제1 출력 스트림은 인터리빙된 방식으로 상기 제1 복수의 채널들 및 상기 제2 복수의 채널들을 한정하고, 상기 제1 입력 데이터는 상기 제2 입력 데이터와 동일함 -; 및
    상기 컨볼루션 엔진의 제2 모드에서, 상기 제2 컨볼루션 회로로부터의 상기 제2 값들의 제2 스트림을 포함하는 제2 출력 스트림을 생성하는 단계 - 상기 제2 입력 데이터는 상기 제1 값들의 제1 스트림임 - 를 포함하는, 방법.
  14. 제13항에 있어서, 상기 컨볼루션 엔진의 제3 모드에서, 상기 제1 값들을 포함하는 제3 출력 스트림 및 상기 제2 값들을 포함하는 제4 출력 스트림을 생성하는 단계 - 상기 제1 입력 데이터는 상기 제2 입력 데이터와 동일함 - 를 추가로 포함하는, 방법.
  15. 제13항에 있어서, 상기 컨볼루션 엔진은 상기 제1 입력 데이터에 제1 컨볼루션 커널을 적용하고, 이와 동시에, 상기 입력 데이터에 제2 컨볼루션 커널을 적용하고, 상기 제1 컨볼루션 커널은 제1 필터 요소들을 갖고, 상기 제2 컨볼루션 커널은 상기 제1 필터 요소들과는 상이한 제2 필터 요소들을 갖는, 방법.
  16. 제13항에 있어서,
    데이터의 상기 제1 복수의 채널들 중 짝수 채널들을 한정하는 짝수 데이터 값들의 스트림을 생성하는 단계;
    데이터의 상기 제1 복수의 채널들 중 홀수 채널들을 한정하는 홀수 데이터 값들의 스트림을 생성하는 단계; 및
    상기 짝수 데이터 값들의 스트림 및 상기 홀수 데이터 값들의 스트림으로부터 상기 제1 값들의 제1 스트림을 생성하는 단계를 추가로 포함하는, 방법.
  17. 제16항에 있어서,
    상기 짝수 데이터 값들의 스트림 및 복수의 제1 컨볼루션 커널들에 대한 제1 다중 채널 정규화 교차 상관(NCC) 스코어들을 계산하는 단계; 및
    상기 홀수 데이터 값들의 스트림 및 상기 복수의 제1 컨볼루션 커널들에 대한 제2 다중 채널 NCC 스코어들을 계산하는 단계를 추가로 포함하는, 방법.
  18. 제16항에 있어서,
    상기 짝수 데이터 값들의 스트림에 대한 비선형 변환을 수행하는 단계; 및
    상기 홀수 데이터 값들의 스트림에 대한 비선형 변환을 수행하는 단계를 추가로 포함하는, 방법.
  19. 제17항에 있어서,
    데이터의 상기 제1 복수의 채널들 중 상기 짝수 채널들을 한정하는 상기 짝수 데이터 값들에 대한 채널간 로컬 응답 정규화를 수행하는 단계; 및
    데이터의 상기 제1 복수의 채널들 중 상기 홀수 채널들을 한정하는 상기 홀수 데이터 값들에 대한 채널간 로컬 응답 정규화를 수행하는 단계를 추가로 포함하는, 방법.
  20. 전자 디바이스로서,
    하나 이상의 제1 컨볼루션 커널들을 제1 입력 데이터에 적용함으로써 제1 값들의 제1 스트림을 생성하도록 구성된 제1 컨볼루션 회로 - 상기 제1 스트림 내의 제1 값들은 인터리빙된 방식으로 데이터의 제1 복수의 채널들을 한정함-;
    하나 이상의 제2 컨볼루션 커널들을 제2 입력 데이터에 적용함으로써 제2 값들의 제2 스트림을 생성하도록 구성된 제2 컨볼루션 회로 - 상기 제2 스트림 내의 제2 값들은 인터리빙된 방식으로 데이터의 제2 복수의 채널들을 한정함-; 및
    상기 제1 컨볼루션 회로에 커플링되어 상기 제1 스트림을 수신하고 상기 제2 컨볼루션 회로에 커플링되어 상기 제2 스트림을 수신하는 채널 병합 회로를 포함하고, 상기 채널 병합 회로는,
    상기 컨볼루션 엔진의 제1 모드에서, 상기 제2 값들과 인터리빙되는 상기 제1 값들을 포함하는 제1 출력 스트림을 생성하도록 - 상기 제1 출력 스트림은 인터리빙된 방식으로 상기 제1 복수의 채널들 및 상기 제2 복수의 채널들을 한정하고, 상기 제1 컨볼루션 회로에 의해 수신된 상기 제1 입력 데이터는 상기 제2 컨볼루션 회로에 의해 수신된 상기 제2 입력 데이터와 동일함 -; 그리고
    상기 컨볼루션 엔진의 제2 모드에서, 상기 제1 값들을 포함하는 제2 출력 스트림 및 상기 제2 값들을 포함하는 제3 출력 스트림을 생성하도록 - 상기 제1 컨볼루션 회로에 의해 수신된 상기 제1 입력 데이터는 상기 제2 컨볼루션 회로에 의해 수신된 상기 제2 입력 데이터와 동일함 - 구성된, 전자 디바이스.
KR1020197031687A 2017-04-27 2018-03-06 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진 KR102163424B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020207025505A KR102352102B1 (ko) 2017-04-27 2018-03-06 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/499,543 US10176551B2 (en) 2017-04-27 2017-04-27 Configurable convolution engine for interleaved channel data
US15/499,543 2017-04-27
PCT/US2018/021210 WO2018200075A1 (en) 2017-04-27 2018-03-06 Configurable convolution engine for interleaved channel data

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020207025505A Division KR102352102B1 (ko) 2017-04-27 2018-03-06 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진

Publications (2)

Publication Number Publication Date
KR20190126440A true KR20190126440A (ko) 2019-11-11
KR102163424B1 KR102163424B1 (ko) 2020-10-08

Family

ID=61750535

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020207025505A KR102352102B1 (ko) 2017-04-27 2018-03-06 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진
KR1020197031687A KR102163424B1 (ko) 2017-04-27 2018-03-06 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020207025505A KR102352102B1 (ko) 2017-04-27 2018-03-06 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진

Country Status (7)

Country Link
US (3) US10176551B2 (ko)
JP (2) JP6705065B1 (ko)
KR (2) KR102352102B1 (ko)
CN (2) CN110574026B (ko)
DE (1) DE112018002228B4 (ko)
GB (2) GB2584504B (ko)
WO (1) WO2018200075A1 (ko)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9977994B2 (en) * 2016-06-30 2018-05-22 Apple Inc. Configurable histogram-of-oriented gradients (HOG) processor
US9858636B1 (en) 2016-06-30 2018-01-02 Apple Inc. Configurable convolution engine
JP2018067154A (ja) * 2016-10-19 2018-04-26 ソニーセミコンダクタソリューションズ株式会社 演算処理回路および認識システム
KR102061408B1 (ko) * 2017-03-24 2019-12-31 (주)제이엘케이인스펙션 가상 3차원 심층 신경망을 이용하는 영상 분석 장치 및 방법
US10176551B2 (en) * 2017-04-27 2019-01-08 Apple Inc. Configurable convolution engine for interleaved channel data
US10776694B2 (en) * 2017-05-16 2020-09-15 Samsung Electronics Co., Ltd. Optimized neural network input stride method and apparatus
JP7242185B2 (ja) * 2018-01-10 2023-03-20 キヤノン株式会社 画像処理方法、画像処理装置、画像処理プログラム、および、記憶媒体
US11586907B2 (en) 2018-02-27 2023-02-21 Stmicroelectronics S.R.L. Arithmetic unit for deep learning acceleration
US10977854B2 (en) 2018-02-27 2021-04-13 Stmicroelectronics International N.V. Data volume sculptor for deep learning acceleration
US11687762B2 (en) 2018-02-27 2023-06-27 Stmicroelectronics S.R.L. Acceleration unit for a deep learning engine
CN110322388B (zh) * 2018-03-29 2023-09-12 上海熠知电子科技有限公司 池化方法及装置、池化系统、计算机可读存储介质
US10997736B2 (en) * 2018-08-10 2021-05-04 Apple Inc. Circuit for performing normalized cross correlation
EP3648013A1 (en) * 2018-11-02 2020-05-06 Tata Consultancy Services Limited Method and system for partitioning of deep convolution network for executing on computationally constraint devices
KR20200081044A (ko) 2018-12-27 2020-07-07 삼성전자주식회사 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
KR20210020387A (ko) 2019-08-14 2021-02-24 삼성전자주식회사 전자 장치 및 그 제어 방법
DE102019129760A1 (de) * 2019-11-05 2021-05-06 Eyyes Gmbh Verfahren zur Verarbeitung von Eingangsdaten
CA3157994A1 (en) * 2019-11-27 2021-06-03 Pavel SINHA Systems and methods for performing direct conversion of image sensor data to image analytics
US11403727B2 (en) * 2020-01-28 2022-08-02 Nxp Usa, Inc. System and method for convolving an image
KR20210097448A (ko) * 2020-01-30 2021-08-09 삼성전자주식회사 영상 데이터 처리 방법 및 영상 데이터 처리 방법을 수행하는 센서 장치
KR20210101903A (ko) * 2020-02-11 2021-08-19 삼성전자주식회사 전자 장치 및 그 제어 방법
US11507831B2 (en) * 2020-02-24 2022-11-22 Stmicroelectronics International N.V. Pooling unit for deep learning acceleration
US20210287338A1 (en) * 2020-03-11 2021-09-16 Mediatek Inc. Image-guided adjustment to super-resolution operations
US11580192B2 (en) * 2020-04-08 2023-02-14 Meta Platforms, Inc. Grouped convolution using point-to-point connected channel convolution engines
GB2595696B (en) 2020-06-04 2022-12-28 Envisics Ltd Forming a hologram of a target image for projection using data streaming
US20220067509A1 (en) * 2020-09-02 2022-03-03 Alibaba Group Holding Limited System and method for learning from partial compressed representation
US11144822B1 (en) * 2021-01-04 2021-10-12 Edgecortix Pte. Ltd. Neural network accelerator run-time reconfigurability
JP7418019B2 (ja) * 2021-12-10 2024-01-19 株式会社アクセル 情報処理装置、情報処理装置における情報処理方法、及びプログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6070263A (en) * 1998-04-20 2000-05-30 Motorola, Inc. Circuit for use in a Viterbi decoder
KR20060121312A (ko) * 2005-05-24 2006-11-29 엘지전자 주식회사 컨볼루션 터보 부호 인터리버
KR20090125080A (ko) * 2007-03-16 2009-12-03 삼성전자주식회사 다중 코드 블록을 가지는 송신의 성능 향상과 빠른 복호를 가능하게 하는 방법 및 장치
US20150229331A1 (en) * 2014-02-10 2015-08-13 Lsi Corporation Systems and Methods for Area Efficient Data Encoding

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4399536A (en) * 1981-10-02 1983-08-16 Bell Telephone Laboratories, Incorporated Convolution filter arrangement for digital multifrequency receiver
US4694407A (en) 1985-06-11 1987-09-15 Rca Corporation Fractal generation, as for video graphic displays
JPH0823883B2 (ja) 1987-07-02 1996-03-06 富士通株式会社 ビデオレート画像プロセッサ
CN1010437B (zh) * 1988-06-02 1990-11-14 清华大学 一种实时图象邻域处理器
EP0622741A3 (en) 1993-03-30 1998-12-30 KLICS, Ltd. Device and method for data compression/decompression
EP0644684B1 (en) 1993-09-17 2000-02-02 Eastman Kodak Company Digital resampling integrated circuit for fast image resizing applications
US5572532A (en) * 1993-12-29 1996-11-05 Zenith Electronics Corp. Convolutional interleaver and deinterleaver
US6539120B1 (en) 1997-03-12 2003-03-25 Matsushita Electric Industrial Co., Ltd. MPEG decoder providing multiple standard output signals
JP4033245B2 (ja) * 1997-09-02 2008-01-16 ソニー株式会社 ターボ符号化装置およびターボ符号化方法
US6088387A (en) * 1997-12-31 2000-07-11 At&T Corp. Multi-channel parallel/serial concatenated convolutional codes and trellis coded modulation encoder/decoder
US6573905B1 (en) 1999-11-09 2003-06-03 Broadcom Corporation Video and graphics system with parallel processing of graphics windows
US7058086B2 (en) 1999-05-26 2006-06-06 Xm Satellite Radio Inc. Method and apparatus for concatenated convolutional encoding and interleaving
JP3688959B2 (ja) * 1999-11-29 2005-08-31 株式会社東芝 パケット伝送システム
US7020827B2 (en) * 2001-06-08 2006-03-28 Texas Instruments Incorporated Cascade map decoder and method
JP3927776B2 (ja) 2001-06-25 2007-06-13 キヤノン株式会社 画像処理装置及びその処理方法
US7379105B1 (en) 2002-06-18 2008-05-27 Pixim, Inc. Multi-standard video image capture device using a single CMOS image sensor
US7397938B2 (en) 2003-08-13 2008-07-08 Siemens Medical Solutions Usa, Inc. Method and system for fast normalized cross-correlation between an image and a Gaussian for detecting spherical structures
US7266255B1 (en) 2003-09-26 2007-09-04 Sun Microsystems, Inc. Distributed multi-sample convolution
US7737994B1 (en) 2003-09-26 2010-06-15 Oracle America, Inc. Large-kernel convolution using multiple industry-standard graphics accelerators
KR100664178B1 (ko) * 2004-11-13 2007-01-04 엘지전자 주식회사 디지털 멀티미디어 방송 수신기의 채널 정보 갱신 방법
US20060215929A1 (en) 2005-03-23 2006-09-28 David Fresneau Methods and apparatus for image convolution
EP1958151B1 (en) * 2005-11-10 2014-07-30 DigitalOptics Corporation International Image enhancement in the mosaic domain
US8154636B2 (en) 2005-12-21 2012-04-10 DigitalOptics Corporation International Image enhancement using hardware-based deconvolution
US7701496B2 (en) 2006-12-22 2010-04-20 Xerox Corporation Color filter pattern for color filter arrays including a demosaicking algorithm
JP4442644B2 (ja) * 2007-06-15 2010-03-31 株式会社デンソー パイプライン演算装置
US20090077359A1 (en) 2007-09-18 2009-03-19 Hari Chakravarthula Architecture re-utilizing computational blocks for processing of heterogeneous data streams
US8824833B2 (en) 2008-02-01 2014-09-02 Omnivision Technologies, Inc. Image data fusion systems and methods
US8345984B2 (en) 2010-01-28 2013-01-01 Nec Laboratories America, Inc. 3D convolutional neural networks for automatic human action recognition
JP5813751B2 (ja) * 2010-04-18 2015-11-17 アイマックス ヨーロッパ ソシエテ アノニム プロジェクタによって投影される画像を生成する方法及び画像投影システム
WO2012108411A1 (ja) * 2011-02-10 2012-08-16 日本電気株式会社 符号化/復号化処理プロセッサ、および無線通信装置
JP2013207382A (ja) * 2012-03-27 2013-10-07 Nec Corp インタリーブ制御装置、インタリーブ処理装置及びインタリーブ処理方法
US8917952B2 (en) 2012-10-22 2014-12-23 Siemens Medical Solutions Usa, Inc. Parallel image convolution processing with SVD kernel data
WO2014094232A1 (en) 2012-12-18 2014-06-26 Intel Corporation Hardware convolution pre-filter to accelerate object detection
US8983188B1 (en) 2013-05-14 2015-03-17 Google Inc. Edge-aware smoothing in images
GB2516221A (en) * 2013-07-01 2015-01-21 Barco Nv Method and processor for streaming video processing
US9202144B2 (en) * 2013-10-30 2015-12-01 Nec Laboratories America, Inc. Regionlets with shift invariant neural patterns for object detection
US9392173B2 (en) 2013-12-13 2016-07-12 Adobe Systems Incorporated Image deblurring based on light streaks
US9832388B2 (en) 2014-08-04 2017-11-28 Nvidia Corporation Deinterleaving interleaved high dynamic range image by using YUV interpolation
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
CN104484658A (zh) * 2014-12-30 2015-04-01 中科创达软件股份有限公司 一种基于多通道卷积神经网络的人脸性别识别方法及装置
CN106033528A (zh) 2015-03-09 2016-10-19 富士通株式会社 从彩色文档图像中提取特定区域的方法和设备
US10268886B2 (en) 2015-03-11 2019-04-23 Microsoft Technology Licensing, Llc Context-awareness through biased on-device image classifiers
US20160328644A1 (en) 2015-05-08 2016-11-10 Qualcomm Incorporated Adaptive selection of artificial neural networks
US9582726B2 (en) 2015-06-24 2017-02-28 Qualcomm Incorporated Systems and methods for image processing in a deep convolution network
US9525427B1 (en) * 2015-09-11 2016-12-20 Tektronix, Inc. Test and measurement instrument including asynchronous time-interleaved digitizer using harmonic mixing and a linear time-periodic filter
US9858636B1 (en) * 2016-06-30 2018-01-02 Apple Inc. Configurable convolution engine
CN106530210B (zh) * 2016-10-31 2019-09-06 北京大学 基于阻变存储器件阵列实现并行卷积计算的设备和方法
CN108073549B (zh) * 2016-11-14 2021-04-27 耐能股份有限公司 卷积运算装置及方法
US10325342B2 (en) * 2017-04-27 2019-06-18 Apple Inc. Convolution engine for merging interleaved channel data
US10319066B2 (en) * 2017-04-27 2019-06-11 Apple Inc. Convolution engine with per-channel processing of interleaved channel data
US10176551B2 (en) * 2017-04-27 2019-01-08 Apple Inc. Configurable convolution engine for interleaved channel data

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6070263A (en) * 1998-04-20 2000-05-30 Motorola, Inc. Circuit for use in a Viterbi decoder
KR20060121312A (ko) * 2005-05-24 2006-11-29 엘지전자 주식회사 컨볼루션 터보 부호 인터리버
KR20090125080A (ko) * 2007-03-16 2009-12-03 삼성전자주식회사 다중 코드 블록을 가지는 송신의 성능 향상과 빠른 복호를 가능하게 하는 방법 및 장치
US20150229331A1 (en) * 2014-02-10 2015-08-13 Lsi Corporation Systems and Methods for Area Efficient Data Encoding

Also Published As

Publication number Publication date
GB202108888D0 (en) 2021-08-04
KR20200105984A (ko) 2020-09-09
US20200167889A1 (en) 2020-05-28
JP6705065B1 (ja) 2020-06-03
GB2584504A (en) 2020-12-09
CN110574026B (zh) 2021-02-26
CN112926726A (zh) 2021-06-08
US10176551B2 (en) 2019-01-08
US10685421B1 (en) 2020-06-16
JP2020144907A (ja) 2020-09-10
KR102163424B1 (ko) 2020-10-08
US20180315155A1 (en) 2018-11-01
JP2020522775A (ja) 2020-07-30
GB2592835B (en) 2022-03-02
US20190096026A1 (en) 2019-03-28
GB201915153D0 (en) 2019-12-04
WO2018200075A1 (en) 2018-11-01
GB2584504B (en) 2021-08-04
US10489880B2 (en) 2019-11-26
DE112018002228B4 (de) 2023-08-03
KR102352102B1 (ko) 2022-01-17
CN110574026A (zh) 2019-12-13
DE112018002228T5 (de) 2020-01-09
JP6961749B2 (ja) 2021-11-05
GB2592835A (en) 2021-09-08

Similar Documents

Publication Publication Date Title
KR102352102B1 (ko) 인터리빙된 채널 데이터를 위한 구성가능한 컨볼루션 엔진
US10325342B2 (en) Convolution engine for merging interleaved channel data
CN110637297B (zh) 卷积引擎、数据处理方法和电子设备
US10747843B2 (en) Configurable convolution engine
KR101965123B1 (ko) 병렬 컴퓨터 비전 및 이미지 스케일링 아키텍처
KR102512889B1 (ko) 이미지 융합 프로세싱 모듈
US11074678B2 (en) Biasing a noise filter to preserve image texture
KR20230124699A (ko) 이미지 데이터의 조합된 다운 샘플링 및 보정을 위한회로
US10375368B2 (en) Image data conversion
US9916637B1 (en) Splitting and merging subband image data

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent