7.4 KiB
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/ytxt/pareadas - Páginas evaluadas por trial: 5 (páginas 5-10 del documento)
- Gestión de datos: Clase
ImageTextDatasetensrc/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:
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
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:
- Configuración del experimento: 64 trials con Ray Tune + Optuna sobre 7 hiperparámetros
- Resultados estadísticos: CER medio 5.25%, CER mínimo 1.15%
- Hallazgos clave:
textline_orientation=Truees crítico (reduce CER ~70%)text_det_threshtiene correlación -0.52 con CER- Valores bajos de
text_det_thresh(<0.1) causan fallos catastróficos
- 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 experimentosrc/raytune_paddle_subproc_results_20251207_192320.csv: Resultados de 64 trialssrc/paddle_ocr_tuning.py: Script de evaluación