TinyML 개발을 위한 Edge Impulse 사용기

MJ·2021년 8월 8일
0

TinyML

목록 보기
3/3

TinyML 개발을 위한 매우매우매우 유용한 개발 플랫폼

Edge Impulse란?

사실 TinyML는 탄생한 지 얼마 되지도 않았고 인공지능을 배우는 사람들에게도 매우 낯선 영역임 틀임 없습니다.

TinyML 프로젝트를 진행중임에도 한글로 된 블로그글을 찾기 매우 어렵고 실제로 네이버에 TinyML을 검색하면 나오는 게시물이 몇 없는데요..!

TinyML은 기존의 인공지능과 달리 메모리 영역이 매우 한정적이고 TensorFlow로 모델을 구축해놔도 TensorFlow Lite로 변환하는 과정이 별도로 필요하기 때문에 인공지능/딥러닝을 이제 막 배우기 시작한 저에게는 이 프로젝트가 매우 어려워질 것이라고 생각했습니다ㅠㅠ

그러나 유튜브에 친절하신 인도쌤이 올려주신 TinyML 프로젝트 소개 영상에서 매우 유용해 보이는 TinyML 개발 플랫폼을 찾았습니다!

바로 Edge Impulse 라는 개발 플랫폼이었는데, Edge Impulse는 블록 코딩 형식으로 모델의 레이어를 쌓을 수 있고 학습된 모델로 바로 개발 보드에 배포할 수 있다는 장점이 있습니다.

타이핑만 할 줄 알았던 저에게는 임베디드 시스템이 매우 어렵게 다가왔는데요, Edge Impulse로 개발 보드로 배포까지 쉽게 해주는 Edge impulse가 매우 매력적으로 다가왔습니다.

실제로 이 플랫폼을 사용하여 흥미로운 주제의 AIoT 프로젝트를 진행한 케이스를 많이 볼 수 있었는데요, Edge Impulse를 통한 TinyML 프로젝트가 궁금하신 분은 밑의 사이트를 참고하시면 좋을 것 같습니다.

https://create.arduino.cc/projecthub/search?q=tinyml

개발 가능 보드

Edge Impulse는 사이트 내에서 데이터 수집, 특징 추출기 생성 및 실행, 모델 생성 및 실행, 모델 테스트 그리고 모델을 개발 보드에 배포까지 가능케 합니다.

Edge Impulse가 지원하는 개발보드는:

  • ST B-L475E-IOT01A (IoT Discovery Kit)
  • Arduino Nano 33 BLE Sense
  • Eta Compute ECM3532 AI Sensor
  • Eta Compute ECM3532 AI Vision
  • OpenMV Cam H7 Plus
  • Himax WE-I Plus
  • Nordic Semiconductor nRF52840 DK
  • Nordic Semiconductor nRF5340 DK
  • Silicon Labs Thunderboard Sense 2
  • Sony's Spresense
  • Arduino Portenta H7 + Vision shield (preview support)
  • Raspberry Pi 4
  • NVIDIA Jetson Nano

로 많은 개발 보드들을 지원합니다. 저는 TinyML 개발보드로 가장 많이 쓰이는 Arduino Nano 33 BLE Sense를 사용하여 프로젝트를 진행하기 때문에 Edge Impulse를 매우 유용하게 사용하고 있습니다 .

Edge Impulse 사용해보기

이제 본격적으로 사용해 봅시다!

1. 계정 생성 및 프로젝트 생성

https://studio.edgeimpulse.com/

위의 사이트에서 회원가입을 진행한 뒤, 프로젝트를 생성합니다

이런식으로 프로젝트를 생성할 수 있습니다.

프로젝트 생성이 성공적으로 완성되었다면 이렇게 사용하는 데이터 별로 원하는 프로젝트의 종류를 선택할 수 있습니다.

2. 개발 보드 설치

원하는 프로젝트를 선택하셨다면 데이터셋 업로드를 위해 기존에 가지고 있었던 데이터를 업로드 할 수도 있고, 본인이 가지고 있는 개발 보드를 통해 직접 데이터 입력이 가능하기도 합니다. 만약 개발 보드를 통해 데이터를 받아오고 싶다면 본 프로젝트에 개발 보드를 설치해야 하는데요, 개발 보드마다 설치하는 방법이 상이하기 때문에 밑의 링크에서 자신이 가지고 있는 보드를 클릭한 다음에 튜토리얼대로 설치를 진행해 주시면 됩니다.

https://docs.edgeimpulse.com/docs/fully-supported-development-boards

개발 보드 설치를 위해선 Edge Impulse CLI와 Arduino CLI 파일을 다운 받으셔야 하는데 이는 위의 링크에서 다운받을 수 있습니다.

저는 CLI 파일 제대로 다운 안받아서 시작부터 엄청 해맸습니댜,,

3. 데이터 입력

Data acquisition 카테고리로 간다면 가지고 있는 데이터를 업로드 할 수 있고 설치한 개발 보드를 통해서 실시간으로 데이터 입력이 가능합니다.


이와 같이 레이블링을 할 수 있고, 가장 좋았던 점은 바로 데이터를 쪼갤수 있다는 점입니다.
간혹가다가 음성 데이터 중에 중간중간마다 아무런 소음이 발생하지 않는 구간이 존재하는데 이 부분을 제거할 수 있고 Edge impulse는 데이터를 쪼개는 과정중에 특징이 잘 나타내는 부분을 위주로 잘라주기 때문에 데이터의 정확성을 유지할 수 있습니다.

4. Impulse Design


데이터 입력을 모두 마친 후, Impulse Design 카테고리의 Create Impulse에서 데이터의 윈도우 크기, 윈도우 증가율을 정할 수 있고 특징 추출기와 분류 모델을 정할 수 있습니다.

저는 오디오 데이터를 사용했기 때문에 MFCC와 스펙토그램 특징 추출기를 사용하였습니다.

Impulse를 설정 하였다면, 특징 추출기를 가동해야 합니다.

위의 사진처럼 각 특징 추출기마다 파라미터를 설정할 수 있고 특징 추출기를 가동하는 Generate feature 부분이 있습니다. 반드시 Generate feature를 실행하여 왼쪽의 MFCC/ Spectogram 카테고리명 옆에 파란불이 뜨는것을 확인하시고 모델을 실행해야 합니다.



위의 사진은 각각 MFCC와 Spectogram 특징 추출기를 가동했을 때 분류된 결과물을 그래프로 보여주는 캡쳐본입니다.

그래프를 보면 아시다시피 완전하게 분류되진 않았지만 이건 그저 예시이기 때문에 다음 단계로 넘어가겠습니다.

5. 모델 생성




특징 추출을 마치셨다면, 오디오 자동 분류 모델을 생성해 볼텐데요, 캡쳐본에서 보시면 아시다싶이 몇번의 클릭만으로 모델 레이어를 수정하고 쌓거나 삭제가 가능합니다. 그러나 이미 모델 생성을 위한 Keras 코드가 있으신 분은 Swith to Keras(expert) mode 를 클릭하신 후 코드를 삽입할 수 있습니다.

Edge Impulse가 매우 편리한 이유 중 하나는 Data Augmentation을 자동으로 해준다는 점인데요, 데이터는 많을수록 좋으니깐 Data Augmentation을 통해 음성 데이터에 노이즈를 추가해 주었습니다.

이렇게 원하는대로 모델을 생성했다면 Start Training을 선택하여 모델 훈련을 시작합니다!

모델 훈련이 완료된다면 오른쪽에 정확도 그리고 손실 퍼센테이지와 함께 그래프로 모델이 훈련하여 결과로 나타낸 특징들의 xyz 그래프상 위치를 보여줍니다!

그닥 만족스러운 결과는 아니지만 예시이기 때문에 다음 단계로 넘어가겠습니다.

6. 모델 배포

이제 아마 가장 중요한 개발 보드로 모델 배포를 할 시간인데요

Deloyment 카테고리로 이동하시면 라이브러리를 생성하거나 개발 보드에 바로 설치할 펌웨어 중 하나를 선택하여 설치할 수 있게끔 하였습니다.

저는 Arduino Nano 33 BLE Sense 보드를 사용하였기 때문에 Arduino Nano 33 BLE Sense 보드용 펌웨어 설치를 선택하여 다운받았습니다.

Edge Impulse는 TinyML을 지원하기 때문에 모델 생성을 할 때 TensorFlow Lite버전으로 변환이 완료되었기 때문에 모델 최적화에 대해선 고민할 필요가 없습니다.

이렇게 보드용 펌웨어가 다운받았다면 zip파일이 생성됩니다.


다운이 완료된다면 이렇게 운영체제별로 실행 가능한 실행파일이 나타나게 됩니다. 저는 윈도우 환경에서 모델 배포를 진행하였기 때문에 flash_windows를 선택해 줍니다.


그럼 이렇게 아두이노 보드로 모델 배포가 자동적으로 실행됩니다.

모델 배포가 다 되었다는 메세지가 뜨면, cmd 창을 켜서

edge-impulse-run-impulse

를 치고 엔터를 누르면!

요렇게 이쁘게 실행이 됩니당..!
실시간으로 시계열 데이터를 입력받아 분류해 주는것을 보실 수 있어요.

마무리

이렇게 Edge Impulse를 사용해서 TinyML용 오디오 자동 분류 모델을 생성해 보았는데요, 이 플랫폼을 사용하니 정말 쉽게 모델의 레이어를 만들 수 있었고 개발 보드에 배포까지 아주 수월하게 진행되었습니다!

TinyML에 관심 있으신 분들은 꼭 Edge Impulse 사용해 보시는 것을 추천드립니다☺☺

1개의 댓글

comment-user-thumbnail
2023년 5월 25일

안녕하세요! 좋은 글 감사합니다. 한가지 여쭤볼 것이 있는데요! 혹시 오디오 수집하실 때 arduino로 수집하셨나요? 그리고 어떤 오디오 데이터를 수집하셨는지 여쭤봐도 될까요?

답글 달기