KR20210036715A - 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법 - Google Patents

뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법 Download PDF

Info

Publication number
KR20210036715A
KR20210036715A KR1020190119090A KR20190119090A KR20210036715A KR 20210036715 A KR20210036715 A KR 20210036715A KR 1020190119090 A KR1020190119090 A KR 1020190119090A KR 20190119090 A KR20190119090 A KR 20190119090A KR 20210036715 A KR20210036715 A KR 20210036715A
Authority
KR
South Korea
Prior art keywords
pooling
kernel
sub
results
window
Prior art date
Application number
KR1020190119090A
Other languages
English (en)
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 KR1020190119090A priority Critical patent/KR20210036715A/ko
Priority to US16/826,373 priority patent/US11640538B2/en
Priority to CN202010263703.9A priority patent/CN112561045A/zh
Priority to EP20181380.5A priority patent/EP3798921A1/en
Publication of KR20210036715A publication Critical patent/KR20210036715A/ko
Priority to US18/186,163 priority patent/US20230229931A1/en

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/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions
    • 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
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Abstract

뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법은, 원본 풀링 커널로부터 분해된 복수의 서브 풀링 커널들로 풀링 연산을 수행함으로써 중간 풀링 결과들을 획득하고, 중간 풀링 결과들이 모두 획득된 경우 중간 풀링 결과들을 후처리함으로써 현재 윈도우에 대응하는 최종 풀링 결과를 획득하고, 최종 풀링 결과에 기초하여 출력 피처맵의 출력 픽셀 값을 결정한다.

Description

뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법 {Neural processing apparatus and method for processing pooling of neural network thereof}
뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법에 관한다.
뉴럴 네트워크는 컴퓨터 과학적 아키텍처(computational architecture)를 참조하여 구현된 컴퓨팅 시스템이다. 최근 뉴럴 네트워크 기술이 발전함에 따라, 다양한 종류의 전자 시스템에서 뉴럴 네트워크를 이용하여 입력 데이터를 분석하고 유효한 정보를 추출하는 연구가 활발히 진행되고 있다.
뉴럴 네트워크를 처리하는 장치는 복잡한 입력 데이터에 대한 많은 양의 연산을 필요로 한다. 뉴럴 네트워크의 데이터가 증가하고, 뉴럴 네트워크를 구성하는 아키텍처의 연결성이 복잡해짐에 따라 프로세싱 장치의 연산량 및 메모리 액세스 빈도의 과도한 증가가 초래되어, 소형화 및 상용화에 있어서의 비효율적인 성능이 나타날 수 있다. 따라서, 뉴럴 네트워크의 성능을 유지하면서 뉴럴 네트워크의 구현에 있어서 시스템 비용을 감소시키기 위한 다양한 처리 방법들이 연구되고 있다.
뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법을 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법은, 원본 풀링 커널로부터 분해된 복수의 서브 풀링 커널들로 입력 피처맵 내 풀링될 현재 윈도우에 포함된 입력 픽셀들에 대한 풀링 연산을 수행함으로써, 상기 서브 풀링 커널들 각각에 대응하는 중간 풀링 결과들을 획득하는 단계; 상기 현재 윈도우에 대한 상기 중간 풀링 결과들이 모두 획득된 경우, 상기 중간 풀링 결과들을 후처리함으로써 상기 현재 윈도우에 대응하는 최종 풀링 결과를 획득하는 단계; 및 상기 최종 풀링 결과에 기초하여 출력 피처맵의 출력 픽셀 값을 결정하는 단계를 포함하고, 상기 현재 윈도우는 상기 원본 풀링 커널이 상기 입력 피처맵에서 래스터 스캔 오더에 따라 슬라이딩됨에 따라 결정된다.
다른 측면에 따르면, 컴퓨터로 읽을 수 있는 기록매체는 상술한 방법을 실행하는 명령어들을 포함하는 하나 이상의 프로그램이 기록된 기록매체를 포함할 수 있다.
또 다른 측면에 따르면, 뉴럴 네트워크의 풀링을 처리하는 뉴럴 프로세싱 장치는, 메모리; 및 프로그램을 실행함으로써 상기 뉴럴 네트워크의 상기 풀링을 처리하는 적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는 원본 풀링 커널로부터 분해된 복수의 서브 풀링 커널들로 입력 피처맵 내 풀링될 현재 윈도우에 포함된 입력 픽셀들에 대한 풀링 연산을 수행함으로써, 상기 서브 풀링 커널들 각각에 대응하는 중간 풀링 결과들을 획득하고, 상기 현재 윈도우에 대한 상기 중간 풀링 결과들이 모두 획득된 경우, 상기 중간 풀링 결과들을 후처리함으로써 상기 현재 윈도우에 대응하는 최종 풀링 결과를 획득하고, 상기 최종 풀링 결과에 기초하여 출력 피처맵의 출력 픽셀 값을 결정하고, 상기 현재 윈도우는 상기 원본 풀링 커널이 상기 입력 피처맵에서 래스터 스캔 오더에 따라 슬라이딩됨에 따라 결정된다.
도 1은 일 실시예에 따른 뉴럴 네트워크의 아키텍처를 설명하기 위한 도면이다.
도 2는 뉴럴 네트워크의 풀링 레이어에서 수행되는 풀링 연산의 컨셉을 설명하기 위한 도면이다.
도 3은 풀링 연산을 수행하기 위한 서로 다른 풀링 타입들을 설명하기 위한 도면이다.
도 4는 일 실시예에 따른 뉴럴 네트워크의 풀링을 처리하는 뉴럴 프로세싱 장치의 하드웨어 구성을 도시한 블록도이다.
도 5는 일 실시예에 따라 풀링 연산을 수행하기 위하여 풀링 커널로부터 분해된 서브 풀링 커널들을 설명하기 위한 도면이다.
도 6은 일 실시예에 따라 원본 풀링 커널로부터 분해된 서브 풀링 커널들을 이용하여 맥스 풀링(MaxPool)을 수행하는 방법에 대해 설명하기 위한 도면이다.
도 7은 일 실시예에 따라 원본 풀링 커널로부터 분해된 서브 풀링 커널들을 이용하여 에버리지 풀링(AvgPool)을 수행하는 방법에 대해 설명하기 위한 도면이다.
도 8은 일 실시예에 따라 프로세서 및 메모리의 쉐어 라인 버퍼에서 서브 풀링 커널을 이용한 풀링 연산을 처리하는 방법을 설명하기 위한 도면이다.
도 9는 일 실시예에 따라 풀링 데이터를 업데이트하고 풀링 데이터로부터 출력 피처맵을 생성하는 것을 설명하기 위한 도면이다.
도 10은 일 실시예에 따라 뉴럴 네트워크의 풀링 알고리즘을 설명하기 위한 흐름도이다.
도 11은 일 실시예에 따라 현재 입력 픽셀의 수신에 의해 쉐어 라인 버퍼 상의 풀링 데이터가 업데이트되는 것을 설명하기 위한 도면이다.
도 12는 일 실시예에 따라 쉐어 라인 버퍼에 저장된 중간 풀링 결과들을 후처리함으로써 최종 풀링 결과를 획득하는 것을 설명하기 위한 도면이다.
도 13은 일 실시예에 따라 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법의 흐름도이다.
실시예들에서 사용되는 용어는 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 명세서에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 명세서의 전반에 걸친 내용을 토대로 정의되어야 한다.
본 실시예들에서 사용되는 “구성된다” 또는 “포함한다” 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 또는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
아래에서는 첨부한 도면을 참고하여 실시예에 대하여 상세히 설명한다. 그러나 실시예는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 예에 한정되지 않는다.
도 1은 일 실시예에 따른 뉴럴 네트워크의 아키텍처를 설명하기 위한 도면이다.
도 1을 참고하면, 뉴럴 네트워크(1)는 딥 뉴럴 네트워크(Deep Neural Network, DNN) 또는 n-계층 뉴럴 네트워크(n-layers neural networks)의 아키텍처일 수 있다. DNN 또는 n-계층 뉴럴 네트워크는 컨볼루션 뉴럴 네트워크(Convolution Neural Network, CNN), 리커런트 뉴럴 네트워크(Recurrent Neural Network, RNN), Deep Belief Network, Restricted Boltzman Machine 등에 해당될 수 있다. 예를 들어, 뉴럴 네트워크(1)는 컨볼루션 뉴럴 네트워크(CNN)로 구현될 수 있으나, 뉴럴 네트워크(1)의 종류는 이에 제한되지 않는다.
뉴럴 네트워크(1)는 입력 이미지, 피처맵들(feature maps) 및 출력을 포함하는 복수 레이어들을 갖는 컴퓨팅 아키텍처로 구현될 수 있다. 뉴럴 네트워크(1)에서 입력 이미지는 웨이트 커널(weight kernel)이라 불리는 필터와의 컨볼루션 연산이 수행되고, 그 결과로서 출력 피처맵들이 출력될 수 있다. 이때 생성된 출력 피처맵들은 다음 레이어의 입력 피처맵들로서 다시 커널과의 컨볼루션 연산이 수행되고, 새로운 출력 피처맵들이 출력된다. 이와 같은 컨볼루션 연산이 반복적으로 수행된 결과, 최종적으로는 뉴럴 네트워크(1)를 통한 입력 이미지의 특징들에 대한 인식 결과가 출력될 수 있다.
예를 들어, 도 1의 뉴럴 네트워크(1)에 24x24 픽셀 크기의 이미지가 입력된 경우, 입력 이미지는 커널과의 컨볼루션 연산을 통해 20x20 픽셀 크기를 갖는 4채널의 피처맵들로 출력될 수 있다. 이후에도, 20x20 피처맵들은 커널과의 반복적인 컨볼루션 연산을 통해 크기가 줄어들면서, 최종적으로는 1x1 픽셀 크기의 특징들이 출력될 수 있다. 여기서, 뉴럴 네트워크(1)는 여러 레이어들에서 컨볼루션 연산 및 풀링 연산(pooling operation)(또는 서브-샘플링)을 반복적으로 수행함으로써 입력 이미지로부터 이미지 전체를 대표할 수 있는 강인한 특징들을 필터링하여 출력하고, 출력된 최종 특징들을 통해 입력 이미지의 인식 결과를 도출할 수 있다.
한편, 풀링 연산을 수행하는 풀링 레이어는 일반적으로 컨볼루션 레이어 뒤에 배치될 수 있다. 풀링 레이어의 풀링 연산은, 이전 컨볼루션 레이어의 출력 피처맵의 크기(예를 들어, 로우 x 컬럼(row x column))를 줄임으로써 다음 컨볼루션 레이어에 대한 계산적 오버헤드(computational overhead)를 감소시킬 수 있는 처리이다.
이하의 본 실시예들에서는 풀링 레이어에서 입력 피처맵에 대하여 효과적으로 풀링 연산을 수행하는 방법에 대하여 구체적으로 설명하도록 한다.
도 2는 뉴럴 네트워크의 풀링 레이어에서 수행되는 풀링 연산의 컨셉을 설명하기 위한 도면이다.
도 2를 참고하면, 입력 피처맵(21)은 10x9 크기(로우 x 컬럼)이고, 입력 피처맵(21)에 대하여 풀링 연산을 수행하는 풀링 커널(22)(또는 풀링 윈도우라고도 함)은 3x3 크기인 것으로 가정한다. 그리고, 풀링 커널(22)이 입력 피처맵(21)을 슬라이딩하는 정도를 나타내는 스트라이드(stride)는 1인 것으로 가정한다. 다만, 풀링 연산의 하이퍼파라미터(hyper-parameter)(풀링 커널(22)의 크기, 스트라이드, 풀링 타입 등)는 도 2에서 가정된 것에 제한되지 않고, 다양하게 변경될 수 있다.
풀링 커널(22)은 입력 피처맵(21)의 10x9 픽셀들에 대하여 3x3 크기의 윈도우(픽셀 그룹, 블록 또는 스캔 윈도우라고도 지칭함) 단위로 슬라이딩되면서 풀링 연산을 수행한다. 예를 들어, 슬라이딩의 순서는 입력 피처맵(21)에 대한 래스터 스캔 오더(raster scan order)에 의존할 수 있다. 입력 피처맵(21)에 대한 래스터 스캔 오더는 입력 피처맵(21)의 1행 1열의 픽셀부터 시작되어 1행의 픽셀들이 차례로 처리되고, 다음의 2행 내지 10행의 픽셀들이 처리되고, 마지막으로 10행 9열의 픽셀이 처리되는 순서를 의미할 수 있다.
입력 피처맵(21) 내 현재 순서의 윈도우에 매핑된 풀링 커널(22)에 대응하는 픽셀들이 래스터 스캔 오더에 의해 모두 스캐닝된 경우, 풀링 커널(22)은 해당 픽셀들에 대한 풀링 연산을 수행한다. 예를 들어, 입력 피처맵(21) 내 윈도우(210)에 매핑된 풀링 커널(22)에 의한 풀링 연산은, 래스터 스캔 오더에 따라 윈도우(210)에 포함된 픽셀들이 모두 스캐닝된 경우 해당 픽셀들의 값들을 이용하여 수행될 수 있다. 또한, 윈도우(220) 및 윈도우(230) 각각에 대한 풀링 연산은 래스터 스캔 오더에 따라 윈도우(220) 및 윈도우(230) 각각에 포함된 픽셀들이 모두 스캐닝되었을 때, 수행될 수 있다.
도 2에서는 설명의 편의를 위하여 일부의 윈도우들(210, 220, 230)만이 도시되었다. 도시된 윈도우들(210, 220, 230) 및 도시되지 않은 다른 윈도우들에 대한 풀링 커널(22)의 슬라이딩은 풀링 커널(22)의 크기, 스트라이드에 기초하여 수행될 수 있다.
한편, 이와 같은 방식으로, 풀링 커널(22)에 의한 입력 피처맵(21)의 풀링 연산이 수행됨으로써 풀링 결과들이 획득될 수 있고, 각각의 풀링 결과들은 출력 피처맵의 각각의 출력 픽셀들에 대응한다.
도 3은 풀링 연산을 수행하기 위한 서로 다른 풀링 타입들을 설명하기 위한 도면이다.
도 3을 참고하면, 풀링 타입에 대한 설명의 편의를 위하여, 입력 피처맵(31)은 4x4 크기이고, 풀링 커널(32)은 2x2 크기이고, 스트라이드는 2인 것으로 가정한다.
풀링 커널(32)에 매핑된 윈도우의 픽셀들에 대한 풀링 연산은 맥스 풀링(max pooling)의 풀링 타입, 에버리지 풀링(average pooling)의 풀링 타입에 기초한 연산일 수 있다. 또한, 이에 제한되지 않고 도 3에서 설명된 바와 다른 풀링 타입에 따라 풀링 연산이 수행될 수도 있다.
먼저, 맥스 풀링에 대해 설명하도록 한다. 맥스 풀링은 풀링 커널(32)에 매핑된 입력 피처맵(31)의 픽셀들의 최대값을 획득함으로써 풀링 연산을 수행하는 것을 의미한다.
구체적으로, 풀링 커널(32)이 입력 피처맵(31)의 좌상 영역(upper left)의 2x2 윈도우에 포함된 4개 픽셀들에 매핑된 경우, 풀링 커널(32)은 좌상 영역에 포함된 "12", "20", "8", "12"의 픽셀 값들 중에서 최대값인 "20"을 좌상 윈도우에 대응하는 풀링 결과로서 획득한다. 또한, 풀링 커널(32)은 입력 피처맵(31) 내 우상(upper right) 2x2 윈도우, 좌하(lower left) 2x2 윈도우 및 우하(lower right) 2x2 윈도우 각각에 대한 맥스 풀링을 수행함으로써, 각 윈도우에서의 최대값들인 "30", "112", "37"를 각 윈도우에 대응하는 풀링 결과들로서 획득한다. 입력 피처맵(31)에 대한 맥스 풀링의 풀링 결과들 "20", "30", "112", "37"은, 출력 피처맵(310)의 출력 픽셀들의 픽셀 값들에 대응한다.
다음으로, 에버리지 풀링에 대해 설명하도록 한다. 에버리지 풀링은 풀링 커널(32)에 매핑된 입력 피처맵(31)의 픽셀들의 평균을 획득함으로써 풀링 연산을 수행하는 것을 의미한다.
풀링 커널(32)이 입력 피처맵(31)의 좌상 영역(upper left)의 2x2 윈도우에 포함된 4개 픽셀들에 매핑된 경우, 풀링 커널(32)은 좌상 영역에 포함된 "12", "20", "8", "12"의 픽셀 값들의 평균인 "13"을 좌상 윈도우에 대응하는 풀링 결과로서 획득한다. 또한, 풀링 커널(32)은 입력 피처맵(31) 내 우상(upper right) 2x2 윈도우, 좌하(lower left) 2x2 윈도우 및 우하(lower right) 2x2 윈도우 각각에 대한 에버리지 풀링을 수행함으로써, 각 윈도우에서의 평균들인 "9", "79", "19.5"를 각 윈도우에 대응하는 풀링 결과들로서 획득한다. 입력 피처맵(31)에 대한 에버리지 풀링의 풀링 결과들 "13", "9", "79", "19.5"는, 출력 피처맵(320)의 출력 픽셀들의 픽셀 값들에 대응한다.
즉, 동일한 풀링 커널(32)에 의한 풀링 연산이라 할지라도, 풀링 연산에 이용되는 풀링 타입에 따라 생성된 출력 피처맵은 상이할 수 있다. 풀링 타입은 앞서 설명된 하이퍼파라미터로서 뉴럴 네트워크의 실행을 위하여 미리 정의될 수 있다.
도 4는 일 실시예에 따른 뉴럴 네트워크의 풀링을 처리하는 뉴럴 프로세싱 장치의 하드웨어 구성을 도시한 블록도이다.
도 4를 참고하면, 뉴럴 프로세싱 장치(100)는 프로세서(110) 및 메모리(120)를 포함한다. 도 4에 도시된 뉴럴 프로세싱 장치(100)에는 본 실시예들와 관련된 구성요소들만이 도시되어 있다. 따라서, 뉴럴 프로세싱 장치(100)에는 도 4에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음은 당업자에게 자명하다.
뉴럴 프로세싱 장치(100)는 뉴럴 네트워크를 실행하는 컴퓨팅 디바이스에 해당된다. 예를 들어, 뉴럴 프로세싱 장치(100)는 PC(personal computer), 서버 디바이스, 모바일 디바이스 등에 해당되거나 또는 이와 같은 디바이스들 내에서 뉴럴 네트워크 연산을 수행하기 위한 가속기(accelerator)에 해당될 수 있다. 나아가서, 뉴럴 프로세싱 장치(100)는 뉴럴 네트워크를 이용한 음성 인식, 영상 인식 등을 수행하는 자율주행 자동차, 로보틱스, 스마트폰, 태블릿 디바이스, AR(Augmented Reality) 디바이스, IoT(Internet of Things) 디바이스 등에 구비된 장치일 수 있으나, 뉴럴 프로세싱 장치(100)는 이에 제한되지 않고 다양한 종류의 디바이스들이나 또는 이와 같은 디바이스들 내에서 뉴럴 네트워크 연산을 수행하기 위한 프로세싱 장치에 해당될 수 있다.
프로세서(110)는 뉴럴 프로세싱 장치(100)의 동작들을 제어하기 위한 전반적인 제어 기능들을 수행하는 하드웨어 구성이다. 예를 들어, 프로세서(110)는 뉴럴 프로세싱 장치(100) 내의 메모리(120)에 저장된 프로그램들 및/또는 데이터를 처리 또는 실행함으로써, 뉴럴 프로세싱 장치(100)를 전반적으로 제어할 수 있다. 프로세서(110)는 뉴럴 프로세싱 장치(100) 내에 구비된 CPU(central processing unit), GPU(graphics processing unit), AP(application processor), NPU(neural processing unit), TPU(tensor processing unit) 등으로 구현될 수 있으나, 이에 제한되지 않는다.
메모리(120)는 프로세서(110) 내에서 처리되거나 처리될 각종 뉴럴 네트워크 데이터들을 저장하는 하드웨어이다. 예를 들어, 메모리(120)는 뉴럴 네트워크에서 처리된 입력/출력 피처맵 데이터들, 컨볼루션 데이터 데이터들, 풀링 데이터들 등을 저장할 수 있다. 또한, 메모리(120)는 프로세서(110)에 의해 구동될 다양한 애플리케이션들, 예를 들어 컨볼루션 처리 애플리케이션, 풀링 처리 애플리케이션 등을 저장할 수 있다.
메모리(120)는 RAM(Random Access Memory), ROM (Read Only Memory), HDD(Hard Disk Drive), SSD(Solid State Drive), CF(compact flash), SD(secure digital), Micro-SD(micro secure digital), Mini-SD(mini secure digital), xD(extreme digital), Memory Stick 등의 메모리 디바이스에 해당할 수 있고, 메모리(120)의 종류는 여기에 제한되지 않고 다양할 수 있다.
메모리(120)는 프로세서(110)에 의한 뉴럴 네트워크 처리를 위한 온-칩 메모리로서, 쉐어 라인 버퍼(Share Line Buffer)(125)를 포함할 수 있다. 쉐어 라인 버퍼(125)는 프로세서(110)와의 고속 액세스를 위하여 DRAM (Dynamic RAM), SRAM (Static RAM)으로 구현될 수 있으나, 이에 제한되지 않는다. 또한, "쉐어 라인 버퍼"의 용어는 다른 용어들로 다양하게 변경되어 지칭될 수 있다. 한편, 메모리(120)는 쉐어 라인 버퍼(125) 외에도 다른 목적의 버퍼링을 위한 다른 버퍼들이 추가적으로 포함될 수 있다.
프로세서(110)는 뉴럴 네트워크의 컨볼루션 및 풀링을 수행하기 위한 다양한 연산들을 처리하기 위한, 적어도 하나의 프로세서 코어(processor core)로 구현될 수 있다. 구체적으로, 프로세서(110)는 뉴럴 네트워크의 레이어들에서의 입력 피처맵 및 커널 웨이트 간의 컨볼루션 연산을 수행하여 출력 피처맵을 생성하고, 생성된 출력 피처맵에 대한 풀링 연산을 수행하여 다음 레이어를 위한 입력 피처맵을 생성할 수 있다. 이 밖에도, 프로세서(110)는 뉴럴 네트워크의 실행을 위한 다양한 연산들을 수행할 수 있다.
한편, 프로세서(110)는 풀링 연산을 수행할 때, 입력 피처맵의 입력 픽셀 값들, 처리된 풀링 결과 등과 같은 풀링 데이터를 메모리(120)의 쉐어 라인 버퍼(125)로부터 리드(read)하거나, 쉐어 라인 버퍼(125)에 이미 저장된 풀링 데이터를 업데이트하거나, 또는 쉐어 라인 버퍼(125)에 풀링 데이터를 라이트(write)할 수 있다. 즉, 쉐어 라인 버퍼(125)는 프로세서(110)의 풀링 데이터를 임시 저장하기 위한 메모리 수단일 수 있다.
이하에서는, 본 실시예들에 따라 뉴럴 프로세싱 장치(100)의 프로세서(110) 및 메모리(120)가 뉴럴 네트워크의 풀링을 수행하는 방법에 대해 상세히 설명하도록 한다.
도 5는 일 실시예에 따라 풀링 연산을 수행하기 위하여 풀링 커널로부터 분해된 서브 풀링 커널들을 설명하기 위한 도면이다.
도 5를 참고하면, 원본 풀링 커널(50)은 3x3 크기인 것으로 가정하고, 분해(decompose)되기 전 풀링 커널에 대해서는 "원본"이라는 용어로 지칭하도록 한다. 다만, 원본 풀링 커널의 크기는 이에 제한되지 않고 다양할 수 있으며, 다른 크기의 원본 풀링 커널이라 할지라도 이하에서 설명될 서브 풀링 커널들의 분해 방식은 동일하게 적용될 수 있다.
프로세서(110)는 풀링 연산을 수행하기 위하여, 원본 풀링 커널(50)을 복수의 서브 풀링 커널들(sub-pooling kernels)(510, 520, 530)로 분해한다. 서브 풀링 커널들(510, 520, 530) 각각은 원본 풀링 커널(50)의 각 로우(row) 엘리먼트들로 구성된 1차원(1D) 커널일 수 있다. 본 실시예들에서는 앞서 설명된 래스터 스캔 오더에 따라 서브 풀링 커널들(510, 520, 530)은 원본 풀링 커널(50)의 각 로우 엘리먼트들로 분해되는 것으로 설명하였으나, 이와 달리 앞서 설명된 바와 다른 방식의 래스터 스캔 오더로 입력 피처맵 내 픽셀들의 스캔이 수행되는 경우에는 서브 풀링 커널은 원본 풀링 커널(50)로부터 다른 방향(예를 들어, 컬럼(column) 방향)의 엘리먼트들로 분해된 것일 수도 있다. 즉, 서브 풀링 커널의 분해 방향은 래스터 스캔 오더의 방식에 의존하여 달라질 수 있다.
원본 풀링 커널(50)로부터 분해된 서브 풀링 커널들(510, 520, 530)의 개수는 원본 풀링 커널(50)의 높이(height)에 대응한다. 도 5에 도시된 원본 풀링 커널(50)의 높이는 3이므로, 서브 풀링 커널들(510, 520, 530)의 개수도 3개이다.
서브 풀링 커널(510)의 엘리먼트들은 원본 풀링 커널(50)의 1번째 로우의 엘리먼트들에 대응하고, 서브 풀링 커널(520)의 엘리먼트들은 원본 풀링 커널(50)의 2번째 로우의 엘리먼트들에 대응하고, 서브 풀링 커널(530)의 엘리먼트들은 원본 풀링 커널(50)의 3번째 로우의 엘리먼트들에 대응한다.
프로세서(110)는 서브 풀링 커널들(510, 520, 530) 각각으로 별개의 풀링 연산들을 수행하여 중간 풀링 결과들(intermediate pooling results)을 개별적으로 획득한다. 그리고 나서, 프로세서(110)는 중간 풀링 결과들을 병합하여(merge) 최종 풀링 결과(final pooling results)를 출력할 수 있다. 즉, 본 실시예들에 따르면, 풀링 연산은 원본 풀링 커널 단위 대신에, 서브 풀링 커널 단위로 수행될 수 있다. 본 실시예들에서, "중간 풀링 결과"의 용어는 어느 서브 풀링 커널에 의해 획득된 일부 풀링 데이터이고, "최종 풀링 결과"의 용어는 복수의 중간 풀링 결과들로부터 획득된 어느 윈도우에 대응하는 최종 풀링 데이터를 지칭하는 것으로 정의된다.
도 6은 일 실시예에 따라 원본 풀링 커널로부터 분해된 서브 풀링 커널들을 이용하여 맥스 풀링(MaxPool)을 수행하는 방법에 대해 설명하기 위한 도면이다.
도 6을 참고하면, 4x4 크기의 입력 피처맵(60)은 3x3 원본 풀링 커널(610)로부터 분해된 3개의 1x3 서브 풀링 커널들(611, 612, 613)에 의해 맥스 풀링(MaxPool) 연산이 수행될 수 있다. 한편, 도 6의 풀링 연산에 있어서, 스트라이드는 1인 것으로 가정한다.
프로세서(110)는 원본 풀링 커널(610)로부터 분해된 복수의 서브 풀링 커널들(611, 612, 613)로 입력 피처맵(60) 내 풀링될 현재 윈도우에 포함된 입력 픽셀들에 대한 풀링 연산을 수행함으로써, 서브 풀링 커널들(611, 612, 613) 각각에 대응하는 중간 풀링 결과들(65)을 획득한다.
프로세서(110)는 현재 윈도우에 대한 중간 풀링 결과들(65)이 모두 획득된 경우, 중간 풀링 결과들(65)을 후처리함으로써 현재 윈도우에 대응하는 최종 풀링 결과를 획득한다. 프로세서(110)는 최종 풀링 결과에 기초하여 출력 피처맵(67)의 출력 픽셀 값을 결정한다.
구체적으로, 현재 윈도우가 입력 피처맵(60)의 1번째 윈도우인 경우, 서브 풀링 커널(611)은 1번째 윈도우에 포함된 1번째 로우의 입력 픽셀들에 매핑된다. 프로세서(110)는 1번째 로우의 입력 픽셀들의 값들("9", "5", "4") 중 최대값 "9"을 결정하여, 이를 서브 풀링 커널(611)에 대응하는 중간 풀링 결과로서 획득한다. 또한, 프로세서(110)는 2번째 로우의 입력 픽셀들의 값들("1", "6", "8") 중 최대값 "8"을 결정하고, 3번째 로우의 입력 픽셀들의 값들("2", "3", "7") 중 최대값 "7"을 결정하여, 이 최대값들을 서브 풀링 커널들(612, 613)에 대응하는 중간 풀링 결과들로서 획득한다. 즉, 1번째 윈도우에 매핑된 서브 풀링 커널들(611, 612, 613)에 의해 획득된 중간 풀링 결과들(620)은, ("9", "8", "7")의 엘리먼트들이다.
프로세서(110)는 현재 윈도우(1번째 윈도우)에 대한 중간 풀링 결과들(620)이 모두 획득된 경우, 중간 풀링 결과들(620)을 후처리(postprocessing)함으로써 현재 윈도우(1번째 윈도우)에 대응하는 최종 풀링 결과를 획득한다. 도 6에서 설명되는 풀링 타입은 맥스 풀링(MaxPool)이므로, 프로세서(110)는 중간 풀링 결과들(620)의 최대값 "9" (=Max(9,8,7))를 결정함으로써 후처리를 수행할 수 있다. 프로세서(110)는 최종 풀링 결과 "9"에 기초하여 현재 윈도우(1번째 윈도우)에 대응하는 출력 피처맵(67)의 출력 픽셀 값 "9"를 결정한다.
다음으로, 래스터 스캔 오더에 따라 현재 윈도우가 입력 피처맵(60)의 3번째 윈도우에 대응하는 경우, 서브 풀링 커널들(611, 612, 613) 각각은 3번째 윈도우에 포함된 1번째 내지 3번째 로우들의 입력 픽셀들에 각각 매핑된다. 프로세서(110)는 로우들 각각에 대한 최대값들("8", "7", "1")을 결정하여, 이를 서브 풀링 커널들(611, 612, 613)에 대응하는 중간 풀링 결과들(630)의 엘리먼트들("8", "7", "1")로서 획득한다.
프로세서(110)는 현재 윈도우(3번째 윈도우)에 대한 중간 풀링 결과들(630)이 모두 획득된 경우 중간 풀링 결과들(630)의 최대값 "8" (=Max(8,7,1))을 최종 풀링 결과로서 결정하는 후처리를 수행하고, 최종 풀링 결과 "8"에 기초하여 현재 윈도우(3번째 윈도우)에 대응하는 출력 피처맵(67)의 출력 픽셀 값 "8"를 결정한다.
도 6에서는 입력 피처맵(60)의 일부 윈도우들(1번째 윈도우 및 3번째 윈도우)에 대한 풀링 연산이 수행되는 방법에 대해서만 설명되었으나, 프로세서(110)는 이와 동일한 방식으로 나머지 윈도우들에 대해서도 풀링 연산을 수행하고, 최종적으로 출력 피처맵(67)의 출력 픽셀들의 값들을 획득할 수 있다.
즉, 본 실시예들의 풀링 연산에 따르면, 프로세서(110)는 3x3 원본 풀링 커널이 예를 들어, (a, b, c, d, e, f, g, h, i)의 엘리먼트들을 포함하는 경우, 아래 수학식 1을 이용하여 풀링 연산이 수행될 수 있다.
[수학식 1]
Pool(a, b, c, d, e, f, g, h, i) = Pool(Pool(a, b, c), Pool(d, e, f), Pool(g, h, i))
즉, 프로세서(110)는, (a, b, c)의 엘리먼트들을 포함하는 서브 풀링 커널, (d, e, f)의 엘리먼트들을 포함하는 서브 풀링 커널, 및 (g, h, i)의 엘리먼트들을 포함하는 서브 풀링 커널 별로 중간 풀링 연산들을 수행하고, 중간 풀링 결과들에 대해 후처리 풀링 연산을 수행함으로써, 최종 풀링 결과를 획득한다. 도 6에서 설명된 맥스 풀링의 실시예에 따르면, Pool 연산자는 Max 연산자일 수 있다.
한편, 현재 윈도우가 입력 피처맵(60)의 1번째 윈도우인 경우 서브 풀링 커널들(612, 613)은, 현재 윈도우가 입력 피처맵(60)의 3번째 윈도우인 경우 서브 풀링 커널들(611, 612)과 입력 피처맵(60)의 동일한 입력 픽셀들에 대한 풀링 연산을 수행한다. 따라서, 1번째 윈도우에 매핑된 서브 풀링 커널들(612, 613)에 의해 수행된 중간 풀링 결과들은, 3번째 윈도우에 매핑된 서브 풀링 커널들(611, 612)의 중간 풀링 결과들로서 재사용될 수 있다. 입력 피처맵의 서로 다른 윈도우들에서 중첩되는 입력 픽셀들에 대한 풀링 연산의 처리에 대해서는 이하 해당 도면들에서 상세하게 설명하도록 한다.
한편, 이하의 본 실시예들에 대한 설명들에서 풀링 타입에 대한 별도의 설명이 없을지라도, 이하의 본 실시예들은 맥스 풀링(MaxPool)의 풀링 타입, 에버리지 풀링(AvgPool)의 풀링 타입, 또는 다른 방식의 풀링 타입들에 대해서도 적용되어 구현될 수 있다.
도 7은 일 실시예에 따라 원본 풀링 커널로부터 분해된 서브 풀링 커널들을 이용하여 에버리지 풀링(AvgPool)을 수행하는 방법에 대해 설명하기 위한 도면이다.
도 7을 참고하면, 4x4 크기의 입력 피처맵(70)은 3x3 원본 풀링 커널(710)로부터 분해된 3개의 1x3 서브 풀링 커널들(711, 712, 713)에 의해 에버리지 풀링(AvgPool) 연산이 수행될 수 있다. 한편, 도 7의 풀링 연산에 있어서, 스트라이드는 1인 것으로 가정한다.
입력 피처맵(70)에 대하여 원본 풀링 커널(710)로부터 분해된 서브 풀링 커널들(711, 712, 713)로 풀링 연산을 수행하는 방식은 도 6에서 설명한 바와 유사할 수 있다. 다만, 도 7의 에버리지 풀링(AvgPool)은 도 6의 맥스 풀링(MaxPool)과 비교하여, 중간 풀링 결과를 획득하는 방법 및 최종 풀링 결과를 획득하는 방법에 있어서 차이가 있다.
구체적으로, 현재 윈도우가 입력 피처맵(70)의 1번째 윈도우인 경우, 프로세서(110)는 서브 풀링 커널(711)에 매핑된 1번째 윈도우에 포함된 1번째 로우의 입력 픽셀들의 값들("1", "2", "0")을 합산하고, 합 "3" (=1+2+0)을 서브 풀링 커널(711)에 대응하는 중간 풀링 결과로서 획득한다. 즉, 에버리지 풀링(AvgPool)에 따른 중간 풀링 결과의 산출 방식은, 맥스 풀링(MaxPool)에 따른 중간 풀링 결과의 산출 방식과 상이하다.
마찬가지로, 프로세서(110)는 서브 풀링 커널(712)에 매핑된 2번째 로우의 입력 픽셀들의 값들("3", "2", "1")의 합 "6" (=3+2+1)과, 서브 풀링 커널(713)에 매핑된 3번째 로우의 입력 픽셀들의 값들("0", "0", "0)의 합 "0" (=0+0+0)을 각각 서브 풀링 커널들(712, 713)에 대응하는 중간 풀링 결과들로서 획득한다. 즉, 1번째 윈도우에 매핑된 서브 풀링 커널들(711, 712, 713)에 의해 획득된 중간 풀링 결과들(720)은, ("3", "6", "0")의 엘리먼트들이다.
프로세서(110)는 현재 윈도우(1번째 윈도우)에 대한 중간 풀링 결과들(720)이 모두 획득된 경우, 중간 풀링 결과들(720)을 후처리함으로써 현재 윈도우(1번째 윈도우)에 대응하는 최종 풀링 결과를 획득한다. 도 7에서 설명되는 풀링 타입은 에버리지 풀링(AvgPool)이므로, 프로세서(110)는 중간 풀링 결과들(720) "3", "6", "0"을 합산하고, 합 "9" (=3+6+0)를 원본 풀링 커널(710)의 크기 3x3(=9)로 나누는 후처리를 수행한다. 이에 따라, 프로세서(110)는 최종 풀링 결과 "1" (=9/9)에 기초하여 현재 윈도우(1번째 윈도우)에 대응하는 출력 피처맵(77)의 출력 픽셀 값 "1"을 결정한다.
유사하게, 현재 윈도우가 입력 피처맵(70)의 3번째 윈도우인 경우, 프로세서(110)는 각각의 서브 풀링 커널들(711, 712, 713)에 매핑된 입력 픽셀들에 대한 중간 풀링 연산을 수행함으로써, 중간 풀링 결과들(730) ("6", "0", "3")의 엘리먼트들을 획득한다.
프로세서(110)는 현재 윈도우(1번째 윈도우)에 대한 중간 풀링 결과들(730)이 모두 획득된 경우, 중간 풀링 결과들(730) "6", "0", "3"을 합산하고, 합 "9" (=6+0+3)를 원본 풀링 커널(710)의 크기 3x3(=9)로 나누는 후처리를 수행한다. 이에 따라, 프로세서(110)는 최종 풀링 결과 "1" (=9/9)에 기초하여 현재 윈도우(3번째 윈도우)에 대응하는 출력 피처맵(77)의 출력 픽셀 값 "1"을 결정한다.
도 7에서는 입력 피처맵(70)의 일부 윈도우들(1번째 윈도우 및 3번째 윈도우)에 대한 풀링 연산이 수행되는 방법에 대해서만 설명되었으나, 프로세서(110)는 이와 동일한 방식으로 나머지 윈도우들에 대해서도 풀링 연산을 수행하고, 최종적으로 출력 피처맵(77)의 출력 픽셀들의 값들을 획득할 수 있다.
즉, 본 실시예들의 풀링 연산에 따르면, 프로세서(110)는 3x3 원본 풀링 커널이 예를 들어, (a, b, c, d, e, f, g, h, i)의 엘리먼트들을 포함하는 경우, 앞서 설명된 수학식 1을 이용하여 풀링 연산이 수행될 수 있다. 다만, 도 6에서와 달리, 중간 풀링 결과를 계산하는 Pool 연산자는 Sum 연산자(또는 Add 연산자)이고, 최종 풀링 결과를 계산하는 Pool 연산자는 Average 연산자일 수 있다.
한편, 도 6에서와 마찬가지로, 현재 윈도우가 입력 피처맵(70)의 1번째 윈도우인 경우 서브 풀링 커널들(712, 713)은, 현재 윈도우가 입력 피처맵(70)의 3번째 윈도우인 경우 서브 풀링 커널들(711, 712)과 입력 피처맵(70)의 동일한 입력 픽셀들에 대한 풀링 연산을 수행한다. 따라서, 1번째 윈도우에 매핑된 서브 풀링 커널들(712, 713)에 의해 수행된 중간 풀링 결과들은, 3번째 윈도우에 매핑된 서브 풀링 커널들(711, 712)의 중간 풀링 결과들로서 재사용될 수 있다. 입력 피처맵의 서로 다른 윈도우들에서 중첩되는 입력 픽셀들에 대한 풀링 연산의 처리에 대해서는 이하 해당 도면들에서 상세하게 설명하도록 한다.
도 6 및 도 7에서는 설명의 편의를 위하여, 4x4 입력 피처맵, 3x3 원본 풀링 커널, stride 1인 것으로 가정하여 설명되었으나, 도 6 및 도 7에서 설명된 풀링 연산들은 다른 크기의 입력 피처맵, 다른 크기의 원본 풀링 커널, 다른 값의 스트라이드인 경우에 대해서도 동일한 방식으로 용이하게 적용될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
도 8은 일 실시예에 따라 프로세서 및 메모리의 쉐어 라인 버퍼에서 서브 풀링 커널을 이용한 풀링 연산을 처리하는 방법을 설명하기 위한 도면이다.
도 8을 참고하면, 3x3 원본 풀링 커널(810)은 3x1 서브 풀링 커널들(811, 812, 813)로 분해되고, 서브 풀링 커널들(811, 812, 813)을 이용하여 입력 피처맵(820)에 대한 풀링 연산이 수행된다. 다만, 본 실시예들에서 커널들(810, 811, 812, 813) 및 입력 피처맵(820)의 크기들은 도 8에 도시된 바에 의해 제한되지 않고, 다양하게 변경될 수 있다.
프로세서(110)는 풀링 연산과 관련된 산술 연산을 수행하는 적어도 하나의 ALU(Arithmetic Logic Unit)(110-1, 110-2)를 포함한다. 설명의 편의를 위하여, 도 8에서는 2개의 ALU들(110-1, 110-2)가 도시되었으나, 프로세서(110) 내에서 ALU들은 서로 동일한 것에 해당될 수 있고, 또는 프로세서(110) 내에는 더 많은 ALU들이 구비될 수도 있다.
프로세서(110)는 입력 피처맵(820)에 대한 래스터 스캔 오더에 따라 입력 피처맵(820)의 현재 윈도우 내에 포함된 현재 입력 픽셀(825)의 값을 수신한다. 프로세서(110)는 현재 입력 픽셀(825)의 값에 기초하여, 현재 입력 픽셀의 값에 의해 영향을 받는, 쉐어 라인 버퍼(125) 내 적어도 하나의 메모리 셀에 저장된 적어도 하나의 부분(partial) 풀링 결과를 업데이트한다. 이때, 프로세서(110)의 ALU(110-1)는 부분 풀링 결과의 업데이트를 위한 산술 연산을 수행할 수 있다.
여기서, 부분 풀링 결과는 어느 하나의 서브 풀링 커널에 매핑된 모든 입력 픽셀들에 대한 중간 풀링 결과를 획득하기 위한 중도의 값일 수 있다. 예시적으로, 서브 풀링 커널(811)은 어느 윈도우 내 총 3개의 입력 픽셀들에 매핑될 수 있고, 매핑된 3개의 입력 픽셀들의 데이터가 모두 수신되어야만 3개의 입력 픽셀들에 대한 중간 풀링 결과가 획득될 수 있다. 하지만, 입력 피처맵(820)의 입력 픽셀들은 래스터 스캔 오더에 따라 프로세서(110)로 차례로 입력되기 때문에, 한번에 3개의 입력 픽셀들에 대한 중간 풀링 결과를 획득하기 어려울 수 있다.
따라서, 맥스 풀링(MaxPool)의 경우, 프로세서(110)는 서브 풀링 커널(811)에 매핑된 1번째 입력 픽셀의 값이 수신된 경우에는 이를 최대값으로서 쉐어 라인 버퍼(125)의 어느 메모리 셀에 저장하고, 2번째 입력 픽셀의 값이 수신된 경우에는 이미 저장된 최대값(즉, 1번째 입력 픽셀의 값)과 2번째 입력 픽셀의 값을 비교하여 그 중에서 최대값으로 메모리 셀의 데이터를 업데이트한다. 여기서, 메모리 셀에 저장된 데이터가 부분 풀링 결과에 해당한다. 마지막으로, 프로세서(110)는 서브 풀링 커널(811)에 매핑된 마지막 3번째 입력 픽셀의 값이 수신된 경우에는 이미 저장된 최대값(즉, 1번째 입력 픽셀의 값 및 2번째 입력 픽셀의 값 중 최대값)과 3번째 입력 픽셀의 값을 비교하여 그 중에서 최대값으로 메모리 셀의 데이터를 최종적으로 업데이트한다. 서브 풀링 커널(811)은 1x3 크기이므로, 3번째 입력 픽셀의 값에 의해 최종적으로 업데이트된 메모리 셀 데이터는 결국 서브 풀링 커널(811)에 대응하는 중간 풀링 결과에 해당할 수 있다.
에버리지 풀링(AvgPool)의 경우에도 유사하게, 프로세서(110)는 수신되는 입력 픽셀의 값을 쉐어 라인 버퍼(125)의 메모리 셀에 이미 저장된 데이터와 합산함으로써 부분 풀링 결과를 업데이트한다.
즉, 프로세서(110)는 풀링 연산을 수행할 때, 메모리(120)의 쉐어 라인 버퍼(125)로부터 풀링 데이터를 리드(read)하고, ALU(110-1)을 이용하여 쉐어 라인 버퍼(125)에 이미 저장된 부분 풀링 결과를 업데이트하고, 쉐어 라인 버퍼(125)에 부분 풀링 결과를 라이트(write)한다.
프로세서(110)의 ALU(110-2)는 쉐어 라인 버퍼(125)의 메모리 셀들로부터 현재 윈도우에 대한 중간 풀링 결과들을 리드하고, 리드된 중간 풀링 결과들에 대해 미리 설정된 풀링 타입에 따른 후처리를 수행함으로써 출력 픽셀 값에 대응하는 최종 풀링 결과를 획득한다. 도 8에서는 3x3 원본 풀링 커널(810)이 3개의 3x1 서브 풀링 커널들(811, 812, 813)로 분해되는 것으로 가정하였으므로, ALU(110-2)는 쉐어 라인 버퍼(125)로부터 3개씩의 중간 풀링 결과들을 리드하여 후처리할 수 있다.
한편, 도 8에서 가정한 바와 같이 3x3 원본 풀링 커널(810)이 3개의 3x1 서브 풀링 커널들(811, 812, 813)로 분해되는 경우, 쉐어 라인 버퍼(125)는 총 3개의 로우들의 메모리 셀들에 풀링 데이터를 저장할 수 있다. 다시 말하면, 쉐어 라인 버퍼(125)는 원본 풀링 커널(810)의 높이(height)에 대응하는 개수의 로우들의 메모리 라인들(Row k*i, Row k*i+1, Row k*i+2)에, 입력 피처맵(820) 내 윈도우들에 대해 획득된 중간 풀링 결과들을 순환 방식(circular manner)으로 저장할 수 있다. 여기서, k는 원본 풀링 커널(810)의 높이로서, 도 8에 따르면 k=3이다.
구체적으로, 입력 피처맵(820)에서 동일한 윈도우에 대응하는 중간 풀링 결과들 각각은, 쉐어 라인 버퍼(125)에서 동일한 컬럼(column) 및 서로 다른 로우들(row)의 메모리 어드레스들을 갖는 메모리 셀들에 저장된다. 예를 들어, 입력 피처맵(820)의 어느 윈도우(821)에 대하여 3개의 서브 풀링 커널들(811, 812, 813) 각각에 대응하는 3개의 중간 풀링 결과들이 획득된 경우, 3개의 중간 풀링 결과들 각각은 쉐어 라인 버퍼(125)의 1행 1열, 2행 1열 및 3행 1열의 메모리 셀들(1251, 1252, 1253) 각각에 저장될 수 있다.
만약, 스트라이드가 1인 것으로 가정하면, 입력 피처맵(820)에서 풀링될 윈도우(822)가 이전에 풀링된 윈도우(821)와 동일한 컬럼들을 가질 때, 윈도우(821)와 윈도우(822)는 2개의 로우들의 입력 픽셀들이 공유될 수 있다. 즉, 현재 윈도우(821)에 대한 서브 풀링 커널들 중 적어도 하나는, 입력 피처맵(820) 내 적어도 하나의 다른 윈도우(822)에 대한 서브 풀링 커널로서 공유 가능하다. 이에 따라, 현재 윈도우(821)에 매핑된 서브 풀링 커널들 중에서 공유 가능한 서브 풀링 커널에 의해 획득된 중간 풀링 결과는, 적어도 하나의 다른 윈도우(822)에 대해 공유될 수 있다.
윈도우(821)에 대한 중간 풀링 결과들이 모두 메모리 셀들(1251, 1252, 1253)에 저장된 경우, 프로세서(110)의 ALU(110-2)는 메모리 셀들(1251, 1252, 1253)에 저장된 중간 풀링 결과들을 후처리함으로써 윈도우(821)에 대한 최종 풀링 결과를 출력한다. 래스터 스캔 오더에 따르면, 이후에 윈도우(822)에 대한 풀링이 수행될 타이밍에서, 윈도우(821)에 대한 서브 풀링 커널(811)의 중간 풀링 결과에 해당하는 메모리 셀(1251)에 저장된 데이터는 더 이상 풀링 연산에 이용되지 않게 된다. 하지만, 윈도우(821)는 윈도우(822)와 2개의 로우들을 공유하므로, 윈도우(821)에 대한 서브 풀링 커널들(812, 813)의 중간 풀링 결과들은 윈도우(822)를 위해 재사용될 수 있다. 따라서, 메모리 셀(1252, 1253)에 저장된 중간 풀링 결과들은 삭제되지 않고 윈도우(822)의 풀링을 위해 재사용된다.
즉, 쉐어 라인 버퍼(125)의 어느 메모리 셀에 저장된 중간 풀링 결과는, 다른 윈도우에 대응하는 최종 풀링 결과를 획득하는데 더 이상 공유되지 않는 경우, 다른 서브 풀링 커널에 의해 획득된 중간 풀링 결과의 저장을 위해 삭제될 수 있다. 이와 같은 방식으로, 쉐어 라인 버퍼(125)의 동일한 컬럼의 메모리 셀들에는 중간 풀링 결과들이 순환 방식으로 저장될 수 있다.
도 8에서 설명된 실시예들은 다른 크기의 입력 피처맵, 다른 크기의 원본 풀링 커널, 다른 스트라이드 값에 기초한 풀링 연산에 대해서도 동일한 방식으로 용이하게 적용될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
도 9는 일 실시예에 따라 풀링 데이터를 업데이트하고 풀링 데이터로부터 출력 피처맵을 생성하는 것을 설명하기 위한 도면이다.
도 9를 참고하면, 입력 피처맵(910)의 입력 픽셀 IFM_4-1은 서로 다른 서브 풀링 커널들에 중첩되는(또는 공유되는) 현재 입력 픽셀에 해당할 수 있다. 여기서, 서로 다른 서브 풀링 커널들 각각은 점선 및 쇄선들로 도시되어 있고, 예를 들어 윈도우 A에 매핑된 3x3 원본 풀링 커널의 3번째 서브 풀링 커널, 윈도우 B에 매핑된 3x3 원본 풀링 커널의 3번째 서브 풀링 커널 및 윈도우 C에 매핑된 3x3 원본 풀링 커널의 3번째 서브 풀링 커널에 해당할 수 있다.
현재 입력 픽셀이 수신된 경우, 프로세서(110)는 현재 입력 픽셀의 값에 의해 영향을 받는 적어도 하나의 부분 풀링 결과를 업데이트한다. 예를 들어, 래스터 스캔 오더에 따라 입력 픽셀 IFM_4-1이 수신된 경우, 프로세서(110)는 입력 픽셀 IFM_4-1에 의해 영향을 받는 부분 풀링 결과들 IPR_4-1, IPR_4-2 및 IPR_4-3을 업데이트한다. 만약 부분 풀링 결과 IPR_4-1의 업데이트가 모두 완료된 경우, 최종적으로 업데이트된 부분 풀링 결과 IPR_4-1는 비로소 중간 풀링 결과에 해당한다.
프로세서(110)는 중간 풀링 결과들(925) IPR_2-1, IPR_3-1 및 IPR_4-1에 대한 후처리를 수행함으로써 최종 풀링 결과를 획득한다. 획득된 최종 풀링 결과는 출력 피처맵(930)의 출력 픽셀 OFM_2-1에 해당한다.
이와 같이, 프로세서(110)에 어느 하나의 입력 픽셀 값이 수신된 경우, 이에 영향을 받는 쉐어 라인 버퍼(125) 상에 저장된 적어도 하나의 부분 풀링 결과는 함께 업데이트될 수 있다.
종래에는 서브 풀링 커널의 방식을 채용하지 않았기 때문에, 어느 하나의 입력 픽셀 값이 수신되는 경우, 해당 입력 픽셀을 포함하는 여러 윈도우들에 대한 전체 풀링 결과들을 반복적으로 리드/업데이트/라이트하여야 하였다. 예를 들어, stride=1의 3x3 풀링 커널에 기초하여 충분히 큰 크기의 입력 피처맵을 풀링하는 경우, 프로세서와 쉐어 라인 버퍼는 입력 픽셀이 수신될 때마다 입력 픽셀을 공유하는 최대 9개의 윈도우들 각각의 9개 픽셀 값들에 대응하는 풀링 데이터들을 모두 리드/업데이트/라이트하여야 하였다. 따라서, 프로세서의 연산량과 프로세서 및 메모리(쉐어 라인 버퍼) 간의 액세스 빈도가 상대적으로 높을 수 밖에 없었다. 하지만, 본 실시예들에 따른 풀링 방식은, 원본 풀링 커널로부터 분해된 1D 서브 풀링 커널의 방식을 채용함으로써 입력 픽셀을 공유하는 1D 서브 풀링 커널들의 풀링 데이터들만 리드/업데이트/라이트하므로, 프로세서 및 메모리(쉐어 라인 버퍼)의 오버헤드를 효과적으로 감소시킬 수 있다.
도 10은 일 실시예에 따라 뉴럴 네트워크의 풀링 알고리즘을 설명하기 위한 흐름도이다. 도 10을 참고하면, 뉴럴 네트워크의 풀링 알고리즘은 도 4의 뉴럴 프로세싱 장치(100)에서 시계열적으로 처리되는 알고리즘이다. 도 10의 뉴럴 네트워크의 풀링 알고리즘의 하이퍼파라미터는 원본 풀링 커널의 크기는 k x k이고, 스트라이드는 s인 것으로 가정한다(k, s는 자연수이고, s < k이다.).
한편, 도 10에 도시된 알고리즘은 입력 피처맵 내의 어느 하나의 입력 픽셀이 수신된 경우에 대한 알고리즘일 뿐이다. 따라서, 도 10에 도시된 흐름도는 입력 피처맵 내의 모든 픽셀들에 대해 반복적으로 수행되며, 1001 단계에서의 현재 입력 픽셀 (X,Y)는 입력 피처맵에 대한 래스터 스캔 오더에 따라 차례로 수신될 수 있다.
1001 단계에서, 프로세서(110)는 입력 피처맵(폭: W, 높이: H) 내의 현재 입력 픽셀 (X,Y)를 수신한다. 여기서, 0≤X<W, 0≤Y<H이다.
1002 단계에서, 프로세서(110)는 쉐어 라인 버퍼(125)의 메모리 셀들 중 어드레스 (xp, yp)의 메모리 셀이 업데이트 피봇(update pivot)에 해당하고, 쉐어 라인 버퍼(125)의 메모리 셀의 업데이트 크기는 t(t는 자연수)에 해당되는 것으로 설정한다. 그리고, 프로세서(110)는 i를 0으로 초기화한다.
여기서, 업데이트 피봇 (xp, yp)는 xp =
Figure pat00001
, yp = Y % k이고, 업데이트 크기 t는 t=
Figure pat00002
를 나타낸다.
1003 단계에서, 프로세서(110)는 i < t의 조건을 만족하는지 여부를 판단한다. i < t의 조건이 만족된 경우, 1004 단계로 진행된다. 그러나, i < t의 조건이 만족되지 않은 경우, 1006 단계로 진행된다.
1004 단계에서, 프로세서(110)는 쉐어 라인 버퍼(125)의 메모리 셀들 중 타겟 어드레스를 (xp + i, yp)로 설정한다.
1005 단계에서, 프로세서(110)는 i를 1만큼 증가시킨다.
프로세서(110)는 결국, i < t의 조건이 만족되지 않을 때까지 1003 단계 내지 1005 단계의 루틴을 수행한다.
1006 단계에서, 프로세서(110)는 최종 풀링 결과를 획득하기 위하여, 후처리 가능한 중간 풀링 결과들(예를 들어, 도 9의 참조번호 925와 같은 1 x k 커널)이 쉐어 라인 버퍼(125) 상에 존재하는지 여부를 판단한다. 만약 쉐어 라인 버퍼(125) 상에 후처리 가능한 중간 풀링 결과들이 없는 경우, 현재 입력 픽셀 (X,Y)에 대한 알고리즘은 종료되고, 다음 입력 픽셀에 대하여 1001 단계가 개시(재시작)된다.
여기서, 프로세서(110)는 아래의 수학식 2를 이용하여 현재 입력 픽셀 (X,Y)에 대해 업데이트 피봇에서의 업데이트가 완료되었는지를 판단하고, 아래의 수학식 3을 이용하여 후처리의 수행이 가능해지는 1 x k 커널이 존재하는지를 판단할 수 있다.
[수학식 2]
(X-k+1)≥0 && (X-k+1)%s=0
[수학식 3]
(Y-k+1)≥0 && (Y-k+1)%s=0
1007 단계에서, 프로세서(110)는 쉐어 라인 버퍼(125) 상의 xp 컬럼을 타겟 컬럼으로써 액세스한다.
1008 단계에서, 프로세서(110)는 쉐어 라인 버퍼(125) 상의 xp 컬럼에 저장된 중간 풀링 결과들(1 x k 크기)을 리드한다.
1009 단계에서, 프로세서(110)는 리드된 중간 풀링 결과들에 대해 미리 설정된 풀링 타입에 따른 후처리를 수행함으로써 최종 풀링 결과를 획득한다. 프로세서(110)는 획득된 최종 풀링 결과는 출력 피처맵의 ((X-k+1)/2, (Y-k+1)/2) 위치의 출력 픽셀의 값에 해당하는 것으로 결정한다.
프로세서(110)는 결국, 입력 피처맵으로부터 획득된 모든 중간 풀링 결과들에 대한 최종 풀링 결과들이 획득되어 출력 피처맵이 완성될 때까지 방법을 수행한다.
도 11은 일 실시예에 따라 현재 입력 픽셀의 수신에 의해 쉐어 라인 버퍼 상의 풀링 데이터가 업데이트되는 것을 설명하기 위한 도면이다.
도 11을 참고하면, 프로세서(110)의 ALU(110-1)가 입력 피처맵(1110) 내의 어느 현재 입력 픽셀을 수신한 경우, ALU(110-1)는 현재 입력 픽셀에 의해 영향을 받는 쉐어 라인 버퍼(125)에 저장된 풀링 데이터(즉, 부분 풀링 결과)(1120)를 리드한다. 앞서 설명된 바와 같이, 리드된 풀링 데이터(1120)는 동일한 로우 및 서로 다른 컬럼들의 메모리 셀들에 저장된 데이터일 수 있다.
ALU(110-1)는 풀링 데이터(1120) 및 현재 입력 픽셀의 값에 기초하여 풀링 데이터(1120)를 업데이트한다. 예를 들어, ALU(110-1)는 맥스 풀링에 따라 최대값을 결정하거나, 에버리지 풀링에 따라 덧셈 연산을 수행할 수 있다.
즉, 1D 서브 풀링 커널의 방식을 채용한 본 실시예들에 따르면, 앞서 설명된 바와 같이, 현재 입력 픽셀을 공유하는 1D 서브 풀링 커널들의 풀링 데이터들(1120)만 리드/업데이트/라이트하므로, 프로세서(110) 및 쉐어 라인 버퍼(125)의 오버헤드가 효과적으로 감소될 수 있다.
도 12는 일 실시예에 따라 쉐어 라인 버퍼에 저장된 중간 풀링 결과들을 후처리함으로써 최종 풀링 결과를 획득하는 것을 설명하기 위한 도면이다.
도 12를 참고하면, 쉐어 라인 버퍼(125)의 어느 메모리 셀(1201)에 저장된 부분 풀링 결과가 최종적으로 업데이트된 경우, 최종 업데이트된 부분 풀링 결과는 중간 풀링 결과에 해당한다.
프로세서(110)는 중간 풀링 결과가 저장된 메모리 셀(1201)과 동일한 컬럼의 모든 메모리 셀들에 저장된 중간 풀링 결과들(1205)을 리드한다. 여기서, 중간 풀링 결과들(1205)은 모두 최종적으로 업데이트된 결과들인 것으로 가정한다.
프로세서(110)는 중간 풀링 결과들(1205)에 대하여 미리 설정된 풀링 타입에 따른 후처리를 수행함으로써 중간 풀링 결과들(1205)에 대응하는 최종 풀링 결과를 획득한다. 그 결과, 프로세서(110)는 최종 풀링 결과에 대응하는 출력 픽셀(1210)의 값에 기초하여 출력 피처맵을 생성한다.
쉐어 라인 버퍼(125)의 어느 동일한 컬럼에 저장된 중간 풀링 결과들은, 앞서 설명된 바와 같이, 어느 윈도우에 매핑된 서브 풀링 커널들 각각에 의해 수행된 풀링 연산의 전처리(preprocessing) 결과들이다. 따라서, 프로세서(110)는 동일한 컬럼에 저장된 중간 풀링 결과들을 병합하는 풀링 연산의 후처리를 수행함으로써, 해당 윈도우에 대한 풀링을 완료할 수 있다.
도 13은 일 실시예에 따라 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법의 흐름도이다. 도 13을 참고하면, 뉴럴 네트워크의 풀링 처리 방법은 앞서 설명된 도면들에서 설명된 실시예들에 관련되므로, 이하 생략된 내용이라 할지라도, 앞서 도면들에서 설명된 내용들은 도 13의 방법에도 적용될 수 있다.
1301 단계에서, 프로세서(110)는 원본 풀링 커널로부터 분해된 복수의 서브 풀링 커널들로 입력 피처맵 내 풀링될 현재 윈도우에 포함된 입력 픽셀들에 대한 풀링 연산을 수행함으로써, 서브 풀링 커널들 각각에 대응하는 중간 풀링 결과들을 획득한다. 여기서, 현재 윈도우는 원본 풀링 커널이 입력 피처맵에서 래스터 스캔 오더에 따라 슬라이딩됨에 따라 결정된다.
1302 단계에서, 프로세서(110)는 현재 윈도우에 대한 중간 풀링 결과들이 모두 획득된 경우, 중간 풀링 결과들을 후처리함으로써 현재 윈도우에 대응하는 최종 풀링 결과를 획득한다.
1303 단계에서, 프로세서(110)는 최종 풀링 결과에 기초하여 출력 피처맵의 출력 픽셀 값을 결정한다.
본 실시예들에 따른 뉴럴 네트워크의 풀링은, 원본 풀링 커널의 크기, 스트라이드 크기, 풀링 타입에 대한 정보를 포함하는 하이퍼파라미터에 기초하여 처리된다. 즉, 분해될 서브 풀링 커널들의 개수, 최소한으로 요구되는 쉐어 라인 버퍼(125)의 메모리 라인들의 개수, 도 10에서 설명된 쉐어 라인 버퍼(125)의 업데이트 피봇 및 업데이트 크기 등은 모두 하이퍼파라미터에 기초하여 설정될 수 있다. 나아가서, 획득된 중간 풀링 결과들을 저장하는 쉐어 라인 버퍼(125)는 하이퍼파라미터에 기초하여 어드레싱될 수 있다.
한편, 상술한 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 실시예들에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
본 실시예와 관련된 기술 분야에서 통상의 지식을 가진 자는 상기된 기재의 본질적인 특성에서 벗어나지 않는 범위에서 실시예가 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예는 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 권리 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 실시예에 포함된 것으로 해석되어야 할 것이다.

Claims (23)

  1. 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법에 있어서,
    원본 풀링 커널로부터 분해된 복수의 서브 풀링 커널들로 입력 피처맵 내 풀링될 현재 윈도우에 포함된 입력 픽셀들에 대한 풀링 연산을 수행함으로써, 상기 서브 풀링 커널들 각각에 대응하는 중간 풀링 결과들을 획득하는 단계;
    상기 현재 윈도우에 대한 상기 중간 풀링 결과들이 모두 획득된 경우, 상기 중간 풀링 결과들을 후처리함으로써 상기 현재 윈도우에 대응하는 최종 풀링 결과를 획득하는 단계; 및
    상기 최종 풀링 결과에 기초하여 출력 피처맵의 출력 픽셀 값을 결정하는 단계를 포함하고,
    상기 현재 윈도우는 상기 원본 풀링 커널이 상기 입력 피처맵에서 래스터 스캔 오더에 따라 슬라이딩됨에 따라 결정되는, 방법.
  2. 제 1 항에 있어서,
    상기 서브 풀링 커널들 각각은 상기 원본 풀링 커널의 각 로우(row) 엘리먼트들로 구성된 1차원(1D) 커널이고,
    상기 원본 풀링 커널로부터 분해된 상기 서브 풀링 커널들의 개수는 상기 원본 풀링 커널의 높이(height)에 대응하는, 방법.
  3. 제 2 항에 있어서,
    상기 현재 윈도우에 대한 상기 서브 풀링 커널들 중 적어도 하나는, 상기 입력 피처맵 내 적어도 하나의 다른 윈도우에 대한 서브 풀링 커널로서 공유 가능한, 방법.
  4. 제 3 항에 있어서,
    상기 현재 윈도우에 매핑된 상기 서브 풀링 커널들 중에서 상기 공유 가능한 서브 풀링 커널에 의해 획득된 중간 풀링 결과는, 상기 적어도 하나의 다른 윈도우에 대해 공유되는, 방법.
  5. 제 1 항에 있어서,
    동일한 윈도우에 대응하는 중간 풀링 결과들 각각은, 쉐어 라인 버퍼(share line buffer)에서 동일한 컬럼(column) 및 서로 다른 로우들(row)의 메모리 어드레스들을 갖는 메모리 셀들에 저장되는, 방법.
  6. 제 5 항에 있어서,
    상기 입력 피처맵에 대한 상기 래스터 스캔 오더에 따라 상기 현재 윈도우 내에 포함된 현재 입력 픽셀의 값을 수신하는 단계를 더 포함하고,
    상기 중간 풀링 결과들을 획득하는 단계는
    상기 수신된 현재 입력 픽셀의 값에 기초하여, 상기 수신된 현재 입력 픽셀의 값에 의해 영향을 받는 적어도 하나의 메모리 셀에 저장된 적어도 하나의 부분(partial) 풀링 결과를 업데이트하는, 방법.
  7. 제 5 항에 있어서,
    상기 현재 윈도우에 대응하는 상기 최종 풀링 결과를 획득하는 단계는
    상기 쉐어 라인 버퍼의 상기 메모리 셀들로부터 상기 현재 윈도우에 대한 상기 중간 풀링 결과들을 리드(read)하는 단계; 및
    상기 리드된 중간 풀링 결과들에 대하여 미리 설정된 풀링 타입에 따른 후처리를 수행함으로써, 상기 출력 픽셀 값에 대응하는 상기 최종 풀링 결과를 획득하는 단계를 포함하는, 방법.
  8. 제 5 항에 있어서,
    상기 쉐어 라인 버퍼는
    상기 원본 풀링 커널의 높이(height)에 대응하는 개수의 로우들의 메모리 라인들에, 상기 입력 피처맵 내 다른 윈도우들에 대해 획득된 중간 풀링 결과들을 순환 방식(circular manner)으로 저장하는, 방법.
  9. 제 8 항에 있어서,
    상기 쉐어 라인 버퍼의 어느 메모리 셀에 저장된 중간 풀링 결과는, 다른 윈도우에 대응하는 최종 풀링 결과를 획득하는데 더 이상 공유되지 않는 경우, 다른 서브 풀링 커널에 의해 획득된 중간 풀링 결과의 저장을 위해 삭제되는, 방법.
  10. 제 1 항에 있어서,
    상기 뉴럴 네트워크의 상기 풀링은
    상기 원본 풀링 커널의 크기, 스트라이드(stride) 크기, 풀링 타입에 대한 정보를 포함하는 하이퍼파라미터(hyper-parameter)에 기초하여 처리되고,
    상기 획득된 중간 풀링 결과들을 저장하는 쉐어 라인 버퍼는 상기 하이퍼파라미터에 기초하여 어드레싱되는, 방법.
  11. 제 1 항에 있어서,
    상기 풀링 연산은
    맥스 풀링(max pooling)의 풀링 타입, 또는 에버리지 풀링(average pooling)의 풀링 타입에 기초한 연산이고,
    상기 중간 풀링 결과들 각각은
    상기 풀링 연산이 상기 맥스 풀링인 경우에는 대응하는 서브 풀링 커널에 매핑된 입력 픽셀들의 값들 중 최대값들이고, 상기 풀링 연산이 상기 에버리지 풀링인 경우에는 대응하는 서브 풀링 커널에 매핑된 입력 픽셀들의 값들의 합이고,
    상기 최종 풀링 결과는
    상기 풀링 연산이 상기 맥스 풀링인 경우에는 상기 중간 풀링 결과들 중 최대값이고, 상기 풀링 연산이 상기 에버리지 풀링인 경우에는 상기 중간 풀링 결과들을 합한 값을 상기 원본 풀링 커널의 크기로 나눈 값인, 방법.
  12. 제 1 항 내지 제 11 항 중에 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적인(non-transitory) 기록매체.
  13. 뉴럴 네트워크의 풀링을 처리하는 뉴럴 프로세싱 장치에 있어서,
    메모리; 및
    프로그램을 실행함으로써 상기 뉴럴 네트워크의 상기 풀링을 처리하는 적어도 하나의 프로세서를 포함하고,
    상기 적어도 하나의 프로세서는
    원본 풀링 커널로부터 분해된 복수의 서브 풀링 커널들로 입력 피처맵 내 풀링될 현재 윈도우에 포함된 입력 픽셀들에 대한 풀링 연산을 수행함으로써, 상기 서브 풀링 커널들 각각에 대응하는 중간 풀링 결과들을 획득하고,
    상기 현재 윈도우에 대한 상기 중간 풀링 결과들이 모두 획득된 경우, 상기 중간 풀링 결과들을 후처리함으로써 상기 현재 윈도우에 대응하는 최종 풀링 결과를 획득하고,
    상기 최종 풀링 결과에 기초하여 출력 피처맵의 출력 픽셀 값을 결정하고,
    상기 현재 윈도우는 상기 원본 풀링 커널이 상기 입력 피처맵에서 래스터 스캔 오더에 따라 슬라이딩됨에 따라 결정되는, 뉴럴 프로세싱 장치.
  14. 제 13 항에 있어서,
    상기 서브 풀링 커널들 각각은 상기 원본 풀링 커널의 각 로우(row) 엘리먼트들로 구성된 1차원(1D) 커널이고,
    상기 원본 풀링 커널로부터 분해된 상기 서브 풀링 커널들의 개수는 상기 원본 풀링 커널의 높이(height)에 대응하는, 뉴럴 프로세싱 장치.
  15. 제 14 항에 있어서,
    상기 현재 윈도우에 대한 상기 서브 풀링 커널들 중 적어도 하나는, 상기 입력 피처맵 내 적어도 하나의 다른 윈도우에 대한 서브 풀링 커널로서 공유 가능한, 뉴럴 프로세싱 장치.
  16. 제 15 항에 있어서,
    상기 현재 윈도우에 매핑된 상기 서브 풀링 커널들 중에서 상기 공유 가능한 서브 풀링 커널에 의해 획득된 중간 풀링 결과는, 상기 적어도 하나의 다른 윈도우에 대해 공유되는, 뉴럴 프로세싱 장치.
  17. 제 13 항에 있어서,
    동일한 윈도우에 대응하는 중간 풀링 결과들 각각은, 상기 메모리에 구비된 쉐어 라인 버퍼(share line buffer)에서 동일한 컬럼(column) 및 서로 다른 로우들(row)의 메모리 어드레스들을 갖는 메모리 셀들에 저장되는, 뉴럴 프로세싱 장치.
  18. 제 17 항에 있어서,
    상기 적어도 하나의 프로세서는
    상기 입력 피처맵에 대한 상기 래스터 스캔 오더에 따라 상기 현재 윈도우 내에 포함된 현재 입력 픽셀의 값을 수신하고,
    상기 수신된 현재 입력 픽셀의 값에 기초하여, 상기 수신된 현재 입력 픽셀의 값에 의해 영향을 받는 적어도 하나의 메모리 셀에 저장된 적어도 하나의 부분(partial) 풀링 결과를 업데이트하는, 뉴럴 프로세싱 장치.
  19. 제 17 항에 있어서,
    상기 적어도 하나의 프로세서는
    상기 현재 윈도우에 대응하는 상기 최종 풀링 결과를 획득하기 위하여, 상기 쉐어 라인 버퍼의 상기 메모리 셀들로부터 상기 현재 윈도우에 대한 상기 중간 풀링 결과들을 리드(read)하고, 상기 리드된 중간 풀링 결과들에 대하여 미리 설정된 풀링 타입에 따른 후처리를 수행함으로써 상기 출력 픽셀 값에 대응하는 상기 최종 풀링 결과를 획득하는, 뉴럴 프로세싱 장치.
  20. 제 17 항에 있어서,
    상기 쉐어 라인 버퍼는
    상기 원본 풀링 커널의 높이(height)에 대응하는 개수의 로우들의 메모리 라인들에, 상기 입력 피처맵 내 다른 윈도우들에 대해 획득된 중간 풀링 결과들을 순환 방식(circular manner)으로 저장하는, 뉴럴 프로세싱 장치.
  21. 제 20 항에 있어서,
    상기 쉐어 라인 버퍼의 어느 메모리 셀에 저장된 중간 풀링 결과는, 다른 윈도우에 대응하는 최종 풀링 결과를 획득하는데 더 이상 공유되지 않는 경우, 다른 서브 풀링 커널에 의해 획득된 중간 풀링 결과의 저장을 위해 삭제되는, 뉴럴 프로세싱 장치.
  22. 제 13 항에 있어서,
    상기 뉴럴 네트워크의 상기 풀링은
    상기 원본 풀링 커널의 크기, 스트라이드(stride) 크기, 풀링 타입에 대한 정보를 포함하는 하이퍼파라미터(hyper-parameter)에 기초하여 처리되고,
    상기 획득된 중간 풀링 결과들을 저장하기 위한 상기 메모리에 구비된 쉐어 라인 버퍼는 상기 하이퍼파라미터에 기초하여 어드레싱되는, 뉴럴 프로세싱 장치.
  23. 제 13 항에 있어서,
    상기 풀링 연산은
    맥스 풀링(max pooling)의 풀링 타입, 또는 에버리지 풀링(average pooling)의 풀링 타입에 기초한 연산이고,
    상기 중간 풀링 결과들 각각은
    상기 풀링 연산이 상기 맥스 풀링인 경우에는 대응하는 서브 풀링 커널에 매핑된 입력 픽셀들의 값들 중 최대값들이고, 상기 풀링 연산이 상기 에버리지 풀링인 경우에는 대응하는 서브 풀링 커널에 매핑된 입력 픽셀들의 값들의 합이고,
    상기 최종 풀링 결과는
    상기 풀링 연산이 상기 맥스 풀링인 경우에는 상기 중간 풀링 결과들 중 최대값이고, 상기 풀링 연산이 상기 에버리지 풀링인 경우에는 상기 중간 풀링 결과들을 합한 값을 상기 원본 풀링 커널의 크기로 나눈 값인, 뉴럴 프로세싱 장치.
KR1020190119090A 2019-09-26 2019-09-26 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법 KR20210036715A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020190119090A KR20210036715A (ko) 2019-09-26 2019-09-26 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법
US16/826,373 US11640538B2 (en) 2019-09-26 2020-03-23 Neural processing apparatus and method with neural network pool processing
CN202010263703.9A CN112561045A (zh) 2019-09-26 2020-04-07 用于图像识别的神经网络的处理器实现的方法和设备
EP20181380.5A EP3798921A1 (en) 2019-09-26 2020-06-22 Neural processing apparatus and method with neural network pool processing
US18/186,163 US20230229931A1 (en) 2019-09-26 2023-03-18 Neural processing apparatus and method with neural network pool processing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190119090A KR20210036715A (ko) 2019-09-26 2019-09-26 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법

Publications (1)

Publication Number Publication Date
KR20210036715A true KR20210036715A (ko) 2021-04-05

Family

ID=71120083

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190119090A KR20210036715A (ko) 2019-09-26 2019-09-26 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법

Country Status (4)

Country Link
US (2) US11640538B2 (ko)
EP (1) EP3798921A1 (ko)
KR (1) KR20210036715A (ko)
CN (1) CN112561045A (ko)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102368075B1 (ko) * 2021-06-04 2022-02-25 오픈엣지테크놀로지 주식회사 고효율 풀링 방법 및 이를 위한 장치
WO2023033441A1 (ko) * 2021-08-30 2023-03-09 삼성전자 주식회사 프레임들 사이의 움직임 벡터를 결정하는 영상 처리 장치 및 이에 의한 방법
WO2023080291A1 (ko) * 2021-11-08 2023-05-11 한국전자기술연구원 딥러닝 가속기를 위한 풀링 장치
WO2023085443A1 (ko) * 2021-11-09 2023-05-19 한국전자기술연구원 딥러닝 경량 가속장치
WO2023085535A1 (ko) * 2021-11-09 2023-05-19 오픈엣지테크놀로지 주식회사 1차원 어레이 풀링 방법 및 이를 위한 장치
WO2023120829A1 (ko) * 2021-12-24 2023-06-29 오픈엣지테크놀로지 주식회사 어레이 풀링 방법 및 이를 위한 장치

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110472531B (zh) * 2019-07-29 2023-09-01 腾讯科技(深圳)有限公司 视频处理方法、装置、电子设备及存储介质
US11507831B2 (en) 2020-02-24 2022-11-22 Stmicroelectronics International N.V. Pooling unit for deep learning acceleration
US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
US11568252B2 (en) 2020-06-29 2023-01-31 Alibaba Group Holding Limited Variable input size techniques for neural networks
JP2023041348A (ja) * 2021-09-13 2023-03-24 トヨタ自動車株式会社 情報処理装置
CN117217274A (zh) * 2023-11-08 2023-12-12 深圳市九天睿芯科技有限公司 向量处理器、神经网络加速器、芯片及电子设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10417525B2 (en) 2014-09-22 2019-09-17 Samsung Electronics Co., Ltd. Object recognition with reduced neural network weight precision
US20170124409A1 (en) 2015-11-04 2017-05-04 Nec Laboratories America, Inc. Cascaded neural network with scale dependent pooling for object detection
TWI607389B (zh) * 2017-02-10 2017-12-01 耐能股份有限公司 卷積神經網路的池化運算裝置及方法
KR102414583B1 (ko) 2017-03-23 2022-06-29 삼성전자주식회사 머신 러닝을 수행하는 전자 장치 및 머신 러닝 수행 방법
US10990648B2 (en) * 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
KR102606825B1 (ko) 2017-09-13 2023-11-27 삼성전자주식회사 뉴럴 네트워크 모델을 변형하는 뉴럴 네트워크 시스템, 이를 포함하는 어플리케이션 프로세서 및 뉴럴 네트워크 시스템의 동작방법
US10482337B2 (en) 2017-09-29 2019-11-19 Infineon Technologies Ag Accelerating convolutional neural network computation throughput

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102368075B1 (ko) * 2021-06-04 2022-02-25 오픈엣지테크놀로지 주식회사 고효율 풀링 방법 및 이를 위한 장치
WO2022255561A1 (ko) * 2021-06-04 2022-12-08 오픈엣지테크놀로지 주식회사 고효율 풀링 방법 및 이를 위한 장치
WO2023033441A1 (ko) * 2021-08-30 2023-03-09 삼성전자 주식회사 프레임들 사이의 움직임 벡터를 결정하는 영상 처리 장치 및 이에 의한 방법
WO2023080291A1 (ko) * 2021-11-08 2023-05-11 한국전자기술연구원 딥러닝 가속기를 위한 풀링 장치
WO2023085443A1 (ko) * 2021-11-09 2023-05-19 한국전자기술연구원 딥러닝 경량 가속장치
WO2023085535A1 (ko) * 2021-11-09 2023-05-19 오픈엣지테크놀로지 주식회사 1차원 어레이 풀링 방법 및 이를 위한 장치
WO2023120829A1 (ko) * 2021-12-24 2023-06-29 오픈엣지테크놀로지 주식회사 어레이 풀링 방법 및 이를 위한 장치

Also Published As

Publication number Publication date
US11640538B2 (en) 2023-05-02
US20210097403A1 (en) 2021-04-01
US20230229931A1 (en) 2023-07-20
EP3798921A1 (en) 2021-03-31
CN112561045A (zh) 2021-03-26

Similar Documents

Publication Publication Date Title
KR20210036715A (ko) 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법
US11436483B2 (en) Neural network engine with tile-based execution
KR102452953B1 (ko) 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
KR102499396B1 (ko) 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치의 동작 방법
US20210398252A1 (en) Image denoising method and apparatus
KR20190051697A (ko) 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
KR20200066952A (ko) 확장 컨벌루션 연산을 수행하는 장치 및 방법
US20200118249A1 (en) Device configured to perform neural network operation and method of operating same
US20200134465A1 (en) Method and apparatus for reconstructing 3d microstructure using neural network
CN112183295A (zh) 行人重识别方法、装置、计算机设备及存储介质
Liu et al. Deep adaptive inference networks for single image super-resolution
CN111178217A (zh) 人脸图像的检测方法及设备
CN111681165A (zh) 图像处理方法、装置、计算机设备和计算机可读存储介质
US10755169B2 (en) Hybrid non-uniform convolution transform engine for deep learning applications
KR20200095300A (ko) 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
US20230153965A1 (en) Image processing method and related device
CN110930290B (zh) 一种数据处理方法及装置
CN114998172A (zh) 图像处理方法及相关系统
JP7169768B2 (ja) 画像処理装置、画像処理方法
DE112020005140T5 (de) Dreidimensionale faltung im prozessor eines neuronalen netzwerks
CN112150612A (zh) 三维模型构建方法、装置、计算机设备及存储介质
CN113674383A (zh) 生成文本图像的方法及装置
US20230071417A1 (en) Image processing device and operation method thereof
CN111831207A (zh) 一种数据处理方法、装置及其设备
KR20200023154A (ko) 컨볼루션 뉴럴 네트워크를 처리하는 방법 및 장치

Legal Events

Date Code Title Description
A201 Request for examination