이 프로젝트 정보
전제
에지에서의 머신 러닝은 기존 코드에 비해 훨씬 적은 프로그래밍 및 논리적 흐름도로 "지능적" 작업을 수행할 수 있는 장치를 만드는 데 매우 유용합니다. 그래서 특정 단어를 인식하고 말한 내용을 기반으로 작업을 수행할 수 있는 최첨단 키워드 감지 기능을 통합하고 싶었습니다.
하드웨어
이 프로젝트에는 Arduino Nano 33 BLE Sense라는 하나의 구성 요소만 있습니다. 실제 마법은 기계 학습 모델에서 발생합니다. Arduino Nano 33 BLE Sense는 마이크, 9축 IMU, 환경 센서 및 제스처/근접/색상/주변광 센서(APDS-9960)를 포함한 센서로 가득합니다. 마이크로컨트롤러는 64MHz에서 실행되고 1MB의 플래시 메모리와 256KB의 RAM을 포함하는 nRF52840입니다. 이 프로젝트는 또한 온보드 RGB LED를 사용하여 현재 색상을 표시합니다.
그림>
Edge Impulse 설정
Edge Impulse에서 새 프로젝트를 생성한 다음 Edge Impulse CLI 도구를 설치했습니다. 설치 방법에 대한 자세한 내용은 설치 지침 페이지를 참조하십시오. 이를 통해 Arduino Nano는 클라우드 서비스와 통신하여 명령을 수신하고 센서 데이터를 자동으로 보낼 수 있습니다. 최신 Edge Impulse 펌웨어를 다운로드하고 리셋 버튼을 두 번 클릭하여 부트로더 모드로 전환하여 보드에 플래시했습니다. 그런 다음 flash_windows.bat
를 실행했습니다. 전송합니다.
명령 프롬프트에서 edge-impulse-daemon
을 실행했습니다. 마법사를 따라 설정했습니다. 이제 Nano가 프로젝트의 장치 목록에 표시되어 샘플을 채취하고 훈련/테스트 데이터 세트의 일부로 업로드할 수 있습니다.
샘플 수집
머신 러닝 모델을 훈련하려면 데이터와 상당한 양의 데이터가 필요합니다. RGB LED 스트립에 대해 다음 모드를 원했습니다.
<울> 켜기
꺼짐
빨간색
녹색
파란색
1~2초 간격으로 단어를 반복해서 말하고 쪼개는 모드마다 1분 정도의 소리가 났어요.
그림>
그러나 이러한 샘플을 갖는 것만으로는 충분하지 않습니다. 배경 소음 및 기타 단어가 잘못된 판독을 제공하기 때문입니다. 고맙게도 Edge Impulse는 이미 노이즈 및 '알 수 없는' 단어에 대한 사전 구축된 데이터 세트를 제공하므로 "기존 데이터 업로드" 도구를 사용하여 이러한 오디오 파일을 교육 데이터에 업로드했습니다.
마지막으로 데이터 세트를 재조정하여 교육 데이터와 테스트 데이터에 대해 각각 권장되는 80-20 분할을 갖도록 했습니다.
모델 훈련
이제 한 시간 분량의 훈련 데이터와 많은 레이블로 무장하고 모델을 훈련할 때입니다. 내가 디자인한 임펄스는 1초의 윈도우 크기와 500ms의 윈도우 증가를 가진 시계열 데이터로 오디오를 받아들입니다. 그런 다음 MFCC 블록을 통해 Keras 신경망 블록으로 전달됩니다.
MFCC 블록을 사용하면 시각적으로 주파수를 보여주는 스펙토그램과 함께 오디오가 처리되는 방식을 구성할 수 있습니다.
신경망 설정을 대부분 기본값으로 두었지만 몇 가지 수정도 했습니다. 먼저 최소 신뢰도 임계값을 0.80에서 0.70으로 변경하고 추가 노이즈 및 마스킹 시간 대역의 형태로 약간의 데이터 증대를 추가했습니다. 이것은 작업할 데이터가 더 다양하기 때문에 NN이 모델을 과적합하는 것을 방지하는 데 도움이 됩니다.
Arduino Nano 33 BLE Sense에 배포
Arduino Nano 33 BLE Sense는 오디오를 지속적으로 샘플링하고 키워드 중 하나가 말했는지 감지하는 상시 작동 마이크 역할을 합니다. 키워드를 찾으면 원하는 색상을 디코딩하는 데 사용되는 색인으로 키워드가 변환됩니다. on 또는 off 키워드의 경우 LED는 검정색 또는 밝은 회색으로 설정됩니다.
모델을 라이브러리로 다운로드하여 Arduino IDE에 추가한 다음 코드를 컴파일하여 Nano에 플래시했습니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> 코드
<울> RGBLED키워드 감지
RGBLED키워드 감지C/C++
/* Edge Impulse Arduino 예제 * Copyright (c) 2020 EdgeImpulse Inc. * * 이 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본 *을 얻는 모든 사람에게 무료로 권한이 부여됩니다. * 소프트웨어의 사본을 사용, 복사, 수정, 병합, 출판, 배포, 2차 라이선스 및/또는 판매할 수 있는 * 권리를 포함하되 이에 국한되지 않는 * 제한 없이 소프트웨어를 거래하고 * 소프트웨어를 받는 사람에게 허용하는 * 다음 조건에 따라 제공됩니다. * * 위의 저작권 표시 및 이 허가 표시는 * 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다. * * 소프트웨어는 상품성, * 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않는 어떠한 종류의 명시적 또는 * 묵시적 보증 없이 "있는 그대로" 제공됩니다. 어떤 경우에도 * 저자 또는 저작권 소유자는 계약, 불법 행위 또는 기타 행위로 인해 발생하는 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. * 소프트웨어 거래. */// 타겟이 메모리에 제한이 있는 경우 이 매크로를 제거하여 10K RAM을 저장합니다.#define EIDSP_QUANTIZE_FILTERBANK 0/** * 모델 창당 슬라이스 수를 정의합니다. 예를 들어 모델 창당 슬라이스가 4로 설정된 1000ms *의 모델 창. 결과는 250ms의 슬라이스 크기입니다. * 추가 정보:https://docs.edgeimpulse.com/docs/continuous-audio-sampling */#define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3/* 포함 ------------------- --------------------------------------------- */#포함 #include #include
섹션>