16/03/2020

AI vs Covid-19

In questo periodo complicato noi di AISent ci siamo chiesti come, le nostre competenze, potrebbero aiutare ad affrontare l’emergenza legata al Covid-19. Esistono numerosi modi in cui l’intelligenza artificiale può aiutare in situazioni di questo tipo. Nel mondo sono state già attivate numerose iniziative volte a diagnosticare con efficacia o ad evitare la diffusione del virus (qui un articolo interessante https://www.technologyreview.com/s/615342/how-baidu-is-bringing-ai-to-the-fight-against-coronavirus/).

La Casa Bianca questa notte ha rilasciato su Kaggle, nota piattaforma di data science, un grande insieme di paper scientifici (circa 29.000 articoli) lanciando la sfida a chi riesce ad analizzarne il testo dando nuovi spunti per la ricerca.

Anche l’Unione Europea si è mossa, creando un bando ad hoc dedicato allo sviluppo di soluzioni innovative per combattere il diffondersi del virus (https://ec.europa.eu/info/news/startups-and-smes-innovative-solutions-welcome-2020-mar-13_en).

Prendendo spunto dal lavoro svolto da Alibaba [1] in Cina e da Adrian di PyImageSearch [2], abbiamo provato a creare un algoritmo di Machine Vision che fosse in grado di analizzare immagini provenienti da raggi X toraciche stimando la presenza o meno di polmonite dovuta da Covid-19. Ci perdonino i medici o gli specialisti se utilizziamo dei termini non corretti.

Prima di tutto, una premessa: l’analisi fatta in questo articolo è puramente dimostrativa e non intende avere una valenza scientifica. Ha come obiettivo quello di mostrare come possiamo usare l’intelligenza artificiale per qualcosa di utile (#AI4GOOD).

Per affrontare questo problema dobbiamo per prima cosa trovare un dataset attendibile. Per far ciò ci siamo affidati a internet e in particolar modo a GitHub. Abbiamo trovato Joseph Cohen un postdoc dell’università di Montreal, https://josephpcohen.com/w/ che ha lanciato un progetto per creare un “open database of COVID-19 cases with chest X-ray or CT images.”

Il dataset mette a disposizione numerose immagini di raggi X o CT di pazienti con diverse patologie, tra cui anche SARS e MERS. Son state tenute solamente le immagini relative al Covid-19 ed in più si è scelto di utilizzare i raggi-X in posizione antero-posteriore. Questa scelta non è stata presa seguendo un principio medico ma semplicemente perché in questo modo è possibile ampliare i dati a disposizione attraverso un altro dataset pubblico (https://www.kaggle.com/paultimothymooney/chest-xray-pneumonia) da cui prelevare immagini di raggi-X senza patologie. In questo caso i raggi sono fatti in posizione antero-posteriore.

Abbiamo quindi avuto modo di creare un dataset composto da:

  • 56 immagini di lastre positive a Covid-19 

  • 56 immagini di lastre “sane” 

Figura 1. Sulla sinistra RX di un paziente di 67 anni con Covid-19 diagnosticato, sulla destra una RX di un paziente sano
Figura 1. Sulla sinistra RX di un paziente di 67 anni con Covid-19 diagnosticato, sulla destra una RX di un paziente sano

A questo punto abbiamo creato un semplice algoritmo di computer vision utilizzando Tensorflow e Keras.

Siccome l’articolo non ha come obbiettivo quello di mostrare la realizzazione di questo tipo di soluzioni (che ripetiamo è puramente dimostrativo) non ci addentreremo nei dettagli. Stiamo pulendo il codice per poi condividerlo, se qualcuno fosse interessato nel mentre, ci scriva pure.

Il problema in questione è detto classificazione, dobbiamo quindi classificare la classe a cui appartiene l’immagine che il computer sta osservando (altre info qui).

Per risolvere questo problema di classificazione abbiamo utilizzato una MobileNetV1 (https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md), ossia una rete che è stata studiata per essere utilizzata su dispositivi mobile, quindi con un carico computazionale relativamente basso. Alla struttura di questa rete convoluzionale abbiamo aggiunto un layer fully connected per poter effettuare transfer learning e non dover allenare da zero tutta la rete.

La rete convoluzionale ha imparato molto bene a svolgere il proprio compito andando a classificare correttamente 22 delle 23 immagini usate come test (si allena su un dataset parziale e poi si testano le performance su dati mai visti). Qui sotto riportata la matrice di confusione ottenuta:

Figura 2. Matrice di confusione sui dati di test. Si evidenzia come l'unico errore commesso sta nel classificare un non-malato come malato di Covid-19.
Figura 2. Matrice di confusione sui dati di test. Si evidenzia come l'unico errore commesso sta nel classificare un non-malato come malato di Covid-19.

Questo risultato, garantisce si di avere una precisione del 100% [3] sulla detection dei malati di Covid-19 ma porta anche ad avere un falso positivo, un problema non da poco.

La rete, nonostante i pochi dati a disposizione, sembra non overfittare, come visibile nel seguente grafico in cui è visualizzato l’andamento delle metriche di training.

Figura 3. Andamento dei parametri di training.
Figura 3. Andamento dei parametri di training.

La rete, quindi, ha imparato a classificare tra Covid e sani? Sembrerebbe di sì, bisognerebbe però approfondire la conoscenza del dataset per capire cosa porta la rete a classificare un’immagine come sana e una come Covid. Infatti, potrebbe succedere che la rete identifichi dei pattern che non sono legati alla presenza di Covid-19.

Questa semplice analisi è volta solamente a mostrare come un approccio basato sulla computer vision potrebbe migliorare l’efficienza dei medici, aiutandoli nella diagnosi.

Portare avanti un lavoro di ampliamento del dataset e l’analisi di ulteriori immagini come ad esempio le tomografie, potrebbe portare ad avere strumenti molto più versatili e performanti a supporto dei medici.

Figura 4. Alcune immagini esempio prese dal Dataset. La percentuale indica la probabilità stimata dal nostro modello che l’immagine appartenga ad una determinata classe.
Figura 4. Alcune immagini esempio prese dal Dataset. La percentuale indica la probabilità stimata dal nostro modello che l’immagine appartenga ad una determinata classe.

Nel mentre, l’unica cosa veramente utile che possiamo fare, è rimanere a casa!

Michele Ermidoro

[1] https://www.ilsole24ore.com/art/coronavirus-l-intelligenza-artificiale-alibaba-identifica-20-secondi-una-tac-ADacdTB

[2] https://www.pyimagesearch.com/2020/03/16/detecting-covid-19-in-x-ray-images-with-keras-tensorflow-and-deep-learning/

[3] https://en.wikipedia.org/wiki/Precision_and_recall