A seguito del primo post in cui effettuavamo una analisi introduttiva su come analizzare radiografie per identificare la presenza di Covid, abbiamo iniziato a chiederci quanto il sistema, o per lo meno la strada intrapresa, potesse essere valida in un contesto reale.
In questi giorni stiamo avendo diversi contatti con i principali player bergamaschi per cercare di avviare progetti che possano fornire un aiuto concreto durante questo momento d’emergenza.
Abbiamo sottomesso un progetto in collaborazione con i nostri amici, nonché vicini di scrivania, di D/VisionLab per rispondere alla call europea. Il progetto si pone come obbiettivo quello di realizzare una piattaforma per la raccolta, catalogazione e analisi di dati di varie nature relativi alla situazione medica di un paziente, in modo da fornire uno strumento di supporto ed un bacino di conoscenza condiviso al personale clinico che si trova ad affrontare una problematica alla quale non esiste una procedura di trattamento consolidata. Questi dati potrebbero poi analizzati da algoritmi di intelligenza artificiale per predire la sviluppo di patologie o per classificare una problematica in funzione dello storico presente sulla piattaforma. Per chi fosse interessato, l’articolo pubblicato da D/VisionLab si addentra nei dettagli più tecnici fornendo un overview molto interessante. Questo progetto verrà svolto in collaborazione con l’ospedale Papa Giovanni XXIII di Bergamo e l’istituto di ricerca Mario Negri, due eccellenze bergamasche.
Il risultato ottenuto con il primo, semplicissimo, approccio, aveva portato ad identificare in modo corretto 22 RX su 23. Il dataset era composto da lastre di persone sane (56 immagini) e da persone affette da Covid-19 (56 immagini).
Abbiamo quindi provato a capire come la rete neurale convoluzionale prendesse le decisioni osservando le immagini. Per poter effettuare questa analisi, ci siamo affidati all’algoritmo Grad-CAM, Gradient-weighted Class Activation Mapping [https://arxiv.org/abs/1610.02391]. Questo algoritmo permette di rendere più interpretabile la decisione effettuata dalla rete neurale, andando ad aumentare la fiducia con cui ci si affida a questi sistemi. Grad-CAM produce una mappa di attivazione, evidenziando quali sono le regioni dell’immagine che hanno avuto un peso maggiore nella decisione finale dell’algoritmo.
Abbiamo quindi applicato (grazie a Davide Pasanisi) Grad-CAM alla rete trainata precedentemente nel tentativo di capire come la rete prendeva le decisioni sul nostro dataset.
Applicando l’algoritmo sopra descritto, si nota che in alcune immagini del nostro dataset la scelta presa dalla rete neurale deriva effettivamente da un analisi dei polmoni, in altre, invece, la scelta viene presa osservando delle sezioni “sbagliate” dell’immagine (angoli, braccia o altro), questo significa che la rete, in alcuni casi, ha imparato a classificare le immagini in base a dettagli non significativi, in gergo tecnico, ha overfittato il dataset.
Abbiamo quindi scelto di migliorare il dataset a disposizione andando ad estrarre solamente i polmoni dall’immagine originale. Per eseguire questo task abbiamo sfruttato una soluzione proposta su questo GitHub che propone una U-Net per segmentare i polmoni all’interno di immagini Rx del torace. La U-Net è una rete convoluzionale sviluppata dall’università di Friburgo per la segmentazione di immagini biomediche.
La U-Net è stata quindi utilizzata per andare a rimuovere dalle RX del torace le parti di immagine che non portavano informazioni aggiuntive. Sono quindi state analizzate tutte le immagini del dataset a disposizione e per ognuna è stata estratta la maschera predetta dalla U-Net. Le maschere estratte da tutte le immagini a disposizione sono state quindi sovrapposte per andare a creare una maschera media che fosse in grado di contenere le informazioni dei polmoni per tutte le immagini.
A questo punto, abbiamo riutilizzato le immagini presenti all’interno del dataset utilizzato nel primo articolo , andando a sbilanciare leggermente il dataset aggiungendo qualche immagine in più di pazienti sani. Il dataset finale è così composto:
57 immagini di raggi X al torace di pazienti Covid-19
80 immagini di raggi X al torace di pazienti sani (recuperate da Kaggle)
È stata quindi allenata una rete convoluzionale, la stessa usata nel primo articolo, per poter classificare le lastre a disposizione. Il risultato ottenuto è mostrato nella matrice di confusione riportata sotto:
Il risultato è in linea con quanto ottenuto durante il primo articolo, con la principale differenza che in questo caso la rete sta effettivamente analizzando i polmoni per prendere la decisione.
I prossimi step di un lavoro di questo tipo richiederebbero:
Validare il risultato effettuando una cross-validazione sulle immagini a disposizione.
Testare la robustezza
Cosa succede quando mostro una lastra di una polmonite che non è causata da Covid-19?
Viene classificata come Covid-19?
Ampliare e diversificare il dataset
Aggiungere molte più immagini di pazienti malati di Covid-19 e di pazienti con altre malattie polmonari.
Analizzare le TAC, in quanto sono in grado di identificare in modo molto più accurato la presenza di polmonite da Covid-19. In questo articolo si mostra come la TAC sia in grado di riscontrare la presenza della malattia anche in pazienti asintomatici, addirittura un paio di settimane prima che la malattia faccia la sua comparsa.
Passare alla object detection: in questo modo sarebbe possibile mostrare al medico le aree più “opache” tramite dei riquadri per fornire un risultato più facilmente interpretabile.
Ci teniamo a sottolineare che anche questa soluzione è da considerarsi prototipale e ben lontana dall’essere un prodotto utilizzabile in ambito clinico.
Noi di AISent siamo al lavoro su diversi fronti per cercare di portare il nostro contributo. Speriamo che questa emergenza si risolva nel migliore dei modi e nel mentre rispettate le direttive del governo: restiamo a casa!
Michele Ermidoro