[임베디드 딥러닝] 아두이노Nano에서 손글씨 인식모델 만들기 - 1
최종적으로 위와같은 모델을 만들어야된다.
먼저 ML 모델에 대해 알아보자
ML모델
CNN 모델과 같은 경우는 Python을 통해 만들었으며, 구글드라이브의 Colab을 활용하여 만들었다.
model CNN에 필요한 층 구성 후 , train 데이터를 이용해 학습시킨다.
간단히말해 이 모델은 28x28 픽셀의 흑백 이미지를 입력으로 받아, 이미지 분류 작업을 수행하도록 설계된 간단한 CNN이다. 모델은 여러 합성곱 및 풀링 레이어를 통해 이미지에서 특징을 추출하고, Flatten 및 Dense 레이어를 통해 최종 클래스를 예측한다.
여기서 각 층을 수정, 추가, 삭제하며 모델의 추론 시간 및 정확도를 최적화하는 활동이 가능하다.
좀더 자세히 설명하자면
Conv2D:
- 컨볼루션 레이어가 많아질수록 모델의 학습 능력, 즉 데이터로부터 복잡한 패턴을 학습할 수 있는 능력이 향상된다. 이는 네트워크가 더 깊어지면서 더 세밀하고 정교한 특징을 캡처할 수 있기 때문이다.
- 그러나 네트워크가 깊어지면 학습이 어려워질 수 있고, 데이터가 충분하지 않으면 과적합(overfitting)이 발생할 수 있다.
MaxPooling:
- 차원 축소: MaxPooling은 입력 특징 맵의 공간적 차원을 축소한다. 예를 들어, 2x2 크기의 MaxPooling은 특징 맵의 크기를 반으로 줄입니다. 이로 인해 모델의 파라미터 수가 줄어들고, 계산량이 감소한다, 과적합도 어느정도 방지해준다.
- 정보 손실: 최대값만을 취하기 때문에, 풀링 영역 내의 다른 값들은 버려집니다. 이로 인해 중요한 정보가 손실될 수 있습니다.
이정도로 볼 수 있다.
내가 학습시킨 데이터는 EMNIST의 대문자 모델이다.
https://www.kaggle.com/datasets/crawford/emnist/data
EMNIST (Extended MNIST)
An extended variant of the full NIST dataset
www.kaggle.com
안에 보면 다양한 train data들이 있는데, 설명을 잘보면 대소문자의 양적 분포를 확인할 수 있으니 사용하고 싶은걸 잘 쓰면된다.
아래 사이트에서 CSV파일로 무료로 다운받을 수 있다. 파이썬에서 쉽게 불러와서 사용하면된다 .
나는 위처럼 불러와서 사용했다.
학습이 완료되면 아래와 같은 방법으로, 모델자체를 C코드로 변환하여 가질 수 있다.
위의 코드가 추출해낸 C코드이다.
위와 같은 형태의 코드는 임베디드 시스템, 메모리 관리, 데이터 보안 등의 이유로 바이너리 데이터를 직접 프로그램에 포함시키기 위해 사용된다. 이런 식으로 데이터가 포함되면, 별도의 파일 읽기 없이 프로그램 실행 시 메모리에 바로 로드되어 사용될 수 있다.