Asphalt Crack Detection with CNNs (e KNIME Analytics Platform)

Riconoscere le buche sull’asfalto

Durante una conversazione con un amico, questi mi ha posto la domanda se fosse possibile costruire una soluzione di machine learning per determinare, a partire da foto del manto stradale, se queste mostrassero strade con buche oppure no.

A parte l’oggetto dell’analisi, si tratta di applicare alcune tecniche usate nei problemi di Computer Vision, risolvibili utilizzando una rete neurale CNN, cose già viste e studiate in diverse soluzioni didattiche, che fanno parte della letteratura associata a questo tipo di problematica (si vedano, ad esempio, i dataset MNIST e olivetti faces collegati ad attività similari).

Il problema principale, nella mia mente, era trovare un dataset di questo tipo per poter sperimentare una soluzione al problema e, pensavo, che non sarebbe stata molto semplice. Sul fatto che avrei usato KNIME Analytics Platform, invece, non c’erano dubbi.

Dopo qualche ricerca su Internet, inaspettatamente, ho trovato un notebook di un utente di Kaggle che, non solo mi permetteva di accedere al dataset da lui utilizzato (proprio quello che stavo cercando), ma anche di esplorare la sua soluzione al medesimo problema usando il linguaggio Python!

Diamoci da fare

A questo punto, costruire la soluzione con KNIME Analytics Platform è stato semplice.

A parte qualche problema nella gestione del dataset delle immagini, che ho risolto costruendo un nodo in Python e usando le librerie Pytorch (ne ho parlato in questo post su LinkedIn), il resto è stato abbastanza semplice.

In pratica si utilizza una rete neurale CNN, addestrandola a riconoscere le immagini dotate di classe (cracked, non-cracked) e il workflow, non ci crederete, è simile a quello presente su KNIME Hub relativo al riconoscimento di cani e gatti.

Esecuzione

Il workflow ha tempi di esecuzione relativamente brevi (circa 1h, utilizzando la GPU).

L’accuracy raggiunge valori molto elevati già intorno ad 8 epoche e con loss vicini al 10%.

Non ho effettuato nessuna ottimizzazione, ma si potrebbe provare a vedere come variano le prestazioni aggiungendo altri nodi (layers) Keras Convolutional 2D Layer, con un un numero di filtri più alto (es. 128).

Risultati

I risultati sono molto buoni: l’accuracy overall, alla fine dell’elaborazione, è circa 90%, e quella relativa alla classe cracked del 77% (non male, ma sicuramente è migliorabile, facendo attenzione a non incappare nell’overfitting).

Conclusioni

Come si è intuito, a partire dalla conoscenza delle tecniche applicabili nella Computer Vision, queste si possono utilizzare nei contesti, di volta in volta differenti, che richiedono la medesima attività (nel nostro caso il riconoscimento e la classificazione).

Ampliando il concetto, non sarebbe stato differente se le immagini avessero riguardato le radiografie di pazienti e il problema fosse stato quello di determinare se questi avessero una certa patologia oppure no, anche se questa affermazione è più una semplificazione, perché per la natura di questo problema avremmo dovuto sicuramente effettuare un fine tuning per migliorare il recall (o sensitivity) del modello, avendo come obiettivo secondario quello di ridurre il più possibile il numero di falsi negativi per le conseguenze che può avere non sottoporre a trattamento un paziente che, in realtà, ne avrebbe bisogno.

Una nota di colore a margine.

Guardando le foto, che riguardano un paese anglosassone o comunque in cui vige la guida a sinistra, le strade contrassegnate come cracked, in realtà potrebbero essere le migliori strade possibili nelle nostre città…

P.S. il link al workflow è disponibile nel mio spazio pubblico su hub.knime.com.

Se volete imparare di più su KNIME e su come usarlo, vi consiglio i miei corsi su Udemy KNIME Analytics Platform per data scientists, intermediate, e KNIME Analytics Platform per data scientists, corso base. Per entrambi potrete utilizzare il coupon DSFACILE2404 per acquistarli al prezzo di 12,99€ ciascuno.

"KNIME Analytics Platform per Data Scientists, corso base o intermedio" su Udemy a 12.99€