Laboratorul 10: Machine Learning

Testarea hardware-ului ESP32-CAM și conectivității

Până acum, am testat cu succes toate componentele hardware ale ESP32-CAM (MCU și cameră) și am verificat conectivitatea Wi-Fi. Următorul pas este să rulăm un cod simplu pentru a captura și afișa o singură imagine pe o pagină web de bază. Acest cod a fost dezvoltat pe baza excelentului tutorial al lui Rui Santos: ESP32-CAM Take Photo and Display on a Web Server.

Descarcă fișierul: ESP32_CAM_HTTP_Server_STA de pe GitHub. Modifică datele de autentificare Wi-Fi din cod și încarcă-l pe ESP32-CAM. Rulează codul și verifică rezultatul pe pagina web atasata. Înainte de a continua, analizează codul pentru a înțelege mai bine modul de funcționare al camerei.

Testarea hardware-ului ESP32-CAM și conectivității

Deși Edge Impulse Studio nu suportă oficial ESP32-CAM (suportă ESP-EYE), putem conecta ESP32-CAM utilizând firmware alternativ.

Mulțumiri speciale lui Louis Moreau de la Edge Impulse pentru adaptarea firmware-ului la pin-urile camerei ESP32-CAM.

Pași:

  1. Descarcă firmware-ul alternativ din repository-ul Github al proiectului.
  2. Deschide fișierul zip și execută programul de încărcare firmware pentru sistemul tău de operare.
  3. Asigura-te ca ai toate dependentele instalate
    • python -m pip install pyserial>=3.4
    • python -m pip install esptool>=3.3
    • npm install -g edge-impulse-cli –force
  4. Utilizează 'edge-impulse-daemon' pentru a conecta ESP32-CAM la Edge Impulse Studio.
  5. Pentru a rula Edge Impulse pe placa de dezvoltare, execută comanda 'edge-impulse-run-impulse'.
  6. Odată conectat, poți captura imagini suplimentare pentru dataset-ul tău sau utiliza funcția de clasificare live după antrenarea modelului.

Detectarea obiectelor cu FOMO

Acum că avem o cameră embedded funcțională, este timpul să trecem la detectarea obiectelor. În loc de clasificare simplă a imaginilor, vom antrena un model de detectare a obiectelor folosind FOMO (Faster Objects, More Objects). Această tehnică este optimizată pentru TinyML și funcționează excelent pe dispozitive cu resurse limitate, cum ar fi ESP32-CAM.

Obiectiv: Dorim să detectăm și să diferențiem trei obiecte:

  • Măr
  • Banană
  • Cartof

Pregătirea dataset-ului

Pentru detectarea obiectelor, avem nevoie de un dataset etichetat, care să conțină imagini cu mere, banane și cartofi. O sursă excelentă este Kaggle, unde poți găsi dataset-uri de înaltă calitate, cum ar fi:

Fruit and Vegetable Image Recognition Dataset

Acest dataset include o varietate de fructe și legume. Pentru acest proiect, concentrează-te doar pe categoriile pe care dorim să le detectăm.

Descarcă dataset-ul și asigură-te că include imagini cu cele trei obiecte (mere, banane, cartofi).

Încarcă aceste imagini în Edge Impulse Studio, în secțiunea Data Acquisition.

Pentru pregătirea dataset-ului pentru detectarea obiectelor, va trebui să etichetezi imaginile folosind bounding boxes. Edge Impulse Studio oferă un instrument integrat pentru etichetarea și definirea regiunilor de interes (ROIs) pentru fiecare obiect din imagini.

Design-ul impulsului pentru FOMO

Un impuls în Edge Impulse constă din trei pași principali:

  1. Preprocesare: Redimensionarea și normalizarea imaginilor.
  2. Extracția caracteristicilor: Extrage caracteristicile spațiale pentru detectarea obiectelor.
  3. Blocul de învățare: Utilizarea unui model FOMO pentru detectarea obiectelor.
De ce FOMO?

FOMO (Faster Objects, More Objects) este un model de detectare a obiectelor optimizat pentru dispozitive edge. Acesta oferă:

  1. Performanță în timp real pe dispozitive cu putere de calcul redusă, necesitând memorie minimă (RAM și ROM) pentru inferență.
  2. O abordare unică, care detectează locațiile și numărul obiectelor fără a necesita modele mari.

Configurarea impulsului

  • Preprocesarea imaginilor
    • Redimensionează imaginile la 96×96 pixeli.

Convertește-le în Grayscale (opțional) pentru a economisi memorie.

  • Blocul de învățare:

Utilizează modelul FOMO (MobileNetV2 0.35) disponibil în Edge Impulse Studio.

  • Salvează parametrii și continuă cu antrenarea.

Antrenarea modelului de detectare a obiectelor

În timpul antrenării, modelul FOMO va detecta obiecte învățând modele din dataset-ul etichetat. Spre deosebire de clasificarea simplă a imaginilor, detectarea obiectelor se concentrează pe:

  • Detectarea prezenței obiectelor într-o imagine.
  • Identificarea locațiilor aproximative utilizând o abordare bazată pe grilă, care este eficientă din punct de vedere al resurselor.

Augmentarea datelor:

Edge Impulse aplică augmentarea datelor pentru a îmbunătăți performanța modelului, introducând variații în datele de antrenament, cum ar fi:

  • Răsturnări aleatorii.
  • Decupări.
  • Ajustări ale luminozității.

Implementarea

După ce modelul este antrenat, acesta poate fi implementat ca o bibliotecă Arduino compatibilă cu ESP32-CAM.

  • Exportă modelul din Edge Impulse Studio ca bibliotecă .zip Arduino.
  • Deschide Arduino IDE:
  • Mergi la Sketch > Include Library > Add .ZIP Library.
  • Adaugă biblioteca descărcată.
  • Deschide sketch-ul de exemplu furnizat de Edge Impulse: FOMO Object Detection > esp32 > esp32_camera
    • Modifică sketch-ul și selectează pin-urile corecte ale camerei:
 #define CAMERA_MODEL_AI_THINKER   
  • Încarcă codul pe ESP32-CAM.

Testarea modelului

După implementarea codului, ESP32-CAM va:

  1. Captura o fotografie cu camera.
  2. Realiza detectarea obiectelor utilizând modelul FOMO.
  3. Afișa obiectele detectate și probabilitățile lor în Serial Monitor.

Rezultate și optimizare

Modelul FOMO cu MobileNetV2 0.35 oferă performanțe excelente pentru detectarea obiectelor în timp real pe ESP32-CAM. Timpul de inferență este minim, asigurând o detectare lină fără a depăși limitele de memorie ale dispozitivului.

Pentru optimizare suplimentară:

Ia în considerare utilizarea bibliotecii ESP NN de la Edge Impulse pentru a accelera inferența și a reduce latența. Optimizează utilizarea memoriei în codul final pentru a elibera RAM suplimentar pentru modele mai mari, dacă este necesar.

priot/laboratoare/10.txt · Last modified: 2025/01/14 01:54 by alexandru.bala
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0