본문 바로가기
코딩취미/AI

STM32Cube.AI를 활용한 신경망 모델 변환 및 적용 방법

by 브링블링 2025. 3. 11.
반응형

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 학습을 위한 참고자료

반응형