scieee AI-readable full text Open interactive document viewer

Aplicación de técnicas de aprendizaje profundo (deep learning) a clasificación de imágenes histológicas

Suárez Lamadrid, Alejandro

Abstract

El cáncer es una enfermedad diagnosticada mediante el análisis de muestras histológicas. Una de las características que tienen en cuenta los especialistas y además, indicador temprano de la enfermedad, es el grado de proliferación. Este parámetro es calculado mediante el conteo de mitosis en el tejido a analizar. Este proceso se realiza de manera manual y resulta subjetivo, dando lugar a discrepancias entre patólogos. El desarrollo en los últimos años de técnicas de adquisición, procesado y análisis de imágenes ha permitido numerosos avances en medicina, ayudando a los expertos en su diagnóstico. Este trabajo presenta un método de contaje automático de estas mitosis mediante técnicas de Deep Learning. A partir de una base de datos de imágenes histológicas, se ha entrenado una Red Neuronal Convolucional que posteriormente se ha implementado mediante software, permitiendo analizar imágenes para encontrar figuras mitóticas.

Full text

Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Aplicación de técnicas de aprendizaje profundo (deep learning) a clasificación de imágenes histológicas Autor: Alejandro Suárez Lamadrid Tutoras: Begoña Acha Piñero y Carmen Serrano Gotarredona Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Aplicación de técnicas de aprendizaje profundo (deep learning) a clasificación de imágenes histológicas Autor: Alejandro Suárez Lamadrid Tutoras: Begoña Acha Piñero y Carmen Serrano Gotarredona Catedráticas de Universidad Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 Trabajo Fin de Grado: Aplicación de técnicas de aprendizaje profundo (deep learning) a clasificación de imágenes histológicas Autor: Alejandro Suárez Lamadrid Tutoras: Begoña Acha Piñero y Carmen Serrano Gotarredona El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha: Agradecimientos Es te trabajo supone el fin de la que considero que es una importante etapa de mi vida. Durante mis años de formación en la Escuela de Ingeniería no solo he adquirido numerosos conocimientos, sino que también he crecido como persona. Agradezco por tanto a todo el profesorado su labor docente así como a aquellos compañeros con los que he compartido tantas horas de esfuerzo y también diversión. Agradezco a mis tutoras Begoña y Carmen el haberme hecho descubrir un campo tan interesante como el de la imagen médica e introducirme a la temática de este trabajo, el cual he disfrutado realizando. Por último, doy las gracias a mis seres queridos su apoyo y ayuda durante estos años, sin los cuales habría sido mucho más difícil pasar por ellos. Muchas gracias a todos. Alejandro Suárez Lamadrid Sevilla, 2018 I Resumen El cáncer es una enfermedad diagnosticada mediante el análisis de muestras histológicas. Una de las características que tienen en cuenta los especialistas y además, indicador temprano de la enfermedad, es el grado de proliferación. Este parámetro es calculado mediante el conteo de mitosis en el tejido a analizar. Este proceso se realiza de manera manual y resulta subjetivo, dando lugar a discrepancias entre patólogos. El desarrollo en los últimos años de técnicas de adquisición, procesado y análisis de imágenes ha permitido numerosos avances en medicina, ayudando a los expertos en su diagnóstico. Este trabajo presenta un método de contaje automático de estas mitosis mediante técnicas de Deep Learning. A partir de una base de datos de imágenes histológicas, se ha entrenado una Red Neuronal Convolucional que posteriormente se ha implementado mediante software, permitiendo analizar imágenes para encontrar figuras mitóticas. III 2Capítulo 1. Introducción recelo que la aplicación de ingeniería a medicina sigue produciendo en algunos expertos [2]. 1.2 Tecnología de partida En los últimos años se han popularizado conceptos como Machine Learning yDeep Learning dentro de las tecnologías de Inteligencia Artificial. Aunque es conocida desde hace décadas, no ha sido hasta hace pocos años que se ha incrementado su uso debido al importante avance que ha sufrido y a la inversión por parte de poderosas corporaciones tecnológicas como Google o Facebook, que han desarrollado las librerías de aprendizaje automático TensorFlow y PyTorch respectivamente. El objetivo de estas bibliotecas es encontrar y descifrar patrones y correlaciones en bases de datos de partida, emulando así el aprendizaje y razonamiento humanos. Otra de las razones que ha impulsado esta tecnología es la superación de las restricciones de hardware que sufría este área de las ciencias de la computación. El núcleo de funcionamiento es la unidad de procesamiento de gráficos, capaz de realizar una enorme cantidad de operaciones numéricas por segundo. Los avances en la última década en tecnología integrada han reducido los tamaños de los chips y aumentando su capacidad de computación. Además, otras áreas de la computación que se apoyan en el hardware gráfico como las criptomonedas y su reciente popularización, así como de otras no tan relacionadas pero cuyo uso es esencial como en animación o desarrollo de videojuegos, han impulsado la aparición de numerosos dispositivos de la mano de fabricantes como NVIDIA y AMD. Este uso tan generalizado conlleva una reducción de precios, permitiendo a investigadores y al usuario medio por igual aprender y desarrollar aplicaciones de inteligencia artificial. Por otro lado, la capacidad de unión de este tipo de tecnología a otros como el tratamiento y análisis de imagen y sonido ha abierto un amplio abanico de posibilidades, como el control de la producción en industria, automóviles con conducción autónoma, mejora en sistemas de seguridad por cámaras y numerosas aplicaciones en medicina [3]. Es en este campo donde se centrará el trabajo, donde ya existen proyectos orientados a predecir el riesgo de sufrir una enfermedad y definir mejores tratamientos para los pacientes en base a la recopilación y análisis de datos, ayudando así en sus tareas a los médicos. 1.3 Objetivo Este trabajo propone una herramienta de este tipo basada en redes neuronales convolucionales (CNN) para la detección y conteo automático de figuras mitóticas, con el objetivo de agilizar el tedioso proceso, aportando además precisión en el cálculo, todo con el fin de resultar de utilidad para los especialistas médicos. 2 Estado del arte En relación al problema expuesto en este trabajo, existen en el estado del arte algunas aproximaciones basadas en el procesamiento y análisis de imagen. Este proceso consta de métodos de preprocesamiento, extracción de características típicas como color, formas y texturas para así poder clasificar elementos. Aunque estos métodos tradicionales funcionan bien en entornos controlados, en el caso de la imagen médica producen resultados con baja precisión debido a su complejidad. Pese a esto, se ha realizado un repaso de los trabajos existentes en este área, ya que determinados aspectos del procesamiento podrían ser de utilidad para este trabajo. En 2013, Irshad H. presentó un método automático para la detección de mitosis basado en la extracción de características morfológicas usando diferentes canales y espacios de color en las imágenes a analizar. Incluye métodos como filtros espaciales, umbralización, morfología y detección de bordes. La aplicación final era capaz de extraer 143 características diferentes que eran utilizadas para un clasificador de árbol de decisión. El método fue evaluado en el concurso International Conference of Pattern Recognition de 2012 consiguiendo una precisión de entre 56% y 70% con diferentes bases de datos [4]. En 2012 también fueron presentados métodos para la detección y conteo de figuras mitóticas en el Assessment of Mitosis Detection Algorithms (AMIDA). La base de datos de partida correspondía a 11 pacientes de cáncer de mama y el mejor algoritmo tuvo un error comparable al de diferentes expertos patólogos. Los métodos se basaban en el estudio de las imágenes de partida en un espacio de color HED (Hemoglobina, Eosina, Diaminobencidina) [5]. La utilidad de hacer uso de redes neuronales para este problema se hizo evidente pronto, y en 2013 Malon C.D. y Cossatto E. presentaron un método basado en redes neuronales convolucionales para la extracción de características. Estas características contemplaban color, textura e información de forma, demostrando el potencial que esta tecnología tenía mejorando los algoritmos clásicos. Alcanzó unos valores de F1 de 0.659 en una implementación en escáneres de color y de 0.589 en escáneres multiespectrales [6]. Por otro lado, Dan C. y Cires A.G. en 2013 presentan un algoritmo basado en Deep Learning capaz de analizar imágenes en espacio de color RGB. La red (DNN) fue entrenada con 50 imágenes en un espacio de color HED, alcanzando una precisión final del 88% [7]. Recientemente, en 2016 se inició el Tumor Proliferation Assessment Challenge, que concluyó con un elevado número de artículos y métodos propuestos durante el pasado año 2017 [2]. Dada la relación directa de este trabajo con dicho reto al usar la misma base de datos, se detallan a continuación algunos de los métodos que surgieron. Es destacable en primer lugar el trabajo de Salado García J.P. et al de la Universidad del País Vasco, diseñando una arquitectura de red basada en el modelo Lenet entrenada con el dateset del reto y que poseía una precisión clasificando del 98.6%. Para el entrenamiento se eligieron los candidatos con métodos clásicos a partir de la base de datos y dado el desequilibro entre clases (en el que posteriormente se profundizará en este trabajo) se aplicó un proceso de data augmentation. Los resultados de valor F1, el cual fue de 0.541 y de precisión son considerados acordes al estado actual de la materia [8]. En cuanto a este reto, los equipos que alcanzaron un mayor valor F1 fueron los de Lunit Inc. (Corea) con 0.652, el IBM Research 3 4Capítulo 2. Estado del arte (Zurich y Brasil) con 0.648 y ContextVision (Suecia) con 0.616. Dejando de lado este reto, resulta interesante el artículo de 2016 por parte de Albarquoni S. et al, donde se propone un modelo de red neuronal convolucional llamado AggNet cuyo objetivo es solucionar el problema de la falta de datos para entrenamiento en la detección de mitosis. Su idea se basa en una colaboración colectiva de usuarios capaces de proporcionar imágenes anotadas con las mitosis marcadas. Se discute si es correcto aplicar el concepto de crowdsourcing ya usado para imágenes del mundo real a la imagen médica, con la desventaja de que los usuarios son inexpertos y puede inducir a errores [9]. De este repaso por las recientes investigaciones en relación a la detección de mitosis se concluyen varios aspectos: •La detección de mitosis es un campo de investigación reciente con margen de mejora. • La aplicación de tecnologías basadas en redes neuronales convolucionales y Deep Learning es muy útil para este problema y mejora significativamente los resultados respecto a métodos clásicos. • En todos los artículos parece haber unos problemas y preocupaciones similares en relación a la falta de datos para los algoritmos de entrenamiento de redes neuronales. Las soluciones propuestas son variadas y producen resultados positivos. 3 Métodos de Deep Learning para el análisis de imagen De ep Learning es la tecnología central de este trabajo y la elegida por sus altas capacidades y número de posibilidades para el análisis de imagen. En este capítulo se expone toda la teoría necesaria para comprender en qué consiste y los métodos y conceptos que posteriormente serán introducidos. Consiste en un acercamiento al funcionamiento del sistema nervioso humano y de cómo aprendemos, a través de modelos computacionales de redes de neuronas las cuales se organizan en capas según la arquitectura y se especializan en encontrar características y patrones en los datos con los que son alimentadas. 3.1 Redes de neuronas Las redes de neuronas son el núcleo de funcionamiento de las tecnologías de Deep Learning. Consisten en un modelo basado en un conjunto de unidades básicas llamadas neuronas conectadas entre sí, como puede observarse en la figura 3.1. La interconexión depende del tipo de arquitectura o modelo del que se esté hablando y suelen estar organizadas en capas. Como se ha comentado, la unidad básica consiste en una neurona la cual se conecta con otras de modo que puede recibir información de varias neuronas y enviar información hacia otras. Sin embargo, el cometido de la neurona no es únicamente el intercambio de información, sino que también la procesa. Figura 3.1 Esquema de una red neuronal [10]. Para comprender mejor todo esto, es mejor centrarse en el tipo de red más simple, también comprendida como la unidad básica funcional de una red neuronal, llamada perceptrón, cuyo esquema queda plasmado en la figura 3.2. El perceptrón consiste en una neurona con varias entradas y una salida. A través de las entradas la neurona recibe valores, los cuales tienen un peso. El concepto de peso es de suma importancia, pues son las variables a encontrar en el entrenamiento de la red y su objetivo es ponderar las entradas de la neurona. Al recibir estos valores ponderados, las neuronas los procesan de una determinada manera, en la mayoría 5 6Capítulo 3. Métodos de Deep Learning para el análisis de imagen de casos sumándolos y determinando si superan o no un determinado umbral, conocido como función de activación. Esta función de activación puede consistir en una función escalón en los casos más simples o en una sigmoidal en determinadas redes, como la presente en la figura 3.3. Conocidos por tanto los resultados de un determinado problema y los datos de partida, el proceso de entrenamiento consiste en hallar los pesos que permiten que con los valores ponderados de entrada, se obtenga la salida esperada. Figura 3.2 Esquema del perceptrón. Y es que para entrenar una red que consiga predecir un resultado a partir de unos datos, es necesario previamente tener una base con valores de un problema y sus respectivas salidas. De esta forma, la red ajustará poco a poco sus pesos de modo que intente que ante todas las entradas, la salida sea la correcta. Figura 3.3 Función de activación. Aunque el perceptrón es un ejemplo de red como tal, su alcance está limitado a realizar operaciones básicas booleanas. Conforme aumenta la complejidad de un problema, lo hace del mismo modo la red necesaria para resolverlo. Es un reto importante el diseño de una red, ya que se necesita determinar el número de neuronas necesarias y cómo deben ser las conexiones que existen entre ellas. Surge en este momento el concepto de capa. Al aumentar el número de capas de neuronas, se aumenta el número de operaciones que la red puede realizar y la capacidad de ajustarse al problema. Con dos capas, la red puede además de realizar operaciones básicas representar funciones lineales [11]. Hasta este momento solo se han comentado ejemplos simples de redes, pero el número de capas y formas de conexionado dan un número infinito de posibilidades y en este concepto radica el potencial de las redes de neuronas y la inteligencia artificial. En cuanto al tipo de conexión, son de especial importancia las redes unidireccionales, cuyos enlaces no forman bucles. Son comunes al facilitar el estudio de las mismas y evitan además comportamientos caóticos, por lo que en aplicaciones finales son las más utilizadas. Si se habla del tipo de entrenamiento, existen redes supervisadas a las cuales se les proporciona las entradas y las respectivas salidas como ya se ha comentado y las redes no supervisadas a las que solo se les proporciona una entrada. Este tipo de redes están aún en desarrollo pero apuntan a jugar un papel principal en las ciencias de la computación al no depender de intervención humana suministrando datos. Las redes que se tratan en este 3.2 Trabajando con imágenes. CNN 7 trabajo son del tipo unidireccionales y con entrenamiento supervisado, ya que se parte de una base de datos conocidos, por lo que se profundizará en ellas. Otro punto a tener en cuenta es el número de capas. Comúnmente en las redes se hace distinción entre tres tipos de capas: •Capa de entrada: Aquella que recibe los valores de entrada de la red. •Capa de salida: Capa con los resultados que ofrece la red. •Capas ocultas : Conjunto de capas internas de la red cuyo cálculo de sus pesos proporciona la solución al problema. Es en las redes con varias capas ocultas donde entra el concepto de redes profundas, capaces de generar predicciones de resultados a partir de conjuntos de datos más complejos. Llegados a este punto, se puede observar que las redes son herramientas de gran utilidad para procesar valores a partir de un proceso de entrenamiento y que generan un resultado que trata de ajustarse a lo aprendido de la experiencia. Sin embargo, el poder de las redes neuronales va más allá, sobre todo gracias a la aparición de arquitecturas de redes convolucionales (también conocidas como CNN), las cuales no se limitan a recibir cantidades de entrada sino que permiten trabajar con imágenes y están provocando importantes avances en los campos de la visión artificial y el procesamiento del audio. 3.2 Trabajando con imágenes. CNN Las redes neuronales convolucionales son aquellas que tratan de comportarse de manera similar a cómo funcionan las neuronas de la corteza visual del cerebro. Son conocidas algunas funciones del cerebro biológico en cuanto a la visión, donde existen capas enfocadas al reconocimiento de líneas simples, bordes, patrones simples, etc., y que de forma gradual permiten una interpretación completa de lo que el ojo recibe. Se caracterizan por ser redes multicapa cuyas capas consisten en matrices bidimensionales que del mismo modo que el cerebro son capaces de, tras un entrenamiento adecuado, reconocer desde simples formas a texturas o colores para así determinar a qué corresponde lo que en la imagen aparece y realizar una clasificación. Figura 3.4 Ejemplo de una CNN [10]. Se tienen por tanto un conjunto de capas capaces de reconocer patrones cuya combinación generan los elementos que se desean detectar. La complejidad como es obvio resulta mayor que en las redes introducidas en el apartado anterior, pero también lo es el problema, al estar tratando con una imagen, es decir, un conjunto de elementos bidimensional. Las capas convolucionales pueden entonces entenderse como filtros para las imágenes de entrada, cuya convolución con la misma genera una posible activación de la neurona. Un conjunto de activaciones genera una salida correspondiente a una activación, como puede observarse en el ejemplo de la figura 3.5. Además de las capas convolucionales, las arquitecturas presentan otros tipos de capas, tal y como puede verse en la figura 3.4. En el caso de las capas Pooling están diseñadas para que la red tolere distorsiones, en 8Capítulo 3. Métodos de Deep Learning para el análisis de imagen Figura 3.5 Vista de una CNN como filtros [12]. el sentido de permitir desplazamientos relativos entre características extraídas. Con esto se consigue una red más robusta, además de realizar otras funciones que favorecen a los tiempos de computación como la reducción espacial del mapa de características. En el caso de las Fully connected layers su objetivo es permitir una clasificación de los datos de entrada. Mientras que las capas convolucionales almacenan información de características locales, las capas totalmente conectadas incluyen información compuesta de las capas convolucionales. Dado que el problema del trabajo consiste en imágenes, las redes neuronales convolucionales son la herramienta ideal para este caso. De forma teórica, se tendrá una red capaz de reconocer patrones presentes en mitosis que hayan sido encontrados tras un entrenamiento, generando estos filtros o capas neuronales que se activan en presencia de estas figuras en función de las formas que se presenten, las texturas, los colores y otras características que la red sea capaz de encontrar. Dado que existen dos posibles resultados, que son presencia o no de mitosis, la última capa tendrá dos neuronas que se activarán según la clase que corresponda. 3.3 Entrenamiento Como se ha comentado, una red no es más que una arquitectura de conexiones de elementos llamados neuronas. Estas conexiones conllevan unos pesos desconocidos que ponderan los valores intercambiados por las neuronas. Será el proceso de entrenamiento el que calcule dichos pesos, ajustando la base de datos de partida con sus soluciones en el caso de un entrenamiento supervisado. El funcionamiento es simple: un conjunto de datos entra en la red por la capa de entrada y la red genera una solución. Si dicha solución es incorrecta, se ajustan los pesos de modo que a la salida se tenga el valor correcto. Esto se hace en base al cálculo de las pérdidas (loss), las cuales son un indicador de la lejanía de las predicciones que hace el modelo a la solución real, similar al significado que tiene el error cuadrático medio usado para regresión lineal. Este proceso continuo de procesamiento, predicción y corrección genera a la larga un conjunto de pesos que se ajustan, siempre que el entrenamiento se haya llevado a cabo de forma adecuada, a los datos de partida [11]. Uno de los algoritmos más destacables de entrenamiento es el de Backpropagation, el cual se basa en el método del gradiente y en el que se entiende el problema como una superficie en la cual encontrar un mínimo, es decir, el conjunto de pesos que causa un error mínimo en la predicción. La responsabilidad del error queda repartida entre todos los pesos que afectan a una determinada salida. Si un resultado es incorrecto, se propaga el error hacia atrás generando un cambio en todos los pesos afectados de las capas ocultas. Si el modelo y el entrenamiento son correctos, dicho mínimo es encontrado y por lo tanto se tiene una solución para la red. En el proceso de entrenamiento existen dos variables importantes a tener en cuenta para alcanzar con éxito las soluciones deseadas: 3.3 Entrenamiento 9 •Learning Rate : se conoce como learning rate al paso que el algoritmo de descenso del gradiente realiza en el entrenamiento de una red en cada iteración. Es un valor vital para este proceso, ya que de él depende la convergencia del problema. Un paso pequeño genera muchas iteraciones y mayores tiempos de entrenamiento mientras que un paso grande puede provocar que el algoritmo no converja nunca (figura 3.6). La elección de un correcto learning rate se abordará en el siguiente capítulo, donde se expone un interesante método para encontrar un valor adecuado. •Epochs : consiste en las veces que el algoritmo recorrerá toda la base de datos de partida para entrenar la red. Figura 3.6 Efecto de malos learning rates [13]. Un entrenamiento puede finalizar con varios resultados posibles: •No convergencia: el algoritmo es incapaz de encontrar una solución y continua iterando sin fin. •Convergencia : se encuentra una solución al problema, con tres posibilidades, representadas además en la figura 3.7. – Aprendizaje pobre : la solución tiene errores de aproximación, por lo que las predicciones de la red son malas. – Sobre-aprendizaje : solución igual de problemática que la anterior. En este caso las predicciones sobre la base de datos son muy buenas, pero la capacidad de generalización de la red es pobre, haciendo que ante nuevos datos con los que no ha sido entrenada sea incapaz de realizar una clasificación acertada. Se puede conocer este efecto también con el nombre de overfitting. – Aproximación correcta : la red genera predicciones con mucha precisión pero a su vez ha desarrollado una capacidad de generalización que le permite predecir correctamente ante nuevos datos de entrada. Figura 3.7 Aprendizaje pobre, buen aprendizaje y sobre-aprendizaje [14]. Existen diversas técnicas para evitar las patologías típicas de un mal entrenamiento. Sin embargo, con una correcta elección de parámetros y una base de datos equilibrada, los algoritmos actuales son capaces 10 Capítulo 3. Métodos de Deep Learning para el análisis de imagen de alcanzar buenas soluciones. Aunque esto es en la teoría, en muchos casos como el tema central de este trabajo, la forma que tiene la base de datos y el problema en sí tienen un dimensionamiento complejo que requiere de un tratamiento especial. Se expondrán diversas técnicas para evitar posibles patologías en el siguiente capítulo durante la exposición del método propuesto. 3.4 Bases de datos Una correcta elección de una base de datos para entrenamiento es vital para llegar hasta los resultados deseados. La red debe conocer de igual manera todos aquellos elementos que se quieren predecir, por lo que los prototipos de entrenamiento deben ser equilibrados para todas las clases a detectar y además disponer de una enorme cantidad de datos conlleva, aunque un entrenamiento más largo, soluciones muy buenas. Esto es sin embargo algo poco común en campos como el de la medicina, donde existe escasez de datos, difícil accesibilidad a los mismos y un desequilibrio importante entre clases, ya que los patrones que se quieren predecir (ya sea una enfermedad a partir de datos físicos de un paciente o una figura anormal en una imagen obtenida por técnicas médicas) son elementos aislados y poco comunes. Es por ello que la construcción de una buena base de datos es importante y existen técnicas de mejora que ponen solución a los problemas descritos. Una de estas técnicas, la cual es casi siempre usada haya o no un problema asociado a la base de datos, es la de Data Augmentation. Consiste en aumentar la base de datos a partir de los prototipos conocidos, modificándolos ligeramente para generar nuevos a partir de ellos. En el ejemplo de las redes neuronales aplicadas al reconocimiento en imágenes, es común generar variaciones de los prototipos realizando rotaciones, aplicando aumentos, variando resolución y modificando el espacio de color para crear "nuevas" imágenes con las que entrenar la red. Esta técnica será detallada durante la exposición del método para este trabajo, pues su utilidad es muy alta. Por último, generalmente los algoritmos de entrenamiento necesitan realizar una separación en la base de datos, usando una parte de ella para el entrenamiento en sí y otra para validar. La parte de validación no es usada para entrenamiento y sirve para verificar si la red realiza predicciones correctas. De igual forma, tras el proceso se predice sobre la base de datos de validación, para comparar el comportamiento frente a datos que la red "conoce" y datos que nunca ha "visto". De esta comparativa se obtienen conclusiones como la precisión de la red o si existe una pobre generalización o por el contrario un sobre-entrenamiento. 3.5 Transfer Learning o cómo aprovechar el entrenamiento de una red El Deep Learning puede ser abordado de dos formas: mediante la creación de una arquitectura desde cero, estableciendo diferentes tipos de capas y conexiones, o mediante el aprovechamiento de una red ya existente. Esta segunda opción es quizás la más utilizada a la hora de crear aplicaciones por su mayor simplicidad. Si se habla de redes convolucionales enfocadas a la visión artificial, existen una gran cantidad de arquitecturas ya diseñadas como AlexNet o ResNet entrenadas de forma predeterminada con un conjunto de imágenes. Están preparadas para predecir un determinado número de objetos y elementos. Sin embargo, aunque el objetivo de un problema determinado no incluya la detección de esos objetos, el conocimiento que ya tiene la red puede ser aprovechado. Volviendo a entender las capas como filtros, eliminar el conocimiento ya almacenado en las primeras capas que distinguen formas, texturas y elementos básicos sería desperdiciar información y tiempo. Es por ello que comúnmente se realiza un proceso de Transfer Learning, en el cual se aprovecha la información aprendida de un problema y se aplica a otro relacionado. Generalmente el proceso conlleva un entrenamiento de las capas finales de la red o la adición de nuevas, lo que provoca una reducción del tiempo entrenando la red. Tras este proceso, normalmente los resultados son buenos si los tipos de imágenes no varían demasiado a aquellas con las que el modelo fue entrenado en su inicio, aunque con las arquitecturas actuales el proceso de Transfer Learning es algo a tener siempre en cuenta por sus bondades. 3.6 Fine Tuning 11 3.6 Fine Tuning Para mejorar aún más los resultados, existe un proceso de Fine Tuning cuyo objetivo es ajustar los pesos de algunas de las capas intermedias de la red de forma ligera para afinar en el nuevo problema al que se aplica el Transfer Learning. Se inicializa el nuevo modelo a entrenar con las primeras capas "congeladas" para no variar sus pesos (al ser capas de extracción de características más genéricas) y se entrena el resto con la nueva base de datos [15][16]. Esta estrategia junto con la adición de unas capas al final de la red hace que no sea necesario entrenar una red desde cero, reduciendo tiempos y permitiendo aprovechar la información conocida por la red. Es una técnica de uso muy común y que genera muy buenos resultados, mejorando hasta un 10% las predicciones del modelo. 3.7 Conclusiones teóricas en relación al problema del trabajo El objetivo del presente capítulo ha sido por tanto presentar la tecnología central del trabajo y los pilares sobre los que se apoyará el proyecto de detección de mitosis, centrándose en aquellos de los que se hará uso. Se han alcanzado en este punto las siguientes conclusiones: • Como planteamiento inicial, una vez conocido el problema, la solución consiste en entrenar una red que sea capaz de reconocer figuras mitóticas. •Existirán dos clases posibles en la salida de la red, que determinará si un elemento es o no mitosis. • Dada la complejidad de las redes, se optará por hacer uso de una red unidireccional a partir de una arquitectura ya diseñada para la extracción de características en imágenes. • Esta red será de tipo convolucional y tendrá un entrenamiento supervisado al disponerse de una base de datos de partida que será posteriormente comentada. • Al usar una arquitectura ya creada, será necesario aplicar conceptos como Transfer Learning yFine Tuning, por lo que el método propuesto debe contemplar estas técnicas. • Al existir actualmente una enorme cantidad de recursos sobre el tema, una selección adecuada del material será vital para el correcto desarrollo del proyecto. 18 Capítulo 4. Método propuesto Figura 4.5 Arquitectura de ResNet34. 4.1 Material 19 Al igual que en MATLAB ® , se realizó una prueba inicial con fast.ai para estudiar su rendimiento y ver si podía ser de utilidad. Con la instalación incluye un dataset de perros y gatos y un cuaderno de Jupyter con un flujo preparado de entrenamiento. Se dejó con los valores por defecto de learning rate yepochs y realiza el entrenamiento de una capa al final de la red (última capa). El resultado fue el siguiente: Figura 4.6 Entrenamiento de ResNet34 con el dataset de prueba. Con este caso de prueba se obtuvo una precisión del 94.72% tras dos epochs sobre la base de datos de validación y un tiempo de entrenamiento de 6 minutos y 44 segundos. Aunque parece que no hay apenas diferencia con el uso de MATLAB ® , el nuevo dataset contenía 23000 imágenes, algo que se asemeja más al del problema que se intenta resolver. Además, en ese tiempo se incluye un procesamiento previo de las imágenes que solo se produce en la primera ejecución del algoritmo. Al ejecutarlo otra vez, teniendo las imágenes preprocesadas en memoria, el resultado fue aún mejor, entrenando la red en 2 minutos y 26 segundos: Figura 4.7 Segundo entrenamiento de ResNet34 con el dataset de prueba. Aunque el caso de la imagen médica es muy diferente y mucho más complejo que el de una simple base de datos de imágenes de animales, los buenos resultados obtenidos y las amplias posibilidades de configuración hicieron que fast.ai se convirtiera en la herramienta elegida. Además, como permite generar flujos de entrenamiento con pocas líneas de código, contribuye a la legibilidad y al mantenimiento. Finalmente, cabe destacar que fast.ai y sus cursos de aprendizaje datan de finales de 2017 e implementan, además del núcleo PyTorch, numerosos y útiles métodos fruto de investigaciones recientes en el campo de la ciencia de los datos y la computación. Esto resulta importante porque se estaría aplicando por tanto al problema del conteo de mitosis tecnología muy reciente y avanzadas técnicas, que serán descritas en detalle durante la exposición de la solución final. Dataset. TUPAC16 | MICCAI Grand Challenge. El dataset usado para la creación del método de detección y conteo automático de mitosis es el proporcionado por la organización del Tumor Proliferation Assessment Challenge [28], un reto consistente en crear un algoritmo capaz de calcular parámetros de proliferación de tumores. Para acceder a estos datos, es necesario poseer una cuenta activada por los organizadores del reto, previa justificación del uso que se le darán a las imágenes. Se proporcionaron varios datasets: 1. Training dataset: contiene 500 casos de diferentes pacientes de cáncer de mama procedentes de The Cancer Genoma Atlas. Cada caso es una única imagen almacenada en .svs, formato piramidal para imágenes multirresolución. Esto significa que se tiene en el mismo archivo, una imagen con distintos tamaños, siendo la más grande de la mayoría de ellas de más de 50000 x 50000 px. Cada imagen viene acompañada de una tabla .csv, la cual contiene dos columnas. La primera de ellas indica el número de 20 Capítulo 4. Método propuesto mitosis encontradas, mientras que la segunda el cálculo del valor de proliferación molecular. En total, la base de datos de imágenes es de 490 GB. Figura 4.8 Imagen histológica típica proporcionada. 2. Auxiliary dataset: mitoses : contiene imágenes histológicas en formato TIFF con anotaciones realizadas por expertos del Departamento de Patología del Hospital Universitario de Utretch, en Países Bajos. Estas anotaciones indican la posición de las figuras mitóticas. El objetivo de este dataset es entrenar al método diseñado de modo que sea capaz de detectar los elementos de interés. Las imágenes provienen de 73 casos diferentes de cáncer de mama. Adicionalmente fueron añadidos 50 casos más procedentes de un centro médico el cual no indica la organización del reto. En cuanto a la base de datos, cada caso contiene múltiples imágenes correspondientes a regiones de 2 mm 2 tomadas con un escáner Leica SCN400, el cual tiene un aumento de 40x y una resolución espacial de 0.25 µ m/px. Las anotaciones son fruto del consenso de al menos dos especialistas. Cada imagen viene acompañada de una tabla .csv que respeta el formato de directorios y nomenclatura de las imágenes. En su interior tienen coordenadas del punto central de cada una de las mitosis, indicado con dos números (fila y columna). Es importante señalar que estas tablas tienen por tanto un tamaño variable en función del número de mitosis de cada imagen y, en el caso de no existir ninguna, el archivo será inexistente. En el apartado sobre el desarrollo de la aplicación que implementa la red entrenada se profundizará más sobre este tema. En total el tamaño es de 10 GB. Figura 4.9 Ejemplo de imagen con anotaciones (en verde) sobre mitosis. 4.1 Material 21 3. El último indica regiones de interés dentro de una imagen como las de la primera base de datos, también marcadas por patólogos expertos. Se usa para descartar zonas que no resulten interesantes, de modo que un algoritmo pudiera omitir regiones de estudio en función de su aspecto, para así reducir tiempos de procesamiento. Este dataset contiene 321 casos de cáncer de mama y tiene un tamaño de 345 GB. Implementación. Desarrollo de la aplicación. Tras el entrenamiento de la red ResNet34 con una base de datos, se genera un archivo contenedor de los pesos de las distintas capas de la arquitectura en formato .h5. Con el objetivo de manejar este archivo y hacer una implementación práctica del mismo, se quiso desarrollar una aplicación. El lenguaje de programación elegido fue Python 3.6 , por las razones ya descritas con anterioridad, y las herramientas adicionales son las siguientes: •Spyder [29]: entorno de desarrollo Python. Posee un visor de archivos y variables, así como integración con una consola de IPython donde realizar pruebas del código que se desarrolle. La elección de este IDE se debe en parte a su parecido en funcionalidades con MATLAB®. •fast.ai [30]: librería para Python que dota de la capacidad de importar pesos de una red de neuronas entrenada a cualquier aplicación con el fin de clasificar imágenes. •Pillow [31]: librería para el manejo de todo tipo de imágenes. •Numpy [32]: paquete para Python de computación científica. Sus posibilidades son innumerables, permitiendo trabajar con matrices N-dimensionales además de implementar álgebra lineal, transformada de Fourier y muchas funciones relacionadas con estadística. •Matplotlib [33]: librería que permite representación 2D y 3D de funciones e imágenes. Muy útil su uso en conjunto con Numpy y otras herramientas científicas como Jupyter. •Personalización : aunque la aplicación final no tiene modo gráfico y funciona en el terminal, se han realizado ajustes que facilitan su uso, como la aplicación de color con Colorama [34] y Termcolor [35] y el uso de barras de progreso con tqdm [36]. Figura 4.10 Esquema de las herramientas de las que hace uso la aplicacion desarrollada. 22 Capítulo 4. Método propuesto 4.2 Método En este punto se comentará el método propuesto para la detección de mitosis y su conteo. Se desarrollará todo el proceso seguido y las reflexiones y decisiones realizadas sobre el problema inicial. 4.2.1 Planteamiento inicial El primer paso que se siguió en el desarrollo del trabajo fue el entrenamiento de la red con la base de datos de partida. El objetivo era conseguir una red cuya entrada fuera capaz de tomar una imagen histológica y a su salida ofrecer una clasificación. El primer problema se hizo evidente. Las redes de neuronas relacionan una imagen a una clase. Reflexionando sobre el tipo de imagen que se tiene y el objetivo deseado, no se tiene esa relación, sino una donde existen múltiples clases dentro de una misma imagen ya que existen zonas con figuras mitóticas y zonas donde no las hay. Es por tanto imposible realizar un entrenamiento y una clasificación a partir de las imágenes completas del tejido, por lo que el primer paso es fraccionar dichas imágenes en pequeños cuadros y clasificarlas en dos directorios separados (uno para recortes con presencia de mitosis y otro para aquellos en los que no había) para entrenar la red con fast.ai. Otro problema que apareció en esta temprana fase del desarrollo del trabajo fue el enorme tamaño de los datasets, haciendo casi imposible su manejo por parte del hardware ni por los servicios en la nube expuestos con anterioridad. Además, la primera base de datos (Trainig dataset) no ofrecía información sobre la localización de las mitosis, sino únicamente del número de ellas. Se descartó por tanto su uso y se tomó la segunda base de datos, más fácil de utilizar y que sí poseía las posiciones de los elementos que se querían detectar. Con estas primeras ideas se procedió a generar un dataset apropiado, más fácil de manejar y que cumpliera con las restricciones del problema. 4.2.2 Mejora del dataset Como era necesario dividir todas las imágenes (656 en total correspondientes a 73 casos diferentes), se generó un proceso automático que lo hiciera. Previo estudio de las imágenes, se determinó que ninguna mitosis excedía un tamaño de 100 x 100 px, por lo que parecían ser unas dimensiones adecuadas para los fragmentos. Además, como las imágenes de esta base de datos son de 2000 x 2000 px, usar ese tamaño para los cuadros simplificaba el problema. La automatización del proceso se llevó a cabo a través de un script de MATLAB ® . La elección de MATLAB ® fue debido a que esto se hizo durante la primera etapa del trabajo, mientras se experimentaba con sus componentes de Deep Learning. Este script está preparado para trabajar con la estructura de ficheros de la base de datos. El flujo que sigue es el siguiente: 1. Lectura de una imagen. 2. Verificación de si existe una tabla de coordenadas de mitosis asociada a ella. 3. Recorte de la imagen. Los fragmentos son clasificados de manera que las imágenes que poseen un píxel presente en la tabla de coordenadas van a parar a un directorio y el resto a otro. Este código fue posteriormente mejorado y llevado a Python, ya que al no tener control sobre la posición de las mitosis, algunas aparecían partidas entre dos recortes, por lo que su utilidad para luego entrenar la red se perdía. Sin embargo, los recortes de imágenes donde no había mitosis seguían sirviendo, por lo que fueron salvados. En este punto se evidenció otro problema, quizás el más importante de todo el proyecto. El directorio con los recortes de mitosis contenía 1552 imágenes. El directorio de recortes con imágenes sin mitosis, sin embargo, 261266. 4.2 Método 23 Figura 4.11 Ejemplo del recorte de una mitosis. 4.2.3 Desbalanceo entre clases El problema del desbalanceo de clases es algo típico en determinadas áreas del Deep Learning. Como se ha visto con anterioridad, un entrenamiento es mejor si se posee una base de datos equilibrada de imágenes de las diferentes clases. No obstante, en campos como la imagen médica es algo común, donde las características a detectar son normalmente pequeños elementos presentes en un gran espacio. Se realizó un entrenamiento para probar el resultado de trabajar con este dataset, obteniendo muy malos resultados. Dado que el 99,56% de las imágenes componen una clase, la red resultante siempre clasificaba los recortes como pertenecientes a este grupo. Esto es peor incluso si se tiene en cuenta que con los resultados finales se calculará un coeficiente F1 que valora la precisión de la clasificación, dando mayor peso a los verdaderos positivos, que en este caso son las imágenes con mitosis que son bien clasificadas. En este punto era evidente que había un problema de dimensionamiento, por lo que se centraron los esfuerzos en estudiar técnicas aplicadas en este tipo de casos [37][38]. Son muchas las técnicas posibles y cada vez surgen nuevas, pero las de más interés fueron las siguientes: •Clonado de datos : una solución sería tan simple como realizar copias de la clase con menor número de elementos. Esto es útil si el desbalanceo es leve, pero en el caso de las mitosis sería necesario generar muchas copias (168 en concreto). El tener muchas imágenes similares genera, en Deep Learning, el problema de overfitting. Esto ocurre cuando una red es capaz de clasificar muy bien las imágenes con las que se entrena, pero incapaz de hacerlo correctamente con imágenes que no ha "visto" nunca. Una de las causas del overfitting se debe a que la red, durante el entrenamiento, al procesar muchas veces las mismas imágenes, en vez de reflejarse en los pesos aspectos genéricos de las características a detectar, se reflejan detalles muy concretos que imposibilitan que una imagen nueva y diferente sea bien clasificada. •Reducción de la clase mayoritaria : es posible eliminar elementos de la clase con mayor número de ellos hasta llegar a un equilibrio entre clases. •Data Augmentation : quizás la técnica más utilizada y la que mejores resultados da. Consiste en procesar cada una de las imágenes, generando por cada una de ellas N variaciones. Estas nuevas imágenes se crean siguiendo varios principios, como voltear la imagen original, rotarla, aumentarla o modificar el espacio de color, como puede verse en la figura 4.12. Para hacer uso de esta técnica, es importante reflexionar sobre el tipo de imágenes que la red posteriormente clasificará. Por ejemplo, volviendo al ejemplo de la base de datos de imágenes de perros y gatos, no va a aportar nada positivo añadir una variación con la imagen rotada 180 ° , ya que a la hora de clasificar una nueva imagen rara vez será de un animal al revés. Solución propuesta. Para el caso de detección de mitosis se optó por unir las dos últimas técnicas, descartando la primera por el problema que podría causar de overfitting. A partir de este momento, se denominará non-mitosis a la clase donde no hay mitosis y mitosis a la clase donde si hay presencia de ellas. Por un lado reducir la clase mayoritaria haría más manejable este directorio. Además, si se observan las imágenes donde no hay mitosis, muchas de ellas son muy similares. Por otro lado, se consideró que aplicar 24 Capítulo 4. Método propuesto Figura 4.12 Ejemplo de data augmentation. data augmentation sería de gran utilidad para conseguir "nuevas" imágenes de mitosis. Se tomó como 10 el número de variaciones que existirían de cada recorte de mitosis, generando un total de 15520 imágenes. 1. Reducción de la clase non-mitosis : mediante el diseño de un script Python, se seleccionaron los 15520 prototipos de la clase non-mitosis. Esta selección fue totalmente aleatoria y cada recorte seleccionado se guardaba en un directorio que alojaría el dataset definitivo. A cada recorte se le asignó un nombre compuesto por una cadena de letras y números aleatorios. 1#−∗−coding: utf−8−∗− 2""" 3Created on Sat Mar 31 10:46:52 2018 4 5Autor: Alejandro Suárez Lamadrid 6Título : non_mitosis_selector .py 7 8""" 9 10 from PIL import Image as image 11 import glob 12 import uuid 13 from random import randint 14 15 # Directorio de la clase "non−mitosis" 16 path = ’C :\\ Users \\ Alejandro \\ Documents\\MATLAB\\TFG\\mdataset2\\no\\∗∗’ 17 path_folder = glob .glob(path , recursive =True) 18 19 # Directorio donde guardar el dataset resultante 20 save_path = ’C :\\ Users \\ Alejandro \\ Desktop\\TFG\\dataset \\ non−mitosis\\’ 21 22 # Número de imágenes a seleccionar 23 dataset_num = 15520 24 dataset_len = len ( path_folder ) 25 26 # Creación del nuevo dataset 27 for iin range(dataset_num): 28 29 random_file = randint (1, dataset_len ) # Recorte aleatorio 30 imagen = path_folder [random_file] 31 im = image.open(imagen) 32 33 # Almacenado con nombre aleatorio 34 unique_filename = save_path + str (uuid.uuid4() ) + ’ . jpg’ 35 36 im.save(unique_filename) Listing 4.1 Script para reducir la clase non-mitosis. Gracias a este proceso se aseguró una clase que tendría el mismo número de elementos que la clase mitosis, que como se verá en el siguiente punto se aumentará hasta los 15520 elementos. Por otro lado, dado que a priori se desconoce cómo selecciona fast.ai las imágenes para el entrenamiento, asignando a cada archivo un nombre aleatorio se mezclan recortes de distintos tejidos, dotando de mayor aleatoriedad al proceso. Esto enriquece el entrenamiento posterior. 4.2 Método 25 2. Aumento de la clase mitosis por Data Augmentation : partiendo de los 1552 recortes de mitosis de los que se disponía entonces, se quiso generar 10 variaciones para cada uno de ellos. Se escogió esa cifra para evitar posibles casos de overfitting y por ser un valor típico en procesos de este tipo. El proceso de Data Augmentation se hizo en dos fases. Mientras que fast.ai incorpora técnicas para ello durante el entrenamiento, en un primer lugar se deseó realizar fuera de este entorno para observar cómo serían los resultados y llevar un control del trabajo. Además, el Data Augmentation que fast.ai implementa aumenta todas las clases, sin permitir seleccionar una sola de ellas. Es por esto que se creó un script en Python cuyo flujo es el siguiente: a) En primer lugar, y del mismo modo que el script inicial que fue desarrollado en MATLAB ® para la creación del dataset, se localizan las mitosis en las imágenes de partida. b) Para cada mitosis, se generan 10 recortes de la misma desplazando la ventana de recorte de 100 x 100 px ligeramente (un máximo de 20 px) en cualquier dirección y de forma arbitraria. c) Finalmente, cada uno de los 10 recortes se gira de forma aleatoria, aplicando rotaciones en sentido horizontal, vertical o ambos a la vez. La misma probabilidad hay de que se rote en ningún sentido, que en cualquiera de ellos o en ambos. Con todo este proceso se consigue un dataset de 31040 imágenes, 15520 en cada una de las clases. Se ha logrado por tanto igualar el número de imágenes de cada clase permitiendo un entrenamiento más apropiado, priorizando la riqueza en imágenes de mitosis por ser aquellos elementos que se desea detectar. Figura 4.13 Mitosis tratada con técnicas de data augmentation. Figura 4.14 Ejemplos de elementos en la base de datos sin figuras mitóticas. 26 Capítulo 4. Método propuesto 1#−∗−coding: utf−8−∗− 2""" 3Created on Fri Mar 9 17:45:06 2018 4 5@author: Alejandro 6""" 7 8import csv 9import glob 10 import os. path 11 from random import randint 12 13 from PIL import Image as image 14 15 16 # Directorios donde se tienen los datos de partida 17 ground_path = ’C :\\ Users \\ Alejandro \\ Documents\\MATLAB\\TFG\\Mitosis\\ground_truth\\∗∗’ 18 ground_folder = glob.glob(ground_path, recursive =False) 19 20 mitosis_path = ’C :\\ Users \\ Alejandro \\ Documents\\MATLAB\\TFG\\Mitosis\\tejidos\\∗∗’ 21 mitosis_folder = glob.glob( mitosis_path , recursive =False) 22 23 # Directorio donde se almacenará el dataset 24 save_path = ’C :\\ Users \\ Alejandro \\ Desktop\\ dataset \\ ’ 25 26 # Contadores de mitosis 27 cont = 0 28 mitosis = 0 29 30 for iin range(len ( mitosis_folder ) ) : 31 32 # Exploración de los datos de partida 33 mitosis_act = glob.glob (( mitosis_folder [ i ] + "\\∗∗") , recursive =True) 34 ground_act = glob. glob(( ground_folder [ i ] + "\\∗∗") , recursive =True) 35 36 # Tratamiento de cada imagen 37 for jin range(len ( mitosis_act )) : 38 39 if ( j == 0): 40 continue 41 42 # Se preparan las rutas de las referencias 43 im = image.open( mitosis_act [ j ]) 44 45 check = mitosis_act [ j ] 46 check = check. replace (". tif " ,".csv") 47 check = check. replace (" tejidos ","ground_truth") 48 49 # Se verifica que existe referencia para una imagen 50 if (os . path . isfile (check)) : 51 archivo = open(check) 52 tabla = csv. reader ( archivo ) 53 tabla = list ( tabla ) 54 archivo . close () 55 mitosis = len( tabla ) 56 57 # Si no hay referencia , no existe mitosis en esa imagen 58 else : 59 mitosis = 0 60 61 # Tratamiento de la imagen 62 for kin range( mitosis ) : 63 64 s = im. size [1] 65 x = int ( tabla [k ][0]) 66 y = int ( tabla [k ][1]) 67 68 # Para cada imagen se generan 10 69 for lin range(10) : 70 # Desplazamientos aleatorios 71 randx = randint (20, 80) 4.2 Método 27 72 randy = randint (20, 80) 73 # Rotaciones aleatorias 74 randtd = randint (0, 1) 75 randlr = randint (0, 1) 76 77 # Generación de la bounding box para recorte de la mitosis 78 box = (max(0, y −randy), max(0, x −randx), min(s, y + (100 −randy)) , 79 min(s, x + (100 −randx))) 80 imcrop = im.crop(box) 81 82 # Rotaciones del recorte 83 if ( randtd) : 84 imcrop = imcrop. transpose (image.FLIP_TOP_BOTTOM) 85 if ( randlr ) : 86 imcrop = imcrop. transpose (image.FLIP_LEFT_RIGHT) 87 88 # Se almacenan los recortes en el directorio del dataset 89 save_name = save_path + ’ mitosis ’ +’_’ +str ( i ) + ’_’ + \ 90 str ( j ) + ’_’ +str (k) + ’_’ +str ( l ) + ’ . jpg’ 91 imcrop.save(save_name) Listing 4.2 Script para data augmentation de la clase mitosis. 4.2.4 Selección de candidatos para entrenamiento y validación Teniendo la base de datos lista para entrenamiento, es necesario previamente crear una estructura de directorios apropiada para fast.ai, de acuerdo a la propia documentación de esta librería. Se añadieron además otros directorios útiles para la aplicación final, con el objetivo de mantener todos los recursos en un mismo lugar. Figura 4.15 Estructura de directorios para el entrenamiento. •models : contendrá el archivo de pesos .h5 generado tras el entrenamiento y del que se podrá hacer uso para clasificar imágenes. •train : en su interior se aloja la base de datos de entrenamiento de todas las clases en directorios separados. •valid : contiene las imágenes con las que no se entrena la red y que se usarán para validar su eficacia clasificando. •El resto de directorios son usados por la aplicación final y se describirán posteriormente. El siguiente paso fue por tanto seleccionar qué imágenes formarían parte de cada directorio. Es importante tener en cuenta las restricciones que existían ya que seleccionar aleatoriamente imágenes para entrenamiento y validación no era una opción. Si se hacía de esta manera, dado que en el directorio con figuras mitóticas cada una de ellas está presente 10 veces, se podría estar entrenando la red con mitosis con las que luego también se validaría, perdiendo totalmente la utilidad de validar la red. Es por esto que extrajeron 100 mitosis (con sus respectivas 10 variaciones cada una) para la validación del modelo. De esta forma se entraría la red con unas mitosis y se validaría con otras. Por otro lado, como en el proceso de reducción de la clase non-mitosis los recortes sufrieron una selección y nombre aleatorios, la separación en directorios de entrenamiento y validación se realizó sin seguir ningún criterio especial. En total, y para mantener la igualdad con la otra clase, se escogieron 1000 imágenes para validación y el resto para entrenamiento. 5 Resultados e implementación software Tr as realizar el entrenamiento final del modelo con los parámetros y herramientas descritos en el capítulo anterior, se procede a analizar los resultados obtenidos y a explicar el desarrollo de la aplicación capaz de realizar predicciones sobre imágenes de entrada. 5.1 Resultados del entrenamiento. Validación Como resultado del último entrenamiento aplicando todas las técnicas ya descritas se consiguió una notable reducción de las pérdidas sobre los dos datasets y un considerable aumento de la precisión, que alcanzó un valor máximo del 98.39%. Figura 5.1 Resultado del último entrenamiento tras aplicar fine-tuning. Las mejoras son importantes respecto al entrenamiento de únicamente la última capa, teniendo una red capaz de clasificar correctamente casi la totalidad de las imágenes. Para validar se ha usado además una técnica de TTA o test time augmentation, que consiste en aplicar data augmentation al validation dataset, consiguiendo esta vez 4 imágenes a partir de cada una. El resultado de precisión alcanzado fue del 98.5%. A continuación se expone una tabla comparativa de los distintos entrenamientos llevados a cabo: Tabla 5.1 Comparativa de entrenamientos. Método Parámetros Pérdidas Precisión lastlayer lr=0.01; epochs=2 0.2943 87.11% lastlayer lr=0.01; restarts=3; Data augmentation; LR con reinicios 0.265 89.74% lastlayer+fine-tuning lr=differential; restarts=3; cycles=2; LR diferencial; LR con reinicios 0.0446 98.5% 35 36 Capítulo 5. Resultados e implementación software A diferencia de la primera exposición de resultados al entrenar únicamente la última capa, para plasmar mejor la capacidad de predicción del modelo generado se representa una matriz de confusión, útil herramienta para en este caso observar el diagnóstico en la forma de: •Verdaderos positivos: imágenes clasificadas como mitosis que sí lo son realmente. •Falsos positivos: imágenes clasificadas como mitosis donde realmente no la hay. •Verdaderos negativos : imágenes clasificadas con ausencia de mitosis y que efectivamente no contienen figuras mitóticas. •Falsos negativos : imágenes clasificadas como carentes de mitosis pero en las que en realidad sí hay alguna presente. Del total de 2000 imágenes del validation dataset, se obtuvo la siguiente matriz de confusión: Figura 5.2 Matriz de confusión. De esta figura se extraen las siguientes conclusiones: • De las 1000 imágenes de mitosis, fueron bien clasificadas 980. Posteriormente se verán algunas que no fueron bien clasificadas. • De las 1000 imágenes sin presencia de figuras mitóticas, fueron bien clasificadas 990, por lo que en las 10 restantes se detectó mitosis sin haberla. Con estos resultados, solamente queda observar las predicciones incorrectas para su estudio. Dado que la detección de mitosis es el objetivo más importante y principal, son las que se representan únicamente. Figura 5.3 Mitosis mal clasificadas. 5.2 Aplicación para la detección de mitosis 37 Viendo las mitosis mal clasificadas en la figura 5.3, todas presentan un tamaño bastante más pequeño a las presentadas con anterioridad, pudiendo esto ser la causa de una clasificación errónea. A pesar de ello, los resultados fueron muy buenos y supusieron una mejora sustancial respecto a otros entrenamientos, por lo que este fue el modelo elegido para la implementación software final. Con estos datos de la matriz de confusión, se elaboró un script en Python que calcula el Valor-F (F- Score), medida de la precisión que tiene una prueba. Se calcula con los valores estadísticos de precisión y exhaustividad. F1=2∗ Precision ∗Exhaustividad Precision +Exhaustividad Precision =VerdaderosPositivos VerdaderosPositivos +FalsosPositivos Exhaustividad =VerdaderosPositivos VerdaderosPositivos +FalsosNegativos F1=0.9849 Con la red ya entrenada y comprobados los resultados que arrojaba, se quiso desarrollar una aplicación capaz de recibir la imagen histológica de un tejido y analizarla para localizar todas las mitosis que hubiera en ella. El desarrollo de este software y los resultados finales del proyecto se detallan en el siguiente punto. 5.2 Aplicación para la detección de mitosis La implementación de la red entrenada se ha realizado con una aplicación desarrollada en Python 3.6, la cual se concibió para cumplir los siguientes requisitos: 1. Analizar una imagen histológica de entrada y ofrecer a la salida una vista de dicha imagen con la localización de las mitosis encontradas y un conteo de las mismas. 2. Ofrecer una vista en detalle de cada mitosis para su estudio de forma individual. 3. Capacidad de seleccionar una o varias imágenes de entrada para ser procesadas en orden. 5.2.1 Exploración de la imagen Para realizar dichas tareas, es necesario tener en cuenta que la red no fue entrenada para clasificar imágenes completas, sino pequeños bloques de una misma, por lo que la aplicación tiene que basarse en este mismo principio. Es por ello que el primer paso al cargar la imagen en el programa sería realizar una división en bloques. Sin embargo, si se hace de esta forma, es muy probable que algunas mitosis queden divididas entre varios recortes, lo que podría resultar en una mala clasificación por parte de la red, que no está viendo el elemento completo. Para solucionar este problema, se decidió realizar una exploración por bloques de la imagen pero estableciendo un cierto solapamiento entre ellos, de modo que si en una de las ventanas de exploración una mitosis no se veía completamente, en la siguiente sí. La ventana será un cuadrado de 100 x 100 px para mantener el tamaño de imagen con el cual la red fue entrenada y realizará una exploración comenzando en la esquina superior izquierda de la imagen, la cual corresponde al píxel (0, 0). Esta exploración será en el sentido horizontal de la imagen. El solapamiento será del 50%, es decir, la ventana se desplaza cada vez 50 px en sentido horizontal y al llegar al final de la imagen continuará hacia abajo desplazándose otros 50 px, de modo que el solapamiento es en ambas direcciones, evitando dejar alguna mitosis fuera. Se justifica este funcionamiento tras haber realizado numerosas pruebas, concluyendo en los esquemas mostrados en las siguientes figuras. 38 Capítulo 5. Resultados e implementación software Se decidió por tanto trabajar de esta forma, ya que se evitaban errores pese a que el procesamiento de una imagen aumentara considerablemente su tiempo de duración al tener que clasificar mayor número de cuadros. En las figuras 5.4 y 5.5 se ponen de manifiesto estas ideas. Figura 5.4 Posible exploración sin solapamiento donde no se detecta una mitosis (señalada en verde). Figura 5.5 Exploración con solapamiento donde se detecta la mitosis (señalada en verde). 5.2.2 Predicción La siguiente cuestión que hubo que tratar fue el de la clasificación de estos cuadros, ya que por defecto el método que utiliza fast.ai no es el más adecuado. En primer lugar se desarrolló la aplicación con el objetivo de obtener todos los cuadros primero, almacenarlos en un directorio y realizar una llamada a la función de predicción. Esta función devolvería una lista de valores con las puntuaciones de cada clasificación, pero se detectó que el orden en el que daba estos valores era totalmente arbitrario y sin indicar qué valor correspondía a qué cuadro, variando en cada ejecución. Este es un problema documentado y comentado en los foros de fast.ai y requeriría de modificaciones a nivel del núcleo de la librería. Se optó en este momento por tanto de realizar las predicciones de una en una. Conocida cómo es la exploración de la imagen se puede saber fácilmente el valor dado por la clasificación en cada momento. Cabe destacar que para realizar la predicción la imagen en cuestión debe estar almacenada en el disco, eligiendo para este caso el directorio test anteriormente visto en la estructura de directorios para el entrenamiento. 5.2 Aplicación para la detección de mitosis 39 Función predict_mitosis Función que explora una imagen histológica por bloques de 100 x 100 px solapados un 50% y realiza una predicción sobre cada uno de ellos, determinando si contiene o no una figura mitótica. Almacena los resultados en numpy arrays, un tipo de variable de tipo matriz que implementa la librería Numpy. Para cada bloque, la función predict de fast.ai arroja un valor de clasificación el cual determina la cercanía a cada una de las dos clases que se tienen. Se establece el umbral de decisión en 0.01, siendo por tanto clasificadas como mitosis aquellos bloques con una puntuación inferior a dicho valor, y clasificando como no mitosis los que lo superen. La función recibe: •f: imagen del tejido completo cargada en memoria con la librería Pillow. •learn: modelo entrenado de red neuronal cargado en memoria con la librería fast.ai. •box_num: número de bloques que la función tendrá que analizar. •text_path: ruta del directorio donde se almacenan temporalmente los bloques para su clasificación. A su salida devuelve: •mitosis_table : tabla con los bloques de exploración donde ha sido encontrada una mitosis. Estos bloques están descritos por las coordenadas de 2 de los puntos que los forman. •mit_t: tabla con los bloques donde se han encontrado mitosis, descritos por un número. •probs_table : tabla con las puntuaciones fruto de la predicción. Solamente se almacenan aquellas que corresponden a mitosis, es decir, las que se encuentran por debajo del umbral establecido. 1def predict_mitosis ( f , learn , box_num, test_path ) : 2 3mitosis_table = np. array ([]) . reshape (0, 4) # Tabla que contendrá las posiciones de las mitosis encontradas 4mit_t = np. array ([]) # Numeración de cada mitosis 5probs_table = np. array ([]) # Tabla con los valores de predicci ón 6cont = 0 7umbral = 0.01 8 9# Bucle de exploraci ón de la imagen que implementa una barra de progreso 10 for iin tqdm(range(box_num[0]), ascii =True): 11 for jin range(box_num[1]): 12 cont = cont + 1 13 box = (50 ∗j , 50 ∗i , 50 ∗j + 100, 50 ∗i + 100) 14 15 # Recorte de la imagen y almacenamiento 16 imcrop = f .crop(box) 17 save_name = test_path + "temp.jpg" 18 imcrop.save(save_name) 19 imcrop. close () 20 21 # Predicci ón sobre el fragmento actual 22 log_preds = learn . predict ( is_test =True) 23 log_preds .shape 24 probs = np.exp(log_preds [:, 1]) 25 26 # Umbral establecido para determinar si una figura es mitosis o no 27 if (probs[0] < umbral): 28 box = np. asarray ([box]) 29 mitosis_table = np. vstack ([ mitosis_table , box]) 30 mit_t = np.append(mit_t, cont) 31 probs_table = np.append(probs_table , probs [0]) 32 33 return ( mitosis_table , mit_t , probs_table ) Listing 5.1 Función para la exploración y clasificación de imágenes histológicas.. 40 Capítulo 5. Resultados e implementación software 5.2.3 Detección múltiple de mitosis La exploración con solapamiento entre bloques conlleva un problema, y es que al igual que permite detectar elementos que pudieran quedar fragmentados, puede generar que un mismo elemento sea encontrado varias veces. Con el solapamiento elegido es de hecho la situación más frecuente. Por ello fue necesario desarrollar una función que, a partir de la tabla de coordenadas de las mitosis encontradas, detectara aquellos bloques que hacían referencia a una misma figura mitótica. Una vez detectado este fenómeno, que se realiza por cercanía entre bloques, sería necesario eliminar los que estuvieran varias veces o unificarlos, como se muestra en la figura 5.6. Esta última fue la solución elegida, realizando además una media entre las puntuaciones de predicción de cada uno de los bloques a fusionar. Figura 5.6 Exploración con solapamiento donde se detecta la misma mitosis varias veces. Función cluster_box El algoritmo diseñado para la unión de cuadros se basa en buscar si algún bloque alrededor del mismo se encuentra también en la tabla. En caso afirmativo, se determina que los cuadros afectados hacen referencia al mismo elemento y se unen generando un cuadro mayor. Se añaden las coordenadas que definen este bloque procesado a una nueva lista definitiva que contiene la localización de todas las mitosis, generando una entrada para cada una. Figura 5.7 Algoritmo de fusión de cuadros que hacen referencia a la misma mitosis. 5.2 Aplicación para la detección de mitosis 41 La función recibe: •mitosis_table : tabla con las coordenadas que describen los bloques donde se han encontrado mitosis. •mit_t: tabla con los bloques donde fueron encontrados mitosis, numerados. •probs_table : tabla con las puntuaciones que la función de predicción de fast.ai otorga a cada bloque. Solo incluye las de aquellos bloques donde hay mitosis. A su salida devuelve: •bb : tabla con las coordenadas de los bloques donde hay mitosis ya procesados. Aquellos cuadros que inicialmente contenían las mismas mitosis son fusionados creando un cuadro mayor. •p : tabla con las puntuaciones de predicción otorgadas por fast.ai procesadas. Aquellas puntuaciones de bloques que contenían las mismas mitosis son calculadas de nuevo como la media de todos los valores afectados. 1def cluster_box ( mitosis_table , mit_t , probs_table ) : 2 3bb = np. array ([]) . reshape (0, 4) # Tabla que contendrá los bloques procesados 4p = np. array ([]) # Tabla que contendrá las predicciones procesadas 5mit_num = mit_t.shape 6 7# Bucle de procesamiento de bloques contenedores de mitosis 8for uin range(mit_num[0]): 9# Bloques alrededor del bloque de estudio 10 comp = np.array ([ mit_t[u], mit_t [u] −39, mit_t[u] + 39, mit_t[u] −1, 11 mit_t[u] + 1, mit_t [u] −38, mit_t [u] −40, mit_t[u] + 40, 12 mit_t[u] + 38]) 13 # Búsqueda de bloques vecinos 14 searching = np.in1d(mit_t , comp) 15 v = np.where(searching==True) 16 row_idx = np. asarray (v) 17 18 cluster = np.squeeze( mitosis_table [row_idx [:, None]]) 19 probs = probs_table [row_idx] 20 21 # Fusión de bloques vecinos y cálculo de la nueva predicci ón 22 if ( cluster .ndim == 2): 23 cl = np. array ([ cluster [:, 0]. min(axis=0), cluster [:, 1].min(axis=0), 24 cluster [:, 2].max(axis=0), cluster [:, 3].max(axis=0)]) 25 pl = np.mean(probs) 26 else : 27 cl = cluster 28 pl = probs[0] 29 30 cl_list = np.ndarray . tolist ( cl ) 31 bb_list = np.ndarray . tolist (bb) 32 33 # Comprueba si el bloque ya existe en la lista definitiva de mitosis 34 if ( cl_list not in bb_list ) : 35 bb = np. vstack ([bb, cl ]) 36 p = np.append(p, pl) 37 38 return (bb, p) Listing 5.2 Función para el procesamiento de mitosis encontradas. 42 Capítulo 5. Resultados e implementación software 5.2.4 Funciones adicionales A las funciones anteriores que describen el funcionamiento principal de la aplicación fueron añadidas dos más que resultan de interés y sirven para realizar comprobaciones iniciales e implementar un menú de usuario respectivamente. Función cuda_enabled Esta función es llamada al iniciar la aplicación y comprueba si las tecnologías CUDA y cuDNN están disponibles y habilitadas para su uso. Ambas son necesarias para la correcta importación de la librería fast.ai y por lo tanto para el funcionamiento normal del programa. No recibe ningún parámetro de entrada. A su salida devuelve: •enabled : variable booleana cuyo valor es True en el caso de que ambas tecnologías estén disponibles y False en caso contrario. 1def cuda_enabled() : 2 3# Inicializaci ón de la aplicaci ón 4print (’ Iniciando ... ’) 5 6# Se comprueba si CUDA y cuDNN están habilitadas 7cuda = torch .cuda. is_available () 8cudnn = torch .backends.cudnn.enabled 9 10 enabled = cuda and cudnn 11 # Impresión del estado 12 if (enabled) : 13 color = ’green’ 14 else : 15 color = ’red’ 16 print (’Se necesita CUDA y cuDNN’) 17 18 print (’∗∗CUDA state: ’ + colored( str (cuda), color , attrs =[’bold’ ]) ) 19 print (’∗∗cuDNN state: ’ + colored( str (cudnn), color , attrs =[’bold’ ]) ) 20 21 return (enabled) Listing 5.3 Función que comprueba la disponibilidad de las tecnologías CUDA y cuDNN. Función show_menu Muestra en el terminal un menú con varias opciones a elegir por el usuario. Facilita el manejo del programa y sus opciones son: 1. Analizar el directorio de almacenamiento de imágenes por completo, el cual se encuentra al mismo nivel de directorios que el programa principal en la carpeta images/. 2. Analizar una imagen en específico del mismo directorio anterior, a seleccionar en una lista. 3. Salir de la aplicación. El único parámetro que recibe esta función es la ruta del directorio de imágenes, ya que la utiliza para listar la totalidad de archivos en caso de seleccionar la segunda opción. A su salida devuelve: •option: elección por parte del usuario. •index: elección de una imagen concreta por parte del usuario. •error: código de error en el caso de uso indebido o error cometido por el usuario. 5.2 Aplicación para la detección de mitosis 43 1def show_menu(image_folder): 2option = 0 3index = 0 4error = 0 5 6# Menú principal 7print (’ \033[4;30;47 m’ +’ \n−−−− Detección de mitosis con CNN −−−−\n’ +’\033[0;m’) 8print (’ Elija una opción:’) 9print (’ \033[1;36m’ +’ 1. Analizar toda la carpeta imágenes.’ +’ \033[0; m’) 10 print (’ \033[1;36m’ +’ 2. Analizar una imagen especí fica . ’ +’ \033[0; m’) 11 print (’ \033[1;31m’ +’ 3. Salir . ’ +’ \033[0;m’) 12 13 option = int (input (’Opción deseada: ’) ) 14 print (’’) 15 16 # Primera opción, aná lisis completo 17 if (option == 1): 18 print (’Analizando toda la carpeta ... ’) 19 20 # Segunda opción. Se muestra un nuevo menú con todos los archivos y permite elegir uno 21 elif (option == 2): 22 for i , elem in enumerate(image_folder ) : 23 print (( i + 1) , elem) 24 index = int (input (’ \ nElija un archivo de la lista : ’)) 25 26 if (index > len(image_folder )) : 27 error = 1 28 print (’ERROR’) 29 30 # Tercera opción. Salir de la aplicaci ón. 31 elif (option == 3): 32 print (’ Finalizando ... ’) 33 else : 34 error = 1 35 print (’ERROR’) 36 37 return ( option , index , error ) Listing 5.4 Función que muestra el menú principal de la aplicación. 5.2.5 Presentación de los resultados A la salida de la anterior función ya se tienen los resultados finales del método en forma de tablas con las coordenadas de los cuadros donde se localizan las mitosis detectadas y la puntuación que el algoritmo de predicción ofrece. El paso final es presentar dichos resultados para su visualización, para lo cual se ha usado el módulo Matplotlib. Función draw_bb Muestra por pantalla la imagen completa y, a partir de las tablas de coordenadas que describen los cuadros donde existen figuras mitóticas, los dibuja sobre la imagen para señalarlas. También coloca sobre cada cuadro el número correspondiente a cada mitosis otorgado por el algoritmo de clasificación, modificado de modo que su cercanía a pertenecer a la clase mitosis se invierte, es decir, la clase mitosis ahora sería valorada como 1 y no mitosis como 0. Se ha hecho de esta forma por resultar más intuitivo para el usuario. La función recibe: •f: variable que contiene la imagen elegida por el usuario cargada en memoria. •bb: tabla con las coordenadas que describen la situación de las mitosis encontradas. •p : tabla con las puntuaciones correspondientes a cada mitosis otorgada por la función de clasificación. A su salida no devuelve ninguna variable, pero muestra por pantalla la imagen completa con los elementos indicados previamente. 50 Capítulo 5. Resultados e implementación software 5.3.3 Otros ejemplos de uso Una vez probada la aplicación con dos casos de relevancia que corresponden a presencia y no presencia de mitosis, se repasa el funcionamiento de la aplicación con otras imágenes que han resultado interesantes y las cuales presentan un aspecto diferente a las ya vistas. Se han seleccionado aquellas que pueden suponer un reto por la complejidad de su estructura, por lo que son ideales para poner a prueba la aplicación. Paciente 08. Mitosis con un aspecto diferente Se muestra a continuación un ejemplo de imagen de tejido que difiere ligeramente a los anteriores, con diferentes tonos de color y la presencia de una mitosis con un aspecto diferente. Figura 5.16 Caso 08. Comparativa entre una detección manual (izquierda) y automática con la aplicación desarrollada (derecha). Si se observa la mitosis en detalle se observa por qué es de interés, y es que pese a presentar una estructura diferente a las anteriores la red es capaz de clasificarla correctamente. Con este ejemplo queda claro que la aplicación puede detectar figuras mitóticas que se encuentran en distintas fases. Figura 5.17 Caso 08. Vista en detalle de la mitosis detectada. 5.3 Resultados finales. Casos de interés 51 Paciente 06. Mayor número de mitosis encontradas El siguiente ejemplo resulta de interés porque en la imagen son detectadas más mitosis que las presentes en la base de datos. Figura 5.18 Caso 06. Comparativa entre una detección manual (izquierda) y automática con la aplicación desarrollada (derecha). Si se observan en detalle las posibles mitosis detectadas pueden encontrarse elementos que o bien podrían serlo pero no fueron detectadas por los especialistas o bien se asemejan bastante al aspecto de una mitosis. En cualquiera de los casos, la única mitosis presente en la base de datos también lo está en la predicción realizada por la aplicación y además presenta una puntuación mayor que el resto, permitiendo de este modo afinar incluso más en el umbral, discriminando al resto. Figura 5.19 Caso 06. Vista en detalle de las mitosis detectadas. 52 Capítulo 5. Resultados e implementación software Paciente 09. Ausencia de mitosis La siguiente imagen histológica tiene ausencia de figuras mitóticas además de un aspecto similar al caso anterior. Resulta de interés para comparar si se encuentra algún elemento ya que existen en ella numerosas zonas susceptibles de ser clasificadas como mitosis sin serlo. Figura 5.20 Caso 09. Comparativa entre una detección manual (izquierda) y automática con la aplicación desarrollada (derecha). Al igual que la base de datos, la predicción realizada por el programa no indica presencia de ninguna figura mitótica, por lo que en este caso los resultados son correctos. Paciente 14. Mitosis con un aspecto diferente En este caso existe una mitosis a detectar la cual se encuentra dividida, es decir, la forman dos elementos cercanos. Figura 5.21 Caso 14. Comparativa entre una detección manual (izquierda) y automática con la aplicación desarrollada (derecha). 5.3 Resultados finales. Casos de interés 53 Como puede verse en la figura anterior, un número mayor de posibles mitosis fueron encontradas respecto a las presentes en la base de datos. Sin embargo, aquella que tenía un aspecto diferente y que resultaba de interés para este caso fue correctamente encontrada, como queda reflejado en la siguiente imagen. Figura 5.22 Caso 14. Vista en detalle de las mitosis detectadas. Paciente 19. Ausencia de mitosis Finalmente, se expone el siguiente caso de interés con ausencia de mitosis para probar el método en una imagen con tonalidades muy diferentes. Figura 5.23 Caso 19. Comparativa entre una detección manual (izquierda) y automática con la aplicación desarrollada (derecha). Se tiene aquí por tanto otro caso de éxito donde se cumple la igualdad entre lo que indica la base de datos y el resultado del procesamiento a través de la aplicación desarrollada para el proyecto. 54 Capítulo 5. Resultados e implementación software 5.4 Resultados finales. Estadísticas de la aplicación Para concluir con la exposición de resultados, se han estudiado todas las imágenes de los primeros 23 casos de la base de datos. Se ha realizado de este modo ya que son los casos incluidos desde el principio por la organización del reto y los que mayor riqueza de imágenes tienen. Los casos restantes solamente incluyen una única imagen. El objetivo una vez más es probar cómo funciona la aplicación y su validez de uso, comparando los resultados que ofrece la clasificación con el método diseñado con la base de datos de partida realizada por expertos de forma manual. Es importante señalar que estas pruebas se han realizado sobre imágenes que se han usado tanto para entrenamiento como para validación. Aunque no es recomendable comprobar el funcionamiento con datos de entrenamiento, dada la baja cantidad de prototipos de mitosis y la reducida base de datos para validación, se ha decidido realizar de este modo para tener una mayor cantidad de mitosis a detectar. Para probar la aplicación se han usado 10 imágenes de cada caso, ya que en la mayoría de estos ese era el número que incluían y se ha deseado mantener una igualdad, a excepción de algunos casos los cuales resultaban de interés y se analizaron por completo. Cabe señalar que el valor del umbral se mantuvo sin variaciones durante todas las pruebas. Los resultados fueron los siguientes: Tabla 5.2 Resultados del análisis de 23 casos clínicos. Caso Mitosis (database) Mitosis detectadas Mitosis correctas Detección (%) 1 73 139 67 91.78% 2 37 110 37 100% 3 18 41 17 94.44% 4 224 567 210 93.75% 5 6 5 5 83.33% 6 14 37 14 100% 7 15 62 15 100% 8 3 9 3 100% 9 2 9 2 100% 10 0 1 0 100% 11 11 49 10 90.91% 12 8 27 7 87.5% 13 3 17 2 66.67% 14 11 19 8 72.73% 15 13 53 13 100% 16 9 14 8 88.89% 17 6 10 5 83.33% 18 28 50 26 92.86% 19 2 2 2 100% 20 0 1 0 100% 21 23 89 20 86.96% 22 17 30 16 94.12% 23 14 22 12 85.71% Tabla 5.3 Resultados del conjunto de datos. Mitosis (database) Mitosis detectadas Mitosis correctas Detección (%) F1-Score 537 1363 499 92.92% 0.5253 5.4 Resultados finales. Estadísticas de la aplicación 55 5.4.1 Conclusiones sobre las estadísticas Tras haber probado en profundidad la aplicación y a la vista de las estadísticas expuestas, se concluye lo siguiente: • La red era capaz de detectar correctamente casi la totalidad de las mitosis presentes en la base de datos, alcanzando un 92.92% tras probar en 23 casos diferentes (más de 300 imágenes) y un 95.8% sobre la base de datos de validación. •Existe un alto valor de falsos positivos, fruto de varias circunstancias. – Por un lado, el hecho de haber reducido considerablemente la clase sin presencia de mitosis provoca una mala clasificación de zonas donde no hay mitosis. Esto podría solucionarse con una mayor cantidad de mitosis para analizar, pero la pobreza de la base de datos en este sentido impide que sea mejor la precisión. – El umbral elegido en la aplicación se mantuvo fijo todo el tiempo. Se ha observado en numerosos casos cómo estos falsos positivos reciben una clasificación ligeramente inferior a las de las mitosis reales, por lo que pueden ser filtrados de mejor manera. – Se ha observado que en tejidos con alta presencia de mitosis estos falsos positivos se acentúan. Cuando hay poca o ninguna presencia de estas figuras, los falsos positivos suponen un valor muy bajo y en algunos casos es inexistente. – Existen casos como el número 21 donde casi la totalidad de las imágenes están compuestas por figuras muy similares a las mitosis, disparándose el número de falsos positivos. • Un efecto común en estas pruebas ha sido el hecho de que algunas mitosis que debían ser detectadas no lo fueron por encontrarse en los límites de la imagen y sin aparecer completamente. • La aplicación se comporta correctamente en casos sin apenas presencia de mitosis y es capaz de detectar aquellos elementos que son de interés. • El valor final alcanzado de F1 se encuentra muy cercano al del método propuesto por la UPV-EHU [8] en el Tumor Proliferation Assessment Challenge de 2016, el cual fue de 0.541. 6 Conclusiones y líneas futuras El uso de tecnologías Deep Learning supone la creación de útiles herramientas que tienen cabida en multitud de campos. Se evidencia en este trabajo su potencial en el ámbito de la medicina, permitiendo el desarrollo aplicaciones capaces de detectar elementos difíciles de encontrar incluso para expertos médicos. Es importante destacar que el uso de estas tecnologías solo suponen una herramienta de ayuda para los especialistas y nunca deben sustituirlos, ya que como se ha observado existen errores de predicción. Sin embargo, es innegable su utilidad automatizando tareas y realizándolas en pocos segundos. En este trabajo se ha desarrollado una aplicación para la detección y conteo de figuras mitóticas en tejidos de pacientes con cáncer de mama. Partiendo de una base de datos proporcionada por la organización del Tumor Proliferation Assessment Challenge, se ha entrenado un modelo de red neuronal ResNet34 aplicando diferentes técnicas para posteriormente implementarlo vía software con el desarrollo de una aplicación Python. Finalmente se ha obtenido una precisión del 98.5% sobre el dataset de partida y una detección del 92.92% de las mitosis en las pruebas realizadas sobre 23 de los casos propuestos, concluyendo con un valor F1 de 0.5253. Otro punto a señalar es la capacidad para generalizar el método aquí propuesto. Del mismo modo que se ha centrado en el caso de detección de mitosis, el flujo de trabajo a seguir para conseguir detectar otros elementos es similar, siendo importante reflexionar sobre el problema y dimensionarlo correctamente. Además, de la misma forma que el Deep Learning sirve para encontrar figuras o patrones de interés en imágenes, también puede ser usado para predecir la aparición de una enfermedad en un paciente en base a sus datos médicos. Volviendo al caso de la detección y conteo de mitosis, se concluye que los resultados fueron los deseados y que las herramientas utilizadas fueron las apropiadas. Se presenta por tanto un método eficaz y que es posible desplegar en la mayoría de dispositivos, con un entrenamiento de modelo de red neuronal que puede realizarse en poco tiempo y con recursos limitados gracias a la librería para inteligencia artificial expuesta. Como ventajas de la aplicación son destacables su precisión encontrando los elementos deseados así como el tiempo empleado en dicho proceso. Sin embargo, sería posible mejorar estos puntos con una base de datos más extensa que contemplara un mayor número de mitosis en las diferentes fases en las que pueden encontrarse y con un hardware y clasificador más rápidos que pudieran procesar un mayor número de bloques por segundo. Se señalan por tanto como dificultades del proyecto los altos requerimientos hardware que necesitan las tecnologías utilizadas y una base de datos complicada de manejar. En cuanto a las líneas de investigación futuras, campos como el de la inteligencia artificial, Machine Learning yDeep Learning están sufriendo un enorme y rápido desarrollo en los últimos años causado por el avance tecnológico en general y su popularización. Respecto a sus aplicaciones médicas, su evolución no solo irá encaminada a proyectos de mayor fiabilidad, sino que también deberá hacer frente a detractores y superar el debate ético que su uso conlleva. Sin embargo, es innegable que estas tecnologías ocuparán un importante y útil lugar en nuestras vidas en el futuro y que aún les queda un gran camino por recorrer. 57 Índice de Figuras 3.1 Esquema de una red neuronal [10] 5 3.2 Esquema del perceptrón 6 3.3 Función de activación 6 3.4 Ejemplo de una CNN [10] 7 3.5 Vista de una CNN como filtros [12] 8 3.6 Efecto de malos learning rates [13] 9 3.7 Aprendizaje pobre, buen aprendizaje y sobre-aprendizaje [14] 9 4.1 Ejemplo de entrenamiento con AlexNet 15 4.2 Arquitectura de GoogLeNet 16 4.3 Frameworks más importantes [22] 16 4.4 Comparativa entre tecnologías con una red ResNet [26]. 17 4.5 Arquitectura de ResNet34 18 4.6 Entrenamiento de ResNet34 con el dataset de prueba 19 4.7 Segundo entrenamiento de ResNet34 con el dataset de prueba 19 4.8 Imagen histológica típica proporcionada 20 4.9 Ejemplo de imagen con anotaciones (en verde) sobre mitosis 20 4.10 Esquema de las herramientas de las que hace uso la aplicacion desarrollada 21 4.11 Ejemplo del recorte de una mitosis 23 4.12 Ejemplo de data augmentation 24 4.13 Mitosis tratada con técnicas de data augmentation 25 4.14 Ejemplos de elementos en la base de datos sin figuras mitóticas 25 4.15 Estructura de directorios para el entrenamiento 27 4.16 Recursos necesarios para el entrenamiento 28 4.17 Recursos necesarios para el entrenamiento 28 4.18 Entrenamiento de la última capa del modelo 29 4.19 Clasificación de los datos para validación 29 4.20 Ejemplos de predicciones correctas 30 4.21 Ejemplos de predicciones incorrectas 30 4.22 Ejemplos de mitosis con mayor puntuación 30 4.23 Ejemplos de clase sin mitosis con mayor puntuación 30 4.24 Ejemplos de predicciones imprecisas 31 4.25 Ejecución del algoritmo y su detención en el momento en el que las pérdidas aumentan 31 4.26 Evolución de las pérdidas a medida que aumenta el learning rate 31 4.27 Función de data augmentation 32 4.28 Descenso del gradiente con reinicios 32 4.29 Entrenamiento de la última capa con esta técnica 33 4.30 Diferentes learning-rates para diferentes capas 33 4.31 Learning-rate diferencial con reinicios 33 5.1 Resultado del último entrenamiento tras aplicar fine-tuning 35 59 66 Capítulo 6. Bibliografía [15] Yu F., A Comprehensive guide to Fine-tuning Deep Learning Models in Keras. https://flyyufelix.github.io/2016/10/03/fine-tuning-in-keras-part1.html (Consultado: Junio de 2018) [16] CV-Tricks, Fine-tuning Convolutional Neural Network on own data using Keras Tensorflow http://cv-tricks.com/keras/fine-tuning-tensorflow/ (Consultado: Junio de 2018) [17] Hicklin J., Deep Learning with MATLAB: Transfer Learning in 10 Lines of MATLAB Code, MathWorks, 2017. https://es.mathworks.com/videos/series/deep-learning-with-MATLAB.html (Consultado: Junio de 2018) [18] Nehemiah A., Leung V., Deep Learning for Computer Vision with MATLAB, MathWorks. [19] MathWorks, Pretrained AlexNet convolutional neural network. https://es.mathworks.com/help/nnet/ref/alexnet.html (Consultado: Junio de 2018) [20] ImageNet, http://image-net.org/index (Consultado: Junio de 2018) [21] MathWorks, Pretrained GoogLeNet convolutional neural network. https://es.mathworks.com/help/nnet/ref/googlenet.html (Consultado: Junio de 2018) [22] den Bakker I., Battle of the Deep Learning frameworks - Part I: 2017, even more frameworks and interfaces. https://towardsdatascience.com/battle-of-the-deep-learning-frameworks-part-i (Consultado: Junio de 2018) [23] Howard J., Thomas R., About fast.ai. http://www.fast.ai/about/ (Consultado: Junio de 2018) [24] Howard J., Thomas R., Deep Learning for Coders. http://course.fast.ai/ (Consultado: Junio de 2018) [25] Tensors and Dynamic neural networks in Python with strong GPU acceleration. https://pytorch.org/ (Consultado: Junio de 2018) [26] Sako Y., Ludwiczuk B., Benchmark on Deep Learning Frameworks and GPUs. https://github.com/u39kun/deep-learning-benchmark (Consultado: Junio de 2018) [27] He K., Zhang X., Ren S., Sun J., ResNet-34 - Deep Residual Learning for Image Recognition. https://www.kaggle.com/pytorch/resnet34/ (Consultado: Junio de 2018) [28] Tumor Proliferation Assessment Challenge 2016, Dataset http://tupac.tue-image.nl/node/3 (Consultado: Junio de 2018) [29] Spyder - The Scientific Python Development Environment. https://github.com/spyder-ide (Consultado: Junio de 2018) [30] fast.ai - Making neural nets uncool again. http://www.fast.ai/ (Consultado: Junio de 2018) [31] Pillow - The friendly PIL fork. http://python-pillow.org/ (Consultado: Junio de 2018) [32] Numpy - Scientific computing. http://www.numpy.org/ (Consultado: Junio de 2018) [33] Matplotlib. https://matplotlib.org/ (Consultado: Junio de 2018) [34] Colorama. https://pypi.org/project/colorama/ (Consultado: Junio de 2018) 67 [35] Termcolor. https://pypi.org/project/termcolor/ (Consultado: Junio de 2018) [36] tqdm. https://tqdm.github.io/ (Consultado: Junio de 2018) [37] Upasana, How to handle Imbalanced Classification Problems in machine learning. https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/ (Consultado: Junio de 2018) [38] Wang S., Liu W., Wu J., Cao L., Meng Q., Kennedy P.J. Training deep neural networks on imbalanced data sets. , International Joint Conference on Neural Networks (IJCNN), 2016. 69