MNIST Classification on FPGA - 09. FPGA에 Bitstream 올리기
·
PROJECTS/AI 가속기
가장 기대는 순간이다.. 앞선 게시물들을 보면 굉장히 쉽게 쉽게 진행한것 같지만 그동안 설계, 시뮬레이션, 합성까지 수백번은 돌리고 확인했는데, 막상 올렸을 때 동작을 안한다면.... 끔찍하다.우선 비트스트림은 원활하게 생성되었다. 또한 BASYS-3 보드를 기준으로 리소스도 넉넉하게 남는 것을 확인할 수 있다. 테스트로 사용된 이미지는 4를 사용했다. 최종 결과는 LED를 통해 디버깅할 수 있도록 설정하였고.... 올바르게 작동하는 것을 확인할 수 있었다!! 해당 이미지 외에도 몇가지 이미지를 올려봤을 때에도 정상 동작하는 것을 확인!기존에 설계한 OV7670과 결합하여 실시간으로 숫자를 감지하는 모듈을 설계 중
MNIST Classification on FPGA - 08. Testbench
·
PROJECTS/AI 가속기
Testbench를 확인할 시간이다. 각 MAC 코어에 값이 올바르게 업로드되고 연산이 진행되는지 Testbench를 통해 알아보자.우선 LAYER 1에 대한 연산 결과이다. 연산 순서는 다음과 같다.4개의 코어에서 동시에 4개의 인풋에 대한 연산을 진행한다.하나의 OUTPUT NODE에 대한 연산이 종료되면 4개 코어의 값을 모두 더한다.더해진 OUTPUT NODE 값은 Relu를 거쳐 BRAM에 저장한다.모든 OUTPUT NODE에 대한 연산이 완료될 때까지 1 ~ 3 과정을 반복한다.[INPUT 000] 7 * 3 = 21[INPUT 001] 0 * 2 = 0[INPUT 002] 0 * 3 = 0[INPUT 003] 0 * -..
MNIST Classification on FPGA - 07. HW 구성
·
PROJECTS/AI 가속기
이전 병렬구성의 실패를 교훈 삼아, HW 구성을 어떻게 할지 생각하는데에 시간을 가장 많이 쏟은것 같다.원래 CNN 구조로 설계를 할 때에는 Line Buffer를 이용할 생각이었는데, FCN에서는 윈도우가 아닌 Flatten Map 형태로 연산이 진행되기 때문에, 간단한 파이프라인 구조를 설계하였다. 플로우차트는 다음과 같으며, 실질적인 클럭이 소모되는 부분은 붉게 표시하였다. Load from BRAM 입력 데이터와 가중치를 BRAM에서 불러온다.Accumulate Multiply-Accumulate (MAC) 연산을 통해 입력 값과 가중치를 누산한다.단일 출력 노드 계산 완료 여부 판단 현재 출력 노드에 대한 모든 입력을 처리했는지 확인한다. 아니라면 누산을 계속한다.Relu OR SOFTMAX 적..
MNIST Classification on FPGA - 06. Training & Quantization & Data 가공
·
PROJECTS/AI 가속기
우선 INPUT IMAGE도 FLOAT32가 아닌 UINT8로 양자화 해야하고, 학습 파라미터들 또한 INT8로 구성해야하기에 아래와 같이 코드를 작성하였다. GPT의 도움을 받았지만.. 아래 결과를 뽑아내는 데에도 상당한 시간이 걸렸다.import osimport numpy as npimport tensorflow as tffrom tensorflow.keras.datasets import mnistfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense, Flatten# MNIST 데이터 로드 및 전처리(x_train, y_train), (x_test, y_test) = mnist.load_data()..
MNIST Classification on FPGA - 05. FCN 방식으로 변경
·
PROJECTS/AI 가속기
현재 진행중인 교육과정이 바뻐 오랜만에 글을 써본다. 원래는 CNN 구조로 MNIST 데이터셋을 구성하려 했는데, 우선 간단하게 FCN으로 MNIST 방식을 구현해 볼까한다.일반적으로 MNIST 분류기의 구현은 파이썬의 Tensorflow를 이용한다면 쉽게 구현할 수 있다.import numpy as npimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layers# MNIST 데이터셋 로드(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()# 데이터 정규화 및 reshape: (batch, 784)x_train = x_train.resh..