Aprendizaje automático en medicina: Detector de cáncer histopatológico

Identificación de tumores con aprendizaje por transferencia y CNN

Una de las muchas cosas importantes sobre la investigación de la IA es que, debido a su naturaleza intrínseca general, su espectro de posibles aplicaciones es muy amplio. Una de las posibles direcciones en las que podemos impulsar la investigación de la IA es la Medicina.

En el artículo de hoy, vamos a aprovechar nuestras habilidades de Aprendizaje de Máquina para construir un modelo que pueda ayudar a los médicos a encontrar las células cancerosas y finalmente salvar vidas humanas. . Para crear un sistema que pueda identificar tejidos tumorales en las imágenes histopatológicas, tendremos que explorar Transfer Learning y Redes neuronales convolucionales .

Detector de cáncer histopatológico El proyecto es parte de la competencia Kaggle en la que los mejores científicos de datos de todo el mundo compiten para obtener el mejor clasificador. Aunque en este proyecto nos enfocaremos en una tarea muy específica, obtendrá conocimientos que se pueden aplicar en una amplia variedad de problemas de clasificación de imágenes.

Muestra positiva (tumor)
Muestra negativa (sin tumor)

Cáncer metastásico

Veamos algunas muestras para comprender mejor el problema subyacente.

Muestras sin etiquetar

¿Puede identificar qué muestras contienen células tumorales?

Bueno, yo tampoco.

Esta tarea es definitivamente más difícil que problemas con juguetes como identificación de perros contra gatos y, a menos que no sea un médico, probablemente no podrá clasificar las imágenes.

esperamos que nuestro clasificador pueda aprender patrones correctos para obtener respuestas válidas como las siguientes.

Muestras etiquetadas (1 – tumor, 0 – no tumor)

La metástasis es la propagación de las células cancerosas a nuevas áreas del cuerpo (a menudo a través del sistema linfático o del torrente sanguíneo). Un cáncer metastásico, o tumor metastásico, es uno que se diseminó desde el sitio primario de origen (donde comenzó) a diferentes áreas del cuerpo.

Los tumores formados a partir de células que se diseminaron se denominan tumores secundarios. El cáncer puede haberse diseminado a áreas cercanas al sitio primario (metástasis regional) o a partes del cuerpo que están más lejos (metástasis a distancia).

Según Libre Pathology las metástasis de los ganglios linfáticos pueden tener las siguientes características:

Si bien es posible obtener un rendimiento de clasificación decente sin conocimiento del dominio, siempre es valioso tener una comprensión básica del tema.

Sin embargo, si decidimos esforzarnos por lograr un rendimiento de vanguardia, deberíamos considerar utilizar el conocimiento de dominio anterior y aplicar la heurística para crear un modelo que se adapte bien al problema que intentamos resolver.

Independientemente del escenario, decidimos elegir, siempre es una buena idea comenzar con la solución general y luego mejorarla iterativamente. Con eso dicho, avancemos a nuestro Detector de cáncer histopatológico !

Detector de cáncer histopatológico

Puede encontrar la versión básica del detector directamente en Kaggle

Detector de cáncer histopatológico ( LB 0.958) | Kaggle

o, como es habitual, en GitHub.

gsurma / histopathologic_cancer_detector

Data [19659028pfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpffgfffffgffgfggfgfffffgfffgfffpffpffgfpffbffffpffbfffffpffbfffffbfbffffffffffffffffffffffffffbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf:epng

/ href

En el código anterior, estamos creando dos directorios ../ training y ../ validation donde cada uno tiene un 0 y 1 subcarpetas para las muestras correspondientes. Es útil para ImageDataGenerators que usaremos más adelante.

 El conjunto de capacitación contiene 153 000 muestras pertenecientes a dos clases.
 El conjunto de validación contiene 17 000 muestras pertenecientes a dos clases.

muestre un par de muestras positivas para verificar si nuestros datos están correctamente cargados

y un par de negativos.

Nuestros datos se ven bien, podemos continuar con el núcleo del proyecto.

Transfer Learning

En este proyecto, vamos a aprovechar Transfer Learning pero para entenderlo, es necesario estar familiarizado con los conceptos básicos de Convolutional Neural Networks . No dude en consultar mi artículo anterior que trata brevemente este tema .

Veamos el siguiente diagrama que ilustra los propósitos de las capas específicas en la CNN.

Como podemos ver arriba A partir de la izquierda, estamos aprendiendo las funciones de bajo nivel y cuanto más vamos a la derecha, más se aprenden las cosas.

La idea detrás de Transfer Learning es reutilizar las capas que pueden extraiga características generales como bordes o formas.

“No intente ser un héroe” ~ Andrej Karpathy

Así que, en lugar de entrenar una red desde cero, usemos una ya entrenada y simplemente afinamos Con nuestros datos. Hay un par de CNN de vanguardia como Xception o NasNet entrenadas en gran cantidad de datos ( ImageNet ) por lo que podemos acelere nuestro proceso de entrenamiento y comience con pesas ya entrenadas.

Hay un par de enfoques sobre cómo hacerlo, pero es una buena idea atenerse a la siguiente regla empírica.

Cuanto más diferente sea el nuevo conjunto de datos de el original utilizado para la red pre-entrenada, más pesado deberíamos afectar nuestro modelo.

Entonces, si tenemos una red pre-entrenada en razas de perros y nuestro conjunto de datos simplemente lo amplía con una nueva raza, no tenemos Para volver a entrenar toda la red. Podemos congelar los extractores de características de bajo nivel y concentrarnos solo en los clasificadores de nivel superior.

Pero, ¿y si nuestro conjunto de datos es muy diferente del conjunto de datos original (ImageNet)?

De hecho, nuestro histopatológico el conjunto de datos de cáncer parece encajar en esta categoría.

En lugar de congelar capas específicas y ajustar los clasificadores de nivel superior, vamos a volver a entrenar a toda la red con nuestro conjunto de datos.

ser tan rápido como ajustar solo los clasificadores principales, todavía vamos a aprovechar el aprendizaje por transferencia debido a los pesos preinicializados y la arquitectura CNN bien probada.

En nuestro Detector de cáncer histopatológico vamos a utilizar dos modelos pre-entrenados, es decir Xception y NasNet .

Modelo

Esta es la arquitectura de nuestro modelo con Xception concatenado y ] NasNet arquitecturas una al lado de la otra [19659053] y así es como se ve en el código.

 

Tenga en cuenta que el modelo anterior es un buen punto de partida pero para alcanzar una puntuación máxima Sin duda, debería ser refinado, así que no dude en jugar con la arquitectura y sus parámetros.

Aumento de datos

Si bien nuestro conjunto de datos de 170 000 imágenes etiquetadas puede parecer suficiente a primera vista, para esforzarse para un puntaje máximo definitivamente deberíamos intentar aumentarla. Una forma de hacerlo artificialmente es usar aumento de datos .

El aumento de datos es un concepto de modificación de la imagen original para que se vea diferente pero aún tenga su contenido original. Para hacerlo, por ejemplo, podemos ampliar, cortar, rotar y voltear imágenes.

Observe el siguiente ejemplo de cómo podemos ‘crear’ seis muestras de una sola imagen.

Código de aumento de datos utilizado en el Detector de cáncer histopatológico el proyecto tiene el siguiente aspecto.

 

Entrenamiento

Finalmente, podemos continuar con la fase de entrenamiento. Vamos a entrenar durante 12 épocas y monitorearemos las métricas de precisión y pérdida después de cada época.

 

Además de las parcelas de capacitación y validación, también verifiquemos Característica de funcionamiento del receptor Curva que es una métrica de evaluación de Kaggle.

Nuestra precisión de validación máxima alcanza ~ 0.96 . Significa que podemos clasificar correctamente ~ 96% de las muestras y decir si una imagen dada contiene un tumor o no .

¿Qué sigue?

Después de leer este artículo , debe ser consciente de lo poderosas que pueden ser las soluciones de aprendizaje automático para resolver problemas de la vida real. Piénselo de esta manera, hemos desarrollado un impresionante identificador de tumor en solo unas 300 líneas de código Python. Lo aliento a que profundice en esas áreas porque, además de los beneficios obvios de aprender cosas nuevas y fascinantes, también podemos abordar problemas cruciales de la vida real y marcar la diferencia.

No se olvide de consultar la página de github del proyecto.

gsurma / histopathologic_cancer_detector

¿Preguntas? ¿Comentarios? Siéntase libre de dejar sus comentarios en la sección de comentarios o comuníquese conmigo directamente al https://gsurma.github.io .

Dejá un comentario