Tuskas

18 de febrero, 2021

¿Es posible automatizar el diagnóstico de cáncer uterino con inteligencia artificial?

Esta pregunta dio origen a TUSKAS (Transfer useful secure knowledge at your services… 😂), un servicio para apoyar y automatizar el diagnóstico de cáncer uterino.

TUSKAS fue el proyecto final de la carrera de “Data Science” en Desafio Latam que realicé junto a mis compañeros Pancho, Rafa, Javier y Cris.

En este post te contaré cómo abordamos el proyecto, y los desafíos con los con los que nos encontramos.

Contexto

Me encantaría decirte que la idea se le ocurrió a uno de nosotros mágicamente mientras dormía, como varias historias de emprendimiento.

La verdad es más simple: teníamos que aplicar lo aprendido durante la carrera en un proyecto. Ya sabíamos que teníamos que usar inteligencia artificial para resolver una problemática. Así definimos muestro martillo.

Llegar al clavo fue parecido: queríamos trabajar con reconocimiento de imágenes. Si bien no es algo que se ve en el curso, nos interesó ir más allá.

Rafa nos había comentado sobre su frustración de nunca haber hecho algo con anatomía patológica… Así que nos pusimos a investigar sobre aplicaciones de IA en el ámbito de salud, y llegamos a algunos papers donde utilizan algoritmos para la detección de cáncer cervicouterino (CCU). Así encontramos el clavo.

Fue un match perfecto. Rafa y Javier llevan años trabajando en salud, Pancho y yo estábamos motivados por los algoritmos y Cris con la optimización de procesos que una solución con IA podía lograr.

Todo el grupo de TUSKAS

Foto del 2019, pre pandemia

El problema

Ya en conocimiento de un problema que podemos atacar con lo aprendido en el curso, nos pusimos de cabeza a investigar más sobre este tipo de cáncer. Javier, el hombre de los contactos, dio con Francisca Correa, doctora del instituto del Cáncer, quién nos orientó en la elaboración del proyecto.

Así llegamos a algunas estadísticas alarmantes (Minsal, 2005), en Chile el cáncer cervicouterino:

  • es la segunda causa de muerte en la mujer entre 20 y 44 años.
  • es la principal causa de muerte por cáncer en la mujer entre 20 y 44 años.
  • es la quinta causa en el grupo entre 45 y 64 años de edad.

La estrategia central para disminuir la mortalidad de este cáncer es la detección temprana mediante la toma de Papanicolau (PAP).

El PAP no es un examen que te haces una vez y te olvidas. Es un examen que las mujeres tienen que hacerse cada 3 años en el rango etario de 25 y 64 años.

Tamizaje de Cáncer Cervicouterino con PAP

Pese a los esfuerzos para aumentar la cobertura del tamizaje, la mortalidad sigue siendo alta. Nosotros creemos que esto se debe a dos factores: la escasez de especialistas y errores de diagnósticos.

Estoy convencido de que un asistente que ayude al especialista a analizar una muestra de PAP disminuirá la mortalidad del CCU, ya que lo ayudará a hacer su trabajo de forma más eficiente y además podría brindarle una segunda opinión, disminuyendo posible errores de diagnósticos.

Y no solo eso, es económicamente viable. En salud pública, los servicios clínicos de anatomía patológica no logran cubrir la demanda de estudios, y recurren a la compra al extrasistema, debido a la falta de recurso humano, insumos o equipamiento.

La solución: TUSKITA

Debido a todo lo anterior, creamos a TUSKITA, un algoritmo que permite detectar anormalidades en células de un examen PAP, el cual fue construido con Machine Learning, específicamente usando Deep Learning.

Si estos conceptos son chino para ti, puedes ver este post que tiene definiciones de IA, Machine Learning, entre otros.

¿Cómo creamos TUSKITA?

1) Definición del problema

Lo primero fue definir bien el problema: dada una imagen de una célula de un examen PAP, clasificarla como NORMAL o ANORMAL.

O en otras palabras, responder a la pregunta “¿esta célula es anormal?”

Vector Objetivo

2) Obtención de datos y preprocesamiento

Machine Learning es decirle al computador “toma estas imágenes, estas son anormales, estas otras son normales. Por favor, aprende a identificarlas”. Así que sin los datos (imágenes de células clasificadas) estábamos fritos.

Lo bueno es que ya sabíamos de la existencia de datos, pues hay papers que abordan el mismo problema (ejemplo: DeepPap, Cervical cytology intelligent diagnosis).

Usamos el dataset que utilizan en la literatura: Smear2005 del Herlev University Hospital.

Imagen de células del dataset Smear2005

El dataset consiste en 917 imágenes, donde 242 son células normales (~26%) y 675 son anormales (~74%). Esto implica que las categorías están “desbalanceadas”, pues la “anormal” es casi 3 veces la “normal”.

Aquí hay dos problemas:

  1. Hay pocas células normales, por lo que el clasificador podría estar más sesgado hacia las anormales (problema de desbalanceo de clases).
  2. Muy pocos ejemplos para que el clasificador aprenda a distinguir entre normales y anormales.

El primer problema lo abordamos mediante distintas técnicas (ej. “Data augmentation”, “Data Stratification”). Finalmente nos quedamos con la sugerencia que nos dio nuestra profesora Andrea Villaroel, que fue balancear los datos de entrenamiento. Así que alimentamos a Tuskita con 50% anormales y 50% normales, elegidas de forma aleatoria.

Datos de entrenamiento

El segundo problema lo abordamos de igual forma que lo hicieron en DeepPap, con una técnica llamada “Transfer Learning”. En palabras simples, le enseñamos a nuestro clasificador a identificar distintos objetos de conocimiento general en una imagen (utilizando un dataset GIGANTE llamado ImageNet), y sobre el conocimiento adquirido, le enseñamos a clasificar las células.

3) El algoritmo

Al igual que en DeepPap, utilizamos el modelo VGG16 para desarrollar nuestro clasificador. Probamos otros pero este fue el que mejor nos funcionó.

Aquí nos dimos cuenta que sabiendo las bases, es posible comenzar a aplicar otros algoritmos que ya están hechos y adaptarlos a tus necesidades.

A modo de ejemplo, aquí utilizan el mismo modelo para clasificar perros 🐶 y gatos 🐱. La verdad que adaptar eso a clasificación de células no es muy distinto 🙊.

Para aprender las bases de Deep Learning, vi los primeros videos de la especialización de Deep Learning en coursera (usé los 7 días gratuitos).

Resultados de TUSKITA

Resultados

El peor error que podemos cometer es indicar que una célula anormal es normal. Por ende, la métrica más relevante es el recall sobre las anormales (en la imagen aparece como cancer), el cual es 89%. Esto quiere decir que somos capaces de detectar el 89% de todas las células anormales. Not bad.

Si bien estamos lejos del estado del arte (98%), los resultados son esperanzadores y creo que son lo suficientemente buenos para construir un asistente virtual.

Usos y Aplicaciones de TUSKITA

Una parte del problema es desarrollar el algoritmo, pero ¿cómo lo utilizamos en la práctica?

Por eso creamos TUSKAS, un servicio accesible mediante Internet al cual le envías una foto de una célula y te dice si es normal o anormal:

Foto de utilización de la API

De esta forma, cualquier dispositivo conectado a Internet, podría enviar una imagen para ser analizada por TUSKITA.

Para los más computines 🤓, esto significa que creamos una API. Cuando tu modelo está en python, puedes crear una API utilizando Flask e importarlo fácilmente.

Con TUSKAS, creé una mini aplicación llamada Tu segunda opinión donde subes una imagen y te dice si la célula es normal o anormal. Puedes ver una demostración en el siguiente video:

Estado actual del proyecto y desafíos a futuro

La verdad es que ninguno de los 5 siguió impulsando el proyecto 😅, por lo que el estado actual es de prototipo. Eso sí, todavía tenemos el código fuente, listo para continuar 🚀

El desafío a continuación es mejorar TUSKAS para que sea capaz de recibir un PAP completo en vez de una imagen de célula. Para esto, tenemos que crear un nuevo clasificador (¿TUSKOTA?) que analice un PAP y localice cada células. Luego, usando Tuskita sobre cada célula localizada, podremos saber el estado general del PAP.

Otro desafío no menor es seguir mejorando los resultados del algoritmo, ya que sabemos que hay espacio para hacerlo.

Y la pregunta más importante: ¿tendrá cabida una solución así en el estado actual de tecnología en Chile?

Espero que sí.



Hecho por Codeness con ❤️
© 2024 Codeness