?? 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 256x256 a 128x128):- Rotaciones horizontales y verticales hasta del 10%.
- Zoom hasta del 20%.
- Rotaciones hasta de 270°.
- 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.
- 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.