KR102395743B1 - 1차원 어레이 풀링 방법 및 이를 위한 장치 - Google Patents

1차원 어레이 풀링 방법 및 이를 위한 장치 Download PDF

Info

Publication number
KR102395743B1
KR102395743B1 KR1020210153244A KR20210153244A KR102395743B1 KR 102395743 B1 KR102395743 B1 KR 102395743B1 KR 1020210153244 A KR1020210153244 A KR 1020210153244A KR 20210153244 A KR20210153244 A KR 20210153244A KR 102395743 B1 KR102395743 B1 KR 102395743B1
Authority
KR
South Korea
Prior art keywords
pooling
value
target array
values
sub
Prior art date
Application number
KR1020210153244A
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 KR1020210153244A priority Critical patent/KR102395743B1/ko
Priority to PCT/KR2022/006215 priority patent/WO2023085535A1/ko
Application granted granted Critical
Publication of KR102395743B1 publication Critical patent/KR102395743B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
    • 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/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Memory System (AREA)

Abstract

입력 어레이 중 풀링할 제1대상 어레이를 선택하는 제1단계, 상기 제1대상 어레이의 복수 개의 부분들을 서브 윈도우를 이용하여 각각 상기 풀링규칙에 따라 풀링하여 복수 개의 서브값들을 산출하는 제2단계, 상기 복수 개의 서브값들을 복수 개의 버퍼들 내에 저장하는 제3단계, 및 상기 복수 개의 서브값들 및 상기 제1대상 어레이 중 상기 서브윈도우가 풀링하지 않은 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이의 풀링값을 산출하는 풀링값 산출단계를 포함하며 풀링 방법을 공개한다.

Description

1차원 어레이 풀링 방법 및 이를 위한 장치{Pooling method for 1-dimensional array and a device for the same}
본 발명은 컴퓨팅 장치에서 풀링을 수행하는 방법 및 이 방법이 적용된 하드웨어 가속기에 관한 것이다.
CNN은 풀링 연산을 포함하는 복수 개의 연산단계를 수행한다. 미국등록특허 US10713816에는 심층 CNN 풀링 레이어를 특징으로서 이용하는 물체검출 방법이 제시되어 있다.
도 1은 일 실시예에 따른 CNN의 연산구조를 나타낸 것이다. 이하 도 1을 참조하여 설명한다.
우선, 내부메모리에 저장된 입력 이미지 데이터(51)에 복수 개의 커널들을 이용한 콘볼루션 연산을 수행하여 콘볼루션 레이어들(52)을 생성할 수 있다. 콘볼루션 레이어들(52)을 생성하는 단계는 상기 콘볼루션 연산을 수행한 결과 얻은 복수 개의 피쳐 맵들에 대하여 비선형 연산(ex: ReLU, Sigmoid, 또는, tanH)을 수행하는 단계를 포함할 수 있다.
그 다음 콘볼루션 레이어들(52)에 대한 풀링을 수행하여 풀링 레이어들(53)을 생성할 수 있다. 각각의 콘볼루션 레이어(52)는 M*N 행렬 형태로 표현될 수 있는 데이터를 포함할 수 있다. 이때, 풀링을 수행하기 위하여 상기 콘볼루션 레이어(52)보다 작은 디멘젼을 갖는 윈도우인 풀링 윈도우가 정의될 수 있다. 풀링 윈도우는 행 및 열 방향에 대하여 각각 Mp 및 Np의 크기를 가질 수 있다. 풀링 윈도우의 크기는 콘볼루션 레이어의 크기보다 작을 수 있다(M>=Mp 이고 N>Np, 또는 M>Mp 이고 N>=Np). 상기 풀링은 상기 콘볼루션 레이어에 상기 풀링 윈도우를 겹쳐 선택하는 Mp*Np 개의 데이터들로부터 이 보다 더 작은 개수의 데이터, 예컨대 1개의 데이터를 생성하는 연산이다. 예컨대 MAX 풀링은 상기 Mp*Np 개의 데이터들 중에서 가장 큰 값 1개를 선택하여 출력하는 연산이다. 예컨대 average 풀링은 상기 Mp*Np 개의 데이터들의 평균값을 출력하는 연산이다. 그 밖에 다른 규칙을 따르는 풀링이 정의될 수 있다. 상기 콘볼루션 레이어에 상기 풀링 윈도우를 겹칠 수 있는 경우의 수는 다양하다. 실시예에 따라 상기 콘볼루션 레이어 상에서 상기 풀링 윈도우를 이동시키는 규칙을 제한할 수 있다. 예컨대, 상기 풀링 윈도우를 상기 콘볼루션 레이어의 행 방향을 따라 SM 칸 씩 건너뛰어서 이동하도록 제한 경우 상기 풀링 연산의 행 방향 Stride는 SM인 것으로 지칭하고, 상기 풀링 윈도우를 상기 콘볼루션 레이어의 열 방향을 따라 SN 칸 씩 건너뛰어서 이동하도록 제한 경우 상기 풀링 연산의 열 방향 Stride는 SN인 것으로 지칭할 수 있다(SM 및 SN 는 자연수). Stride 의 크기가 커질수록, 풀링 연산의 결과로서 출력되는 풀링 레이어의 크기는 더 작아질 수 있다. 상술한 설명 외에도, 풀링 연산에 대한 구체적인 개념은 CNN을 설명하는 선행기술에 잘 제시되어 있다.
그 다음, 상기 풀링 레이어들(53)에 대한 플래트닝(flattening)을 수행하여 신경망(54)에 입력할 어레이를 생성할 수 있다.
그 다음, 상기 어레이를 상기 신경망(54)에 입력하여 상기 신경망(54)으로부터 출력을 생성할 수 있다.
도 1에서는 CNN의 일 실시예를 나타내었지만, CNN을 구현하는 다양한 다른 예가 존재한다. 또한, 도 1에서 풀링 연산이 CNN의 구현을 위해 이용되었지만, 풀링 연산은 CNN이 아닌 다른 컴퓨팅 기술분야에서도 사용될 수 있다.
풀링 연산의 연산량은 풀링 윈도우의 크기가 커지면 커지는 경향이 있고, Stride의 크기가 작을수록 키지는 경향이 있다. 또한 Stride의 크기가 작을수록 풀링 연산을 수행하는 과정에서 동일한 연산이 반복되는 경향이 높아진다.
본 발명에서는 1차원 어레이에 대한 풀링 연산을 위한 연산량을 감소시키는 풀링 방법을 제공하고자 한다.
본 발명의 일 관점에 따라 입력 어레이를 소정의 풀링규칙에 따라 풀링하는 방법이 제공될 수 있다. 상기 방법은, 상기 입력 어레이(100) 중 풀링할 대상인 제1대상 어레이(110)를 선택하는 제1단계; 상기 제1대상 어레이(110)의 복수 개의 부분들(111~113)을 서브 윈도우(210)를 이용하여 각각 상기 풀링규칙에 따라 풀링하여 복수 개의 서브값들을 산출하는 제2단계; 및 상기 복수 개의 서브값들을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이의 풀링값을 산출하는 풀링값 산출단계;를 포함한다.
이때, 상기 풀링값 산출단계는, 상기 복수 개의 서브값들을 상기 풀링규칙에 따라 풀링하여 얻은 제1값 및 상기 제1대상 어레이 중 상기 서브윈도우가 풀링하지 않은 값인 나머지 값을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이의 풀링값을 산출하는 단계인 최종풀링단계를 포함할 수 있다.
이때, 상기 풀링값 산출단계는, 상기 최종풀링단계 이전에, 상기 제1값을 제1버퍼에 저장하는 단계를 더 포함할 수 있다.
이때, 상기 방법은, 상기 입력 어레이(100) 중 풀링할 대상인 제2대상 어레이(120)를 선택하는 단계; 및 상기 제2대상 어레이(120) 중 상기 서브윈도우가 풀링하지 않은 값들 및 상기 제1값을 상기 풀링규칙에 따라 풀링하여, 상기 제2대상 어레이의 풀링값을 산출하는 단계를 더 포함할 수 있다.
이때, 상기 제2대상 어레이의 크기는 상기 제1대상 어레이의 크기와 동일하며, 상기 서브윈도우가 풀링하지 않은 값들 중 연속적인 인덱스를 갖는 한 세트의 값들의 데이터 크기는 상기 서브윈도우의 크기보다 작을 수 있다.
이때, 상기 제2단계 및 상기 풀링값 산출단계 사이에, 상기 복수 개의 서브값들을 복수 개의 버퍼들(31~33) 내에 저장하는 제3단계를 더 포함할 수 있다.
이때, 상기 방법은, 상기 입력 어레이(100) 중 풀링할 대상인 제3대상 어레이(130)를 선택하는 단계; 상기 복수 개의 버퍼들 중 상기 제3대상 어레이(130)에 존재하지 않는 데이터를 풀링한 값을 저장한 버퍼인 무효 버퍼(invalid buffer)를 결정하는 단계; 상기 제3대상 어레이(130) 중 상기 제2단계에서 상기 서브 윈도우에 의해 풀링되지 않은 나머지 부분(114)을 확인하는 단계; 상기 나머지 부분(114)을 상기 서브 윈도우를 이용하여 상기 풀링규칙에 따라 풀링하여 제2서브값을 산출하는 단계; 상기 제2서브값을 상기 무효 버퍼에 저장하는 단계; 및 상기 복수 개의 버퍼들(31~33) 내에 저장되어 있는 값들 및 상기 제3대상 어레이 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들, 즉 이용되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이의 풀링값을 산출하는 제5단계;를 더 포함할 수 있다.
이때, 상기 제3대상 어레이의 크기는 상기 제1대상 어레이의 크기와 동일하며, 상기 나머지 부분을 구성하는 구성요소들의 인덱스들은 연속적일 수 있다.
이때, 상기 제5단계는, 상기 복수 개의 버퍼들(31~33) 내에 저장되어 있는 값들을 상기 풀링규칙에 따라 풀링하여 얻은 제2값을 제2버퍼에 저장하는 단계; 및 상기 제2값 및 상기 제3대상 어레이 중 상기 제3대상 어레이 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이의 풀링값을 산출하는 단계;를 포함할 수 있다.
이때, 상기 제2버퍼와 상기 제1버퍼는 서로 동일한 것일 수 있다.
이때, 상기 방법은, 상기 입력 어레이(100) 중 풀링할 대상인 제3대상 어레이(130)를 선택하는 단계; 상기 복수 개의 버퍼들 중 가장 먼저 갱신된 값을 갖는 버퍼인 갱신대상버퍼를 결정하는 단계; 상기 제3대상 어레이(130) 중 상기 제2단계에서 상기 서브 윈도우에 의해 풀링되지 않은 나머지 부분(114)을 확인하는 단계; 상기 나머지 부분(114)을 상기 서브 윈도우를 이용하여 상기 풀링규칙에 따라 풀링하여 제2서브값을 산출하는 단계; 상기 제2서브값을 상기 갱신대상버퍼에 저장하는 단계; 및 상기 복수 개의 버퍼들(31~33) 내에 저장되어 있는 값들 및 상기 제3대상 어레이 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이의 풀링값을 산출하는 제5단계;를 더 포함할 수 있다.
이때, 상기 풀링값 산출단계에서, 상기 제1대상 어레이의 풀링값은, 상기 복수 개의 서브값들 및 상기 제1대상 어레이 중 상기 서브윈도우가 풀링하지 않은 나머지 값들을 상기 풀링규칙에 따라 풀링하여 산출되고, 상기 서브 윈도우의 크기는 상기 제1대상 어레이의 크기보다 작으며, 상기 복수 개의 부분들 각각은 서로에 대하여 오버랩되지 않고, 상기 복수 개의 부분들 각각의 크기는 상기 서브 윈도우의 크기와 동일하며, 그리고 상기 각각의 부분을 구성하는 구성요소들의 인덱스들은 연속적일 수 있다.
이때, 상기 서브 윈도우의 크기는 2이고, 상기 제1대상 어레이 중 홀수 번째 인덱스를 갖는 데이터의 개수는 N개일 수 있다. 그리고 상기 방법은, 상기 풀링값 산출단계에서 또는 상기 풀링값 산출단계 이전에, 상기 제1대상 어레이 중 홀수 번째 인덱스를 갖는 N개의 데이터를 크기 N을 갖는 재활용 버퍼에 모두 저장하도록 되어 있고, 상기 풀링값 산출단계 이후에, 상기 입력 어레이(100) 중 풀링할 대상인 새로운 대상 어레이를 선택하는 단계; 및 상기 재활용 버퍼 중 상기 나머지 값을 갖는 부분을, 상기 새로운 대상 어레이 중 하나의 데이터로 갱신하는 단계;를 더 포함할 수 있다.
그리고 상기 새로운 대상 어레이 중 하나의 데이터는, 상기 새로운 대상 어레이 중 홀수 번째 인덱스를 갖는 데이터 중 상기 제1대상 어레이 중 홀수 번째 인덱스를 갖는 데이터에 포함되지 않은 것일 수 있다.
본 발명에 따르면 1차원 어레이에 대한 풀링 연산을 위한 연산량을 감소시키는 풀링 방법을 제공할 수 있다.
도 1은 일 실시예에 따른 CNN의 연산구조를 나타낸 것이다. 이하 도 1을 참조하여 설명한다.
도 2는 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 설명한 개념도이다.
도 3은 도 2에 설명한 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 나타낸 순서도이다.
도 4는 본 발명의 일 실시예에 따라, 도 2에 제시한 파트(P28)을 실행하는 구체적인 방법을 나타낸 것이다.
도 5는 본 발명의 일 실시예에 따라, 도 3에 제시한 단계(S140)를 실행하는 구체적인 방법을 나타낸 순서도이다.
도 6은 본 발명의 다른 실시예에 따라 제공되는 풀링 방법을 설명한 개념도이다.
도 7은 도 6에 제시한 방법을 이용하여 도 3 및 도 5에 제시한 풀링 방법을 더 발전시킨 풀링 방법을 나타낸 순서도이다.
도 8은 본 발명의 다른 실시예에 따라 제공되는 풀링 방법을 설명한 개념도이다.
도 9는 도 8에 제시한 방법을 이용하여 도 3에 제시한 풀링 방법을 더 발전시킨 풀링 방법을 나타낸 순서도이다.
도 10은 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 나타낸 순서도이다.
도 11은 본 발명의 일 실시예에 따라, 도 8에 제시한 파트(P85)을 실행하는 구체적인 방법을 나타낸 것이다.
도 12는 본 발명의 일 실시예에 따라 제공되는 버퍼 사용방법을 설명한 것이다.
이하, 본 발명의 실시예를 첨부한 도면을 참고하여 설명한다. 그러나 본 발명은 본 명세서에서 설명하는 실시예에 한정되지 않으며 여러 가지 다른 형태로 구현될 수 있다. 본 명세서에서 사용되는 용어는 실시예의 이해를 돕기 위한 것이며, 본 발명의 범위를 한정하고자 의도된 것이 아니다. 또한, 이하에서 사용되는 단수 형태들은 문구들이 이와 명백히 반대의 의미를 나타내지 않는 한 복수 형태들도 포함한다.
도 2는 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 설명한 개념도이다.
도 2의 파트(P21)는, 풀링을 수행하고자 하는 입력 어레이(100)의 예를 나타낸 것이다. 참조번호 50은 상기 입력 어레이(100)의 각 엘리먼트의 인덱스를 나타낸 숫자이다. 편의상 인덱스를 1부터 9까지만 표시하였다. 입력 어레이(100)는 1차원 어레이일 수 있다.
상기 입력 어레이(100)의 각 엘리먼트를 나타내는 사각형 내에 기록된 숫자는 각 엘리먼트가 갖는 데이터의 값의 예를 나타낸 것이다.
도 2의 파트(P22)는, 풀링 윈도우(200)를 나타낸 것이다. 도 2의 예에서 상기 풀링 윈도우(200)의 크기는 '7'이다.
도 2의 파트(P23) 및 파트(P24)는, 상기 입력 어레이(100) 중 풀링을 수행할 대상으로서 선택된 제1대상 어레이(110)를 나타낸 것이다. 상기 제1대상 어레이(110)의 크기는 상기 풀링 윈도우(200)와 동일한 크기를 갖는다. 도 2의 예에서 상기 제1대상 어레이(110)는 상기 입력 어레이(100) 중 인덱스 1 내지 7에 대응한다.
도 2의 파트(P25)는 본 발명의 일 실시예에 따라 제공되는 서브 윈도우(210)를 나타낸 것이다. 상기 서브 윈도우(210)는 서브 풀링 윈도우라고 지칭될 수도 있다. 도 2에 나타낸 예에서 상기 서브 윈도우(210)의 크기는 '2'이다.
상기 서브 윈도우(210)의 크기는 상기 제1대상 어레이(110)의 크기보다 작을 수 있다. 바람직하게는, 상기 서브 윈도우(210)의 크기는 상기 제1대상 어레이(110)의 크기의 1/2보다 작을 수 있다. 즉, 상기 서브 윈도우(210)의 크기는 상기 풀링 윈도우(200)의 크기보다 작을 수 있다. 바람직하게는, 상기 서브 윈도우(210)의 크기는 상기 풀링 윈도우(200)의 크기의 1/2보다 작을 수 있다.
도 2의 파트(P26)는, 상기 제1대상 어레이(110)의 복수 개의 부분들(111~113)을 상기 서브 윈도우(210)를 이용하여 각각 소정의 풀링규칙에 따라 풀링하여 복수 개의 서브값들을 산출하는 과정을 나타낸 것이다. 도 2에서는 상기 소정의 풀링규칙이 MAX 풀링인 경우를 나타내었다.
제1부분(111), 제2부분(112), 및 제3부분(113)을 각각, 상기 서브 윈도우(210)를 이용하여 풀링하여 산출된 서브값은 각각 '7', '8', 및 '4'이다.
도 2의 파트(P27)은, 상기 복수 개의 서브값들인 '7', '8', 및 '4'을 각각 복수 개의 버퍼들(31~33) 내에 저장하는 과정을 나타낸 것이다.
상기 복수 개의 버퍼들(31~33)은, 하드웨어 가속기에 제공된 내부 메모리에 포함된 것이거나, 또는 CPU에 포함된 캐시 레지스터이거나, 또는 컴퓨팅 장치에 제공된 DRAM에 포함된 것일 수 있다.
도 2의 파트(P28)는, 상기 복수 개의 서브값들 '7', '8', 및 '4' 및 상기 제1대상 어레이(110) 중 상기 서브윈도우(210)가 풀링하지 않은 값인 나머지 값을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이(110)의 최종 풀링값을 산출하는 과정을 나타낸 것이다.
도 2에서, 상기 서브윈도우(210)가 풀링하지 않은 값인 나머지 값은 파트(P26)에 도시되어 있는 것과 같이, 인덱스 1을 갖는 값 '6'이다. 따라서 파트(P28)에서는 '6', '7', '8', 및 '4'를 상기 소정의 풀링규칙에 따라 풀링하여 최종 풀링값을 산출할 수 있다. 상기 소정의 풀링규칙이 MAX 풀링인 경우 상기 최종 풀링값은 '8'이다.
도 2에 제시한 예와 달리, 상기 서브윈도우가 상기 제1대상 어레이(110)에서 풀링하지 않은 값들이 없을 수도 있다. 예컨대, 풀링 윈도우(200)의 크기가 '6'이고, 서브 윈도우(210)의 크기가 '2'인 경우, 상기 서브윈도우가 상기 제1대상 어레이(110)에서 풀링하지 않은 값은 존재하지 않을 수도 있다. 이 경우도 본 발명의 실시예에 포함될 수 있다.
도 3은 도 2에 설명한 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 나타낸 순서도이다.
도 3에 제시한 풀링 방법은 입력 어레이(100)를 소정의 풀링규칙에 따라 풀링하는 방법이다.
단계(S110)에서, 상기 입력 어레이(100) 중 풀링을 수행할 제1대상 어레이(110)를 선택할 수 있다. 단계(S110)는 제1단계라고 지칭될 수도 있다.
단계(S120)에서, 상기 제1대상 어레이(110)의 복수 개의 부분들(111~113)을 서브 윈도우(210)를 이용하여 각각 상기 풀링규칙에 따라 풀링하여 복수 개의 서브값들을 산출할 수 있다. 단계(S120)를 제2단계라고 지칭할 수도 있다.
단계(S130)에서, 상기 복수 개의 서브값들을 복수 개의 버퍼들(31~33) 내에 저장할 수 있다. 단계(S130)는 제3단계로 지칭할 수도 있다.
단계(S140)에서, 상기 복수 개의 서브값들 및 상기 제1대상 어레이 중 상기 서브윈도우가 풀링하지 않은 값인 나머지 값을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이(110)의 최종 풀링값을 산출할 수 있다. 단계(S140)는 풀링값 산출단계 또는 제4단계라고 지칭할 수도 있다.
상기 단계(S140)은, 다른 말로, 상기 복수 개의 버퍼들(31~33) 내에 저장되어 있는 값들 및 상기 제1대상 어레이(110) 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이(110)의 최종 풀링값을 산출하는 단계일 수 있다.
이때, 상기 서브 윈도우(210)의 크기는 상기 제1대상 어레이(110)의 크기보다 작을 수 있다. 바람직하게는, 상기 서브 윈도우(210)의 크기는 상기 제1대상 어레이(110)의 크기의 1/2과 같거나 그 보다 작을 수 있다.
이때, 상기 복수 개의 부분들(111~113) 각각은 서로에 대하여 오버랩되지 않을 수 있다.
이때, 상기 복수 개의 부분들(111~113) 각각의 크기는 상기 서브 윈도우(210)의 크기와 동일할 수 있다.
이때, 상기 각각의 부분(111~113)을 구성하는 구성요소들의 인덱스들은 연속적일 수 있다.
도 4는 본 발명의 일 실시예에 따라, 도 2에 제시한 파트(P28)을 실행하는 구체적인 방법을 나타낸 것이다.
상기 파트(P28)는 파트(P281) 및 파트(P282)로 구분될 수 있다.
파트(P281)에서, 상기 복수 개의 서브값들 '7', '8', 및 '4'을 상기 풀링규칙에 따라 풀링하여 얻은 제1값인 '8'을 제1버퍼(41)에 저장할 수 있다.
파트(P282)에서, 상기 제1값('8') 및 상기 제1대상 어레이(110) 중 상기 서브윈도우(210)가 풀링하지 않은 값인 나머지 값을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이(110)의 최종 풀링값을 산출할 수 있다.
도 2 및 도 4에서 상기 서브윈도우(210)가 풀링하지 않은 값인 나머지 값은 도 2의 파트(P26)에 도시되어 있는 것과 같이, 인덱스 1을 갖는 값 '6'이다. 따라서 파트(P282)에서는 '6' 및 '8'을 상기 소정의 풀링규칙에 따라 풀링하여 최종 풀링값을 산출할 수 있다. 상기 소정의 풀링규칙이 MAX 풀링인 경우 상기 최종 풀링값은 '8'이다.
도 5는 본 발명의 일 실시예에 따라, 도 3에 제시한 단계(S140)를 실행하는 구체적인 방법을 나타낸 순서도이다.
단계(S140)는 아래의 단계(S141) 및 단계(S142)를 포함할 수 있다.
단계(S141)에서, 상기 복수 개의 서브값들을 상기 풀링규칙에 따라 풀링하여 얻은 제1값을 제1버퍼에 저장할 수 있다.
단계(S142)에서, 상기 제1값 및 상기 제1대상 어레이 중 상기 서브윈도우가 풀링하지 않은 값인 나머지 값을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이의 풀링값을 산출할 수 있다.
도 6은 본 발명의 다른 실시예에 따라 제공되는 풀링 방법을 설명한 개념도이다.
도 6에 제시한 풀링 방법은 도 4에 제시한 바와 같이, 복수 개의 버퍼들(31~33)에 저장된 상기 복수 개의 서브값들인 '7', '8', 및 '4'을 상기 풀링규칙에 따라 풀링하여 얻은 제1값인 '8'을 상기 제1버퍼(41)에 저장한 단계를 수행한 것을 전제로 한다.
도 6의 파트(P61) 및 파트(P62)에 제시한 바와 같이, 상기 입력 어레이(100) 중 풀링할 제2대상 어레이(120)를 선택할 수 있다.
상기 제2대상 어레이(120)는 상기 제1대상 어레이(110)와는 다른 것이다. 예컨대 도 2에서 상기 제1대상 어레이(110)는 상기 입력 어레이(100) 중 인덱스 1 내지 7의 집합이며, 도 6에서 상기 제2대상 어레이(120)는 상기 입력 어레이(100) 중 인덱스 2 내지 8의 집합이다. 즉, 상기 제2대상 어레이(120)는, 풀링 윈도우(200)를 상기 제1대상 어레이(110)로부터 스트라이드 1만큼 이동한 것이다.
도 6의 파트(P63)에 제시한 바와 같이, 상기 제2대상 어레이(120) 중 상기 서브윈도우(210)가 풀링하지 않은 값인 나머지 값을 확인할 수 있다.
파트(P63)에 제시한 바와 같이, 상기 제2대상 어레이(120) 중 인덱스 2 및 3은 이미 상기 서브 윈도우(210)에 의해 풀링되었으며 그 결과가 버퍼(31)에 저장되었고, 상기 제2대상 어레이(120) 중 인덱스 4 및 5는 이미 상기 서브 윈도우(210)에 의해 풀링되었으며 그 결과가 버퍼(32)에 저장되었고, 그리고 상기 제2대상 어레이(120) 중 인덱스 6 및 7은 이미 상기 서브 윈도우(210)에 의해 풀링되었으며 그 결과가 버퍼(33)에 저장되었다.
이에 비하여, 상기 제2대상 어레이(120) 중 인덱스 8은 아직 상기 서브 윈도우(210)에 의해 풀링되지 않았다.
즉, 파트(P63)에서 상기 제2대상 어레이(120) 중 상기 서브윈도우(210)가 풀링하지 않은 값인 나머지 값은 인덱스 8의 값 '3'이다.
도 6의 파트(P64)에 제시한 것과 같이, 상기 제2대상 어레이(120) 중 상기 서브윈도우(210)가 풀링하지 않은 값인 나머지 값 '3' 및 상기 제1값 '8'을 상기 풀링규칙에 따라 풀링하여, 상기 제2대상 어레이의 최종 풀링값을 산출할 수 있다.
상기 소정의 풀링규칙이 MAX 풀링인 경우 상기 최종 풀링값은 '8'이다.
이때, 상기 제2대상 어레이(120) 중 서브윈도우(210)가 풀링하지 않은 값들 중 연속적인 인덱스를 갖는 한 세트의 값들(ex: 인덱스 8의 값 '3')의 데이터 크기(ex: 1)는 상기 서브윈도우의 크기(ex: 2)보다 작을 수 있다. 도 6에 나타낸 예에서, 서브윈도우(210)의 크기는 2이므로, 상기 제2대상 어레이(120) 중 서브윈도우(210)가 풀링하지 않은 값들은 0개 또는 1개일 수 있다. 그러나 이와 다른 실시예, 예컨대 서브윈도우의 크기가 K인 경우라면, 상기 제2대상 어레이(120) 중 서브윈도우(210)가 풀링하지 않은 값들은 0, 1, ..., K-1개일 수 있다는 점을 이해할 수 있다.
도 6에 제시된 방법을 이용하면, 풀링 윈도우(200)가 스트라이트 1만큼 이동되었음에도 불구하고, 복수 개의 버퍼들(31~3)에 이미 저장되어 있는 값을 이용하였고, 제1버퍼(41)에 저장되어 있는 제1값과 인덱스 8의 값 '3'의 총 2개의 값만을 이용하여 최종 풀링값을 얻을 수 있다는 이점이 있다.
도 7은 도 6에 제시한 방법을 이용하여 도 3 및 도 5에 제시한 풀링 방법을 더 발전시킨 풀링 방법을 나타낸 순서도이다.
도 7에 나타낸 순서도에서 단계(S150) 및 단계(S160)를 제외한 단계들은 모두 도 3 및 도 5에 제시한 것과 동일하다.
단계(S150)에서, 상기 입력 어레이(100) 중 풀링할 제2대상 어레이(120)를 선택할 수 있다.
단계(S160)에서, 상기 제2대상 어레이(120) 중 상기 서브윈도우가 풀링하지 않은 값인 나머지 값 및 상기 제1값을 상기 풀링규칙에 따라 풀링하여, 상기 제2대상 어레이의 최종 풀링값을 산출할 수 있다.
이때, 상기 제2대상 어레이(120)의 크기는 상기 제1대상 어레이(110)의 크기와 동일할 수 있다.
도 8은 본 발명의 다른 실시예에 따라 제공되는 풀링 방법을 설명한 개념도이다.
도 8에 제시한 풀링 방법은 도 2에 제시한 바와 같이, 복수 개의 버퍼들(31~33)에 상기 복수 개의 서브값들인 '7', '8', 및 '4'을 저장한 단계를 수행한 것을 전제로 한다.
도 8의 파트(P81) 및 파트(P82)에 제시한 바와 같이, 상기 입력 어레이(100) 중 풀링할 제3대상 어레이(130)를 선택할 수 있다.
상기 제3대상 어레이(130)의 크기는 상기 제1대상 어레이(110)의 크기와 동일할 수 있다.
도 8의 파트(P83)에 제시한 바와 같이, 상기 복수 개의 버퍼들(31~33) 중 상기 제3대상 어레이(130)에 존재하지 않는 데이터를 풀링한 값을 저장한 제2버퍼를 결정할 수 있다.
예컨대, 입력 어레이(100) 중 인덱스 2를 갖는 값 '4'는 상기 제3대상 어레이(130)에 존재하지 않는 데이터이다. 그리고 도 8의 예에서, 버퍼(31)는 상기 제3대상 어레이(130)에 존재하지 않는 데이터를 풀링한 값을 저장한 것이다. 따라서 도 8에서 상기 제2버퍼는 버퍼(31)인 것으로 결정될 수 있다.
이제, 상기 제2버퍼에 저장된 값은 무효인 값으로 간주할 수 있다. 그리고 상기 제2버퍼에는 새로운 값을 저장할 수 있다.
도 8의 파트(P84)에 나타낸 것과 같이, 상기 제3대상 어레이(130) 중 상기 서브윈도우(210)에 의해 풀링된 적이 없던 부분인 나머지 부분(114)을 확인할 수 있다.
예컨대, 상기 제3대상 어레이(130) 중 인덱스 3 내지 7의 데이터는 이미 도 2의 파트(P26)에서 서브윈도우(210)에 의해 풀링된 데이터이다. 그리고 상기 제3대상 어레이(130) 중 인덱스 8 및 9의 데이터만이 아직 서브윈도우(210)에 의해 풀링된 적이 없는 데이터이다. 따라서 상기 제3대상 어레이(130) 중 참조번호 114로 지시한 부분이 상기 나머지 부분이다.
그리고 도 8의 파트(P84)에 나타낸 것과 같이, 상기 나머지 부분(114)을 상기 서브윈도우(210)를 이용하여 상기 풀링규칙에 따라 풀링하여 제2서브값을 산출하고, 상기 제2서브값은 상기 제2버퍼에 저장할 수 있다. 도 8에 나타낸 예에서, 상기 제2서브값은 '3'이고, 상기 제2버퍼는 버퍼(31)이다.
이때, 상기 나머지 부분(114)을 구성하는 구성요소들의 인덱스들은 연속적일 수 있다. 예컨대 상기 나머지 부분(114)을 구성하는 구성요소들의 인덱스들은 각각 8 및 9로서 연속적인 자연수들이다.
도 8의 파트(P85)에 나타낸 것과 같이, 상기 복수 개의 버퍼들(31~33) 내에 저장되어 있는 값들 '3', '8', 및 '4', 및 상기 제3대상 어레이(130) 중 상기 복수 개의 버퍼들(31~33)의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이(130)의 최종 풀링값을 산출할 수 있다.
여기서, 상기 제3대상 어레이(130) 중 상기 복수 개의 버퍼들(31~33)의 값을 결정하는 과정에서 고려되지 않았던 값들은, 인덱스 3의 값 '7'이다. 상기 풀링규칙이 MAX 풀링인 경우, 상기 제3대상 어레이(130)의 최종 풀링값은 '8'이다.
도 9는 도 8에 제시한 방법을 이용하여 도 3에 제시한 풀링 방법을 더 발전시킨 풀링 방법을 나타낸 순서도이다.
도 9에 나타낸 순서도에서 단계(S110), 단계(S120), 단계(S130), 및 단계(S140)는 모두 도 3에 제시한 것과 동일하다.
단계(S171)에서, 상기 입력 어레이(100) 중 풀링할 제3대상 어레이(130)를 선택할 수 있다.
단계(S172)에서, 상기 복수 개의 버퍼들(31~33) 중 상기 제3대상 어레이(130)에 존재하지 않는 데이터를 풀링한 값을 저장한 버퍼인 무효버퍼를 결정할 수 있다.
여기서, 상기 무효버퍼는 상기 갱신대상버퍼일 수 있다. 즉, 상기 복수 개의 버퍼들(31~33) 중 상기 제3대상 어레이(130)에 존재하지 않는 데이터를 풀링한 값을 저장한 버퍼는, 상기 버퍼(31~33)에서 가장 오래전에 기록되었던 값이 저장되어 있는 버퍼일 수 있다.
단계(S173)에서, 상기 제3대상 어레이(130) 중 상기 서브 윈도우에 의해 풀링된 적이 없는 부분인 나머지 부분(114)을 확인할 수 있다.
단계(S174)에서, 상기 나머지 부분(114)을 상기 서브 윈도우를 이용하여 상기 풀링규칙에 따라 풀링하여 제2서브값을 산출할 수 있다.
단계(S175)에서, 상기 제2서브값을 상기 무효버퍼에 저장할 수 있다.
단계(S176)에서, 상기 복수 개의 버퍼들(31~33) 내에 저장되어 있는 값들 및 상기 제3대상 어레이(130) 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이(130)의 최종 풀링값을 산출할 수 있다.
이때, 상기 제3대상 어레이(130)의 크기는 상기 제1대상 어레이(110)의 크기와 동일할 수 있다.
도 10은 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 나타낸 순서도이다.
도 8에 제시한 실시예는 도 10에 나타낸 순서도를 이용하여 다음과 같이 다시 설명할 수도 있다.
단계(S210)에서, 도 8의 파트(P81) 및 파트(P82)에 제시한 바와 같이, 상기 입력 어레이(100) 중 풀링할 제3대상 어레이(130)를 선택할 수 있다.
단계(S220)에서, 상기 복수 개의 버퍼들(31~33) 중 가장 먼저 갱신된 값을 갖는 버퍼인 갱신대상버퍼를 결정할 수 있다. 예컨대 도 8에서, 상기 복수 개의 버퍼들(31~33)에 포함된 값은 각각 '7', '8', '4' 이며, 이 중 가장 먼저 갱신된 값은 '7'이다. 상기 가장 먼저 갱신된 값 '7'을 갖는 버퍼는 버퍼(31)이다. 따라서 이 경우 상기 갱신대상버퍼는 버퍼(31)이다.
단계(S230)에서, 상기 제3대상 어레이(130) 중 상기 제2단계(단계(S120))에서 상기 서브 윈도우에 의해 풀링되지 않은 나머지 부분(114)을 확인할 수 있다.
단계(S240)에서, 상기 나머지 부분(114)을 상기 서브윈도우를 이용하여 상기 풀링규칙에 따라 풀링하여 제2서브값을 산출할 수 있다.
단계(S250)에서, 상기 제2서브값을 상기 갱신대상버퍼인 버퍼(31)에 저장할 수 있다.
단계(S260)에서, 상기 복수 개의 버퍼들(31~33) 내에 저장되어 있는 값들 및 상기 제3대상 어레이 중 상기 복수 개의 버퍼들이 갖는 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이의 풀링값을 산출할 수 있다(제5단계).
도 8 내지 도 10을 이용하여 설명한 본 발명의 일 실시예에 따른 방법은, 서브윈도우를 이용하여 풀링하여 얻은 서브값들을 저장하는 버퍼(31~33)인 서브 풀링용 버퍼를 재사용하는 개념을 설명한 것이다. 즉, 상기 버퍼(31~33) 모두에 소정의 데이터가 저장된 상태에서, 새로운 데이터를 저장할 필요가 있을 때에, 상기 버퍼(31~33)에서 가장 오래전에 기록되었던 값을 버릴 수 있다. 예컨대 도 8의 예에서, 상기 서브 풀링용 버퍼에는 인덱스 31, 32, 33으로 표시된다. 이 인덱스 값을 갖는 한 개의 변수 Var_x가 정의될 수 있다. 이때, 상기 서브 풀링용 버퍼에 한 개의 값을 기록할 때마다 위 변수 Var_x의 값을 순환적(cyclic)으로 증가시키거나 감소시킬 수 있다 (ex: Var_x= 31-->32-->33-->31-->32-->33-->31...). 그리고 이때, 상기 버퍼(31~33) 모두에 소정의 데이터가 저장된 상태에서 새로운 데이터를 저장할 필요가 있을 때, 상기 새로운 데이터는 서브 풀링용 버퍼 중 상기 변수가 현재 가리키는 인덱스를 갖는 버퍼에 저장할 수 있다.
도 11은 본 발명의 일 실시예에 따라, 도 8에 제시한 파트(P85)을 실행하는 구체적인 방법을 나타낸 것이다.
상기 파트(P85)는 파트(P851) 및 파트(P852)로 구분될 수 있다.
파트(P851)에서, 상기 복수 개의 서브값들 '3', '8', 및 '4'을 상기 풀링규칙에 따라 풀링하여 얻은 제2값인 '8'을 제2버퍼(42)에 저장할 수 있다.
파트(P852)에서, 상기 제2값('8') 및 상기 제3대상 어레이(130) 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이(130)의 최종 풀링값을 산출할 수 있다.
도 8 및 도 11에서, 상기 제3대상 어레이(130) 중 상기 복수 개의 버퍼들(31~33)의 값을 결정하는 과정에서 고려되지 않았던 값들은 도 8의 파트(P84)에 도시되어 있는 것과 같이, 인덱스 3을 갖는 값 '7'이다. 따라서 파트(P852)에서는 '7' 및 '8'을 상기 소정의 풀링규칙에 따라 풀링하여 최종 풀링값을 산출할 수 있다. 상기 소정의 풀링규칙이 MAX 풀링인 경우 상기 최종 풀링값은 '8'이다.
이때, 상기 제1버퍼(41)와 상기 제2버퍼(42)는 동일한 것일 수 있다.
이하 도 12a 내지 도 12e를 통칭하여 도 12라고 지칭할 수 있다.
도 12는 본 발명의 일 실시예에 따라 제공되는 버퍼 사용방법을 설명한 것이다.
도 12a의 윗 부분을 참조하여 설명하면, DRAM 또는 내부 메모리에 저장된 상기 입력 어레이(100) 중 가장 앞 부분의 데이터를 읽어 들여 상기 제1대상 어레이(110)를 준비할 수 있다. 이때, 인덱스 1 내지 7의 모든 데이터를 읽어서 데이터 버퍼에 저장할 수 있다.
도 12a의 아랫 부분을 참조하여 설명하면, 재활용 버퍼(71~74)에는 각각 상기 DRAM 또는 내부 메모리로부터 새로 읽어온 값들 중 홀수의 인덱스를 갖는 값들을 저장할 수 있다. 상기 저장의 순서는 인덱스 값의 오름차 순으로 실행할 수 있다. 즉, 인덱스 1인 값을 먼저 저장하고, 인덱스 7인 값을 가장 나중에 저장할 수 있다. 따라서, 상기 인덱스 1인 값이 가장 오래 전에 저장된 값이고, 인덱스 7인 값이 가장 최근에 저장된 값이다. 상기 재활용 버퍼(71~74)에 저장된 값들은, 상술한 풀링을 위해 사용될 수 있다.
도 12b의 윗 부분을 참조하여 설명하면, 제1대상 어레이(110) 중 일부를 상기 서브 윈도우를 이용하여 풀링함으로써 상술한 복수 개의 서브값들을 상술한 복수 개의 버퍼들(31~33) 내에 저장할 수 있다.
이때, 상기 제1대상 어레이(110) 중 더 작은 인덱스를 갖는 값들에 대한 서브값을 먼저 생성하여 버퍼에 저장하고, 더 큰 인덱스를 갖는 값들에 대한 서브값을 나중에 생성하여 버퍼에 저장할 수 있다. 예컨대 도 12b의 윗 부분에서, 버퍼(31)에 저장된 값이 가장 오래 전에 저장된 값이고, 버퍼(33)에 저장된 값이 가장 최근에 저장된 값이다.
도 12b의 중간 부분을 참조하여 설명하면, 상술한 복수 개의 버퍼들(31~33)의 값을 생성하기 위해 이용된 데이터들은 상기 데이터 버퍼에서 삭제될 수 있다.
도 12b의 아랫 부분을 참조하여 설명하면, 상기 제1대상 어레이(110)에 대한 풀링은 상기 재활용 버퍼들에 저장된 값들 중 가장 오래전에 저장된 값, 그리고 상기 복수 개의 버퍼들(31~33)에 저장된 값들을 대상으로 수행된다. 도 12b에서 재활용 버퍼(71)에 저장된 값 '6'이 가장 오래전에 저장된 값이다.
도 12c를 참조하여 설명하면, 상기 풀링 위도우(200)를 stride 1만큼 이동시켜서 상기 제2대상 어레이(120)를 결정할 수 있다.
이때, 입력 어레이(100) 중 인덱스 2 내지 인덱스 7에 대한 풀링 결과는 이미 상기 복수 개의 버퍼들(31~33)에 저장되어 있기 때문에, 입력 어레이(100) 중 인덱스 2 내지 인덱스 7의 개별 값들은 필요하지 않다. 따라서 상기 제2대상 어레이(120)의 풀링을 위해 필요한 정보로서 상기 입력 어레이(100) 중 인덱스 8인 값만 읽어 오면 충분하다. 따라서 DRAM 또는 내부 메모리에 저장된 상기 입력 어레이(100) 중 인덱스 2~8의 값들을 모두 읽지 않고 인덱스 8의 값만을 읽으므로 DRAM 또는 내부 메모리에 연결된 인터커넥트(interconnect)의 자원을 절약할 수 있다는 효과가 있다.
이때, 상기 DRAM 또는 내부 메모리로부터 새로 읽어온 값들 중 홀수의 인덱스를 갖는 값이 없기 때문에, 재활용 버퍼(71~74)의 값을 갱신하지는 않는다. 그리고 상기 새로 읽어온 인덱스 8의 값은 상기 복수 개의 버퍼들(31~33)에 저장된 값을 갱신하는 데에 사용되지 않았기 때문에, 상기 인덱스 8의 값을 상기 데이터 버퍼로부터 삭제하지는 않는다.
그리고 상기 제2대상 어레이(120)에 대한 풀링은 상기 복수 개의 버퍼들(31~33)에 저장된 값들, 그리고 상기 새로 읽어온 인덱스 8의 값을 대상으로 수행된다.
도 12d의 상측 부분을 참조하여 설명하면, 상기 풀링 위도우(200)를 stride 1만큼 이동시켜서 상기 제3대상 어레이(130)를 결정할 수 있다.
이때, 입력 어레이(100) 중 인덱스 4 내지 인덱스 7에 대한 풀링 결과는이미 상기 복수 개의 버퍼들(32~33)에 저장되어 있기 때문에, 입력 어레이(100) 중 인덱스 4 내지 인덱스 7의 개별 값들은 필요하지 않다. 또한 상기 인덱스 8의 값은 아직 삭제되지 않은 상태이다. 또한 상기 인덱스 3의 값은 이미 재활용 버퍼(72)에 저장되어 있는 상태이다.
따라서 상기 제3대상 어레이(130)의 풀링을 위해 필요한 정보로서 상기 입력 어레이(100) 중 인덱스 9인 값만 읽어 오면 충분하다. 따라서 DRAM 또는 내부 메모리에 저장된 상기 입력 어레이(100) 중 인덱스 3~8의 값들을 모두 읽지 않고 인덱스 9의 값만을 읽으므로 DRAM 또는 내부 메모리에 연결된 인터커넥트의 자원을 절약할 수 있다는 효과가 있다.
이때, 상기 DRAM 또는 내부 메모리로부터 새로 읽어온 값은 홀수(=9)의 인덱스를 갖는 값이다. 이 경우, 재활용 버퍼(71~74) 중 가장 오래 전에 저장된 값을 갖는 것인 재활용 버퍼(71)의 값을 상기 새로 읽어온 인덱스 9의 값 '2'로 갱신한다. 이제, 도 12d에서 재활용 버퍼(71~74) 중 가장 오래 전에 저장된 값을 갖는 것은 재활용 버퍼(72)이고, 가장 최근에 저장된 값을 갖는 것은 재활용 버퍼(71)이다.
상기 제3대상 어레이(130) 중 상기 데이터 버퍼에 개별적으로 저장되어 있는, 인덱스 8 및 9의 값들에 대한 서브값을 새로 생성하여 상기 복수 개의 버퍼들의 값을 갱신할 수 있다. 이때, 복수 개의 버퍼(31~33) 중 가장 오래 전에 저장된 값을 갖는 것인 버퍼(31)의 값을 상기 새로 생성한 서브값 '3'으로 갱신할 수 있다. 이제, 도 12d에서 상기 복수 개의 버퍼(31~33) 중 가장 오래 전에 저장된 값을 갖는 것은 버퍼(32)이고, 가장 최근에 저장된 값을 갖는 것은 버퍼(31)이다.
도 12d의 중간 부분을 참조하여 설명하면, 인덱스 8 및 9의 값들은 복수 개의 버퍼의 값을 갱신하는데 사용되었으므로 상기 데이터 버퍼로부터 삭제될 수 있다.
도 12d의 아랫 부분을 참조하여 설명하면, 상기 제3대상 어레이(130)에 대한 풀링은 상기 재활용 버퍼들에 저장된 값들 중 가장 오래전에 저장된 값, 그리고 상기 복수 개의 버퍼들(31~33)에 저장된 값들을 대상으로 수행된다. 도 12d에서 재활용 버퍼(72)에 저장된 값 '7'이 가장 오래전에 저장된 값이다.
도 12d에 제시한 제3대상 어레이(130)를 풀링하는 단계 이후에, 도 12c 및 도 12d와 같이 상기 풀링 위도우(200)를 stride 1만큼 이동시켜서 제4대상 어레이, 제5대상 어레이 등을 생성하고, 이들을 풀링하는 과정은 반복될 수 있다.
각 대상 어레이의 인덱스가 짝수인 경우 도 12c와 같은 원리로 처리되며, 홀수인 경우 도 12d와 같은 원리로 처리될 수 있다는 점을 이해할 수 있다.
도 12에 제시한 실시예에 따르면, 상기 복수 개의 버퍼들(31~33) 및 상기 복수 개의 재활용 버퍼들(71~74)의 값을 사이클릭 방식으로 갱신함으로써 상기 데이터 버퍼가 차지하는 자원을 최소화할 수 있으며, 상기 입력 데이터(100)가 저장된 DRAM 또는 내부 메모리에 연결된 인터커넥트에 대한 사용량을 줄일 수 있다는 효과가 있다. 또한, DRAM 또는 내부 메모리로부터 읽어오는 데이터의 양이 감소하기 때문에 더 빠른 속도로 풀링을 수행할 수 있는 효과가 있다.
상술한 본 발명의 실시예들을 이용하여, 본 발명의 기술 분야에 속하는 자들은 본 발명의 본질적인 특성에서 벗어나지 않는 범위 내에 다양한 변경 및 수정을 용이하게 실시할 수 있을 것이다. 특허청구범위의 각 청구항의 내용은 본 명세서를 통해 이해할 수 있는 범위 내에서 인용관계가 없는 다른 청구항에 결합될 수 있다.

Claims (11)

  1. 입력 어레이를 소정의 풀링규칙에 따라 풀링하는 방법으로서,
    상기 입력 어레이 중 풀링할 대상인 제1대상 어레이를 선택하는 제1단계;
    상기 제1대상 어레이의 복수 개의 부분들을 서브 윈도우를 이용하여 각각 상기 풀링규칙에 따라 풀링하여 복수 개의 서브값들을 산출하는 제2단계; 및
    상기 복수 개의 서브값들을 상기 풀링규칙에 따라 풀링하여, 상기 제1대상 어레이의 풀링값을 산출하는 풀링값 산출단계;
    를 포함하며,
    상기 풀링값 산출단계는, 상기 복수 개의 서브값들을 상기 풀링규칙에 따라 풀링하여 얻은 제1값과 나머지 값을 상기 풀링규칙에 이해 풀링하여, 상기 제1대상 어레이의 풀링값을 산출하는 단계인 최종풀링단계를 포함하며,
    상기 나머지 값은 상기 제1대상 어레이 중 상기 서브윈도우를 이용하여 풀링하지 않은 값인,
    풀링 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 입력 어레이 중 풀링할 대상인 제2대상 어레이를 선택하는 단계; 및
    상기 제2대상 어레이 중 상기 서브윈도우가 풀링하지 않은 값들 및 상기 제1값을 상기 풀링규칙에 따라 풀링하여, 상기 제2대상 어레이의 풀링값을 산출하는 단계;
    를 더 포함하며,
    상기 제2대상 어레이는 상기 제1대상 어레이와 다르며,
    상기 제1대상 어레이 중 복수 개의 서브값들을 산출하는 과정에서 사용되었던 제1세트의 값들은 모두 상기 제2대상 어레이에 포함되어 있는,
    풀링 방법.
  4. 제3항에 있어서,
    상기 제2대상 어레이의 크기는 상기 제1대상 어레이의 크기와 동일하며,
    상기 제2대상 어레이 중 상기 제1세트의 값들을 제외한 나머지 값들 중에서 연속적인 인덱스를 갖는 제2세트의 값들의 데이터 크기는 상기 서브윈도우의 크기보다 작은,
    풀링 방법.
  5. 제1항에 있어서, 상기 제2단계 및 상기 풀링값 산출단계 사이에, 상기 복수 개의 서브값들을 복수 개의 버퍼들 내에 저장하는 제3단계를 더 포함하는, 풀링 방법.
  6. 제5항에 있어서,
    상기 입력 어레이 중 풀링할 대상인 제3대상 어레이를 선택하는 단계;
    상기 복수 개의 버퍼들 중 상기 제3대상 어레이에 존재하지 않는 데이터를 풀링한 결과를 저장한 버퍼인 무효 버퍼(invalid buffer)를 결정하는 단계;
    상기 제3대상 어레이 중 상기 제2단계에서 상기 서브 윈도우에 의해 풀링되지 않은 나머지 부분을 확인하는 단계;
    상기 나머지 부분을 상기 서브 윈도우를 이용하여 상기 풀링규칙에 따라 풀링하여 제2서브값을 산출하는 단계;
    상기 제2서브값을 상기 무효 버퍼에 저장하는 단계; 및
    상기 복수 개의 버퍼들 내에 저장되어 있는 값들 및 상기 제3대상 어레이 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이의 풀링값을 산출하는 제5단계;
    를 더 포함하는,
    풀링 방법.
  7. 제6항에 있어서,
    상기 제3대상 어레이의 크기는 상기 제1대상 어레이의 크기와 동일하며,
    상기 나머지 부분을 구성하는 구성요소들의 인덱스들은 연속적인,
    풀링 방법.
  8. 제6항에 있어서,
    상기 제5단계는,
    상기 복수 개의 버퍼들 내에 저장되어 있는 값들을 상기 풀링규칙에 따라 풀링하여 얻은 제2값을 제2버퍼에 저장하는 단계; 및
    상기 제3대상 어레이 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들 및 상기 제2값을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이의 풀링값을 산출하는 단계;
    를 포함하는,
    풀링 방법.
  9. 제5항에 있어서,
    상기 입력 어레이(100) 중 풀링할 대상인 제3대상 어레이(130)를 선택하는 단계;
    상기 복수 개의 버퍼들 중 가장 먼저 갱신된 값을 갖는 버퍼인 갱신대상버퍼를 결정하는 단계;
    상기 제3대상 어레이(130) 중 상기 제2단계에서 상기 서브 윈도우에 의해 풀링되지 않은 나머지 부분(114)을 확인하는 단계;
    상기 나머지 부분(114)을 상기 서브 윈도우를 이용하여 상기 풀링규칙에 따라 풀링하여 제2서브값을 산출하는 단계;
    상기 제2서브값을 상기 갱신대상버퍼에 저장하는 단계; 및
    상기 복수 개의 버퍼들 내에 저장되어 있는 값들 및 상기 제3대상 어레이 중 상기 복수 개의 버퍼들의 값을 결정하는 과정에서 고려되지 않았던 값들을 상기 풀링규칙에 따라 풀링하여, 상기 제3대상 어레이의 풀링값을 산출하는 제5단계;
    를 더 포함하는,
    풀링 방법.
  10. 제1항에 있어서,
    상기 서브 윈도우의 크기는 상기 제1대상 어레이의 크기보다 작으며,
    상기 복수 개의 부분들 각각은 서로에 대하여 오버랩되지 않고,
    상기 복수 개의 부분들 각각의 크기는 상기 서브 윈도우의 크기와 동일하며, 그리고
    상기 각각의 부분을 구성하는 구성요소들의 인덱스들은 연속적인,
    풀링 방법.
  11. 제1항에 있어서,
    상기 서브 윈도우의 크기는 2이고, 상기 제1대상 어레이 중 홀수 번째 인덱스를 갖는 데이터의 개수는 N개이며,
    상기 풀링값 산출단계에서 또는 상기 풀링값 산출단계 이전에, 상기 제1대상 어레이 중 홀수 번째 인덱스를 갖는 N개의 데이터를 크기 N을 갖는 재활용 버퍼에 모두 저장하도록 되어 있고,
    상기 풀링값 산출단계 이후에, 상기 입력 어레이(100) 중 풀링할 대상인 새로운 대상 어레이를 선택하는 단계; 및
    상기 재활용 버퍼 중 상기 나머지 값을 갖는 부분을, 상기 새로운 대상 어레이 중 하나의 데이터로 갱신하는 단계;
    를 더 포함하며,
    상기 새로운 대상 어레이 중 하나의 데이터는, 상기 새로운 대상 어레이 중 홀수 번째 인덱스를 갖는 데이터 중 상기 제1대상 어레이 중 홀수 번째 인덱스를 갖는 데이터에 포함되지 않은 것인,
    풀링 방법.
KR1020210153244A 2021-11-09 2021-11-09 1차원 어레이 풀링 방법 및 이를 위한 장치 KR102395743B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020210153244A KR102395743B1 (ko) 2021-11-09 2021-11-09 1차원 어레이 풀링 방법 및 이를 위한 장치
PCT/KR2022/006215 WO2023085535A1 (ko) 2021-11-09 2022-04-29 1차원 어레이 풀링 방법 및 이를 위한 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210153244A KR102395743B1 (ko) 2021-11-09 2021-11-09 1차원 어레이 풀링 방법 및 이를 위한 장치

Publications (1)

Publication Number Publication Date
KR102395743B1 true KR102395743B1 (ko) 2022-05-09

Family

ID=81583114

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210153244A KR102395743B1 (ko) 2021-11-09 2021-11-09 1차원 어레이 풀링 방법 및 이를 위한 장치

Country Status (2)

Country Link
KR (1) KR102395743B1 (ko)
WO (1) WO2023085535A1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200100812A (ko) * 2018-01-04 2020-08-26 테슬라, 인크. 하드웨어 기반 풀링을 위한 시스템 및 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10977854B2 (en) * 2018-02-27 2021-04-13 Stmicroelectronics International N.V. Data volume sculptor for deep learning acceleration
CN110383330A (zh) * 2018-05-30 2019-10-25 深圳市大疆创新科技有限公司 池化装置和池化方法
KR20210036715A (ko) * 2019-09-26 2021-04-05 삼성전자주식회사 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200100812A (ko) * 2018-01-04 2020-08-26 테슬라, 인크. 하드웨어 기반 풀링을 위한 시스템 및 방법

Also Published As

Publication number Publication date
WO2023085535A1 (ko) 2023-05-19

Similar Documents

Publication Publication Date Title
US11080049B2 (en) Apparatus and methods for matrix multiplication
US11568258B2 (en) Operation method
JP7078758B2 (ja) 機械学習モデルを改良して局所性を改善させること
US20190138922A1 (en) Apparatus and methods for forward propagation in neural networks supporting discrete data
US11775832B2 (en) Device and method for artificial neural network operation
CN114503125A (zh) 结构化剪枝方法、***和计算机可读介质
US11544542B2 (en) Computing device and method
CN109993293B (zh) 一种适用于堆叠式沙漏网络的深度学习加速器
CN113723589A (zh) 混合精度神经网络
CN111768458A (zh) 一种基于卷积神经网络的稀疏图像处理方法
US10990525B2 (en) Caching data in artificial neural network computations
WO2020134927A1 (zh) 一种数据处理方法及装置
CN110009048B (zh) 一种神经网络模型的构建方法以及设备
US20200311511A1 (en) Accelerating neuron computations in artificial neural networks by skipping bits
CN113743587A (zh) 一种卷积神经网络池化计算方法、***、及存储介质
WO2022062391A1 (zh) 一种加速rnn网络的***、方法及存储介质
KR102395743B1 (ko) 1차원 어레이 풀링 방법 및 이를 위한 장치
CN114662646A (zh) 实现神经网络的方法和装置
US11494624B2 (en) Accelerating neuron computations in artificial neural networks with dual sparsity
CN116090518A (zh) 基于脉动运算阵列的特征图处理方法、装置以及存储介质
US11631002B2 (en) Information processing device and information processing method
WO2021146977A1 (zh) 网络结构搜索方法和装置
JP2023544560A (ja) 文字認識における制約条件を強制するためのシステムおよび方法
CN112100446B (zh) 搜索方法、可读存储介质和电子设备
US20190073584A1 (en) Apparatus and methods for forward propagation in neural networks supporting discrete data

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant