TensorFlow Lite for Microcontrollers 및 Arduino를 사용한 AI 매직 완드

1. 소개

빌드할 항목

이 Codelab에서는 TensorFlow Lite For Microcontrollers를 사용하여 Arduino Nano 33 BLE에서 딥 러닝 모델을 실행하는 방법을 알아봅니다. 디지털 '마술 지팡이'로 변한 마이크로컨트롤러 주먹에 맞추어져서 다양한 주문을 시도합니다. 사용자가 지팡이를 움직이면 사람이 이해할 수 없는 복잡한 다차원 센서 데이터가 모델에 입력으로 전달되고, 이 모델은 간단한 분류를 출력하여 여러 움직임 중 하나가 발생한 경우 이를 알려줍니다.

9208eb1207211349.gif

마이크로컨트롤러의 머신러닝

머신러닝은 사용자의 작업 효율을 높여주는 지능형 도구를 Google 어시스턴트처럼 더 편리한 생활을 누려보세요. 그러나 이러한 환경에는 강력한 클라우드 서버 또는 데스크톱이 포함될 수 있는 많은 컴퓨팅 또는 리소스가 필요한 경우가 많습니다. 그러나 이제 마이크로컨트롤러와 같은 작은 저전력 하드웨어에서 머신러닝 추론을 실행할 수 있습니다.

마이크로컨트롤러는 매우 일반적이고 저렴하며 에너지가 거의 필요하지 않고 매우 안정적입니다. 가전제품, 자동차, 장난감 등 온갖 가정용 기기의 일부입니다. 실제로 매년 약 300억 개의 마이크로컨트롤러 기반 기기가 생산됩니다.

1914a419dfacf0b5.jpeg

머신러닝을 소형 마이크로컨트롤러에 도입함으로써 값비싼 하드웨어나 안정적인 인터넷 연결에 의존하지 않고도 생활에서 사용하는 수십억 대의 기기에 대한 지능을 강화할 수 있습니다. 일상생활에 적응할 수 있는 스마트 가전제품, 문제와 정상적인 작동의 차이를 파악하는 지능형 산업용 센서, 아이들이 재미있고 즐겁게 학습할 수 있도록 도와주는 마법 장난감이 있다고 상상해 보세요.

마이크로컨트롤러용 TensorFlow Lite (소프트웨어)

864114d0c2b4c919.png

TensorFlow는 모델 학습 및 실행을 위한 Google의 오픈소스 머신러닝 프레임워크입니다. TensorFlow Lite는 TensorFlow의 최적화된 버전인 소프트웨어 프레임워크로, 휴대전화와 같이 상대적으로 저성능의 작은 기기에서 TensorFlow 모델을 실행하는 것을 목표로 합니다.

TensorFlow Lite For Microcontrollers는 TensorFlow의 최적화된 버전인 소프트웨어 프레임워크로, 마이크로컨트롤러와 같은 작은 저전력 하드웨어에서 TensorFlow 모델을 실행하는 것을 목표로 합니다. 이러한 임베디드 환경에서 요구되는 제약 조건을 준수합니다.즉, 바이너리 크기가 작고 운영체제 지원, 표준 C 또는 C++ 라이브러리, 동적 메모리 할당 등이 필요 없습니다.

Arduino Nano 33 BLE (하드웨어)

bcd452d4d660efa9.jpeg

Arduino는 전자 프로젝트를 만드는 데 사용되는 인기 있는 오픈소스 플랫폼입니다. 다음으로 구성됩니다.

  1. 이 Codelab에서 사용하는 Arduino Nano 33 BLE와 같은 물리적으로 프로그래밍 가능한 회로 기판 (마이크로컨트롤러일 때도 있음)이 있습니다.
  2. 컴퓨터 코드를 작성하고 물리적 보드에 업로드하는 데 사용되는 소프트웨어인 Arduino IDE (통합 개발 환경)입니다.

Arduino Nano 33 BLE는 마이크로컨트롤러 기반 플랫폼으로 단일 회로 기판에 작은 컴퓨터입니다. 다른 기기로 디지털 신호를 송수신할 수 있게 해주는 프로세서, 메모리 및 I/O 하드웨어가 있습니다. 컴퓨터와 달리 마이크로컨트롤러는 강력하지 않으며 일반적으로 운영 체제를 실행하지 않습니다. 대신 프로세서가 작고 메모리가 많지 않으며 작성한 프로그램이 하드웨어에서 직접 실행됩니다. 그러나 마이크로컨트롤러는 가능한 한 단순하게 설계되었기 때문에 에너지를 거의 사용하지 않을 수 있습니다.

실행할 작업

  • Arduino Nano 33 BLE 마이크로컨트롤러를 설치하고 디지털 '마술 지팡이'로 만듭니다.
  • Arduino IDE 설정 및 필수 라이브러리 설치
  • 기기에 프로그램 배포
  • 마법 지팡이를 휘두르며 다양한 주문을 걸고 예언을 확인하세요

필요한 항목

2. Arduino 마이크로컨트롤러 설정

Arduino 포장 풀기

상자에서 꺼내서 포장 폼에서 꺼냅니다. 전도성이므로, 그렇지 않으면 문제를 일으킬 수 있습니다.

6ed84a651c871a58.jpeg

노트북에 연결하세요.

  • 마이크로 USB 케이블을 칩의 소켓에 꽂습니다.
  • 케이블의 다른 쪽 끝을 노트북의 USB 소켓에 연결합니다.
  • Arduino의 왼쪽 하단 LED (아래 이미지 왼쪽 상단)에 불이 들어옵니다.

c6936696f9659104.jpeg

워크플로 숙지

99852afbed7e78b0.png

위의 다이어그램에서 볼 수 있듯이 Arduino의 TFLite 인터프리터는 모델에서 주기적으로 추론을 실행합니다. 모델은 처리된 가속도계 데이터를 입력으로 사용하고 발생했을 가능성이 가장 높은 동작을 제안하는 예측을 출력합니다. 또한 원하는 출력이 인쇄되고 오른쪽 LED가 켜집니다.

3. Arduino IDE 설정

1. Arduino IDE 다운로드

프로그램을 Arduino 마이크로컨트롤러에 배포하기 위해 Arduino IDE를 사용합니다.

다운로드한 후 아이콘이 75717f13527f36b9.png인 애플리케이션을 클릭하여 Arduino IDE를 설치하고 엽니다.

최초 방문 페이지는 다음과 같이 열립니다.

933c91e6e1997c61.png

2. 이사회 관리자 설정하기

  1. Arduino 메뉴에서 Tools -> Board: "Arduino .." —> Boards Manager를 선택합니다.
  2. "Arduino Nano 33 BLE"를 검색하고 Arduino nRF528x Boards (Mbed OS)를 설치합니다. 이렇게 하면 Arduino Nano 33 BLE 마이크로컨트롤러가 Arduino IDE에서 지원됩니다. 817c63346152eda9.png
  1. Arduino 메뉴에서 Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"를 선택합니다.

9357691e1a1348eb.png

  1. 마지막으로 선택한 보드가 'Arduino Nano 33 BLE'인지 확인합니다. 를 클릭합니다.

aa08706bb84fa9b2.png

3. 포트 설정

Arduino 메뉴에서 Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE)를 선택합니다. 다음과 비슷한 모습이어야 합니다.

8c25990d0c6fb6f8.png

4. 보드 연결 확인

Arduino 메뉴에서 Tools -> Get Board Info를 선택합니다. 다음과 비슷한 모습이어야 합니다.

ccd8f5305be6cf59.png

4. 라이브러리 설치

1. TensorFlow Arduino 라이브러리

이 라이브러리에는 TensorFlow Lite for Microcontroller 예시가 모두 포함되어 있으며, 여기에는 이 Codelab에 필요한 마술 지팡이 소스 코드가 포함되어 있습니다.

  1. Arduino 메뉴에서 Sketch -> Include Library -> Add .ZIP Library...를 선택합니다.
  2. 다운로드한 TensorFlow Arduino 라이브러리 .zip를 추가합니다.

2. LSM9DS1 Arduino 라이브러리

이 라이브러리를 사용하면 Arduino Nano 33 BLE Sense의 LSM9DS1 IMU에서 가속도계, 자기계, 자이로스코프 값을 읽을 수 있습니다.

  1. Arduino 메뉴에서 Sketch -> Include -> Manage Libraries...를 선택합니다.
  2. "Arduino_LSM9DS1"을 검색하고 설치합니다. ac2f78a737c5f233.png

5. 예시 로드 및 빌드

1. 예시 로드하기

Arduino 메뉴에서 File -> Examples -> Arduino_TensorFlowLite -> magic_wand를 선택하여 샘플 코드를 로드합니다.

de349f2d3cb49b98.png

그러면 마술 지팡이 소스 코드가 로드됩니다.

cda8c35a597b0798.png

2. 예시 빌드

스케치 창에서 Upload 버튼을 클릭합니다.

71cb1474d5e14669.png

몇 분 후에 플래싱이 완료되었음을 나타내는 빨간색 텍스트가 표시됩니다. 업로드 중에 오른쪽 LED가 깜빡이다가 마지막에 어두워집니다.

3df1d0858c6e40a4.png

6. 데모

요술 지팡이는 현재 아래와 같이 3가지 동작을 감지할 수 있습니다. 99a607da66af9fc8.png

  1. Wing: 왼쪽 상단에서 시작하여 'W'를 조심스럽게 추적합니다. 2초 동안 재생됩니다.
  2. 벨소리: 똑바로 시작한 다음 지휘봉을 시계 방향 원 모양으로 1초간 움직입니다.
  3. 경사: LED가 위를 향하게 한 상태로 지팡이를 위를 향하게 잡고 시작합니다. 지팡이를 왼쪽으로 기울어진 상태에서 오른쪽으로 움직였다가 수평으로 오른쪽으로 1초간 움직입니다.

다음 이미지는 두 가지 동작을 보여줍니다. 먼저 경사와 날개 (이 과정을 데모의 참조로 사용하세요.)

9208eb1207211349.gif

데모를 실행하려면 다음 안내를 따르세요.

  1. USB가 연결된 상태에서 Arduino 메뉴에서 Tools -> Serial Monitor를 선택합니다. 처음에는 출력되지 않은 빈 화면이 열립니다.

38e8d53652eb28f2.png

  1. Arduino 마이크로컨트롤러를 움직여 위의 각 모양을 주의 깊게 추적하고 직렬 모니터가 동작을 감지하는지 확인합니다.

60b8a0017bcae419.png

  1. 직렬 모니터의 출력에서 마법 지팡이가 실제로 모든 모양을 감지했음을 알 수 있습니다. 오른쪽 LED도 켜집니다.

7. 다음 단계

축하합니다. 첫 번째 동작을 인식하는 '마법 지팡이'를 만들었습니다. 아두이노 마이크로컨트롤러에 연결됐어요!

TensorFlow Lite for Microcontrollers를 사용한 개발에 관한 간단한 소개가 도움이 되었기를 바랍니다. 마이크로컨트롤러에 관한 딥 러닝은 새롭고 흥미진진한 주제입니다. 여러분이 직접 실험해 보시기 바랍니다!

참조 문서

647c3ef0dc103804.png

감사합니다. 즐겁게 빌드하세요!