La sicurezza sul luogo di lavoro (in cui il Machine Learning per il face mask detection entra a pieno diritto) è diventata, in particolare a seguito dell’emergenza Covid, un requisito essenziale per le imprese ed è stata oggetto delle ultime normative della regione Toscana in tema di sicurezza sanitaria.
Come fare allora per essere certi che all’interno di uffici o locali pubblici sia sempre indossata la mascherina? Abbiamo provato a trovare una possibile soluzione tramite un piccolo esperimento, condotto con l’utilizzo di tecnologie IoT e di Machine Learning. Il tutto con un budget d’investimento molto limitato e accessibile a tutti.
Repository del progetto: GitHub
Due tecniche alternative di Machine Learning
In questo articolo parleremo di due diversi approcci, basati su tecniche di machine learning, per rilevare da uno stream video la presenza di persone che indossano o meno la mascherina.
Il primo approccio è computazionalmente più leggero, e quindi adatto ad applicazioni di edge computing. Il secondo richiede invece l’utilizzo di hardware dedicato come una GPU, locale o cloud, ma consente di raggiungere accuratezze superiori e fornisce una maggiore elasticità nel processo di addestramento.
Edge computing
Nel caso in cui non vi sia la possibilità di accedere ad hardware potente o ad un’architettura cloud attraverso una connessione internet, la scelta di un algoritmo di object detection è vincolata dalla potenza di calcolo del dispositivo di edge computing a disposizione. Per questo progetto abbiamo scelto di utilizzare un Raspberry Pi 3, una webcam usb ed un acceleratore hardware USB Coral, in modo da mantenere bassi i consumi elettrici e permettere il funzionamento del device anche attraverso l’utilizzo di una batteria.
ALGORITMO
Al fine di mantenere quanto più leggero possibile l’algoritmo, le task di object detection (ricerca dei volti) e di object classification (classificazione volto con o senza mascherina) vengono divisi in due step separati.
Per ogni frame dello stream video questi due passaggi vengono applicati in modo sequenziale:
- Object detection sui volti: si ricerca all’interno dell’immagine la presenza di uno o più volti e, per ciascun volto rilevato, viene estratta una regione rettangolare dell’immagine che lo contiene. Queste sezioni rettangolari dell’immagine vengono fornite come input al classificatore nello step successivo.
- Object classification: per ogni regione rettangolare in input contenente un volto, viene applicato un classificatore mascherina/non-mascherina realizzato utilizzando una rete neurale convolutiva. L’output della rete neurale è la probabilità che nella regione di input sia presente un volto senza mascherina. Qualora la probabilità superi una soglia prefissata, viene segnalata la presenza di una persona senza mascherina.
Per il task di object detection viene utilizzata la libreria Python opencv, in particolare un CascadeClassifier chiamato “haarcascade_frontalface_default”, un algoritmo specializzato nella ricerca di volti. Questo algoritmo è particolarmente leggero e permette di identificare un volto in circa 100 ms per un’immagine di dimensioni 640×480.
Il task di object classification è realizzato utilizzando il modello MobileNetV2, pre-addestrato sul dataset ImageNet. Questo permette di poter addestrare il modello con un dataset ridotto (~1000 immagini di esempio) attraverso la tecnica di transfer learning.
Questo modello è stato implementato utilizzando la libreria Python Tensorflow ed è stato successivamente convertito nel formato “.lite“ utilizzando TFLite Converter, un modello più leggero e adatto al limitato hardware a disposizione.
Questa conversione permette di ridurre le dimensioni del modello, aumentando la velocità di esecuzione attraverso due diverse tecniche: la model quantization e il pruning.
L’utilizzo combinato di un modello “.lite” e dell’acceleratore hardware USB Coral, permette di effettuare la classificazione in tempi inferiori a 200ms.
UTILIZZO
Una volta addestrato, il modello è in grado di riconoscere la presenza di persone con o senza la mascherina da uno stream video.
Il modello è installato ed avviato all’interno di un Raspberry PI. Il dispositivo, composto da Raspberry, Coral USB accelerator, videocamera e batteria, sarà completamente autonomo, in grado di funzionare senza collegamenti a rete elettrica e internet.
Questo ne permette l’utilizzo anche in ambienti esterni come un cantiere all’aperto, o in posizioni senza pratici allacciamenti alla corrente elettrica, come l’ingresso di un edificio. Il dispositivo potrà quindi ricordare il corretto utilizzo della mascherina attraverso un messaggio vocale registrato oppure attraverso un feedback visivo, come ad esempio un led illuminato di verde qualora la mascherina sia indossata correttamente, oppure di rosso in caso contrario.
Modello end-to-end con GPU
Nei casi applicativi compatibili con la disponibilità di utilizzo di una GPU (locale o cloud) è possibile utilizzare un approccio end-to-end, ovvero addestrare un singolo algoritmo di deep learning per localizzare volti con e senza mascherina.
Questa semplificazione nell’architettura permette sia di raggiungere accuratezze superiori, sia di semplificare il processo di addestramento della rete neurale, consentendo di aggiornare il modello agevolmente e in modo automatico alla luce di nuovi dati.
La meta architettura scelta per questo progetto è faster R-CNN, utilizzando ResNet come rete neurale convolutiva. Nonostante questa architettura sia una tra le più accurate attualmente disponibili, risulta sufficientemente leggera per applicazioni real-time.
Faster R-CNN
Il punto di forza di faster R-CNN è quello di condividere parte di calcoli effettuati dalla rete neurale convolutiva, responsabile di classificare volti con e senza mascherina, con una region proposal network (RPN), che permette di estrarre dall’immagine di input le regioni contenenti un volto.
Faster R-CNN è addestrata utilizzando un dataset open (Public Domain) fornito da makeml.app.
Questo dataset di training contiene circa 900 diverse immagini di persone che indossano o meno la mascherina. Per ogni immagine viene inoltre fornita la posizione esatta del volto delle persone, unitamente all’informazione sul corretto utilizzo della mascherina. L’addestramento del modello è realizzato utilizzando la piattaforma AWS Sagemaker.
UTILIZZO
Una volta addestrato correttamente, il modello sarà in grado di identificare la presenza di persone con e senza mascherina all’interno di una qualsiasi immagine.
Data una immagine in input, faster R-CNN fornirà come output una lista di regioni dell’immagine stessa (coordinate x-y), una per ogni volto identificato. Per ciascuna regione viene riportata sia la classe rilevata (mascherina – non mascherina) che il grado di sicurezza della predizione.
Il modello può essere quindi utilizzato ovunque sia disponibile una connessione Internet. Basta infatti munirsi di un qualsiasi dispositivo in grado di trasmettere uno stream video ai server AWS, come un Raspberry collegato ad una telecamera usb.
Una volta che i server AWS riceveranno lo stream, i frame del video verranno automaticamente forniti come input al servizio AWS Stagemaker, che invocherà il modello e comunicherà indietro i risultati al Raspberry. Questo, qualora fossero rilevate persone che non indossano la mascherina, si occuperà di ricordarne il corretto utilizzo attraverso un messaggio acustico o un avvertimento luminoso.
Conclusioni
In questo articolo abbiamo mostrato due diversi approcci per aiutare le persone a ricordare un corretto utilizzo della mascherina durante la pandemia Covid-19.
Un primo approccio è leggero e adatto a dispositivi di edge computing. Il suo vantaggio è la flessibilità, in quanto può essere utilizzato virtualmente ovunque, senza bisogno di un attacco alla rete elettrica o internet.
Il secondo approccio è invece basato sull’utilizzo di moderne GPU, le quali permettono di eseguire modelli di deep learning in tempo reale. Il sistema è più preciso e affidabile ma, per essere utilizzato, richiede l’impiego di hardware dedicato o di una connessione Internet veloce, utilizzando servizi di cloud computing come AWS Sagermaker. Questa seconda applicazione sembra infine più adatta per luoghi affollati, come ad esempio l’interno di un centro commerciale.
AWS è sicuramente un tool molto potente e flessibile per una moltitudine di progetti, non solo IoT o Deep Learning.
Abbiamo in conclusione appurato la fattibilità di un progetto low budget, accessibile a tutti e contemporaneamente in grado di conseguire risultati comparabili con quelli ottenibili da un progetto high budget.