STM32 마이크로 컨트롤러에서 'Hello World' 머신 러닝 모델을 실행하는 방법

작성자: Jacob Beningo

DigiKey 북미 편집자 제공

머신 러닝(ML)은 수년 동안 서버 및 모바일 응용 분야에서 대유행했지만 이제 마이그레이션되어 에지 장치에서 중요해졌습니다. 에지 장치는 에너지 효율적이어야 한다는 것을 감안하면 개발자는 ML 모델을 마이크로 컨트롤러 기반 시스템에 배포하는 방법을 배우고 이해해야 합니다. 마이크로 컨트롤러에서 실행 중인 ML 모델을 주로 tinyML이라고 합니다. 안타깝게도 모델을 마이크로 컨트롤러에 배포하는 것은 간단한 일이 아닙니다. 하지만 점점 수월해지고 있어, 특별한 교육을 받지 않은 개발자라도 시기 적절하게 배포할 수 있습니다.

이 기사에서는 내장형 개발자가 STMicroelectronics의 STM32 마이크로 컨트롤러를 사용하여 ML을 시작할 수 있는 방법을 살펴봅니다. 이를 위해 X-CUBE-AI를 사용하여 TensorFlow Lite for Microcontrollers 모델을 STM32CubeIDE에서 사용할 수 있도록 변환하여 'Hello World' 응용 제품을 만드는 방법을 보여줍니다.

tinyML 사용 사례 소개

TinyML은 일반적으로 심층 신경망을 사용하여 마이크로 컨트롤러와 같은 리소스 및 전력이 제약된 장치에 ML의 강력한 기능을 제공하는 성장 중인 분야입니다. 이러한 마이크로 컨트롤러 장치는 ML 모델을 실행하고 에지에서 중요한 작업을 수행할 수 있습니다. tinyML이 매우 흥미로운 몇 가지 사용 사례가 있습니다.

많은 모바일 장치와 홈 자동화 장비에서 나타나는 첫 번째 사용 사례는 키워드 스포팅입니다. 키워드 스포팅을 사용하면 내장형 장치에서 마이크를 사용하여 음성을 캡처하고 사전 학습된 키워드를 감지할 수 있습니다. tinyML 모델에서는 음성을 표시한 후 음성 특징(일반적으로 스펙트로그램)으로 변환하는 시계열 입력을 사용합니다. 스펙트로그램은 시간에 따른 주파수 정보를 포함합니다. 스펙트로그램은 특정 단어를 감지하도록 학습된 신경망에 공급되며, 결과는 특정 단어가 감지될 확률입니다. 그림 1에서는 이 프로세스를 예로 들어 보여줍니다.

키워드 스포팅 이미지는 tinyML에 대한 흥미 있는 사용 사례입니다(확대하려면 클릭).그림 1: 키워드 스포팅은 tinyML에 대한 흥미 있는 사용 사례입니다. 입력 언어는 스펙트로그램으로 변환된 다음 학습된 신경망에 공급되어 사전 학습된 단어가 있는지 여부를 결정합니다. (이미지 출처: Arm®)

많은 내장형 개발자가 관심을 가질 tinyML에 대한 다음 사용 사례는 이미지 인식입니다. 마이크로 컨트롤러가 카메라에서 이미지를 캡처한 다음 사전 학습된 모델에 공급합니다. 모델에서는 이미지에 있는 내용을 식별할 수 있습니다. 예를 들어 고양이, 개, 물고기 등이 있는지 확인할 수 있습니다. 에지에서 이미지 인식을 사용하는 방법을 보여주는 좋은 예가 비디오 초인종에 있습니다. 비디오 초인종은 주로 문 앞에 사람이나 소포가 있는지 여부를 감지할 수 있습니다.

인기가 높은 마지막 사용 사례에서는 예측 유지 보수를 위해 tinyML을 사용합니다. 예측 유지 보수에서는 ML을 사용하여 비정상 감지, 분류 알고리즘 및 예측 모델을 기반으로 장비 상태를 예측합니다. 또한 HVAC 시스템부터 작업 현장 장비까지 많은 응용 분야에서 사용할 수 있습니다.

현재는 위의 세 가지 사용 사례가 tinyML에 널리 사용되지만, 틀림없이 개발자가 찾을 수 있는 많은 잠재적 사용 사례가 있습니다. 요약하면 다음과 같습니다.

  • 제스처 분류
  • 이상 감지
  • 아날로그 계량기
  • 유도 및 제어(GNC)
  • 패키지 감지

사용 사례에 상관없이 tinyML을 익히는 가장 좋은 방법은 'Hello World' 응용 제품을 사용하는 것입니다. 이 응용 제품은 개발자가 최소 시스템을 설치 및 실행하기 위해 따라야 하는 기본 공정을 학습하고 이해하는 데 도움이 됩니다. STM32 마이크로 컨트롤러에서 tinyML 모델을 실행하는 데 필요한 5가지 단계가 있습니다.

  1. 데이터 캡처
  2. 데이터 레이블 지정
  3. 신경망 교육
  4. 모델 변환
  5. 마이크로 컨트롤러에서 모델 실행

'Hello World' 모델 캡처, 레이블 지정 및 학습

개발자는 일반적으로 모델을 교육하는 데 필요한 데이터를 캡처하고 레이블을 지정하는 데 사용할 수 있는 다양한 옵션이 있습니다. 첫째, 많은 온라인 학습 데이터베이스가 있습니다. 개발자는 다른 사람이 수집하고 레이블 지정한 데이터를 검색할 수 있습니다. 예를 들어 기본 이미지 검색의 경우 CIFAR-10 또는 ImageNet이 있습니다. 사진에서 미소를 감지하도록 모델을 교육하기 위한 이미지 모음도 있습니다. 우선 온라인 데이터 저장소를 사용할 수 있습니다.

필요한 데이터가 인터넷에 아직 공개되지 않은 경우 개발자가 자체 데이터를 생성할 수 있습니다. Matlab 또는 일부 다른 도구를 사용하여 데이터 세트를 생성할 수 있습니다. 자동 데이터 생성을 사용할 수 없는 경우 수동으로 생성할 수 있습니다. 마지막으로 모든 단계를 수행하는 데 너무 많은 시간이 소요될 경우 인터넷에서 몇 가지 데이터 세트를 구입할 수 있습니다. 데이터 수집은 가장 흥미 있는 옵션이지만 가장 힘든 작업이기도 합니다.

여기서 탐구 중인 'Hello World' 예제에서는 사인파를 생성하여 STM32에 배포하도록 모델을 교육하는 방법을 보여줍니다. 이 예는 Pete Warden과 Daniel Situnayake가 Google에서 TensorFlow Lite for Microcontrollers 관련 작업의 일부로 만들었습니다. 모델 캡처, 레이블 지정 및 교육에 관한 간단한 공개 튜토리얼을 제공하므로 작업이 더 쉬워집니다. 이 예는 Github(여기)에서 확인할 수 있습니다. 여기서 개발자는 'Google Colab에서 실행' 버튼을 클릭해야 합니다. 개발자는 Google Colab(Google Collaboratory)을 사용하여 별도의 구성 없이 브라우저에서 Python을 작성하여 실행하고 Google GPU에 자유롭게 액세스할 수 있습니다.

교육 사례를 안내하는 출력에는 두 가지 모델 파일, 즉 model.tflite(마이크로 컨트롤러에 맞게 양자화된 TensorFlow 모델) 및 model_no_quant.tflite(양자화되지 않은 모델)가 포함되어 있습니다. 양자화는 모델 활성화와 바이어스를 수동으로 저장하는 방법을 나타냅니다. 양자화된 버전은 마이크로 컨트롤러에 더 적합한 소형 모델을 생성합니다. 호기심이 많은 독자의 경우 그림 2에서 교육된 모델 결과와 실제 사인파 결과를 비교할 수 있습니다. 모델 출력은 빨간색으로 표시됩니다. 사인파 출력이 완벽하지 않지만 'Hello World' 프로그램에 적용하는 데 충분합니다.

사인파와 실제 값을 비교하기 위한 TensorFlow 모델 예측 그래프그림 2: 사인파와 실제 값을 비교하기 위한 TensorFlow 모델 예측 비교 (이미지 출처: Beningo Embedded Group)

개발 기판 선택

마이크로 컨트롤러에서 실행하기 위해 TensorFlow 모델을 변환하는 방법을 살펴보기 이전에 모델에 배포할 마이크로 컨트롤러를 선택해야 합니다. STMicroelectronics는 모델을 변환하고 실행하는 데 적합한 않은 tinyML/ML 도구를 제공하므로 이 기사에서는 STM32 마이크로 컨트롤러를 중심으로 살펴봅니다. 또한 STMicroelectronics에는 ML 도구와 호환되는 다양한 부품이 있습니다(그림 3).

STMicroelectronics AI 에코시스템 표(확대하려면 클릭)그림 3: STMicroelectronics AI 에코시스템에서 현재 지원되는 마이크로 컨트롤러 및 마이크로 프로세서 장치(MPU)를 보여줍니다. (이미지 출처: STMicroelectronics)

이러한 기판 중 하나가 사무실 주변에 놓여 있는 경우 'Hello World' 응용 제품을 설치하여 실행하는 데 적합합니다. 하지만 이 예시를 너머 제스처 제어 또는 키워드 스포팅에 관심이 있는 경우 STM32 B-L4S5I-IOT01A Discovery IoT 노드(그림 4)를 선택하십시오.

이 기판에는 STM32L4+ 계열을 기반으로 Arm Cortex®-M4 프로세서가 탑재되어 있습니다. 이 프로세서에는 2Mb 플래시 메모리와 640Kb RAM이 장착되어 tinyML 모델에 충분한 공간을 제공합니다. 이 모델은 키워드 스포팅 응용 제품 개발에 사용될 수 있는 STMicroelectronics의 MP34DT01 마이크로 일렉트로닉 시스템(MEMS) 마이크를 제공하므로 tinyML 사용 사례 실험에 적용할 수 있습니다. 또한 STMicroelectronics의 온보드 LIS3MDLTR 3축 가속도계를 tinyML 기반 제스처 감지에 사용할 수 있습니다.

STMicroelectronics의 STM32 B-L4S5I-IOT01A Discovery IoT 모드 이미지그림 4: STM32 B-L4S5I-IOT01A Discovery IoT 노드는 온보드 Arm Cortex-M4 프로세서, MEMS 마이크 및 3축 가속도계로 인해 tinyML에 적용 가능한 실험용 플랫폼입니다. (이미지 출처: STMicroelectronics)

STM32Cube.AI를 사용하여 TensorFlow Lite 모델 변환 및 실행

tinyML 모델을 실행하는 데 사용될 수 있는 개발 기판이 탑재되어, 개발자는 이제 TensorFlow Lite 모델을 마이크로 컨트롤러에서 실행 가능한 모델로 변환할 수 있습니다. TensorFlow Lite 모델은 마이크로 컨트롤러에서 직접 실행될 수 있지만, 처리하려면 런타임 환경이 필요합니다.

모델이 실행될 때 일련의 기능을 수행해야 합니다. 이러한 기능은 센서 데이터 수집 후 필터링, 필요한 기능 추출, 모델에 제공 순으로 실행됩니다. 모델에서 결과가 제공되면 추가적으로 필터링한 후 몇 가지 조치를 취합니다. 그림 5에서는 이 프로세스를 간략하게 보여줍니다.

센서부터 런타임 및 출력에 이르는 데이터 흐름을 보여주는 구성도그림 5: tinyML 응용 제품의 센서, 런타임, 출력에 이르는 데이터 흐름 (이미지 출처: Beningo Embedded Group)

STM32CubeMx에 대한 X-CUBE-AI 플러그인은 TensorFlow Lite 모델을 해석하는 런타임 환경을 제공하고 개발자가 활용할 수 있는 대체 런타임 및 변환 도구를 제공합니다. X-CUBE-AI 플러그인은 프로젝트에서 기본적으로 활성화되지 않습니다. 하지만 새 프로젝트를 만들고 기판을 초기화한 후 소프트웨어 팩 -> 부품 선택으로 이동하면 AI 런타임을 활성화하는 옵션이 있습니다. 여기에 다양한 옵션이 있으므로 그림 6과 같이 이 예에 적합한 응용 제품 템플릿이 사용되는지 확인하십시오.

활성화해야 하는 X-CUBE-AI 플러그인 이미지그림 6: 이 예제에 적합한 응용 제품 템플릿을 사용하여 X-CUBE-AI 플러그인을 활성화해야 합니다. (이미지 출처: Beningo Embedded Group)

X-CUBE-AI를 활성화하면 STMicroelectronics X-CUBE-AI 범주가 도구 체인에 표시됩니다. 개발자는 범주를 클릭하여 그림 7과 같이 생성된 모델 파일을 선택하고 모델 파라미터를 설정할 수 있습니다. 분석 버튼을 클릭하면 모델을 분석하고 개발자에게 RAM, ROM 및 실행 주기 정보를 제공합니다. 개발자는 Keras 모델 옵션과 TFLite 모델 옵션을 비교하는 것이 좋습니다. 사인파 모델 예에서는 소소하여 큰 차이는 없지만 눈에 띄는 차이가 있습니다. 그런 다음 '코드 생성'을 클릭하여 프로젝트를 생성할 수 있습니다.

RAM, ROM 및 실행 주기 정보 이미지그림 7: 분석 버튼을 클릭하면 개발자에게 RAM, ROM 및 실행 주기 정보를 제공합니다. (이미지 출처: Beningo Embedded Group)

코드 생성기는 tinyML 모델을 위한 런타임 환경에서 프로젝트 및 빌드를 초기화합니다. 하지만 기본적으로 모델에 아무것도 제공되지 않습니다. 개발자는 모델 입력 값(x 값)을 제공하는 코드를 추가해야 합니다. 이 값은 모델에서 해석한 후 사인 y 값을 생성하는 데 사용됩니다. 그림 8과 같이 acquire_and_process_data 및 post_process 함수에 일부 코드 조각을 추가해야 합니다.

표시된 코드 이미지는 가짜 입력 센서 값을 연결합니다.그림 8: 표시된 코드는 가짜 입력 센서 값을 사인파 모델에 연결합니다. (이미지 출처: Beningo Embedded Group)

이제 예제를 실행할 준비가 되었습니다. 참고: 빠른 확인을 위해 모델 출력을 가져오도록 일부 printf 문을 추가합니다. 빠른 컴파일 및 배포로 인해 'Hello World' tinyML 모델이 실행됩니다. 전체 주기에 대한 모델 출력을 가져오면 그림 9와 같은 사인파가 표시됩니다. 완벽하지는 않지만 첫 번째 tinyML 응용 제품임을 감안하면 훌륭합니다. 이제 개발자는 출력을 펄스 폭 변조기(PWM)와 연결하고 사인파를 생성할 수 있습니다.

'Hello World' 사인파 모델 출력 이미지(확대하려면 클릭)그림 9: STM32에서 실행되는 경우의 'Hello World' 사인파 모델 출력 (이미지 출처: Beningo Embedded Group)

내장형 시스템의 ML을 위한 유용한 정보

마이크로 컨트롤러 기반 시스템에서 ML을 시작하려는 개발자는 첫 번째 tinyML 응용 제품을 설치하여 실행할 수 있는 많은 옵션이 있습니다. 하지만 개발을 단순화하고 가속화하도록 염두에 두어야 하는 몇 가지 '유용한 정보'가 있습니다.

  • TensorFlow Lite for Microcontrollers 'Hello World' 예시(Google Colab 파일 포함)를 살펴봅니다. 파라미터를 조정하고 학습된 모델에 미치는 영향을 파악합니다.
  • 마이크로 컨트롤러 응용 분야에 맞게 양자화된 모델을 사용합니다. 32비트 부동소수점 숫자가 아닌 uint8_t로 작동하도록 양자화된 모델을 압축합니다. 그러면 모델이 더 작아지고 더 빨리 실행됩니다.
  • TensorFlow Lite for Microcontrollers 저장소에서 추가 예제를 살펴봅니다. 기타 예제에는 제스처 감지 및 키워드 감지가 있습니다.
  • 모델 출력을 PWM 및 저대역 필터에 연결하여 결과 사인파를 확인하는 'Hello World' 예제를 수행합니다. 사인파 주파수를 늘리고 줄이는 런타임을 실험합니다.
  • 다양한 ML 응용 제품을 시도할 수 있는 '추가' 센서가 포함된 개발 기판을 선택합니다.
  • 데이터를 수집하는 것이 재미 있을 수도 있지만, 일반적으로 구입하거나 오픈 소스 데이터베이스를 사용하여 모델을 교육하는 것이 더 쉽습니다.

이러한 '유용한 정보'를 따르는 개발자는 응용 제품을 보안할 때 많은 시간과 고민을 줄일 수 있습니다.

결론

ML은 네트워크 에지에 도달했으며 리소스가 제약된 마이크로 컨트롤러 기반 시스템이 주요 대상입니다. 최신 도구를 사용하여 ML 모델을 변환하고 실시간 시스템에서 실행되도록 최적화할 수 있습니다. 위에서 살펴본 바와 같이 STM32 개발 기판에서 모델을 설치하여 실행하는 것이 복잡성에도 불구하고 상대적으로 쉽습니다. 여기서는 사인파를 생성하는 간단한 모델을 살펴보았지만 제스처 감지 및 키워드 스포팅과 같은 훨씬 더 복잡한 모델도 가능합니다.

DigiKey logo

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.

작성자 정보

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo는 임베디드 소프트웨어 컨설턴트로서 현재 십여 개국 이상의 국가에 있는 고객들과 협력하여 제품 품질, 비용, 출시 기간을 향상시켜 고객의 비즈니스를 극적으로 변화시키고 있습니다. 그는 인기 있는 강연자이자 기술 교육자이며 임베디드 소프트웨어 개발 기술에 대해 200개 이상의 기사를 발표했습니다. 그는 미시간 대학교 공학 석사 학위를 비롯하여 세 개의 학위를 소지하고 있습니다. 월간 Embedded Bytes 뉴스레터를 수신하려면 jacob@beningo.com 및 Jacob Beningo의 웹 사이트인 www.beningo.com으로 언제든지 문의해 주세요.

게시자 정보

DigiKey 북미 편집자