# Optimización de Hiperparámetros OCR con Ray Tune para Documentos Académicos en Español **Trabajo Fin de Máster (TFM) – Máster Universitario en Inteligencia Artificial** **Líneas:** Percepción computacional · Aprendizaje automático **Autor:** Sergio Jiménez Jiménez · **UNIR** · **Año:** 2025 > Optimización sistemática de hiperparámetros de **PaddleOCR (PP-OCRv5)** mediante **Ray Tune** con **Optuna** para mejorar el reconocimiento óptico de caracteres en documentos académicos en español. --- ## Objetivo 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. **Resultado alcanzado:** CER = **1.49%** (objetivo cumplido) --- ## Resultados Principales | Modelo | CER | Precisión Caracteres | WER | Precisión Palabras | |--------|-----|---------------------|-----|-------------------| | PaddleOCR (Baseline) | 7.78% | 92.22% | 14.94% | 85.06% | | **PaddleOCR-HyperAdjust** | **1.49%** | **98.51%** | **7.62%** | **92.38%** | **Mejora obtenida:** Reducción del CER en un **80.9%** ### Configuración Óptima Encontrada ```python config_optimizada = { "textline_orientation": True, # CRÍTICO - reduce CER ~70% "use_doc_orientation_classify": False, "use_doc_unwarping": False, "text_det_thresh": 0.4690, # Correlación -0.52 con CER "text_det_box_thresh": 0.5412, "text_det_unclip_ratio": 0.0, "text_rec_score_thresh": 0.6350, } ``` --- ## Metodología ### Pipeline de Trabajo ``` PDF (académico UNIR) └─► Conversión a imagen (PyMuPDF, 300 DPI) └─► Extracción de ground truth └─► OCR con PaddleOCR (PP-OCRv5) └─► Evaluación (CER, WER con jiwer) └─► Optimización (Ray Tune + Optuna) ``` ### Experimento de Optimización | Parámetro | Valor | |-----------|-------| | Número de trials | 64 | | Algoritmo de búsqueda | OptunaSearch (TPE) | | Métrica objetivo | CER (minimizar) | | Trials concurrentes | 2 | | Tiempo total | ~6 horas (CPU) | --- ## Estructura del Repositorio ``` MastersThesis/ ├── docs/ # Documentación de capítulos del TFM │ ├── 00_resumen.md │ ├── 01_introduccion.md │ ├── 02_contexto_estado_arte.md │ ├── 03_objetivos_metodologia.md │ ├── 04_comparativa_soluciones.md │ ├── 05_optimizacion_hiperparametros.md │ ├── 06_resultados_discusion.md │ └── 07_conclusiones_trabajo_futuro.md ├── src/ │ ├── paddle_ocr_fine_tune_unir_raytune.ipynb # Experimento principal │ ├── paddle_ocr_tuning.py # Script de evaluación │ ├── dataset_manager.py # Clase ImageTextDataset │ ├── prepare_dataset.ipynb # Preparación del dataset │ └── raytune_paddle_subproc_results_*.csv # Resultados de 64 trials ├── results/ # Resultados de benchmarks ├── instructions/ # Documento PDF de UNIR utilizado ├── ocr_benchmark_notebook.ipynb # Benchmark comparativo inicial └── README.md ``` --- ## Hallazgos Clave 1. **`textline_orientation=True` es crítico**: Reduce el CER en un 69.7%. Para documentos con layouts mixtos (tablas, encabezados), la clasificación de orientación de línea es esencial. 2. **Umbral `text_det_thresh` importante**: Correlación -0.52 con CER. Valores óptimos entre 0.4-0.5. Valores < 0.1 causan fallos catastróficos (CER >40%). 3. **Componentes innecesarios para PDFs digitales**: `use_doc_orientation_classify` y `use_doc_unwarping` no mejoran el rendimiento en documentos académicos digitales. --- ## Requisitos | Componente | Versión | |------------|---------| | Python | 3.11.9 | | PaddlePaddle | 3.2.2 | | PaddleOCR | 3.3.2 | | Ray | 2.52.1 | | Optuna | 4.6.0 | | jiwer | (para métricas CER/WER) | | PyMuPDF | (para conversión PDF) | --- ## Uso ### Preparar dataset ```bash # Ejecutar prepare_dataset.ipynb para convertir PDF a imágenes y extraer ground truth jupyter notebook src/prepare_dataset.ipynb ``` ### Ejecutar optimización ```bash # Ejecutar el notebook principal de Ray Tune jupyter notebook src/paddle_ocr_fine_tune_unir_raytune.ipynb ``` ### Evaluación individual ```bash python src/paddle_ocr_tuning.py \ --pdf-folder ./dataset \ --textline-orientation True \ --text-det-thresh 0.469 \ --text-det-box-thresh 0.541 \ --text-rec-score-thresh 0.635 ``` --- ## Fuentes de Datos - **Dataset**: Instrucciones para la elaboración del TFE (UNIR), 24 páginas - **Resultados benchmark**: `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv` - **Resultados Ray Tune**: `src/raytune_paddle_subproc_results_20251207_192320.csv` --- ## Trabajo Pendiente para Completar el TFM ### Contexto: Limitaciones de Hardware Este trabajo adoptó la estrategia de **optimización de hiperparámetros** en lugar de **fine-tuning** debido a: - **Sin GPU dedicada**: Ejecución exclusivamente en CPU - **Tiempo de inferencia elevado**: ~69 segundos/página en CPU - **Fine-tuning inviable**: Entrenar modelos de deep learning sin GPU requeriría tiempos prohibitivos La optimización de hiperparámetros demostró ser una **alternativa efectiva** al fine-tuning, logrando una reducción del 80.9% en el CER sin reentrenar el modelo. ### Tareas Pendientes #### 1. Validación del Enfoque (Prioridad Alta) - [ ] **Validación cruzada en otros documentos**: Evaluar la configuración óptima en otros tipos de documentos en español (facturas, formularios, contratos) para verificar generalización - [ ] **Ampliar el dataset**: El dataset actual tiene solo 24 páginas. Construir un corpus más amplio y diverso (mínimo 100 páginas) - [ ] **Validación del ground truth**: Revisar manualmente el texto de referencia extraído automáticamente para asegurar su exactitud #### 2. Experimentación Adicional (Prioridad Media) - [ ] **Explorar `text_det_unclip_ratio`**: Este parámetro quedó fijado en 0.0. Incluirlo en el espacio de búsqueda podría mejorar resultados - [ ] **Comparativa con fine-tuning** (si se obtiene acceso a GPU): Cuantificar la brecha de rendimiento entre optimización de hiperparámetros y fine-tuning real - [ ] **Evaluación con GPU**: Medir tiempos de inferencia con aceleración GPU para escenarios de producción #### 3. Documentación y Presentación (Prioridad Alta) - [ ] **Completar memoria TFM**: Unificar los capítulos del directorio `docs/` en documento final siguiendo plantilla UNIR - [ ] **Crear presentación**: Preparar slides para la defensa del TFM - [ ] **Añadir diagramas y figuras**: Incluir visualizaciones de los resultados de Ray Tune (distribución CER, correlaciones) #### 4. Extensiones Futuras (Opcional) - [ ] **Herramienta de configuración automática**: Desarrollar una herramienta que determine automáticamente la configuración óptima para un nuevo tipo de documento - [ ] **Benchmark público para español**: Publicar un benchmark de OCR para documentos en español que facilite comparación de soluciones - [ ] **Optimización multi-objetivo**: Considerar CER, WER y tiempo de inferencia simultáneamente ### Recomendación de Próximos Pasos 1. **Inmediato**: Validar en 2-3 tipos de documentos adicionales para demostrar generalización 2. **Corto plazo**: Ampliar dataset y revisar ground truth manualmente 3. **Para la defensa**: Completar memoria unificada y crear presentación con visualizaciones --- ## Licencia Este proyecto es parte de un Trabajo Fin de Máster académico. --- ## Referencias - [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) - [Ray Tune](https://docs.ray.io/en/latest/tune/index.html) - [Optuna](https://optuna.org/) - [jiwer](https://github.com/jitsi/jiwer)