STM32Cube.AI를 활용한 신경망 모델 변환 및 적용 방법
STM32Cube.AI는 STMicroelectronics에서 제공하는 도구로, 사전 훈련된 신경망 모델을 **STM32 마이크로컨트롤러(MCU)**에서 실행할 수 있도록 변환하는 역할을 합니다. 이를 활용하면 경량 AI 모델을 엣지 디바이스에서 실행할 수 있어, 실시간 분석 및 저전력 환경에서 AI 기능을 사용할 수 있습니다.
이 글에서는 STM32Cube.AI의 주요 기능과 단계별 사용법, 그리고 예제 코드까지 포함하여 자세히 설명하겠습니다.
✅ STM32Cube.AI 주요 기능
기능 | 설명 |
모델 변환 | TensorFlow, PyTorch, ONNX 등의 사전 학습된 모델을 STM32에서 실행 가능하도록 변환 |
모델 분석 | 메모리 사용량, 연산 복잡도, 실행 시간 등을 분석하여 최적화 가능 |
모델 최적화 | MCU 환경에 맞게 모델을 압축하고 가속화 |
코드 생성 | 변환된 모델을 C 코드 형태로 생성하여 프로젝트에 통합 |
모델 검증 | 변환된 코드가 원래 신경망 모델과 동일하게 동작하는지 검증 |
✅ STM32Cube.AI 사용 단계 및 예제 코드
1️⃣ 모델 로드
STM32Cube.AI는 다양한 AI 프레임워크에서 학습된 모델을 불러올 수 있습니다. 지원되는 파일 형식은 .tflite, .h5, .onnx 등이 있습니다.
예제: TensorFlow 모델 로드
import tensorflow as tf
# 간단한 CNN 모델 생성
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(16, (3, 3), activation='relu', input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
# 모델 저장
model.save("mnist_model.h5")
설명:
- TensorFlow를 사용하여 간단한 MNIST 숫자 분류 모델을 생성한 후 .h5 파일로 저장합니다.
2️⃣ 모델 분석
로드한 모델을 STM32Cube.AI에서 분석하여 메모리 사용량, 연산 복잡도 등을 확인할 수 있습니다.
예제: 모델 분석 (Command Line)
stm32ai analyze --model mnist_model.h5 --verbose
설명:
- STM32Cube.AI CLI(Command Line Interface)를 이용해 모델의 연산량, 메모리 요구량 등을 분석합니다.
3️⃣ 모델 최적화
STM32 마이크로컨트롤러의 메모리 및 연산 성능에 맞춰 신경망 모델을 최적화해야 합니다.
예제: 양자화(Quantization) 적용
import tensorflow_model_optimization as tfmot
# 양자화 적용
quantize_model = tfmot.quantization.keras.quantize_model(model)
quantize_model.save("mnist_model_quantized.h5")
설명:
- **양자화(Quantization)**를 적용하여 모델 크기를 줄이고 속도를 높입니다.
- 최적화된 모델을 다시 저장하여 STM32Cube.AI에서 사용할 수 있도록 합니다.
4️⃣ 코드 생성
최적화된 모델을 C 코드로 변환하여 STM32 프로젝트에 통합할 수 있습니다.
예제: C 코드 생성
stm32ai generate --model mnist_model_quantized.h5 --output stm32_model --type c
설명:
- 변환된 모델을 기반으로 C 코드가 생성되며, stm32_model 폴더에 포함됩니다.
STM32CubeIDE에서 ai_model.c, ai_model.h 파일을 프로젝트에 추가하여 사용하면 됩니다.
5️⃣ 모델 검증
생성된 코드가 원본 모델과 동일하게 동작하는지 검증해야 합니다.
예제: STM32에서 실행 후 결과 확인
#include "ai_model.h"
int main() {
float input_data[INPUT_SIZE] = { /* 입력 데이터 */ };
float output_data[OUTPUT_SIZE];
ai_model_run(input_data, output_data);
printf("Predicted Label: %d\n", argmax(output_data));
return 0;
}
설명:
- 입력 데이터를 ai_model_run() 함수에 전달하여 추론을 수행합니다.
- argmax(output_data)를 사용하여 가장 높은 확률을 가지는 클래스를 예측합니다.
✅ 학습하기 적합한 AI 모델 및 예제
STM32Cube.AI는 경량화된 모델이 적합합니다. 다음과 같은 AI 모델을 사용하면 STM32 MCU 환경에서 효율적으로 구동할 수 있습니다.
모델 | 특징 | 용도 |
MobileNet | 가벼운 CNN 모델 | 이미지 분류 |
SqueezeNet | 작은 크기의 CNN | 저전력 환경 |
TinyML 모델 | 경량 신경망 구조 | IoT 및 센서 분석 |
예제: MobileNet 모델 적용
import tensorflow_hub as hub
model = hub.load("https://tfhub.dev/google/mobilenet_v2_100_224/classification/5")
설명:
- MobileNet 모델을 로드하고, STM32Cube.AI에서 변환하여 사용할 수 있습니다.
✅ 마무리
STM32Cube.AI를 활용하면 STM32 MCU에서 신경망 모델을 실행할 수 있도록 최적화된 C 코드를 생성할 수 있습니다. 초보자도 TensorFlow 또는 ONNX 모델을 사용하여 쉽게 변환할 수 있으며, 양자화(Quantization) 및 최적화 기법을 활용하면 더 나은 성능을 얻을 수 있습니다.
💡 STM32Cube.AI 학습을 위한 참고자료
- STM 공식 튜토리얼: STM32Cube.AI 공식 사이트
- TinyML 활용법: TensorFlow Lite for Microcontrollers
- STM32Cube.AI GitHub 샘플 코드: GitHub Repository
'코딩취미 > AI' 카테고리의 다른 글
모바일, IoT, 임베디드 시스템에서 사용할 수 있는 머신러닝 모델 정리 (0) | 2025.03.11 |
---|---|
워크플로우 자동화를 위한 [MAKE](Integromat) : 주의사항, 단점, 비용 (0) | 2025.01.16 |
TensorFlow for Microcontrollers(TFLM) 지원 플랫폼(MCU)과 AI 모델 프로젝트 (0) | 2024.09.23 |
TensorFlow 버전별 센서를 적용한 오픈 프로젝트 정리 (0) | 2024.09.21 |
TensorFlow 탑재 가능한 센서와 AI 모델 특징 정리 (0) | 2024.09.20 |