• 검색 결과가 없습니다.

3.4 Adaptive keypoint generation 하드웨어 구조

3.4.1 Gaussian filter bank 구조

본 절에서는 기존 SIFT 의 Gaussian filter bank 구조를 설명하고, adaptive keypoint generation 을 위해 제안하는 하드웨어와 기존 Gaussian filter bank 간에 연결 동작에 대해 설명한다.

Gaussian filter bank 는 외부 메모리에 저장된 입력 이미지로부터 Gaussian filtering 된 이미지를 생성하고, 이를 통해 DoG 이미지를 생성하 는 부분이다. Gaussian filtering 을 수행하기 위해서, 사용하는 내부 메모리의

양을 줄이기 위해서, Gaussian filter bank 는 블록 단위로 연산이 진행된다.

전체 이미지를 이미지의 폭을 기준으로 96 픽셀 만큼씩 처리하고, 다음 블록을 처리하도록 되어 있다. 그림 3.9은 블록 단위 처리를 위한 연산 순서 를 보여준다.

그림 3.9 입력 이미지 data loading 방식

또한 (96 x image height) 의 데이터를 처리하기 위해서 데이터를 한번에 가져오지 않고, circular buffer 형태의 block memory 를 사용하여, 순차적으 로 처리하도록 되어 있다. Block memory 의 크기는 그림 3.10와 같이 size 가 128(32 word)이고, 전체의 개수가 64 개인 buffer 를 사용하여 저장한다.

Source loader 로부터 들어오는 픽셀들은 buffer 에 차례로 저장된다. 128 픽셀의 데이터가 다 저장된 이후에는 다음 line 의 128 개 데이터가 buffer

buffer 가 다 채워지면, 가장 먼저 저장된 buffer 는 제일 아래로 내려가고 새로운 128개의 data 가 buffer 에 저장되게 된다.

그림 3.10 Source buffer 구조

내부에서 사용하는 circular buffer 의 메모리 크기는 Gaussian filter 의 kernel size 와 관련이 있다. Gaussian filter 는 Gaussian 함수를 FIR(Finite Impulse Response) filter 로 근사화하여 계산한다. Gaussian 함수는 중심점에 서 멀어질수록 함수값이 급격히 작아지므로 실용적으로 사용시에는 일정 범 위의 filter 계수만을 적용하여 사용하게 된다. 본 연구에서는 함수값이 Gaussian function 최대값의 1% 이하로 떨어지는 지점까지의 함수값을 필터 계수로 사용하였다. 이 지점은 2σ√ 10 3σ 에 위치하게 된다. Gaussian

함수는 좌우 대칭을 이루기 때문에, Gaussian kernel 의 크기는 2 ∙ 3 1 로 계산된다[4]. 본 연구에서는 1.6 의 값을 사용하였다. 따라서 scale-space 를 구성하기 위해서, filter scale 에 따른 Gaussian kernel 크기는 표 3.3 와 같이 만들어진다.

표 3.3 Filter scale 에 따른 Gaussian kernel 크기

Filter scale ∙ 2/ ∙ 2 / ∙ 2 ∙ 2/ ∙ 2/

Gaussian

Kernel size 11 13 17 21 25 31

Gaussian filter bank module 은 가로 방향과 세로 방향에 대해서 각각 Gaussian filtering 을 수행한다. 따라서 source line buffer 의 크기는 SIFT 동 작을 위해서, 가장 큰 Gaussian kernel 의 Size 를 기준으로 최소 31 line 이 상의 Data 가 필요하게 된다. 따라서 31 개의 line buffer 가 다 채워지게 되 면, 세로로 한 픽셀을 읽어 Gaussian filter bank 에 보내게 된다.

또한 가장 큰 kernel size 를 기준으로 96 개의 픽셀을 filtering 을 하기 위해서 위해서 좌, 우 15 픽셀의 data 가 추가로 필요하고, data 를 word 단위로 처리하기 때문에, 좌, 우 16 픽셀에 해당하는 크기만큼의 data 를 추 가로 저장하게 된다. 따라서 한 line buffer 의 크기는 128 로 설정한다.

제안한 hardware 구조에서는 해당 픽셀의 SIFT 의 연산 이전에 keypoint 의 일정 영역 내의 발생 분포를 예측하기 위해서, 추가적으로 32 line 의 data 를 source line buffer 에 저장하여 사용하였다.

본 연구에서는 32x32 단위를 keypoint 분포를 예측하기 위한 단위로 사 용하였다. SIFT 는 (96 x image height) 단위로 나누어 연산이 진행되므로 그 림 3.11 (a) 와 같이 source buffer 에는 6 개의 keypoint 를 예측하기 위한 단위가 만들어지게 된다. 따라서, 세로 방향의 Gaussian filtering 을 위해서 필요한 buffer 의 line 수는 32 이지만 미리 keypoint 분포를 예측하기 위해 서, 그림 3.10 에서와 같이 circular buffer 구조의 크기를 64 line 으로 구성 하였다.

Keypoint 분포를 예측하기 위한 FAST detector 와 Gaussian filter bank 는 그림 3.11 (b) 와 같이 시간적으로 FAST detector 가 먼저 수행되어 ① 영역 에 대한 keypoint 분포를 예측한 이후에 그림 3.10(b) 와 같이 ① 영역의 Gaussian filtering 을 수행하도록 되어 있다. FAST detector 는 Gaussian filter bank 의 수행시간보다 빠르게 수행되기 때문에, source line buffer 에서 data 를 읽어오는 기준은 SIFT 의 Gaussian filtering 의 연산속도에 영향을 받게 된다. 또한 FAST detector 와 Gaussian filter bank 는 handshaking 구 조로 동작하기 때문에, 그림에서와 같이 FAST 는 ② 번 영역에 대한 FAST 의 연산이 완료되면, Gaussian filter bank 에 이를 알려주고, ③ 번 영역의 계산을 수행하고, Gaussian filter bank 는 ② 번 영역에 대한 Gaussian filtering 을 수행하게 된다. 따라서 6 개의 블록 정보를 저장할 공간만 있으 면, 순차적으로 사용이 가능하다.

0 1 2

3 4 5

96 pixels

0 1 2

3 4 5

④ :

:

(a)

(b)

그림 3.11 FAST 와 Gaussian filter bank 연동 구조 (a) Keypoint 예측 블록 구성 (b) Timing diagram

위와 같은 buffer 구조를 통해 순차적으로 keypoint 분포 예측과

하는 하드웨어 구조에서 초기 3개 블록에 대한 keypoint 발생을 예측하기 위한 FAST detector 의 연산에 의한 latency 만 가지게 된다.