Progettomar – giu 2025
BuddyBack: federated learning per la classificazione della postura
Addestrare il classificatore di postura di BuddyBack su più dispositivi senza condividere i dati di nessuno. Un’implementazione di FedAvg in PyTorch Lightning su feature di posa abbastanza leggere da allenarsi su un Raspberry Pi, provata con dati distribuiti in modo uniforme e sbilanciato.
BuddyBack è un dispositivo da scrivania che osserva la tua postura con una webcam. Un modello che impara da molti utenti funzionerebbe meglio di uno tarato su una sola persona, ma inviare i dati di postura a un server tradirebbe la promessa di tenere tutto sul dispositivo. Questo progetto esplora il federated learning come via d’uscita: ogni dispositivo si allena in locale e viaggiano solo i pesi del modello.
Dati
Il punto di partenza era un dataset pubblico di Roboflow con circa 600 immagini di posture da seduti, etichettate come corrette o scorrette. Invece di addestrare sui pixel, uno script di etichettatura applica MediaPipe a ogni immagine e tiene quattro feature: angolo del collo, angolo del busto, disallineamento delle spalle e angolo relativo del collo. Così addestramento e inferenza restano abbastanza leggeri per un Raspberry Pi.
Con così pochi esempi, la data augmentation ha fatto molto: rumore gaussiano per simulare l’imprecisione dei sensori, piccole variazioni degli angoli, rumore correlato tra collo e busto e SMOTE per bilanciare le classi.
Il sistema
- Modello. Un piccolo MLP (4 → 64 → 32 → 2) con dropout, scritto come modulo PyTorch Lightning.
- Client. Ogni dispositivo simulato riceve i pesi globali, si allena per qualche epoca sui propri dati e restituisce solo i pesi aggiornati e il numero dei suoi esempi.
- Server. Aggrega con FedAvg, pesando ogni client in base alla quantità di dati, poi valuta il modello globale su un test set separato.
- Esperimenti. Cinque client, 30 round, con una suddivisione IID e una sbilanciata (non-IID) per simulare utenti reali, tutto registrato su TensorBoard.
Nella prova non-IID il modello globale ha raggiunto il 99,1% di accuratezza sul test set, mentre i client in media erano al 91,5% sui propri dati. Sono numeri ottenuti su un dataset piccolo e aumentato artificialmente: dimostrano che il ciclo federato funziona, non come si comporterebbe il modello su persone nuove.
Team
Realizzato con Lorenzo Spataro. Il codice, con il notebook che spiega ogni passaggio, è su GitHub.