프로그래밍/작은 메모

MCU 단계에서 딥러닝을 사용하는 비교적 간단한 방법

satnurn 2025. 7. 25. 17:30
반응형

이전 글 "MCU 단계에서 딥러닝을 수행하려면?" 에서의 방법보다 간단하게 수행하는 방법 정리

 

 

 # 환경

- Window 10

 

 

# 딥러닝 경량화

 - 딥러닝 경량화 방법에서 yolov5n의 80개의 클래스를 1개(사람)의 클래스로 줄이고 Transfer 학습 진행하는 과정을 생략.

  → 재학습 없이도 tflite 용량은 약 10KB ~ 100KB 정도의 차이로 감소폭이 미미함.

  → 클래스가 많기 때문에 연산량이 많아 속도는 2~30% 느릴 수 있다고함. (직접 확인해봐야할 부분)

 

 먼저 yolo5 모델 다운로드

  $ git clone https://github.com/ultralytics/yolov5
  $ cd yolov5

  $ pip install -r requirements.txt

 

1. 클래스 그대로 사용

 - 80개의 클래스를 그대로 사용

  → 사용 시 특정 클래스 1개만 사용하면 됨.

 

2. 양자화

 - 기본  TFLite 변환(float32)

  $ python export.py --weights yolov5n.pt --include tflite

 - 양자화된 TFLite 변환(INT8, MCU 권장)

  $  python export.py --weights yolov5n.pt --include tflite --int8

 

 위의 과정에서 발생할 수 있는 문제

 - tensorflow 버전 에러

  $ pip install tensorflow-cpu==2.15.1

 - 신뢰되지않은 경로 지정 에러

  $ git config --global --add safe.directory "C:/yolov5"

 

 

이전 글은 yolov5n모델을 pytorch 기반 pt파일로 변환하고 최종적으로 tflite 파일로 변환함.

 이전 글 : transfer learning-> yolov5n → onnx → TensorFlow SavedModel  tflite (일반적)

 현재 글 : (transfer learning 제거) yolov5n (양자화) tflie

 

* 이전 글의 방법이 일반적이며 디버깅이 용이함

* 현재 글의 방법은 최적화되고 디버깅이 어려움

  → 세부적인 커스터마이징을 하기 위해서는 onnx를 거쳐서 변환하는 이전 글 방법을 사용하고

 디버깅은 다소 어렵지만 빠르고 최적화되어 쉽게 사용하려면 onnx 변환과정이 없는 현재 글의 방법을 사용해야함.

 

 

# TFLite 파일 사용

- TFLM을 다운받아 TFLite파일과 함께 MCU 프로젝트에 추가하고 사용함.

  TFLM 링크 : https://github.com/tensorflow/tflite-micro

 

GitHub - tensorflow/tflite-micro: Infrastructure to enable deployment of ML models to low-power resource-constrained embedded ta

Infrastructure to enable deployment of ML models to low-power resource-constrained embedded targets (including microcontrollers and digital signal processors). - tensorflow/tflite-micro

github.com

 

 

 # 요약

  yolov5n → TFLite 바로 생성.

 

 

 

 

반응형