noviembre 3, 2018 6:00 pm

Jesús

?? Read in English

En las últimas semanas he estado trabajando en construir mi propia solución para el ISIC Challenge 2017. Una de las metas de este desafío es diseñar un algoritmo para diagnosticar, a partir de imágenes de lesiones en la piel, una de tres enfermedades diferentes: melanoma, queratosis seborreica o nevo.

El desafío en sí mismo es bastante interesante, por lo que te invito a leer más detalles en su página oficial.

Entre los múltiples papers derivados de las soluciones que los diferentes equipos confeccionaron, uno de los que más me llamó la atención se titula “RECOD Titans at ISIC Challenge 2017”. En los siguientes párrafos encontraremos más detalles de su solución.

El equipo ha trabajado desde 2014 clasificando melanoma usando deep learning con transfer learning. Cabe mencionar que dentro del dominio de las aplicaciones médicas, es fundamental utilizar transfer learning debido a la necesidad de conjuntos de datos muy grandes que, simplemente, no se encuentran disponibles o, al menos, no con la suficiente facilidad. Así, apalancarse en los parámetros aprendidos por redes neuronales complejas en otros problemas (como ImageNet) resulta crucial.

Segmentación de lesiones

Los autores trabajaron tanto en la sección orientada a segmentar qué partes de las imágenes contenían lesiones como en la clasificación de las mismas. Para esta primera parte decidieron desarrollar una red neuronal basada en la U-net de Ronneberger, cuyo propósito es segmentar efectivamente imágenes biomédicas. De manera más específica, utilizaron una implementación pública basada en U-net como baseline.

En lo concerniente a los datos, sólo usaron los oficiales del ISIC Challenge, un corpus de 2000 imágenes dermatoscópicas. Una de las razones por las cuales optaron por no usar data externa es que la segmentación es una actividad muy subjetiva, por lo que introducir imágenes etiquetadas por otras personas podría conducir a peores resultados.

A nivel técnico, utilizaron Keras con un backend en Theano, y el hardware usado fue una GPU NVIDIA GeForce GTX 1070.

Para contrarrestar el bajo volumen de datos, implementaron el siguiente esquema de data augmentation (previo ajuste de tamaño de 256×256 a 128×128):

  • Rotaciones horizontales y verticales hasta del 10%.
  • Zoom hasta del 20%.
  • Rotaciones hasta de 270°.

Sus primeros intentos consistieron en un modelo basado en la red VGG. La primera parte del modelo consistió en las capas de la red VGG-16 hasta la última capa convolucional, exceptuando la última capa max-pooling y las capas fully-connected. Las capas retenidas fueron inicializadas con los pesos de VGG-16 pre-entrenados en ImageNet. El modelo se completó siguiendo la forma en U, con capas convolucionales y de upsampling, pero sin utilizar capas fully-connected. Adicionalmente, añadieron dropout con los mismos parámetros después de cada una de las cinco capas descritas con anterioridad.

El entrenamiento empezó por congelar las capas originales de VGG-16, actualizando los pesos de las otras capas por 100 epochs, para luego descongelar las capas y actualizar todos los pesos por otras 100 epochs. Utilizaron el coeficiente Dice como loss function. Éste primer modelo alcanzó un score de validación de 0.753. Sin embargo, sus mejores resultados los obtuvieron basados en el trabajo de Codella, aplicando los siguientes cambios:

  • Usar el coeficiente Dice como loss function.
  • Utilizar Adam como optimizador.
  • Usar activaciones ReLU en todas partes, salvo en la última capa, donde se optó por sigmoid.
  • Las máscaras de segmentación fueron reescaladas simplemente dividiendo entre 255.
  • Se restó el valor medio RGB de ImageNet de los valores RGB de las imágenes de entrada.

Su solución final usó cuatro modelos: Dos de ellos entrenados con las 2000 imágenes, sin conjunto de validación, durante 250 y 500 epochs, respectivamente; y los otros dos entrenados y validados con 1600 y 400 imágenes, respectivamente, por 220 epochs ambos. Estos cuatro modelos individualmente alcanzaron un score de entre 0.780 y 0.783, y al promediar la predicción de todos en un metamodelo, el score aumenta a 0.793.

Finalmente, entre las ideas que parecían buenas en un principio, pero que no resultaron en una mejora significativa, están:

  • Añadir tres canales HSV a los tres canales RGB de las imágenes de entrada.
  • Otras loss functions como el índice Jaccard, MSE y binary cross entropy.
  • Normalizar las entradas utilizando la media de cada muestra, o utilizando la media y desviación estándar de toda la data de entrenamiento.
  • Entrenar con imágenes adicionales en el ISIC Archive por 500 epochs.

Esto es todo por hoy. En la segunda parte de este post estudiaremos cómo el equipo RECOD Titans afrontó el desafío de clasificar las imágenes entre una de las tres categorías mencionadas al principio de este artículo.

Sobre el Autor

Jesús Martínez es el creador de DataSmarts, un lugar para los apasionados por computer vision y machine learning. Cuando no se encuentra bloggeando, jugando con algún algoritmo o trabajando en un proyecto (muy) cool, disfruta escuchar a The Beatles, leer o viajar por carretera.