diff --git a/README.md b/README.md index 66bc978..0d4c4f7 100644 --- a/README.md +++ b/README.md @@ -285,7 +285,7 @@ python3 apply_content.py ### Contenido Generado Automáticamente -- **30 tablas** con formato APA (Tabla X. *Título* + Fuente: ...) +- **53 tablas** con formato APA (Tabla X. *Título* + Fuente: ...) - **8 figuras** desde Mermaid (Figura X. *Título* + Fuente: Elaboración propia) - **25 referencias** en formato APA con sangría francesa - **Resumen/Abstract** con palabras clave diff --git a/apply_content.py b/apply_content.py index 98ebc4e..0f28fcf 100644 --- a/apply_content.py +++ b/apply_content.py @@ -34,6 +34,8 @@ def md_to_html_para(text): text = re.sub(r'\*([^*]+)\*', r'\1', text) # Inline code text = re.sub(r'`([^`]+)`', r'\1', text) + # Links [text](url) -> text + text = re.sub(r'\[([^\]]+)\]\(([^)]+)\)', r'\1', text) return text def extract_table_title(lines, current_index): @@ -169,6 +171,7 @@ def parse_md_to_html_blocks(md_content): # Check if previous line has table title (e.g., **Tabla 1.** *Title*) table_title = None + alt_title = None # Alternative title from **bold text:** pattern table_source = "Elaboración propia" # Look back for table title @@ -178,6 +181,9 @@ def parse_md_to_html_blocks(md_content): # Extract title text table_title = re.sub(r'\*+', '', prev_line).strip() break + elif prev_line.startswith('**') and prev_line.endswith(':**'): + # Alternative: **Bold title:** pattern (for informal tables) + alt_title = re.sub(r'\*+', '', prev_line).rstrip(':').strip() elif prev_line and not prev_line.startswith('|'): break @@ -198,26 +204,30 @@ def parse_md_to_html_blocks(md_content): # Word TOC looks for text with Caption style - anchor must be outside main caption text bookmark_id = f"_Ref_Tab{table_counter}" if table_title: - clean_title = table_title.replace(f"Tabla {table_counter}.", "").strip() + # Remove any "Tabla X." or "Tabla AX." pattern from the title + clean_title = re.sub(r'^Tabla\s+[A-Z]?\d+\.\s*', '', table_title).strip() + elif alt_title: + # Use alternative title from **bold text:** pattern + clean_title = alt_title else: clean_title = "Tabla de datos." html_blocks.append(f'''
Tabla {table_counter}. {clean_title}
''') # Build table HTML with APA style (horizontal lines only, no vertical) - table_html = '{md_to_html_para(cell)} | '
+ table_html += f'{md_to_html_para(cell)} | '
elif j == len(table_lines) - 1:
# Last row: bottom border only
- table_html += f'{md_to_html_para(cell)} | '
+ table_html += f'{md_to_html_para(cell)} | '
else:
# Middle rows: no borders
- table_html += f'{md_to_html_para(cell)} | '
+ table_html += f'{md_to_html_para(cell)} | '
table_html += '
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 |
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 tablas con bordes y celdas; logotipos institucionales; marcas de agua; y elementos gráficos como firmas o sellos. Estos elementos generan ruido que puede propagarse en aplicaciones downstream como la extracción de entidades nombradas o el análisis semántico.
@@ -4556,7 +4556,7 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>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. El fine-tuning de un modelo de reconocimiento de texto puede requerir decenas de miles de imágenes etiquetadas y días de entrenamiento en GPUs de alta capacidad. 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 | >10,000 imágenes etiquetadas | GPU (≥16GB VRAM) | Días-Semanas | Alto |
Fine-tuning parcial | >1,000 imágenes etiquetadas | GPU (≥8GB VRAM) | Horas-Días | Medio-Alto |
Transfer learning | >500 imágenes etiquetadas | GPU (≥8GB VRAM) | Horas | Medio |
Optimización de hiperparámetros | <100 imágenes de validación | CPU suficiente | Horas | Bajo-Medio |
Estrategia | Datos requeridos | Hardware | Tiempo | Expertise |
Fine-tuning completo | >10,000 imágenes etiquetadas | GPU (≥16GB VRAM) | Días-Semanas | Alto |
Fine-tuning parcial | >1,000 imágenes etiquetadas | GPU (≥8GB VRAM) | Horas-Días | Medio-Alto |
Transfer learning | >500 imágenes etiquetadas | GPU (≥8GB VRAM) | Horas | Medio |
Optimización de hiperparámetros | <100 imágenes de validación | CPU suficiente | Horas | Bajo-Medio |
Fuente: Elaboración propia.
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 | Ejecución en CPU | Aceleración GPU |
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 | Ejecución en CPU | Aceleración GPU |
Fuente: Elaboración propia.
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. Tabla 1. 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.
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. Tabla 2. 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.
Hiperparámetros configurables:
PaddleOCR expone numerosos hiperparámetros que permiten ajustar el comportamiento del sistema. Los más relevantes para este trabajo son:
-Tabla 6. Tabla 3. 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: Elaboración propia.
Tabla 7. Tabla 4. 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: Elaboración propia.
Tabla 8. Tabla 5. 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: Elaboración propia.
Fortalezas de PaddleOCR:
@@ -4791,12 +4791,12 @@ _Toc14106979">· Comunidad más pequeña· Menos opciones de modelos preentrenados para idiomas no ingleses
Tabla 9. Tabla 6. 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 | 80+ | 80+ | 9 |
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 | 80+ | 80+ | 9 |
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.
Tabla 10. Tabla 7. Comparativa de facilidad de uso.
-Aspecto | EasyOCR | PaddleOCR | DocTR |
Instalación | pip install | pip install | pip install |
Líneas para OCR básico | 3 | 5 | 6 |
GPU requerida | Opcional | Opcional | Opcional |
Memoria mínima | 2 GB | 4 GB | 4 GB |
Tabla 10. Comparativa de facilidad de uso.
+Aspecto | EasyOCR | PaddleOCR | DocTR |
Instalación | pip install | pip install | pip install |
Líneas para OCR básico | 3 | 5 | 6 |
GPU requerida | Opcional | Opcional | Opcional |
Memoria mínima | 2 GB | 4 GB | 4 GB |
Fuente: Elaboración propia.
MLT (ICDAR Multi-Language Text): Dataset multilingüe de las competiciones ICDAR que incluye muestras en español. Las ediciones 2017 y 2019 contienen texto en escenas naturales.
XFUND: Dataset de comprensión de formularios en múltiples idiomas, incluyendo español, con anotaciones de entidades y relaciones.
-Tabla 11. Tabla 8. Datasets públicos con contenido en español.
-Dataset | Tipo | Idiomas | Tamaño | Uso principal |
FUNSD-ES | Formularios | ES | ~200 docs | Document understanding |
MLT 2019 | Escenas | Multi (incl. ES) | 10K imgs | Text detection |
XFUND | Formularios | 7 (incl. ES) | 1.4K docs | Information extraction |
Tabla 11. Datasets públicos con contenido en español.
+Dataset | Tipo | Idiomas | Tamaño | Uso principal |
FUNSD-ES | Formularios | ES | ~200 docs | Document understanding |
MLT 2019 | Escenas | Multi (incl. ES) | 10K imgs | Text detection |
XFUND | Formularios | 7 (incl. ES) | 1.4K docs | Information extraction |
Fuente: Elaboración propia.
Procesamiento de documentos de identidad: Sistemas OCR especializados para DNI, pasaportes y documentos oficiales españoles y latinoamericanos (Bulatov et al., 2020).
Reconocimiento de texto en escenas: Participaciones en competiciones ICDAR para detección y reconocimiento de texto en español en imágenes naturales.
-Tabla 12. Tabla 9. Trabajos previos relevantes en OCR para español.
-Trabajo | Enfoque | Contribución |
Romero et al. (2013) | HTR histórico | Modelos HMM para manuscritos |
Bulatov et al. (2020) | Documentos ID | Pipeline especializado |
Fischer et al. (2012) | Multilingual | Transferencia entre idiomas |
Tabla 12. Trabajos previos relevantes en OCR para español.
+Trabajo | Enfoque | Contribución |
Romero et al. (2013) | HTR histórico | Modelos HMM para manuscritos |
Bulatov et al. (2020) | Documentos ID | Pipeline especializado |
Fischer et al. (2012) | Multilingual | Transferencia entre idiomas |
Fuente: Elaboración propia.
La optimización de hiperparámetros para documentos académicos en español representa una contribución original de este trabajo, abordando un nicho no explorado en la literatura.
@@ -4932,8 +4932,8 @@ concretos y metodología de trabajoObjetivo generalOptimizar 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.
Tabla 13. Tabla 4. 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 |
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) 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 |
Fuente: Elaboración propia.
Tabla 14. Tabla 5. Modelos OCR evaluados en el benchmark inicial.
-Modelo | Versión | Configuración |
EasyOCR | - | Idiomas: ['es', 'en'] |
PaddleOCR | PP-OCRv5 | Modelos server_det + server_rec |
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 server_det + server_rec |
DocTR | - | db_resnet50 + sar_resnet31 |
Fuente: Elaboración propia.
Tabla 15. Tabla 6. 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.
4. Métricas reportadas: CER, WER, tiempo de procesamiento
Tabla 16. Tabla 7. 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: Elaboración propia.
Tabla 17. Tabla 8. Versiones de software utilizadas.
-Componente | Versión |
Sistema Operativo | Ubuntu 24.04.3 LTS |
Python | 3.12.3 |
PaddleOCR | 3.3.2 |
PaddlePaddle | 3.2.2 |
Ray | 2.52.1 |
Optuna | 4.7.0 |
Tabla 17. Versiones de software utilizadas.
+Componente | Versión |
Sistema Operativo | Ubuntu 24.04.3 LTS |
Python | 3.12.3 |
PaddleOCR | 3.3.2 |
PaddlePaddle | 3.2.2 |
Ray | 2.52.1 |
Optuna | 4.7.0 |
Fuente: Elaboración propia.
Se seleccionaron tres soluciones OCR de código abierto representativas del estado del arte:
-Tabla 18. Tabla 10. 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 18. 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: Elaboración propia.
Imágenes Docker disponibles en el registro del proyecto:
@@ -5129,8 +5129,8 @@ 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 19. Tabla 11. 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 19. 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: Elaboración propia.
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, con CER entre 1.54% y 6.40% dependiendo de la complejidad del layout.
-Tabla 20. Tabla 12. Variabilidad del CER por tipo de contenido.
-Tipo de contenido | CER aproximado | Observaciones |
Texto corrido | ~1.5-2% | Mejor rendimiento |
Texto con listas | ~3-4% | Rendimiento medio |
Tablas | ~5-6% | Mayor dificultad |
Encabezados + notas | ~4-5% | Layouts mixtos |
Tabla 20. Variabilidad del CER por tipo de contenido.
+Tipo de contenido | CER aproximado | Observaciones |
Texto corrido | ~1.5-2% | Mejor rendimiento |
Texto con listas | ~3-4% | Rendimiento medio |
Tablas | ~5-6% | Mayor dificultad |
Encabezados + notas | ~4-5% | Layouts mixtos |
Fuente: Elaboración propia.
Observaciones del benchmark inicial:
@@ -5233,8 +5233,8 @@ def evaluate_text(reference, prediction):1. Los errores más frecuentes fueron: confusión de acentos, caracteres duplicados, y errores en signos de puntuación.
Los tres modelos evaluados representan diferentes paradigmas de OCR:
-Tabla 21. Tabla 13. 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 21. 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: Elaboración propia.
La selección de PaddleOCR para la fase de optimización se basó en los siguientes criterios:
-Tabla 22. Tabla 14. Evaluación de criterios de selección.
-Criterio | EasyOCR | PaddleOCR | DocTR |
CER benchmark | ~6-8% | ~5-6% | ~7-9% |
Configurabilidad | Baja (3 params) | Alta (>10 params) | Media (5 params) |
Soporte español | Sí | Sí (dedicado) | Limitado |
Documentación | Media | Alta | Alta |
Mantenimiento | Medio | Alto | Medio |
Tabla 22. Evaluación de criterios de selección.
+Criterio | EasyOCR | PaddleOCR | DocTR |
CER benchmark | ~6-8% | ~5-6% | ~7-9% |
Configurabilidad | Baja (3 params) | Alta (>10 params) | Media (5 params) |
Soporte español | Sí | Sí (dedicado) | Limitado |
Documentación | Media | Alta | Alta |
Mantenimiento | Medio | Alto | Medio |
Fuente: Elaboración propia.
· Documentación oficial de PaddleOCR
Esta sección describe el proceso de optimización de hiperparámetros de PaddleOCR utilizando Ray Tune con el algoritmo de búsqueda Optuna. Los experimentos fueron implementados en [src/run_tuning.py](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py) con la librería de utilidades [src/raytune_ocr.py](https://github.com/seryus/MastersThesis/blob/main/src/raytune_ocr.py), y los resultados se almacenaron en [src/results/](https://github.com/seryus/MastersThesis/tree/main/src/results).
+Esta sección describe el proceso de optimización de hiperparámetros de PaddleOCR utilizando Ray Tune con el algoritmo de búsqueda Optuna. Los experimentos fueron implementados en src/run_tuning.py con la librería de utilidades src/raytune_ocr.py, y los resultados se almacenaron en src/results/.
La optimización de hiperparámetros representa una alternativa al fine-tuning tradicional que no requiere:
· Acceso a GPU dedicada
· Dataset de entrenamiento etiquetado
@@ -5306,8 +5306,8 @@ def evaluate_text(reference, prediction):El experimento se ejecutó en el siguiente entorno:
-Tabla 23. Tabla 15. 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 23. 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: Elaboración propia.
Para la fase de optimización se extendió el dataset:
-Tabla 24. Tabla 16. Características del dataset de optimización.
-Característica | Valor |
Páginas totales | 24 |
Páginas por trial | 5 (páginas 5-10) |
Estructura | Carpetas img/ y txt/ pareadas |
Resolución | 300 DPI |
Formato imagen | PNG |
Tabla 24. Características del dataset de optimización.
+Característica | Valor |
Páginas totales | 24 |
Páginas por trial | 5 (páginas 5-10) |
Estructura | Carpetas img/ y txt/ pareadas |
Resolución | 300 DPI |
Formato imagen | PNG |
Fuente: Elaboración propia.
La clase ImageTextDataset en src/dataset_manager.py gestiona la carga de pares imagen-texto:
@@ -5381,8 +5381,8 @@ search_space = { "text_det_unclip_ratio": tune.choice([0.0]), # Fijado "text_rec_score_thresh": tune.uniform(0.0, 0.7), } -Tabla 25. Tabla 17. 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 25. 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: Elaboración propia.
Justificación del espacio:
@@ -5405,8 +5405,8 @@ search_space = { ), param_space=search_space ) -Tabla 26. Tabla 18. 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 26. 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: Elaboración propia.
Elección de 64 trials:
@@ -5418,14 +5418,14 @@ search_space = {El experimento se ejecutó exitosamente con los siguientes resultados globales:
-Tabla 27. Tabla 19. Resumen de la ejecución del experimento.
-Métrica | Valor |
Trials completados | 64/64 |
Trials fallidos | 0 |
Tiempo total | ~6.4 horas |
Tiempo medio por trial | 367.72 segundos |
Páginas procesadas | 320 (64 trials × 5 páginas) |
Tabla 27. Resumen de la ejecución del experimento.
+Métrica | Valor |
Trials completados | 64/64 |
Trials fallidos | 0 |
Tiempo total | ~6.4 horas |
Tiempo medio por trial | 367.72 segundos |
Páginas procesadas | 320 (64 trials × 5 páginas) |
Fuente: Elaboración propia.
Del archivo CSV de resultados (raytune_paddle_subproc_results_20251207_192320.csv):
-Tabla 28. Tabla 20. Estadísticas descriptivas de los 64 trials.
-Estadística | CER | WER | Tiempo (s) | Tiempo/Página (s) |
count | 64 | 64 | 64 | 64 |
mean | 5.25% | 14.28% | 347.61 | 69.42 |
std | 11.03% | 10.75% | 7.88 | 1.57 |
min | 1.15% | 9.89% | 320.97 | 64.10 |
25% | 1.20% | 10.04% | 344.24 | 68.76 |
50% (mediana) | 1.23% | 10.20% | 346.42 | 69.19 |
75% | 4.03% | 13.20% | 350.14 | 69.93 |
max | 51.61% | 59.45% | 368.57 | 73.63 |
Tabla 28. Estadísticas descriptivas de los 64 trials.
+Estadística | CER | WER | Tiempo (s) | Tiempo/Página (s) |
count | 64 | 64 | 64 | 64 |
mean | 5.25% | 14.28% | 347.61 | 69.42 |
std | 11.03% | 10.75% | 7.88 | 1.57 |
min | 1.15% | 9.89% | 320.97 | 64.10 |
25% | 1.20% | 10.04% | 344.24 | 68.76 |
50% (mediana) | 1.23% | 10.20% | 346.42 | 69.19 |
75% | 4.03% | 13.20% | 350.14 | 69.93 |
max | 51.61% | 59.45% | 368.57 | 73.63 |
Fuente: Elaboración propia.
Observaciones:
@@ -5433,8 +5433,8 @@ search_space = {1. Mediana vs Media: La mediana del CER (1.23%) es mucho menor que la media (5.25%), confirmando una distribución sesgada hacia valores bajos con outliers altos.
1. Tiempo consistente: El tiempo de ejecución es muy estable (std = 1.57 s/página), indicando que las configuraciones de hiperparámetros no afectan significativamente el tiempo de inferencia.
Tabla 29. Tabla 21. Distribución de trials por rango de CER.
-Rango CER | Número de trials | Porcentaje |
< 2% | 43 | 67.2% |
2% - 5% | 7 | 10.9% |
5% - 10% | 2 | 3.1% |
10% - 20% | 5 | 7.8% |
> 20% | 7 | 10.9% |
Tabla 29. Distribución de trials por rango de CER.
+Rango CER | Número de trials | Porcentaje |
< 2% | 43 | 67.2% |
2% - 5% | 7 | 10.9% |
5% - 10% | 2 | 3.1% |
10% - 20% | 5 | 7.8% |
> 20% | 7 | 10.9% |
Fuente: Elaboración propia.
La mayoría de trials (67.2%) alcanzaron CER < 2%, cumpliendo el objetivo establecido. Sin embargo, un 10.9% de trials presentaron fallos catastróficos (CER > 20%).
@@ -5451,25 +5451,25 @@ Configuración óptima: text_det_box_thresh: 0.5412 text_det_unclip_ratio: 0.0 text_rec_score_thresh: 0.6350 -Tabla 30. Tabla 22. Configuración óptima identificada.
-Parámetro | Valor óptimo | Valor por defecto | Cambio |
textline_orientation | True | False | Activado |
use_doc_orientation_classify | False | False | Sin cambio |
use_doc_unwarping | False | False | Sin cambio |
text_det_thresh | 0.4690 | 0.3 | +0.169 |
text_det_box_thresh | 0.5412 | 0.6 | -0.059 |
text_det_unclip_ratio | 0.0 | 1.5 | -1.5 (fijado) |
text_rec_score_thresh | 0.6350 | 0.5 | +0.135 |
Tabla 30. Configuración óptima identificada.
+Parámetro | Valor óptimo | Valor por defecto | Cambio |
textline_orientation | True | False | Activado |
use_doc_orientation_classify | False | False | Sin cambio |
use_doc_unwarping | False | False | Sin cambio |
text_det_thresh | 0.4690 | 0.3 | +0.169 |
text_det_box_thresh | 0.5412 | 0.6 | -0.059 |
text_det_unclip_ratio | 0.0 | 1.5 | -1.5 (fijado) |
text_rec_score_thresh | 0.6350 | 0.5 | +0.135 |
Fuente: Elaboración propia.
Se calculó la correlación de Pearson entre los parámetros continuos y las métricas de error:
-Tabla 31. Tabla 23. Correlación de parámetros con CER.
-Parámetro | Correlación con CER | Interpretación |
text_det_thresh | -0.523 | Correlación moderada negativa |
text_det_box_thresh | +0.226 | Correlación débil positiva |
text_rec_score_thresh | -0.161 | Correlación débil negativa |
text_det_unclip_ratio | NaN | Varianza cero (valor fijo) |
Tabla 31. Correlación de parámetros con CER.
+Parámetro | Correlación con CER | Interpretación |
text_det_thresh | -0.523 | Correlación moderada negativa |
text_det_box_thresh | +0.226 | Correlación débil positiva |
text_rec_score_thresh | -0.161 | Correlación débil negativa |
text_det_unclip_ratio | NaN | Varianza cero (valor fijo) |
Fuente: Elaboración propia.
Tabla 32. Tabla 24. Correlación de parámetros con WER.
-Parámetro | Correlación con WER | Interpretación |
text_det_thresh | -0.521 | Correlación moderada negativa |
text_det_box_thresh | +0.227 | Correlación débil positiva |
text_rec_score_thresh | -0.173 | Correlación débil negativa |
Tabla 32. Correlación de parámetros con WER.
+Parámetro | Correlación con WER | Interpretación |
text_det_thresh | -0.521 | Correlación moderada negativa |
text_det_box_thresh | +0.227 | Correlación débil positiva |
text_rec_score_thresh | -0.173 | Correlación débil negativa |
Fuente: Elaboración propia.
Hallazgo clave: El parámetro text_det_thresh muestra la correlación más fuerte (-0.52 con ambas métricas), indicando que valores más altos de este umbral tienden a reducir el error. Este umbral controla qué píxeles se consideran "texto" en el mapa de probabilidad del detector.
El parámetro booleano textline_orientation demostró tener el mayor impacto en el rendimiento:
-Tabla 33. Tabla 25. Impacto del parámetro textline_orientation.
-textline_orientation | CER Medio | CER Std | WER Medio | N trials |
True | 3.76% | 7.12% | 12.73% | 32 |
False | 12.40% | 14.93% | 21.71% | 32 |
Tabla 33. Impacto del parámetro textline_orientation.
+textline_orientation | CER Medio | CER Std | WER Medio | N trials |
True | 3.76% | 7.12% | 12.73% | 32 |
False | 12.40% | 14.93% | 21.71% | 32 |
Fuente: Elaboración propia.
Interpretación:
@@ -5484,8 +5484,8 @@ Configuración óptima:El parámetro textline_orientation activa un clasificador que determina la orientación de cada línea de texto detectada. Para documentos con layouts mixtos (tablas, encabezados laterales, direcciones postales), este clasificador asegura que el texto se lea en el orden correcto, evitando la mezcla de líneas de diferentes columnas o secciones.
Los trials con CER muy alto (>20%) presentaron patrones específicos:
-Tabla 34. Tabla 26. Características de trials con fallos catastróficos.
-Trial | CER | text_det_thresh | textline_orientation | Diagnóstico |
#47 | 51.61% | 0.017 | True | Umbral muy bajo |
#23 | 43.29% | 0.042 | False | Umbral bajo + sin orientación |
#12 | 38.76% | 0.089 | False | Umbral bajo + sin orientación |
#56 | 35.12% | 0.023 | False | Umbral muy bajo + sin orientación |
Tabla 34. Características de trials con fallos catastróficos.
+Trial | CER | text_det_thresh | textline_orientation | Diagnóstico |
#47 | 51.61% | 0.017 | True | Umbral muy bajo |
#23 | 43.29% | 0.042 | False | Umbral bajo + sin orientación |
#12 | 38.76% | 0.089 | False | Umbral bajo + sin orientación |
#56 | 35.12% | 0.023 | False | Umbral muy bajo + sin orientación |
Fuente: Elaboración propia.
Diagnóstico:
@@ -5516,13 +5516,13 @@ Configuración óptima: "text_det_unclip_ratio": 0.0, "text_rec_score_thresh": 0.6350, } -Tabla 35. Tabla 27. Comparación baseline vs optimizado (24 páginas).
-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% |
Tabla 35. Comparación baseline vs optimizado (24 páginas).
+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% |
Fuente: Elaboración propia.
Tabla 36. Tabla 28. Análisis cuantitativo de la mejora.
-Forma de Medición | CER | WER |
Valor baseline | 7.78% | 14.94% |
Valor optimizado | 1.49% | 7.62% |
Mejora absoluta | -6.29 pp | -7.32 pp |
Reducción relativa del error | 80.9% | 49.0% |
Factor de mejora | 5.2× | 2.0× |
Tabla 36. Análisis cuantitativo de la mejora.
+Forma de Medición | CER | WER |
Valor baseline | 7.78% | 14.94% |
Valor optimizado | 1.49% | 7.62% |
Mejora absoluta | -6.29 pp | -7.32 pp |
Reducción relativa del error | 80.9% | 49.0% |
Factor de mejora | 5.2× | 2.0× |
Fuente: Elaboración propia.
Figura 8. Comparación Baseline vs Optimizado (24 páginas)
@@ -5531,16 +5531,16 @@ Configuración óptima:En un documento típico de 10,000 caracteres:
-Tabla 37. Tabla de datos.
-Configuración | Caracteres con error | Palabras con error* |
Baseline | ~778 | ~225 |
Optimizada | ~149 | ~115 |
Reducción | 629 menos | 110 menos |
Tabla 37. En un documento típico de 10,000 caracteres
+Configuración | Caracteres con error | Palabras con error* |
Baseline | ~778 | ~225 |
Optimizada | ~149 | ~115 |
Reducción | 629 menos | 110 menos |
Fuente: Elaboración propia.
*Asumiendo longitud media de palabra = 6.6 caracteres en español.
Interpretación del notebook:
"La optimización de hiperparámetros mejoró la precisión de caracteres de 92.2% a 98.5%, una ganancia de 6.3 puntos porcentuales. Aunque el baseline ya ofrecía resultados aceptables, la configuración optimizada reduce los errores residuales en un 80.9%."
Tabla 38. Tabla 29. Métricas de tiempo del experimento.
-Métrica | Valor |
Tiempo total del experimento | ~6.4 horas |
Tiempo medio por trial | 347.61 segundos (~5.8 min) |
Tiempo medio por página | 69.42 segundos |
Variabilidad (std) | 1.57 segundos/página |
Páginas procesadas totales | 320 |
Tabla 38. Métricas de tiempo del experimento.
+Métrica | Valor |
Tiempo total del experimento | ~6.4 horas |
Tiempo medio por trial | 347.61 segundos (~5.8 min) |
Tiempo medio por página | 69.42 segundos |
Variabilidad (std) | 1.57 segundos/página |
Páginas procesadas totales | 320 |
Fuente: Elaboración propia.
Observaciones:
@@ -5556,29 +5556,29 @@ Configuración óptima:- textline_orientation=True reduce CER en 69.7% - text_det_thresh tiene correlación -0.52 con CER - Valores de text_det_thresh < 0.1 causan fallos catastróficos
1. Mejora final: CER reducido de 7.78% a 1.49% (reducción del 80.9%)
Fuentes de datos:
-· [src/run_tuning.py](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py): Script principal de optimización
-· [src/raytune_ocr.py](https://github.com/seryus/MastersThesis/blob/main/src/raytune_ocr.py): Librería de utilidades Ray Tune
-· [src/results/](https://github.com/seryus/MastersThesis/tree/main/src/results): Resultados CSV de los trials
+· src/run_tuning.py: Script principal de optimización
+· src/raytune_ocr.py: Librería de utilidades Ray Tune
+· src/results/: Resultados CSV de los trials
Esta sección presenta un análisis consolidado de los resultados obtenidos en las fases de benchmark comparativo y optimización de hiperparámetros. Se discuten las implicaciones prácticas, se evalúa el cumplimiento de los objetivos planteados y se identifican las limitaciones del estudio.
Tabla 39. Tabla 30. Evolución del rendimiento a través del estudio.
-Fase | Configuración | CER | Mejora vs anterior |
Benchmark inicial | Baseline (5 páginas) | ~5-6% | - |
Optimización (mejor trial) | Optimizada (5 páginas) | 1.15% | ~80% |
Validación final | Optimizada (24 páginas) | 1.49% | - |
Tabla 39. Evolución del rendimiento a través del estudio.
+Fase | Configuración | CER | Mejora vs anterior |
Benchmark inicial | Baseline (5 páginas) | ~5-6% | - |
Optimización (mejor trial) | Optimizada (5 páginas) | 1.15% | ~80% |
Validación final | Optimizada (24 páginas) | 1.49% | - |
Fuente: Elaboración propia.
El incremento del CER de 1.15% (5 páginas) a 1.49% (24 páginas) es esperado debido a la mayor diversidad de layouts en el dataset completo.
Tabla 40. Tabla 31. Verificación del objetivo general.
-Aspecto | Objetivo | Resultado | Cumplimiento |
Métrica | CER | CER | ✓ |
Umbral | < 2% | 1.49% | ✓ |
Método | Sin fine-tuning | Solo hiperparámetros | ✓ |
Hardware | Sin GPU | CPU only | ✓ |
Tabla 40. Verificación del objetivo general.
+Aspecto | Objetivo | Resultado | Cumplimiento |
Métrica | CER | CER | ✓ |
Umbral | < 2% | 1.49% | ✓ |
Método | Sin fine-tuning | Solo hiperparámetros | ✓ |
Hardware | Sin GPU | CPU only | ✓ |
Fuente: Elaboración propia.
Basándose en el análisis de correlación y el impacto observado:
-Tabla 41. Tabla 32. Ranking de importancia de hiperparámetros.
-Rank | Parámetro | Impacto | Evidencia |
1 | textline_orientation | Crítico | Reduce CER 69.7% |
2 | text_det_thresh | Alto | Correlación -0.52 |
3 | text_rec_score_thresh | Medio | Correlación -0.16 |
4 | text_det_box_thresh | Bajo | Correlación +0.23 |
5 | use_doc_orientation_classify | Nulo | Sin mejora |
6 | use_doc_unwarping | Nulo | Sin mejora |
Tabla 41. Ranking de importancia de hiperparámetros.
+Rank | Parámetro | Impacto | Evidencia |
1 | textline_orientation | Crítico | Reduce CER 69.7% |
2 | text_det_thresh | Alto | Correlación -0.52 |
3 | text_rec_score_thresh | Medio | Correlación -0.16 |
4 | text_det_box_thresh | Bajo | Correlación +0.23 |
5 | use_doc_orientation_classify | Nulo | Sin mejora |
6 | use_doc_unwarping | Nulo | Sin mejora |
Fuente: Elaboración propia.
Recomendación: Siempre activar textline_orientation=True para documentos estructurados.
Comportamiento observado:
-Tabla 42. Tabla de datos.
-Rango | CER típico | Comportamiento |
0.0 - 0.1 | >20% | Fallos catastróficos |
0.1 - 0.3 | 5-15% | Rendimiento pobre |
0.3 - 0.5 | 1-5% | Rendimiento óptimo |
0.5 - 0.7 | 2-8% | Rendimiento aceptable |
Tabla 42. Comportamiento observado
+Rango | CER típico | Comportamiento |
0.0 - 0.1 | >20% | Fallos catastróficos |
0.1 - 0.3 | 5-15% | Rendimiento pobre |
0.3 - 0.5 | 1-5% | Rendimiento óptimo |
0.5 - 0.7 | 2-8% | Rendimiento aceptable |
Fuente: Elaboración propia.
Interpretación:
@@ -5609,18 +5609,18 @@ Configuración óptima:Para documentos PDF digitales como los evaluados, estos módulos son innecesarios e incluso pueden introducir artefactos. Su desactivación reduce el tiempo de procesamiento sin pérdida de precisión.
Tabla 43. Tabla 33. 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 43. 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: Elaboración propia.
Tabla 44. Tabla 34. Tasa de error por tipo de contenido.
-Tipo de contenido | CER estimado | Factor de riesgo |
Párrafos de texto | ~1% | Bajo |
Listas numeradas | ~2% | Medio |
Tablas simples | ~3% | Medio |
Encabezados + pie de página | ~2% | Medio |
Tablas complejas | ~5% | Alto |
Texto en columnas | ~4% | Alto |
Tabla 44. Tasa de error por tipo de contenido.
+Tipo de contenido | CER estimado | Factor de riesgo |
Párrafos de texto | ~1% | Bajo |
Listas numeradas | ~2% | Medio |
Tablas simples | ~3% | Medio |
Encabezados + pie de página | ~2% | Medio |
Tablas complejas | ~5% | Alto |
Texto en columnas | ~4% | Alto |
Fuente: Elaboración propia.
Tabla 45. Tabla 35. 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 | 24 páginas con ground truth | ✓ Cumplido |
OE3 | Identificar hiperparámetros críticos | textline_orientation y text_det_thresh identificados | ✓ Cumplido |
OE4 | Optimizar con Ray Tune (≥50 trials) | 64 trials ejecutados | ✓ Cumplido |
OE5 | Validar configuración optimizada | CER: 7.78% → 1.49% documentado | ✓ Cumplido |
Tabla 45. 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 | 24 páginas con ground truth | ✓ Cumplido |
OE3 | Identificar hiperparámetros críticos | textline_orientation y text_det_thresh identificados | ✓ Cumplido |
OE4 | Optimizar con Ray Tune (≥50 trials) | 64 trials ejecutados | ✓ Cumplido |
OE5 | Validar configuración optimizada | CER: 7.78% → 1.49% documentado | ✓ Cumplido |
Fuente: Elaboración propia.
· Identificación de limitaciones y recomendaciones prácticas
Resultado principal: Se logró alcanzar el objetivo de CER < 2% mediante optimización de hiperparámetros, sin requerir fine-tuning ni recursos GPU.
Fuentes de datos:
-· [src/run_tuning.py](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py): Script principal de optimización
-· [src/results/](https://github.com/seryus/MastersThesis/tree/main/src/results): Resultados CSV de los trials
+· src/run_tuning.py: Script principal de optimización
+· src/results/: Resultados CSV de los trials
Imágenes Docker:
· seryus.ddns.net/unir/paddle-ocr-gpu: PaddleOCR con soporte GPU
· seryus.ddns.net/unir/easyocr-gpu: EasyOCR con soporte GPU
@@ -5691,22 +5691,22 @@ Configuración óptima:Para evaluar la viabilidad práctica del enfoque optimizado en escenarios de producción, se realizó una validación adicional utilizando aceleración GPU. Esta fase complementa los experimentos en CPU presentados anteriormente y demuestra la aplicabilidad del método cuando se dispone de hardware con capacidad de procesamiento paralelo.
Tabla 46. Tabla 36. Especificaciones del entorno de validación GPU.
-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 46. Especificaciones del entorno de validación GPU.
+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: Elaboración propia.
El entorno de validación representa hardware de consumo típico para desarrollo de aplicaciones de machine learning, permitiendo evaluar el rendimiento en condiciones realistas de despliegue.
Se evaluó el tiempo de procesamiento utilizando la configuración optimizada identificada en la fase anterior, comparando el rendimiento entre CPU y GPU.
-Tabla 47. Tabla 37. Rendimiento comparativo CPU vs GPU.
-Métrica | CPU | GPU (RTX 3060) | Factor de Aceleración |
Tiempo/Página | 69.4s | 0.55s | 126x |
Dataset completo (45 páginas) | ~52 min | ~25 seg | 126x |
Tabla 47. Rendimiento comparativo CPU vs GPU.
+Métrica | CPU | GPU (RTX 3060) | Factor de Aceleración |
Tiempo/Página | 69.4s | 0.55s | 126x |
Dataset completo (45 páginas) | ~52 min | ~25 seg | 126x |
Fuente: Elaboración propia.
La aceleración de 126x obtenida con GPU transforma la aplicabilidad práctica del sistema. Mientras que el procesamiento en CPU limita el uso a escenarios de procesamiento por lotes sin restricciones de tiempo, la velocidad con GPU habilita casos de uso interactivos y de 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 48. Tabla 38. 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 48. 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: Elaboración propia.
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.
@@ -5724,8 +5724,8 @@ y trabajo futuroEste capít
Este Trabajo Fin de Máster ha demostrado que es posible mejorar significativamente el rendimiento de sistemas OCR preentrenados mediante optimización sistemática de hiperparámetros, sin requerir fine-tuning ni recursos GPU dedicados. El objetivo principal del trabajo era alcanzar un CER inferior al 2% en documentos académicos en español. Los resultados obtenidos confirman el cumplimiento de este objetivo: Tabla 49. Tabla 39. Cumplimiento del objetivo de CER. Métrica Objetivo Resultado CER < 2% 1.49% Tabla 49. Cumplimiento del objetivo de CER. Métrica Objetivo Resultado CER < 2% 1.49% Fuente: Elaboración propia.Conclusiones Generales
+Conclusiones Específicas
@@ -5846,13 +5846,13 @@ major-latin;mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin
└── .gitea/workflows/ci.yaml # Pipeline CI/CD
Tabla 50. Tabla A1. 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 50. 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: Elaboración propia.
Tabla 51. Tabla A2. Dependencias del proyecto.
-Componente | Versión |
Python | 3.12.3 |
Docker | 29.1.5 |
NVIDIA Container Toolkit | Requerido para GPU |
Ray | 2.52.1 |
Optuna | 4.7.0 |
Tabla 51. Dependencias del proyecto.
+Componente | Versión |
Python | 3.12.3 |
Docker | 29.1.5 |
NVIDIA Container Toolkit | Requerido para GPU |
Ray | 2.52.1 |
Optuna | 4.7.0 |
Fuente: Elaboración propia.
Tabla 52. Tabla A3. Servicios Docker y puertos.
-Servicio | Puerto | Script de Ajuste |
PaddleOCR | 8002 | paddle_ocr_payload |
DocTR | 8003 | doctr_payload |
EasyOCR | 8002 | easyocr_payload |
Tabla 52. Servicios Docker y puertos.
+Servicio | Puerto | Script de Ajuste |
PaddleOCR | 8002 | paddle_ocr_payload |
DocTR | 8003 | doctr_payload |
EasyOCR | 8002 | easyocr_payload |
Fuente: Elaboración propia.
Los resultados detallados de las evaluaciones y ajustes de hiperparámetros se encuentran en:
-· [Métricas Generales](metrics/metrics.md) - Comparativa de los tres servicios
-· [PaddleOCR](metrics/metrics_paddle.md) - Mejor precisión (7.76% CER baseline, 1.49% optimizado)
-· [DocTR](metrics/metrics_doctr.md) - Más rápido (0.50s/página)
-· [EasyOCR](metrics/metrics_easyocr.md) - Balance intermedio
+· Métricas Generales - Comparativa de los tres servicios
+· PaddleOCR - Mejor precisión (7.76% CER baseline, 1.49% optimizado)
+· DocTR - Más rápido (0.50s/página)
+· EasyOCR - Balance intermedio
Tabla 53. Tabla A4. Resumen de resultados del benchmark por servicio.
-Servicio | CER Base | CER Ajustado | Mejora |
PaddleOCR | 8.85% | 7.72% | 12.8% |
DocTR | 12.06% | 12.07% | 0% |
EasyOCR | 11.23% | 11.14% | 0.8% |
Tabla 53. Resumen de resultados del benchmark por servicio.
+Servicio | CER Base | CER Ajustado | Mejora |
PaddleOCR | 8.85% | 7.72% | 12.8% |
DocTR | 12.06% | 12.07% | 0% |
EasyOCR | 11.23% | 11.14% | 0.8% |
Fuente: Elaboración propia.