Add references to each chapter

This commit is contained in:
2025-12-10 22:34:33 +01:00
parent a8198f0906
commit 2fc91e2a64
12 changed files with 965 additions and 583 deletions

View File

@@ -41,12 +41,9 @@ El presente documento se organiza en los siguientes capítulos:
**Capítulo 3 - Objetivos y Metodología**: Se definen los objetivos SMART del trabajo y se describe la metodología experimental seguida, incluyendo la preparación del dataset, las métricas de evaluación y el proceso de optimización con Ray Tune.
**Capítulo 4 - Comparativa de Soluciones OCR**: Se presentan los resultados del benchmark inicial comparando EasyOCR, PaddleOCR y DocTR, justificando la selección de PaddleOCR para la fase de optimización.
**Capítulo 4 - Desarrollo Específico de la Contribución**: Este capítulo presenta el desarrollo completo del estudio comparativo y la optimización de hiperparámetros de sistemas OCR, estructurado en tres secciones: (4.1) planteamiento de la comparativa con la evaluación de EasyOCR, PaddleOCR y DocTR; (4.2) desarrollo de la comparativa con la optimización de hiperparámetros mediante Ray Tune; y (4.3) discusión y análisis de resultados.
**Capítulo 5 - Optimización de Hiperparámetros**: Se describe el experimento de optimización con Ray Tune, analizando el impacto de cada hiperparámetro y las correlaciones identificadas.
**Capítulo 6 - Resultados y Discusión**: Se presentan los resultados finales comparando el baseline con la configuración optimizada, incluyendo análisis estadísticos y visualizaciones.
**Capítulo 7 - Conclusiones y Trabajo Futuro**: Se resumen las contribuciones del trabajo, se discute el grado de cumplimiento de los objetivos y se proponen líneas de trabajo futuro.
**Capítulo 5 - Conclusiones y Trabajo Futuro**: Se resumen las contribuciones del trabajo, se discute el grado de cumplimiento de los objetivos y se proponen líneas de trabajo futuro.
**Anexos**: Se incluye el enlace al repositorio de código fuente y datos, así como tablas completas de resultados experimentales.

View File

@@ -177,3 +177,4 @@ Este capítulo ha presentado:
4. Las particularidades del OCR para el idioma español
El estado del arte revela que, si bien existen soluciones OCR de alta calidad, su optimización para dominios específicos mediante ajuste de hiperparámetros (sin fine-tuning) ha recibido poca atención. Este trabajo contribuye a llenar ese vacío proponiendo una metodología reproducible para la optimización de PaddleOCR en documentos académicos en español.

View File

@@ -285,4 +285,5 @@ Este capítulo ha establecido:
4. El espacio de búsqueda de hiperparámetros y la configuración de Ray Tune
5. Las limitaciones reconocidas del enfoque
El siguiente capítulo presenta los resultados del benchmark comparativo inicial entre las tres soluciones OCR evaluadas.
El siguiente capítulo presenta el desarrollo específico de la contribución, incluyendo el benchmark comparativo de soluciones OCR, la optimización de hiperparámetros y el análisis de resultados.

View File

@@ -1,132 +0,0 @@
# Capítulo 4: Comparativa de Soluciones OCR
## 4.1 Introducción
Este capítulo presenta los resultados del estudio comparativo realizado entre tres soluciones OCR de código abierto: EasyOCR, PaddleOCR y DocTR. Los experimentos fueron documentados en el notebook `ocr_benchmark_notebook.ipynb` del repositorio. El objetivo es identificar el modelo base más prometedor para la posterior fase de optimización de hiperparámetros.
## 4.2 Configuración del Experimento
### 4.2.1 Dataset de Evaluación
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/`.
| Característica | Valor |
|----------------|-------|
| Número de páginas evaluadas | 5 (páginas 1-5 en benchmark inicial) |
| Formato | PDF digital (no escaneado) |
| Idioma | Español |
| Resolución de conversión | 300 DPI |
### 4.2.2 Configuración de los Modelos
Según el código en `ocr_benchmark_notebook.ipynb`:
**EasyOCR**:
```python
easyocr_reader = easyocr.Reader(['es', 'en']) # Spanish and English
```
**PaddleOCR (PP-OCRv5)**:
```python
paddleocr_model = PaddleOCR(
text_detection_model_name="PP-OCRv5_server_det",
text_recognition_model_name="PP-OCRv5_server_rec",
use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=True,
)
```
Versión utilizada: PaddleOCR 3.2.0 (según output del notebook)
**DocTR**:
```python
doctr_model = ocr_predictor(det_arch="db_resnet50", reco_arch="sar_resnet31", pretrained=True)
```
### 4.2.3 Métricas de Evaluación
Se utilizó la biblioteca `jiwer` para calcular CER y WER:
```python
from jiwer import wer, cer
def evaluate_text(reference, prediction):
return {'WER': wer(reference, prediction), 'CER': cer(reference, prediction)}
```
## 4.3 Resultados del Benchmark
### 4.3.1 Resultados de PaddleOCR (Datos del CSV)
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, se obtienen los siguientes resultados de PaddleOCR para las páginas 5-9 del documento:
| Página | WER | CER |
|--------|-----|-----|
| 5 | 12.16% | 6.33% |
| 6 | 12.81% | 6.40% |
| 7 | 11.06% | 6.24% |
| 8 | 8.13% | 1.54% |
| 9 | 10.61% | 5.58% |
**Promedio PaddleOCR (páginas 5-9):**
- CER medio: ~5.22%
- WER medio: ~10.95%
### 4.3.2 Comparativa de Modelos
Según la documentación del notebook `ocr_benchmark_notebook.ipynb`, los tres modelos evaluados representan diferentes paradigmas de OCR:
| Modelo | Tipo | Componentes | Fortalezas Clave |
|--------|------|-------------|------------------|
| **EasyOCR** | End-to-end (det + rec) | DB + CRNN/Transformer | Ligero, fácil de usar, multilingüe |
| **PaddleOCR (PP-OCR)** | End-to-end (det + rec + cls) | DB + SRN/CRNN | Soporte multilingüe robusto, pipeline configurable |
| **DocTR** | End-to-end (det + rec) | DB/LinkNet + CRNN/SAR/VitSTR | Orientado a investigación, API limpia |
### 4.3.3 Ejemplo de Salida OCR
Del archivo CSV, un ejemplo de predicción de PaddleOCR para la página 8:
> "Escribe siempre al menos un párrafo de introducción en cada capítulo o apartado, explicando de qué vas a tratar en esa sección. Evita que aparezcan dos encabezados de nivel consecutivos sin ningún texto entre medias. [...] En esta titulacióon se cita de acuerdo con la normativa Apa."
**Errores observados en este ejemplo:**
- `titulacióon` en lugar de `titulación` (carácter duplicado)
- `Apa` en lugar de `APA` (capitalización)
## 4.4 Justificación de la Selección de PaddleOCR
### 4.4.1 Criterios de Selección
Basándose en los resultados obtenidos y la documentación del benchmark:
1. **Rendimiento**: PaddleOCR obtuvo CER entre 1.54% y 6.40% en las páginas evaluadas
2. **Configurabilidad**: PaddleOCR ofrece múltiples hiperparámetros ajustables:
- Umbrales de detección (`text_det_thresh`, `text_det_box_thresh`)
- Umbral de reconocimiento (`text_rec_score_thresh`)
- Componentes opcionales (`use_textline_orientation`, `use_doc_orientation_classify`, `use_doc_unwarping`)
3. **Documentación oficial**: [PaddleOCR Documentation](https://www.paddleocr.ai/v3.0.0/en/version3.x/pipeline_usage/OCR.html)
### 4.4.2 Decisión
**Se selecciona PaddleOCR (PP-OCRv5)** para la fase de optimización debido a:
- Resultados iniciales prometedores (CER ~5%)
- Alta configurabilidad de hiperparámetros de inferencia
- Pipeline modular que permite experimentación
## 4.5 Limitaciones del Benchmark
1. **Tamaño reducido**: Solo 5 páginas evaluadas en el benchmark comparativo inicial
2. **Único tipo de documento**: Documentos académicos de UNIR únicamente
3. **Ground truth**: El texto de referencia se extrajo automáticamente del PDF, lo cual puede introducir errores en layouts complejos
## 4.6 Resumen del Capítulo
Este capítulo ha presentado:
1. La configuración del benchmark según `ocr_benchmark_notebook.ipynb`
2. Los resultados cuantitativos de PaddleOCR del archivo CSV de resultados
3. La justificación de la selección de PaddleOCR para optimización
**Fuentes de datos utilizadas:**
- `ocr_benchmark_notebook.ipynb`: Código del benchmark
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`: Resultados numéricos
- Documentación oficial de PaddleOCR

View File

@@ -0,0 +1,533 @@
# Capítulo 4: Desarrollo Específico de la Contribución
Este capítulo presenta el desarrollo completo del estudio comparativo y la optimización de hiperparámetros de sistemas OCR. Se estructura según el tipo de trabajo "Comparativa de soluciones" establecido por las instrucciones de UNIR: planteamiento de la comparativa (4.1), desarrollo de la comparativa (4.2), y discusión y análisis de resultados (4.3).
## 4.1 Planteamiento de la Comparativa: Soluciones OCR
### 4.1.1 Introducción
Esta sección presenta los resultados del estudio comparativo realizado entre tres soluciones OCR de código abierto: EasyOCR, PaddleOCR y DocTR. Los experimentos fueron documentados en el notebook `ocr_benchmark_notebook.ipynb` del repositorio. El objetivo es identificar el modelo base más prometedor para la posterior fase de optimización de hiperparámetros.
### 4.1.2 Configuración del Experimento
#### Dataset de Evaluación
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/`.
| Característica | Valor |
|----------------|-------|
| Número de páginas evaluadas | 5 (páginas 1-5 en benchmark inicial) |
| Formato | PDF digital (no escaneado) |
| Idioma | Español |
| Resolución de conversión | 300 DPI |
#### Configuración de los Modelos
Según el código en `ocr_benchmark_notebook.ipynb`:
**EasyOCR**:
```python
easyocr_reader = easyocr.Reader(['es', 'en']) # Spanish and English
```
**PaddleOCR (PP-OCRv5)**:
```python
paddleocr_model = PaddleOCR(
text_detection_model_name="PP-OCRv5_server_det",
text_recognition_model_name="PP-OCRv5_server_rec",
use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=True,
)
```
Versión utilizada: PaddleOCR 3.2.0 (según output del notebook)
**DocTR**:
```python
doctr_model = ocr_predictor(det_arch="db_resnet50", reco_arch="sar_resnet31", pretrained=True)
```
#### Métricas de Evaluación
Se utilizó la biblioteca `jiwer` para calcular CER y WER:
```python
from jiwer import wer, cer
def evaluate_text(reference, prediction):
return {'WER': wer(reference, prediction), 'CER': cer(reference, prediction)}
```
### 4.1.3 Resultados del Benchmark
#### Resultados de PaddleOCR (Datos del CSV)
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, se obtienen los siguientes resultados de PaddleOCR para las páginas 5-9 del documento:
| Página | WER | CER |
|--------|-----|-----|
| 5 | 12.16% | 6.33% |
| 6 | 12.81% | 6.40% |
| 7 | 11.06% | 6.24% |
| 8 | 8.13% | 1.54% |
| 9 | 10.61% | 5.58% |
**Promedio PaddleOCR (páginas 5-9):**
- CER medio: ~5.22%
- WER medio: ~10.95%
#### Comparativa de Modelos
Según la documentación del notebook `ocr_benchmark_notebook.ipynb`, los tres modelos evaluados representan diferentes paradigmas de OCR:
| Modelo | Tipo | Componentes | Fortalezas Clave |
|--------|------|-------------|------------------|
| **EasyOCR** | End-to-end (det + rec) | DB + CRNN/Transformer | Ligero, fácil de usar, multilingüe |
| **PaddleOCR (PP-OCR)** | End-to-end (det + rec + cls) | DB + SRN/CRNN | Soporte multilingüe robusto, pipeline configurable |
| **DocTR** | End-to-end (det + rec) | DB/LinkNet + CRNN/SAR/VitSTR | Orientado a investigación, API limpia |
#### Ejemplo de Salida OCR
Del archivo CSV, un ejemplo de predicción de PaddleOCR para la página 8:
> "Escribe siempre al menos un párrafo de introducción en cada capítulo o apartado, explicando de qué vas a tratar en esa sección. Evita que aparezcan dos encabezados de nivel consecutivos sin ningún texto entre medias. [...] En esta titulacióon se cita de acuerdo con la normativa Apa."
**Errores observados en este ejemplo:**
- `titulacióon` en lugar de `titulación` (carácter duplicado)
- `Apa` en lugar de `APA` (capitalización)
### 4.1.4 Justificación de la Selección de PaddleOCR
#### Criterios de Selección
Basándose en los resultados obtenidos y la documentación del benchmark:
1. **Rendimiento**: PaddleOCR obtuvo CER entre 1.54% y 6.40% en las páginas evaluadas
2. **Configurabilidad**: PaddleOCR ofrece múltiples hiperparámetros ajustables:
- Umbrales de detección (`text_det_thresh`, `text_det_box_thresh`)
- Umbral de reconocimiento (`text_rec_score_thresh`)
- Componentes opcionales (`use_textline_orientation`, `use_doc_orientation_classify`, `use_doc_unwarping`)
3. **Documentación oficial**: [PaddleOCR Documentation](https://www.paddleocr.ai/v3.0.0/en/version3.x/pipeline_usage/OCR.html)
#### Decisión
**Se selecciona PaddleOCR (PP-OCRv5)** para la fase de optimización debido a:
- Resultados iniciales prometedores (CER ~5%)
- Alta configurabilidad de hiperparámetros de inferencia
- Pipeline modular que permite experimentación
### 4.1.5 Limitaciones del Benchmark
1. **Tamaño reducido**: Solo 5 páginas evaluadas en el benchmark comparativo inicial
2. **Único tipo de documento**: Documentos académicos de UNIR únicamente
3. **Ground truth**: El texto de referencia se extrajo automáticamente del PDF, lo cual puede introducir errores en layouts complejos
### 4.1.6 Resumen de la Sección
Esta sección ha presentado:
1. La configuración del benchmark según `ocr_benchmark_notebook.ipynb`
2. Los resultados cuantitativos de PaddleOCR del archivo CSV de resultados
3. La justificación de la selección de PaddleOCR para optimización
**Fuentes de datos utilizadas:**
- `ocr_benchmark_notebook.ipynb`: Código del benchmark
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`: Resultados numéricos
- Documentación oficial de PaddleOCR
## 4.2 Desarrollo de la Comparativa: Optimización de Hiperparámetros
### 4.2.1 Introducción
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 el notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb` y los resultados se almacenaron en `src/raytune_paddle_subproc_results_20251207_192320.csv`.
### 4.2.2 Configuración del Experimento
#### Entorno de Ejecución
Según los outputs del notebook:
| Componente | Versión/Especificación |
|------------|------------------------|
| Python | 3.11.9 |
| PaddlePaddle | 3.2.2 |
| PaddleOCR | 3.3.2 |
| Ray | 2.52.1 |
| GPU | No disponible (CPU only) |
#### Dataset
Se utilizó un dataset estructurado en `src/dataset/` creado mediante el notebook `src/prepare_dataset.ipynb`:
- **Estructura**: Carpetas con subcarpetas `img/` y `txt/` pareadas
- **Páginas evaluadas por trial**: 5 (páginas 5-10 del documento)
- **Gestión de datos**: Clase `ImageTextDataset` en `src/dataset_manager.py`
#### Espacio de Búsqueda
Según el código del notebook, se definió el siguiente espacio de búsqueda:
```python
search_space = {
"use_doc_orientation_classify": tune.choice([True, False]),
"use_doc_unwarping": tune.choice([True, False]),
"textline_orientation": tune.choice([True, False]),
"text_det_thresh": tune.uniform(0.0, 0.7),
"text_det_box_thresh": tune.uniform(0.0, 0.7),
"text_det_unclip_ratio": tune.choice([0.0]), # Fijado
"text_rec_score_thresh": tune.uniform(0.0, 0.7),
}
```
**Descripción de parámetros** (según documentación de PaddleOCR):
| Parámetro | Descripción |
|-----------|-------------|
| `use_doc_orientation_classify` | Clasificación de orientación del documento |
| `use_doc_unwarping` | Corrección de deformación del documento |
| `textline_orientation` | Clasificación de orientación de línea de texto |
| `text_det_thresh` | Umbral de detección de píxeles de texto |
| `text_det_box_thresh` | Umbral de caja de detección |
| `text_det_unclip_ratio` | Coeficiente de expansión (fijado en 0.0) |
| `text_rec_score_thresh` | Umbral de confianza de reconocimiento |
#### Configuración de Ray Tune
```python
tuner = tune.Tuner(
trainable_paddle_ocr,
tune_config=tune.TuneConfig(
metric="CER",
mode="min",
search_alg=OptunaSearch(),
num_samples=64,
max_concurrent_trials=2
),
run_config=air.RunConfig(verbose=2, log_to_file=False),
param_space=search_space
)
```
- **Métrica objetivo**: CER (minimizar)
- **Algoritmo de búsqueda**: Optuna (TPE - Tree-structured Parzen Estimator)
- **Número de trials**: 64
- **Trials concurrentes**: 2
### 4.2.3 Resultados de la Optimización
#### Estadísticas Descriptivas
Del archivo CSV de resultados (`raytune_paddle_subproc_results_20251207_192320.csv`):
| 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%** | 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 |
#### Mejor Configuración Encontrada
Según el análisis del notebook:
```
Best CER: 0.011535 (1.15%)
Best WER: 0.098902 (9.89%)
Configuración óptima:
textline_orientation: True
use_doc_orientation_classify: False
use_doc_unwarping: False
text_det_thresh: 0.4690
text_det_box_thresh: 0.5412
text_det_unclip_ratio: 0.0
text_rec_score_thresh: 0.6350
```
#### Análisis de Correlación
Correlación de Pearson entre parámetros y métricas de error (del notebook):
**Correlación con CER:**
| Parámetro | Correlación |
|-----------|-------------|
| CER | 1.000 |
| config/text_det_box_thresh | 0.226 |
| config/text_rec_score_thresh | -0.161 |
| **config/text_det_thresh** | **-0.523** |
| config/text_det_unclip_ratio | NaN |
**Correlación con WER:**
| Parámetro | Correlación |
|-----------|-------------|
| WER | 1.000 |
| config/text_det_box_thresh | 0.227 |
| config/text_rec_score_thresh | -0.173 |
| **config/text_det_thresh** | **-0.521** |
| config/text_det_unclip_ratio | NaN |
**Hallazgo clave**: El parámetro `text_det_thresh` muestra la correlación más fuerte (-0.52), indicando que valores más altos de este umbral tienden a reducir el error.
#### Impacto del Parámetro textline_orientation
Según el análisis del notebook, este parámetro booleano tiene el mayor impacto:
| textline_orientation | CER Medio | WER Medio |
|---------------------|-----------|-----------|
| True | ~3.76% | ~12.73% |
| False | ~12.40% | ~21.71% |
**Interpretación del notebook**:
> "7x better CER with textline_orientation=True. And the variance is much tighter — more reliable results. For Spanish business documents with mixed layouts (tables, headers, addresses), orientation classification helps PaddleOCR correctly order text lines."
#### Análisis de Fallos
Los trials con CER muy alto (>40%) se produjeron cuando:
- `text_det_thresh` < 0.1 (valores muy bajos)
- `textline_orientation = False`
Ejemplo de trial con fallo catastrófico:
- CER: 51.61%
- WER: 59.45%
- Configuración: `text_det_thresh=0.017`, `textline_orientation=True`
### 4.2.4 Comparación Baseline vs Optimizado
#### Resultados sobre Dataset Completo (24 páginas)
Del análisis final del notebook ejecutando sobre las 24 páginas:
| Modelo | CER | WER |
|--------|-----|-----|
| PaddleOCR (Baseline) | 7.78% | 14.94% |
| PaddleOCR-HyperAdjust | 1.49% | 7.62% |
#### Métricas de Mejora
| Métrica | Baseline | Optimizado | Mejora Absoluta | Reducción Error |
|---------|----------|------------|-----------------|-----------------|
| CER | 7.78% | 1.49% | -6.29 pp | 80.9% |
| WER | 14.94% | 7.62% | -7.32 pp | 49.0% |
#### 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%."
**Impacto práctico**: En un documento de 10,000 caracteres:
- Baseline: ~778 caracteres con error
- Optimizado: ~149 caracteres con error
- Diferencia: ~629 caracteres menos con errores
### 4.2.5 Tiempo de Ejecución
| Métrica | Valor |
|---------|-------|
| Tiempo total del experimento | ~6 horas (64 trials × ~6 min/trial) |
| Tiempo medio por trial | 367.72 segundos |
| Tiempo medio por página | 69.42 segundos |
| Total páginas procesadas | 64 trials × 5 páginas = 320 evaluaciones |
### 4.2.6 Resumen de la Sección
Esta sección ha presentado:
1. **Configuración del experimento**: 64 trials con Ray Tune + Optuna sobre 7 hiperparámetros
2. **Resultados estadísticos**: CER medio 5.25%, CER mínimo 1.15%
3. **Hallazgos clave**:
- `textline_orientation=True` es crítico (reduce CER ~70%)
- `text_det_thresh` tiene correlación -0.52 con CER
- Valores bajos de `text_det_thresh` (<0.1) causan fallos catastróficos
4. **Mejora final**: CER reducido de 7.78% a 1.49% (reducción del 80.9%)
**Fuentes de datos:**
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`: Código del experimento
- `src/raytune_paddle_subproc_results_20251207_192320.csv`: Resultados de 64 trials
- `src/paddle_ocr_tuning.py`: Script de evaluación
## 4.3 Discusión y Análisis de Resultados
### 4.3.1 Introducción
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 y se evalúa el cumplimiento de los objetivos planteados.
### 4.3.2 Resumen de Resultados
#### Resultados del Benchmark Comparativo
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, PaddleOCR con configuración inicial (`use_textline_orientation=True`) obtuvo los siguientes resultados en las páginas 5-9:
| Página | WER | CER |
|--------|-----|-----|
| 5 | 12.16% | 6.33% |
| 6 | 12.81% | 6.40% |
| 7 | 11.06% | 6.24% |
| 8 | 8.13% | 1.54% |
| 9 | 10.61% | 5.58% |
| **Promedio** | **10.95%** | **5.22%** |
#### Resultados de la Optimización con Ray Tune
Del archivo `src/raytune_paddle_subproc_results_20251207_192320.csv` (64 trials):
| Métrica | Valor |
|---------|-------|
| CER mínimo | 1.15% |
| CER medio | 5.25% |
| CER máximo | 51.61% |
| WER mínimo | 9.89% |
| WER medio | 14.28% |
| WER máximo | 59.45% |
#### Comparación Final (Dataset Completo - 24 páginas)
Resultados del notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb`:
| 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% |
### 4.3.3 Análisis de Resultados
#### Mejora Obtenida
| Forma de Medición | Valor |
|-------------------|-------|
| Mejora en precisión de caracteres (absoluta) | +6.29 puntos porcentuales |
| Reducción del CER (relativa) | 80.9% |
| Mejora en precisión de palabras (absoluta) | +7.32 puntos porcentuales |
| Reducción del WER (relativa) | 49.0% |
| Precisión final de caracteres | 98.51% |
#### Impacto de Hiperparámetros Individuales
**Parámetro `textline_orientation`**
Este parámetro booleano demostró ser el más influyente:
| Valor | CER Medio | Impacto |
|-------|-----------|---------|
| True | ~3.76% | Rendimiento óptimo |
| False | ~12.40% | 3.3x peor |
**Reducción del CER**: 69.7% cuando se habilita la clasificación de orientación de línea.
**Parámetro `text_det_thresh`**
Correlación con CER: **-0.523** (la más fuerte de los parámetros continuos)
| Rango | Comportamiento |
|-------|----------------|
| < 0.1 | Fallos catastróficos (CER 40-50%) |
| 0.3 - 0.6 | Rendimiento óptimo |
| Valor óptimo | 0.4690 |
**Parámetros con menor impacto**
| Parámetro | Correlación con CER | Valor óptimo |
|-----------|---------------------|--------------|
| text_det_box_thresh | +0.226 | 0.5412 |
| text_rec_score_thresh | -0.161 | 0.6350 |
| use_doc_orientation_classify | - | False |
| use_doc_unwarping | - | False |
#### Configuración Óptima Final
```python
config_optimizada = {
"textline_orientation": True, # CRÍTICO
"use_doc_orientation_classify": False,
"use_doc_unwarping": False,
"text_det_thresh": 0.4690, # Correlación -0.52
"text_det_box_thresh": 0.5412,
"text_det_unclip_ratio": 0.0,
"text_rec_score_thresh": 0.6350,
}
```
### 4.3.4 Discusión
#### Hallazgos Principales
1. **Importancia de la clasificación de orientación de línea**: El parámetro `textline_orientation=True` es el factor más determinante. Esto tiene sentido para documentos con layouts mixtos (tablas, encabezados, direcciones) donde el orden correcto de las líneas de texto es crucial.
2. **Umbral de detección crítico**: El parámetro `text_det_thresh` presenta un umbral mínimo efectivo (~0.1). Valores inferiores generan demasiados falsos positivos en la detección, corrompiendo el reconocimiento posterior.
3. **Componentes opcionales innecesarios**: Para documentos académicos digitales (no escaneados), los módulos de corrección de orientación de documento (`use_doc_orientation_classify`) y corrección de deformación (`use_doc_unwarping`) no aportan mejora e incluso pueden introducir overhead.
#### Interpretación de la Correlación Negativa
La correlación negativa de `text_det_thresh` (-0.52) con el CER indica que:
- Umbrales más altos filtran detecciones de baja confianza
- Esto reduce falsos positivos que generan texto erróneo
- El reconocimiento es más preciso con menos regiones pero más confiables
#### Limitaciones de los Resultados
1. **Generalización**: Los resultados se obtuvieron sobre documentos de un único tipo (instrucciones académicas UNIR). La configuración óptima puede variar para otros tipos de documentos.
2. **Ground truth automático**: El texto de referencia se extrajo programáticamente del PDF. En layouts complejos, esto puede introducir errores en la evaluación.
3. **Ejecución en CPU**: Los tiempos reportados (~69s/página) corresponden a ejecución en CPU. Con GPU, los tiempos serían significativamente menores.
4. **Parámetro fijo**: `text_det_unclip_ratio` permaneció fijo en 0.0 durante todo el experimento por decisión de diseño.
#### Comparación con Objetivos
| Objetivo | Meta | Resultado | Cumplimiento |
|----------|------|-----------|--------------|
| OE1: Comparar soluciones OCR | Evaluar EasyOCR, PaddleOCR, DocTR | PaddleOCR seleccionado | ✓ |
| OE2: Preparar dataset | Construir dataset estructurado | Dataset de 24 páginas | ✓ |
| OE3: Identificar hiperparámetros críticos | Analizar correlaciones | `textline_orientation` y `text_det_thresh` identificados | ✓ |
| OE4: Optimizar con Ray Tune | Mínimo 50 configuraciones | 64 trials ejecutados | ✓ |
| OE5: Validar configuración | Documentar mejora | CER 7.78% → 1.49% | ✓ |
| **Objetivo General** | CER < 2% | CER = 1.49% | ✓ |
### 4.3.5 Implicaciones Prácticas
#### Recomendaciones de Configuración
Para documentos académicos en español similares a los evaluados:
1. **Obligatorio**: `use_textline_orientation=True`
2. **Recomendado**: `text_det_thresh` entre 0.4 y 0.5
3. **Opcional**: `text_det_box_thresh` ~0.5, `text_rec_score_thresh` >0.6
4. **No recomendado**: Habilitar `use_doc_orientation_classify` o `use_doc_unwarping` para documentos digitales
#### Impacto Cuantitativo
En un documento típico de 10,000 caracteres:
| Configuración | Errores estimados |
|---------------|-------------------|
| Baseline | ~778 caracteres |
| Optimizada | ~149 caracteres |
| **Reducción** | **629 caracteres menos con errores** |
#### Aplicabilidad
Esta metodología de optimización es aplicable cuando:
- No se dispone de recursos GPU para fine-tuning
- El modelo preentrenado ya tiene soporte para el idioma objetivo
- Se busca mejorar rendimiento sin reentrenar
### 4.3.6 Resumen de la Sección
Esta sección ha presentado:
1. Los resultados consolidados del benchmark y la optimización
2. El análisis del impacto de cada hiperparámetro
3. La configuración óptima identificada
4. La discusión de limitaciones y aplicabilidad
5. El cumplimiento de los objetivos planteados
**Resultado principal**: Se logró reducir el CER del 7.78% al 1.49% (mejora del 80.9%) mediante optimización de hiperparámetros, cumpliendo el objetivo de alcanzar CER < 2%.
**Fuentes de datos:**
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`
- `src/raytune_paddle_subproc_results_20251207_192320.csv`
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`

View File

@@ -1,8 +1,8 @@
# Capítulo 7: Conclusiones y Trabajo Futuro
# Capítulo 5: Conclusiones y Trabajo Futuro
## 7.1 Conclusiones
## 5.1 Conclusiones
### 7.1.1 Conclusiones Generales
### 5.1.1 Conclusiones Generales
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.
@@ -12,7 +12,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|---------|----------|-----------|
| CER | < 2% | **1.49%** |
### 7.1.2 Conclusiones Específicas
### 5.1.2 Conclusiones Específicas
**Respecto a OE1 (Comparativa de soluciones OCR)**:
- Se evaluaron tres soluciones OCR de código abierto: EasyOCR, PaddleOCR (PP-OCRv5) y DocTR
@@ -39,7 +39,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
- La mejora obtenida fue del 80.9% en reducción del CER (7.78% → 1.49%)
- La precisión de caracteres alcanzó el 98.51%
### 7.1.3 Hallazgos Clave
### 5.1.3 Hallazgos Clave
1. **Arquitectura sobre umbrales**: Un único parámetro booleano (`textline_orientation`) tiene más impacto que todos los umbrales continuos combinados.
@@ -49,7 +49,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
4. **Optimización sin fine-tuning**: Se puede mejorar significativamente el rendimiento de modelos preentrenados mediante ajuste de hiperparámetros de inferencia.
## 7.2 Contribuciones del Trabajo
### 5.1.4 Contribuciones del Trabajo
1. **Metodología reproducible**: Se documenta un proceso completo de optimización de hiperparámetros OCR con Ray Tune + Optuna.
@@ -59,7 +59,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
4. **Código fuente**: Todo el código está disponible en el repositorio GitHub para reproducción y extensión.
## 7.3 Limitaciones del Trabajo
### 5.1.5 Limitaciones del Trabajo
1. **Tipo de documento único**: Los experimentos se realizaron únicamente sobre documentos académicos de UNIR. La generalización a otros tipos de documentos requiere validación adicional.
@@ -71,9 +71,9 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
5. **Parámetro no explorado**: `text_det_unclip_ratio` permaneció fijo en 0.0 durante todo el experimento.
## 7.4 Trabajo Futuro
## 5.2 Líneas de Trabajo Futuro
### 7.4.1 Extensiones Inmediatas
### 5.2.1 Extensiones Inmediatas
1. **Validación cruzada**: Evaluar la configuración óptima en otros tipos de documentos en español (facturas, formularios, textos manuscritos).
@@ -83,7 +83,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
4. **Evaluación con GPU**: Medir tiempos de inferencia con aceleración GPU.
### 7.4.2 Líneas de Investigación
### 5.2.2 Líneas de Investigación
1. **Transfer learning de hiperparámetros**: Investigar si las configuraciones óptimas para un tipo de documento transfieren a otros dominios.
@@ -93,7 +93,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
4. **Comparación con fine-tuning**: Cuantificar la brecha de rendimiento entre optimización de hiperparámetros y fine-tuning real.
### 7.4.3 Aplicaciones Prácticas
### 5.2.3 Aplicaciones Prácticas
1. **Herramienta de configuración automática**: Desarrollar una herramienta que determine automáticamente la configuración óptima para un nuevo tipo de documento.
@@ -101,7 +101,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
3. **Benchmark público**: Publicar un benchmark de OCR para documentos en español que facilite la comparación de soluciones.
## 7.5 Reflexión Final
### 5.2.4 Reflexión Final
Este trabajo demuestra que, en un contexto de recursos limitados donde el fine-tuning de modelos de deep learning no es viable, la optimización de hiperparámetros representa una alternativa práctica y efectiva para mejorar sistemas OCR.
@@ -109,18 +109,3 @@ La metodología propuesta es reproducible, los resultados son cuantificables, y
El código fuente y los datos experimentales están disponibles públicamente para facilitar la reproducción y extensión de este trabajo.
---
## Referencias
**Herramientas y bibliotecas utilizadas:**
- PaddleOCR: https://github.com/PaddlePaddle/PaddleOCR
- Ray Tune: https://docs.ray.io/en/latest/tune/index.html
- Optuna: https://optuna.org/
- PyMuPDF: https://pymupdf.readthedocs.io/
- jiwer: https://github.com/jitsi/jiwer
**Repositorio del proyecto:**
- GitHub: https://seryus.ddns.net/unir/MastersThesis

View File

@@ -1,212 +0,0 @@
# Capítulo 5: Optimización de Hiperparámetros
## 5.1 Introducción
Este capítulo 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 el notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb` y los resultados se almacenaron en `src/raytune_paddle_subproc_results_20251207_192320.csv`.
## 5.2 Configuración del Experimento
### 5.2.1 Entorno de Ejecución
Según los outputs del notebook:
| Componente | Versión/Especificación |
|------------|------------------------|
| Python | 3.11.9 |
| PaddlePaddle | 3.2.2 |
| PaddleOCR | 3.3.2 |
| Ray | 2.52.1 |
| GPU | No disponible (CPU only) |
### 5.2.2 Dataset
Se utilizó un dataset estructurado en `src/dataset/` creado mediante el notebook `src/prepare_dataset.ipynb`:
- **Estructura**: Carpetas con subcarpetas `img/` y `txt/` pareadas
- **Páginas evaluadas por trial**: 5 (páginas 5-10 del documento)
- **Gestión de datos**: Clase `ImageTextDataset` en `src/dataset_manager.py`
### 5.2.3 Espacio de Búsqueda
Según el código del notebook, se definió el siguiente espacio de búsqueda:
```python
search_space = {
"use_doc_orientation_classify": tune.choice([True, False]),
"use_doc_unwarping": tune.choice([True, False]),
"textline_orientation": tune.choice([True, False]),
"text_det_thresh": tune.uniform(0.0, 0.7),
"text_det_box_thresh": tune.uniform(0.0, 0.7),
"text_det_unclip_ratio": tune.choice([0.0]), # Fijado
"text_rec_score_thresh": tune.uniform(0.0, 0.7),
}
```
**Descripción de parámetros** (según documentación de PaddleOCR):
| Parámetro | Descripción |
|-----------|-------------|
| `use_doc_orientation_classify` | Clasificación de orientación del documento |
| `use_doc_unwarping` | Corrección de deformación del documento |
| `textline_orientation` | Clasificación de orientación de línea de texto |
| `text_det_thresh` | Umbral de detección de píxeles de texto |
| `text_det_box_thresh` | Umbral de caja de detección |
| `text_det_unclip_ratio` | Coeficiente de expansión (fijado en 0.0) |
| `text_rec_score_thresh` | Umbral de confianza de reconocimiento |
### 5.2.4 Configuración de Ray Tune
```python
tuner = tune.Tuner(
trainable_paddle_ocr,
tune_config=tune.TuneConfig(
metric="CER",
mode="min",
search_alg=OptunaSearch(),
num_samples=64,
max_concurrent_trials=2
),
run_config=air.RunConfig(verbose=2, log_to_file=False),
param_space=search_space
)
```
- **Métrica objetivo**: CER (minimizar)
- **Algoritmo de búsqueda**: Optuna (TPE - Tree-structured Parzen Estimator)
- **Número de trials**: 64
- **Trials concurrentes**: 2
## 5.3 Resultados de la Optimización
### 5.3.1 Estadísticas Descriptivas
Del archivo CSV de resultados (`raytune_paddle_subproc_results_20251207_192320.csv`):
| 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%** | 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 |
### 5.3.2 Mejor Configuración Encontrada
Según el análisis del notebook:
```
Best CER: 0.011535 (1.15%)
Best WER: 0.098902 (9.89%)
Configuración óptima:
textline_orientation: True
use_doc_orientation_classify: False
use_doc_unwarping: False
text_det_thresh: 0.4690
text_det_box_thresh: 0.5412
text_det_unclip_ratio: 0.0
text_rec_score_thresh: 0.6350
```
### 5.3.3 Análisis de Correlación
Correlación de Pearson entre parámetros y métricas de error (del notebook):
**Correlación con CER:**
| Parámetro | Correlación |
|-----------|-------------|
| CER | 1.000 |
| config/text_det_box_thresh | 0.226 |
| config/text_rec_score_thresh | -0.161 |
| **config/text_det_thresh** | **-0.523** |
| config/text_det_unclip_ratio | NaN |
**Correlación con WER:**
| Parámetro | Correlación |
|-----------|-------------|
| WER | 1.000 |
| config/text_det_box_thresh | 0.227 |
| config/text_rec_score_thresh | -0.173 |
| **config/text_det_thresh** | **-0.521** |
| config/text_det_unclip_ratio | NaN |
**Hallazgo clave**: El parámetro `text_det_thresh` muestra la correlación más fuerte (-0.52), indicando que valores más altos de este umbral tienden a reducir el error.
### 5.3.4 Impacto del Parámetro textline_orientation
Según el análisis del notebook, este parámetro booleano tiene el mayor impacto:
| textline_orientation | CER Medio | WER Medio |
|---------------------|-----------|-----------|
| True | ~3.76% | ~12.73% |
| False | ~12.40% | ~21.71% |
**Interpretación del notebook**:
> "7x better CER with textline_orientation=True. And the variance is much tighter — more reliable results. For Spanish business documents with mixed layouts (tables, headers, addresses), orientation classification helps PaddleOCR correctly order text lines."
### 5.3.5 Análisis de Fallos
Los trials con CER muy alto (>40%) se produjeron cuando:
- `text_det_thresh` < 0.1 (valores muy bajos)
- `textline_orientation = False`
Ejemplo de trial con fallo catastrófico:
- CER: 51.61%
- WER: 59.45%
- Configuración: `text_det_thresh=0.017`, `textline_orientation=True`
## 5.4 Comparación Baseline vs Optimizado
### 5.4.1 Resultados sobre Dataset Completo (24 páginas)
Del análisis final del notebook ejecutando sobre las 24 páginas:
| Modelo | CER | WER |
|--------|-----|-----|
| PaddleOCR (Baseline) | 7.78% | 14.94% |
| PaddleOCR-HyperAdjust | 1.49% | 7.62% |
### 5.4.2 Métricas de Mejora
| Métrica | Baseline | Optimizado | Mejora Absoluta | Reducción Error |
|---------|----------|------------|-----------------|-----------------|
| CER | 7.78% | 1.49% | -6.29 pp | 80.9% |
| WER | 14.94% | 7.62% | -7.32 pp | 49.0% |
### 5.4.3 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%."
**Impacto práctico**: En un documento de 10,000 caracteres:
- Baseline: ~778 caracteres con error
- Optimizado: ~149 caracteres con error
- Diferencia: ~629 caracteres menos con errores
## 5.5 Tiempo de Ejecución
| Métrica | Valor |
|---------|-------|
| Tiempo total del experimento | ~6 horas (64 trials × ~6 min/trial) |
| Tiempo medio por trial | 367.72 segundos |
| Tiempo medio por página | 69.42 segundos |
| Total páginas procesadas | 64 trials × 5 páginas = 320 evaluaciones |
## 5.6 Resumen del Capítulo
Este capítulo ha presentado:
1. **Configuración del experimento**: 64 trials con Ray Tune + Optuna sobre 7 hiperparámetros
2. **Resultados estadísticos**: CER medio 5.25%, CER mínimo 1.15%
3. **Hallazgos clave**:
- `textline_orientation=True` es crítico (reduce CER ~70%)
- `text_det_thresh` tiene correlación -0.52 con CER
- Valores bajos de `text_det_thresh` (<0.1) causan fallos catastróficos
4. **Mejora final**: CER reducido de 7.78% a 1.49% (reducción del 80.9%)
**Fuentes de datos:**
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`: Código del experimento
- `src/raytune_paddle_subproc_results_20251207_192320.csv`: Resultados de 64 trials
- `src/paddle_ocr_tuning.py`: Script de evaluación

View File

@@ -0,0 +1,67 @@
# Referencias Bibliográficas
## Referencias
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
Bergstra, J., Bardenet, R., Bengio, Y., & Kégl, B. (2011). Algorithms for hyper-parameter optimization. *Advances in Neural Information Processing Systems*, 24, 2546-2554. https://papers.nips.cc/paper/2011/hash/86e8f7ab32cfd12577bc2619bc635690-Abstract.html
Cohen, J. (1988). *Statistical power analysis for the behavioral sciences* (2nd ed.). Lawrence Erlbaum Associates.
Doran, G. T. (1981). There's a S.M.A.R.T. way to write management's goals and objectives. *Management Review*, 70(11), 35-36.
Du, Y., Li, C., Guo, R., Yin, X., Liu, W., Zhou, J., Bai, Y., Yu, Z., Yang, Y., Dang, Q., & Wang, H. (2020). PP-OCR: A practical ultra lightweight OCR system. *arXiv preprint arXiv:2009.09941*. https://arxiv.org/abs/2009.09941
Du, Y., Li, C., Guo, R., Cui, C., Liu, W., Zhou, J., Lu, B., Yang, Y., Liu, Q., Hu, X., Yu, D., & Wang, H. (2023). PP-OCRv4: Mobile scene text detection and recognition. *arXiv preprint arXiv:2310.05930*. https://arxiv.org/abs/2310.05930
Feurer, M., & Hutter, F. (2019). Hyperparameter optimization. In F. Hutter, L. Kotthoff, & J. Vanschoren (Eds.), *Automated machine learning: Methods, systems, challenges* (pp. 3-33). Springer. https://doi.org/10.1007/978-3-030-05318-5_1
He, P., Huang, W., Qiao, Y., Loy, C. C., & Tang, X. (2016). Reading scene text in deep convolutional sequences. *Proceedings of the AAAI Conference on Artificial Intelligence*, 30(1), 3501-3508. https://doi.org/10.1609/aaai.v30i1.10291
JaidedAI. (2020). EasyOCR: Ready-to-use OCR with 80+ supported languages. GitHub. https://github.com/JaidedAI/EasyOCR
Liang, J., Doermann, D., & Li, H. (2005). Camera-based analysis of text and documents: A survey. *International Journal of Document Analysis and Recognition*, 7(2), 84-104. https://doi.org/10.1007/s10032-004-0138-z
Liao, M., Wan, Z., Yao, C., Chen, K., & Bai, X. (2020). Real-time scene text detection with differentiable binarization. *Proceedings of the AAAI Conference on Artificial Intelligence*, 34(07), 11474-11481. https://doi.org/10.1609/aaai.v34i07.6812
Liaw, R., Liang, E., Nishihara, R., Moritz, P., Gonzalez, J. E., & Stoica, I. (2018). Tune: A research platform for distributed model selection and training. *arXiv preprint arXiv:1807.05118*. https://arxiv.org/abs/1807.05118
Mindee. (2021). DocTR: Document Text Recognition. GitHub. https://github.com/mindee/doctr
Moritz, P., Nishihara, R., Wang, S., Tumanov, A., Liaw, R., Liang, E., Elibol, M., Yang, Z., Paul, W., Jordan, M. I., & Stoica, I. (2018). Ray: A distributed framework for emerging AI applications. *13th USENIX Symposium on Operating Systems Design and Implementation (OSDI 18)*, 561-577. https://www.usenix.org/conference/osdi18/presentation/moritz
Morris, A. C., Maier, V., & Green, P. D. (2004). From WER and RIL to MER and WIL: Improved evaluation measures for connected speech recognition. *Eighth International Conference on Spoken Language Processing*. https://doi.org/10.21437/Interspeech.2004-668
PaddlePaddle. (2024). PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle. GitHub. https://github.com/PaddlePaddle/PaddleOCR
Pearson, K. (1895). Notes on regression and inheritance in the case of two parents. *Proceedings of the Royal Society of London*, 58, 240-242. https://doi.org/10.1098/rspl.1895.0041
PyMuPDF. (2024). PyMuPDF documentation. https://pymupdf.readthedocs.io/
Shi, B., Bai, X., & Yao, C. (2016). An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition. *IEEE Transactions on Pattern Analysis and Machine Intelligence*, 39(11), 2298-2304. https://doi.org/10.1109/TPAMI.2016.2646371
Smith, R. (2007). An overview of the Tesseract OCR engine. *Ninth International Conference on Document Analysis and Recognition (ICDAR 2007)*, 2, 629-633. https://doi.org/10.1109/ICDAR.2007.4376991
Zhou, X., Yao, C., Wen, H., Wang, Y., Zhou, S., He, W., & Liang, J. (2017). EAST: An efficient and accurate scene text detector. *Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition*, 5551-5560. https://doi.org/10.1109/CVPR.2017.283
Zoph, B., & Le, Q. V. (2017). Neural architecture search with reinforcement learning. *International Conference on Learning Representations (ICLR)*. https://arxiv.org/abs/1611.01578
---
## Herramientas y Bibliotecas Utilizadas
- **PaddleOCR**: https://github.com/PaddlePaddle/PaddleOCR
- **Ray Tune**: https://docs.ray.io/en/latest/tune/index.html
- **Optuna**: https://optuna.org/
- **PyMuPDF**: https://pymupdf.readthedocs.io/
- **jiwer**: https://github.com/jitsi/jiwer
---
## Repositorio del Proyecto
- **GitHub**: https://seryus.ddns.net/unir/MastersThesis

View File

@@ -1,183 +0,0 @@
# Capítulo 6: Resultados y Discusión
## 6.1 Introducción
Este capítulo 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 y se evalúa el cumplimiento de los objetivos planteados.
## 6.2 Resumen de Resultados
### 6.2.1 Resultados del Benchmark Comparativo
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, PaddleOCR con configuración inicial (`use_textline_orientation=True`) obtuvo los siguientes resultados en las páginas 5-9:
| Página | WER | CER |
|--------|-----|-----|
| 5 | 12.16% | 6.33% |
| 6 | 12.81% | 6.40% |
| 7 | 11.06% | 6.24% |
| 8 | 8.13% | 1.54% |
| 9 | 10.61% | 5.58% |
| **Promedio** | **10.95%** | **5.22%** |
### 6.2.2 Resultados de la Optimización con Ray Tune
Del archivo `src/raytune_paddle_subproc_results_20251207_192320.csv` (64 trials):
| Métrica | Valor |
|---------|-------|
| CER mínimo | 1.15% |
| CER medio | 5.25% |
| CER máximo | 51.61% |
| WER mínimo | 9.89% |
| WER medio | 14.28% |
| WER máximo | 59.45% |
### 6.2.3 Comparación Final (Dataset Completo - 24 páginas)
Resultados del notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb`:
| 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% |
## 6.3 Análisis de Resultados
### 6.3.1 Mejora Obtenida
| Forma de Medición | Valor |
|-------------------|-------|
| Mejora en precisión de caracteres (absoluta) | +6.29 puntos porcentuales |
| Reducción del CER (relativa) | 80.9% |
| Mejora en precisión de palabras (absoluta) | +7.32 puntos porcentuales |
| Reducción del WER (relativa) | 49.0% |
| Precisión final de caracteres | 98.51% |
### 6.3.2 Impacto de Hiperparámetros Individuales
#### Parámetro `textline_orientation`
Este parámetro booleano demostró ser el más influyente:
| Valor | CER Medio | Impacto |
|-------|-----------|---------|
| True | ~3.76% | Rendimiento óptimo |
| False | ~12.40% | 3.3x peor |
**Reducción del CER**: 69.7% cuando se habilita la clasificación de orientación de línea.
#### Parámetro `text_det_thresh`
Correlación con CER: **-0.523** (la más fuerte de los parámetros continuos)
| Rango | Comportamiento |
|-------|----------------|
| < 0.1 | Fallos catastróficos (CER 40-50%) |
| 0.3 - 0.6 | Rendimiento óptimo |
| Valor óptimo | 0.4690 |
#### Parámetros con menor impacto
| Parámetro | Correlación con CER | Valor óptimo |
|-----------|---------------------|--------------|
| text_det_box_thresh | +0.226 | 0.5412 |
| text_rec_score_thresh | -0.161 | 0.6350 |
| use_doc_orientation_classify | - | False |
| use_doc_unwarping | - | False |
### 6.3.3 Configuración Óptima Final
```python
config_optimizada = {
"textline_orientation": True, # CRÍTICO
"use_doc_orientation_classify": False,
"use_doc_unwarping": False,
"text_det_thresh": 0.4690, # Correlación -0.52
"text_det_box_thresh": 0.5412,
"text_det_unclip_ratio": 0.0,
"text_rec_score_thresh": 0.6350,
}
```
## 6.4 Discusión
### 6.4.1 Hallazgos Principales
1. **Importancia de la clasificación de orientación de línea**: El parámetro `textline_orientation=True` es el factor más determinante. Esto tiene sentido para documentos con layouts mixtos (tablas, encabezados, direcciones) donde el orden correcto de las líneas de texto es crucial.
2. **Umbral de detección crítico**: El parámetro `text_det_thresh` presenta un umbral mínimo efectivo (~0.1). Valores inferiores generan demasiados falsos positivos en la detección, corrompiendo el reconocimiento posterior.
3. **Componentes opcionales innecesarios**: Para documentos académicos digitales (no escaneados), los módulos de corrección de orientación de documento (`use_doc_orientation_classify`) y corrección de deformación (`use_doc_unwarping`) no aportan mejora e incluso pueden introducir overhead.
### 6.4.2 Interpretación de la Correlación Negativa
La correlación negativa de `text_det_thresh` (-0.52) con el CER indica que:
- Umbrales más altos filtran detecciones de baja confianza
- Esto reduce falsos positivos que generan texto erróneo
- El reconocimiento es más preciso con menos regiones pero más confiables
### 6.4.3 Limitaciones de los Resultados
1. **Generalización**: Los resultados se obtuvieron sobre documentos de un único tipo (instrucciones académicas UNIR). La configuración óptima puede variar para otros tipos de documentos.
2. **Ground truth automático**: El texto de referencia se extrajo programáticamente del PDF. En layouts complejos, esto puede introducir errores en la evaluación.
3. **Ejecución en CPU**: Los tiempos reportados (~69s/página) corresponden a ejecución en CPU. Con GPU, los tiempos serían significativamente menores.
4. **Parámetro fijo**: `text_det_unclip_ratio` permaneció fijo en 0.0 durante todo el experimento por decisión de diseño.
### 6.4.4 Comparación con Objetivos
| Objetivo | Meta | Resultado | Cumplimiento |
|----------|------|-----------|--------------|
| OE1: Comparar soluciones OCR | Evaluar EasyOCR, PaddleOCR, DocTR | PaddleOCR seleccionado | ✓ |
| OE2: Preparar dataset | Construir dataset estructurado | Dataset de 24 páginas | ✓ |
| OE3: Identificar hiperparámetros críticos | Analizar correlaciones | `textline_orientation` y `text_det_thresh` identificados | ✓ |
| OE4: Optimizar con Ray Tune | Mínimo 50 configuraciones | 64 trials ejecutados | ✓ |
| OE5: Validar configuración | Documentar mejora | CER 7.78% → 1.49% | ✓ |
| **Objetivo General** | CER < 2% | CER = 1.49% | ✓ |
## 6.5 Implicaciones Prácticas
### 6.5.1 Recomendaciones de Configuración
Para documentos académicos en español similares a los evaluados:
1. **Obligatorio**: `use_textline_orientation=True`
2. **Recomendado**: `text_det_thresh` entre 0.4 y 0.5
3. **Opcional**: `text_det_box_thresh` ~0.5, `text_rec_score_thresh` >0.6
4. **No recomendado**: Habilitar `use_doc_orientation_classify` o `use_doc_unwarping` para documentos digitales
### 6.5.2 Impacto Cuantitativo
En un documento típico de 10,000 caracteres:
| Configuración | Errores estimados |
|---------------|-------------------|
| Baseline | ~778 caracteres |
| Optimizada | ~149 caracteres |
| **Reducción** | **629 caracteres menos con errores** |
### 6.5.3 Aplicabilidad
Esta metodología de optimización es aplicable cuando:
- No se dispone de recursos GPU para fine-tuning
- El modelo preentrenado ya tiene soporte para el idioma objetivo
- Se busca mejorar rendimiento sin reentrenar
## 6.6 Resumen del Capítulo
Este capítulo ha presentado:
1. Los resultados consolidados del benchmark y la optimización
2. El análisis del impacto de cada hiperparámetro
3. La configuración óptima identificada
4. La discusión de limitaciones y aplicabilidad
5. El cumplimiento de los objetivos planteados
**Resultado principal**: Se logró reducir el CER del 7.78% al 1.49% (mejora del 80.9%) mediante optimización de hiperparámetros, cumpliendo el objetivo de alcanzar CER < 2%.
**Fuentes de datos:**
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`
- `src/raytune_paddle_subproc_results_20251207_192320.csv`
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`