diff --git a/thesis_output/plantilla_individual.htm b/thesis_output/plantilla_individual.htm
index 0ac161c..0ea6def 100644
--- a/thesis_output/plantilla_individual.htm
+++ b/thesis_output/plantilla_individual.htm
@@ -4550,22 +4550,18 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>Desafíos específicos del español
El procesamiento de documentos en español presenta particularidades que complican el reconocimiento automático de texto. Los caracteres especiales propios del idioma (la letra ñ, las vocales acentuadas á, é, í, ó, ú, la diéresis ü, y los signos de puntuación invertidos ¿, ¡) no están presentes en muchos conjuntos de entrenamiento internacionales, lo que puede degradar el rendimiento de modelos preentrenados predominantemente en inglés. La Tabla 1 resume los principales desafíos lingüísticos del OCR en español: Tabla 1. Desafíos lingüísticos específicos del OCR en español. Desafío Descripción Impacto en OCR Caracteres especiales ñ, á, é, í, ó, ú, ü, ¿, ¡ Confusión con caracteres similares (n/ñ, a/á) Palabras largas Español permite compuestos largos Mayor probabilidad de error por carácter Abreviaturas Dr., Sra., Ud., etc. Puntos internos confunden segmentación Nombres propios Tildes en apellidos (García, Martínez) Bases de datos sin soporte Unicode Tabla 1. Desafíos lingüísticos específicos del OCR en español. Desafío Descripción Impacto en OCR Caracteres especiales ñ, á, é, í, ó, ú, ü, ¿, ¡ Confusión con caracteres similares (n/ñ, a/á) Palabras largas Español permite compuestos largos Mayor probabilidad de error por carácter Abreviaturas Dr., Sra., Ud., etc. Puntos internos confunden segmentación Nombres propios Tildes en apellidos (García, Martínez) Bases de datos sin soporte Unicode Fuente: Elaboración propia. Además de los aspectos lingüísticos, los documentos académicos y administrativos en español presentan características tipográficas que complican el reconocimiento: variaciones en fuentes entre encabezados, cuerpo y notas al pie; presencia de índices, listas numeradas y cambios frecuentes de estilo; y saltos de línea que rompen la continuidad del texto. Estos elementos generan ruido que puede propagarse en aplicaciones downstream como la extracción de entidades nombradas o el análisis semántico. Los modelos OCR basados en redes neuronales profundas, como los empleados en PaddleOCR, EasyOCR o DocTR, ofrecen un rendimiento competitivo en benchmarks estándar. No obstante, estos resultados en condiciones controladas no siempre se trasladan a documentos del mundo real. La adaptación de modelos preentrenados a dominios específicos típicamente requiere fine-tuning con datos etiquetados del dominio objetivo y recursos computacionales significativos. Esta barrera técnica y económica excluye a muchos investigadores y organizaciones de beneficiarse plenamente de estas tecnologías. La Tabla 2 ilustra los requisitos típicos para diferentes estrategias de mejora de OCR: Tabla 2. Comparación de estrategias de mejora de modelos OCR. Estrategia Datos requeridos Hardware Tiempo Expertise Fine-tuning completo Miles de imágenes etiquetadas GPU de alta memoria Días o semanas Alto Fine-tuning parcial Cientos o miles de imágenes etiquetadas GPU dedicada Horas o días Medio-Alto Transfer learning Centenas de imágenes etiquetadas GPU dedicada Horas Medio Optimización de hiperparámetros Subconjunto de validación CPU o GPU (CUDA 12.2+ en Docker DocTR) Horas Bajo-Medio Tabla 2. Comparación de estrategias de mejora de modelos OCR. Estrategia Datos requeridos Hardware Tiempo Expertise Fine-tuning completo Miles de imágenes etiquetadas GPU de alta memoria Días o semanas Alto Fine-tuning parcial Cientos o miles de imágenes etiquetadas GPU dedicada Horas o días Medio-Alto Transfer learning Centenas de imágenes etiquetadas GPU dedicada Horas Medio Optimización de hiperparámetros Subconjunto de validación CPU o GPU (CUDA 12.2+ en Docker DocTR) Horas Bajo-Medio Fuente: docs/07_anexo_a.md, sección A.9. La presente investigación surge de una necesidad práctica: optimizar un sistema OCR para documentos académicos en español sin disponer de infraestructura de entrenamiento dedicada para fine-tuning. Esta restricción, lejos de ser una limitación excepcional, representa la realidad de muchos entornos académicos y empresariales donde el acceso a cómputo avanzado es limitado.La brecha entre investigación y práctica
La oportunidad: optimización sin fine-tuning
Este trabajo se centra específicamente en:
-Tabla 3. Delimitación del alcance del trabajo.
-Aspecto | Dentro del alcance | Fuera del alcance |
Tipo de documento | Documentos académicos digitales (PDF) | Documentos escaneados, manuscritos |
Idioma | Español | Otros idiomas |
Modelos | EasyOCR, PaddleOCR, DocTR | Soluciones comerciales (Google Cloud Vision, AWS Textract) |
Método de mejora | Optimización de hiperparámetros | Fine-tuning, aumento de datos |
Hardware | GPU de consumo y CPU para referencia de tiempos | Infraestructura multi-GPU |
Tabla 3. Delimitación del alcance del trabajo.
+Aspecto | Dentro del alcance | Fuera del alcance |
Tipo de documento | Documentos académicos digitales (PDF) | Documentos escaneados, manuscritos |
Idioma | Español | Otros idiomas |
Modelos | EasyOCR, PaddleOCR, DocTR | Soluciones comerciales (Google Cloud Vision, AWS Textract) |
Método de mejora | Optimización de hiperparámetros | Fine-tuning, aumento de datos |
Hardware | GPU de consumo y CPU para referencia de tiempos | Infraestructura multi-GPU |
Fuente: Elaboración propia.
-La relevancia de este problema radica en su aplicabilidad inmediata. Una metodología reproducible para optimizar OCR sin fine-tuning beneficiaría a múltiples grupos:
@@ -4644,11 +4638,9 @@ _Toc14106979">Connectionist Temporal Classification (CTC): La función de pérdida CTC (Graves et al., 2006) permite entrenar modelos de reconocimiento de secuencias sin necesidad de alineamiento carácter por carácter, simplificando enormemente el proceso de entrenamiento.Los sistemas OCR modernos siguen típicamente un pipeline de dos etapas principales, precedidas opcionalmente por una fase de preprocesamiento:
-Figura 1. Pipeline de un sistema OCR moderno
-
Figura 1. Pipeline de un sistema OCR moderno
+
Fuente: Elaboración propia.
-Antes de la detección, muchos sistemas aplican técnicas de preprocesamiento para mejorar la calidad de la imagen de entrada:
@@ -4666,11 +4658,9 @@ _Toc14106979">EAST (Efficient and Accurate Scene Text Detector): Propuesto por Zhou et al. (2017), EAST es un detector de una sola etapa que predice directamente cuadriláteros rotados o polígonos que encierran el texto. Su arquitectura FCN (Fully Convolutional Network) permite procesamiento eficiente de imágenes de alta resolución.CRAFT (Character Region Awareness for Text Detection): Desarrollado por Baek et al. (2019), CRAFT detecta regiones de caracteres individuales y las agrupa en palabras mediante el análisis de mapas de afinidad. Esta aproximación bottom-up es especialmente efectiva para texto con espaciado irregular.
DB (Differentiable Binarization): Propuesto por Liao et al. (2020), DB introduce una operación de binarización diferenciable que permite entrenar end-to-end un detector de texto basado en segmentación. Esta arquitectura es la utilizada por PaddleOCR y destaca por su velocidad y precisión.
-Tabla 4. Comparativa de arquitecturas de detección de texto.
-Arquitectura | Tipo | Salida | Fortalezas | Limitaciones |
EAST | Single-shot | Cuadriláteros rotados | Rápido, simple | Dificultad con texto curvo |
CRAFT | Bottom-up | Polígonos de palabra | Robusto a espaciado | Mayor coste computacional |
DB | Segmentación | Polígonos arbitrarios | Rápido, preciso | Sensible a parámetros |
Tabla 4. Comparativa de arquitecturas de detección de texto.
+Arquitectura | Tipo | Salida | Fortalezas | Limitaciones |
EAST | Single-shot | Cuadriláteros rotados | Rápido, simple | Dificultad con texto curvo |
CRAFT | Bottom-up | Polígonos de palabra | Robusto a espaciado | Mayor coste computacional |
DB | Segmentación | Polígonos arbitrarios | Rápido, preciso | Sensible a parámetros |
Fuente: Elaboración propia a partir de Zhou et al. (2017), Baek et al. (2019), Liao et al. (2020).
-Una vez detectadas las regiones de texto, la etapa de reconocimiento transcribe el contenido visual a texto digital. Las arquitecturas predominantes son:
@@ -4682,11 +4672,9 @@ _Toc14106979">SVTR (Scene-Text Visual Transformer Recognition): Desarrollado por Du et al. (2022), SVTR aplica la arquitectura Transformer al reconocimiento de texto, utilizando parches de imagen como tokens de entrada. Esta aproximación elimina la necesidad de RNN y permite capturar dependencias globales de manera más eficiente.Arquitecturas con Atención: Los modelos encoder-decoder con mecanismos de atención (Bahdanau et al., 2015) permiten al decodificador "enfocarse" en diferentes partes de la imagen mientras genera cada carácter. Esto es especialmente útil para texto largo o con layouts complejos.
TrOCR (Transformer-based OCR): Propuesto por Li et al. (2023), TrOCR utiliza un Vision Transformer (ViT) como encoder y un Transformer de lenguaje como decoder, logrando resultados estado del arte en múltiples benchmarks.
-Tabla 5. Comparativa de arquitecturas de reconocimiento de texto.
-Arquitectura | Encoder | Decoder | Pérdida | Características |
CRNN | CNN | BiLSTM | CTC | Rápido, robusto |
SVTR | ViT | Linear | CTC | Sin recurrencia |
Attention-based | CNN | LSTM+Attn | Cross-entropy | Flexible longitud |
TrOCR | ViT | Transformer | Cross-entropy | Estado del arte |
Tabla 5. Comparativa de arquitecturas de reconocimiento de texto.
+Arquitectura | Encoder | Decoder | Pérdida | Características |
CRNN | CNN | BiLSTM | CTC | Rápido, robusto |
SVTR | ViT | Linear | CTC | Sin recurrencia |
Attention-based | CNN | LSTM+Attn | Cross-entropy | Flexible longitud |
TrOCR | ViT | Transformer | Cross-entropy | Estado del arte |
Fuente: Elaboración propia a partir de Shi et al. (2016), Du et al. (2022), Li et al. (2023).
-La evaluación rigurosa de sistemas OCR requiere métricas estandarizadas que permitan comparaciones objetivas. Las métricas fundamentales se basan en la distancia de edición de Levenshtein.
@@ -4762,23 +4750,17 @@ _Toc14106979"> - Encoder: Vision Transformer modificado - Decoder: CTC o Attention-based - Vocabulario: Configurable por idiomaHiperparámetros configurables:
PaddleOCR expone numerosos hiperparámetros que permiten ajustar el comportamiento del sistema. Los más relevantes para este trabajo son:
-Tabla 6. Hiperparámetros de detección de PaddleOCR.
-Parámetro | Descripción | Rango | Defecto |
text_det_thresh | Umbral de probabilidad para píxeles de texto | [0.0, 1.0] | 0.3 |
text_det_box_thresh | Umbral de confianza para cajas detectadas | [0.0, 1.0] | 0.6 |
text_det_unclip_ratio | Factor de expansión de cajas detectadas | [0.0, 3.0] | 1.5 |
text_det_limit_side_len | Tamaño máximo del lado de imagen | [320, 2560] | 960 |
Tabla 6. Hiperparámetros de detección de PaddleOCR.
+Parámetro | Descripción | Rango | Defecto |
text_det_thresh | Umbral de probabilidad para píxeles de texto | [0.0, 1.0] | 0.3 |
text_det_box_thresh | Umbral de confianza para cajas detectadas | [0.0, 1.0] | 0.6 |
text_det_unclip_ratio | Factor de expansión de cajas detectadas | [0.0, 3.0] | 1.5 |
text_det_limit_side_len | Tamaño máximo del lado de imagen | [320, 2560] | 960 |
Fuente: Documentación oficial de PaddleOCR (PaddlePaddle, 2024).
-Tabla 7. Hiperparámetros de reconocimiento de PaddleOCR.
-Parámetro | Descripción | Rango | Defecto |
text_rec_score_thresh | Umbral de confianza para resultados | [0.0, 1.0] | 0.5 |
use_textline_orientation | Activar clasificación de orientación de línea | {True, False} | False |
rec_batch_size | Tamaño de batch para reconocimiento | [1, 64] | 6 |
Tabla 7. Hiperparámetros de reconocimiento de PaddleOCR.
+Parámetro | Descripción | Rango | Defecto |
text_rec_score_thresh | Umbral de confianza para resultados | [0.0, 1.0] | 0.5 |
use_textline_orientation | Activar clasificación de orientación de línea | {True, False} | False |
rec_batch_size | Tamaño de batch para reconocimiento | [1, 64] | 6 |
Fuente: Documentación oficial de PaddleOCR (PaddlePaddle, 2024).
-Tabla 8. Hiperparámetros de preprocesamiento de PaddleOCR.
-Parámetro | Descripción | Impacto |
use_doc_orientation_classify | Clasificación de orientación del documento | Alto para documentos escaneados |
use_doc_unwarping | Corrección de deformación/curvatura | Alto para fotos de documentos |
use_angle_cls | Clasificador de ángulo 0°/180° | Medio para documentos rotados |
Tabla 8. Hiperparámetros de preprocesamiento de PaddleOCR.
+Parámetro | Descripción | Impacto |
use_doc_orientation_classify | Clasificación de orientación del documento | Alto para documentos escaneados |
use_doc_unwarping | Corrección de deformación/curvatura | Alto para fotos de documentos |
use_angle_cls | Clasificador de ángulo 0°/180° | Medio para documentos rotados |
Fuente: Documentación oficial de PaddleOCR (PaddlePaddle, 2024).
-Fortalezas de PaddleOCR:
· Alta precisión en múltiples benchmarks
@@ -4807,17 +4789,13 @@ _Toc14106979">· Comunidad más pequeña· Menos opciones de modelos preentrenados para idiomas no ingleses
Tabla 9. Comparativa técnica de soluciones OCR de código abierto.
-Aspecto | EasyOCR | PaddleOCR | DocTR |
Framework | PyTorch | PaddlePaddle | TF/PyTorch |
Detector | CRAFT | DB | DB/LinkNet |
Reconocedor | CRNN | SVTR/CRNN | CRNN/SAR/ViTSTR |
Idiomas | Multilingüe | Multilingüe | Limitado |
Configurabilidad | Baja | Alta | Media |
Documentación | Media | Alta (CN) | Alta (EN) |
Actividad | Media | Alta | Media |
Licencia | Apache 2.0 | Apache 2.0 | Apache 2.0 |
Tabla 9. Comparativa técnica de soluciones OCR de código abierto.
+Aspecto | EasyOCR | PaddleOCR | DocTR |
Framework | PyTorch | PaddlePaddle | TF/PyTorch |
Detector | CRAFT | DB | DB/LinkNet |
Reconocedor | CRNN | SVTR/CRNN | CRNN/SAR/ViTSTR |
Idiomas | Multilingüe | Multilingüe | Limitado |
Configurabilidad | Baja | Alta | Media |
Documentación | Media | Alta (CN) | Alta (EN) |
Actividad | Media | Alta | Media |
Licencia | Apache 2.0 | Apache 2.0 | Apache 2.0 |
Fuente: Elaboración propia a partir de documentación oficial (2024).
-Tabla 10. Comparativa de facilidad de uso.
-Aspecto | EasyOCR | PaddleOCR | DocTR |
Instalación | pip install | pip install | pip install |
Complejidad de uso | Baja | Media | Media |
GPU requerida | Opcional | Opcional | Opcional |
Requisitos de memoria | Bajos | Medios | Medios |
Tabla 10. Comparativa de facilidad de uso.
+Aspecto | EasyOCR | PaddleOCR | DocTR |
Instalación | pip install | pip install | pip install |
Complejidad de uso | Baja | Media | Media |
GPU requerida | Opcional | Opcional | Opcional |
Requisitos de memoria | Bajos | Medios | Medios |
Fuente: Elaboración propia a partir de documentación oficial.
-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.
Tabla 13. 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) Aceleración GPU disponible para experimentación eficiente |
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 |
Tabla 13. 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) Aceleración GPU disponible para experimentación eficiente |
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 |
Fuente: docs/metrics/metrics.md.
-La metodología se estructura en cinco fases secuenciales, cada una de las cuales produce resultados que alimentan la siguiente. Desde la preparación del dataset hasta la validación final, el proceso sigue un diseño experimental. Esto permite reproducir y verificar cada paso.
-Figura 3. Fases de la metodología experimental
-
Figura 3. Fases de la metodología experimental
+
Fuente: Elaboración propia.
-Descripción de las fases:
· Fase 1 - Preparación del Dataset: Conversión PDF a imágenes (300 DPI), extracción de ground truth con PyMuPDF
@@ -5004,11 +4972,9 @@ concretos y metodología de trabajo1. 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
Figura 4. Estructura del dataset de evaluación
-
Figura 4. Estructura del dataset de evaluación
+
Fuente: Elaboración propia.
-Se implementó una clase Python para cargar pares imagen-texto que retorna tuplas (PIL.Image, str) desde carpetas pareadas. La implementación se encuentra en:
@@ -5018,11 +4984,9 @@ concretos y metodología de trabajo· src/doctr_service/dataset_manager.pyTabla 14. Modelos OCR evaluados en el benchmark inicial.
-Modelo | Versión | Configuración |
EasyOCR | - | Idiomas: ['es', 'en'] |
PaddleOCR | PP-OCRv5 | Modelos Mobile (limitación de VRAM) |
DocTR | - | db_resnet50 + sar_resnet31 |
Tabla 14. Modelos OCR evaluados en el benchmark inicial.
+Modelo | Versión | Configuración |
EasyOCR | - | Idiomas: ['es', 'en'] |
PaddleOCR | PP-OCRv5 | Modelos Mobile (limitación de VRAM) |
DocTR | - | db_resnet50 + sar_resnet31 |
Fuente: docs/metrics/metrics.md.
-Se utilizó la biblioteca jiwer para calcular CER y WER comparando el texto de referencia con la predicción del modelo OCR. La implementación se encuentra en:
@@ -5031,11 +4995,9 @@ concretos y metodología de trabajo· src/doctr_service/doctr_tuning_rest.pyTabla 15. Hiperparámetros seleccionados para optimización.
-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 |
Tabla 15. Hiperparámetros seleccionados para optimización.
+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 |
Fuente: Elaboración propia.
-El espacio de búsqueda se definió utilizando tune.choice() para parámetros booleanos y tune.uniform() para parámetros continuos, con OptunaSearch como algoritmo de optimización configurado para minimizar CER en 64 trials. La implementación completa está disponible en src/raytune/raytune_ocr.py (ver Anexo A).
@@ -5074,33 +5036,25 @@ docker compose -f docker-compose.tuning.doctr.yml down4. Métricas reportadas: CER, WER, tiempo de procesamiento
Tabla 16. Especificaciones de hardware del entorno de desarrollo.
-Componente | Especificación |
CPU | AMD Ryzen 7 5800H |
RAM | 16 GB DDR4 |
GPU | NVIDIA RTX 3060 Laptop (5.66 GB VRAM) |
Almacenamiento | SSD |
Tabla 16. Especificaciones de hardware del entorno de desarrollo.
+Componente | Especificación |
CPU | AMD Ryzen 7 5800H |
RAM | 16 GB DDR4 |
GPU | NVIDIA RTX 3060 Laptop (5.66 GB VRAM) |
Almacenamiento | SSD |
Fuente: docs/metrics/metrics.md.
-Tabla 17. Software utilizado en el entorno de desarrollo.
-Componente | Versión |
PaddlePaddle | 3.2.2 |
PaddleOCR | 3.3.2 |
Ray Tune | 2.52.1 |
Optuna | 4.7.0 |
DocTR (python-doctr) | >= 0.8.0 |
EasyOCR | >= 1.7.0 |
Tabla 17. Software utilizado en el entorno de desarrollo.
+Componente | Versión |
PaddlePaddle | 3.2.2 |
PaddleOCR | 3.3.2 |
Ray Tune | 2.52.1 |
Optuna | 4.7.0 |
DocTR (python-doctr) | >= 0.8.0 |
EasyOCR | >= 1.7.0 |
Fuente: src/paddle_ocr/requirements.txt, src/raytune/requirements.txt, src/doctr_service/requirements.txt, src/easyocr_service/requirements.txt.
-La decisión de ejecutar los experimentos en hardware local en lugar de utilizar servicios cloud se fundamenta en un análisis de costos y beneficios operativos.
-Tabla 18. Costos de GPU en plataformas cloud.
-Plataforma | GPU | Costo/Hora | Costo Mensual |
AWS EC2 g4dn.xlarge | NVIDIA T4 (16 GB) | $0.526 | ~$384 |
Google Colab Pro | T4/P100 | ~$1.30 | $10 + CU extras |
Google Colab Pro+ | T4/V100/A100 | ~$1.30 | $50 + CU extras |
Tabla 18. Costos de GPU en plataformas cloud.
+Plataforma | GPU | Costo/Hora | Costo Mensual |
AWS EC2 g4dn.xlarge | NVIDIA T4 (16 GB) | $0.526 | ~$384 |
Google Colab Pro | T4/P100 | ~$1.30 | $10 + CU extras |
Google Colab Pro+ | T4/V100/A100 | ~$1.30 | $50 + CU extras |
Fuente: Precios públicos de AWS y Google Cloud. Ver Anexo A, sección de fuentes de precios cloud (enero 2026).
-Para las tareas específicas de este proyecto, los costos estimados en cloud serían:
-Tabla 19. Análisis de costos del proyecto en plataformas cloud.
-Tarea | Tiempo GPU | Costo AWS | Costo Colab Pro |
Ajuste hiperparámetros (64×3 trials) | ~3 horas | ~$1.58 | ~$3.90 |
Evaluación completa (45 páginas) | ~5 min | ~$0.04 | ~$0.11 |
Desarrollo y depuración (20 horas/mes) | 20 horas | ~$10.52 | ~$26.00 |
Tabla 19. Análisis de costos del proyecto en plataformas cloud.
+Tarea | Tiempo GPU | Costo AWS | Costo Colab Pro |
Ajuste hiperparámetros (64×3 trials) | ~3 horas | ~$1.58 | ~$3.90 |
Evaluación completa (45 páginas) | ~5 min | ~$0.04 | ~$0.11 |
Desarrollo y depuración (20 horas/mes) | 20 horas | ~$10.52 | ~$26.00 |
Fuente: Elaboración propia a partir de precios públicos. Ver Anexo A, sección de fuentes de precios cloud (enero 2026).
-Las ventajas de la ejecución local incluyen:
1. Costo cero de GPU: La RTX 3060 ya está disponible en el equipo de desarrollo
@@ -5147,11 +5101,9 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>Se seleccionaron tres soluciones OCR de código abierto representativas del estado del arte:
-Tabla 20. Soluciones OCR evaluadas en el benchmark comparativo.
-Solución | Desarrollador | Versión | Justificación de selección |
EasyOCR | Jaided AI | Última estable | Popularidad, facilidad de uso |
PaddleOCR | Baidu | PP-OCRv5 | Estado del arte industrial |
DocTR | Mindee | Última estable | Orientación académica |
Tabla 20. Soluciones OCR evaluadas en el benchmark comparativo.
+Solución | Desarrollador | Versión | Justificación de selección |
EasyOCR | Jaided AI | Última estable | Popularidad, facilidad de uso |
PaddleOCR | Baidu | PP-OCRv5 | Estado del arte industrial |
DocTR | Mindee | Última estable | Orientación académica |
Fuente: docs/metrics/metrics.md.
-Imágenes Docker disponibles en el registro del proyecto:
· PaddleOCR: seryus.ddns.net/unir/paddle-ocr-gpu, seryus.ddns.net/unir/paddle-ocr-cpu
@@ -5167,11 +5119,9 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>Se utilizó el documento "Instrucciones para la redacción y elaboración del TFE" del Máster Universitario en Inteligencia Artificial de UNIR, ubicado en la carpeta instructions/.
-Tabla 21. Características del dataset de evaluación inicial.
-Característica | Valor |
Documento fuente | Instrucciones TFE UNIR |
Número de páginas evaluadas | 5 (benchmark inicial) |
Formato | PDF digital (no escaneado) |
Idioma principal | Español |
Resolución de conversión | 300 DPI |
Formato de imagen | PNG |
Tabla 21. Características del dataset de evaluación inicial.
+Característica | Valor |
Documento fuente | Instrucciones TFE UNIR |
Número de páginas evaluadas | 5 (benchmark inicial) |
Formato | PDF digital (no escaneado) |
Idioma principal | Español |
Resolución de conversión | 300 DPI |
Formato de imagen | PNG |
Fuente: docs/metrics/metrics.md.
-La conversión del PDF a imágenes se realizó mediante PyMuPDF (fitz) a 300 DPI, resolución estándar para OCR que proporciona suficiente detalle para caracteres pequeños sin generar archivos excesivamente grandes. La implementación está disponible en src/prepare_dataset.ipynb.
@@ -5187,11 +5137,9 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>Durante el benchmark inicial se evaluó PaddleOCR con configuración por defecto en un subconjunto del dataset. Los resultados preliminares mostraron variabilidad significativa entre páginas, en función de los cambios de formato y de la estructura del texto.
-Tabla 22. Variabilidad del error por tipo de contenido.
-Tipo de contenido | Nivel de error | Observaciones |
Texto corrido | Bajo | Mejor rendimiento |
Texto con listas | Medio | Rendimiento intermedio |
Índice y encabezados | Medio | Orden de lectura sensible |
Encabezados + notas | Medio | Variación tipográfica |
Tabla 22. Variabilidad del error por tipo de contenido.
+Tipo de contenido | Nivel de error | Observaciones |
Texto corrido | Bajo | Mejor rendimiento |
Texto con listas | Medio | Rendimiento intermedio |
Índice y encabezados | Medio | Orden de lectura sensible |
Encabezados + notas | Medio | Variación tipográfica |
Fuente: Elaboración propia a partir del benchmark.
-Observaciones del benchmark inicial:
1. Las páginas con más cambios de formato y listados presentaron mayor error debido a la dificultad de ordenar correctamente las líneas de texto.
@@ -5200,11 +5148,9 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>Los tres modelos evaluados representan diferentes paradigmas de OCR:
-Tabla 23. Comparativa de arquitecturas OCR evaluadas.
-Modelo | Tipo | Componentes | Fortalezas Clave |
EasyOCR | End-to-end (det + rec) | CRAFT + CRNN/Transformer | Ligero, fácil de usar, multilingüe |
PaddleOCR | End-to-end (det + rec + cls) | DB + SVTR/CRNN | Soporte multilingüe robusto, pipeline configurable |
DocTR | End-to-end (det + rec) | DB/LinkNet + CRNN/SAR/ViTSTR | Orientado a investigación, API limpia |
Tabla 23. Comparativa de arquitecturas OCR evaluadas.
+Modelo | Tipo | Componentes | Fortalezas Clave |
EasyOCR | End-to-end (det + rec) | CRAFT + CRNN/Transformer | Ligero, fácil de usar, multilingüe |
PaddleOCR | End-to-end (det + rec + cls) | DB + SVTR/CRNN | Soporte multilingüe robusto, pipeline configurable |
DocTR | End-to-end (det + rec) | DB/LinkNet + CRNN/SAR/ViTSTR | Orientado a investigación, API limpia |
Fuente: Documentación oficial de cada herramienta (JaidedAI, 2020; PaddlePaddle, 2024; Mindee, 2021).
-Un análisis cualitativo de los errores producidos reveló patrones específicos:
@@ -5226,11 +5172,9 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>La selección de PaddleOCR para la fase de optimización se basó en los siguientes criterios:
-Tabla 24. Evaluación de criterios de selección (cualitativa).
-Criterio | EasyOCR | PaddleOCR | DocTR |
CER benchmark | Medio | Mejor | Medio |
Configurabilidad | Baja | Alta | Media |
Soporte español | Sí | Sí (dedicado) | Limitado |
Documentación | Media | Alta | Alta |
Mantenimiento | Medio | Alto | Medio |
Tabla 24. Evaluación de criterios de selección (cualitativa).
+Criterio | EasyOCR | PaddleOCR | DocTR |
CER benchmark | Medio | Mejor | Medio |
Configurabilidad | Baja | Alta | Media |
Soporte español | Sí | Sí (dedicado) | Limitado |
Documentación | Media | Alta | Alta |
Mantenimiento | Medio | Alto | Medio |
Fuente: Elaboración propia a partir del benchmark y la documentación de cada herramienta.
-PaddleOCR expone múltiples hiperparámetros ajustables, clasificados por etapa del pipeline:
@@ -5265,11 +5209,9 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>El experimento se ejecutó en el siguiente entorno:
-Tabla 25. Entorno de ejecución del experimento.
-Componente | Versión/Especificación |
Sistema operativo | Ubuntu 24.04.3 LTS |
Python | 3.12.3 |
PaddlePaddle | 3.2.2 |
PaddleOCR | 3.3.2 |
Ray | 2.52.1 |
Optuna | 4.7.0 |
CPU | AMD Ryzen 7 5800H |
RAM | 16 GB DDR4 |
GPU | NVIDIA RTX 3060 Laptop (5.66 GB VRAM) |
Tabla 25. Entorno de ejecución del experimento.
+Componente | Versión/Especificación |
Sistema operativo | Ubuntu 24.04.3 LTS |
Python | 3.12.3 |
PaddlePaddle | 3.2.2 |
PaddleOCR | 3.3.2 |
Ray | 2.52.1 |
Optuna | 4.7.0 |
CPU | AMD Ryzen 7 5800H |
RAM | 16 GB DDR4 |
GPU | NVIDIA RTX 3060 Laptop (5.66 GB VRAM) |
Fuente: src/paddle_ocr/requirements.txt, src/raytune/requirements.txt, docs/metrics/metrics.md.
-La arquitectura basada en contenedores Docker es fundamental para este proyecto debido a los conflictos de dependencias inherentes entre los diferentes componentes:
@@ -5277,11 +5219,9 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>· Aislamiento de Ray Tune: Ray Tune tiene sus propias dependencias que pueden entrar en conflicto con las librerías de inferencia OCR
Esta arquitectura containerizada permite ejecutar cada componente en su entorno aislado óptimo, comunicándose via API REST:
-Figura 5. Arquitectura de ejecución con Docker Compose
-
Figura 5. Arquitectura de ejecución con Docker Compose
+
Fuente: Elaboración propia.
-La arquitectura containerizada src/docker-compose.tuning.paddle.yml))))), src/docker-compose.tuning.doctr.yml, src/docker-compose.tuning.easyocr.yml, src/docker-compose.tuning.ymlofrece:
1. Aislamiento de dependencias entre Ray Tune y los motores OCR
@@ -5310,26 +5250,20 @@ docker compose -f docker-compose.tuning.doctr.yml downLa infraestructura del proyecto se basa en contenedores Docker para garantizar reproducibilidad y aislamiento de dependencias. Se generaron seis imágenes Docker, cada una optimizada para su propósito específico.
-Tabla 26. Imágenes Docker generadas para el proyecto.
-Imagen | Propósito | Base | Puerto |
PaddleOCR con aceleración GPU | nvidia/cuda:12.4.1-cudnn-runtime | 8002 | |
PaddleOCR para entornos sin GPU | python:3.11-slim | 8002 | |
EasyOCR con aceleración GPU | nvidia/cuda:13.0.2-cudnn-runtime | 8002* | |
DocTR con aceleración GPU | nvidia/cuda:13.0.2-cudnn-runtime | 8003 | |
Orquestador Ray Tune | python:3.12-slim | - |
Tabla 26. Imágenes Docker generadas para el proyecto.
+Imagen | Propósito | Base | Puerto |
PaddleOCR con aceleración GPU | nvidia/cuda:12.4.1-cudnn-runtime | 8002 | |
PaddleOCR para entornos sin GPU | python:3.11-slim | 8002 | |
EasyOCR con aceleración GPU | nvidia/cuda:13.0.2-cudnn-runtime | 8002* | |
DocTR con aceleración GPU | nvidia/cuda:13.0.2-cudnn-runtime | 8003 | |
Orquestador Ray Tune | python:3.12-slim | - |
Fuente: Elaboración propia. Dockerfiles disponibles en src/paddle_ocr, src/easyocr_service, src/doctr_service, src/raytune.
-Figura 6. Arquitectura de microservicios para optimización OCR
-
Figura 6. Arquitectura de microservicios para optimización OCR
+
Fuente: Elaboración propia.
-Los Dockerfiles utilizan una estrategia de build multi-stage para optimizar tiempos de construcción y tamaño de imágenes:
-Figura 7. Estrategia de build multi-stage
-
Figura 7. Estrategia de build multi-stage
+
Fuente: Elaboración propia.
-Ventajas de esta estrategia:
1. Caché de dependencias: La etapa base (CUDA + dependencias) se cachea y reutiliza
@@ -5337,20 +5271,16 @@ docker compose -f docker-compose.tuning.doctr.yml down3. Imágenes optimizadas: Solo se incluyen los archivos necesarios para ejecución
El proyecto incluye múltiples archivos Docker Compose para diferentes escenarios de uso:
-Tabla 27. Archivos Docker Compose del proyecto.
-Archivo | Propósito | Servicios |
Optimización principal | RayTune + PaddleOCR + DocTR | |
Optimización EasyOCR | RayTune + EasyOCR | |
Optimización PaddleOCR | RayTune + PaddleOCR | |
Optimización DocTR | RayTune + DocTR |
Tabla 27. Archivos Docker Compose del proyecto.
+Archivo | Propósito | Servicios |
Optimización principal | RayTune + PaddleOCR + DocTR | |
Optimización EasyOCR | RayTune + EasyOCR | |
Optimización PaddleOCR | RayTune + PaddleOCR | |
Optimización DocTR | RayTune + DocTR |
Fuente: src/docker-compose.tuning.yml, src/docker-compose.tuning.easyocr.yml, src/docker-compose.tuning.paddle.yml, src/docker-compose.tuning.doctr.yml.
-Nota: EasyOCR y PaddleOCR utilizan el mismo puerto (8002). Debido a limitaciones de recursos GPU (VRAM insuficiente para ejecutar múltiples modelos OCR simultáneamente), solo se ejecuta un servicio a la vez durante los experimentos. Por esta razón, EasyOCR tiene su propio archivo Docker Compose separado.
Se utilizan volúmenes Docker nombrados para persistir los modelos descargados entre ejecuciones:
-Tabla 28. Volúmenes Docker para caché de modelos.
-Volumen | Servicio | Contenido |
paddlex-model-cache | PaddleOCR | Modelos PP-OCRv5 |
easyocr-model-cache | EasyOCR | Modelos CRAFT + CRNN |
doctr-model-cache | DocTR | Modelos db_resnet50 + crnn_vgg16_bn |
Tabla 28. Volúmenes Docker para caché de modelos.
+Volumen | Servicio | Contenido |
paddlex-model-cache | PaddleOCR | Modelos PP-OCRv5 |
easyocr-model-cache | EasyOCR | Modelos CRAFT + CRNN |
doctr-model-cache | DocTR | Modelos db_resnet50 + crnn_vgg16_bn |
Fuente: src/docker-compose.tuning.yml, src/docker-compose.tuning.easyocr.yml, src/docker-compose.tuning.paddle.yml, src/docker-compose.tuning.doctr.yml.
-Todos los servicios implementan health checks para garantizar disponibilidad antes de iniciar la optimización:
@@ -5367,11 +5297,9 @@ docker compose -f docker-compose.tuning.doctr.yml down· EasyOCR: 120 segundos (carga de modelos CRAFT)
· DocTR: 180 segundos (modelos ResNet más pesados)
Figura 8. Flujo de ejecución de optimización con Ray Tune
-
Figura 8. Flujo de ejecución de optimización con Ray Tune
+
Fuente: Elaboración propia.
-Para reproducir los experimentos:
@@ -5403,20 +5331,16 @@ docker compose -f docker-compose.tuning.paddle.yml down· src/raytune_paddle_subproc_results_20251207_192320.csv
Para la fase de optimización se extendió el dataset:
-Tabla 29. Características del dataset de optimización.
-Característica | Valor |
Páginas del dataset completo | 45 |
Páginas por trial | 5 (páginas 5-10) |
Estructura | Carpetas img/ y txt/ pareadas |
Resolución | 300 DPI |
Formato imagen | PNG |
Tabla 29. Características del dataset de optimización.
+Característica | Valor |
Páginas del dataset completo | 45 |
Páginas por trial | 5 (páginas 5-10) |
Estructura | Carpetas img/ y txt/ pareadas |
Resolución | 300 DPI |
Formato imagen | PNG |
La clase ImageTextDataset gestiona la carga de pares imagen-texto desde la estructura de carpetas pareadas. La implementación está disponible en src/paddle_ocr/dataset_manager.py, src/easyocr_service/dataset_manager.py y src/doctr_service/dataset_manager.py.
El espacio de búsqueda se definió considerando los hiperparámetros más relevantes identificados en la documentación de PaddleOCR, utilizando tune.choice() para parámetros booleanos y tune.uniform() para umbrales continuos. La implementación está disponible en src/raytune/raytune_ocr.py (ver Anexo A).
-Tabla 30. Descripción detallada del espacio de búsqueda.
-Parámetro | Tipo | Rango | Descripción |
use_doc_orientation_classify | Booleano | {True, False} | Clasificación de orientación del documento completo |
use_doc_unwarping | Booleano | {True, False} | Corrección de deformación/curvatura |
textline_orientation | Booleano | {True, False} | Clasificación de orientación por línea de texto |
text_det_thresh | Continuo | [0.0, 0.7] | Umbral de probabilidad para píxeles de texto |
text_det_box_thresh | Continuo | [0.0, 0.7] | Umbral de confianza para cajas detectadas |
text_det_unclip_ratio | Fijo | 0.0 | Coeficiente de expansión (no explorado) |
text_rec_score_thresh | Continuo | [0.0, 0.7] | Umbral de confianza de reconocimiento |
Tabla 30. Descripción detallada del espacio de búsqueda.
+Parámetro | Tipo | Rango | Descripción |
use_doc_orientation_classify | Booleano | {True, False} | Clasificación de orientación del documento completo |
use_doc_unwarping | Booleano | {True, False} | Corrección de deformación/curvatura |
textline_orientation | Booleano | {True, False} | Clasificación de orientación por línea de texto |
text_det_thresh | Continuo | [0.0, 0.7] | Umbral de probabilidad para píxeles de texto |
text_det_box_thresh | Continuo | [0.0, 0.7] | Umbral de confianza para cajas detectadas |
text_det_unclip_ratio | Fijo | 0.0 | Coeficiente de expansión (no explorado) |
text_rec_score_thresh | Continuo | [0.0, 0.7] | Umbral de confianza de reconocimiento |
Fuente: Documentación de PaddleOCR.
-Justificación del espacio:
1. Rango [0.0, 0.7] para umbrales: Se evitan valores extremos (>0.7) que podrían filtrar demasiado texto válido, y se incluye 0.0 para evaluar el impacto de desactivar el filtrado.
@@ -5424,47 +5348,37 @@ docker compose -f docker-compose.tuning.paddle.yml down1. Parámetros booleanos completos: Los tres parámetros de preprocesamiento se exploran completamente para identificar cuáles son necesarios para documentos digitales.
Se configuró Ray Tune con OptunaSearch como algoritmo de búsqueda, optimizando CER en 64 trials con 2 ejecuciones concurrentes. La implementación está disponible en src/raytune/raytune_ocr.py (ver Anexo A).
-Tabla 31. Parámetros de configuración de Ray Tune.
-Parámetro | Valor | Justificación |
Métrica objetivo | CER | Métrica estándar para OCR |
Modo | min | Minimizar tasa de error |
Algoritmo | OptunaSearch (TPE) | Eficiente para espacios mixtos |
Número de trials | 64 | Balance entre exploración y tiempo |
Trials concurrentes | 2 | Limitado por memoria disponible |
Tabla 31. Parámetros de configuración de Ray Tune.
+Parámetro | Valor | Justificación |
Métrica objetivo | CER | Métrica estándar para OCR |
Modo | min | Minimizar tasa de error |
Algoritmo | OptunaSearch (TPE) | Eficiente para espacios mixtos |
Número de trials | 64 | Balance entre exploración y tiempo |
Trials concurrentes | 2 | Limitado por memoria disponible |
Fuente: src/raytune/raytune_ocr.py.
-Elección de 64 trials:
El número de trials se eligió buscando un equilibrio entre exploración del espacio de búsqueda y tiempo total de ejecución.
El experimento se ejecutó exitosamente con los siguientes resultados globales:
-Tabla 32. Resumen de la ejecución del experimento (referencia CPU).
-Métrica | Valor |
Trials completados | 64/64 |
Trials fallidos | 0 |
Tiempo total (CPU) | 6.2 horas |
Tiempo medio por trial (CPU) | 347.6 segundos |
Páginas procesadas | 320 (64 trials × 5 páginas) |
Tabla 32. Resumen de la ejecución del experimento (referencia CPU).
+Métrica | Valor |
Trials completados | 64/64 |
Trials fallidos | 0 |
Tiempo total (CPU) | 6.2 horas |
Tiempo medio por trial (CPU) | 347.6 segundos |
Páginas procesadas | 320 (64 trials × 5 páginas) |
Fuente: src/raytune_paddle_subproc_results_20251207_192320.csv.
-Del archivo CSV de resultados src/results/raytune_paddle_results_20260119_122609.csv:
-Tabla 33. Estadísticas descriptivas de los 64 trials.
-Estadística | CER | WER | Tiempo/Página (s) |
count | 64 | 64 | 64 |
mean | 2.30% | 9.25% | 0.84 |
std | 2.20% | 1.78% | 0.53 |
min | 0.79% | 6.80% | 0.56 |
50% (mediana) | 0.87% | 8.39% | 0.59 |
max | 7.30% | 13.20% | 2.22 |
Tabla 33. Estadísticas descriptivas de los 64 trials.
+Estadística | CER | WER | Tiempo/Página (s) |
count | 64 | 64 | 64 |
mean | 2.30% | 9.25% | 0.84 |
std | 2.20% | 1.78% | 0.53 |
min | 0.79% | 6.80% | 0.56 |
50% (mediana) | 0.87% | 8.39% | 0.59 |
max | 7.30% | 13.20% | 2.22 |
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-Observaciones:
1. Baja varianza en CER: La desviación estándar (2.20%) es similar a la media (2.30%), indicando una distribución relativamente consistente sin valores extremos catastróficos.
1. Mediana vs Media: La mediana del CER (0.87%) es menor que la media (2.30%), confirmando una distribución ligeramente sesgada hacia valores bajos.
1. Velocidad GPU: El tiempo de ejecución promedio es de 0.84 s/página, lo que representa una aceleración significativa respecto a la ejecución en CPU (~69 s/página, 82x más rápido).
Tabla 34. Distribución de trials por rango de CER.
-Rango CER | Número de trials | Porcentaje |
< 2% | 43 | 67.2% |
2% - 5% | 10 | 15.6% |
5% - 10% | 11 | 17.2% |
> 10% | 0 | 0.0% |
Tabla 34. Distribución de trials por rango de CER.
+Rango CER | Número de trials | Porcentaje |
< 2% | 43 | 67.2% |
2% - 5% | 10 | 15.6% |
5% - 10% | 11 | 17.2% |
> 10% | 0 | 0.0% |
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-Figura 9. Distribución de trials por rango de CER
-
Figura 9. Distribución de trials por rango de CER
+
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-La mayoría de trials (67.2%) alcanzaron CER < 2%, cumpliendo el objetivo establecido. Ningún trial presentó fallos catastróficos (CER > 10%), demostrando la estabilidad de la optimización con GPU.
Tabla 35. Configuración óptima identificada.
-Parámetro | Valor óptimo | Valor por defecto | Cambio |
textline_orientation | True | False | Activado |
use_doc_orientation_classify | True | False | Activado |
use_doc_unwarping | False | False | Sin cambio |
text_det_thresh | 0.0462 | 0.3 | -0.254 |
text_det_box_thresh | 0.4862 | 0.6 | -0.114 |
text_det_unclip_ratio | 0.0 | 1.5 | -1.5 (fijado) |
text_rec_score_thresh | 0.5658 | 0.5 | +0.066 |
Tabla 35. Configuración óptima identificada.
+Parámetro | Valor óptimo | Valor por defecto | Cambio |
textline_orientation | True | False | Activado |
use_doc_orientation_classify | True | False | Activado |
use_doc_unwarping | False | False | Sin cambio |
text_det_thresh | 0.0462 | 0.3 | -0.254 |
text_det_box_thresh | 0.4862 | 0.6 | -0.114 |
text_det_unclip_ratio | 0.0 | 1.5 | -1.5 (fijado) |
text_rec_score_thresh | 0.5658 | 0.5 | +0.066 |
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-Se calculó la correlación de Pearson entre los parámetros de configuración (codificados como 0/1 en el caso de booleanos) y las métricas de error:
-Tabla 36. Correlación de parámetros con CER.
-Parámetro | Correlación con CER | Interpretación |
use_doc_unwarping | +0.879 | Correlación alta positiva |
use_doc_orientation_classify | -0.712 | Correlación alta negativa |
textline_orientation | -0.535 | Correlación moderada negativa |
text_det_thresh | +0.428 | Correlación moderada positiva |
text_det_box_thresh | +0.311 | Correlación moderada positiva |
text_rec_score_thresh | -0.268 | Correlación moderada negativa |
text_det_unclip_ratio | NaN | Varianza cero (valor fijo) |
Tabla 36. Correlación de parámetros con CER.
+Parámetro | Correlación con CER | Interpretación |
use_doc_unwarping | +0.879 | Correlación alta positiva |
use_doc_orientation_classify | -0.712 | Correlación alta negativa |
textline_orientation | -0.535 | Correlación moderada negativa |
text_det_thresh | +0.428 | Correlación moderada positiva |
text_det_box_thresh | +0.311 | Correlación moderada positiva |
text_rec_score_thresh | -0.268 | Correlación moderada negativa |
text_det_unclip_ratio | NaN | Varianza cero (valor fijo) |
Tabla 37. Correlación de parámetros con WER.
-Parámetro | Correlación con WER | Interpretación |
use_doc_unwarping | +0.744 | Correlación alta positiva |
use_doc_orientation_classify | -0.602 | Correlación alta negativa |
textline_orientation | -0.591 | Correlación moderada negativa |
text_det_thresh | +0.399 | Correlación moderada positiva |
text_det_box_thresh | +0.256 | Correlación moderada positiva |
text_rec_score_thresh | -0.080 | Correlación débil negativa |
text_det_unclip_ratio | NaN | Varianza cero (valor fijo) |
Tabla 37. Correlación de parámetros con WER.
+Parámetro | Correlación con WER | Interpretación |
use_doc_unwarping | +0.744 | Correlación alta positiva |
use_doc_orientation_classify | -0.602 | Correlación alta negativa |
textline_orientation | -0.591 | Correlación moderada negativa |
text_det_thresh | +0.399 | Correlación moderada positiva |
text_det_box_thresh | +0.256 | Correlación moderada positiva |
text_rec_score_thresh | -0.080 | Correlación débil negativa |
text_det_unclip_ratio | NaN | Varianza cero (valor fijo) |
Figura 10. Correlación de hiperparámetros con CER
-
Figura 10. Correlación de hiperparámetros con CER
+
Leyenda: Valores positivos indican que aumentar el parámetro incrementa el CER. Los parámetros booleanos se codifican como 0/1 para el cálculo de la correlación. Abreviaturas: unwarp = use_doc_unwarping, orient_doc = use_doc_orientation_classify, orient_line = textline_orientation, det_thresh = text_det_thresh, box_thresh = text_det_box_thresh, rec_score = text_rec_score_thresh.
Hallazgo clave: use_doc_unwarping presenta la correlación positiva más alta con CER (0.879), lo que indica que activar este módulo incrementa el error en este dataset. En cambio, use_doc_orientation_classify y textline_orientation tienen correlación negativa, asociada a mejoras cuando están activados.
El parámetro booleano textline_orientation demostró tener el mayor impacto en el rendimiento:
-Tabla 38. Impacto del parámetro textline_orientation.
-textline_orientation | CER Medio | CER Std | WER Medio | N trials |
True | 1.74% | 1.94% | 8.75% | 52 |
False | 4.73% | 1.37% | 11.42% | 12 |
Tabla 38. Impacto del parámetro textline_orientation.
+textline_orientation | CER Medio | CER Std | WER Medio | N trials |
True | 1.74% | 1.94% | 8.75% | 52 |
False | 4.73% | 1.37% | 11.42% | 12 |
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-Interpretación:
1. Reducción del CER: Con textline_orientation=True, el CER medio es 2.7 veces menor (1.74% vs 4.73%).
1. Varianza: La desviación estándar es mayor cuando textline_orientation=True (1.94% vs 1.37%), aunque los valores medios siguen siendo mejores.
1. Reducción del CER: 63.2% cuando se habilita la clasificación de orientación de línea.
-Figura 11. Impacto de textline_orientation en CER
-
Figura 11. Impacto de textline_orientation en CER
+
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-Explicación técnica:
El parámetro textline_orientation activa un clasificador que determina la orientación de cada línea de texto detectada. Para documentos con índice, encabezados y listas, este clasificador asegura que el texto se lea en el orden correcto, evitando la mezcla de líneas de diferentes secciones.
No se observaron fallos catastróficos (CER > 10%). El CER máximo fue 7.30%, por lo que el análisis se centra en los trials con peor desempeño relativo:
-Tabla 39. Trials con mayor CER.
-Trial ID | CER | text_det_thresh | textline_orientation |
f699b826 | 7.30% | 0.285 | False |
34bfaecf | 7.29% | 0.030 | True |
8c1998de | 6.44% | 0.369 | True |
8b33e2a2 | 6.41% | 0.664 | False |
Tabla 39. Trials con mayor CER.
+Trial ID | CER | text_det_thresh | textline_orientation |
f699b826 | 7.30% | 0.285 | False |
34bfaecf | 7.29% | 0.030 | True |
8c1998de | 6.44% | 0.369 | True |
8b33e2a2 | 6.41% | 0.664 | False |
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-Observación: Los peores resultados muestran variabilidad tanto en text_det_thresh como en textline_orientation, sin un patrón único dominante en este subconjunto de trials.
La configuración óptima identificada se evaluó sobre el dataset completo de 45 páginas, comparando con la configuración baseline (valores por defecto de PaddleOCR). Los parámetros optimizados más relevantes fueron: textline_orientation=True, use_doc_orientation_classify=True, text_det_thresh=0.0462, text_det_box_thresh=0.4862, y text_rec_score_thresh=0.5658.
-Tabla 40. Comparación baseline vs optimizado (45 páginas).
-Modelo | CER | Precisión Caracteres | WER | Precisión Palabras |
PaddleOCR (Baseline) | 8.85% | 91.15% | 13.05% | 86.95% |
PaddleOCR-HyperAdjust | 7.72% | 92.28% | 11.40% | 88.60% |
Tabla 40. Comparación baseline vs optimizado (45 páginas).
+Modelo | CER | Precisión Caracteres | WER | Precisión Palabras |
PaddleOCR (Baseline) | 8.85% | 91.15% | 13.05% | 86.95% |
PaddleOCR-HyperAdjust | 7.72% | 92.28% | 11.40% | 88.60% |
Fuente: docs/metrics/metrics_paddle.md.
-Nota sobre generalización: El mejor trial individual (5 páginas) alcanzó un CER de 0.79%, cumpliendo el objetivo de CER < 2%. Sin embargo, al aplicar la configuración al dataset completo de 45 páginas, el CER aumentó a 7.72%, evidenciando sobreajuste al subconjunto de entrenamiento. Esta diferencia es un hallazgo importante que se discute en la sección de análisis.
Tabla 41. Análisis cuantitativo de la mejora.
-Forma de Medición | CER | WER |
Valor baseline | 8.85% | 13.05% |
Valor optimizado | 7.72% | 11.40% |
Mejora absoluta | -1.13 pp | -1.65 pp |
Reducción relativa del error | 12.8% | 12.6% |
Factor de mejora | 1.15× | 1.14× |
Mejor trial (5 páginas) | 0.79% | 7.78% |
Tabla 41. Análisis cuantitativo de la mejora.
+Forma de Medición | CER | WER |
Valor baseline | 8.85% | 13.05% |
Valor optimizado | 7.72% | 11.40% |
Mejora absoluta | -1.13 pp | -1.65 pp |
Reducción relativa del error | 12.8% | 12.6% |
Factor de mejora | 1.15× | 1.14× |
Mejor trial (5 páginas) | 0.79% | 7.78% |
Fuente: docs/metrics/metrics_paddle.md.
-Figura 12. Reducción de errores: Baseline vs Optimizado (45 páginas)
-
Figura 12. Reducción de errores: Baseline vs Optimizado (45 páginas)
+
Fuente: docs/metrics/metrics_paddle.md.
-Leyenda: CER = Character Error Rate, WER = Word Error Rate. Baseline = configuración por defecto de PaddleOCR. Optimizado = configuración encontrada por Ray Tune. Los valores corresponden al dataset completo de 45 páginas.
La reducción de CER y WER implica menos correcciones manuales en el texto reconocido. En conjunto, los resultados muestran una mejora medible en precisión, aunque la generalización depende del tamaño y representatividad del subconjunto de optimización.
Tabla 42. Métricas de tiempo del experimento (GPU).
-Métrica | Valor |
Tiempo total del experimento | ~5.0 minutos |
Tiempo medio por trial | 4.64 segundos |
Tiempo medio por página | 0.84 segundos |
Variabilidad (std) | 0.53 segundos/página |
Páginas procesadas totales | 320 |
Tabla 42. Métricas de tiempo del experimento (GPU).
+Métrica | Valor |
Tiempo total del experimento | ~5.0 minutos |
Tiempo medio por trial | 4.64 segundos |
Tiempo medio por página | 0.84 segundos |
Variabilidad (std) | 0.53 segundos/página |
Páginas procesadas totales | 320 |
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-Observaciones:
1. El tiempo por página (~0.84 segundos) corresponde a ejecución con GPU (RTX 3060).
@@ -5584,42 +5476,32 @@ Configuración óptima:Los resultados obtenidos en las secciones anteriores requieren un análisis que trascienda los números individuales para comprender su significado práctico. En esta sección se consolidan los hallazgos del benchmark comparativo y la optimización de hiperparámetros, evaluando hasta qué punto se han cumplido los objetivos planteados y qué limitaciones condicionan la generalización de las conclusiones.
Tabla 43. Evolución del rendimiento a través del estudio.
-Fase | Configuración | CER | Mejora vs baseline |
Benchmark inicial | Baseline (5 páginas) | 7.76% | - |
Optimización (mejor trial) | Optimizada (5 páginas) | 0.79% | 89.8% |
Validación final | Optimizada (45 páginas) | 7.72% | 12.8% |
Tabla 43. Evolución del rendimiento a través del estudio.
+Fase | Configuración | CER | Mejora vs baseline |
Benchmark inicial | Baseline (5 páginas) | 7.76% | - |
Optimización (mejor trial) | Optimizada (5 páginas) | 0.79% | 89.8% |
Validación final | Optimizada (45 páginas) | 7.72% | 12.8% |
Fuente: docs/metrics/metrics_paddle.md.
-Figura 13. Evolución del CER a través del estudio
-
Figura 13. Evolución del CER a través del estudio
+
Fuente: docs/metrics/metrics_paddle.md.
-Leyenda: El mejor trial alcanza CER 0.79% (objetivo cumplido). La validación sobre dataset completo muestra CER 7.72%, evidenciando sobreajuste al subconjunto de optimización.
El incremento del CER de 0.79% (5 páginas) a 7.72% (45 páginas) evidencia sobreajuste al subconjunto de optimización. Este fenómeno es esperado cuando se optimiza sobre un subconjunto pequeño y se valida sobre el dataset completo con mayor diversidad de secciones y estilos.
Tabla 44. Verificación del objetivo general.
-Aspecto | Objetivo | Resultado (trial) | Resultado (full) | Cumplimiento |
Métrica | CER | CER | CER | ✓ |
Umbral | < 2% | 0.79% | 7.72% | Parcial |
Método | Sin fine-tuning | Solo hiperparámetros | Solo hiperparámetros | ✓ |
Hardware | GPU | RTX 3060 | RTX 3060 | ✓ |
Tabla 44. Verificación del objetivo general.
+Aspecto | Objetivo | Resultado (trial) | Resultado (full) | Cumplimiento |
Métrica | CER | CER | CER | ✓ |
Umbral | < 2% | 0.79% | 7.72% | Parcial |
Método | Sin fine-tuning | Solo hiperparámetros | Solo hiperparámetros | ✓ |
Hardware | GPU | RTX 3060 | RTX 3060 | ✓ |
Fuente: docs/metrics/metrics_paddle.md.
-Análisis del cumplimiento: El objetivo de CER < 2% se cumple en el mejor trial individual (0.79%), demostrando que la optimización de hiperparámetros puede alcanzar la precisión objetivo. Sin embargo, la validación sobre el dataset completo (7.72%) muestra que la generalización requiere trabajo adicional, como un subconjunto de optimización más representativo o técnicas de regularización.
Basándose en el análisis de los resultados de optimización:
-Tabla 45. Ranking de importancia de hiperparámetros.
-Rank | Parámetro | Pearson (CER) | Signo | Evidencia |
1 | use_doc_unwarping | 0.879 | Positivo | Correlación más alta con CER |
2 | use_doc_orientation_classify | -0.712 | Negativo | Correlación alta con CER |
3 | textline_orientation | -0.535 | Negativo | Correlación alta con CER |
4 | text_det_thresh | 0.428 | Positivo | Correlación moderada con CER |
5 | text_det_box_thresh | 0.311 | Positivo | Correlación moderada con CER |
6 | text_rec_score_thresh | -0.268 | Negativo | Correlación moderada con CER |
Tabla 45. Ranking de importancia de hiperparámetros.
+Rank | Parámetro | Pearson (CER) | Signo | Evidencia |
1 | use_doc_unwarping | 0.879 | Positivo | Correlación más alta con CER |
2 | use_doc_orientation_classify | -0.712 | Negativo | Correlación alta con CER |
3 | textline_orientation | -0.535 | Negativo | Correlación alta con CER |
4 | text_det_thresh | 0.428 | Positivo | Correlación moderada con CER |
5 | text_det_box_thresh | 0.311 | Positivo | Correlación moderada con CER |
6 | text_rec_score_thresh | -0.268 | Negativo | Correlación moderada con CER |
Figura 14. Ranking de importancia de hiperparámetros
-
Figura 14. Ranking de importancia de hiperparámetros
+
Leyenda: Impacto relativo basado en |Pearson| (CER), normalizado respecto al valor máximo.
En términos de correlación lineal, use_doc_unwarping es el parámetro con mayor relación absoluta con el CER y su signo positivo indica que activarlo incrementa el error en este dataset. En cambio, use_doc_orientation_classify y textline_orientation presentan correlación negativa, lo que sugiere mejoras cuando están activados.
@@ -5645,25 +5527,19 @@ Configuración óptima:Para documentos PDF digitales como los evaluados, este módulo es innecesario y puede introducir artefactos.
Tabla 46. Tipología de errores observados.
-Tipo de error | Frecuencia | Ejemplo | Causa probable |
Pérdida de acentos | Alta | más → mas | Modelo de reconocimiento |
Duplicación de caracteres | Media | titulación → titulacióon | Solapamiento de detecciones |
Confusión de puntuación | Media | ¿ → ? | Caracteres similares |
Pérdida de eñe | Baja | año → ano | Modelo de reconocimiento |
Texto desordenado | Variable | Mezcla de líneas | Fallo de orientación |
Tabla 46. Tipología de errores observados.
+Tipo de error | Frecuencia | Ejemplo | Causa probable |
Pérdida de acentos | Alta | más → mas | Modelo de reconocimiento |
Duplicación de caracteres | Media | titulación → titulacióon | Solapamiento de detecciones |
Confusión de puntuación | Media | ¿ → ? | Caracteres similares |
Pérdida de eñe | Baja | año → ano | Modelo de reconocimiento |
Texto desordenado | Variable | Mezcla de líneas | Fallo de orientación |
Fuente: Análisis cualitativo.
-Tabla 47. Tasa de error por tipo de contenido (cualitativa).
-Tipo de contenido | Nivel de error | Factor de riesgo |
Párrafos de texto | Bajo | Bajo |
Listas numeradas | Medio | Medio |
Índice y encabezados | Medio | Medio |
Encabezados + pie de página | Medio | Medio |
Texto con cambios tipográficos | Medio | Medio |
Listas con numeración densa | Alto | Alto |
Tabla 47. Tasa de error por tipo de contenido (cualitativa).
+Tipo de contenido | Nivel de error | Factor de riesgo |
Párrafos de texto | Bajo | Bajo |
Listas numeradas | Medio | Medio |
Índice y encabezados | Medio | Medio |
Encabezados + pie de página | Medio | Medio |
Texto con cambios tipográficos | Medio | Medio |
Listas con numeración densa | Alto | Alto |
Fuente: Estimación cualitativa.
-Tabla 48. Cumplimiento de objetivos específicos.
-Objetivo | Descripción | Resultado | Estado |
OE1 | Comparar soluciones OCR | EasyOCR, PaddleOCR, DocTR evaluados; PaddleOCR seleccionado | ✓ Cumplido |
OE2 | Preparar dataset de evaluación | 45 páginas con ground truth | ✓ Cumplido |
OE3 | Identificar hiperparámetros críticos | textline_orientation, use_doc_orientation_classify, text_det_thresh identificados | ✓ Cumplido |
OE4 | Optimizar con Ray Tune (≥50 trials) | 64 trials ejecutados con GPU | ✓ Cumplido |
OE5 | Validar configuración optimizada | CER: 8.85% → 7.72% (dataset), 0.79% (mejor trial) | ✓ Parcial |
Tabla 48. Cumplimiento de objetivos específicos.
+Objetivo | Descripción | Resultado | Estado |
OE1 | Comparar soluciones OCR | EasyOCR, PaddleOCR, DocTR evaluados; PaddleOCR seleccionado | ✓ Cumplido |
OE2 | Preparar dataset de evaluación | 45 páginas con ground truth | ✓ Cumplido |
OE3 | Identificar hiperparámetros críticos | textline_orientation, use_doc_orientation_classify, text_det_thresh identificados | ✓ Cumplido |
OE4 | Optimizar con Ray Tune (≥50 trials) | 64 trials ejecutados con GPU | ✓ Cumplido |
OE5 | Validar configuración optimizada | CER: 8.85% → 7.72% (dataset), 0.79% (mejor trial) | ✓ Parcial |
Fuente: docs/metrics/metrics_paddle.md, src/results/correlations/paddle_correlations.csv, src/results/raytune_paddle_results_20260119_122609.csv.
-Nota sobre OE5: El objetivo de CER < 2% se cumple en el mejor trial individual (0.79%). La validación sobre el dataset completo (7.72%) muestra que la generalización requiere mayor trabajo, identificándose como línea de trabajo futuro.
Para documentos académicos en español similares a los evaluados:
-Tabla 49. Configuración recomendada para PaddleOCR con GPU.
-Parámetro | Valor | Prioridad | Justificación |
textline_orientation | True | Obligatorio | Crítico para documentos con secciones |
use_doc_orientation_classify | True | Recomendado | Mejora orientación de documento |
text_det_thresh | 0.05 (rango: 0.04-0.10) | Recomendado | Detección sensible beneficia resultados |
text_det_box_thresh | 0.49 (rango: 0.4-0.6) | Recomendado | Balance de confianza |
text_rec_score_thresh | 0.57 (rango: 0.5-0.7) | Opcional | Filtra reconocimientos poco confiables |
use_doc_unwarping | False | No recomendado | Innecesario para PDFs digitales |
Tabla 49. Configuración recomendada para PaddleOCR con GPU.
+Parámetro | Valor | Prioridad | Justificación |
textline_orientation | True | Obligatorio | Crítico para documentos con secciones |
use_doc_orientation_classify | True | Recomendado | Mejora orientación de documento |
text_det_thresh | 0.05 (rango: 0.04-0.10) | Recomendado | Detección sensible beneficia resultados |
text_det_box_thresh | 0.49 (rango: 0.4-0.6) | Recomendado | Balance de confianza |
text_rec_score_thresh | 0.57 (rango: 0.5-0.7) | Opcional | Filtra reconocimientos poco confiables |
use_doc_unwarping | False | No recomendado | Innecesario para PDFs digitales |
Fuente: src/results/raytune_paddle_results_20260119_122609.csv.
-La optimización de hiperparámetros es recomendable cuando:
@@ -5722,27 +5596,21 @@ Configuración óptima:Esta sección presenta la comparación de rendimiento entre ejecución en CPU y GPU, justificando la elección de GPU para el experimento principal y demostrando el impacto práctico de la aceleración por hardware.
Tabla 50. Especificaciones del entorno GPU utilizado.
-Componente | Especificación |
GPU | NVIDIA GeForce RTX 3060 Laptop |
VRAM | 5.66 GB |
CUDA | 12.4 |
Sistema Operativo | Ubuntu 24.04.3 LTS |
Kernel | 6.14.0-37-generic |
Tabla 50. Especificaciones del entorno GPU utilizado.
+Componente | Especificación |
GPU | NVIDIA GeForce RTX 3060 Laptop |
VRAM | 5.66 GB |
CUDA | 12.4 |
Sistema Operativo | Ubuntu 24.04.3 LTS |
Kernel | 6.14.0-37-generic |
Fuente: docs/metrics/metrics.md.
-Nota: Los requisitos de entorno documentados por dependencias se detallan en docs/07_anexo_a.md, sección A.9.
Este hardware representa configuración típica de desarrollo, permitiendo evaluar el rendimiento en condiciones realistas de despliegue.
Se comparó el tiempo de procesamiento entre CPU y GPU utilizando los datos de src/raytune_paddle_subproc_results_20251207_192320.csv(CPU) y src/results/raytune_paddle_results_20260119_122609.csv(GPU).
-Tabla 51. Rendimiento comparativo CPU vs GPU.
-Métrica | CPU | GPU (RTX 3060) | Factor de Aceleración |
Tiempo/Página (promedio) | 69.4s | 0.84s | 82x |
Dataset completo (45 páginas) | ~52 min | ~38 seg | 82x |
64 trials × 5 páginas | 6.2 horas | ~5.0 min | 75x |
Tabla 51. Rendimiento comparativo CPU vs GPU.
+Métrica | CPU | GPU (RTX 3060) | Factor de Aceleración |
Tiempo/Página (promedio) | 69.4s | 0.84s | 82x |
Dataset completo (45 páginas) | ~52 min | ~38 seg | 82x |
64 trials × 5 páginas | 6.2 horas | ~5.0 min | 75x |
Fuente: src/raytune_paddle_subproc_results_20251207_192320.csv, src/results/raytune_paddle_results_20260119_122609.csv.
-Figura 15. Tiempo de procesamiento: CPU vs GPU (segundos/página)
-
Figura 15. Tiempo de procesamiento: CPU vs GPU (segundos/página)
+
Fuente: src/raytune_paddle_subproc_results_20251207_192320.csv, src/results/raytune_paddle_results_20260119_122609.csv.
-Leyenda: Aceleración de 82× con GPU. El procesamiento de una página pasa de 69.4s (CPU) a 0.84s (GPU).
La aceleración de 82× obtenida con GPU transforma la viabilidad del enfoque:
@@ -5751,11 +5619,9 @@ Configuración óptima:· Producción con GPU (0.84s/página): Habilita procesamiento en tiempo real
PaddleOCR ofrece dos variantes de modelos: Mobile (optimizados para dispositivos con recursos limitados) y Server (mayor precisión a costa de mayor consumo de memoria). Se evaluó la viabilidad de ambas variantes en el hardware disponible.
-Tabla 52. Comparación de modelos Mobile vs Server en RTX 3060.
-Modelo | VRAM Requerida | Resultado | Recomendación |
PP-OCRv5 Mobile | 0.06 GB | Funciona correctamente | ✓ Recomendado |
PP-OCRv5 Server | 5.3 GB | OOM en página 2 | ✗ Requiere >8 GB VRAM |
Tabla 52. Comparación de modelos Mobile vs Server en RTX 3060.
+Modelo | VRAM Requerida | Resultado | Recomendación |
PP-OCRv5 Mobile | 0.06 GB | Funciona correctamente | ✓ Recomendado |
PP-OCRv5 Server | 5.3 GB | OOM en página 2 | ✗ Requiere >8 GB VRAM |
Fuente: docs/metrics/metrics.md.
-Los modelos Server, a pesar de ofrecer potencialmente mayor precisión, resultan inviables en hardware con VRAM limitada (≤6 GB) debido a errores de memoria (Out of Memory). Los modelos Mobile, con un consumo de memoria 88 veces menor, funcionan de manera estable y ofrecen rendimiento suficiente para el caso de uso evaluado.
A lo largo
Los resultados obtenidos confirman que la optimización sistemática de hiperparámetros constituye una alternativa viable al fine-tuning para mejorar sistemas OCR preentrenados. La infraestructura dockerizada con aceleración GPU desarrollada en este trabajo no solo facilita la experimentación reproducible, sino que reduce drásticamente los tiempos de ejecución, haciendo viable la exploración exhaustiva de espacios de configuración. El objetivo principal del trabajo era alcanzar un CER inferior al 2% en documentos académicos en español. Los resultados obtenidos se resumen a continuación: Tabla 53. Cumplimiento del objetivo de CER. Métrica Objetivo Mejor Trial Dataset Completo Cumplimiento CER < 2% 0.79% 7.72% ✓ Parcial Tabla 53. Cumplimiento del objetivo de CER. Métrica Objetivo Mejor Trial Dataset Completo Cumplimiento CER < 2% 0.79% 7.72% ✓ Parcial Fuente: docs/metrics/metrics_paddle.md. Nota: El objetivo de CER < 2% se cumple en el mejor trial individual (0.79%, 5 páginas). La validación sobre el conjunto de datos completo (45 páginas) muestra un CER de 7.72%, evidenciando sobreajuste al subconjunto de optimización. Esta diferencia se analiza en detalle en el Capítulo 4. · Dataset: Imágenes y textos de referencia utilizados · Resultados: Archivos CSV con los resultados de los 64 trials por servicio Figura 16. Estructura del repositorio MastersThesis Figura 16. Estructura del repositorio MastersThesis Fuente: Elaboración propia. Tabla 54. Descripción de directorios principales. Directorio Contenido Capítulos del TFM en Markdown (estructura UNIR) Métricas de rendimiento por servicio OCR Servicio PaddleOCR dockerizado Servicio DocTR dockerizado Servicio EasyOCR dockerizado Scripts de optimización Ray Tune CSVs con resultados de 64 trials por servicio Correlaciones de hiperparámetros por servicio Documento TFM generado + figuras PNG Plantilla e instrucciones UNIR oficiales Tabla 54. Descripción de directorios principales. Directorio Contenido Capítulos del TFM en Markdown (estructura UNIR) Métricas de rendimiento por servicio OCR Servicio PaddleOCR dockerizado Servicio DocTR dockerizado Servicio EasyOCR dockerizado Scripts de optimización Ray Tune CSVs con resultados de 64 trials por servicio Correlaciones de hiperparámetros por servicio Documento TFM generado + figuras PNG Plantilla e instrucciones UNIR oficiales Fuente: Repositorio del proyecto. Tabla 55. Especificaciones del sistema de desarrollo. Componente Especificación Sistema Operativo Ubuntu 24.04.3 LTS CPU AMD Ryzen 7 5800H RAM 16 GB DDR4 GPU NVIDIA RTX 3060 Laptop (5.66 GB VRAM) CUDA 12.4 Tabla 55. Especificaciones del sistema de desarrollo. Componente Especificación Sistema Operativo Ubuntu 24.04.3 LTS CPU AMD Ryzen 7 5800H RAM 16 GB DDR4 GPU NVIDIA RTX 3060 Laptop (5.66 GB VRAM) CUDA 12.4 Fuente: docs/metrics/metrics.md. Tabla 56. Dependencias del proyecto. Componente Versión PaddlePaddle 3.2.2 PaddleOCR 3.3.2 Ray Tune 2.52.1 Optuna 4.7.0 DocTR (python-doctr) >= 0.8.0 EasyOCR >= 1.7.0 Docker Requerido para contenedores NVIDIA Container Toolkit Requerido para GPU Tabla 56. Dependencias del proyecto. Componente Versión PaddlePaddle 3.2.2 PaddleOCR 3.3.2 Ray Tune 2.52.1 Optuna 4.7.0 DocTR (python-doctr) >= 0.8.0 EasyOCR >= 1.7.0 Docker Requerido para contenedores NVIDIA Container Toolkit Requerido para GPU Fuente: src/paddle_ocr/requirements.txt, src/raytune/requirements.txt, src/doctr_service/requirements.txt, src/easyocr_service/requirements.txt, src/README.md. Imágenes Docker: · GPU: seryus.ddns.net/unir/paddle-ocr-gpu · CPU: seryus.ddns.net/unir/paddle-ocr-cpu Imagen Docker: seryus.ddns.net/unir/doctr-gpu(https://seryus.ddns.net/unir/-/packages/container/doctr-gpu/latest) Nota: EasyOCR utiliza el mismo puerto (8002) que PaddleOCR. No se pueden ejecutar simultáneamente. Por esta razón, existe un archivo docker-compose separado para EasyOCR. Imagen Docker: seryus.ddns.net/unir/easyocr-gpu(https://seryus.ddns.net/unir/-/packages/container/easyocr-gpu/latest) Tabla 57. Servicios Docker y puertos. Servicio Puerto Script de Ajuste Nota PaddleOCR 8002 paddle_ocr_payload - DocTR 8003 doctr_payload - EasyOCR 8002 easyocr_payload Conflicto con PaddleOCR Tabla 57. Servicios Docker y puertos. Servicio Puerto Script de Ajuste Nota PaddleOCR 8002 paddle_ocr_payload - DocTR 8003 doctr_payload - EasyOCR 8002 easyocr_payload Conflicto con PaddleOCR Fuente: Elaboración propia. Nota: Debido a limitaciones de recursos GPU (VRAM insuficiente para ejecutar múltiples modelos OCR simultáneamente), solo se ejecuta un servicio a la vez. PaddleOCR y EasyOCR comparten el puerto 8002. Para cambiar de servicio, detener el actual con docker compose down. Esta sección presenta los resultados completos de las evaluaciones comparativas y del ajuste de hiperparámetros realizado con Ray Tune sobre los tres servicios OCR evaluados. Tabla 58. Comparativa de servicios OCR en dataset de 45 páginas (GPU RTX 3060). Servicio CER WER Tiempo/Página Tiempo Total VRAM PaddleOCR (Mobile) 7.76% 11.62% 0.58s 32.0s 0.06 GB EasyOCR 11.23% 36.36% 1.88s 88.5s ~2 GB DocTR 12.06% 42.01% 0.50s 28.4s ~1 GB Tabla 58. Comparativa de servicios OCR en dataset de 45 páginas (GPU RTX 3060). Servicio CER WER Tiempo/Página Tiempo Total VRAM PaddleOCR (Mobile) 7.76% 11.62% 0.58s 32.0s 0.06 GB EasyOCR 11.23% 36.36% 1.88s 88.5s ~2 GB DocTR 12.06% 42.01% 0.50s 28.4s ~1 GB Fuente: docs/metrics/metrics_paddle.md, docs/metrics/metrics_easyocr.md, docs/metrics/metrics_doctr.md. Ganador: PaddleOCR (Mobile) - Mejor precisión (7.76% CER) con velocidad competitiva y mínimo consumo de VRAM. Se ejecutaron 64 trials por servicio utilizando Ray Tune con Optuna sobre las páginas 5-10 del primer documento. Tabla 59. Resultados del ajuste de hiperparámetros por servicio. Servicio CER Base CER Ajustado Mejora Mejor Trial (5 páginas) PaddleOCR 8.85% 7.72% 12.8% 0.79% ✓ DocTR 12.06% 12.07% 0% 7.43% EasyOCR 11.23% 11.14% 0.8% 5.83% Tabla 59. Resultados del ajuste de hiperparámetros por servicio. Servicio CER Base CER Ajustado Mejora Mejor Trial (5 páginas) PaddleOCR 8.85% 7.72% 12.8% 0.79% ✓ DocTR 12.06% 12.07% 0% 7.43% EasyOCR 11.23% 11.14% 0.8% 5.83% Fuente: docs/metrics/metrics_paddle.md, docs/metrics/metrics_easyocr.md, docs/metrics/metrics_doctr.md. Nota sobre sobreajuste: La diferencia entre los resultados del mejor trial (subconjunto de 5 páginas) y el dataset completo (45 páginas) indica sobreajuste parcial a las páginas de ajuste. Un subconjunto más amplio mejoraría la generalización. Tabla 60. Distribución de trials por rango de CER. Rango CER Número de trials Porcentaje < 2% 43 67.2% 2% - 5% 10 15.6% 5% - 10% 11 17.2% > 10% 0 0.0% Tabla 60. Distribución de trials por rango de CER. Rango CER Número de trials Porcentaje < 2% 43 67.2% 2% - 5% 10 15.6% 5% - 10% 11 17.2% > 10% 0 0.0% Fuente: src/results/raytune_paddle_results_20260119_122609.csv. Figura 17. Distribución de trials por rango de CER (PaddleOCR) Figura 17. Distribución de trials por rango de CER (PaddleOCR) Fuente: src/results/raytune_paddle_results_20260119_122609.csv. La siguiente configuración logró el mejor rendimiento en el ajuste de hiperparámetros: · use_doc_orientation_classify=true: Mejora detección de orientación · use_doc_unwarping=false: Innecesario para PDFs digitales · text_det_thresh bajo (0.0462): Detección más sensible mejora resultados Tabla 61. Comparación de rendimiento CPU vs GPU (PaddleOCR). Métrica CPU GPU (RTX 3060) Aceleración Tiempo/Página 69.4s 0.84s 82x más rápido 45 páginas ~52 min ~38 seg 82x más rápido Tabla 61. Comparación de rendimiento CPU vs GPU (PaddleOCR). Métrica CPU GPU (RTX 3060) Aceleración Tiempo/Página 69.4s 0.84s 82x más rápido 45 páginas ~52 min ~38 seg 82x más rápido Fuente: Datos de tiempo CPU de src/raytune_paddle_subproc_results_20251207_192320.csv y tiempos de GPU en trials de ajuste. Elaboración propia. Figura 18. Tiempo de procesamiento: CPU vs GPU (segundos/página) Figura 18. Tiempo de procesamiento: CPU vs GPU (segundos/página) Fuente: src/raytune_paddle_subproc_results_20251207_192320.csv y src/results/raytune_paddle_results_20260119_122609.csv. Leyenda: Aceleración de 82× con GPU. El procesamiento de una página pasa de 69.4s (CPU) a 0.84s (GPU). Tabla 62. Tipos de errores identificados por servicio OCR. Servicio Fortalezas Debilidades ¿Fine-tuning recomendado? PaddleOCR Preserva estructura, buen manejo de español Errores menores de acentos No (ya excelente) DocTR Más rápido Pierde estructura, omite TODOS los diacríticos Sí (para diacríticos) EasyOCR Modelo correcto para español Caracteres espurios, confunde o/0 Sí (problemas del detector) Tabla 62. Tipos de errores identificados por servicio OCR. Servicio Fortalezas Debilidades ¿Fine-tuning recomendado? PaddleOCR Preserva estructura, buen manejo de español Errores menores de acentos No (ya excelente) DocTR Más rápido Pierde estructura, omite TODOS los diacríticos Sí (para diacríticos) EasyOCR Modelo correcto para español Caracteres espurios, confunde o/0 Sí (problemas del detector) Fuente: Análisis manual del debugset. Elaboración propia. Los resultados crudos de los 64 trials por servicio están disponibles en el repositorio: Tabla 63. Ubicación de archivos de resultados. Servicio Archivo CSV PaddleOCR DocTR EasyOCR Tabla 63. Ubicación de archivos de resultados. Servicio Archivo CSV PaddleOCR DocTR EasyOCR Fuente: Elaboración propia. Las tablas de costos cloud se basan en las páginas oficiales de precios. Se consultaron en enero de 2026.Conclusiones Generales
Cumplimiento de los Objetivos Específicos
@@ -5855,37 +5719,29 @@ major-latin;mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin
A.2 Estructura del Repositorio
-

A.3 Requisitos de Software
-Sistema de Desarrollo
-Sistema de Desarrollo
+Dependencias
-Dependencias
-Dependencias
+Dependencias
+A.4 Instrucciones de Ejecución de Servicios OCR
A.4 Instrucciones de Ejecución de Servicios OCR
-PaddleOCR (Puerto 8002)
+PaddleOCR (Puerto 8002)
DocTR (Puerto 8003)
+DocTR (Puerto 8003)
cd src/doctr_service
@@ -5906,7 +5762,7 @@ docker compose -f docker-compose.cpu-registry.yml up -d
# GPU
docker compose up -d
EasyOCR (Puerto 8002)
+EasyOCR (Puerto 8002)
Verificar Estado del Servicio
+Verificar Estado del Servicio
# Verificar salud del servicio
curl http://localhost:8002/health
@@ -5924,7 +5780,7 @@ curl http://localhost:8002/health
# {"status": "ok", "model_loaded": true, "gpu_name": "NVIDIA GeForce RTX 3060"}
A.5 Uso de la API OCR
-Evaluar Dataset Completo
+Evaluar Dataset Completo
# PaddleOCR - Evaluación completa
curl -X POST http://localhost:8002/evaluate_full \
@@ -5934,7 +5790,7 @@ curl -X POST http://localhost:8002/evaluate_full \
"save_output": true
}'
Evaluar con Hiperparámetros Optimizados
+Evaluar con Hiperparámetros Optimizados
# PaddleOCR con configuración óptima
curl -X POST http://localhost:8002/evaluate_full \
@@ -5952,7 +5808,7 @@ curl -X POST http://localhost:8002/evaluate_full \
}'
A.6 Ajuste de Hiperparámetros con Ray Tune
-Ejecutar Ajuste
+Ejecutar Ajuste
cd src
@@ -5970,47 +5826,37 @@ results = run_tuner(trainable, PADDLE_OCR_SEARCH_SPACE, num_samples=64)
analyze_results(results, prefix='raytune_paddle', config_keys=PADDLE_OCR_CONFIG_KEYS)
"
Servicios y Puertos
-Servicios y Puertos
+A.7 Métricas de Rendimiento
Comparativa General de Servicios
-Comparativa General de Servicios
+Resultados de Ajuste de Hiperparámetros
+Resultados de Ajuste de Hiperparámetros
Distribución de trials por rango de CER (PaddleOCR)
-Distribución de trials por rango de CER (PaddleOCR)
+

Configuración Óptima PaddleOCR
+Configuración Óptima PaddleOCR
{
@@ -6028,33 +5874,25 @@ analyze_results(results, prefix='raytune_paddle', config_keys=PADDLE_OCR_CONFIG_
Rendimiento CPU vs GPU
-Rendimiento CPU vs GPU
+

Análisis de Errores por Servicio
-Análisis de Errores por Servicio
+Archivos de Resultados
+Archivos de Resultados
A.8 Fuentes de precios cloud