# Capítulo 3: Objetivos y Metodología de Trabajo ## 3.1 Introducción Este capítulo establece los objetivos del trabajo siguiendo la metodología SMART (Específico, Medible, Alcanzable, Relevante, Temporal) y describe la metodología experimental empleada para alcanzarlos. ## 3.2 Objetivo General > **Optimizar el rendimiento de PaddleOCR para documentos académicos en español mediante ajuste de hiperparámetros, alcanzando un CER inferior al 2% sin requerir fine-tuning del modelo ni recursos GPU dedicados.** ### Justificación SMART del Objetivo General | Criterio | Cumplimiento | |----------|--------------| | **Específico (S)** | Se define claramente qué se quiere lograr: optimizar PaddleOCR mediante ajuste de hiperparámetros para documentos en español | | **Medible (M)** | Se establece una métrica cuantificable: CER < 2% | | **Alcanzable (A)** | Es viable dado que: (1) PaddleOCR permite configuración de hiperparámetros, (2) Ray Tune posibilita búsqueda automatizada, (3) No se requiere GPU | | **Relevante (R)** | El impacto es demostrable: mejora la extracción de texto en documentos académicos sin costes adicionales de infraestructura | | **Temporal (T)** | El plazo es un cuatrimestre, correspondiente al TFM | ## 3.3 Objetivos Específicos ### OE1: Comparar soluciones OCR de código abierto > **Evaluar el rendimiento base de EasyOCR, PaddleOCR y DocTR en documentos académicos en español, utilizando CER y WER como métricas, para seleccionar el modelo más prometedor.** ### OE2: Preparar un dataset de evaluación > **Construir un dataset estructurado de imágenes de documentos académicos en español con su texto de referencia (ground truth) extraído del PDF original.** ### OE3: Identificar hiperparámetros críticos > **Analizar la correlación entre los hiperparámetros de PaddleOCR y las métricas de error para identificar los parámetros con mayor impacto en el rendimiento.** ### OE4: Optimizar hiperparámetros con Ray Tune > **Ejecutar una búsqueda automatizada de hiperparámetros utilizando Ray Tune con Optuna, evaluando al menos 50 configuraciones diferentes.** ### OE5: Validar la configuración optimizada > **Comparar el rendimiento de la configuración baseline versus la configuración optimizada sobre el dataset completo, documentando la mejora obtenida.** ## 3.4 Metodología de Trabajo ### 3.4.1 Visión General La metodología sigue un enfoque experimental estructurado en cinco fases: ``` ┌─────────────────────────────────────────────────────────────────┐ │ Fase 1: Preparación del Dataset │ │ - Conversión PDF → Imágenes (300 DPI) │ │ - Extracción de texto de referencia (PyMuPDF) │ │ - Estructura: carpetas img/ y txt/ pareadas │ └─────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ Fase 2: Benchmark Comparativo │ │ - Evaluación de EasyOCR, PaddleOCR, DocTR │ │ - Métricas: CER, WER │ │ - Selección del modelo base │ └─────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ Fase 3: Definición del Espacio de Búsqueda │ │ - Identificación de hiperparámetros configurables │ │ - Definición de rangos y distribuciones │ │ - Configuración de Ray Tune + Optuna │ └─────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ Fase 4: Optimización de Hiperparámetros │ │ - Ejecución de 64 trials con Ray Tune │ │ - Paralelización (2 trials concurrentes) │ │ - Registro de métricas y configuraciones │ └─────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────┐ │ Fase 5: Validación y Análisis │ │ - Comparación baseline vs optimizado │ │ - Análisis de correlaciones │ │ - Documentación de resultados │ └─────────────────────────────────────────────────────────────────┘ ``` ### 3.4.2 Fase 1: Preparación del Dataset #### Fuente de Datos Se utilizaron documentos PDF académicos de UNIR (Universidad Internacional de La Rioja), específicamente las instrucciones para la elaboración del TFE del Máster en Inteligencia Artificial. #### Proceso de Conversión El script `prepare_dataset.ipynb` implementa: 1. **Conversión PDF a imágenes**: - Biblioteca: PyMuPDF (fitz) - Resolución: 300 DPI - Formato de salida: PNG 2. **Extracción de texto de referencia**: - Método: `page.get_text("dict")` de PyMuPDF - Preservación de estructura de líneas - Tratamiento de texto vertical/marginal - Normalización de espacios y saltos de línea #### Estructura del Dataset ``` dataset/ ├── 0/ │ ├── instrucciones.pdf │ ├── img/ │ │ ├── page_0001.png │ │ ├── page_0002.png │ │ └── ... │ └── txt/ │ ├── page_0001.txt │ ├── page_0002.txt │ └── ... └── ... ``` #### Clase ImageTextDataset Se implementó una clase Python para cargar pares imagen-texto: ```python class ImageTextDataset: def __init__(self, root): # Carga pares (imagen, texto) de carpetas pareadas def __getitem__(self, idx): # Retorna (PIL.Image, str) ``` ### 3.4.3 Fase 2: Benchmark Comparativo #### Modelos Evaluados | Modelo | Versión | Configuración | |--------|---------|---------------| | EasyOCR | - | Idiomas: ['es', 'en'] | | PaddleOCR | PP-OCRv5 | Modelos server_det + server_rec | | DocTR | - | db_resnet50 + sar_resnet31 | #### Métricas de Evaluación Se utilizó la biblioteca `jiwer` para calcular: ```python from jiwer import wer, cer def evaluate_text(reference, prediction): return { 'WER': wer(reference, prediction), 'CER': cer(reference, prediction) } ``` ### 3.4.4 Fase 3: Espacio de Búsqueda #### Hiperparámetros Seleccionados | Parámetro | Tipo | Rango/Valores | Descripción | |-----------|------|---------------|-------------| | `use_doc_orientation_classify` | Booleano | [True, False] | Clasificación de orientación del documento | | `use_doc_unwarping` | Booleano | [True, False] | Corrección de deformación del documento | | `textline_orientation` | Booleano | [True, False] | Clasificación de orientación de línea de texto | | `text_det_thresh` | Continuo | [0.0, 0.7] | Umbral de detección de píxeles de texto | | `text_det_box_thresh` | Continuo | [0.0, 0.7] | Umbral de caja de detección | | `text_det_unclip_ratio` | Fijo | 0.0 | Coeficiente de expansión (fijado) | | `text_rec_score_thresh` | Continuo | [0.0, 0.7] | Umbral de confianza de reconocimiento | #### Configuración de Ray Tune ```python from ray import tune from ray.tune.search.optuna import OptunaSearch search_space = { "use_doc_orientation_classify": tune.choice([True, False]), "use_doc_unwarping": tune.choice([True, False]), "textline_orientation": tune.choice([True, False]), "text_det_thresh": tune.uniform(0.0, 0.7), "text_det_box_thresh": tune.uniform(0.0, 0.7), "text_det_unclip_ratio": tune.choice([0.0]), "text_rec_score_thresh": tune.uniform(0.0, 0.7), } tuner = tune.Tuner( trainable_paddle_ocr, tune_config=tune.TuneConfig( metric="CER", mode="min", search_alg=OptunaSearch(), num_samples=64, max_concurrent_trials=2 ) ) ``` ### 3.4.5 Fase 4: Ejecución de Optimización #### Arquitectura de Ejecución Debido a incompatibilidades entre Ray y PaddleOCR en el mismo proceso, se implementó una arquitectura basada en subprocesos: ``` Ray Tune (proceso principal) │ ├──► Subprocess 1: paddle_ocr_tuning.py --config {...} │ └──► Retorna JSON con métricas │ └──► Subprocess 2: paddle_ocr_tuning.py --config {...} └──► Retorna JSON con métricas ``` #### Script de Evaluación (paddle_ocr_tuning.py) El script recibe hiperparámetros por línea de comandos: ```bash python paddle_ocr_tuning.py \ --pdf-folder ./dataset \ --textline-orientation True \ --text-det-box-thresh 0.5 \ --text-det-thresh 0.4 \ --text-rec-score-thresh 0.6 ``` Y retorna métricas en formato JSON: ```json { "CER": 0.0125, "WER": 0.1040, "TIME": 331.09, "PAGES": 5, "TIME_PER_PAGE": 66.12 } ``` ### 3.4.6 Fase 5: Validación #### Protocolo de Validación 1. **Baseline**: Ejecución con configuración por defecto de PaddleOCR 2. **Optimizado**: Ejecución con mejor configuración encontrada 3. **Comparación**: Evaluación sobre las 24 páginas del dataset completo 4. **Métricas reportadas**: CER, WER, tiempo de procesamiento ### 3.5 Entorno de Ejecución #### Hardware | Componente | Especificación | |------------|----------------| | CPU | Intel Core (especificar modelo) | | RAM | 16 GB | | GPU | No disponible (ejecución en CPU) | | Almacenamiento | SSD | #### Software | Componente | Versión | |------------|---------| | Sistema Operativo | Windows 10/11 | | Python | 3.11.9 | | PaddleOCR | 3.3.2 | | PaddlePaddle | 3.2.2 | | Ray | 2.52.1 | | Optuna | 4.6.0 | ### 3.6 Limitaciones Metodológicas 1. **Tamaño del dataset**: El dataset contiene 24 páginas de un único tipo de documento. Resultados pueden no generalizar a otros formatos. 2. **Ejecución en CPU**: Los tiempos de procesamiento (~70s/página) serían significativamente menores con GPU. 3. **Ground truth imperfecto**: El texto de referencia extraído de PDF puede contener errores en documentos con layouts complejos. 4. **Parámetro fijo**: `text_det_unclip_ratio` quedó fijado en 0.0 durante todo el experimento por decisión de diseño inicial. ## 3.7 Resumen del Capítulo Este capítulo ha establecido: 1. Un objetivo general SMART: alcanzar CER < 2% mediante optimización de hiperparámetros 2. Cinco objetivos específicos medibles y alcanzables 3. Una metodología experimental en cinco fases claramente definidas 4. El espacio de búsqueda de hiperparámetros y la configuración de Ray Tune 5. Las limitaciones reconocidas del enfoque El siguiente capítulo presenta los resultados del benchmark comparativo inicial entre las tres soluciones OCR evaluadas.