diff --git a/README.md b/README.md
index 7f1e74d..eeafb81 100644
--- a/README.md
+++ b/README.md
@@ -315,6 +315,9 @@ Este proyecto es parte de un Trabajo Fin de Máster académico.
## Referencias
- [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR)
+- [EasyOCR](https://github.com/JaidedAI/EasyOCR)
+- [DocTR](https://github.com/mindee/doctr)
- [Ray Tune](https://docs.ray.io/en/latest/tune/index.html)
- [Optuna](https://optuna.org/)
- [jiwer](https://github.com/jitsi/jiwer)
+- [PyMuPDF](https://pymupdf.readthedocs.io/)
diff --git a/docs/04_desarrollo_especifico.md b/docs/04_desarrollo_especifico.md
index 2e1d8f6..db5697a 100644
--- a/docs/04_desarrollo_especifico.md
+++ b/docs/04_desarrollo_especifico.md
@@ -217,7 +217,7 @@ El benchmark comparativo ha permitido identificar PaddleOCR como la solución m
### Introducción
-Una vez seleccionado PaddleOCR como motor base, el siguiente paso fue explorar sistemáticamente su espacio de configuración para identificar los hiperparámetros que maximizan el rendimiento en documentos académicos en español. Para ello se empleó Ray Tune con el algoritmo de búsqueda Optuna, una combinación que permite explorar eficientemente espacios de búsqueda mixtos (parámetros continuos y categóricos). Los experimentos se implementaron en [`src/run_tuning.py`](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py) con apoyo de la librería [`src/raytune_ocr.py`](https://github.com/seryus/MastersThesis/blob/main/src/raytune_ocr.py), almacenándose los resultados en [`src/results/`](https://github.com/seryus/MastersThesis/tree/main/src/results).
+Una vez seleccionado PaddleOCR como motor base, el siguiente paso fue explorar sistemáticamente su espacio de configuración para identificar los hiperparámetros que maximizan el rendimiento en documentos académicos en español. Para ello se empleó Ray Tune con el algoritmo de búsqueda Optuna, una combinación que permite explorar eficientemente espacios de búsqueda mixtos (parámetros continuos y categóricos). Los experimentos se implementaron en [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py) con apoyo de la librería [`src/raytune_ocr.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/raytune_ocr.py), almacenándose los resultados en [`src/results/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/results).
Esta aproximación ofrece ventajas significativas frente al fine-tuning tradicional: no requiere datasets de entrenamiento etiquetados, no modifica los pesos del modelo preentrenado, y puede ejecutarse con hardware de consumo cuando se dispone de aceleración GPU.
@@ -317,7 +317,7 @@ La infraestructura del proyecto se basa en contenedores Docker para garantizar r
| [`seryus.ddns.net/unir/doctr-gpu`](https://seryus.ddns.net/unir/-/packages/container/doctr-gpu/latest) | DocTR con aceleración GPU | `nvidia/cuda:13.0.2-cudnn-runtime` | 8003 |
| [`seryus.ddns.net/unir/raytune`](https://seryus.ddns.net/unir/-/packages/container/raytune/latest) | Orquestador Ray Tune | `python:3.12-slim` | - |
-*Fuente: Elaboración propia. Dockerfiles disponibles en [`src/paddle_ocr/`](https://github.com/seryus/MastersThesis/tree/main/src/paddle_ocr), [`src/easyocr_service/`](https://github.com/seryus/MastersThesis/tree/main/src/easyocr_service), [`src/doctr_service/`](https://github.com/seryus/MastersThesis/tree/main/src/doctr_service), [`src/raytune/`](https://github.com/seryus/MastersThesis/tree/main/src/raytune).*
+*Fuente: Elaboración propia. Dockerfiles disponibles en [`src/paddle_ocr/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/paddle_ocr), [`src/easyocr_service/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/easyocr_service), [`src/doctr_service/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/doctr_service), [`src/raytune/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/raytune).*
##### Arquitectura de Microservicios
@@ -401,10 +401,10 @@ El proyecto incluye múltiples archivos Docker Compose para diferentes escenario
| Archivo | Propósito | Servicios |
|---------|-----------|-----------|
-| [`docker-compose.tuning.yml`](https://github.com/seryus/MastersThesis/blob/main/src/docker-compose.tuning.yml) | Optimización principal | RayTune + PaddleOCR + DocTR |
-| [`docker-compose.tuning.easyocr.yml`](https://github.com/seryus/MastersThesis/blob/main/src/docker-compose.tuning.easyocr.yml) | Optimización EasyOCR | RayTune + EasyOCR |
-| [`docker-compose.tuning.paddle.yml`](https://github.com/seryus/MastersThesis/blob/main/src/docker-compose.tuning.paddle.yml) | Optimización PaddleOCR | RayTune + PaddleOCR |
-| [`docker-compose.tuning.doctr.yml`](https://github.com/seryus/MastersThesis/blob/main/src/docker-compose.tuning.doctr.yml) | Optimización DocTR | RayTune + DocTR |
+| [`docker-compose.tuning.yml`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/docker-compose.tuning.yml) | Optimización principal | RayTune + PaddleOCR + DocTR |
+| [`docker-compose.tuning.easyocr.yml`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/docker-compose.tuning.easyocr.yml) | Optimización EasyOCR | RayTune + EasyOCR |
+| [`docker-compose.tuning.paddle.yml`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/docker-compose.tuning.paddle.yml) | Optimización PaddleOCR | RayTune + PaddleOCR |
+| [`docker-compose.tuning.doctr.yml`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/docker-compose.tuning.doctr.yml) | Optimización DocTR | RayTune + DocTR |
*Fuente: Elaboración propia.*
@@ -488,7 +488,7 @@ Para reproducir los experimentos:
```bash
# 1. Clonar repositorio
-git clone https://github.com/seryus/MastersThesis.git
+git clone https://seryus.ddns.net/unir/MastersThesis.git
cd MastersThesis/src
# 2. Iniciar servicio OCR (requiere nvidia-docker)
@@ -509,9 +509,9 @@ docker compose -f docker-compose.tuning.paddle.yml down
```
Los resultados de los experimentos están disponibles en:
-- [`src/results/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv)
-- [`src/results/raytune_easyocr_results_20260119_120204.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_easyocr_results_20260119_120204.csv)
-- [`src/results/raytune_doctr_results_20260119_121445.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_doctr_results_20260119_121445.csv)
+- [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv)
+- [`src/results/raytune_easyocr_results_20260119_120204.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_easyocr_results_20260119_120204.csv)
+- [`src/results/raytune_doctr_results_20260119_121445.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_doctr_results_20260119_121445.csv)
#### Dataset Extendido
@@ -669,7 +669,7 @@ Configuración óptima:
| text_det_unclip_ratio | 0.0 | 1.5 | -1.5 (fijado) |
| text_rec_score_thresh | **0.5658** | 0.5 | +0.066 |
-*Fuente: Análisis de [`src/results/`](https://github.com/seryus/MastersThesis/tree/main/src/results) generados por [`src/run_tuning.py`](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py).*
+*Fuente: Análisis de [`src/results/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/results) generados por [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py).*
#### Análisis de Correlación
@@ -684,7 +684,7 @@ Se calculó la correlación de Pearson entre los parámetros continuos y las mé
| `text_rec_score_thresh` | -0.161 | Correlación débil negativa |
| `text_det_unclip_ratio` | NaN | Varianza cero (valor fijo) |
-*Fuente: Análisis de [`src/results/`](https://github.com/seryus/MastersThesis/tree/main/src/results) generados por [`src/run_tuning.py`](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py).*
+*Fuente: Análisis de [`src/results/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/results) generados por [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py).*
**Tabla 28.** *Correlación de parámetros con WER.*
@@ -694,7 +694,7 @@ Se calculó la correlación de Pearson entre los parámetros continuos y las mé
| `text_det_box_thresh` | +0.227 | Correlación débil positiva |
| `text_rec_score_thresh` | -0.173 | Correlación débil negativa |
-*Fuente: Análisis de [`src/results/`](https://github.com/seryus/MastersThesis/tree/main/src/results) generados por [`src/run_tuning.py`](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py).*
+*Fuente: Análisis de [`src/results/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/results) generados por [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py).*
**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.
@@ -709,7 +709,7 @@ El parámetro booleano `textline_orientation` demostró tener el mayor impacto e
| True | 3.76% | 7.12% | 12.73% | 32 |
| False | 12.40% | 14.93% | 21.71% | 32 |
-*Fuente: Análisis de [`src/results/`](https://github.com/seryus/MastersThesis/tree/main/src/results) generados por [`src/run_tuning.py`](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py).*
+*Fuente: Análisis de [`src/results/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/results) generados por [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py).*
**Interpretación:**
@@ -778,7 +778,7 @@ La configuración óptima identificada se evaluó sobre el dataset completo de 4
| PaddleOCR (Baseline) | 8.85% | 91.15% | 13.05% | 86.95% |
| PaddleOCR-HyperAdjust | **7.72%** | **92.28%** | **11.40%** | **88.60%** |
-*Fuente: Validación final. Código en [`src/run_tuning.py`](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py), resultados en [`src/results/`](https://github.com/seryus/MastersThesis/tree/main/src/results).*
+*Fuente: Validación final. Código en [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py), resultados en [`src/results/`](https://seryus.ddns.net/unir/MastersThesis/-/tree/main/src/results).*
> **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.
@@ -845,7 +845,7 @@ xychart-beta
| Variabilidad (std) | 0.53 segundos/página |
| Páginas procesadas totales | 320 |
-*Fuente: [`src/results/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
+*Fuente: [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
**Observaciones:**
@@ -859,7 +859,7 @@ Los 64 trials ejecutados con Ray Tune y aceleración GPU revelaron patrones clar
El mejor trial alcanzó un CER de 0.79%, cumpliendo el objetivo de CER < 2%. No obstante, la validación sobre el dataset completo de 45 páginas arrojó un CER de 7.72%, evidenciando sobreajuste al subconjunto de optimización de 5 páginas. Aun así, esto representa una mejora del 12.8% respecto al baseline (8.85%), demostrando el valor de la optimización sistemática incluso cuando la generalización es imperfecta.
-**Fuentes de datos:** [`src/run_tuning.py`](https://github.com/seryus/MastersThesis/blob/main/src/run_tuning.py), [`src/raytune_ocr.py`](https://github.com/seryus/MastersThesis/blob/main/src/raytune_ocr.py), [`src/results/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).
+**Fuentes de datos:** [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py), [`src/raytune_ocr.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/raytune_ocr.py), [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).
## Discusión y análisis de resultados
@@ -915,7 +915,7 @@ Basándose en el análisis de los resultados de optimización:
| 5 | `text_rec_score_thresh` | Medio | Moderado (0.5658) |
| 6 | `use_doc_unwarping` | Nulo | Desactivado en configuración óptima |
-*Fuente: Elaboración propia basada en [`src/results/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
+*Fuente: Elaboración propia basada en [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
#### Análisis del Parámetro textline_orientation
@@ -1055,7 +1055,7 @@ Para documentos académicos en español similares a los evaluados:
| `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: Análisis de [`src/results/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
+*Fuente: Análisis de [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
#### Cuándo Aplicar Esta Metodología
@@ -1092,10 +1092,10 @@ Los resultados cuantifican tanto los logros como las limitaciones del enfoque. E
Desde el punto de vista práctico, la infraestructura dockerizada desarrollada y la aceleración GPU (82× más rápida que CPU) demuestran la viabilidad de esta metodología tanto para experimentación como para despliegue en producción.
**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/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv): Resultados CSV de PaddleOCR
-- [`src/results/raytune_easyocr_results_20260119_120204.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_easyocr_results_20260119_120204.csv): Resultados CSV de EasyOCR
-- [`src/results/raytune_doctr_results_20260119_121445.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_doctr_results_20260119_121445.csv): Resultados CSV de DocTR
+- [`src/run_tuning.py`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/run_tuning.py): Script principal de optimización
+- [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv): Resultados CSV de PaddleOCR
+- [`src/results/raytune_easyocr_results_20260119_120204.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_easyocr_results_20260119_120204.csv): Resultados CSV de EasyOCR
+- [`src/results/raytune_doctr_results_20260119_121445.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_doctr_results_20260119_121445.csv): Resultados CSV de DocTR
**Imágenes Docker:**
- [`seryus.ddns.net/unir/paddle-ocr-gpu`](https://seryus.ddns.net/unir/-/packages/container/paddle-ocr-gpu/latest): PaddleOCR con soporte GPU
@@ -1124,7 +1124,7 @@ Este hardware representa configuración típica de desarrollo, permitiendo evalu
#### Comparación CPU vs GPU
-Se comparó el tiempo de procesamiento entre CPU y GPU utilizando los datos de [`src/raytune_paddle_subproc_results_20251207_192320.csv`](https://github.com/seryus/MastersThesis/blob/main/src/raytune_paddle_subproc_results_20251207_192320.csv) (CPU) y [`src/results/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv) (GPU).
+Se comparó el tiempo de procesamiento entre CPU y GPU utilizando los datos de [`src/raytune_paddle_subproc_results_20251207_192320.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/raytune_paddle_subproc_results_20251207_192320.csv) (CPU) y [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv) (GPU).
**Tabla 42.** *Rendimiento comparativo CPU vs GPU.*
@@ -1134,7 +1134,7 @@ Se comparó el tiempo de procesamiento entre CPU y GPU utilizando los datos de [
| Dataset completo (45 páginas) | ~52 min | ~38 seg | **82x** |
| 64 trials × 5 páginas | ~6.4 horas | ~1.5 horas | **4.3x** |
-*Fuente: Elaboración propia a partir de [`src/raytune_paddle_subproc_results_20251207_192320.csv`](https://github.com/seryus/MastersThesis/blob/main/src/raytune_paddle_subproc_results_20251207_192320.csv) y [`src/results/raytune_paddle_results_20260119_122609.csv`](https://github.com/seryus/MastersThesis/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
+*Fuente: Elaboración propia a partir de [`src/raytune_paddle_subproc_results_20251207_192320.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/raytune_paddle_subproc_results_20251207_192320.csv) y [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/-/blob/main/src/results/raytune_paddle_results_20260119_122609.csv).*
La aceleración de 82× obtenida con GPU transforma la viabilidad del enfoque:
- **Optimización en CPU (6.4 horas)**: Viable pero lento para iteraciones rápidas
diff --git a/docs/05_conclusiones_trabajo_futuro.md b/docs/05_conclusiones_trabajo_futuro.md
index f0b409a..1661976 100644
--- a/docs/05_conclusiones_trabajo_futuro.md
+++ b/docs/05_conclusiones_trabajo_futuro.md
@@ -96,5 +96,5 @@ La metodología propuesta cumple los requisitos de reproducibilidad científica:
La infraestructura dockerizada desarrollada constituye una aportación práctica que trasciende los resultados numéricos. Al encapsular los motores OCR en contenedores independientes, se resuelven problemas de compatibilidad entre dependencias y se garantiza que cualquier investigador pueda reproducir exactamente las condiciones experimentales. La aceleración de 82× proporcionada por GPU transforma lo que sería un experimento de días en uno de horas, haciendo viable la exploración exhaustiva de espacios de hiperparámetros con hardware de consumo.
-El código fuente, las imágenes Docker y los datos experimentales están disponibles públicamente en el [repositorio del proyecto](https://github.com/seryus/MastersThesis). Esta apertura busca facilitar no solo la reproducción de los resultados, sino también la extensión de este trabajo hacia nuevos tipos de documentos, idiomas o motores OCR.
+El código fuente, las imágenes Docker y los datos experimentales están disponibles públicamente en el [repositorio del proyecto](https://seryus.ddns.net/unir/MastersThesis). Esta apertura busca facilitar no solo la reproducción de los resultados, sino también la extensión de este trabajo hacia nuevos tipos de documentos, idiomas o motores OCR.
diff --git a/docs/07_anexo_a.md b/docs/07_anexo_a.md
index 6660287..75e0525 100644
--- a/docs/07_anexo_a.md
+++ b/docs/07_anexo_a.md
@@ -6,7 +6,7 @@ Este anexo proporciona la información técnica necesaria para reproducir los ex
Todo el código fuente y los datos utilizados en este trabajo están disponibles públicamente en el siguiente repositorio:
-**URL del repositorio:** https://github.com/seryus/MastersThesis
+**URL del repositorio:** https://seryus.ddns.net/unir/MastersThesis
El repositorio incluye:
diff --git a/thesis_output/plantilla_individual.htm b/thesis_output/plantilla_individual.htm
index 23a0db6..17866e8 100644
--- a/thesis_output/plantilla_individual.htm
+++ b/thesis_output/plantilla_individual.htm
@@ -5196,7 +5196,7 @@ color:#0098CD;mso-font-kerning:16.0pt;mso-bidi-font-weight:bold'>
Una vez seleccionado PaddleOCR como motor base, el siguiente paso fue explorar sistemáticamente su espacio de configuración para identificar los hiperparámetros que maximizan el rendimiento en documentos académicos en español. Para ello se empleó Ray Tune con el algoritmo de búsqueda Optuna, una combinación que permite explorar eficientemente espacios de búsqueda mixtos (parámetros continuos y categóricos). Los experimentos se implementaron en src/run_tuning.py con apoyo de la librería src/raytune_ocr.py, almacenándose los resultados en src/results/.
+Una vez seleccionado PaddleOCR como motor base, el siguiente paso fue explorar sistemáticamente su espacio de configuración para identificar los hiperparámetros que maximizan el rendimiento en documentos académicos en español. Para ello se empleó Ray Tune con el algoritmo de búsqueda Optuna, una combinación que permite explorar eficientemente espacios de búsqueda mixtos (parámetros continuos y categóricos). Los experimentos se implementaron en src/run_tuning.py con apoyo de la librería src/raytune_ocr.py, almacenándose los resultados en src/results/.
Esta aproximación ofrece ventajas significativas frente al fine-tuning tradicional: no requiere datasets de entrenamiento etiquetados, no modifica los pesos del modelo preentrenado, y puede ejecutarse con hardware de consumo cuando se dispone de aceleración GPU.
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 |
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: Elaboración propia.
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.
@@ -5297,7 +5297,7 @@ docker compose -f docker-compose.tuning.doctr.yml downPara reproducir los experimentos:
# 1. Clonar repositorio -git clone https://github.com/seryus/MastersThesis.git +git clone https://seryus.ddns.net/unir/MastersThesis.git cd MastersThesis/src # 2. Iniciar servicio OCR (requiere nvidia-docker) @@ -5317,9 +5317,9 @@ ls -la results/raytune_paddle_results_*.csv docker compose -f docker-compose.tuning.paddle.yml down
Los resultados de los experimentos están disponibles en:
-· src/results/raytune_paddle_results_20260119_122609.csv
-· src/results/raytune_easyocr_results_20260119_120204.csv
-· src/results/raytune_doctr_results_20260119_121445.csv
+· src/results/raytune_paddle_results_20260119_122609.csv
+· src/results/raytune_easyocr_results_20260119_120204.csv
+· src/results/raytune_doctr_results_20260119_121445.csv
Para la fase de optimización se extendió el dataset:
Tabla 29. Características del dataset de optimización.
@@ -5468,7 +5468,7 @@ Configuración óptima:Los 64 trials ejecutados con Ray Tune y aceleración GPU revelaron patrones claros en el comportamiento de PaddleOCR. El hallazgo más significativo es que los parámetros estructurales —textline_orientation y use_doc_orientation_classify— tienen mayor impacto que los umbrales numéricos: activarlos reduce el CER medio de 12.40% a 3.76%. En cuanto a umbrales, valores bajos de text_det_thresh (~0.05) benefician el rendimiento, mientras que use_doc_unwarping resulta innecesario para PDFs digitales.
El mejor trial alcanzó un CER de 0.79%, cumpliendo el objetivo de CER < 2%. No obstante, la validación sobre el dataset completo de 45 páginas arrojó un CER de 7.72%, evidenciando sobreajuste al subconjunto de optimización de 5 páginas. Aun así, esto representa una mejora del 12.8% respecto al baseline (8.85%), demostrando el valor de la optimización sistemática incluso cuando la generalización es imperfecta.
-Fuentes de datos: src/run_tuning.py, src/raytune_ocr.py, src/results/raytune_paddle_results_20260119_122609.csv.
+Fuentes de datos: src/run_tuning.py, src/raytune_ocr.py, src/results/raytune_paddle_results_20260119_122609.csv.
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.
@@ -5575,10 +5575,10 @@ Configuración óptima:Los resultados cuantifican tanto los logros como las limitaciones del enfoque. El mejor trial individual alcanzó un CER de 0.79%, cumpliendo holgadamente el objetivo de CER < 2%. Sin embargo, la validación sobre el dataset completo de 45 páginas reveló un CER de 7.72%, lo que representa una mejora del 12.8% respecto al baseline (8.85%) pero evidencia sobreajuste al subconjunto de optimización. Esta observación es valiosa: indica que futuros trabajos deberían emplear subconjuntos de optimización más representativos o aplicar técnicas de regularización.
Desde el punto de vista práctico, la infraestructura dockerizada desarrollada y la aceleración GPU (82× más rápida que CPU) demuestran la viabilidad de esta metodología tanto para experimentación como para despliegue en producción.
Fuentes de datos:
-· src/run_tuning.py: Script principal de optimización
-· src/results/raytune_paddle_results_20260119_122609.csv: Resultados CSV de PaddleOCR
-· src/results/raytune_easyocr_results_20260119_120204.csv: Resultados CSV de EasyOCR
-· src/results/raytune_doctr_results_20260119_121445.csv: Resultados CSV de DocTR
+· src/run_tuning.py: Script principal de optimización
+· src/results/raytune_paddle_results_20260119_122609.csv: Resultados CSV de PaddleOCR
+· src/results/raytune_easyocr_results_20260119_120204.csv: Resultados CSV de EasyOCR
+· src/results/raytune_doctr_results_20260119_121445.csv: Resultados CSV de DocTR
Imágenes Docker:
· seryus.ddns.net/unir/paddle-ocr-gpu: PaddleOCR con soporte GPU
· seryus.ddns.net/unir/easyocr-gpu: EasyOCR con soporte GPU
@@ -5592,7 +5592,7 @@ Configuración óptima: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).
+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 53. 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.4 horas | ~1.5 horas | 4.3x |
Fuente: Elaboración propia.
@@ -5665,7 +5665,7 @@ y trabajo futuroA lo largo
En síntesis, este trabajo ha demostrado que la optimización de hiperparámetros representa una alternativa viable al fine-tuning para mejorar sistemas OCR, especialmente cuando se dispone de modelos preentrenados para el idioma objetivo y recursos limitados de tiempo o datos etiquetados. La metodología propuesta cumple los requisitos de reproducibilidad científica: los experimentos pueden replicarse, los resultados son cuantificables y las conclusiones son aplicables a escenarios reales de procesamiento documental. Sin embargo, la experiencia también ha puesto de manifiesto la importancia de diseñar cuidadosamente los experimentos de optimización. Aunque el objetivo de CER inferior al 2% se alcanzó en el mejor trial individual (0.79%), la validación sobre el conjunto de datos completo (7.72%) revela que el tamaño y representatividad del subconjunto de optimización son factores críticos que no deben subestimarse. La infraestructura dockerizada desarrollada constituye una aportación práctica que trasciende los resultados numéricos. Al encapsular los motores OCR en contenedores independientes, se resuelven problemas de compatibilidad entre dependencias y se garantiza que cualquier investigador pueda reproducir exactamente las condiciones experimentales. La aceleración de 82× proporcionada por GPU transforma lo que sería un experimento de días en uno de horas, haciendo viable la exploración exhaustiva de espacios de hiperparámetros con hardware de consumo. El código fuente, las imágenes Docker y los datos experimentales están disponibles públicamente en el repositorio del proyecto. Esta apertura busca facilitar no solo la reproducción de los resultados, sino también la extensión de este trabajo hacia nuevos tipos de documentos, idiomas o motores OCR. Referencias
+ El código fuente, las imágenes Docker y los datos experimentales están disponibles públicamente en el repositorio del proyecto. Esta apertura busca facilitar no solo la reproducción de los resultados, sino también la extensión de este trabajo hacia nuevos tipos de documentos, idiomas o motores OCR. Akiba, T., Sano, S., Yanase, T., Ohta, T., & Koyama, M. (2019). Optuna: A next-generation hyperparameter optimization framework. Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining, 2623-2631. https://doi.org/10.1145/3292500.3330701 Baek, Y., Lee, B., Han, D., Yun, S., & Lee, H. (2019). Character region awareness for text detection. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, 9365-9374. https://doi.org/10.1109/CVPR.2019.00959 Bergstra, J., & Bengio, Y. (2012). Random search for hyper-parameter optimization. Journal of Machine Learning Research, 13(1), 281-305. https://jmlr.org/papers/v13/bergstra12a.html
Este anexo proporciona la información técnica necesaria para reproducir los experimentos descritos en este trabajo. Se incluyen las instrucciones de instalación, configuración de los servicios OCR dockerizados, ejecución de los scripts de optimización y acceso a los resultados experimentales.
Todo el código fuente y los datos utilizados en este trabajo están disponibles públicamente en el siguiente repositorio:
-URL del repositorio: https://github.com/seryus/MastersThesis
+URL del repositorio: https://seryus.ddns.net/unir/MastersThesis
El repositorio incluye:
· Servicios OCR dockerizados: PaddleOCR, DocTR, EasyOCR con soporte GPU
· Scripts de evaluación: Herramientas para evaluar y comparar modelos OCR