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

1. 소개

빌드할 항목

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

9208eb1207211349.gif

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

머신러닝을 사용하면 Google 어시스턴트와 같이 사용자의 삶을 더 편리하게 만들어 주는 지능형 도구를 만들 수 있습니다. 하지만 이러한 환경에는 강력한 클라우드 서버나 데스크톱을 포함할 수 있는 많은 컴퓨팅 또는 리소스가 필요한 경우가 많습니다. 하지만 이제 마이크로컨트롤러와 같은 작고 전력 소비가 적은 하드웨어에서 머신러닝 추론을 실행할 수 있습니다.

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

1914a419dfacf0b5.jpeg

머신러닝을 소형 마이크로 컨트롤러에 적용하면 값비싼 하드웨어나 안정적인 인터넷 연결에 의존하지 않고도 일상생활에서 사용하는 수십억 개의 기기의 지능을 향상할 수 있습니다. 일상 업무에 적응할 수 있는 스마트 가전, 문제와 일반 작업의 차이를 파악하는 지능형 산업 센서, 어린이가 신나고 재미있게 배우도록 돕는 마술 장난감을 상상해 보세요.

TensorFlow Lite For Microcontrollers (소프트웨어)

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 소켓에 연결합니다.
  • 아두이노의 왼쪽 하단 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. 마지막으로 IDE 오른쪽 하단에서 선택한 보드가 '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 라이브러리

이 라이브러리에는 이 Codelab에 필요한 마법 지팡이 소스 코드를 비롯한 모든 TensorFlow Lite for Microcontroller 예가 포함되어 있습니다.

  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. 날개: 왼쪽 상단에서 시작하여 2초 동안 'W'자를 조심스럽게 따라 그립니다.
  2. : 똑바로 선 상태에서 1초 동안 시계 방향으로 지팡이를 움직입니다.
  3. 경사: LED가 사용자를 향하도록 지팡이를 위로 향하게 잡고 시작합니다. 지팡이를 왼쪽으로 기울여 아래로 이동한 다음 오른쪽으로 1초 동안 수평으로 이동합니다.

다음 이미지는 두 가지 동작을 보여줍니다. 먼저 슬로프, 그다음 윙 (데모의 참조로 사용)

9208eb1207211349.gif

데모를 실행하려면 아래 안내를 따르세요.

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

38e8d53652eb28f2.png

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

60b8a0017bcae419.png

  1. 시리얼 모니터의 출력에서 마법 지팡이가 실제로 모든 모양을 감지한 것을 확인할 수 있습니다. 오른쪽 LED도 켜집니다.

7. 다음 단계

축하합니다. Arduino 마이크로컨트롤러에서 첫 번째 동작 인식 '마법 지팡이'를 빌드했습니다.

TensorFlow Lite for Microcontrollers를 사용한 개발에 관한 간략한 소개가 도움이 되었기를 바랍니다. 마이크로컨트롤러에서의 딥 러닝은 새롭고 흥미로운 아이디어이며, 직접 실험해 보시기 바랍니다.

참조 문서

647c3ef0dc103804.png

감사합니다. 즐거운 조립 되세요.