프로그래밍/작은 메모

MCU 단계에서 딥러닝을 수행하려면?

satnurn 2025. 7. 24. 14:40
반응형

 # 환경

 - Window 10

 

 

# 딥러닝 경량화

 - 기존 경량화 된 yolov3-tiny 모델이나 yolov5n, Tiny SSD 모델이 존재함.

  → 메모리가 부족한 MCU에서 사용하기위해 더 경량화가 필요.

    : 경량화된 위의 모델은 대략적으로 5MB ~30MB의 메모리가 필요하지만 메모리가 부족한 MCU에서는 대략적으로 1MB이하가 필요함. (보통 수십 KB ~ 1MB까지 사용)

 

그래서 추가적으로 경량화 과정을 거쳐 사용 메모리를 줄여야함.

 

1. 양자화

 - FP32 (32비트 부동소수점) 가중치와 활성화를 INT8 (8비트 정수)로 변환.

2. 클래스 줄이기

 - 사용하고자 하는 클래스만 사용(ex. coco 데이터셋의 경우 80개의 클래스 → 사람만 인식이 필요하면 1개의 클래스)

3. 입력 이미지 최소화

 - 이미지 전처리 과정에서 Input 이미지 사이즈 최소화, 160x160 or 128x128

 - 단순히 이미지 사이즈만 줄이게 되면 속도는 향상되나 정확도가 떨어지게 됨.

 

따라서 기존 yolov5n모델을 pytorch 기반 pt파일로 변환하고 최종적으로 tflite 파일로 변환하고자함.

(yolov5n → onnx → TensorFlow SavedModel tflite 변환 과정이 일반적)

 

 

# Transfer learning으로 재학습

  - 이미지데이터셋 준비 (coco)

  - yaml 예시

train: ./dataset/train/images
val: ./dataset/val/images
nc: 1
names: ['person']

 

- 학습 명령어 예시

 $ python train.py --img 128 --batch 32 --epochs 50 --data person.yaml --cfg models/yolov5n.yaml --weights yolov5n.pt --name y5n_128_person

 yolov5n.pt 파일이 생성됨.

 

 - 모델 onnx 변환 예시

 $ python export.py --weights runs/train/y5n_128_person/weights/best.pt --img 128 --include onnx

 변환 후 best.onnx 파일이 생성됨.

 

- 양자화 변환 과정을 거치면 tflite 파일이 생성됨.

- 모델을 .cc로 변환 후 사용

 

 

 

 * 다음에 사용할 때 참고하기 위해 방법만 확인함.

 

 

반응형