more doc corrections
Some checks failed
build_docker / essential (pull_request) Has been cancelled
build_docker / build_cpu (pull_request) Has been cancelled
build_docker / build_gpu (pull_request) Has been cancelled
build_docker / build_easyocr (pull_request) Has been cancelled
build_docker / build_easyocr_gpu (pull_request) Has been cancelled
build_docker / build_doctr (pull_request) Has been cancelled
build_docker / build_doctr_gpu (pull_request) Has been cancelled
build_docker / build_raytune (pull_request) Has been cancelled

This commit is contained in:
2026-01-20 13:12:12 +01:00
parent c5a6e791e8
commit 4088a1efd0
5 changed files with 44 additions and 41 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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: