DocScan: Deep Learning para la segmentación de documentos escaneados
Abstract
Grado en Ingeniería Informática
Full text
Universidad de Valladolid Escuela de Ingenier´ıa Inform´ atica TRABAJO FIN DE GRADO Grado en Ingenier´ıa Inform´ atica Menci´ on en Computaci´ on DocScan: Deep Learning para la segmentaci´ on de documentos escaneados Alumno: Jorge San Jos´ e Lorza Tutor: Teodoro Calonge Cano
´ Indice general Lista de figuras III Lista de tablas V Resumen IX Abstract XI 1. Introducci´on 1 1.1. Motivaci´on.................................... 2 1.2. Estructura.................................... 3 2. Marco te´orico 5 2.1. Redes Neuronales Artificiales . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. Redes Neuronales Convolucionales . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.1. Operaci´on Convoluci´on . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.2. Pooling ................................. 11 2.2.3. Estructura de una CNN para tratamiento de im´agenes . . . . . . . 13 2.3. ArquitecturaUNET .............................. 14 2.3.1. Propuesta original . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3.2. Upsampling ............................... 17 2.3.3. T´ecnica del residuo . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4. Otros aspectos relevantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.4.1. Normalizaci´on.............................. 23 2.4.2. Funciones de activaci´on . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4.3. Funciones de p´erdida . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3. Gesti´on del proyecto 29 3.1. Metodolog´ıa de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2. ´ Epicasdelproyecto............................... 30 3.3. Planificaci´on................................... 30 3.3.1. Planificaci´on inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3.2. Variaciones respecto a la planificaci´on inicial . . . . . . . . . . . . . 32 3.4. Gesti´on de la configuraci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 i
´ Indice general 4. Plataforma de trabajo e implementaci´on 35 4.1. Conjuntodedatos ............................... 35 4.1.1. Descripci´on ............................... 36 4.1.2. Objetivos ................................ 38 4.2. Tratamiento de los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.1. Generaci´on del Ground Truth . . . . . . . . . . . . . . . . . . . . . 41 4.2.2. Algoritmos de Image Chopping . . . . . . . . . . . . . . . . . . . . 44 4.3. Implementaci´on................................. 51 4.3.1. PytorchvsKeras ............................ 51 4.3.2. Descripci´on de la aplicaci´on desarollada . . . . . . . . . . . . . . . . 52 4.3.3. Configuraci´on de la red neuronal . . . . . . . . . . . . . . . . . . . 56 4.3.4. Par´ametros relativos al entrenamiento . . . . . . . . . . . . . . . . 61 4.3.5. Creaci´on de un modelo en PyTorch . . . . . . . . . . . . . . . . . . 63 5. Resultados y API 69 5.1. Resultados.................................... 69 5.1.1. Evaluaci´on caso continuo . . . . . . . . . . . . . . . . . . . . . . . . 72 5.1.2. Evaluaci´on del caso binario . . . . . . . . . . . . . . . . . . . . . . 73 5.2. API ....................................... 82 5.2.1. Composici´on fichero HTML . . . . . . . . . . . . . . . . . . . . . . 82 5.2.2. Implementaci´on del servidor . . . . . . . . . . . . . . . . . . . . . . 85 6. Conclusiones 89 A. Manual de instalaci´on 93 B. Manual de usuario 95 Bibliograf´ıa 99 ii
´ Indice de figuras 2.1. Partes de una neurona biol´ogica. . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. Similitud entre una neurona biol´ogica y una artificial. . . . . . . . . . . . . 6 2.3. Ejemplo de una convoluci´on 2D. . . . . . . . . . . . . . . . . . . . . . . . . 9 2.4. Comparaci´on conectividad densa y conectividad dispersa. . . . . . . . . . . 11 2.5. Ejemplo de average pooling con mosaico 2x2. . . . . . . . . . . . . . . . . . 12 2.6. Ejemplo de max pooling con mosaico 2x2. . . . . . . . . . . . . . . . . . . 12 2.7. Ejemplo de convoluci´on en una imagen con tres canales de informaci´on. . . 13 2.8. Arquitectura UNET propuesta por sus autores. . . . . . . . . . . . . . . . 16 2.9. Entrada y n´ucleo para el ejemplo de convoluci´on transpuesta [10]. . . . . . 18 2.10. Ejemplo de convoluci´on transpuesta [10]. . . . . . . . . . . . . . . . . . . . 18 2.11. Ejemplo de bilinear upsampling [11]. . . . . . . . . . . . . . . . . . . . . . 19 2.12. Ejemplo de pixel shuffle con factor de escalado igual a 2. . . . . . . . . . . 21 2.13. Ejemplo explicativo t´ecnica del residuo [13]. . . . . . . . . . . . . . . . . . 22 2.14. Gr´afica de la funci´on de activaci´on ReLU. .................. 26 2.15. Gr´afica de la funci´on de activaci´on Leaky ReLU................ 27 3.1. Planificaci´on inicial del proyecto. . . . . . . . . . . . . . . . . . . . . . . . 31 3.2. Organizaci´on del repositorio. . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1. Mosaico de cuatro documentos pertenecientes al conjunto de datos. . . . . 36 4.2. Ejemplo de una imagen del dataset junto a su groundtruth. . . . . . . . . . 37 4.3. Ejemplo de elementos pertenecientes a la categor´ıa separadores. . . . . . . 40 4.4. Ejemplo de im´agenes de Ground Truth generadas. . . . . . . . . . . . . . . 42 4.5. Generaci´on de sub-cuadrantes en recursive chopping. . . . . . . . . . . . . 46 4.6. Imagen del dataset sobre la que se mostrar´a el proceso de recursive chopping. 47 4.7. Cuatro primeros chunks obtenidos para la imagen de la Figura 4.6. . . . . 48 4.8. Generaci´on de chunks en iterative chopping. . . . . . . . . . . . . . . . . . 50 4.9. Relaci´on de los elementos del esqueleto software. . . . . . . . . . . . . . . . 52 4.10. Arquitectura de la red UNET implementada. . . . . . . . . . . . . . . . . . 57 4.11. Arquitectura red neuronal I. . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.12. Arquitectura red neuronal II. . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.13. Arquitectura red neuronal III. . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.14. Arquitectura red neuronal IV. . . . . . . . . . . . . . . . . . . . . . . . . . 60 iii
´ Indice de figuras 5.1. Evoluci´on de las tasas de error a lo largo del entrenamiento. . . . . . . . . 70 5.2. Salida obtenida por la red para una imagen dada. . . . . . . . . . . . . . . 71 5.3. Binarizaci´on, con un threshold de 0.5, de la salida de la red mostrada en laFigura5.2. .................................. 71 5.4. Curva ROC de la clase pie de foto. ...................... 75 5.5. Curva ROC de la clase texto flotante...................... 76 5.6. Curva ROC de la clase pie de p´agina...................... 77 5.7. Curva ROC de la clase t´ıtulos.......................... 78 5.8. Curva ROC de la clase im´agenes. ....................... 79 5.9. Curva ROC de la clase n´umero de p´agina. .................. 80 5.10. Curva ROC de la clase p´arrafos......................... 81 5.11. Comparaci´on de un documento escaneado con su recreaci´on en formato HTML....................................... 84 5.12. Pantalla principal del servidor. . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.13. Pantalla de espera del servidor. . . . . . . . . . . . . . . . . . . . . . . . . 86 iv
´ Indice de cuadros 4.1. N´umero de apariciones de cada categor´ıa en el dataset. . . . . . . . . . . . 38 4.2. N´umero de apariciones de cada sub-categor´ıa del tipo Texto. . . . . . . . . 39 4.3. Resumen de las categor´ıas de inter´es. . . . . . . . . . . . . . . . . . . . . . 40 4.4. Sufijos de las categor´ıas de inter´es. . . . . . . . . . . . . . . . . . . . . . . 43 4.5. Im´agenes de Ground Truth generadas por categor´ıa. . . . . . . . . . . . . . 44 5.1. Evaluaci´on continua por categor´ıa. . . . . . . . . . . . . . . . . . . . . . . 72 5.2. M´etricas de evaluaci´on binaria para la categor´ıa pie de foto. ........ 74 5.3. M´etricas de evaluaci´on binaria para la categor´ıa texto flotante. . . . . . . . 75 5.4. M´etricas de evaluaci´on binaria para la categor´ıa pie de p´agina. . . . . . . . 76 5.5. M´etricas de evaluaci´on binaria para la categor´ıa t´ıtulos............ 77 5.6. M´etricas de evaluaci´on binaria para la categor´ıa im´agenes. ......... 78 5.7. M´etricas de evaluaci´on binaria para la categor´ıa n´umero de p´agina. . . . . 79 5.8. M´etricas de evaluaci´on binaria para la categor´ıa p´arrafos........... 80 5.9. Valores de threshold recomendados para cada clase. . . . . . . . . . . . . . 81 5.10. ´ Area m´ınima para considerar un elemento. . . . . . . . . . . . . . . . . . . 84 v
Agradecimientos En primer lugar, a los tutores de la empresa HP: Alejandro Viloria Lanero, H´ector Chamorro ´ Alvarez y Guillermo M´enguez ´ Alvarez, por su involucraci´on en este proyecto, en el que han puesto todo su conocimiento a mi disposici´on. Gracias a todos los profesores que han participado en mi formaci´on acad´emica, en especial a Teodoro, por guiarme en el transcurso de este proyecto, siendo una parte activa del grupo de trabajo establecido con HP. A mi ex-compa˜nero y amigo Guillermo, por prestar su ordenador personal para el entrenamiento de la red y por su preocupaci´on por la evoluci´on del proyecto durante estos meses. Gracias a mi pareja, Marta, y mis amigos, por confiar en m´ı y animarme en los momentos m´as dif´ıciles, sin ellos este trabajo no hubiese salido adelante. Y sobre todo, gracias a mi familia, por su esfuerzo durante estos a˜nos en los que siempre me han brindado todas las facilidades posibles para que mi ´unica preocupaci´on fuese completar mi formaci´on acad´emica. vii
Cap´ıtulo 1. Introducci´on formato HTML de forma que el texto, una vez procesado por un OCR, pueda ser consultado dentro de su contexto. Para el reconocimiento de las distintas zonas de un documento se ha implementado una red neuronal convolucional, en particular, bajo una arquitectura UNET. Esta se caracteriza por asignar a cada p´ıxel de la imagen de entrada una categor´ıa o probabilidad de pertenencia a la misma, de tal manera que, para cada zona del documento, se genera una nueva imagen del mismo tama˜no que la original, en la que se encuentran aislados los elementos que pertenecen a dicha categor´ıa. En nuestro caso, reconoceremos hasta siete categor´ıas distintas, por lo que la red implementada devolver´a siete im´agenes de salida por cada imagen original cargada. Tras identificar las diversas zonas del documento, estamos en disposici´on de recrearlo en un nuevo formato pero, antes, algunas de las zonas han de ser sometidas a un procesamiento previo. Este es el caso de las categor´ıas de texto, como pueden ser los encabezados, los p´arrafos o los pies de foto. Mediante el reconocimiento ´optico de caracteres (OCR) es factible identificar en una imagen los caracteres o s´ımbolos pertenecientes a un determinado alfabeto, lo que posibilita su almacenamiento en formato de datos editable. Es decir, a trav´es del OCR, podemos extraer en texto plano las palabras y frases que aparecen en una imagen. Esta tecnolog´ıa es fundamental en nuestra soluci´on, ya que es la que permite realizar la b´usqueda de una palabra o expresi´on en el documento, algo que no se pod´ıa hacer sobre el archivo original, porque se mostraba el texto como parte de una imagen. Tras reconocer las diversas zonas del documento en cuesti´on y haber realizado convenientemente los procesos de OCR necesarios, se genera el documento en el nuevo formato escogido. En este TFG, se ha optado por una recreaci´on en formato HTML pero, tanto la red neuronal, como los procesos de OCR, proporcionan todo lo necesario para reproducir el documento en cualquier otro formato. El conjunto de datos con el que se ha trabajado se denomina Layout Analysis Dataset [1]. Fue recabado y proporcionado por la Universidad de Salford. Est´a conformado por casi 500 im´agenes en alta resoluci´on, que se corresponden con p´aginas escaneadas de documentos de diversos tipos. Para cada una de estas im´agenes, se cuenta con un archivo en formato XML, en el que se contiene la informaci´on necesaria para identificar la categor´ıa presentada en cada zona del documento. 1.1. Motivaci´on Las redes neuronales tienen su origen en el a˜no 1943, con la publicaci´on por parte de McChulloch yPitts [2] del primer modelo de neurona artificial. Desde entonces, se han popularizado hasta convertirse, a d´ıa de hoy, en una de los modelos computacionales 2
1.2. Estructura m´as utilizados. Cuando en dichos modelos existen una gran cantidad de capas de neuronas, que permiten un mayor nivel de extracci´on de caracter´ısticas y, por tanto, un mayor aprendizaje, hablamos de Aprendizaje Profundo (en adelante AP). Dos aspectos fueron clave en la popularizaci´on del AP en las ´ultimas d´ecadas. Por un lado, la ingenier´ıa de caracter´ısticas encontr´o en el AP un m´etodo eficaz y objetivo de filtrado de atributos. Hasta entonces, esta tarea estaba supeditada al conocimiento del ingeniero, lo que la hac´ıa una etapa crucial y delicada, ya que una incorrecta interpretaci´on de las variables seleccionadas daba lugar a malos resultados. Con la inclusi´on de un mayor n´umero de capas, esta tarea de selecci´on de variables queda a cargo de las capas de m´as bajo nivel, mientras que las capas m´as cercanas a la salida se encargan de realizar la clasificaci´on bas´andose en las caracter´ısticas que han sobrevivido al filtrado. Por otro lado, el auge de la computaci´on heterog´enea, promovida por el abaratamiento del hardware, ha permitido, y permite, contar con grandes unidades de procesamiento a bajo coste. Esto es fundamental, ya que el AP precisa de unas prestaciones elevadas, por lo que la existencia de estas potentes unidades de c´omputo a un precio bajo ha hecho que muchas personas hayan podido formar parte de la comunidad del AP que, en buena medida, se sustenta en las aportaciones de los usuarios finales, como parte de un desarrollo colaborativo a gran escala. 1.2. Estructura Para una correcta exposici´on, el TFG se ha dividido en: •Cap´ıtulo 2. Marco te´orico. Se explican los conceptos te´oricos sobre los que se sustenta el trabajo. En primera instancia, se realiza una breve exposici´on sobre las redes neuronales en general, para introducir una exposici´on m´as detalladas de las redes convolucionales, que han sido el n´ucleo de este trabajo. En segunda instancia, se trata con un alto nivel de detalle el modelo de red UNET, arquitectura que combina de una determinada manera diversas capas de redes convolucionales. •Cap´ıtulo 3. Gesti´on del proyecto. Apartado en el que se desgranan las decisiones tomadas sobre la organizaci´on temporal de las tareas a realizar. •Cap´ıtulo 4. Plataforma de trabajo e implementaci´on. La primera parte de este cap´ıtulo se centra en la descripci´on del conjunto de datos utilizado y los tratamientos a los que han sido sometidos previamente a su entrada al sistema. En la segunda parte, se explica el esqueleto software de la soluci´on y se detallan las caracter´ısticas de la red UNET implementada. •Cap´ıtulo 5. Resultados y API. Se eval´ua la red implementada y se explica el proceso de recreaci´on del documento en formato HTML. Asimismo, se detallan los pasos para el lanzamiento de un servidor, que permite la interacci´on con la 3
Cap´ıtulo 1. Introducci´on red neuronal, para que cualquier usuario pueda enviar su documento escaneado y obtener el fichero HTML correspondiente. •Cap´ıtulo 6. Conclusiones. Se realiza una reflexi´on sobre el trabajo realizado y el aprendizaje que ha supuesto, as´ı como las l´ıneas de trabajo futuras. 4
Cap´ıtulo 2 Marco te´orico En este cap´ıtulo, se expone el concepto de red neuronal artificial y los fundamentos te´oricos sobre los que se sustentan las redes convolucionales. A partir de ellas, se construir´a una red UNET, de la que se har´a un estudio m´as detallado, debido a que no se ha visto en la carrera y, por lo tanto, ha sido uno de los retos destacados de este TFG. 2.1. Redes Neuronales Artificiales Una red neuronal artificial es un modelo computacional conformado por un conjunto de neuronas artificiales conectadas entre s´ı para transmitirse se˜nales, con el objetivo de producir un valor de salida, que d´e soluci´on a un problema concreto. El concepto de neurona artificial fue introducido por primera vez por Warren McCulloch yWalter Pitts en su trabajo [2] del a˜no 1943. En ´el, propusieron el primer modelo neuronal moderno, definiendo a la neurona artificial como una unidad de c´alculo que intenta imitar el comportamiento de una neurona natural del cerebro humano. Para comprender su funcionamiento, vamos a fijarnos antes en c´omo funciona, a peque˜na escala, una neurona natural o biol´ogica. Figura 2.1: Partes de una neurona biol´ogica. 5
Cap´ıtulo 2. Marco te´orico Las principales partes de una neurona biol´ogica son las dendritas, el soma y el ax´on. A trav´es de las dendritas, las neuronas reciben informaci´on externa que procesan en el n´ucleo o soma, la cual es enviada a otras neuronas a trav´es del ax´on. Figura 2.2: Similitud entre una neurona biol´ogica y una artificial. Como se puede ver en la Figura 2.2, en el modelo matem´atico planteado por McCulloch y Pitts [2], las entradas x1, x2, x3, ..., xnsimulan la utilidad de las dendritas en la neurona biol´ogica. Cada una de estas entradas tiene asociado un peso, w1, w2, w3, ..., wn, que se emplea para replicar el proceso de la sinapsis en la neurona. La representaci´on del n´ucleo viene dada por la suma de los procesos de sinapsis y se denomina salida anal´ogica (u). Por ´ultimo, para obtener la salida de inter´es (y), se somete a ua una transformaci´on por medio de la funci´on de activaci´on (F(u)), que emula el cuello del ax´on. La formulaci´on del modelo es la siguiente: u=w0+ n X j=1 wj·xj(2.1) y=F(u) (2.2) El objetivo es ajustar el valor de los pesos w0, ..., wnde tal manera, que se obtenga una salida de la red lo m´as parecida posible a la deseada. En el modelo propuesto por McCulloch y Pitts, la informaci´on se propaga ´unicamente hacia delante, por lo que los pesos de una neurona est´an determinados exclusivamente por el resultado generado mediante las neuronas previas. En el a˜no 1974, Werbos [3], motivado por la b´usqueda de una mejora 6
2.2. Redes Neuronales Convolucionales en el rendimiento de las redes, dio forma a la idea de la propagaci´on hacia atr´as. Mediante este mecanismo, las neuronas se sirven de la salida de los nodos posteriores para reajustar sus pesos e ir obteniendo una soluci´on m´as pr´oxima a la real. A este fin, la funci´on de activaci´on contribuye con un papel determinante en el rendimiento de la red, ya que se encarga de modelar la salida definitiva de cada una de las neuronas, por lo que una mala elecci´on puede lastrar el modelo. Existen multitud de topolog´ıas de redes neuronales distintas. Algunas de ellas son: Perceptr´on Simple, Perceptr´on Multicapa, Redes Neuronales Recurrentes, Redes Neuronales Autoorganizadas... Para el desarrollo de este trabajo estamos interesados en las Redes Neuronales Convolucionales. 2.2. Redes Neuronales Convolucionales Los inicios de las Redes Neuronales Convolucionales (CNN) se remontan al a˜no 1979 con la publicaci´on por parte de Kunihiko Fukushima de la red neuronal denominada Neocognitron [4], que sent´o las bases de las CNN. El Neocognitron es una red jer´arquica y multicapa, que se us´o principalmente para el reconocimiento de caracteres manuscritos en japon´es. Para el desarrollo del Neocognitron, Kunihiko Fukushima se bas´o en el hallazgo por parte de Hubel yWiesel [5], en el a˜no 1959, de dos tipos de c´elulas distintas en el cortex primario. La combinaci´on de dichas c´elulas, en un modelo en cascada, permit´ıa reconocer patrones visuales complejos mediante una correcta uni´on de componentes de menor nivel, que hab´ıan sido previamente reconocidos por el modelo. En el a˜no 1998, Yann LeCun [6] mejor´o el rendimiento del Neocognitron introduciendo la propagaci´on hacia atr´as en el modelo. Desde entonces, las redes neuronales convolucionales han ido ganando en importancia, hasta convertirse en una de las mejores alternativas para afrontar el procesamiento de im´agenes. 2.2.1. Operaci´on Convoluci´on La convoluci´on es un tipo especializado de operaci´on lineal que da nombre a este tipo de redes. Varios autores han descrito a las redes convolucionales como “simples redes neuronales que emplean la operaci´on convoluci´on en lugar de la multiplicaci´on general de matrices en, al menos, una de sus capa” [7]. La convoluci´on permite expresar, en t´erminos de una funci´on, la relaci´on existente entre dos funciones de entrada. Matem´aticamente la expresi´on para esta operaci´on es: 7
Cap´ıtulo 2. Marco te´orico H(x) = Z∞ −∞ I(z)K(x−z)dz (2.3) A partir de la expresi´on en forma continua, se llega a la versi´on discretizada de la misma, que es la que se emplea en este trabajo: H(x) = ∞ X m=−∞ I(m)K(x−m) (2.4) siendo: •I los datos de entrada, normalmente un array multidimensional. •K el kernel, que es un array multidimensional de los par´ametros de los que se desean aprender los valores. Suele ser de menor tama˜no que I. •H la salida de la operaci´on convoluci´on, denominada en el argot de las CNN como el mapa de caracter´ısticas. Tal y como se puede observar en (2.4) la suma se realiza sobre todo el espacio. Para poder realizar la operaci´on, se determina que I y K sean dos tensores, que valen 0 en todas sus posiciones, a excepci´on de aquellas que se corresponden con el dominio de inter´es en los que toma los valores correspondientes. De esta forma, la suma se reduce al conjunto finito de puntos deseado. En el caso que nos ata˜ne, los datos de entrada son im´agenes. Para poder emplear la operaci´on convoluci´on, es necesario interpretar cada una de ellas como un array bidimensional. Igualmente, el kernel tambi´en puede ser considerado en dos dimensiones, de tal forma que la formulaci´on discreta queda de la siguiente forma: H(i, j) = X mX n I(m, n)K(i−m, j −n) (2.5) Existen otras formulaciones de (2.5) que son m´as ´optimas para la resoluci´on de problemas de Aprendizaje Profundo. Las dos m´as habituales son: H(i, j) = X mX n I(i−m, j −n)K(m, n) (2.6) H(i, j) = X mX n I(i+m, j +n)K(m, n) (2.7) 8
2.2. Redes Neuronales Convolucionales La formulaci´on propuesta en (2.6) se obtiene al aplicar la propiedad conmutativa en (2.5), mientras que (2.7), denominada correlaci´on cruzada, no representa estrictamente la operaci´on convoluci´on, ya que no emplea el kernel volteado para hacer los c´alculos. Aun as´ı, en muchas bibliotecas de Aprendizaje Profundo, se utiliza bajo el nombre de convoluci´on. Como se ha especificado con anterioridad, lo m´as habitual es que el Kernel sea de me- nor tama˜no que los datos de entrada por lo que, para realizar la convoluci´on, es necesario interpretar el Kernel como una ventana m´ovil que se va desplazando a lo largo de los datos de entrada para ir realizando la operaci´on. Esta idea puede verse claramente en la Figura 2.3, en la que se toma como datos de entrada un array bi-dimensional, como puede serlo una imagen. Figura 2.3: Ejemplo de una convoluci´on 2D. El kernel se desplaza a lo largo de la imagen siguiendo un movimiento de izquierda a derecha y de arriba a abajo, al igual que nuestra forma de lectura. Para cuantificar el desplazamiento entre una aplicaci´on del kernel y la siguiente tenemos el concepto de strides. Mediante ´el, podemos modelizar el n´umero de p´ıxeles que debe moverse el kernel en cada desplazamiento que realice, tanto en la direcci´on horizontal como en la vertical. Si no se indica lo contrario, el kernel empleado es el (1,1) lo que significa que en cada desplazamiento ya sea horizontal o vertical, el n´ucleo avanzar´a un pixel. En el caso de que el stride sea (2,1), el n´ucleo debe desplazarse dos p´ıxeles en cada movimiento horizontal y uno por cada desplazamiento vertical. Tal y como se observa en la Figura 2.3, el mapa de caracter´ısticas resultante es de me- nor tama˜no que los datos de entrada, fen´omeno que se denomina efecto de bordes. Aunque en un principio no pueda parecer problem´atico, realmente s´ı lo es, ya que si la red neuronal cuenta con m´ultiples capas, es posible que en alg´un punto de la misma se deje de contar 9
Cap´ıtulo 2. Marco te´orico con datos de entrada al haber sido reducida su dimensionalidad, incluso, hasta llegar a cero. Para poner remedio a este fen´omeno, se introduce el padding, que consiste en a˜nadir el n´umero de filas y columnas necesarias a cada lado del mapa de caracter´ısticas tomado como entrada por una convoluci´on. De esta forma, la salida tiene el mismo tama˜no que la entrada. Lo m´as habitual es que las filas y columnas a˜nadidas sean nulas, es decir, est´en compuestas por 0’s. En funci´on de la decisi´on tomada sobre el padding, se pueden identificar tres posibles casos [8]: •valid convolution: no se realiza padding, lo que tiene como consecuencia la disminuci´on del mapa de caracter´ısticas despu´es de cada convoluci´on. •same convolution: se a˜naden filas y columnas hasta que el tama˜no del mapa de caracter´ısticas de salida sea igual al tama˜no de la entrada. Tiene como consecuencia una disminuci´on de la influencia de los pixeles cercanos al borde. •full convolution: se a˜naden tantas filas y columnas como sea necesario para que todos los pixeles sean ”visitados”por el kernel el mismo n´umero de veces. De esta manera se solventa el problema de una influencia mayor de unos pixeles respecto a otros. Entre las ventajas que ofrece la operaci´on convoluci´on frente al multiplicado tradicional de matrices en las redes neuronales, se encuentran las siguientes: •Conectividad dispersa: A diferencia de lo que ocurre con las redes tradicionales, en las convolucionales, no es necesario que las neuronas de una capa tengan como entrada las salidas de todos los nodos de la capa previa, la conocida como conectividad densa. Esto se debe al empleo de un kernel de menor tama˜no que la entrada. Teniendo en cuenta que, cada uni´on entre dos neuronas, se considera como un par´ametro en la red, esto supone una reducci´on de los requisitos de memoria y procesamiento del modelo, as´ı como una mejora en su eficiencia. Igualmente, permite detectar caracter´ısticas simples, como l´ıneas, cuya composici´on puede dar lugar a la detecci´on de caracter´ısticas m´as complejas. 10
2.2. Redes Neuronales Convolucionales Figura 2.4: Comparaci´on conectividad densa y conectividad dispersa. •Compartici´on de par´ametros: mientras que en las redes neuronales, cada elemento de la matriz de pesos se usa una vez, en las redes convolucionales cada peso del kernel se emplea en cada operaci´on de convoluci´on. Esto tiene como consecuencia un aprendizaje basado en un ´unico conjunto de datos. •Representaciones equivalentes: el impacto de una traslaci´on en el conjunto de entrada no afecta a la salida, ya que la convoluci´on verifica la equivarianza entre ambas. Esto no es trasladable a la rotaci´on o el escalado. La convoluci´on es la operaci´on fundamental de las CNN, pero no es la ´unica funci´on diferencial de este tipo de redes, tambi´en es de vital importancia el submuestreo de caracter´ısticas o pooling. 2.2.2. Pooling El submuestreo de caracter´ısticas es fundamental para el correcto funcionamiento de las CNN, ya que permite dotar a la red neuronal de la capacidad suficiente como para clasificar im´agenes correctamente, sin que importe que existan variaciones en las posiciones de los objetos en la imagen. Esto quiere decir que la clasificaci´on se centrar´a en detectar la presencia o ausencia de unas ciertas caracter´ısticas, sin importar su localizaci´on. 11
Cap´ıtulo 2. Marco te´orico 3. A˜nadir alrededor de la imagen un n´umero de ceros igual a p′. 4. Aplicar la operaci´on convolucional con un stride, s’ igual a 1, a la imagen de entrada, tras haber sido modificada siguiendo los pasos anteriores. A modo de ejemplo, sean una entrada y un kernel de dimensiones (4,4) y (3,3), respectivamente, como los mostrados en la Figura 2.9. Figura 2.9: Entrada y n´ucleo para el ejemplo de convoluci´on transpuesta [10]. Considerando un stride y un padding igual a 1 (p = s = 1), los resultados de cada uno de los pasos descritos son los que se observan en la Figura 2.10. Figura 2.10: Ejemplo de convoluci´on transpuesta [10]. Como podemos ver en la Figura 2.10, la salida obtenida es de tama˜no (7,7). Para cualquier conjunto de par´ametros que definan la operaci´on convoluci´on transpuesta, el tama˜no de salida ser´a (o,o), pudi´endose calcular ocomo en la Ecuaci´on 2.11. o= (i−1)xs +k−2p(2.11) •Bilinear upsampling: T´ecnica basada en la interpolaci´on bilineal [11]. Actualmente es una de las m´as empleadas en el procesamiento de im´agenes. 18
2.3. Arquitectura UNET Mediante la interpolaci´on bilineal aplicada a cada pixel de la salida es posible realizar la operaci´on de upscampling. Para cada uno de los nuevos pixels de la salida, se consideran los cuatro pixels conocidos m´as cercanos para realizar una media ponderada de los mismos e interpolar dicho resultado. Este valor es el que se asigna al pixel desconocido. Los cuatro pixels conocidos conforman un rect´angulo que, en su interior, alberga los nuevos pixels, cuyos valores han de ser calculados. Los pasos para calcular el valor de un pixel nuevo son: 1. Hallar la media ponderada de los valores conocidos situados en las esquinas superiores del rect´angulo, teniendo en cuenta la posici´on relativa del pixel que queremos interpolar respecto a los conocidos. 2. De igual manera, calcular la media ponderada de los valores situados en las esquinas inferiores. 3. Calcular la media ponderada de los dos resultados previos teniendo en cuenta la posici´on del pixel de referencia. Para ilustrar los pasos propuestos contamos con la Figura 2.11. Figura 2.11: Ejemplo de bilinear upsampling [11]. Sean los pixeles conocidos, los correspondientes a las posiciones (20,14), (20,15), (21,14) y (21,15), siendo el primer valor la referencia a la fila y el segundo a la columna. Si el pixel a interpolar es el situado en (20.2,14.5), entonces: 1. Interpolamos para calcular (20,14.5): IA=15 −14,5 15 −14 ·91 + 14,5−14 15 −14 ·210 = 150,5 19
Cap´ıtulo 2. Marco te´orico 2. Idem con los pixels inferiores, hallando (21,14.5): IB=15 −14,5 15 −14 ·162 + 14,5−14 15 −14 ·95 = 128,5 3. Haciendo uso de IAyIBcalculamos (20.2,14.5): Ipixel =21 −20,2 21 −20 ·IA+20,2−20 21 −20 ·IB= 146,1 Al igual que la interpolaci´on bilineal, tambi´en se utilizan con frecuencia la nearestneighbor interpolation y la bicubic interpolation, entre muchas otras. •Pixel Shuffle: Tiene su origen en el a˜no 2016, cuando se propuso como parte de una red neuronal para el tratamiento en tiempo real de im´agenes y v´ıdeos en s´uper-resoluci´on [12]. Sus autores se basaron en la idea de los sub-pixels de una imagen para crear esta t´ecnica. Un sub-pixel es la unidad m´ınima que compone un pixel. Por ejemplo, en im´agenes en formato (R,G,B), cada pixel est´a conformado por tres sub-pixels (uno para la componente R, otro para Gy un ´ultimo para B). Trasladando esta idea de sub-pixels al problema del upsampling, cada pixel de la salida obtenida est´a formado por varios pixels de la entrada, que act´uan como si fuesen sus sub-pixels. La relaci´on entre las dimensiones de la entrada y la salida de esta operaci´on es la siguiente: (entrada) (r2·C)x H x W −> C x (H·r)x(W·r) (salida) donde: ◦r: es el factor de escalado. ◦C: indica el n´umero de canales que se generar´an en la salida. ◦H: n´umero de pixels en la componente “y” de la entrada. ◦W: n´umero de pixels en la componente “x” de la entrada. El n´umero de pixels en la entrada es el mismo que el obtenido en la salida, ya que ´unicamente se produce una reorganizaci´on de los pixels en un menor n´umero de canales, tal y como puede verse en la Figura 2.12. 20
2.3. Arquitectura UNET Figura 2.12: Ejemplo de pixel shuffle con factor de escalado igual a 2. En el caso mostrado en la Figura 2.12, se obtiene un ´unico canal de salida, ya que se considera un factor de escalado igual a la ra´ız del n´umero de canales. En caso de haber contado con 8 canales de entrada y haber mantenido r= 2, se habr´ıan obtenido dos canales de salida generados mediante esta t´ecnica. Para realizar la reorganizaci´on de los pixels, se realiza una convoluci´on sobre la entrada con un stride igual a 1 r. Si esta operaci´on se realiza con un filtro Wsy un espaciado entre pesos de 1 r, entonces est´a demostrado que s´olo ciertas partes de Wsestar´an activas en un mismo instante de la convoluci´on. En total, existen hasta r2patrones de activaci´on diferentes, que se van sucediendo a lo largo de la convoluci´on. Los autores del Pixel Shuffle realizaron una reformulaci´on de la operaci´on convoluci´on, con stride =1 r, para aprovechar estos patrones y mejorar as´ı su rapidez. Seg´un los resultados presentados en [12], con esta nueva formulaci´on, la ejecuci´on del upsampling fue log2r2veces m´as r´apida que con la convoluci´on transpuesta. 2.3.3. T´ecnica del residuo Como se mencion´o en la Secci´on 2.1 las redes neuronales utilizan la retropropagaci´on del error para corregir su comportamiento y mejorar su precisi´on. Para ello, los distintos par´ametros de la red ven modificados su valor en funci´on de la magnitud del error cometido en la salida. En las redes que cuentan con m´ultiples capas, las denominadas redes profundas, es posible que esta retropropagaci´on no alcance a las primeras capas, si las ´ultimas “absorben” todo el error. Esto provoca que las capas iniciales no reajusten sus par´ametros y, en consecuencia, no mejoren sus resultados. A este fen´omeno se le denomina 21
Cap´ıtulo 2. Marco te´orico Figura 2.13: Ejemplo explicativo t´ecnica del residuo [13]. desvanecimiento del gradiente. Para evitar este fen´omeno, los autores de la red UNET proponen trasladar las distintas salidas de las capas de la ruta de contracci´on, a las entradas de las respectivas capas de la ruta de expansi´on (ver Figura 2.8). En su propuesta, estas salidas son concatenadas con las que deber´ıan ser las entradas de cada una de las capas. De esta forma, la red toma como entrada el doble de canales de los esperados, correspondiendo la mitad a la salida obtenida hasta ese momento y la otra mitad a la salida obtenida en varias capas anteriores. Gracias a ello, la red percibe los errores que se producen en las primeras capas y evita que se produzca el mencionado desvanecimiento del gradiente. Otra forma de hacer frente a este problema es la denominada t´ecnica del residuo [13]. Para explicar el funcionamiento de la misma, se plantea la situaci´on de la Figura 2.13. Como puede observarse en la Figura 2.13 la t´ecnica del residuo propone trasladar el valor obtenido en cierto punto de la red a otro punto m´as lejano de la misma, creando lo que se denomina lazo de residuo. En el punto final del lazo de residuo se suma, al valor obtenido hasta dicho punto, el obtenido por la red en el punto inicial del lazo, x. La suma de ambos da como resultado un nuevo valor denominado Y, que se puede descomponer como Y=x+F(x). Teniendo en cuenta que xes el valor al inicio del lazo e Ydel final del mismo, entonces F(x) es la variaci´on sufrida por xa lo largo de las capas contenidas en el lazo. Por ello, a esto se le denomina residuo y, gracias a ellos, la red es capaz de paliar el problema del desvanecimiento del gradiente. En el caso de la arquitectura UNET, lo m´as habitual es establecer un lazo de residuo por cada nivel de profundidad de la red. As´ı, para el caso de la arquitectura original (ver Figura 2.8) se pueden establecer hasta cuatro lazos que l´ogicamente, ir´an desde cada una de las capas de la ruta de contracci´on, a las respectivas en la ruta de expansi´on. 22
2.4. Otros aspectos relevantes 2.4. Otros aspectos relevantes A la hora de modelizar una red neuronal existen ciertos elementos, que son imprescindibles, y que no se han descrito en las secciones previas. Es el caso de la normalizaci´on, las funciones de activaci´on y las funciones de p´erdida. 2.4.1. Normalizaci´on La normalizaci´on es un proceso que se lleva a cabo sobre los datos que van a servir de entrada de una red neuronal. Consiste en ajustar los valores de dichos datos a un mismo rango, para que la red pueda interpretarlos correctamente. En las redes convolucionales, tambi´en es habitual realizar este proceso cada vez que se realiza una convoluci´on, ya sea antes, o despu´es, de la misma, como vimos en la Secci´on 2.2.3. Algunas de las ventajas asociadas al uso de la normalizaci´on en las diferentes capas de la red son las siguientes [14]: •Evita que las caracter´ısticas que cuentan con valores m´as altos, tomen un mayor protagonismo sobre otras con valores m´as bajos, pero que pueden ser igual o m´as determinantes. •Reduce el cambio de covarianza interna. Este concepto hace referencia a los cambios que se producen en la distribuci´on de las activaciones de la red, como consecuencia de la modificaci´on de los par´ametros de la misma a lo largo del entrenamiento. •Provoca que la optimizaci´on de la red se d´e m´as r´apido, ya que los valores de los pesos se encuentran restringidos a un determinado rango. •Ayuda a la red en la regularizaci´on, aunque no de forma significativa. Matem´aticamente, la normalizaci´on en las capas de una red neuronal se puede expresar como: y=x−E[x] pV ar[x] + ϵ∗γ+β(2.12) donde: •x, representa los valores a normalizar. En el caso del procesamiento de im´agenes se corresponde con un tensor de 4 dimensiones (M,C,H,W), que son: M el tama˜no del lote, C el n´umero de canales, y H, W las dos dimensiones de las im´agenes. •E(x), la esperanza de los datos. 23
Cap´ıtulo 2. Marco te´orico •Var(x), la varianza de los datos. Se calcula mediante es estimador del bias. •ϵ, valor que aporta estabilidad num´erica. •γyβ, par´ametros de aprendizaje de la red. Son vectores de tama˜no C. En las redes convolucionales es habitual que se procesen varias im´agenes a la vez, formando un batch o lote. Retomando la nomenclatura anterior, el batch se corresponde con el tensor de 4 dimensiones al que denominamos xy cuya primera dimensi´on, M, ser´ıa igual al tama˜no del lote, es decir, al n´umero de im´agenes que est´a procesando la red en una iteraci´on. La formulaci´on de la normalizaci´on (ver Ecuacion 2.12, permite varias interpretaciones en funci´on de c´omo se quiera emplear el lote. Batch Normalization [15] es el nombre que recibe la idea de realizar la normalizaci´on considerando todo el lote como una ´unica unidad. De esta forma, se emplean los datos de todos los canales, de todos los componentes del lote, para calcular los par´ametros necesarios y aplicar la misma normalizaci´on a todos ellos. En t´erminos matem´aticos, esto se traduce al c´alculo de una ´unica esperanza y varianza para llevar a cabo la normalizaci´on. Por el contrario, Instance Normalization [16] realiza una normalizaci´on diferente para cada imagen del lote. Para cada una de ellas, se calcula una esperanza y varianza utilizando ´unicamente los canales de dicha imagen, lo que hace que el proceso de normalizaci´on sea distinto para cada una de ellas. En total, si el lote cuenta con T im´agenes, se calculan T esperanzas y T varianzas, que sirven para llevar a cabo T normalizaciones. Existen otros tipos de normalizaci´on [14], como Group Normalization, que se ejecutan sobre distintos grupos de canales, o Layer Normalization. As´ı pues, realiza una normalizaci´on de la entrada a trav´es de sus caracter´ısticas. Incluso, se puede optar por normalizar los pesos de la red, en vez de la entrada como propone la Weight Normalization. 2.4.2. Funciones de activaci´on Son una parte fundamental de las redes neuronales, ya que se encargan de generar la salida de una neurona en funci´on de la entrada recibida. Se pueden diferenciar en dos grandes grupos: funciones de activaci´on lineales yfunciones de activaci´on no lineales. Las lineales presentan dos problemas principales: 24
2.4. Otros aspectos relevantes 1. No permiten la retropropagaci´on, ya que su derivada es una constante y por tanto no guarda ning´un tipo de relaci´on con la entrada. 2. Provoca un comportamiento lineal de la red. Por ejemplo, si se emplea la funci´on identidad, la red se comportar´a como una regresi´on simple. Para solventar estos problemas, se utilizan las funciones no lineales. Para las tareas de multi-clasificaci´on con modelos de regresi´on log´ıstica, se suele emplear la funci´on softmax. En el caso de clasificaciones binarias, es habitual el uso de la funci´on sigmoide o la tangente hiperb´olica. La funci´on softmax [17] devuelve, para una entrada, su probabilidad de pertenencia a cada grupo existente. Por tanto, la suma de todos los valores devueltos por esta funci´on suman 1. Sea la entrada z, compuesta por ielementos y K, el n´umero de posibles clases. Su formulaci´on matem´atica es la mostrada en la Ecuaci´on 2.13. softmax(z)i=ezi PK j=1 ezj (2.13) Por su parte, la funci´on sigmoide [17] (ver Ecuacion 2.14) devuelve valores normalizados entre cero y uno, pero que no representan probabilidades de pertenencia. y=1 1 + e−x=ex ex+ 1 (2.14) Entre los inconvenientes del uso de esta funci´on destacan los siguientes: •Coste computacional elevado. •La salida no est´a centrada en el cero, lo que provoca que las actualizaciones de los gradientes vayan demasiado lejos en diferentes direcciones. Esto lleva a una optimizaci´on m´as costosa. •El aprendizaje de la red es muy lento. La funci´on de la tangente hiperb´olica [17] (ver Ecuaci´on 2.15) presenta su salida acotada en el intervalo [−1,1]. Es considerada como un escalamiento de la funci´on sigmoide por lo que, a pesar de tener una salida centrada en el 0, sigue siendo problem´atica en cuanto al gradiente. y=2 1 + e−2x−1 (2.15) 25
Cap´ıtulo 2. Marco te´orico En la actualidad existe otra funci´on de activaci´on que es usada con m´as frecuencia que estas dos. Esta funci´on es la ReLU,Rectificador Lineal Unitario, y es la que se emple´o en la propuesta de la arquitectura UNET [9]. Su formulaci´on matem´atica es la siguiente. f(x) = max(0, x) (2.16) La funci´on ReLU [17] imita el comportamiento de la funci´on identidad para valores de entrada positivos, y, para los valores negativos, devuelve el valor cero. Gr´aficamente podemos ver su comportamiento en la Figura 2.14. Figura 2.14: Gr´afica de la funci´on de activaci´on ReLU. Las principal ventaja de esta funci´on es su bajo coste computacional, lo que permite que la red aprenda y converja r´apidamente. Como inconveniente, provoca la aparici´on de neuronas zombies, que son aquellas que no pueden llevar a cabo el aprendizaje. Este problema surge al considerar una salida igual a cero para los valores negativos de entrada, porque provoca que el gradiente correspondiente a las respectivas neuronas tambi´en sea cero, imposibilitando cualquier atisbo de aprendizaje en las mismas. La funci´on Leaky ReLU ([17]), ver Ecuaci´on 2.17, propone una modificaci´on de la 26
2.4. Otros aspectos relevantes funci´on ReLU para evitar la aparici´on de neuronas zombies. f(x) = x si x > 0 x·α si x ≤0 (2.17) Como puede verse en la Figura 2.15, los valores negativos presentan una peque˜na pendiente que permite llevar a cabo la retropropagaci´on del error a las neuronas correspondientes. Sin embargo, las predicciones realizadas sobre estos valores no son consistentes. Figura 2.15: Gr´afica de la funci´on de activaci´on Leaky ReLU. Podemos encontrar muchas otras funciones basadas en modificaciones sobre la funci´on ReLU, como pueden ser PReLU,ELU oThreshold ReLU Function, pero no van a ser consideradas en este trabajo [17]. 2.4.3. Funciones de p´erdida En las redes neuronales, se utiliza la funci´on de p´erdida para evaluar la calidad de la salida obtenida, por medio de una comparaci´on respecto a la salida deseada. El grado de similitud entre la salida obtenida y la real determina el proceso de aprendizaje de la red, por lo que la elecci´on de la funci´on de p´erdida es un paso cr´ıtico. Para establecer comparaciones entre im´agenes, existen varias funciones que pueden ser utilizadas. A continuaci´on se proponen tres de ellas. •MSE: El MSE, o error cuadr´atico medio, es una de las funciones de p´erdidas m´as utilizadas. Sea xla salida obtenida por la red e yla salida deseada, ambos tensores de un tama˜no n, entonces: MSE(x, y) = 1 nX n (xn−yn)2(2.18) 27
Cap´ıtulo 3. Gesti´on del proyecto superior a 11GB. La organizaci´on de los directorios en la m´aquina utilizada es la misma que la mostrada, a excepci´on de una nueva rama que contiene los datos. Finalmente, para la documentaci´on del proyecto se ha utilizado el editor de texto TexStudio que permite la generaci´on de documentos bajo el sistema de composici´on de textos L A T EX. 34
Cap´ıtulo 4 Plataforma de trabajo e implementaci´on En primer lugar, se realiza una exposici´on del conjunto de datos, sobre el que se ha trabajado, definiendo tanto las caracter´ısticas del mismo, como los objetivos fijados. En segundo lugar, se explican los procesos de tratamiento a los que han sido sometidos los datos, para adecuarlos a la realidad del problema. En tercer, y ´ultimo lugar, se justifica el uso de pytorch frente a keras para alcanzar los objetivos. Se detalla la configuraci´on de la aplicaci´on desarrollada, as´ı como las caracter´ısticas de la red implementada. 4.1. Conjunto de datos El conjunto de datos empleado en este trabajo fue elaborado por la Universidad de Salford y recibe el nombre de Layout Analysis Dataset [1] (en adelante LAD). Sus autores lo definen como un “conjunto realista de documentos contempor´aneos” y est´a disponible para su uso bajo petici´on a la Universidad. Cuenta con una p´agina web [21], en la que es posible explorar su contenido. Fue creado para su utilizaci´on en reconocimiento de layouts de documentos. Dicha tarea consiste en reconocer y categorizar las distintas zonas de un documento, en funci´on del contenido de las mismas. Aunque ya exist´ıan m´ultiples conjuntos de datos elaborados para estos fines, los autores de LAD consideraban que no eran lo suficientemente ´optimos, ya que ninguno cumpl´ıa con los tres requisitos que, a su juicio, deber´ıan reunir: •Realismo: ser representativo de los documentos reales que probablemente se escaneen en situaciones cotidianas. •Completitud: contener informaci´on detallada que permita una evaluaci´on en profundidad. 35
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on •Estructuraci´on flexible: facilidad para buscar y seleccionar subconjuntos que cumplan ciertas condiciones espec´ıficas. 4.1.1. Descripci´on Para generar un conjunto de datos que cumpliese con el primero de los requisitos descritos, contaron con un grupo de expertos, que los ayud´o a realizar una selecci´on lo m´as pr´oxima a la realidad posible. La mayor parte de los documentos, que conforman el conjunto, se pueden dividir en dos tem´aticas: revistas o peri´odicos, y, art´ıculos cient´ıficos o t´ecnicos. Los expertos estimaron la frecuencia de cada uno de estos grupos en la vida cotidiana y propusieron una proporci´on 7 a1 a favor de las revistas y peri´odicos. En menor medida, existen otro tipo de documentos, que tambi´en son incluidos en el dataset, como pueden ser formularios,extractos bancarios yanuncios. En total, el n´umero de instancias contenidas en el dataset proporcionado es de 478, siendo, cada una de ellas, una p´agina escaneada de un documento que se presenta bajo el formato de imagen .tif. Las im´agenes est´an en alta resoluci´on y tienen un gran tama˜no, siendo las dimensiones medias de 3179 pixels de alto y 2377 de largo. Figura 4.1: Mosaico de cuatro documentos pertenecientes al conjunto de datos. 36
4.1. Conjunto de datos La estructura, o layout, de cada uno de estos documentos se presenta en un archivo XML bajo el mismo nombre que la imagen correspondiente. Cada una de las zonas del documento tiene asignado un tipo, que indica su naturaleza. Algunas de estas categor´ıas son: texto,l´ınea,gr´aficos,tablas,f´ormulas matem´aticas... Tambi´en tiene asignadas una serie de coordenadas que permiten cercar el ´area correspondiente, utilizando pol´ıgonos irregulares, que aportan un mayor grado de precisi´on que formas m´as simples, como pueden ser los rect´angulos empleados en otros datasets. Adicionalmente, en funci´on del tipo de zona de la que se trate, se cuenta con informaci´on extra que, en muchos casos, puede ser de utilidad. Por ejemplo, si la zona se corresponde con un texto, se tiene informaci´on sobre el lenguaje en el que est´a escrito, el tama˜no y color de la fuente, la direcci´on de lectura, etc´etera. Figura 4.2: Ejemplo de una imagen del dataset junto a su groundtruth. En la Figura 4.1.1, se muestra un ejemplo de los distintos campos que se pueden reconocer dentro de una imagen, gracias a su correspondiente fichero XML. Como se puede observar, no existe ni un solo campo que no est´e reconocido y delimitado, ya que hasta las l´ıneas est´an identificadas. Las zonas est´an perfectamente ajustadas a las dimensiones del contenido, incluso en el caso de las figuras m´as complejas como el autom´ovil. 37
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on 4.1.2. Objetivos Como se mencion´o en el Cap´ıtulo 1, el objetivo de este TFG era desarrollar un modelo de segmentaci´on de im´agenes, que permitiese reconocer las diversas zonas de un documento, para posteriormente poder recomponerlo en un formato distinto. La variedad de informaci´on, que puede encontrarse en documentos de diferentes ´ambitos, es muy amplia, por lo que existen m´ultiples categor´ıas que pueden ser reconocidas en un dataset, como con el que vamos a trabajar. Por ello, nuestro modelo de segmentaci´on va a restringirse a un peque˜no grupo de estas categor´ıas, ya que intentar abarcarlas todas implicar´ıa un esfuerzo computacional demasiado elevado. Se ha decidido escoger aquellas con mayor presencia en el dataset, para as´ı obtener los mejores resultados posibles. Para ello, se realiz´o un recuento de las distintas regiones que se contemplan en el conjunto de datos. Los resultados obtenidos se muestran en el Cuadro 4.1. Categor´ıa N º de apariciones Texto 8293 Separadores 937 Im´agenes 583 Gr´aficos 374 Ruido 93 Tablas 48 Cuadro 42 Form. Matem´atica 42 Marcos 15 L´ıneas 14 Total 10441 Cuadro 4.1: N´umero de apariciones de cada categor´ıa en el dataset. Como era de esperar, pr´acticamente todas las regiones detectadas se corresponden con texto, siendo el porcentaje sobre el total del 79.45 %. Dentro de la categor´ıa texto podemos encontrar m´ultiples sub-categor´ıas, por lo que no van a considerarse todas ya que, como vemos en el Cuadro 4.2, muchas de ellas apenas tienen presencia. 38
4.1. Conjunto de datos Sub-categor´ıa N º de apariciones P´arrafos 5188 T´ıtulos 945 Pies de p´agina 467 N º de p´agina 418 Pie de foto 390 Cr´editos 280 Texto flotante 276 Letra may´uscula 176 Encabezado de p´agina 153 Total 8293 Cuadro 4.2: N´umero de apariciones de cada sub-categor´ıa del tipo Texto. Tras hablar con los tutores de HP, se acord´o elegir entre cinco y ocho categor´ıas distintas. En vista a los resultados mostrados en los Cuadros 4.1 y 4.2, finalmente se opt´o por un total de siete, que son: p´arrafos,t´ıtulos,im´agenes,pies de p´agina,n º de p´agina, pie de foto ytexto flotante. La categor´ıa de texto flotante es, de las escogidas, la que tiene un nombre menos descriptivo. Hace referencia a textos que no terminan de encajarse a la definici´on de p´arrafo pero podr´ıan serlo perfectamente. De hecho, en ocasiones, estos textos son parte de un p´arrafo que comienza en una columna y acaba en otra distinta, siendo el texto de la nueva columna la que se considera como texto flotante. Otras veces, hace referencia a textos entre p´arrafos que se salen del formato, para dar una mayor notoriedad a la idea de la que se est´a hablando. En definitiva, se considera como texto flotante, a todo aquel que no termina de encajar en la categor´ıa de p´arrafo, pero si se tuviese que encasillar en alguna categor´ıa, ser´ıa en ella. Existen dos clases que, a pesar de estar entre las siete con mayor frecuencia, no han sido escogidas. Para la introducci´on de la categor´ıa texto flotante, se ha tenido que prescindir de la categor´ıa cr´editos. El texto etiquetado como “cr´editos” es todo aquel que aporta informaci´on, al lector, sobre la autor´ıa del propio documento o de alguno de los contenidos del mismo. La relevancia, que puede llegar a tener el texto etiquetado como flotante es mucho mayor para el lector, que el que puede tener los cr´editos por lo que, a pesar de tener una menor frecuencia, se ha elegido la categor´ıa flotante en detrimento de los cr´editos. La clase separadores, aunque es la segunda con mayor n´umero de apariciones, no ha sido considerada, ya que carece de inter´es pr´actico. Se tratan de elementos gr´aficos empleados para remarcar una separaci´on entre distintas zonas (ver Figura 4.1.2). Para el lector del documento, estos elementos no aportan informaci´on alguna, por lo que se ha optado por no considerarlos, en favor de otros grupos m´as interesantes. 39
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on Figura 4.3: Ejemplo de elementos pertenecientes a la categor´ıa separadores. Entre todas las categor´ıas escogidas, se contemplan el 79.18 % de las distintas zonas de los documentos, correspondi´endose el 93 % diferentes sub-categor´ıas del tipo texto y, tan s´olo el 7 % restante, a im´agenes. A modo de resumen, en el Cuadro 4.3, se muestran las clases escogidas y su relevancia dentro del conjunto de datos. Categor´ıa Total % del considerado % del total P´arrafos 5188 62.76 49.69 T´ıtulos 945 11.43 9.05 Im´agenes 583 7.05 5.59 Pies de p´agina 467 5.65 4.47 N º de p´agina 418 5.06 4.00 Pie de foto 390 4.72 3.74 Texto flotante 276 3.33 2.64 Total 8267 100 79.18 Cuadro 4.3: Resumen de las categor´ıas de inter´es. 40
4.2. Tratamiento de los datos 4.2. Tratamiento de los datos Con el objetivo de poder utilizar el conjunto de datos en el entrenamiento de la red neuronal, es necesario realizar sobre ´el dos tratamientos diferentes. El primero de ellos es la generaci´on del Ground Truth, que se realiza en fr´ıo, es decir, antes de comenzar el entrenamiento; el segundo de ellos, es someter las im´agenes a un proceso de chopping que, se realiza en caliente, es decir, durante la ejecuci´on. 4.2.1. Generaci´on del Ground Truth El Ground Truth es un t´ermino que hace referencia a la variable respuesta de un conjunto de datos. Su mayor peculariedad es que no tiene por qu´e ser exacta, sino que en la mayor´ıa de las ocasiones est´a sujeta a la interpretaci´on de los desarrolladores del conjunto de datos. Por ejemplo, en un dataset de im´agenes de perros el Ground Truth contendr´a las etiquetas de “peligroso” o “no peligroso”, en funci´on de lo que determinen las personas responsables. En nuestro problema, el Ground Truth no se restringe a catalogar una imagen como perteneciente a un grupo o a otro, sino que va un paso m´as all´a: se realiza una clasificaci´on pixel a pixel. Para cada categor´ıa, de la que se tiene constancia, se puede definir su propio Ground Truth como una clasificaci´on de las zonas del documento, en funci´on de su pertenencia a dicha categor´ıa. De esta forma, el Ground Truth para una determinada clase, es una clasificaci´on binaria de sus pixels, tomando el valor 1 aquellos que se corresponden con ella y, 0 en caso contrario. Como dijimos en la Secci´on 4.1.1, queremos ser capaces de reconocer hasta siete categor´ıas distintas. Esto quiere decir que, para cada muestra del conjunto de datos, se van a generar siete im´agenes diferentes de id´enticas dimensiones a la original, en las que las zonas correspondientes a cada clase se marcan con un color blanco y, el resto, en color negro. De esta forma, si se superponen las im´agenes generadas, se obtiene una ´unica, en la que s´olo las zonas de las categor´ıas de inter´es est´an remarcadas. Gracias a que para cada documento tenemos un fichero XML, en el que se indican el tipo de todas sus zonas y las coordenadas que abarcan, es posible llevar a cabo este proceso de segmentaci´on del Ground Truth por categor´ıas. La secuenciaci´on de pasos seguida para generar el Ground Truth es: 1. Elegir una imagen. 2. Para cada categor´ıa de inter´es presente en dicha imagen: 2.1. Obtener una imagen en negro de las mismas dimensiones que la original. 2.2. Para cada zona detectada: 41
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on 2.2.1. Generar la polil´ınea correspondiente a sus coordenadas. 2.2.2. Trazar, sobre la imagen en negro, un pol´ıgono relleno de color blanco, usando la polil´ınea del paso anterior. 2.3. Guardar la imagen bajo el mismo nombre que la original y un sufijo indicativo de la categor´ıa a la que se corresponde. A modo de ejemplo se muestran los resultados obtenidos en este proceso para una de las im´agenes del dataset. Figura 4.4: Ejemplo de im´agenes de Ground Truth generadas. De esta forma, si la imagen original es denominada 001.tif, las del Ground Truth generadas se denominan 001 categoria.tif. Los posibles sufijos para indicar la categor´ıa se muestran en el Cuadro 4.4. 42
4.2. Tratamiento de los datos Categor´ıa Sufijo P´arrafos para T´ıtulos head Im´agenes imag Pies de p´agina foot N º de p´agina npag Pie de foto capt Texto flotante float Cuadro 4.4: Sufijos de las categor´ıas de inter´es. Los nombres de las im´agenes de la Figura 4.2.1 de izquierda a derecha y de arriba a abajo, son: 00001174.tif,00001174 capt.tif,00001174 float.tif,00001174 foot.tif,00001174 - head.tif,00001174 imag.tif,00001174 npag.tif y00001174 para.tif. El conocimiento de estos sufijos es de gran importancia, ya que son los que permiten, tanto generar adecuadamente los datos de entrada a la red neuronal, como poder realizar una correcta evaluaci´on de los resultados obtenidos tras su entrenamiento. Se ha decidido realizar este proceso “en fr´ıo”, lo que significa que las im´agenes son generadas antes de comenzar el entrenamiento de la red. De esta manera, se evita tener que repetir el proceso de creaci´on cada vez que se reanude el entrenamiento pero, a cambio, es necesario realizar las pertinentes operaciones de lectura. En total, se deber´ıan generar 3346 im´agenes, al haber 478 instancias y siete categor´ıas pero, en realidad, se han obtenido 2281. Esto se debe a que no todas las instancias presentan zonas de todas las categor´ıas por lo que, para esos casos, se ha descartado la creaci´on de la imagen correspondiente. La decisi´on fue tomada para evitar el mayor n´umero de operaciones de lectura posible; en esos casos, se genera la imagen “en caliente”, cuando es requerida. Al tratarse de una imagen totalmente en negro, todos sus pixels valen 0, por lo que su creaci´on en tiempo de ejecuci´on es muy r´apida. En el Cuadro 4.5, se muestra la distribuci´on por categor´ıa de las 2281 im´agenes creadas. 43
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on Figura 4.8: Generaci´on de chunks en iterative chopping. Tras este proceso, obtenemos un listado con todas las coordenadas necesarias para determinar cada uno de los chunks de la imagen en cuesti´on, as´ı como todas sus partes (zona ´util y m´argenes). Es importante tener en cuenta, que los chunks obtenidos no ser´an los mismos que con el algoritmo recursivo, aunque ambos cumplen con el cometido pretendido. 50
4.3. Implementaci´on Independientemente del algoritmo elegido, el proceso de chopping es recomendable realizarlo en caliente, logrando as´ı, una mayor flexibilidad a la hora de incluir, o excluir, im´agenes del conjunto a procesar por la red. Si se realizase en fr´ıo, ser´ıa necesario recalcular el listado de coordenadas cada vez que se realizase una modificaci´on en dicho conjunto para, posteriormente, pas´arselo a la aplicaci´on como par´ametro. Al realizarlo en caliente, la aplicaci´on calcula el listado autom´aticamente, evitando as´ı tener que hacer el proceso de forma manual para cada modificaci´on realizada. Al ser un c´omputo ligero, su realizaci´on en caliente no supone un inconveniente, ya que la porci´on de tiempo destinada a este proceso, en comparaci´on a los c´alculos realizados en la red, es insignificante. 4.3. Implementaci´on En esta Secci´on se va a justificar la decisi´on de la utilizaci´on de la biblioteca PyTorch, frente a Keras estudiada durante la formaci´on acad´emica. A continuaci´on, se describir´an los detalles de la aplicaci´on desarrollada. Por ´ultimo, se detallar´an las decisiones tomadas sobre la arquitectura de red UNET implementada, as´ı como su creaci´on haciendo uso de la librer´ıa PyTorch. 4.3.1. Pytorch vs Keras Son muy populares para la implementaci´on de Aprendizaje Profundo haciendo uso del lenguaje de programaci´on Python, que es el empleado en este trabajo. A continuaci´on, se van a exponer una serie de puntos comparativos entre ambas opciones: •Facilidad de uso y flexibilidad: Keras es un marco de trabajo de alto nivel, que encapsula las operaciones y las capas de Aprendizaje Profundo en bloques de procesamiento, haciendo el c´odigo m´as legible y conciso. Como contrapunto, supone una limitaci´on a la hora de jugar con los hiperpar´ametros de la red. Por su parte, PyTorch proporciona un entorno de nivel relativamente bajo, que permite una mayor libertad en la implementaci´on de la red neuronal. Sin embargo, es menos legible. •Depuraci´on e instrospecci´on: PyTorch proporciona una experiencia de depuraci´on m´as sencilla y completa que la proporcionada por Keras, siendo posible ejecutar el script l´ınea a l´ınea, as´ı como acceder de manera sencilla a cada uno de los objetos declarados en el c´odigo. 51
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on •Rendimiento: La velocidad de c´omputo es un factor clave en el desarrollo del presente trabajo. En este aspecto, PyTorch supera con claridad a Keras [22]. Teniendo en cuenta las consideraciones realizadas, parece claro que Keras constituye una opci´on m´as simple que PyTorch, a costa de un menor nivel de personalizaci´on y profundizaci´on en los conceptos te´oricos subyacentes. Sin embargo, en este trabajo se persigue ahondar en los conocimientos de las redes convolucionales y, en particular, de la arquitectura UNET, por lo que la flexibilidad de PyTorch, as´ı como su mayor velocidad, la convierten en la opci´on m´as conveniente. Pero la elecci´on no s´olo est´a sustentada en los motivos anteriormente descritos, sino que los tutores de HP me expresaron su preferencia por el desarrollo en esta plataforma, debido a su alto grado de conocimiento en la misma. Para facilitar mi familiarizaci´on con este framework, me proporcionaron el esqueleto software de una aplicaci´on para una red neuronal haciendo uso de PyTorch. Este esqueleto ha sido la base para el desarrollo de este trabajo, y su estructura es la que se presenta a continuaci´on. 4.3.2. Descripci´on de la aplicaci´on desarollada La aplicaci´on proporcionada por HP, y que ha sido utilizada como base para el desarrollo de este trabajo, presenta cuatro partes diferenciadas, que son: Main,NetManager, NetArchitecture yNetDataSet. Figura 4.9: Relaci´on de los elementos del esqueleto software. 52
4.3. Implementaci´on En la Figura 4.9, se muestra la configuraci´on final de la aplicaci´on. Se cuenta con las cuatro partes mecionadas, que se reparten la l´ogica de la aplicaci´on, m´as dos clases auxiliares que contribuyen al buen funcionamiento de la misma. La clase DataLoader, perteneciente a PyTorch, es utilizada por las instancias de NetManager para un correcto uso de las instancias de la clase DataSet. Por su parte, la clase ChoppingMaker ha sido espec´ıficamente creada para el presente trabajo: se encarga de generar los chunks del conjunto de entrada a la red. A continuaci´on, se explican las utilidades contenidas en cada una de estas clases: •Main: Es el programa inicial, se encarga de recoger la l´ınea de comandos escrita por el usuario para inicializar la aplicaci´on y, en funci´on de los par´ametros le´ıdos, establecer las caracter´ısticas del gestor de la red. Este proceso se realiza haciendo uso de la librer´ıa docopt. El listado de par´ametros de entrada que acepta esta clase, es el siguiente: ◦--train: indica que se quiere ejecutar la red neuronal en modo entrenamiento, incluye validaci´on. ◦--validate: para correr la red neuronal s´olo en modo de validaci´on. ◦--test: si se quiere usar la red neuronal en modo test. ◦--ld = <file>: proporciona a la aplicaci´on la ruta para localizar un modelo de red ya entrenado, a partir del cual, se desea realizar entrenamiento/validaci´on/test. ◦--in = <input source>: ruta a la carpeta de las im´agenes que la red tomar´a como datos de entrada para el entrenamiento, o test. ◦--gt = <gt imag>: ruta a la carpeta que almacena las im´agenes de Ground Truth de las im´agenes tomadas como entrada por la red para el entrenamiento. ◦--inv = <valid input source>: ruta a la carpeta que contiene las im´agenes que la red tomar´a como datos de entrada para la validaci´on. ◦--gtv = <valid gt image>: ruta a la carpeta que alberga las im´agenes de Ground Truth de las im´agenes tomadas como entrada por la red para la validaci´on. ◦--e = <max epoch>: N´umero m´aximo de ´epocas para el entrenamiento. ◦--cpu: fuerza el uso de CPU para los c´alculos. Si no se indica, se realizar´an en GPU. ◦--out = <test output>: ruta de destino para las im´agenes obtenidas tras usar la red neuronal en modo test. 53
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on En funci´on del modo en el que se desee utilizar la red neuronal, se utilizar´an unos par´ametros u otros. Para m´as informaci´on se remite al lector al Ap´endice B, correspondiente al Manual del Usuario. •NetManager: Esta clase se encarga de gestionar todo lo relacionado con la red neuronal y su uso. Entre sus atributos, se encuentran todos aquellos par´ametros que determinan el comportamiento de la red, como son el optimizador y la funci´on de p´erdida. Asimismo, se especifica el propio modelo de red, mediante una instancia de la clase NetArchitecture. Aqu´ı se definen los m´etodos para cargar la informaci´on de un modelo ya entrenado, pasado como par´ametro a la aplicaci´on, y para guardar el modelo actual. Es el responsable de gestionar el entrenamiento, la validaci´on y el test sobre la red neuronal contando, para ello, con un m´etodo diferente para cada modo. En cada uno de estos m´etodos, se crea una instancia de la clase NetDataset, que devuelve las im´agenes de entrada, ya listas para su uso en la red neuronal. Mediante la clase DataLoader, se transfieren los lotes de im´agenes a la red. En los modos de entrenamiento y validaci´on, el sistema lleva un recuento del mejor modelo conseguido hasta ese momento, por lo que en caso de que se obtenga una mejora, se guarda la configuraci´on correspondiente y se actualiza la informaci´on pertinente. Despu´es de cada ´epoca de entrenamiento, la aplicaci´on guarda los modelos obtenidos tras el ´ultimo entrenamiento y la ´ultima validaci´on, con el fin de poder retomar el entrenamiento en otro momento, si as´ı se desea. •NetDataSet: Consiste en una redefinici´on de la clase Dataset de PyTorch. Es la clase responsable de la gesti´on y adecuaci´on de las im´agenes para poder ser utilizadas como entrada en la red neuronal. De igual manera, se encarga de recomponer la salida obtenida por la red en el modo test. Cuando se inicializa una instancia de esta clase, se hace uso de la clase Chopping- Maker, para generar un listado con todos los chunks de las im´agenes, que se desean usar como entrada en la red. Con el objetivo de que la red reciba cada uno de estos chunks como entrada, y no la imagen correspondiente, se han tenido que redefinir los m´etodos: len () ygetitem (index). 54
4.3. Implementaci´on El m´etodo len () devuelve el n´umero de instancias en el conjunto de entrada. En nuestro caso, no se trata del n´umero de im´agenes, sino de la cantidad total de chunks entre todas las im´agenes de entrada. Por su parte, el m´etodo getitem (index) es el encargado de preparar la instancia (chunk) n´umero “index” para ser utilizada por la red. Es necesario generar dos tensores: el de entrada a la red y el que contiene la informaci´on de la salida deseada. A continuaci´on, se explica c´omo se genera cada uno de ellos: ◦tensor de entrada, conformado por los canales (R,G,B), correspondientes a la zona de la imagen original, que abarca el chunk. Asimismo, cuenta con dos canales extra, que aportan informaci´on sobre la ubicaci´on de cada uno de los pixels del chunk. A modo de ejemplo, dado un chunk que tiene su esquina superior izquierda en los pixels (0,255) y su inferior derecha en (256,511), los dos canales extras ser´an: Cx= [0,1,2, ..., 255] y Cy= [255,256,257, ..., 511]. Por tanto, las dimensiones de este tensor son: [5, widthchunk, heightchunk]. ◦tensor para la salida, alberga la informaci´on correspondiente al Ground Truth del chunk. Para cada categor´ıa, se genera un tensor, de dimensiones [1, widthchunk, heightchunk], tras leer la imagen de su Ground Truth en escala de grises (por eso s´olo presenta un canal). En caso de que no exista la imagen de su Ground Truth, el contenido del tensor ser´a 0, ya que esto significa que la imagen no presenta dicha categor´ıa en ninguna de sus zonas. Tras obtener los siete tensores, uno por cada categor´ıa, se concatenan en un ´unico tensor est´atico, de dimensiones [7, widthchunk, heightchunk], que es el utilizado para evaluar la salida de la red. Esta clase tambi´en se encarga de recomponer, en las pertinentes im´agenes, los chunks de salida obtenidos por la red, cuando se usa en modo test. Para ello, utiliza las coordenadas del listado obtenido mediante la clase ChoppingMaker, para extraer la zona ´util de cada chunk e ir recomponiendo las im´agenes de las distintas categor´ıas. •ChoppingMaker: Esta clase se encarga de realizar el proceso de Image Chopping sobre el conjunto de im´agenes existentes en una determinada ruta, pasada como par´ametro. Como resultado, se obtiene un listado con la siguiente informaci´on: ◦nombre de la imagen original, para poder identificar unos chunks de otros, tanto en la fase de preparaci´on para la entrada a la red, como en la de recomposici´on de la salida. ◦coordenadas del chunk, en la imagen original. ◦coordenadas de la zona ´util, en la imagen original. 55
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on ◦coordenadas relativas de la zona ´util, respecto al chunk correspondiente. Como se mencion´o en la Secci´on 4.2.1, el algoritmo elegido para el desarrollo de este trabajo es el recursive chopping, por lo que es la versi´on implementada en esta clase. •NetArchitecture: En esta clase ´unicamente se definen las caracter´ısticas de la red neuronal implementada. Es una subclase de la clase Module de PyTorch. Las instancias de esta clase son generadas por instancias de la clase NetManager, que son las encargadas de realizar el entrenamiento, o gestionar el proceso de validaci´on o test, de la red neuronal. 4.3.3. Configuraci´on de la red neuronal En este cap´ıtulo, se presentan las caracter´ısticas de la red neuronal elegida. Cabe recordar, que la arquitectura escogida ha sido la UNET, que fue propuesta por primera vez en el a˜no 2015 para su uso en problemas de segmentaci´on de im´agenes biom´edicas [9]. Los detalles m´as te´oricos sobre esta arquitectura fueron presentados en el Cap´ıtulo 2.3, por lo que ahora nos centraremos en los detalles propios de su implementaci´on. La red neuronal utilizada en este trabajo, y que se muestra en la Figura 4.10, difiere en muchos aspectos de la red UNET original de la Figura 2.8. Las principales diferencias se encuentran en: •N´umero de canales: en la arquitectura original, por cada nivel de profundidad, el n´umero de canales se ve´ıa duplicado, en la ruta de contracci´on, y dividido a la mitad, en la de expansi´on. En esta implementaci´on, para cada nivel, se mantiene una misma secuencia del n´umero de canales en cada capa convolucional. •Dimensi´on de los mapas de caracter´ısticas: el n´umero de pixels por dimensi´on se mantiene constante a lo largo de una misma capa convolucional. En la red original, por cada convoluci´on, se perd´ıan dos pixels en cada dimensi´on. •T´ecnica del residuo: en la arquitectura original, la salida de cada nivel de la ruta de contracci´on se concatenaba con la entrada correspondiente a la ruta de expansi´on. En este trabajo, se ha optado por emplear la t´ecnica del residuo, que como vimos en el Cap´ıtulo 2.3.3, consiste en sumar ambos tensores. 56
4.3. Implementaci´on Figura 4.10: Arquitectura de la red UNET implementada. La red toma como entrada cada uno de los chunks que hemos generado mediante el algoritmo de recursive chopping y, por esta raz´on, el tensor de entrada presenta cinco canales de tama˜no (H,W). Dos de ellos, como se vi´o en la secci´on anterior, se corresponden con la informaci´on de la ubicaci´on espacial de los pixels del chunk, mientras que los otros tres es el contenido de cada pixel en la imagen original en formato (R,G,B). Con el objetivo de utilizar al m´aximo la informaci´on del chunk de entrada, en la primera convoluci´on que realiza la red, se utiliza un n´ucleo 5x5, que permite crear filtros m´as complejos. Para evitar la p´erdida de pixels, como consecuencia de esta operaci´on, se utiliza un padding igual a 2, estableci´endose 64 canales de salida. A continuaci´on, se realiza una nueva convoluci´on, ahora con un n´ucleo 3x3 y un padding igual a 1, dando lugar a 32 canales. Estas dos operaciones conforman la primera capa de la red, que puede verse en mayor detalle en la Figura 4.11. 57
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on Figura 4.11: Arquitectura red neuronal I. Tras el procesamiento de la primera capa, tiene lugar la operaci´on de submuestreo de caracter´ısticas (ver Figura 4.11). C´omo se vi´o en el Cap´ıtulo 2.2.2, existen dos opciones principales para llevarlo acabo: average pooling ymax pooling. En esta implementaci´on, se ha decidido hacer uso del max pooling, con un mosaico 2x2, el cual permite reducir las dimensiones H y W a la mitad. El segundo nivel de profundidad, recibe como entrada el tensor de 32 canales y dimensiones (H 2,W 2). Mediante una primera convoluci´on con n´ucleo 3x3 y padding igual a 1, se generan 64 canales, que vuelven a ser 32 tras una nueva convoluci´on de id´enticas caracter´ısticas. Tras estas dos operaciones, se produce de nuevo el max pooling con mosaico 2x2, que genera un tensor de 32 canales y dimensiones (H 4,W 4). Esta salida es procesada en la siguiente capa, siguiendo el mismo procedimiento que en el nivel anterior, como puede verse en la Figura 4.12. De esta forma, al cuarto y ´ultimo nivel de profundidad, el denominado cuello de botella, llega un tensor con 32 canales de dimensiones (H 8,W 8). De nuevo, se realizan las dos operaciones convolucionales anteriores, pasando de 32 a 64 canales en la primera y, de 64 a 128, en la segunda. 58
4.3. Implementaci´on Figura 4.12: Arquitectura red neuronal II. Para realizar la operaci´on de upsampling, entre todas las posibilidades vistas en el cap´ıtulo 2.3.2, se ha optado por la utilizaci´on del pixel shuffle. Mediante el uso de esta t´ecnica es posible pasar de un tensor de dimensiones (r2·C, H, W ) a otro con dimensiones (C, H ·r, W ·r). En nuestro caso, como queremos ir duplicando las dimensiones seg´un vamos subiendo por la ruta de expansi´on, el valor de relegido es 2. Por ello, en la ´ultima convoluci´on se ha pasado de 64 canales a 128 (ver Figura 4.12) para que, tras realizar el pixel shuffle, se obtengan 32 canales. Despu´es de esto, el tensor obtenido es de dimensiones (32,H 4,W 4). Antes de ser utilizado por la siguiente capa de la red, se aplica, sobre ´el, la t´ecnica del residuo, sum´andole la salida que se hab´ıa obtenido en el tercer nivel de la ruta de contracci´on (ver Figura 4.13). Una vez sumados ambos tensores, el resultado es sometido a dos convoluciones de id´enticas caracter´ısticas que las realizadas en el cuello de botella. Figura 4.13: Arquitectura red neuronal III. 59
Cap´ıtulo 4. Plataforma de trabajo e implementaci´on Una vez explicado c´omo podemos crear los distintos niveles de profundidad, es el momento de hablar sobre las operaciones de subsampling y upsampling. La opci´on escogida para realizar el subsampling, o muestreo de caracter´ısticas, fue el max pool. Mediante la clase MaxPool2D de PyTorch podemos llevarla a cabo. Los atributos de esta clase, son: •kernel size: establece las dimensiones del mosaico. Puede ser un int, mosaico cuadrado, o una tupla. •stride=None: el stride de la ventana. Por defecto, se corresponde con kernel size. •padding=0: n´umero de filas y columnas, de ceros, a a˜nadir tras el c´alculo. •dilation=1: controla el stride de los elementos de la ventana. •return indices=False: permite devolver, junto a la salida, los ´ındices de los valores m´aximos. •ceil mode=False: realiza un redondeo al alza si es True, y a la baja si es False. Por su parte, para implementar el pixel shuffle, opci´on escogida para el upsampling, se hace uso de la clase PixelShuffle, cuyo ´unico atributo es upscale factor, que determina el valor por el que la salida ver´a aumentada sus dimensiones H y W respecto a la entrada, c´omo se explic´o en el cap´ıtulo 2.3.2. Tras tener definidos, e instanciados en el m´etodo init (), todos los componentes de la red, es el momento de definir como se relacionan entre ellos. En particular, debemos aclarar como fluye la informaci´on entre las instancias Sequential, ya que el orden de procesamiento interno en cada una de ellas est´a determinado por el orden de declaraci´on de sus componentes. Con este fin, se utiliza la funci´on forward(), anteriormente mencionada. En ella, se define el orden en el que los datos de entrada a la red deben atravesar las distintas instancias Sequential generadas. Se debe tener en cuenta que, la salida de una de estas instancias, debe ser sometida al correspondiente proceso de subsampling/upsampling, antes de servir como entrada de la siguiente. De igual manera, en esta funci´on tambi´en se lleva a cabo la t´ecnica del residuo explicada en el cap´ıtulo 2.3.3. Teniendo en cuenta todos estos aspectos, podemos definir la arquitectura de red escogida, haciendo uso exclusivamente del paquete torch.nn. Pero, para determinar el comportamiento de la red, debemos considerar, al menos, dos aspectos m´as: la funci´on de p´erdida y el optimizador. 66
4.3. Implementaci´on Las funciones de p´erdida se incluyen, tambi´en, en el paquete torch.nn. En este trabajo se ha empleado el error cuadr´atico medio, MSE, que en PyTorch se encuentra bajo el nombre MSELoss. Otras posibilidades, como las mencionadas en el cap´ıtulo 2.4.3, son L1Loss (MAE) y SmoothL1 (Hubber). En cuanto a los optimizadores, cuentan con su propio paquete denominado torch.optim. Como se mencion´o en la secci´on anterior, en la implementaci´on desarrollada, se ha optado por el optimizador Adam, que se puede encontrar con id´entico nombre en el paquete. Sus par´ametros son: •params: iterable de los par´ametros de la red a optimizar. •lf : tasa de aprendizaje (learning rate). Por defecto, su valor es 1e-3. •betas(Tuple[float,float]): coeficientes utilizados para el c´alculo de gradiente. Sus valores, por defecto, son (0,9,0,999). •eps: valor que busca introducir estabilidad en el c´alculo del gradiente. Por defecto, su valor es 1e-8. •weight decay: t´ecnica de regularizaci´on L2. Por defecto, 0. •amsgrad: si es cierto, se utiliza la variante AMSGrad [29] como optimizador. Otras implementaciones populares que pueden encontrarse en PyTorch son: SGD (Stochastic Gradient Descent), ASGD (Average Stochastig Gradient Descent), Adagrad, Rprop,RMSprop [30]... Cada uno de ellos cuenta con sus propios par´ametros, aunque muchos son compartidos. En el caso de que se desee llevar a cabo una inicializaci´on de los pesos, como es el nuestro, se cuenta con varias posibilidades. En este trabajo se ha hecho uso de la funci´on xavier uniform (Inicializaci´on de Xavier), que cuenta con dos par´ametros: tensor que es el tensor donde se almacenar´a el resultado y gain=1.0, que se trata del factor multiplicativo visto en la Ecuaci´on 4.1. Para llevar a cabo la incializaci´on, se utiliza la funci´on apply(fn) sobre todas las capas, donde fn es la funci´on de inicializaci´on. Otras opciones son: xavier normal,kaiming normal,dirac ,sparse ... Todas ellas pertenecen al paquete torch.nn.init. Por ´ultimo, para gestionar los datos de entrada a la red, se ha utilizado la clase DataLoader del paquete torch.utils.data [31], como se mencion´o en el cap´ıtulo 4.3.2. 67
Cap´ıtulo 5 Resultados y API En este cap´ıtulo, en primer lugar, se realiza una evaluaci´on del rendimiento del modelo desarrollado, haciendo uso de varias m´etricas de distinta naturaleza. En segundo lugar, se detallan los pasos seguidos para el desarrollo de un servidor local, con el que poder interactuar con la red, pas´andole una imagen de entrada y obteniendo el fichero reconstruido en un archivo formato HTML. 5.1. Resultados El proceso de entrenamiento de la red fue bastante costoso, extendi´endose durante 34 d´ıas y un total de 275 horas de c´omputo, a raz´on de 5h y 15 minutos, aproximadamente, por ´epoca. En total, en el conjunto de datos estaba integrado por 478 documentos (ver cap´ıtulo 4.1), que se repartieron en los siguientes porcentajes: •Entrenamiento, 50 %. Un total de 239 im´agenes, representadas en 65792 chunks. •Validaci´on, 20 %. Hasta 93 im´agenes, dando lugar a 26112 chunks. •Test, 30 %. Asciende a 146 im´agenes, divididas en 39680 chunks. En un primer momento, el entrenamiento se realiz´o en los servidores de Kaggle, por lo que los porcentajes de entrenamiento y validaci´on fueron establecidos tratando de optimizar el tiempo m´aximo de ejecuci´on continuada permitido: 9 horas. Tras un par de ´epocas, el entrenamiento se pas´o a realizar en la m´aquina personal prestada por un conocido, en el que los tiempos de c´omputo eran m´as r´apidos, pero al partir del modelo ya entrenado en Kaggle, se mantuvieron los conjuntos de entrenamiento, validaci´on y test ya utilizados. En total, se realizaron 52 ´epocas de entrenamiento, obteni´endose los errores, como el error cuadr´atico medio, que se muestran en la Figura 5.1. 69
Cap´ıtulo 5. Resultados y API Figura 5.1: Evoluci´on de las tasas de error a lo largo del entrenamiento. Mientras que el error de entrenamiento disminuye de forma exponencial, el error en validaci´on oscila en el intervalo [0.01352, 0.0174], alcanz´andose este valor m´ınimo en la ´epoca n´umero 16, como puede observarse en la Figura 5.1. Por ello, para los resultados que se muestran a continuaci´on, se ha utilizado la configuraci´on de la red obtenida en esta ´epoca, ya que se considera que es la ´optima. Como se mencion´o en el cap´ıtulo 4.3.2, la salida de la red est´a compuesta por siete im´agenes de id´enticas dimensiones, que la tomada como entrada, siendo cada una ellas una clasificaci´on de los pixels para cada categor´ıa. De esta forma, los valores de los pixels representan su probabilidad de pertenencia a la categor´ıa en cuesti´on. Para realizar una evaluaci´on del rendimiento de la red, tenemos dos enfoques principales: •Evaluaci´on continua: compara la salida obtenida de la red, con la salida deseada. Se utilizan las probabilidades de los pixels, para valorar la similitud de la imagen resultado, con la imagen deseada. •Evaluaci´on binaria: Los pixels con un valor superior a un cierto umbral, o threshold, se clasifican como clase positiva, y los dem´as como negativa. A este proceso se le denomina binarizaci´on. Tras ´el, se calcula el porcentaje de pixels clasificados correcta e incorrectamente. En la Figura 5.2, se muestra un ejemplo de salida de la red, y, en la Figura 5.3, su binarizaci´on con un threshold de 0.5. El orden de las im´agenes, de izquierda a derecha y de arriba a abajo, es: original, pie de foto,texto flotante,pie de p´agina,t´ıtulos,im´agenes, n´umero de p´agina yp´arrafos. 70
5.1. Resultados Figura 5.2: Salida obtenida por la red para una imagen dada. Figura 5.3: Binarizaci´on, con un threshold de 0.5, de la salida de la red mostrada en la Figura 5.2. 71
Cap´ıtulo 5. Resultados y API 5.1.1. Evaluaci´on caso continuo Para este tipo de evaluaci´on, tambi´en conocida como fuzzy, se han utilizado las m´etricas MAE yRMSE. La primera de ellas, fue vista en el cap´ıtulo 2.4.3. La segunda, es la ra´ız cuadrada de la m´etrica MSE, vista en ese mismo cap´ıtulo. A continuaci´on, en el Cuadro 5.1, se muestran los resultados obtenidos, desglosados por categor´ıas, para dichas m´etricas. Categor´ıa MAE RMSE Pie de foto 2.877099 4.715101 Texto flotante 3.512344 6.359271 Pie de p´agina 0.849714 1.788237 T´ıtulos 8.740358 7.411484 Im´agenes 20.525129 7.757297 N º p´agina 0.013197 0.113618 P´arrafos 65.246538 6.121016 Media 14.53777 4.895024 Cuadro 5.1: Evaluaci´on continua por categor´ıa. La m´etrica MAE, al ser una puntuaci´on lineal, pondera todas las diferencias individuales por igual. Como se puede observar en el Cuadro 5.1, la categor´ıa con mayor valor para esta medida es p´arrafos y, la de menor, n´umero de p´agina. La diferencia entre ambos valores es muy elevado, y tiene su explicaci´on: las zonas que se corresponden con p´arrafos, son mucho m´as amplias que las de n´umero de p´agina, por lo que la red no es tan precisa a la hora de delimitar la posici´on exacta. Por ello, los pixels colindantes a un p´arrafo, la red los detecta como posibles a considerar. Al ser zonas amplias y con alta frecuencia, termina desembocando en una m´etrica alta. Si nos fijamos en las categor´ıas im´agenes y t´ıtulo, podemos observar que ocurre lo mismo. Por su parte, la m´etrica RMSE asigna un mayor peso a los errores m´as grandes. Como podemos ver en el Cuadro 5.1, la categor´ıa p´arrafos, que era la que ten´ıa, con diferencia, un mayor MAE, no es la que cuenta con un RMSE m´as elevado. Esto significa que los pixels colindantes a los que hac´ıamos menci´on, no son considerados con una alta probabilidad como p´arrafo, sino que sus probabilidades son relativamente bajas pero, al ser muchos, se obtiene una MAE elevada. Por el contrario, podemos destacar los valores de la categor´ıa texto flotante, que tiene un RMSE superior al de p´arrafos, siendo su MAE casi 22 veces menor. La interpretaci´on de este hecho, es que la estimaci´on de esta categor´ıa no es del todo precisa, ya que si lo fuese, los pixels colindates a dichas zonas tendr´ıan valores menos elevados, dando lugar a una m´etrica m´as baja. 72
5.1. Resultados 5.1.2. Evaluaci´on del caso binario Los valores asociados a cada pixel de las im´agenes devueltas por la red pueden ser interpretados como probabilidades de pertenencia a la clase en cuesti´on. De esta forma, se puede considerar que todos los pixels, con un valor superior a un umbral, o threshold, son clasificados como instancias positivas y, el resto, como negativas. As´ı, es posible conocer el n´umero de predicciones correctas e incorrectas hechas por la red. Las m´etricas b´asicas para realizar este tipo de evaluaci´on son: •True Positive (TP): ratio de instancias positivas, en nuestro caso pixels correspondientes a la categor´ıa en cuesti´on, bien clasificadas por el modelo. •True Negative (TN): porcentaje de instancias negativas, en este caso pixels que no pertenecen a la categor´ıa, correctamente clasificadas por la red. •False Positive (FP): cociente de instancias clasificadas como positivas cuando realmente son negativas. En este trabajo, es el porcentaje de los pixels clasificados incorrectamente dentro de una categor´ıa. •False Negative (FN): tasa de instancias clasificadas incorrectamente como negativas. En nuestro caso, es la cuota de pixels pertenecientes a una categor´ıa, pero que no fueron considerados como tal. A partir de ´estas, se pueden calcular otras m´etricas m´as avanzadas que permiten hacer una valoraci´on m´as completa del rendimiento de la red: •Sensibilidad: probabilidad de clasificar correctamente una instancia positiva. Se calcula como: Sensibilidad =T P TP +F N •Especificidad: probabilidad de clasificar correctamente una instancia negativa. Su formulaci´on es: Especificidad =T N TN +F P •Precisi´on: porcentaje de instancias clasificadas correctamente. Precision =T P +TN 73
Cap´ıtulo 5. Resultados y API Mediante los valores de la sensibilidad y la especificidad es posible construir las denominadas curvas ROC. Estas gr´aficas sirven para conocer el rendimiento global del clasificador, as´ı como elegir el threshold adecuado. Se representa el valor de la sensibilidad, tambi´en denominado como True Positive Rate (TPR), frente al False Positive Rate(FPR), que es el complementario de la especificidad. A continuaci´on, para cada categor´ıa, se muestran los resultados obtenidos para estas m´etricas, as´ı como su curva ROC. •Pie de foto: Como se puede observar en el Cuadro 5.2, existe un incremento muy elevado en la precisi´on a partir del umbral 0.1, alcanz´andose en este punto el 98.53 % de instancias bien clasificadas. Si nos fijamos en la especificidad, entendemos que el aumento de precisi´on est´a provocado por una mejor´ıa en la clasificaci´on de las instancias negativas a partir de ese umbral. Threshold Sensibilidad Especificidad Precisi´on 0.0 0.95806 0.545648 0.547664 0.1 0.780848 0.984508 0.983513 0.2 0.702856 0.991156 0.989747 0.3 0.628333 0.994269 0.992481 0.4 0.535731 0.996448 0.994196 0.5 0.430591 0.997966 0.995193 0.6 0.312392 0.998988 0.995633 0.7 0.198046 0.999548 0.995631 0.8 0.095459 0.99984 0.995421 0.9 0.0343 0.999959 0.99524 1.0 0 1 0.995113 Cuadro 5.2: M´etricas de evaluaci´on binaria para la categor´ıa pie de foto. Es en el umbral 0.1, donde el modelo presenta una relaci´on m´as balanceada entre su sensibilidad y especificidad, por lo que ´este parece ser el threshold m´as adecuado. En este caso, la precisi´on es tan elevada, debido a la gran presencia de instancias negativas, lo que permite que el clasificador detecte sin problema la mayor parte de ellas, aunque le cueste detectar las positivas, la precisi´on apenas se ve afectada. Este hecho tambi´en se manifiesta en su curva ROC (ver Figura 5.4). 74
5.1. Resultados Figura 5.4: Curva ROC de la clase pie de foto. •Texto flotante: Al igual que ocurr´ıa con categor´ıa “pie de foto”, a partir del umbral 0.1 (ver Cuadro 5.3) existe una mejora significativa de la especificidad, con el correspondiente descenso en sensibilidad. A partir de un threshold de 0.3, el modelo clasifica las instancias positivas correctamente con una probabilidad menor a 0.5 Threshold Sensibilidad Especificidad Precisi´on 0.0 0.905246 0.69813 0.700492 0.1 0.707701 0.98062 0.977507 0.2 0.60114 0.989978 0.985544 0.3 0.512286 0.993567 0.988078 0.4 0.427862 0.995722 0.989246 0.5 0.352378 0.997202 0.989848 0.6 0.272843 0.998327 0.990053 0.7 0.196101 0.999171 0.990013 0.8 0.121313 0.999702 0.989684 0.9 0.057749 0.999933 0.989187 1.0 0 1 0.988595 Cuadro 5.3: M´etricas de evaluaci´on binaria para la categor´ıa texto flotante. Su curva ROC, tiene una forma muy parecida a la categor´ıa “pie de foto”, ya que tiene un comportamiento muy similar (ver Figura 5.3). 75
Cap´ıtulo 5. Resultados y API 5.2. API En esta secci´on, se expone el procedimiento de recomposici´on de las im´agenes de salida de la red en un nuevo documento en formato HTML, as´ı como la implementaci´on de un servidor local que permite enviar a la red un documento escaneado y obtener el fichero HTML correspondiente. 5.2.1. Composici´on fichero HTML Dado que la red es capaz de distinguir las categor´ıas a las que pertenece cada zona de un documento, es posible utilizar esta informaci´on para recomponerlo en un formato distinto. En este trabajo se ha optado por HTML, aunque se valoraron otras alternativas como PDF o L A T EX. Con el objetivo de encapsular todo el c´odigo necesario para integrar esta funcionalidad, se ha definido una clase denominada htmlCreator() que cuenta con un ´unico m´etodo p´ublico que se encarga de generar el documento final. Esta clase cuenta con los siguientes atributos: •in: ruta de la carpeta en la que se encuentra la imagen original. •gt: ubicaci´on donde est´an almacenadas las salidas obtenidas por la red para el documento original. •out: lugar d´onde se desea salvar los ficheros HTML y CSS, as´ı como el resto de informaci´on necesaria. •max: valor m´aximo de la dimensi´on mayor en el fichero generado. La segunda dimensi´on se establece de forma proporcional. En dicha clase, se ha recurrido al uso de diversas bibliotecas para afrontar con garant´ıas el proceso, entre las que destacan: •OpenCV, permite llevar a cabo la binarizaci´on de las im´agenes, as´ı como el reconocimiento de los distintos clusters de pixels presentes en cada una de ellas. •Yattag, facilita la creaci´on de ficheros HTML y CSS gracias a su intuitiva gesti´on de etiquetas. •Pytesseract, es un wrapper para Python del OCR Tesseract desarrollado por Google. En este trabajo, se utilizar´a para convertir a texto plano el contenido de las respectivas zonas del documento. 82
5.2. API El primer paso en el proceso de recomposici´on es determinar las coordenadas de cada zona reconocida por la red. Con este fin, cada imagen obtenida es binarizada, utilizando su respectivo threshold ´optimo (ver Cuadro 5.9), y pasada como argumento a la funci´on connectedComponentsWithStats de la biblioteca OpenCV. Esta funci´on, devuelve un listado con informaci´on sobre la ubicaci´on en la imagen de cada uno de los clusters de pixels (nuestras zonas de inter´es) existentes. De esta forma, se obtiene un listado con las coordenadas de cada una de las zonas de inter´es junto a la categor´ıa a la que corresponde. Una vez generado el listado, se llama a una funci´on interna encargada de escribir la base de los ficheros HTML y CSS correspondientes, para m´as tarde ir a˜nadiendo sobre ellos la informaci´on correspondiente a cada zona reconocida. Respecto al fichero HTML, se establece el t´ıtulo, haci´endolo coincidir con el nombre del documento procesado, y el encabezado, en el que se determina la ruta al fichero CSS que contiene su estilo. Para el archivo CSS, se establecen las dimensiones del cuerpo del HTML, y las caracter´ısticas de cada una de las etiquetas que se van a utilizar: p1 (p´arrafos, texto flotante y n´umero de p´agina), p2 (pie de foto), p3 (pie de p´agina) y h1 (t´ıtulos). Tras ello, se recorren los distintos elementos de la lista previamente generada, y se va escribiendo en paralelo, en los fichero CSS y HTML, la informaci´on correspondiente. Para cada uno de los elementos, se establece su contenido en un div distinto, lo que facilita la composici´on final del documento ya que es m´as sencillo delimitar cada una de las zonas por medio de las caracter´ısticas de cada componente div. Se realiza una distinci´on entre las zonas que se corresponden con texto y las que lo hacen con im´agenes. Para las primeras, se env´ıa al OCR, proporcionado por pytesseract, el correspondiente recuadro de la imagen original, obteni´endose el texto en plano que figura en dicha zona, y escribi´endose en el fichero HTML bajo la etiqueta pertinente. En el caso de las im´agenes, en lugar de ser enviadas al OCR, se guarda en una carpeta el respectivo recorte y se escribe en el HTML la ruta correspondiente. Asimismo, se establecen los porcentajes de ancho y largo en los que se debe mostrar para conservar las proporciones con el resto de elementos. En la Figura 5.11, se muestra una de las im´agenes del dataset junto a su recreaci´on en formato HTML, haciendo uso de su Ground Truth original. 83
Cap´ıtulo 5. Resultados y API Figura 5.11: Comparaci´on de un documento escaneado con su recreaci´on en formato HTML. Tras comprobar el funcionamiento de la clase sobre las im´agenes obtenidas por medio de la red, se observa que existen m´ultiples zonas que son reconocidas pero que realmente son carentes de valor. Esto se debe a que, como se vi´o en la Figura 5.3, existen muchos pixels aislados que son asignados a una categor´ıa y por tanto considerados en el proceso de recomposici´on. Para solventar este problema, se establecen un ´area m´ınima, en funci´on de la categor´ıa, que un elemento debe superar para ser considerado en el proceso de recomposici´on. Clase ´ Area m´ınima (pixels2) Pie de foto 20000 Texto flotante 10000 Pie de p´agina 10000 T´ıtulos 80000 Im´agenes 300000 N´umero de p´agina 750 P´arrafos 100000 Cuadro 5.10: ´ Area m´ınima para considerar un elemento. 84
5.2. API Las ´areas m´ınimas m´as grandes se corresponden con la categor´ıas que se presuponen que sus elementos son m´as amplios, y son p´arrafos,im´agenes yt´ıtulos. Por el contrario, para n´umero de p´agina tenemos con diferencia el valor m´as bajo, sin llegar a superar los 1000 pixels2. Para el resto de categor´ıas se establece un umbral similar. Estos valores han sido escogidos para optimizar el rendimiento sobre el conjunto de test, por lo que es posible que para otros conjuntos sea preciso una revisi´on. 5.2.2. Implementaci´on del servidor Como ´ultimo punto del proyecto, se desarrolla un peque˜no servidor en el que es posible procesar un documento escaneado, obteni´endose su recreaci´on en formato HTML, mediante el proceso descrito en la secci´on anterior. Debido a la restricci´on temporal a la que est´a sujeta la realizaci´on de este TFG, se ha optado por un desarrollo web lo m´as sencillo posible, ya que su ´unico fin es su utilizaci´on en la defensa del proyecto. Siguiendo las recomendaciones de los tutores de HP se ha utilizado el framework Flask, de Python, para integrar la funcionalidad del servidor. Este marco destaca por presentar una curva de aprendizaje poco elevada, debido a que su estilo es muy similar al de Python. Asimismo, al hacer uso del motor jinja2, proporciona una forma c´omoda y sencilla para el paso de variables entre el script en Python y los distintos ficheros HTML. En el Cap´ıtulo 3.4, concretamente en la Figura 3.2, se mostr´o la estructura de directorios del proyecto, siendo de inter´es en este caso la rama servidor. Dentro de este directorio, se encuentran todos los ficheros necesarios para el funcionamiento del servidor. Por un lado, se tiene el script de Python que alberga el c´odigo de las funcionalidades del servidor, haciendo uso del framework Flask previamente comentado. Por otro lado, se encuentran las carpetas templates ystatic: •templates: Contiene el fichero HTML de la vista principal del servidor. Asimismo, en una subcarpeta denominada results se almacenan todos los ficheros HTML generados en las peticiones al servidor. •static: Su contenido se divide en dos sub-directorios: imag ystyles. En el primero de ellos, se guardan los recursos gr´aficos correspondientes a los distintos documentos procesados en el servidor. En el segundo, se albergan los ficheros de estilo de cada uno de los archivos HTML generados en el servidor. La interfaz gr´afica del servidor se ha hecho lo m´as minimalista posible, para que toda la atenci´on se centre en el fin ´ultimo para el que se ha desarrollado: el procesamiento 85
Cap´ıtulo 5. Resultados y API de documentos escaneados. De esta forma, la pantalla inicial se reduce a la composici´on mostrada en la Figura 5.12. Figura 5.12: Pantalla principal del servidor. Tras pulsar en el bot´on “Seleccionar archivo” se abre un explorador de archivos para elegir el documento que se quiere procesar. En este punto, es importante mencionar que ´unicamente se aceptan ficheros de cuatro formatos: tif,npg,jpg yjpeg. Una vez elegido el archivo que se desea procesar, tras pulsar el bot´on “Enviar” pueden darse dos situaciones: si el fichero elegido de un formato v´alido, el servidor muestra un mensaje de informaci´on al usuario, como el que se muestra en la Figura 5.13; en caso contrario, la elecci´on del usuario queda invalidada. Figura 5.13: Pantalla de espera del servidor. 86
5.2. API Si el fichero ha sido aceptado, se env´ıa a la red neuronal entrenada, obteni´endose de esta manera la clasificaci´on de las distintas zonas del documento. Tras ello, las siete im´agenes generadas son tratadas por un objeto de la clase descrita en la secci´on anterior, que se encarga de recomponer el fichero en formato HTML, adecu´andose a la estructura de contenidos del servidor. Una vez terminada la espera, el servidor carga en pantalla el fichero obtenido. Asimismo, es posible ver los resultados obtenidos para ficheros previamente procesados, indicando la ruta pertinente en el servidor. Los detalles sobre c´omo conocer la ruta a ficheros ya procesados se detallan en el Manual del Usuario (ver Ap´endice B). 87
Cap´ıtulo 6 Conclusiones Durante mi formaci´on universitaria siempre he sentido un especial inter´es por el Aprendizaje Profundo, increment´andose a´un m´as tras cursar las asignaturas de T´ecnicas de Aprendizaje Autom´atico yMiner´ıa de Datos. Debido a las restricciones de contenido a las que est´an sujetas las asignaturas, no se profundiz´o el conocimiento sobre este ´area tanto como me hubiese gustado. Por ello, y teniendo en cuenta la importancia de este campo en la actualidad, he tenido en este TFG la oportunidad perfecta para adquirir un mayor grado de conocimiento sobre el Aprendizaje Profundo. Asimismo, el problema propuesto tambi´en ha supuesto un reto en lo personal ya que como estudiante me he encontrado en m´ultiples ocasiones con documentos escaneados que me han obligado a hacer una lectura m´as concreta de lo deseado para localizar la informaci´on buscada. A pesar de que no se persegu´ıa generar una herramienta con un alto nivel de precisi´on, afrontar esta problem´atica me ha permitido adquirir conocimientos ´utiles y extrapolables a otros desaf´ıos que me pueda encontrar en mi vida profesional. De igual manera, la metodolog´ıa empleada ha supuesto para m´ı un gran aprendizaje ya que durante mi formaci´on siempre hab´ıa utilizado enfoques mucho m´as cercanos a las metodolog´ıas tradicionales. A pesar de que no se ha trabajado con una metodolog´ıa estrictamente ´agil, s´ı que me ha obligado a salir de mi zona de confort y tener que hacer frente a un m´etodo de trabajo m´as similar a los empleados fuera del ´ambito acad´emico. El proyecto contaba con tres grandes objetivos fijados, que se han alcanzado con ´exito. El primero de ellos, era la creaci´on o adecuaci´on de un conjunto de datos para el problema planteado. Concretamente, se ha tenido que llevar a cabo un proceso de generaci´on del Ground Truth, algo novedoso para m´ı, ya que siempre hab´ıa trabajado con datos ya preparados. Para cumplir con este objetivo, he tenido que trabajar con estructuras de datos en formato XML, vista en la asignatura Sistemas Avanzados de Integraci´on de la Informaci´on, sobre las que he tenido que profundizar en conocimientos. El segundo objetivo, era realizar un correcto pre-procesamiento de las im´agenes para 89
Cap´ıtulo 6. Conclusiones poder ser utilizadas por la red. Aqu´ı destacan los algoritmos de chopping de im´agenes, de los cu´ales no ten´ıa constancia hasta el momento de realizaci´on de este trabajo. Se opt´o por el uso del algoritmo recursivo, y a pesar de contar con la ayuda de los tutores, fue un proceso algo complicado ya que a penas existe literatura al respecto. De esta forma, el plazo de finalizaci´on de esta parte del proyecto se alarg´o m´as de lo deseado, pero finalmente se alcanz´o con ´exito el objetivo. Tras completar los dos primeros objetivos, se hizo frente al objetivo principal del proyecto: el desarrollo de una red neuronal para segmentar documentos escaneados. La arquitectura de red utilizada, UNET, me ha permitido poner en pr´actica los conocimientos aprendidos en las asignaturas de Aprendizaje Autom´atico yMiner´ıa de Datos, as´ı como conocer de primera mano la operaci´on de upsampling y las posibles formas de llevarla a cabo, opt´andose por la t´ecnica de pixel shuffle. De igual manera, su realizaci´on haciendo uso de PyTorch, ha sido muy fruct´ıfera desde el punto de vista personal, ya que era un framework con el que no hab´ıa trabajado y que ampl´ıa mis conocimientos en este ´area. Se propuso la identificaci´on de hasta siete clases en los documentos, obteni´endose resultados diversos para cada una de ellas. Las categor´ıas con zonas m´as peque˜nas y menos frecuentes, son las que peor rendimiento presentan. En algunos casos, como el de la clase “n´umero de p´agina”, la red reconoce todas las zonas de los documentos como no pertenecientes a dicha clase, por lo que no se alcanza el fin perseguido. Por el contrario, existe un rendimiento elevado para las categor´ıas “p´arrafos” e “im´agenes”, presentando un alto nivel de sensibilidad en la mayor´ıa de los thresholds estudiados. Para el resto de categor´ıas, los resultados son bastante similares entre s´ı, presentando una alta sensibilidad para el umbral 0.0, junto a una especificidad en el intervalo [0.50, 0.70]. Para valores del threshold superiores, la sensibilidad se ve claramente afectada, lo que indica que la red no es capaz de llevar a cabo una buena clasificaci´on. Por tanto, de las siete clases propuestas, se ha conseguido un nivel de precisi´on muy elevado para “p´arrafos”, “im´agenes” y, en menor medida, “t´ıtulos”, mientras que los resultados para “‘pie de p´agina”, “pie de foto”, “texto flotante” y “n´umero de p´agina” no son ´optimos. Tras obtener los resultados de la red, se propone la reconstrucci´on del documento en un nuevo formato, en este caso HTML. Durante el desarrollo de este proceso, he podido profundizar en el uso de la biblioteca OpenCV, una de las m´as usadas para el tratamien- to de im´agenes, y he tenido un primer contacto con los OCR, concretamente la versi´on Tesseract de Google. Asimismo, para facilitar al usuario la obtenci´on del documento reconstruido, se ha desarrollado un peque˜no servidor local haciendo uso de Flask. Evidentemente, tras este proyecto quedan abiertas muchas l´ıneas de trabajo, las cuales no han podido abordarse debido a la restricci´on temporal. Algunas de ellas son: 90
•Mejorar el algoritmo recursivo de chopping para generar chunks con zonas ´utiles m´as amplias, a costa de reducir el excedente de los m´argenes. •Considerar otras configuraciones de la red UNET, en busca de la mejora de los resultados obtenidos para las categor´ıas con zonas de menor tama˜no y presencia, as´ı como explorar otras opciones para las operaciones de downsampling y upsampling. •Mejorar la precisi´on en el proceso de reconstrucci´on de los documentos en formato HMTL. •Implementaci´on de un Docker en el que integrar tanto la funcionalidad de la red como la del servidor. 91
Bibliograf´ıa [1] A. Antonacopoulos, D. Bridson, C. Papadopoulos y S. Pletschacher, “A Realistic Dataset for Performance Evaluation of Document Layout Analysis”, en 2009 10th International Conference on Document Analysis and Recognition, 2009, p´ags. 296-300. doi:10.1109/ICDAR.2009.271. [2] W. Mcculloch y W. Pitts, “A Logical Calculus of Ideas Immanent in Nervous Activity”, Bulletin of Mathematical Biophysics, vol. 5, p´ags. 127-147, 1943. [3] P. Werbos, Beyond Regression: New Tools for Prediction and Analysis in the Behavioral Sciences. Harvard University, 1975. direcci´on: https://books.google.es/ books?id=z81XmgEACAAJ. [4] K. Fukushima, “Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position”, Biological Cybernetics, vol. 36, n.o4, p´ags. 193-202, abr. de 1980. doi:10.1007/bf00344251. direcci´on: https://doi.org/10.1007/bf00344251. [5] D. H. Hubel y T. N. Wiesel, “Receptive fields of single neurones in the cat ' s striate cortex”, The Journal of Physiology, vol. 148, n.o3, p´ags. 574-591, oct. de 1959. doi:10.1113/jphysiol.1959.sp006308. direcci´on: https://doi.org/10.1113/ jphysiol.1959.sp006308. [6] Y. LeCun, P. Haffner, L. Bottou e Y. Bengio, “Object Recognition with Gradient- Based Learning”, en Shape, Contour and Grouping in Computer Vision, Springer Berlin Heidelberg, 1999, p´ags. 319-345. doi:10.1007/3-540-46805-6_19. [7] I. Goodfellow, Y. Bengio y A. Courville, Deep Learning. MIT Press, 2016, http: //www.deeplearningbook.org. [8] J. Kumar, Types of padding in convolutional layers,https://www.geeksforgeeks. org/types-of-padding-in-convolution-layer/, 2019. [9] O. Ronneberger, P. Fischer y T. Brox, U-Net: Convolutional Networks for Biomedical Image Segmentation, 2015. arXiv: 1505.04597 [cs.CV]. [10] D. Mishra, Transposed Convolution,https://towardsdatascience.com/transposedconvolution-demystified-84ca81b4baba, 2020. [11] Wikipedia, Bilinear Interpolation,https://en.wikipedia.org/wiki/Bilinear_ interpolation. 99
Bibliograf´ıa [12] W. Shi, J. Caballero, F. Husz´ar y col., Real-Time Single Image and Video Super- Resolution Using an Efficient Sub-Pixel Convolutional Neural Network, 2016. arXiv: 1609.05158 [cs.CV]. [13] S. Sahoo, Residual blocks - Building blocks of ResNet,https://towardsdatascience. com/residual-blocks-building-blocks-of-resnet-fd90ca15d6ec, 2018. [14] A. Bindal, Normalization Techniques in Deep Neural Networks,https://medium. com/techspace-usict/normalization-techniques-in-deep-neural-networks- 9121bf100d8, 2019. [15] S. Ioffe y C. Szegedy, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”, CoRR, vol. abs/1502.03167, 2015. arXiv: 1502.03167. direcci´on: http://arxiv.org/abs/1502.03167. [16] D. Ulyanov, A. Vedaldi y V. S. Lempitsky, “Instance Normalization: The Missing Ingredient for Fast Stylization”, CoRR, vol. abs/1607.08022, 2016. arXiv: 1607. 08022. direcci´on: http://arxiv.org/abs/1607.08022. [17] H. S, Activation Functions: Sigmoid, tanh, ReLU, Leaky ReLU, PReLU, ELU, Threshold ReLU and Softmax basics for Neural Networks and Deep Learning,https: // himanshuxd.medium .com/ activationfunctions- sigmoid - reluleaky- relu-and-softmax-basics-for-neural-networks-and-deep-8d9c70eed91e, 2019. [18] PyTorch, SmoothL1Loss,https://pytorch.org/docs/stable/generated/torch. nn.SmoothL1Loss.html. [19] K. Beck, M. Beedle, A. van Bennekum y col., Manifesto for Agile Software Development, 2001. direcci´on: http://www.agilemanifesto.org/. [20] GitLab, https://about.gitlab.com/. [21] P. R. I. A. Research, Layout Analysis Dataset,https://www.primaresearch.org/ dataset/index.php. [22] P. Migdal y R. Jakubanis, Keras or PyTorch as your first depp learning framework, https://deepsense.ai/keras-or-pytorch/. [23] J. Brownlee, Gentle Introduction to the Adam Optimization Algorithm for Deep Learning,https://machinelearningmastery.com/adam-optimization-algorithm- for-deep-learning/. [24] X. Glorot e Y. Bengio, “Understanding the difficulty of training deep feedforward neural networks”, en AISTATS, 2010. [25] Pytorch Documentation: Module,https://pytorch.org/docs/stable/generated/ torch.nn.Module.html. [26] Pytorch Documentation: CONV2D,https://pytorch.org/docs/stable/generated/ torch.nn.Conv2d.html. 100
Bibliograf´ıa [27] @fvisin, Convolution arithmetic,https://github.com/vdumoulin/conv_arithmetic/ blob/master/README.md. [28] Pytorch Documentation: INSTANCENORM2D,https : / / pytorch . org / docs / stable/generated/torch.nn.InstanceNorm2d.html. [29] S. J. Reddi, S. Kale y S. Kumar, “On the Convergence of Adam and Beyond”, en International Conference on Learning Representations, 2018. direcci´on: https: //openreview.net/forum?id=ryQu7f-RZ. [30] Pytorch Documentation: TORCH.OPTIM,https://pytorch.org/docs/stable/ optim.html. [31] Pytorch Documentation: TORCH.UTILS.DATA,https://pytorch.org/docs/ stable/data.html. 101