본문 바로가기

ESP32

TinyML-CAM ESP32에서 80FPS 이미지 인식

반응형

 

 

TinyML의 과제는 마이크로컨트롤러급 하드웨어에서 AI 워크로드에 대해 가장 낮은 설치 공간에서 최대 성능/효율을 추출하는 것입니다. 유럽의 기계 학습 연구원 팀이 개발한 TinyML-CAM 파이프라인은 카메라로 비교적 저가형 하드웨어에서 달성할 수 있는 것을 보여줍니다.

 

가장 구체적으로, 그들은 약 1KB의 RAM을 차지하는 오픈 소스 TinyML-CAM 파이프라인을 사용하여 10달러 미만의 ESP32-CAM 보드에서 80 FPS 이상의 이미지 인식에 도달했습니다. 카메라가 있는 다른 MCU 보드에서 작동해야 하며 맞춤형 작업을 구현하는 데 약 30분이 걸린다고 하기 때문에 교육이 복잡해 보이지 않습니다. 

 

 

참고 논문

 

연구원들은 마이크로컨트롤러용 TensorFlow LiteEdge Impulse와 같은 솔루션이 이미 신경망(NN)을 사용하여 MCU 보드에서 ML 워크로드의 실행을 가능하게 한다고 언급했습니다. 그러나 일반적으로 50~500kB의 RAM을 사용하고 추론에 100~600ms가 소요되므로 개발자는 복잡성이 낮거나 정확도가 낮은 NN을 선택해야 합니다.

 

그래서 연구원들은 4단계로 작동하는 TinyML-CAM 파이프라인을 설계하기 위해 마이크로컨트롤러용 TFLite에 대한 "Eloquent Arduino" 라이브러리 대안을 활용하는 보다 효율적인 비-NN 알고리즘(예: Decision Tree, SVM)을 사용하기로 결정했습니다.

 

1. 카메라 서버(160 × 120 해상도)와 MjpegCollector를 통한 데이터 수집 사용자에게 클래스 이름을 묻고 사용자가 나갈 때까지 일정 시간 동안 이미지 프레임 수집

 

2. 4단계로 특징 추출

  • 수집된 이미지를 RGB에서 회색으로 변환
  • HOG(Histogram of Oriented Gradients) 기능 추출기를 실행하여 기능 벡터를 출력합니다(작업 속도를 높이기 위해 저해상도 40 x 30 이미지 사용).
  • 추출된 특징이 얼마나 유익한지 시각적으로 이해하려면 Pairplot Visualization을 실행하십시오.
  • UMAP(Uniform Manifold Approximation and Projection) 차원 축소 알고리즘을 실행하여 특징 벡터를 가져와 길이 2로 압축합니다.

 

3. 분류자 훈련

 

4. C++로 포팅 – HOG 구성 요소와 분류자(Pairplot)를 C++ 코드 또는 더 정확하게는 헤더 파일(.h)로 변환합니다. 

 

그런 다음 헤더 파일을 Arduino Sketch에 추가할 수 있으며, 프로그램은 보드에서 컴파일되고 실행됩니다. 소스 코드, ESP32 하드웨어에 설치하기 위한 지침, GitHub에서 데모 비디오를 찾을 수 있습니다.

 

 

참고 논문 TinyML-CAM pipeline demo

 

솔루션을 테스트하기 위해 ESP32-CAM이 Raspberry Pi Pico, Arduino Portenta H7 또는 Wio 터미널을 인식하도록 훈련합니다. 이러한 유형의 보드에 대한 성능은 훌륭하고 설치 공간은 정말 작지만 연구원들은 Portenta 및 Pi 보드가 Pairplot 분석 중에 종종 잘못된 레이블이 지정되었으며 이 문제는 데이터 세트 품질을 개선하여 수정될 것으로 기대합니다.

 

GitHub의 소스 코드를 살펴보는 것 외에도 참고 링크의 4페이지 분량의 짧은 연구 논문에서 추가 정보를 찾을 수 있습니다. 

 

참고 

TinyML-CAM: 80 FPS Image Recognition in 1 kB RAM 논문 참고 

포스팅 기사 참고

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^