Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

hugrubsan/Offline-Handwriting-Recognition-with-TensorFlow

Repository files navigation

Offline Handwriting Recognition with Deep Learning implemented in TensorFlow.

Sistema de Deep Learning para el Reconocimiento de Palabras Manuscritas implementado en TensorFlow y entrenado con IAM Handwriting Database.

Sobre este sistema se realiza una validación cruzada y el test IAM.

Añadida memoria teórica en TFG-Hugo-Rubio.pdf.

Estructura

Ficheros Python:

  • clean_IAM.py: Script para limpieza y el preprocesamiento de las imágenes.
  • ANN_model.py: Modelo de la red neuronal implementada en TensorFlow.
  • cross-validation.py: Script para la validación cruzada.
  • train.py: Script para entrenar el modelo y almacenar los parámetros que consiguen un mejor resultado.
  • test.py: Script para testear un modelo previamente entrenado.
  • hw_utils.py: Funciones útiles en distintas partes del proyecto.

CSV:

  • CSV/Cross-Validation: Ficheros que contienen los nombres y las transcripciones de las imágenes de los distintos subconjuntos de entrenamiento y validación.
  • CSV/IAM test: Ficheros que contienen los nombres y las transcripciones de las imágenes para el test IAM.
  • Data/appropriate_images.csv: Fichero csv que contiene el nombre de las imágenes aptas(87.108).

Fichero de configuración

Fichero que contiene todos los parámetros del proyecto:

"general": Parámetros generales del proyecto.
{
"raw_data_path": Ruta a las imágenes sin preprocesar.
"processed_data_path": Ruta para las imágenes preprocesadas.
"csv_path": Ruta al CSV de imágenes aptas.
"height": Altura de las imágenes preprocesadas.
"width": Anchura de las imágenes preprocesadas.
"dictionary": Diccionario para parsear las etiquetas.
}
"cnn-rnn-ctc": Hiperparámetros del modelo.
{
"kernel_size": Altura y anchura de los filtros de la CNN, filtros cuadrados.
"num_conv1" :Número de neuronas de la 1a capa CNN.
"num_conv2" : Número de neuronas de la 2a capa CNN.
"num_conv3" : Número de neuronas de la 3a capa CNN.
"num_conv4" : Número de neuronas de la 4a capa CNN.
"num_conv5" : Número de neuronas de la 5a capa CNN.
"num_rnn" : Número de neuronas de las capas RNNs.
"num_fc" : Número de neuronas de la 1a capa Fullconnect.
"num_classes": Número de etiquetas, incluida la etiqueta "blanco".
"ctc_input_len": Longitud de la secuencia de entrada a la CTC.
}
"cross-validation": Parámetros para la validación cruzada.
{
"csv_path": Ruta a los CSVs para la validación.
"results_path": Ruta para los resultados.
"num_epochs": Número de épocas.
"validation_period": Periodo de épocas para realizar la validación del modelo.
"print_period": Periodo de épocas para la impresión por pantalla.
"batch_size": Tamaño del lote de muestras.
}
"IAM-test": Parámetros para el test IAM.
{
"csv_path": Ruta a los CSVs para el test.
"results_path": Ruta para los resultados.
"checkpoints_path": Ruta para almacenar el modelo entrenado.
"num_epochs": Número de épocas.
"validation_period": Periodo de épocas para realizar la validación del modelo.
"print_period":Periodo de épocas para la impresión por pantalla.
"batch_size" : Tamaño del lote de muestras.
}

Primeros pasos.

Requisitos Software

Python 3.6 y librerías:

  • TensorFlow 1.3
  • PIL
  • Pandas
  • Numpy
  • Json
  • Ast

Instalación y preprocesado de datos.

Tras descargar o clonar el repositorio es necesario descargar el dataset de la IAM Handwriting Database y descomprimirlo en el directorio "Offline-Handwriting-Recognition-with-TensorFlow\Data".

Una vez hemos conseguido el dataset ejecutamos:

python3 clean_IAM.py [path_config_file]

Si no se añade ninguna ruta al archivo de configuración se tomará la ruta por defecto "./config.json"

Este script selecciona las imágenes aptas para las pruebas, las reescala y le añade relleno hasta igualar sus dimensiones.

Ejecución.

Cross-validation.

Para realizar la validación cruzada del modelo solo es necesario ejecutar:

python3 cross-validation.py [path_config_file]

Este script realiza 10 validaciones con distintas subdivisiones del dataset original y almacena los resultados en formato CSV.

Test IAM

El primer paso es entrenar el modelo con el dataset ofrecido por IAM con unas subdivisiones específicas. Para ello ejecutamos:

python3 train.py [path_config_file]

Este script realiza un entrenamiento del modelo y almacena los parámetros que mejor resultado han dado para el dataset de validación.

Una vez tenemos el modelo entrenado, obtenemos el resultado del test ejecutando:

python3 test.py [path_config_file]

El resultado se muestra por pantalla y las salidas del sistema se almacenan en CSV.

Resultados.

Cross-validation.

cross-val-cost

cross-val-ler

Test IAM

test-cost

test-ler

AltStyle によって変換されたページ (->オリジナル) /