Come Abbiamo Raggiunto il 100% di Accuratezza in 97 KB su ESP32
Un approfondimento sul deploy di un modello di manutenzione predittiva su un microcontrollore da 4€ — senza cloud, senza GPU, senza compromessi.
La Sfida
La manutenzione predittiva è una delle applicazioni più impattanti del machine learning nell'industria. Rilevare un motore in fase di guasto prima che si rompa permette di risparmiare migliaia di euro in tempi di fermo. Ma l'approccio standard — inviare i dati dei sensori al cloud per l'inferenza — introduce latenza, dipendenza dalla connettività e costi ricorrenti che lo rendono impraticabile per la maggior parte dei deploy.
Ci siamo chiesti: possiamo eseguire l'intera pipeline di inferenza su un ESP32 da 4€, usando meno di 100 KB di flash?
Il Dataset
Abbiamo utilizzato dati da sensori di vibrazione di motori industriali — letture dell'accelerometro campionate a 1 kHz su tre assi. Il compito: classificare lo stato del motore in una di quattro categorie:
- Normale — funzionamento regolare
- Squilibrio — problema di distribuzione del peso del rotore
- Disallineamento — problema dell'accoppiamento dell'albero
- Guasto cuscinetto — degradazione in fase iniziale
Il dataset conteneva 12.000 finestre etichettate di 256 campioni ciascuna.
Perché Non Usare Semplicemente TensorFlow Lite?
TFLite Micro è un framework solido, ma comporta dei compromessi. Il solo runtime occupa 50-100 KB di flash a seconda degli operatori inclusi. Per un modello che deve stare in 97 KB totali — runtime incluso — serviva un approccio diverso.
Luviner utilizza un motore di inferenza proprietario ottimizzato per l'aritmetica quantizzata su architetture ARM Cortex-M e Xtensa (ESP32). L'overhead del runtime è inferiore a 8 KB, lasciando lo spazio rimanente interamente per i pesi del modello e la logica applicativa.
L'Architettura del Modello
Invece di una CNN o LSTM convenzionale, abbiamo usato una Rete Neurale ultra-compatta. Questa architettura offre tre vantaggi sui microcontrollori:
- Footprint di memoria fisso — nessuno stato nascosto che cresce con la lunghezza della sequenza
- Dinamiche temporali — la rete si adatta naturalmente al timing degli input, ideale per dati sensoriali
- Adatta alla quantizzazione — le distribuzioni dei pesi sono ideali per l'aritmetica intera
Il modello finale usa un'architettura proprietaria ultra-compatta, seguita da una singola testa di classificazione con output softmax.
Quantizzazione: Da Float32 a Int8
Il modello float32 ha raggiunto il 100% di accuratezza sul test set. La domanda era: la quantizzazione avrebbe distrutto quell'accuratezza?
Abbiamo applicato una quantizzazione post-training con calibrazione su 500 campioni rappresentativi. L'intuizione chiave: quantizziamo non solo i pesi, ma anche le attivazioni, usando fattori di scala per canale che minimizzano l'errore di quantizzazione a ogni layer.
Risultato: 100% di accuratezza preservata dopo la quantizzazione. La dimensione del modello è scesa da 380 KB (float32) a 89 KB (int8) — una riduzione di 4.3x senza alcuna perdita di accuratezza.
Layout di Memoria su ESP32
Ecco come si distribuiscono i 97 KB sull'ESP32:
- Runtime di inferenza: 7,8 KB
- Pesi del modello (int8): 89,2 KB
- Flash totale: 97 KB
- RAM in inferenza: 4,1 KB (buffer delle attivazioni)
L'ESP32 ha 4 MB di flash e 520 KB di SRAM. Il nostro modello usa il 2,4% della flash disponibile e lo 0,8% della RAM. Questo lascia ampio spazio per il firmware applicativo, lo stack di connettività e i driver dei sensori.
Prestazioni di Inferenza
Su un ESP32 a 240 MHz:
- Tempo di inferenza: 1,2 ms per finestra
- Throughput: 833 predizioni al secondo
- Consumo energetico: 12 mW durante l'inferenza
Per confronto, inviare gli stessi dati a un endpoint cloud richiederebbe 50-200 ms (a seconda della connettività), consumerebbe 100-500 mW per la trasmissione radio e richiederebbe una connessione internet persistente.
Provalo Tu Stesso
Abbiamo pubblicato una simulazione interattiva di questo esatto modello in esecuzione su un ESP32 virtuale. Puoi vedere le letture dei sensori, i risultati dell'inferenza e l'output della classificazione in tempo reale.
Punti Chiave
- Non servono GPU o connessione cloud per eseguire inferenza ML. Un microcontrollore da 4€ è sufficiente.
- La quantizzazione non deve significare perdita di accuratezza — con una calibrazione adeguata, i modelli int8 possono eguagliare i float32.
- Il runtime di inferenza conta tanto quanto il modello. Un runtime snello lascia più spazio per il modello.
- L'Edge AI non è una tecnologia del futuro. È pronta per la produzione oggi.
Se stai costruendo un prodotto che necessita di intelligenza on-device, Luviner può aiutarti. Gestiamo le parti difficili — ottimizzazione del modello, quantizzazione e deployment — così tu puoi concentrarti sulla tua applicazione.