• 대한전기학회
Mobile QR Code QR CODE : The Transactions of the Korean Institute of Electrical Engineers
  • COPE
  • kcse
  • 한국과학기술단체총연합회
  • 한국학술지인용색인
  • Scopus
  • crossref
  • orcid

  1. (Department of Semiconductor System Engineering, Kumoh National Institute of Technology, Republic of Korea. E-mail : 20246116@kumoh.ac.kr, seojeongyun@kumoh.ac.kr, darkjyuk@kumoh.ac.kr)



Convolution layer, Hardware, Verilog HDL, Deep learning

1. 서 론

최근 인공지능과 딥러닝 기술의 급속한 발전은 다양한 산업 분야에서 실시간 데이터 분석 및 분류 시스템에 대한 수요를 많이 증가시켰다. 다양한 딥러닝 네트워크 구조 중에서도 콘볼루션 네트워크 (Convolutional Neural Network)는 이미지 인식 (Recognition) 및 분류 (Classification) 등 다양한 컴퓨터 비전 과제에서 탁월한 성능을 보이는 신경망 구조로 각광받아 왔다 [1-7]. 콘볼루션 네트워크는 다차원 데이터의 특성을 추출하고 학습하는 데 매우 효과적이며, 특히 영상 및 이미지 처리 분야에서 뛰어난 성능을 보여주고 있다.

하지만, 딥러닝 네트워크가 고도화되면서 모델의 복잡성이 증가하였으며, 이는 하나의 딥러닝 네트워크의 연산에 막대한 계산 자원이 요구되는 결과를 초래하고 있다. 컴퓨터 비전에서의 대표적인 작업인 이미지 분류를 위해 필요한 콘볼루션 네트워크와 완전 연결 네트워크 (Fully-connected network)는 다수의 콘볼루션 층과 완전 연결 층으로 이루어진다. 각 층에서는 가중치 값과 층의 입력값에 의한 다수의 합성곱 연산과 행렬 연산이 수행된다. 최근 개발되는 네트워크들은 수백만의 가중치 값을 가지고 있기에 합성곱 연산과 행렬 연산에서는 수백만 이상의 곱과 합 연산 (Multiply-ACcumlate, MAC)이 발생한다[8,9]. 딥러닝 네트워크를 실제 환경에서 적용하여 사용하기 위해서는 정확도 성능뿐만 아니라 MAC 연산을 효율적으로 처리할 수 있어야만 한다.

콘볼루션 네트워크와 같은 딥러닝 네트워크의 학습에서 요구되는 수많은 MAC 연산을 효율적으로 처리하기 위해서 병렬 연산에 특화된 GPU를 사용하고 있다. GPU는 다수의 연산 코어를 통해 수많은 MAC 연산을 병렬적으로 처리할 수 있도록 설계되었다. 이러한 GPU 구조의 특징으로 인해 인공지능 (Artificial Intelligence, AI)의 딥러닝 분야에서 학습을 위해 많이 활용되고 있다.

딥러닝 분야는 GPU에 의한 빠른 학습을 통해 괄목할 만한 성장을 달성하였으며 최근 딥러닝을 기반한 다양한 실생활 애플리케이션이 개발되고 있다. 특히 Open AI사에서 제공하는 Chat-GPT와 같은 생성형 AI 및 테슬라의 카메라 비전을 기반으로 한 자율주행과 같은 딥러닝을 기반한 애플리케이션은 인간의 삶을 직접적으로 변화시키고 있다 [10-13].

하지만, 인공지능 분야는 GPU 사용을 통해 괄목할 만한 성장을 달성하였음에도 불구하고, 실제 환경으로의 적용에 있어 GPU의 사용은 한계를 맞고 있다. 앞서 언급한 딥러닝 기반 애플리케이션들에 있어 실시간 동작 및 전력 효율은 필수적이다. 하지만, GPU의 병렬 연산 구조는 그래픽 처리를 위해 범용적으로 설계된 것으로 딥러닝 네트워크 동작에 최적화되어 있지 않다. 다시 말해, 딥러닝 네트워크의 연산을 위해 사용될 수 있지만 해당 연산에 최적화되어 있지 않다. 또한 전력 소모가 많으며 차지하는 부피 또한 크기에 GPU를 사용하여 딥러닝 네트워크를 실제 환경에 적용하는 것은 시스템의 환경에 따라 비효율적일 수 있다 [14].

결과적으로 딥러닝 네트워크에 최적화된 하드웨어 개발이 필요하며, 최근 이를 위한 AI 하드웨어 가속기 개발이 활발히 이루어지고 있다. 이러한 가속기는 딥러닝 네트워크의 핵심 연산인 행렬 곱셈 및 합성 곱셈 등의 MAC 연산에 최적화된 병렬 연산 구조를 하드웨어로 설계함으로써 실시간 추론 성능을 향상하게 시킴과 동시에 전력 소모를 줄이고자 한다.

AI 하드웨어 가속기 설계의 이점은 다음과 같이 설명할 수 있다. 기존 GPU를 사용한 추론은 딥러닝 소프트웨어 프레임워크를 통해 순차적으로 입력 데이터를 인가하기 때문에 하드웨어의 파이프라이닝 특징을 사용하기 어렵다. 이것으로 인해 딥러닝 네트워크 실행의 최적화에 있어 제약사항이 있다. 즉, CPU의 연산 보조장치로써의 GPU 설계로 인해 내재적인 한계성이 있다. 그에 비해 AI 하드웨어는 설계단계에서부터 파이프라이닝을 매우 효과적으로 구현할 수 있으며, 특정 작업에 맞춰 최적화된 고정된 회로에서 각 연산 단계를 동시에 병렬로 처리할 수 있다. 특히 데이터를 실시간으로 처리해야 하는 딥러닝 추론 연산에서 하드웨어 가속기의 사용은 매우 효과적일 수 있다.

본 연구에서는 기존 AI 하드웨어에 추가 기여하기 위하여 임의의 패딩 (padding)과 스트라이딩 (striding) 설정에 대해서도 합성곱 연산을 가속할 수 있는 AI 하드웨어를 구현하는 방법을 제시한다. 이를 위해 메모리 입출력 접근 방식을 세부적으로 설계하여 임의의 패딩 및 스트라이딩 설정에서도 유연하고 효율적으로 동작할 수 있도록 한다. 또한, 이러한 일반화 과정을 설명하기 위해 수학적 표기를 활용하여 하드웨어 설계 방식을 명확하게 제시한다.

이미지 분류를 위한 콘볼루션 네트워크 설계를 하드웨어 언어인 Verilog HDL을 사용하여 하드웨어로 구현하였으며 이를 소프트웨어로 구현된 네트워크와 성능을 비교하고 분석 및 검증한다. 본 연구의 하드웨어는 정수형 값을 처리하도록 설계하였기 때문에 소프트웨어로 학습된 네트워크의 가중치 값 역시 정수형으로 변환하여야 한다. 이를 위해서 기존 양자화 기법들을 활용하여 부동소수점 표현의 가중치 값을 정수형 표현의 가중치 값으로 변환한다. 하드웨어 검증을 위해 사용할 양자화된 가중치 값을 도출하기 위해 두 가지 대표적인 이미지 분류 데이터셋인 MNIST 와 Fashion MNIST를 사용하였다. 해당 데이터셋으로부터 얻은 양자화된 가중치를 바탕으로 RTL 시뮬레이션을 수행하여 하드웨어 추론 결과를 도출한다. RTL 시뮬레이션을 통해 도출한 하드웨어 결과를 소프트웨어에 의한 추론 결과와 비교함으로써 최종적으로 설계된 하드웨어를 검증한다.

2. 콘볼루션 네트워크 구조 및 양자화 기법

본 장에서는 하드웨어로 설계 및 소프트웨어로 학습한 딥러닝 네트워크 (Deep Neural Network, DNN)의 구조에 관해서 설명한다. 또한, 학습된 가중치를 양자화하는 기법을 설명하고 해당 양자화 기법 적용에 따른 모델의 정확도 변화에 관해서 설명한다.

2.1 콘볼루션 네트워크 구조 설명

그림 1에서 볼 수 있듯이 이미지 분류를 위한 딥러닝 네트워크를 여러 개의 합성곱 층 (Convolutional layer)과 여러 개의 완전 연결 층 (Fully connected layer)을 순차적으로 적층하여 구성한다. 표 1은 두 개의 이미지 분류 데이터셋별 상세한 딥러닝 네트워크 구조를 보여준다. 해당 표에서 conv3-5의 의미는 해당 콘볼루션 층에서 사용하는 커널의 높이와 너비가 3이고 커널의 총 개수가 5임을 의미한다. 그리고 fc-10은 해당 완전 연결 층의 출력 특징값의 수가 10임을 의미한다.

각 데이터셋별로 딥러닝 네트워크를 구성하는 콘볼루션 층과 완전 연결 층의 수는 동일하나 세부적인 변수의 값은 상이하다. Fashion MNIST를 위한 네트워크를 구성하는 가중치의 수가 더 많도록 설정이 되어 있다. 이는 해당 데이터셋이 MNIST 데이터셋에 비해 이미지의 복잡성이 더 높기에 네트워크의 표현력이 더 높아져야 분류의 성능이 높아질 수 있기 때문이다.

본 연구에서는 사용할 콘볼루션 네트워크 구조를 가능한 성능을 유지하면서도 가중치의 수를 줄이는 방향으로 설정하였다. 이와 같이 네트워크 구조를 도출한 이유는 딥러닝 모델을 구동시키는 하드웨어의 환경이 제약적인 경우로 고려하였기 때문이다. 이러한 제약적 환경에서는 모델의 구조를 작게 설계하여 가중치의 수를 최소화함으로써 하드웨어 자원 활용의 효율성을 높일 수 있다. 더불어, 모델의 크기가 작을수록 RTL 시뮬레이션 검증의 시간 역시 줄어들기 때문에 이러한 설정 방식은 연구적 측면에서도 타당하다 할 수 있다.

그림 1. 이미지 분류를 위한 콘볼루션 네트워크 구조.

Fig. 1. Structure of a convolution neural network for image classification.

../../Resources/kiee/KIEE.2025.74.4.644/fig1.png

표 1 데이터셋별 딥러닝 네트워크 구조.

Table 1 Structure of DNNs for each Dataset.

For MNIST

For Fashion MNIST

Input

($28\times 28\times 1$)

Convolution Block

conv3-5

conv3-30

conv3-10

conv3-60

conv3-20

conv3-100

conv3-10

conv3-60

conv3-5

conv3-20

Flatten

Fully connected

Block

fc-180

fc-720

fc-90

fc-180

fc-40

fc-60

fc-10

fc-10

Output

softmax

2.2 양자화 (Quantization)

딥러닝 네트워크를 하드웨어에서 추론하기 위해서는 소프트웨어에서 학습한 부동소수점 가중치를 정수 가중치로 변환할 필요가 있다. 부동소수점 연산은 복잡한 수의 표현을 처리해야 하므로 이를 계산하기 위해 많은 하드웨어 자원이 요구되지만, 정수형 연산은 고정된 비트 수로 처리할 수 있어 회로 설계가 간단하고 연산 속도가 빠르기 때문이다.

간단히 부동소수점을 정수형으로 변환하는 양자화 기법으로 학습 후 양자화 (Post-Training Quantization)가 있다. 양자화에서 정수형으로 변환은 딥러닝 네트워크의 성능이 저하될 수 있기에 양자화 기법은 가중치를 정수형으로 변환하되 모델의 성능을 최대한 유지하는 것도 중요하다. 이를 고려한 기법이 양자 인지 학습 (Quantization-Aware Training)이다.

학습 후 양자화 기법 (PTQ)은 학습이 완료된 딥러닝 네트워크의 부동소수점 가중치 값을 주어진 고정된 범위의 정수형으로 변환하여 이는 추가적인 학습 과정이 필요하지 않다. 하지만 부동소수점 값을 정수로 변환하는 과정에서 값의 정밀도가 손실되며 이는 네트워크의 추론 정확도를 감소시킬 수 있다.

양자 인지 학습 (QAT)은 양자화를 고려하여 딥러닝 네트워크를 추가 학습하는 기법이다. 네트워크의 가중치 값을 학습 중에 양자화하며 해당 정수형 가중치로 순전파하여 결과를 얻는다. 해당 결과를 이용하여 오류 역전파 (Backpropagation)를 수행하고 네트워크를 최적화한다. 이 방식은 양자화에 따른 손실도 학습 중에 고려되기 때문에 앞선 PTQ 방식에 비해 더 높은 정확도와 성능을 달성할 수 있다.

본 연구에서는 두 양자화 방법에 대한 성능을 소프트웨어적으로 비교하고 각 기법을 통해 얻은 양자화 가중치를 설계한 하드웨어 검증에 활용한다.

2.3 딥러닝 네트워크 학습 변수 설정 및 결과

표 1의 네트워크를 학습시키기 위해 epoch는 25 최적화 기법 (optimizer)은 Adam, 학습률은 $10^{-4}$, 가중치 감쇄 (weight decay)는 $5\times 10^{-4}$로 설정한다. 학습률 제어 (scheduler)는 cycliclr, 활성화 함수는 ReLU를 사용한다.

표 2는 각 데이터셋과 양자화 기법에 대한 추론 정확도를 나타낸다. 표에서 N/A는 부동소수점 가중치에 의한 추론 정확도로 양자화 기법을 적용했을 때의 정확도보다 높음을 알 수 있다. MNIST 데이터셋의 경우 QAT가 PTQ보다 높은 양자화 성능을 보였으며 Fashion MNIST 데이터셋에 대해서는 거의 동일한 성능이 보임을 알 수 있다.

표 2 PTQ와 QAT 적용에 따른 추론 성능.

Table 2 Inference accuracy of networks quantized by PTQ and QAT.

Quantization

Accuracy (%)

MNIST

Fashion MNIST

N/A

96.73

91.1

PTQ

95.46

90.98

QAT

96.13

90.82

3. 하드웨어 설계

본 장에서는 딥러닝 네트워크의 합성곱 층과 완전 연결 층을 하드웨어로 설계하는 과정을 상세히 설명한다.

3.1 콘볼루션 층 (합성곱 층)의 아키텍쳐

그림 2는 딥러닝 네트워크의 콘볼루션 블록을 구성하는 $c$번째 합성곱 층의 아키텍처이며, 설명을 위한 변수를 다음과 같이 정의한다. 입력 특징 맵, $\mathbf{I}_{(\text {Feat }, c)} \in \mathbf{R}^{\left(W_{\mathrm{I}} \times H_{\mathrm{I}} \times G_{\mathrm{I}}\right)}$ (혹은 이전 합성곱 층의 출력 특징 맵, $\mathbf{O}_{(\text {Feat }, c-1)}$)을 받아 가중치와 합성곱 연산을 수행한 후 해당 합성곱 층의 출력 특징 맵, $\mathbf{O}_{(\text {Feat }, c)} \in \mathbf{R}^{\left(W_{\mathrm{O}} \times H_{\mathrm{O}} \times G_{\mathrm{O}}\right)}$을 생성한다. 이때, 입력 특징 맵의 너비는 $W_{{I}}$, 높이는 $H_{{I}}$, 채널 수는 $C_{{I}}$이다. 합성곱 연산에 사용된 커널의 너비, 높이, 그리고 채널 수는 $W_{{K}}$, $H_{{K}}$, 그리고 $C_{{K}}$로 정의된다. 마지막으로 출력 특징 맵, ${O}_{({Feat},\: c)}$의 너비, 높이, 그리고 채널 수는 각각 $W_{{O}}$, $H_{{O}}$, 그리고 $C_{{O}}$이다.

그림 2의 합성곱 층은 스트라이드-패딩 모듈 (Stride-Padding, SP module), 콘볼루션 층 모듈 (Convolution Layer module), 그리고 가중치 및 입력/출력 특징 맵을 저장하거나 읽을 수 있는 메모리 (Memory)로 구성된다.

스트라이드-패딩 (SP) 모듈은 FW (Feature Write) 모듈과 FR(Feature Read) 모듈로 구성이 된다. $c$번째 합성곱 층의 FW 모듈은 입력 특징 맵을 메모리에 저장하기 위한 주소, $A_{({FW},\: c)}$를 계산하고, $c$번째 합성곱 층의 FR 모듈은 메모리에 저장된 입력 특징 맵을 읽어오기 위한 주소, $A_{({FR},\: c)}$를 계산한다.

그림 2의 $c$번째 합성곱 층의 SP 모듈에서는 메모리로의 쓰기와 메모리로부터 읽기 두 가지 동작을 수행한다. 먼저 쓰기 동작의 경우 이전 $(c-1)$번째 합성곱 층에서의 결과를 $c$번째 합성곱 층의 메모리, $M_{({I},\: c)}$에 저장한다. 읽기 동작의 경우 $M_{({I},\: c)}$로부터 값들을 읽어 $c$번째 합성곱 층의 합성 연산을 위한 수용영역 (receptive field)를 구성한다.

이전 $(c-1)$번째 합성곱 층에서 하나의 수용영역과 커널들의 합성곱 결과인 출력 특징 맵 벡터, $O_{({Feat},\: c-1)}\in{R}^{({C}_{{I}})}$를 입력으로 받아 다음 $c$번째 합성곱 층의 메모리, $M_{({I},\: c)}$에 저장한다. 벡터 $O_{({Feat},\: c-1)}$의 $C_{{I}}$개의 요솟값은 $M_{({I},\: c)}$의 $A_{({FW},\: c)}$번째 주소를 시작으로 순차적으로 저장이 된다.

모든 출력 특징 맵 벡터가 $M_{({I},\: c)}$에 저장되면 $c$번째 합성곱 층의 합성 연산을 위한 수용영역을 생성한다. 수용영역은 SP 모듈의 FR 모듈에서 결정된 $A_{({FR},\: c)}$주소를 이용하여 생성된다. 읽어온 값인 $M_{({I},\: c)}(A_{({FR},\: c)})$을 레지스터 버퍼에 순차적으로 저장함으로써 하나의 수용영역, $D_{{rec}}\in R^{(W_{{K}}\times H_{{K}}\times C_{{K}})}$을 생성한다.

메모리 $M_{({I},\: c)}$에 대해 값을 읽고 쓰는 동작이 하나의 포트 (port)를 통해서 실행되어야 한다. 이를 위해 하나의 MUX (Multiplexer)를 사용하여 해당 MUX의 입력으로는 $A_{({FW},\: c)}$와 $A_{({FR},\: c)}$이 있으며 제어 신호를 통해 메모리에 접근할 최종 주소 $A_{({Feat},\: c)}$가 결정된다.

콘볼루션 블록의 $c$번째 합성곱 층의 가중치 및 바이어스 메모리는 $M_{({W},\: c)}$와 $M_{({B},\: c)}$이다. 각 메모리로부터 값을 읽어오기 위한 주소를 각각 $A_{({W},\: c)}\in[0,\: L_{{W}}-1]$, $A_{({B},\: c)}\in[0,\: L_{{B}}-1]$로 정의한다. 변수 $L_{{W}}$와 $L_{{B}}$는 메모리 $M_{({W},\: c)}$와 $M_{({B},\: c)}$의 깊이 (depth)를 의미한다. 각 메모리로부터 가중치 값, $M_{({W},\: c)}(A_{({W},\: c)})$와 편향 값, $M_{({B},\: c)}(A_{({B},\: c)})$를 순차적으로 읽어 레지스터 버퍼에 저장함으로써 가중치 값 벡터, $D_{{W}}\in R^{(L_{{W}})}$와 편향 값 벡터, $D_{{B}}\in R^{(L_{{B}})}$를 생성한다.

최종적으로, SP 모듈은 하나의 수용영역 ($D_{{rec}}$), 가중치 값 벡터 ($D_{{W}}$), 편향 값 벡터 ($D_{{B}}$)를 콘볼루션 층 모듈로 전달하여 합성곱 연산을 실행하며, 각 벡터는 아래와 같이 수식 (1), (2), (3)으로 정의할 수 있다.

(1)
$D_{{rec}}=[M_{({I},\: c)}(i)]_{A_{({Feat},\: c)}\le i\le A_{({Feat},\: c)}+ W_{{K}}\times H_{{K}}\times C_{{K}}- 1}$,
(2)
$D_{{W}}=[M_{({W},\: c)}(A_{({W},\: c)})]_{0\le A_{({W},\: c)}\le L_{{W}}-1}$,
(3)
$D_{{B}}=[M_{({B},\: c)}(A_{({B},\: c)})]_{0\le A_{({B},\: c)}\le L_{{B}}-1}$.

수식 (1)은 메모리 $M_{({I},\: c)}$에서 하나의 수용영역을 만들기 위해 필요한 주소, $i\in[A_{({Feat},\: c)},\: ({A}_{({Feat},\: c)}+{W}_{{K}}\times H_{{K}}\times C_{{K}}-1)]$에 대응하는 값들의 집합을 벡터로 나타낸 것이다. 수식 (2)(3)은 메모리 $M_{({W},\: c)}$와 $M_{({B},\: c)}$에서 주소 $A_{({W},\: c)}$와 $A_{({B},\: c)}$에 대응하는 값들의 집합을 벡터로 나타낸 것이다.

그림 2. 합성곱 층의 하드웨어 아키텍처.

Fig. 2. Hardware architecture of a convolution layer.

../../Resources/kiee/KIEE.2025.74.4.644/fig2.png

3.2 콘볼루션 층 모듈 (Convolutional Layer)

해당 모듈에서는 $c$번째 콘볼루션 층에서의 합성곱 연산을 수행한다. 합성곱 연산에서의 MAC 연산은 콘볼루션 코어 (CNN core) 모듈에서 수행되며 유한 상태 머신으로 콘볼루션 코어 모듈을 제어하여 최종 출력 특징 맵 벡터, $O_{({Feat},\: c)}\in{R}^{(C_{{O}})}$를 생성한다. 유한 상태 머신은 전달받은 $D_{{rec}}$, $D_{{W}}$, $D_{{B}}$ 벡터들을 콘볼루션 코어 모듈의 여러 MAC 연산 코어들로 전달한다. 전달받은 수용영역, $D_{{rec}}$에 대한 합성곱 연산이 완료되어 $O_{({Feat},\: c)}$ 벡터가 생성되면 다음 $(c+1)$번째 합성곱 층의 입력으로 전달한다.

3.2.1 콘볼루션 코어 모듈 (CNN core)

해당 모듈에서는 $D_{{rec}}$, $D_{{W}}$, $D_{{B}}$ 벡터들의 요솟값들을 MAC 연산코어들로 분산시켜 합성곱 연산을 병렬적으로 수행한다. 그림 3은 해당 모듈에서 수행되는 연산 과정을 단계별로 보여준다. 이 연산은 총 4단계로 구성되며, 단계 1에서는 $D_{{rec}}$, $D_{{W}}$가 입력으로 사용되고, 단계 4에서는 $D_{{B}}$가 입력으로 사용되어 최종적으로 출력 특징 맵 벡터 $O_{({Feat},\: c)}$를 생성한다.

합성곱 연산으로 계산되는 $O_{({Feat},\: c)}$ 벡터의 $i\in[0,\: C_{{O}}-1]$번째 요소인 $[O_{({Feat},\: c)}]_{(i)}$의 수식은 다음과 같다. 수식 (4)그림 3에서 단계 1 (stage 1)에서 단계 4 (stage 4)까지의 과정을 의미하며 $[O_{({Feat},\: c)}]_{(i)}$는 단계 4에서 주황색 벡터의 $i$번째 요소에 바이어스를 더한 결과이다. $j\in[0,\: C_{{I}}-1]$는 입력 채널의 인덱스를 나타내며, $k\in[0,\: W_{{K}}\times H_{{K}}-1]$는 커널 요소의 인덱스를 의미한다.

(4)
$\begin{align*} [O_{({Feat},\: c)}]_{(i)}=\sum_{j=0}^{C_{{I}}-1}\sum_{k=0}^{W_{{K}}\times H_{{K}}-1}([D_{{rec}}]_{(W_{{K}}\times H_{{K}}\times C_{{I}}\times i+W_{{K}}\times H_{{K}}\times j + k)}\\ \times[D_{{W}}]_{(W_{{K}}\times H_{{K}}\times C_{{I}}\times i+W_{{K}}\times H_{{K}}\times j + k)})+[D_{{B}}]_{(i)}. \end{align*}$

단계 1 : 수식 (4)를 수식 (5)와 같이 재작성할 수 있으며, 여기서 $[V_{S2}]_{(k \vert i,\: j)}$는 수식 (6)과 같다.

(5)
$[O_{({Feat},\: c)}]_{(i)}=\sum_{j=0}^{C_{{I}}-1}\sum_{k=0}^{W_{{K}}\times H_{{K}}-1}[V_{{S}2}]_{(k \vert i,\: j)}+[{D}_{{B}}]_{(i)}$,
(6)
$ \begin{align*} [V_{{S}2}]_{(k \vert i,\: j)}=[D_{{rec}}]_{(W_{{K}}\times H_{{K}}\times C_{{I}}\times i+W_{{K}}\times H_{{K}}\times j + k)}\\ \times[D_{{W}}]_{(W_{{K}}\times H_{{K}}\times C_{{I}}\times i+W_{{K}}\times H_{{K}}\times j + k)}. \end{align*} $

수식 (6)에서 $i$와 $j$ 값은 주어지는 값이며 $V_{{S}2}\in R^{(W_{{K}}\times H_{{K}})}$ 벡터는 그림 3의 단계 2에서의 벡터를 의미하고 해당 벡터의 각 요솟값을 수식 (6)으로 계산한다. 단계 1에서 생성되는 $V_{{S}2}$ 벡터의 총 수는 $C_{{O}}\times C_{{I}}$이다.

단계 2 : 수식 (5)를 수식 (7)과 같이 재작성할 수 있으며, 여기서 $[V_{{S}3}]_{(j \vert i)}$은 수식 (8)과 같이 정의된다.

(7)
$[O_{({Feat},\: c)}]_{(i)}=\sum_{j=0}^{C_{{I}}-1}[V_{{S}3}]_{(j \vert i)}+[D_{{B}}]_{(i)}$,
(8)
$[V_{S3}]_{(j \vert i)}=\sum_{k=0}^{W_{{K}}\times H_{{K}}-1}[V_{S2}]_{(k \vert i,\: j)}$.

수식 (8)에서 $i$는 주어지는 변수이며, $V_{S3}\in{R}^{(C_{{I}})}$ 벡터는 그림 3의 단계 3에서의 벡터를 의미하며 총 $C_{{I}}$개가 생성된다.

단계 3 : 수식 (7)은 수식 (9)와 같이 다시 정의할 수 있고, 여기서 $[V_{S4}]_{(i)}$은 수식 (10)과 같이 정의된다.

(9)
$[O_{({Feat},\: c)}]_{(i)}=[V_{{S}4}]_{(i)}+[D_{{B}}]_{(i)}$,
(10)
$[V_{{S}4}]_{(i)}=\sum_{{j}=0}^{{C}_{{I}}-1}[V_{{S}3}]_{(j \vert i)}$.

수식 (10)에서 $i$는 주어지는 변수이며, $V_{{S}4}\in{R}^{(C_{{O}})}$벡터는 그림 3의 단계 4에서의 벡터를 의미하며 총 1개가 생성된다.

단계 4 :  수식 (9)를 기반으로 단계 4에서는 최종 출력 벡터인 $O_{({Feat},\: c)}$의 $i$번째 요소인 $[O_{({Feat},\: c)}]_{(i)}$가 계산된다. 이는 단계 3에서 생성되는$[V_{S4}]_{(i)}$와 바이어스 값 $[D_{{B}}]_{(i)}$을 더한 결과이다. 위 연산을 $C_{{O}}$번 하여 최종 $O_{({Feat},\: c)}$ 벡터를 생성한다.

그림 3. 콘볼루션 코어 연산의 전체 과정.

Fig. 3. Entire process of convolution core operations.

../../Resources/kiee/KIEE.2025.74.4.644/fig3.png

3.2.2 파이프라인 (Pipeline)

콘볼루션 코어 모듈은 연산을 효율적으로 처리하기 위해 파이프라이닝 기법을 적용한 구조로 되어 있다. 특히 실시간으로 동작해야 하는 시스템에서는 파이프라인 기법이 매우 중요한 역할을 한다.

그림 4는 콘볼루션 코어 모듈 내에서 데이터가 연속적으로 입력될 때, 각 단계별 파이프라인이 어떻게 동작하는지를 시각적으로 보여준다. 콘볼루션 코어 모듈에서 수식 (4)의 연산을 독립적으로 실행할 수 있는 4단계의 구조로 나눔으로써 파이프라이닝이 가능하다. 즉, 수식 (4)에서 주어진 입력만으로 결과를 도출할 수 있는 분리 가능한 MAC 연산 묶음을 분리 설계함으로써 병렬 처리가 가능하다. 따라서, 파이프라이닝을 통해 수식 (4) 계산을 효율적으로 처리할 수 있게 한다.

그림 4. 파이프라인 연산 과정.

Fig. 4. Pipeline operation process.

../../Resources/kiee/KIEE.2025.74.4.644/fig4.png

3.3 스트라이드-패딩 (SP) 모듈

그림 2의 SP 모듈은 2개의 하위 모듈인 FW 모듈과 FR 모듈로 구성된다. FW 모듈은 콘볼루션 층의 패딩을 고려하여 특징 맵을 메모리에 저장한다. FR 모듈에서는 콘볼루션 층의 스트라이딩을 고려하여 합성곱 연산에 필요한 수용영역을 생성한다. 또한, 합성곱 연산에 필요한 가중치와 바이어스를 읽어 수용영역과 함께 콘볼루션 층 모듈로 송신한다.

임의의 $c$번째 콘볼루션 층의 FW 모듈은 $(c -1)$번째 콘볼루션 층의 출력 특징 맵, ${bold O}_{({Feat},\: c-1)}$을 패딩 동작을 고려하여 메모리 $M_{({I},\: c)}$에 저장하고, FR 모듈은 $M_{({I},\: c)}$에 저장된 ${O}_{({Feat},\: c-1)}$의 일부를 순차적으로 읽어와 레지스터 버퍼에 저장하여 수용영역 $D_{{rec}}$를 생성한다.

메모리 $M_{({I},\: c)}$로의 읽기/쓰기 접근이 동시에 발생하는 것을 방지하기 위해서 유한 상태 머신을 이용하여 SP 모듈의 상태를 쓰기 상태 (Write state)와 읽기 상태 (Read state)로 구분하여 제어한다. 쓰기 상태일 때는 FW 모듈로 ${O}_{({Feat},\: c-1)}$을 저장하고 저장이 완료되면 읽기 상태로 천이 한다. 읽기 상태에서는 FR 모듈을 통해 $D_{{rec}}$을 읽어 콘볼루션 층 모듈로 전송한다.

FW 모듈이 ${O}_{({Feat},\: c-1)}$를 $M_{({I},\: c)}$에 저장할 때 사용하는 메모리 주소 $A_{({FW},\: c)}$와 FR 모듈이 $D_{{rec}}$를 생성할 때 사용하는 메모리 주소 $A_{({FR},\: c)}$는 서로 상이하기 때문에 SP 모듈의 상태별 사용되는 메모리 주소를 적절히 선택하기 위해 MUX (Multiplexer)를 사용하여 메모리 접근 주소를 제어한다.

3.3.1 FW (Feature Write) 모듈

FW 모듈은 그림 2에서와 같이 두 개의 하위 모듈로 구성되며 하나는 입력으로 들어오는 특징 맵 벡터의 채널 수를 카운트 하는 채널 카운터 (Channel Counter) 모듈이고 나머지는 해당 벡터를 메모리 저장할 때 필요한 쓰기 주소를 계산하는 주소 계산기 ($A_{({FW},\: c)}$ Calculator) 모듈이다.

채널 카운터 모듈은 입력 특징 맵 벡터를 채널 단위로 메모리에 저장할 수 있도록 0부터 $(C_{{I}}-1)$까지 순차적으로 증가하는 값 $c_{{I}}\in[0,\: C_{{I}}-1]$ 을 생성한다. 이 값은 주소 계산기 모듈에서 각 채널에 맞는 메모리 주소를 생성하는데 사용된다.

이전 합성곱 층 모듈에서 전달받은 특징 맵 벡터, $O_{({Feat},\: c-1)}$의 크기는 $(1\times 1\times C_{{I}})$이며 이러한 벡터를 총 $(W_{{I}}\times H_{{I}})$개 수신한다. 이전 합성곱 층에서 $O_{({Feat},\: c-1)}$를 송신할 때 해당 벡터의 높이와 너비에 대한 좌표 정보 $(h_{{I}},\: w_{{I}})$도 함께 전달하며 $h_{{I}}\in[0,\: H_{{I}}-1]$ 이고 $w_{{I}}\in[0,\: W_{{I}}-1]$ 이다.

$O_{({Feat},\: c-1)}$는 채널 단위로 $M_{({I},\: c)}$에 저장될 때 패딩을 고려할 수 있어야 하며 패딩의 크기가 $P$라고 했을 때 해당 콘볼루션 층에서 사용하는 입력 특징 맵, ${O}_{({Feat},\: c-1)}$의 높이 $H_{{P}}$ 및 너비 $W_{{P}}$는 $H_{{P}}= H_{{I}}+2\times P$와 $W_{{P}}= W_{{I}}+2\times P$로 결정된다. 이를 고려하여 $O_{({Feat},\: c-1)}$를 $M_{({I},\: c)}$에 저장할 때 사용하는 메모리 주소 $A_{({FW},\: c)}$는 수식 (11)로 정의되며 여기서 사용되는 변수 $G$는 수식 (12)와 같이 정의된다.

(11)
$A_{({FW},\: c)}(h_{{I}},\: w_{{I}},\: c_{{I}})= G +(C_{{I}}\times W_{{P}})\times h_{{I}}+ C_{{I}}\times w_{{I}}+ c_{{I}}$,
(12)
$G=W_{{P}}\times P\times C_{{I}}+ P\times C_{{I}}$.

여기서 $A_{({FW},\: c)}$의 범위는 $A_{({FW},\: c)}\in[0,\: W_{{P}}\times H_{{P}}\times C_{{P}}-1]$이며 $C_{{I}}$개의 $O_{({Feat},\: c-1)}$가 수신되었을 때 FW 모듈의 동작은 완료되며 SP 모듈의 상태는 읽기 상태로 천이된다. 또한 완료 신호를 FR 모듈에 전달하면서 $D_{{rec}}$를 생성한다.

3.3.2 FR (Feature Read) 모듈

FR 모듈은 합성곱 층의 커널이 참조하는 영역인 수용영역 $D_{{rec}}$을 생성하기 위해 $M_{({I},\: c)}$에 저장된 ${O}_{({Feat},\: c-1)}$의 값에 접근해야 한다. FW 모듈이 패딩을 고려하여 저장한 ${O}_{({Feat},\: c-1)}$의 크기는 $(W_{{P}}\times H_{{P}}\times C_{{I}})$이고 FR 모듈이 생성하는 $D_{{rec}}$의 크기는 커널의 크기와 같은 $(W_{{K}}\times H_{{K}}\times C_{{I}})$이다.

그림 2에서와 같이 해당 모듈은 2개의 하위 모듈로 구성되며, $C_{{addr}}$ calculator 모듈은 $M_{({I},\: c)}$로부터 생성하고자 하는 수용영역, $D_{{rec}}$의 중심 요소를 읽기 위해 필요한 메모리 접근 주소, $C_{{addr}}$을 계산하고 $A_{({FR},\: c)}$ Calculator 모듈은 $C_{{addr}}$을 기준으로 $D_{{rec}}$의 나머지 요소들의 메모리 주소를 계산한다.

$A_{({FR},\: c)}$ Calculator 모듈에서 $D_{{rec}}$의 요솟값을 $M_{({I},\: c)}$에서 읽어오기 위한 메모리 접근 주소 $A_{({FR},\: c)}$는 수식 (13)과 같이 정의되며 여기서 사용되는 변수 $C_{{offset}}$은 수식 (14)로 정의된다.

(13)
$ A_{({FR},\: c)}(h_{{r}},\: w_{{r}},\: c_{{r}},\: C_{{addr}})=\\ C_{{addr}}- C_{{offset}}+ W_{{P}}\times C_{{I}}\times h_{{r}}+ C_{{I}}\times w_{{r}}+ c_{{r}} ,$
(14)
$C_{{offset}}=\dfrac{H_{{K}}-1}{2}\times W_{{P}}\times C_{{I}}-\dfrac{W_{{K}}-1}{2}\times C_{{I}}$.

수식 (13)에서 $h_{{r}}$, $w_{{r}}$, $c_{{r}}$는 $D_{{rec}}$를 기준으로 한 높이, 너비, 채널 방향으로의 좌표를 의미하고 각 변수의 범위는 $h_{{r}}\in[0,\: H_{{K}}-1]$, $w_{{r}}\in[0,\: W_{{K}}-1]$, $c_{{r}}\in[0,\: C_{{I}}-1]$로 정의된다. 결과적으로 $h_{{r}}$, $w_{{r}}$, $c_{{r}}$좌표에서의 $D_{{rec}}$값은 수식 (15)와 같이 정의된다.

(15)
$[D_{{rec}}]_{(h_{{r}},\: w_{{r}},\: c_{{r}})}= M_{({I},\: c)}(A_{({FR},\: c)}(h_{{r}},\: w_{{r}},\: c_{{r}},\: C_{{addr}}))$.

그림 5는 ${O}_{({Feat},\: c-1)}$가 저장된 $M_{({I},\: c)}$에서 $D_{{rec}}$를 생성하기 위해 접근하는 메모리 영역을 시각적으로 보여준다. 그림 5는 하나의 수용영역에 해당하는 요솟값들과 메모리에 저장된 값들 사이의 연관성을 시각화해서 보여준다. 수식 (15)는 이러한 연관성을 토대로 도출된 것이다. $M_{({I},\: c)}$의 요소들을 나열하여 정렬하면, ${O}_{({Feat},\: c-1)}$를 가로 $W_{{P}}\times C_{{I}}$, 세로 $H_{{P}}$ 크기의 직사각형 모양으로 볼 수 있다. 사각형 영역인 수용영역의 크기는 커널의 크기와 동일하며 가로 $W_{{K}}\times C_{{I}}$, 세로 $H_{{K}}$ 크기의 직사각형 모양으로 볼 수 있다. a 요소의 값은 $h_{{r}}$, $w_{{r}}$, $c_{{r}}$좌표가 $(0,\: 0,\: 0)$인 시작 좌표에서 $D_{{rec}}$의 값을 의미하며 c 요소의 값은 좌표가 $(H_{{K}}-1,\: W_{{K}}-1,\: C_{{I}}-1)$인 마지막 좌표에서 $D_{{rec}}$의 값을 의미한다. b 요소의 값은 $D_{{rec}}$의 중심 요솟값이다.

$C_{{addr}}$ calculator 모듈은 수식 (13)에 필요한 $C_{{addr}}$을 생성한다. $C_{{addr}}$의 계산 수식은 출력 특징 맵, ${O}_{({Feat},\: c)}$의 하나의 요소와 연관 되는 ${O}_{({Feat},\: c-1)}$ 위에 놓이는 $D_{{rec}}$의 영역을 고려하여 도출되며 스트라이딩을 $S$라고 했을 때, 출력 특징 맵의 높이와 너비인 $H_{{O}}$와 $W_{{O}}$는 수식 (16)과 같이 정의된다.

(16)
$H_{{O}}=\dfrac{H_{{P}}- H_{{K}}}{S}+1,\: W_{{O}}=\dfrac{W_{{P}}- W_{{K}}}{S}+1$.

${bold O}_{({Feat},\: c)}$의 요소별 좌표를 $(h_{{o}},\: w_{{o}},\: c_{{o}})$라 하면 각 좌표점의 범위는 $h_{{o}}\in[0,\: H_{{O}}-1]$, $w_{{o}}\in[0,\: W_{{O}}-1]$, $c_{{o}}\in[0,\: C_{{O}}-1]$이다. 좌표 $(h_{{o}},\: w_{{o}})$에서의 $[{O}_{({Feat},\: c)}]_{(h_{{o}},\: w_{{o}},\: :)}\in R^{(C_{{O}})}$는 콘볼루션 코어 모듈의 출력 벡터, $O_{({Feat},\: c)}$로 결정된다. 그리고 콘볼루션 코어 모듈은 수용영역 $D_{{rec}}$를 입력으로 받아 $O_{({Feat},\: c)}$를 구한다.

수용영역, $D_{{rec}}$ 기준의 좌표점 특히 중앙 요소의 좌표점을 그림 6에서와 같이 ${O}_{({Feat},\: c)}$의 $(h_{{o}},\: w_{{o}})$ 좌표점과 연관 지을 수 있다. 따라서, $[{O}_{({Feat},\: c)}]_{(h_{{o}},\: w_{{o}},\: :)}$값 계산을 위한 $D_{{rec}}$를 $M_{({I},\: c)}$에서 읽어오기 위한 접근 주소 $C_{{addr}}$은 수식 (17)과 같이 정의되며 여기서 사용되는 변수 $C_{\star{t}}$는 수식 (18)과 같이 정의된다.

(17)
$C_{{addr}}(h_{{o}},\: w_{{o}})= C_{\star{t}}+ W_{{P}}\times C_{{I}}\times S\times h_{{o}}+ C_{{I}}\times S\times w_{{o}}$,
(18)
$C_{\star{t}}=\dfrac{H_{{K}}-1}{2}\times W_{{P}}+\dfrac{W_{{K}}-1}{2}$.

FR 모듈은 $(H_{{O}}\times W_{{O}})$번 반복하여 콘볼루션 코어 모듈을 통해 $\left[\mathbf{O}_{(\text {Feat }, c)}\right]_{\left(h_0, w_0,:\right)}$를 계산하여 콘볼루션 층의 결과 ${O}_{({Feat},\: c)}$를 생성하고 동작이 완료된다. FR 모듈은 동작이 완료되면 연산 완료 신호를 송신하며 SP 모듈의 유한 상태 머신은 상태를 쓰기 상태로 천이한다.

그림 5. $M_{({I},\: c)}$에서 $D_{{rec}}$를 생성하기 위해 접근하는 메모리 영역.

Fig. 5. The memory region accessed to generate $D_{{rec}}$ from $M_{({I},\: c)}$.

../../Resources/kiee/KIEE.2025.74.4.644/fig5.png

그림 6. 출력 특징 맵 ${O}_{({Feat},\: c)}$을 만들기 위해 $M_{({I},\: c)}$에서 참조되는 영역과 그 중심값.

Fig. 6. The region referenced in $M_{({I},\: c)}$ and its center value to create the output feature map, ${O}_{({Feat},\: c)}$.

../../Resources/kiee/KIEE.2025.74.4.644/fig6.png

3.4 완전 연결 층 (Fully-connected Layer) 모듈

해당 모듈은 완전 연결 층에서 $c$번째 층의 계산을 수행하는 역할을 한다. 그림 7 (a)는 딥러닝 네트워크의 완전 연결 블록 내에서 $c$번째 완전 연결 층을 시각적으로 표현한 것이고, 그림 7 (b)는 $c$번째 완전 연결 층의 모듈 아키텍처를 보여준다. 해당 아키텍처는 가중치와 노드 값의 연산을 담당하는 완전 연결 코어 (FC core) 모듈들로 구성되어 있다. 하나의 완전 연결 층 모듈에서는 입력 노드, $\mathbf{I}_{(\text {Node }, c)} \in \mathbf{R}^{\left(L_{\mathrm{I}}\right)}$ (혹은 이전 완전 연결 층의 출력 노드, ${O}_{({Node},\: c-1)}$)와 가중치 값을 메모리, $M_{({F},\: c-1)}$와 메모리, $M_{({FW},\: c)}$에서 불러와 MAC 연산 수행하는 완전 연결 코어 모듈로 전송하여 곱셈 및 누적 덧셈을 수행한다.

완전 연결 코어 모듈은 유한 상태 머신으로 제어되며, 최종 출력 노드, $\mathbf{O}_{(\text {Node }, c)} \in \mathbf{R}^{\left(L_{\mathrm{O}}\right)}$를 생성하여 메모리, $M_{({F},\: c)}$에 저장한다. 이때 $M_{({F},\: c)}$는 $(c+1)$번째 완전 연결 층 모듈의 입력 노드로 사용된다. 입력 노드가 저장된 메모리, $M_{({F},\: c-1)}$깊이는 $L_{{I}}$, 출력 노드가 저장된 메모리, $M_{({F},\: c)}$의 깊이는 $L_{{O}}$, 가중치가 저장된 메모리, $M_{({FW},\: c)}$의 깊이는 $L_{{FW}}= L_{{O}}\times L_{{I}}$로 정의된다.

완전 연결 코어 모듈에서는 입력 노드가 저장된 $M_{({F},\: c-1)}$의 요솟값들을 MAC 연산코어들로 분산시켜 덧셈, 곱셈 연산을 병렬적으로 수행한다. 연산을 마친 출력 노드의 $m\in[1,\: L_{{O}}]$번째 요소인 $[O_{({Node},\: c)}]_{(m)}$은 수식 (19)와 같이 정의된다.

(19)
$[O_{({Node},\: c)}]_{(m)}=\sum_{k=1}^{L_{{I}}}([I_{({Node},\: c)}]_{(k)}\times M_{({FW},\: c)}(k\times m))$.

수식 (19)에서 $[I_{({Node},\: c)}]_{(k)}$는 입력 노드의 $k\in[1,\: L_{{I}}]$번째 요소의 값이며, 이는 $M_{({F},\: c-1)}(k)$와 동일하고, $[O_{({Node},\: c)}]_{(m)}$는 $M_{({F},\: c)}(m)$와 동일하다.

수식 (19)를 수식 (20)과 같이 재작성할 수 있으며,

(20)
$O_{m}=\sum_{k=1}^{L_{{I}}}(i_{k}\times w_{(k,\: m)})$,

여기서 $i_{k}$는 입력 노드의 $k$번째 요소의 값, $[I_{({Node},\: c)}]_{(k)}$이고, $w_{(k,\: m)}$은 가중치가 저장되어 있는 메모리, $M_{({FW},\: c)}$의 $(k\times m)$번째 요소인 $M_{({FW},\: c)}(k\times m)$이다.

완전 연결 코어 모듈은 출력 노드의 한 개의 요소에 대해서만 연산하는 모듈이다. 따라서 출력 노드의 모든 요소에 대한 연산을 수행하기 위해서는 그림 7 (b)와 같이 $L_{{O}}$개의 완전 연결 코어 모듈이 병렬로 동작하는 구조를 갖춰야 한다. 이를 통해 $L_{{O}}$개의 모듈이 병렬로 연산을 수행하여 최종적으로 $L_{{O}}$개의 출력 노드가 $M_{({F},\: c)}$에 저장된다.

그림 7. (a) 완전 연결 층의 연산 과정, (b) 완전 연결 층의 하드웨어 아키텍처.

Fig. 7. (a) the computation process of the Fully-connected Layer, (b) Hardware architecture of a Fully-connected Layer.

../../Resources/kiee/KIEE.2025.74.4.644/fig7.png

4. RTL 시뮬레이션 검증

본 장에서는 3장에서 설계한 합성곱 층 하드웨어를 이용하여 표 1의 데이터셋별 딥러닝 네트워크를 구성한다. 구성한 딥러닝 네트워크 하드웨어를 검증하기 위해 RTL 수준 시뮬레이션을 수행한다. 해당 시뮬레이션에서는 소프트웨어로 학습 및 양자화한 가중치를 하드웨어로 불러온 뒤 학습에 사용된 데이터셋의 검증용 데이터를 사용하여 추론 정확도를 구한다. 해당 하드웨어 추론 정확도를 소프트웨어 추론 정확도와 비교함으로써 딥러닝 네트워크 하드웨어 구현 정확성을 보인다.

4.1 파이프라이닝 검증

하드웨어 설계의 장점은 연산을 단계별로 수행하여 각 단계를 독립적으로 실행할 수 있는 파이프라이닝 방식에 있다. 이를 통해 연산 효율을 극대화할 수 있다. 그림 8표 2의 Convolution Block에서와 같이 5개의 합성곱 층 모듈을 연결하여 연속으로 데이터를 입력했을 때 생성되는 파형을 보여준다. 파형에서 “${RUN}$_${n F}$” 신호가 1이면 $n$번째 모듈이 현재 연산 수행 중임을 의미한다. $n$번째 모듈은 $(n+1)$번째 모듈의 연산이 완료된 후에 새로운 연산을 시작할 준비가 된다. 해당 파형에서 빨간색으로 표시된 부분을 보면, $n$번째 모듈이 $(n+1)$번째 모듈의 작업이 완료되면 새로운 연산을 시작하는 것을 확인할 수 있다.

이러한 연산 방식은 여러 데이터가 연속으로 입력될 때 높은 성능을 발휘한다. 한 개의 입력 데이터가 5개의 콘볼루션 층 모듈을 순차적으로 통과하는 데 걸리는 시간을 $T_{{L}}$로 정의한다. 각 층은 독립적으로 연산을 수행하므로 입력 데이터가 연속적으로 들어온다면 첫 번째 데이터 $D_{1}$에 대한 출력은 $T_{{L}}$ 이후에 나오고, 그다음 $n$번째 데이터 $D_{n}$에 대한 출력은 $T_{{H}}$주기로 산출되며, $T_{{H}}< T_{{L}}$이다. 이는 연속 입력 데이터에 대해 하드웨어가 효율적으로 연산을 수행하고 있음을 보여준다.

그림 8. 5개로 연결된 합성곱 층 모듈의 연속으로 입력되는 데이터에 대한 시뮬레이션 검증 파형.

Fig. 8. A waveform of sequentially input data through five connected convolution layter modules.

../../Resources/kiee/KIEE.2025.74.4.644/fig8.png

4.2 모델 동작 검증

그림 9의 결과 파형은 모든 콘볼루션 층의 입력 특징 맵과 출력 특징 맵의 크기를 $(3\times 3\times C_{{I}})$로 설정하고 5개의 콘볼루션 층 모듈을 연결하여 연속으로 데이터를 입력했을 때 생성되는 파형을 보여준다. “${DONE}$_${n F}$” 신호는 $n$번째 콘볼루션 층의 콘볼루션 코어 모듈에서 하나의 출력 특징 맵 벡터, $O_{({Feat},\: n)}$가 계산이 완료되었을 때 출력되는 신호이다. $n$번째 콘볼루션 층의 입력 특징 맵의 크기가 $(3\times 3\times C_{{I}})$가 되기 위해서는 $(n-1)$번째 콘볼루션 층에서의 출력 특징 맵, ${O}_{({Feat},\: n-1)}$의 크기가 $(3\times 3\times C_{{I}})$가 되어야 하고, 이는 9개의 출력 특징 벡터, $O_{({Feat},\: n-1)}$가 계산되어야 한다. 결과 파형에서도 정확히 9번의 “${DONE}$_${n F}$” 신호가 출력되는 것을 확인할 수 있다. 이를 통해 합성곱 연산이 정확히 수행됨을 알 수 있다.

그림 10은 하나의 콘볼루션 층의 입력 특징 맵의 크기를 $(6\times 6\times 1)$, 커널의 크기를 $(3\times 3\times 1)$로 설정하고 스트라이딩 $S$와 패딩$P$에 따라 출력 결과를 비교한 파형을 보여준다. 그림 10 (a)는 $P=0,\: S=1$일 때의 파형을 나타내며, 그림 10 (b)는 $P=0,\: S=2$일 때의 파형을 나타내고, 그림 10 (c)는 $P=1,\: S=1$일 때의 파형을 나타낸다. “WRITE” 신호는 값이 1일 때 현재 메모리에 입력 특징 맵의 요소가 저장되고 있음을 의미하고, “DONE_WRITE” 신호는 하나의 요소가 메모리에 저장되었을 때 1로 천이한다. “CALC” 신호가 1이면 출력 특징 맵을 생성하고 있음을 의미하고, “DONE_CALC” 신호는 출력 특징 맵 요소 한 개가 생성되었을 때 1로 천이한다. 수식 (16)에 따라 출력 특징 맵의 크기는 $P=0,\: S=1$일 때 $(4\times 4\times 1)$, $P=0,\: S=2$일 때 $(2\times 2\times 1)$, $P=1,\: S=1$일 때 $(6\times 6\times 1)$으로 계산되며, 이는 각각 출력 특징 맵 요소가 16, 4, 36개 생성되어야 한다는 것을 의미한다. 결과 파형에서 각각 16, 4, 36개의 출력 특징 맵 요소가 생성되는 것을 확인할 수 있고, 이는 패딩과 스트라이딩에 대해 모델이 올바르게 동작하고 있음을 보여준다.

그림 9. 출력 특징 맵 이 만들어지는 과정에 대한 시뮬레이션 검증 파형.

Fig. 9. A waveform of the process of generating the output feature map.

../../Resources/kiee/KIEE.2025.74.4.644/fig9.png

그림 10. 스트라이딩 $S$와 패딩 $P$값에 대한 시뮬레이션 검증 파형. (a) $P=0,\: S=1$, (b) $P=0,\: S=2$, (c) $P=1,\: S=1$.

Fig. 10. A waveform of results for stride and padding values. (a) $P=0,\: S=1$, (b) $P=0,\: S=2$, (c) $P=1,\: S=1$.

../../Resources/kiee/KIEE.2025.74.4.644/fig10.png

4.3 소프트웨어 모델과의 정확도 비교

2장에서 도출한 양자화된 가중치를 활용하여 구현된 딥러닝 네트워크 모델에 대해 각 데이터셋(MNIST와 Fashion MNIST)별로 1,000장의 검증용 데이터를 사용하여 추론을 수행하였다.

표 3은 양자화 기법(PTQ와 QAT)에 따라 소프트웨어와 하드웨어 환경에서 수행된 추론의 정확도를 보여준다. 실험 결과, MNIST 데이터셋에서 PTQ는 96.6%, QAT는 96.9%의 정확도를 보였으며, Fashion MNIST 데이터셋에서는 각각 91.7%와 91.5%의 정확도를 달성하였다. 소프트웨어와 하드웨어 환경 모두에서 동일한 정확도를 나타냈으며, 이는 제안된 하드웨어 설계가 소프트웨어 모델의 추론 결과를 정확히 반영할 수 있음을 입증한다. 이러한 결과는 하드웨어 설계와 구현이 정확하고 신뢰성 있게 이루어졌음을 보여준다.

표 3 하드웨어와 소프트웨어에서의 추론 정확도 비교.

Table 3 Comparison of inference accuracy in hardware and software.

Quantization

Accuracy

MNIST

Fashion MNIST

Software

Hardware

Software

Hardware

PTQ

96.6

96.6

91.7

91.7

QAT

96.9

96.9

91.5

91.5

5. 결론 및 향후 연구 계획

본 연구에서는 실시간 분류 작업을 위한 딥러닝 네트워크 모델의 하드웨어를 구현하였다. 이미지 분류를 위한 딥러닝 네트워크는 콘볼루션 층과 완전 연결 층을 적층하여 구성하며 이를 위해 본 연구에서는 콘볼루션 층 및 완전 연결 층에 대한 하드웨어 설계를 소개하였다. 하드웨어 구현을 검증하기 위해 5개의 콘볼루션 층과 3개의 완전 연결 층으로 구성된 딥러닝 네트워크 모델을 소프트웨어로 학습하고 양자화하여 얻은 하드웨어 적합 가중치를 딥러닝 네트워크 하드웨어에서 사용하였다. 이를 MNIST와 Fashion MNIST 데이터셋을 사용하여 RTL 시뮬레이션을 통해 소프트웨어와 하드웨어에서의 추론 정확도가 완벽하게 일치하는 것을 확인하였다. 이를 통해 하드웨어 설계가 성공적으로 되었음을 검증하였다.

향후 연구에서는 본 연구에서 구현한 하드웨어 모델을 FPGA에서 구현하여 실시간 이미지 처리가 가능한지 확인할 것이다. 이를 통해 하드웨어 모델의 실시간 동작성을 검증할 계획이다. 또한, 설계에 사용된 BRAM의 용량이 제한적이라는 문제를 해결하기 위해, 더 큰 메모리 용량을 제공하는 DRAM을 사용하여 하드웨어 모델을 재구현 및 검증할 계획이다. 이를 위해 DRAM과의 원활한 연결을 위한 동적 메모리 컨트롤러 (DDR) 설계를 추가로 진행할 것이며, 이를 통해 대용량 데이터를 실시간으로 처리할 수 있는 AI 가속기 개발에 기여할 것이다.

Acknowledgements

This research was supported by the National Research Foundation of Korea (NRF) grant funded by the Korea government (MSIT) (No. 2022R1G1A1007058, RS-2024-004648).

References

1 
Y. Lecun, L. Bottou, Y. Bengio and P. Haffner, “Gradient-based learning applied to document recognition,” Proceedings of the IEEE Conference, vol. 82, no. 11, pp. 2278-2324, 1998. DOI:10.1109/5.726791DOI
2 
A. Krizhevsky, I. Sutskever and G. E. Hinton, “ImageNet classification with deep convolutional neural networks,” Communications of the Association for Computing Machinery (ACM), vol. 60, no. 6, pp. 84-90, 2017. DOI:10.1145/3065386DOI
3 
K. Simonyan and A. Zisserman, “Very Deep Convolutional Networks for Large-Scale Image Recognition,” Proceeding of 3rd International Conference on Learning Representations, (ICLR), May 7-9, 2015.DOI
4 
C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke and A. Rabinovich, “Going deeper with convolutions,” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 1-9, 2015.DOI:10.1109/CVPR.2015.7298594DOI
5 
M. tan and Q. Le, “Efficientnet: Rethinking model scaling for convolutional neural networks,” Proceedings of the 36th International Conference on Machine Learning (ICML), vol. 97, pp. 9-15, 2015.URL
6 
A. Howard, M. Zhu, B. Chen, D.Kalenichenko, W. Wang, T. Weyand, M. Andreetto and H. Adam, “MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications,” CoRR abs/1704.04861, 2017.DOI
7 
K. He, X. Zhang, S. Ren and J. Sun, “Deep Residual Learning for Image Recognition,” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 770-778, 2016.DOI:10.1109/CVPR.2016.90DOI
8 
Y. M. Park, S. Y. Ahn, E. J. Lim, Y. S Choi, Y. C. Woo, W. Choi, “Deep Learning Model Parallelism,” Electronics and Telecommunications Trends, vol. 33, no. 4, pp. 1-13, 2018.DOI:10.22648/ETRI.2018.J.330401DOI
9 
Y. J. Lee, Y. H. Moon, J. Y. Park, O. G. Min, “Recent R&D Trends for Lightweight Deep Learning,” Electronics and Telecommunications Trends, vol. 34, no. 2, pp. 40-50, 2019.DOI:10.22648/ETRI.2019.J.340205DOI
10 
J. D. Choi, K. W. Min, J. H. Kim, B. S. Seo, D. H. Kim, D. S. Yoo, J. I. Cho, “Zero Accident, Connected Autonomous Driving Vehicle,” Electronics and Telecommunications Trends, vol. 36, no. 2, pp. 21-31, 2021.DOI:10.22648/ETRI.2021.J.360103DOI
11 
L. Ouyang, J. Wu, X. Jiang, D. Almeida, C. Wainwright, P. Mishkin, C. Zhang, S. Agarwal, K. Slama, A. Ray, J. Schulman, J. Hilton, F. Kelton, L. Miller, M. Simens, A. Askell, P. Welinder, P. Christiano, J. Leike and R.Lowe, “Training language models to follow instructions with human feedback,” Advances in Neural Information Processing Systems 35: Annual Conference on Neural Information Processing Systems (NeurIPS), vol. 35, pp. 27730-27744, 2022.URL
12 
A. Radford, J. Wu, R. Child, D. Luan, D. Amodei and I. Sutskerver, “Language Models are Unsupervised Multitask Learners,” OpenAI blog, 1(8), vol. 1, no. 8, pp. 9, 2019.URL
13 
Brown, T., Mann, B., Ryder, N., Subbiah, M., Kaplan, J. D., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D., Wu, J., Winter, C., Hesse, C., Chen, M., Sigler, E., Litwin, M., Gray, S., Chess, B., Clark, J., Berner, C., McCandlish, S., Radford, A., Sutskever, I., and Amodei, “Language Models are Few-Shot Learners,” Advances in Neural Information Processing Systems 33: Annual Conference on Neural Information Processing Systems, (NeurIPS), vol. 33, pp. 1877-1901, 2020.URL
14 
M. Y. Lee, J. Chung, J. H. Lee, J. H. Han, Y. S. Kwon, “Trends in AI Processor Technology,” Electronics and Telecommunications Trends, vol. 35, no. 3, pp. 65-75, 2020.DOI:10.22648/ETRI.2020.J.350307DOI

저자소개

이종윤(Jong-Youn Lee)
../../Resources/kiee/KIEE.2025.74.4.644/au1.png

He received the B.S degree in Electronic Engineering from Kumoh National Institute of Technology, Korea, in 2024. He is currently pursuing the M.S. degree in Semiconductor System Engineering from Kumoh National Institute of Technology, Korea. His research interests include design and simulation analysis of deep neural networks on FPGA using Verilog HDL.

서정윤(Jeong-Yun Seo)
../../Resources/kiee/KIEE.2025.74.4.644/au2.png

He received the B.S. degree in Electronic Engineering, and has been working toward the M.S. degree in Semiconductor System Engineering from Kumoh National Institute of Technology, in 2024. His research interests include H/W-oriented trainable activation functions, compressed AI Hardware Design, and AI based systems. He received Research grant for master's degree students, National Research Foundation of Korea in 2024.

박성준(Sung-Jun Park)
../../Resources/kiee/KIEE.2025.74.4.644/au3.png

He received his B.S. degree in Electronic Engineering from the Kumoh National Institute of Technology, Korea, in 2024. He is currently pursuing the M.S. degree in Semiconductor System Engineering from Kumoh National Institute of Technology, Korea. His research focuses on AI based semantic segmentation of autonomous vehicles in softwarte and hardware.

이하림(Harim Lee)
../../Resources/kiee/KIEE.2025.74.4.644/au4.png

He received the B.S. degree in Electrical Engineering from Kyungpook National University, Daegu, South Korea, in 2013, the M.S. degree in IT Convergence Engineering from the Pohang University of Science and Technology (POSTECH), Pohang, South Korea, in 2015, and the Ph.D. degree from the School of Electrical and Computer Engineering, Ulsan National Institute of Science and Technology (UNIST), Ulsan, South Korea, in August 2020. Since September 2021, he has been an Assistant Professor with the School of Electronic Engineering, Kumoh National Institute of Technology, Gumi, South Korea. His research interests include Intelligent system based on Deep Learning and Implementing deep neural networks on FPGA using Verilog HDL.

이용환(Yong-Hwan Lee)
../../Resources/kiee/KIEE.2025.74.4.644/au5.png

He received the B.S. degree in Electronic Engineering from Yonsei University, Korea, in 1993, the M.S. degree in Electronic Engineering from Yonsei University, Korea, in 1995, and the Ph.D degree in Electronic Engineering from Yonsei University, Korea, in 1999. He was a researcher in Hynix Semiconductor from 1999 to 2002. He was a senior research engineer in Samsung Electronics from 2003 to 2004. Since 2004, he has been a professor with School of Electronic Engineering, Kumoh National Institute of Technology. His research interests include Digital SoC, MIPI and Verilog HDL.