Differences

This shows you the differences between two versions of the page.

Link to this comparison view

priot:laboratoare:10 [2024/12/03 23:50]
jan.vaduva
priot:laboratoare:10 [2025/01/14 01:54] (current)
alexandru.bala [Detectarea obiectelor cu FOMO]
Line 1: Line 1:
-===== Laboratorul 10: Machine Learning, Predicție și TinyML ​=====+===== Laboratorul 10: Machine Learning =====
  
-===== Scopul Laboratorului: ​===== +==== Testarea hardware-ului ESP32-CAM și conectivității ​==== 
-Obiective: +Până acum, am testat cu succes toate componentele hardware ​ale ESP32-CAM ​(MCU și cameră) ​și am verificat conectivitatea Wi-FiUrmă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: [[https://​randomnerdtutorials.com/​esp32-cam-take-photo-display-web-server/​|ESP32-CAM Take Photo and Display on a Web Server]].
-  * Înțelegerea conceptelor de bază ale Machine Learning ​(ML) și a regresiei liniare. +
-  * Utilizarea seturilor de date publice pentru antrenarea ​și evaluarea unui model de predicție. +
-  * Implementarea unui model de regresie liniară pentru a analiza relația dintre caracteristici ​și rezultate.+
  
 +Descarcă fișierul: [[https://​github.com/​Mjrovai/​ESP32-TinyML/​tree/​main/​ESP32-CAM_Code/​ESP32_CAM_HTTP_Server_STA|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.
  
-==== Teorie ==== 
-=== Ce este Machine Learning (ML)? === 
-Machine Learning este o metodă de analiză a datelor care automatizează construirea modelelor predictive. Se bazează pe ideea că sistemele pot învăța din date, identifica modele și lua decizii fără intervenție umană. Acest proces este esențial în aplicații precum: 
-    * Recomandările personalizate (Netflix, Amazon). 
-    * Predicții financiare. 
-    * Diagnostic medical asistat. 
  
-=== Tipuri de Machine Learning: ​=== +==== Testarea hardware-ului ESP32-CAM și conectivității ==== 
-==Supervised Learning==  +Deși Edge Impulse Studio nu suportă oficial ESP32-CAM (suportă ESP-EYE)putem conecta ESP32-CAM utilizând firmware alternativ
-    * Modelul învață dintr-un set de date etichetat, unde fiecare intrare are un răspuns cunoscut. +
-    * Ex.: Prezicerea prețului unei case pe baza suprafeței. +
-    * Algoritmi populari: regresie liniară, arbori de decizie, rețele neuronale. +
-==Unsupervised Learning== +
-    * Modelul lucrează cu date neetichetate ​și găsește structuri ascunse. +
-    * Ex.: Clustering-ul clienților în funcție de comportament. +
-    * Algoritmi populari: K-meansPCA (analiza componentelor principale).+
  
-==Reinforcement Learning== +Mulțumiri speciale lui Louis Moreau de la Edge Impulse pentru adaptarea firmware-ului la pin-urile camerei ESP32-CAM.
-    * Modelul învață să ia decizii bazate pe recompense și penalizări din mediu. +
-    * Ex.: Un robot care învață să evite obstacolele.+
  
-===Regresia liniară=== +Pași: 
-Regresia liniară este una dintre cele mai simple metode ​de predicție folosite în învățarea supervizată. Scopul este de si o relație liniară între o variabilă dependentă yy (de ex., prețul casei) și una sau mai multe variabile independente xx (de ex., suprafața casei).+  - Descarcă firmware-ul alternativ din repository-ul [[https://​github.com/​Mjrovai/​ESP32-TinyML/​blob/​main/​ESP32-CAM_Code/​espressif-esp32-cam-ai-thinker.zip|Github]] al proiectului. 
 +  - Deschide fișierul zip și execută programul ​de încărcare firmware pentru sistemul tăde operare. 
 +  - Asigura-te ca ai toate dependentele instalate 
 +      * **python -m pip install pyserial>​=3.4** 
 +      * **python -m pip install esptool>​=3.3** 
 +      * **[[https://​nodejs.org/​dist/​v22.12.0/​node-v22.12.0-x64.msi|node.js v22.12.0]]** 
 +      * **npm install -edge-impulse-cli --force** 
 +  - Utilizează '​**edge-impulse-daemon**'​ pentru a conecta ESP32-CAM la Edge Impulse Studio. 
 +  - Pentru a rula Edge Impulse pe placa de dezvoltare, execută comanda '​**edge-impulse-run-impulse**'​. 
 +  - Odată conectatpoț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.
  
-Ecuația generală+Obiectiv
- y=m⋅x+by = m \cdot x + b +Dorim să detectăși să diferențiem trei obiecte:
  
 +  * Măr
 +  * Banană
 +  * Cartof
  
-Unde: +=== Pregătirea dataset-ului === 
-    * yy: valoarea prezisă. +Pentru detectarea obiectelor, avem nevoie de un dataset etichetat, care să conțină imagini cu mere, banane și cartofiO sursă excelentă este Kaggle, unde poți găsi dataset-uri de înaltă calitate, cum ar fi:
-    * xx: variabila predictivă+
-    * mmpanta liniei (impactul variabilei predictive asupra rezultatului). +
-    * bb: interceptul (valoarea yy când x=0x = 0).+
  
-===Ce este setul de date Boston Housing? === +[[https://www.kaggle.com/​datasets/​kritikseth/​fruit-and-vegetable-image-recognition?​resource=download|Fruit and Vegetable Image Recognition Dataset]]
-Setul de date Boston Housing este utilizat frecvent în problemele de regresie. El conține informații despre prețurile caselor din suburbii ale Bostonului și caracteristici relevante, precum: +
-    * RM: Numărul mediu de camere. +
-    * CRIM: Rata criminalității. +
-    * DIS: Distanța față de centrele de afaceri.+
  
-==Partea 1: Explorarea setului ​de date== +Acest dataset include o varietate ​de fructe și legumePentru acest proiect, concentrează-te doar pe categoriile pe care dorim să le detectăm.
-<code boston.py> +
-from sklearn.datasets import load_boston +
-import pandas as pd+
  
-# Încărcarea datelor +<​note>​Descarcă dataset-ul și asigură-te că include imagini cu cele trei obiecte ​(mere, banane, cartofi).</​note>​
-boston = load_boston()+
  
-# Crearea unui DataFrame pentru o vizualizare mai bună +Încarcă aceste imagini în Edge Impulse Studioîn secțiunea Data Acquisition.
-data = pd.DataFrame(boston.datacolumns=boston.feature_names) +
-data['​PRICE'​] = boston.target+
  
-# Afișarea primelor 5 rânduri +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.
-print(data.head())+
  
-# Informații despre setul de date +=== Design-ul impulsului pentru FOMO === 
-print(data.info())+Un impuls în Edge Impulse constă din trei pași principali:​ 
 +  - Preprocesare:​ Redimensionarea și normalizarea imaginilor. 
 +  - Extracția caracteristicilor:​ Extrage caracteristicile spațiale pentru detectarea obiectelor. 
 +  - Blocul de învățare:​ Utilizarea unui model FOMO pentru detectarea obiectelor.
  
-# Statistici descriptive +== De ce FOMO? == 
-print(data.describe())+FOMO (Faster Objects, More Objects) este un model de detectare a obiectelor optimizat pentru dispozitive edgeAcesta oferă: 
 +  - Performanță în timp real pe dispozitive cu putere de calcul redusă, necesitând memorie minimă ​(RAM și ROMpentru inferență. 
 +  - O abordare unică, care detectează locațiile și numărul obiectelor fără a necesita modele mari.
  
-</code>+=== Configurarea impulsului === 
 +  * Preprocesarea imaginilor 
 +    * Redimensionează imaginile la 96x96 pixeli. 
 +<note tip>​Convertește-le în Grayscale (opțional) pentru a economisi memorie.</note> 
 +  * Blocul de învățare:​
  
-==Partea 2: Implementarea regresiei liniare== +<note tip>Utilizează modelul FOMO (MobileNetV2 0.35) disponibil în Edge Impulse Studio.</​note>​ 
-<code regression.py> +  * Salvează parametrii și continuă cu antrenarea.
-import numpy as np +
-import matplotlib.pyplot as plt +
-from sklearn.linear_model import LinearRegression +
-from sklearn.model_selection import train_test_split +
-from sklearn.metrics import mean_squared_error+
  
-# Încărcarea datelor +==== Antrenarea modelului ​de detectare a obiectelor ​==== 
-boston ​load_boston() +Î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:
-boston.data[:,​ 5].reshape(-1,​ 1)  # RM (număr ​de camere) +
-boston.target ​ # Prețul locuinței+
  
-# Împărțirea datelor în seturi de antrenament și testare +  * Detectarea prezenței obiectelor într-o imagine. 
-X_trainX_test, y_train, y_test = train_test_split(X,​ y, test_size=0.2, random_state=42)+  * Identificarea locațiilor aproximative utilizând o abordare bazată pe grilăcare este eficientă din punct de vedere al resurselor. 
 +Augmentarea datelor:
  
-# Crearea ​modelului de regresie liniară +Edge Impulse aplică augmentarea datelor pentru a îmbunătăți performanța ​modelului, introducând variații în datele ​de antrenament,​ cum ar fi:
-model = LinearRegression()+
  
-# Antrenarea modelului +  * Răsturnări aleatorii. 
-model.fit(X_train,​ y_train)+  * Decupări. 
 +  * Ajustări ale luminozității.
  
-# Prezicerea valorilor pe setul de testare +=== Implementarea ==== 
-predictions ​model.predict(X_test)+După ce modelul este antrenat, acesta poate fi implementat ca o bibliotecă Arduino compatibilă cu ESP32-CAM.
  
-# Calcularea erorii medii pătratice (MSE) +  * Exportă modelul din Edge Impulse Studio ca bibliotecă .zip Arduino.
-mse = mean_squared_error(y_test,​ predictions) +
-print(f"​Eroarea medie pătratică: {mse:.2f}")+
  
-# Vizualizarea rezultatelor +  * Deschide Arduino IDE:
-plt.scatter(X_test,​ y_test, color='​blue',​ label='​Valori reale'​) +
-plt.plot(X_test,​ predictions,​ color='​red',​ label='​Linia de regresie'​) +
-plt.xlabel('​Număr mediu de camere'​) +
-plt.ylabel('​Prețul mediu al locuinței (în mii USD)'​) +
-plt.title('​Regresie liniară - Boston Housing'​) +
-plt.legend() +
-plt.show()+
  
-# Predicție pentru o casă cu 6 camere +    * Mergi la Sketch > Include Library > Add .ZIP Library
-prediction = model.predict([[6]]) +    * Adaugă biblioteca descărcată.
-print(f"​Prețul prezis pentru o casă cu 6 camere: {prediction[0]:​.2f} mii USD")+
  
-</code>+  * 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:
  
-==Partea 3: Sarcina pentru studenți== +<​code>​ #define CAMERA_MODEL_AI_THINKER ​  </​code>​
-1.Explorare:​ +
-    * Schimbați predictorul principal din RM (număr de camere) cu o altă caracteristică,​ cum ar fi DIS (distanța față de centrele de afaceri) sau CRIM (rata criminalității). +
-    * Vizualizați relația dintre predictor și prețul locuinței folosind un grafic scatter. +
-2.Evaluare:​ +
-    * Calculați erorile medii pătratice (MSE) pentru diferite modele folosind diverși predictori. +
-    * Identificați predictorul care are cel mai mare impact asupra prețului. +
-3.Extindere:​ +
-    * Aplicați regresia liniară multiplă folosind mai multe caracteristici (de exemplu, RM, DIS și CRIM) pentru a prezice prețul.+
  
 +  * Încarcă codul pe ESP32-CAM.
  
 +=== Testarea modelului ===
 +După implementarea codului, ESP32-CAM va:
  
 +  - Captura o fotografie cu camera.
 +  - Realiza detectarea obiectelor utilizând modelul FOMO.
 +  - Afișa obiectele detectate și probabilitățile lor în Serial Monitor.
  
-=====Introducere în ESP32-S3 și ESP32-CAM pentru aplicații IoT și TinyML===== +=== Rezultate ​și optimizare ​=== 
-====Obiective==== +Modelul FOMO cu MobileNetV2 0.35 oferă performanțe excelente ​pentru ​detectarea obiectelor în timp real pe ESP32-CAM. ​Timpul de inferență este minimasigurând ​detectare lină fără a depăși limitele ​de memorie ale dispozitivului.
-    * Înțelegerea conceptelor de bază ale modulelor ESP32-S3 și ESP32-CAM. +
-    * Învățarea modului de configurare a mediului hardware și software ​pentru ESP32-CAM. +
-    * Explorarea potențialului de a implementa modele TinyML pe ESP32 folosind TensorFlow Lite. +
- +
-====Prezentare Teoretică==== +
-===Ce este ESP32-S3?​=== +
-ESP32-S3 este un microcontroler puternic de la Espressif Systemsavând: +
-    * Procesor dual-core. +
-    * Conectivitate Wi-Fi și Bluetooth integrate. +
-    * Capacități computaționale ridicate, ceea ce îl face potrivit pentru AI, IoT și alte sarcini care necesită putere de calcul mare. +
- +
-===Ce este ESP32-CAM?​=== +
-ESP32-CAM este variantă specializată a seriei ESP32, concepută pentru aplicații cu camere: +
-    * Echipat cu un modul de cameră OV2640. +
-    * Suportă stocarea pe carduri microSD pentru salvarea imaginilor sau videoclipurilor. +
-    * Utilizat frecvent în supraveghere,​ aplicații IoT și dispozitive edge alimentate de AI. +
- +
-=== IoT și TinyML cu ESP32 === +
-    * Aplicații IoT: ESP32 poate conecta dispozitive la servicii cloud pentru ​înregistra date, a controla dispozitive de la distanță sau a transmite media. +
-    * TinyML: Folosind TensorFlow Lite, ESP32 poate rula modele de învățare automată pentru aplicații precum detectarea obiectelor, recunoașterea vocală și analiza predictivă. +
- +
-====Linkuri pentru Laborator==== +
-===Configurare hardware și software:​=== +
-Urmați acest ghid pentru a configura ESP32-CAM:​ +
- +
-https://​www.cytron.io/​tutorial/​getting-started-with-esp32-cam?​srsltid=AfmBOopVCXL9i9-ccmw5NusebqVwpNa9kQhx-rQfT-NT7OmcgKxx84hH +
- +
-===Ce să faceți mai departe (implementarea TinyML):​=== +
-Aflați cum să implementați modele TensorFlow Lite pe ESP32-CAM pentru sarcini TinyML urmând acest tutorial:  +
- +
-https://​eloquentarduino.com/​posts/​tensorflow-lite-tinyml-esp32 +
- +
-====Lecturi și Resurse Suplimentare==== +
-    * Ghid ​de programare ESP-IDF: ​ https://​docs.espressif.com/​projects/​esp-idf/​en/​latest/​ +
-    * Documentația pentru Arduino ESP32 Core: https://​github.com/​espressif/​arduino-esp32+
  
 +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.1733262605.txt.gz · Last modified: 2024/12/03 23:50 by jan.vaduva
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