Files
MastersThesis/docs/metrics/metrics.md
Sergio Jimenez Jimenez ba36b809e6
Some checks failed
build_docker / essential (pull_request) Successful in 1s
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
build_docker / build_cpu (pull_request) Has been cancelled
docs
2026-01-19 18:30:58 +01:00

243 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Métricas de Rendimiento OCR
**Fecha de Benchmark:** 2026-01-19
**Dataset de Prueba:** 45 páginas (2 PDFs)
## Especificaciones del Sistema
| Componente | Especificación |
|------------|----------------|
| **Sistema Operativo** | Ubuntu 24.04.3 LTS (Noble) |
| **Kernel** | 6.14.0-37-generic |
| **CPU** | AMD Ryzen 7 5800H with Radeon Graphics |
| **RAM** | 16 GB DDR4 |
| **GPU** | NVIDIA GeForce RTX 3060 Laptop GPU |
| **VRAM** | 5.66 GB |
| **CUDA** | 12.4 |
## Justificación de Ejecución Local vs Cloud
### Costos de Cloud GPU
| Plataforma | GPU | Costo/Hora | Costo Mensual |
|------------|-----|------------|---------------|
| **AWS EC2 g4dn.xlarge** | NVIDIA T4 (16 GB) | $0.526 | ~$384 |
| **Google Colab Pro** | T4/P100 | ~$1.30 | $10 + CU extras |
| **Google Colab Pro+** | T4/V100/A100 | ~$1.30 | $50 + CU extras |
### Análisis de Costos para Este Proyecto
| Tarea | Tiempo GPU | Costo AWS | Costo Colab Pro |
|-------|------------|-----------|-----------------|
| Ajuste hiperparámetros (64×3 trials) | ~3 horas | ~$1.58 | ~$3.90 |
| Evaluación completa (45 páginas) | ~5 min | ~$0.04 | ~$0.11 |
| Desarrollo/debug (20 horas/mes) | 20 horas | ~$10.52 | ~$26.00 |
### Ventajas de Ejecución Local
1. **Costo cero de GPU**: La RTX 3060 ya está disponible en el equipo de desarrollo
2. **Sin límites de tiempo**: AWS y Colab tienen timeouts de sesión
3. **Acceso instantáneo**: Sin tiempo de aprovisionamiento de instancias
4. **Almacenamiento local**: Dataset y resultados en disco sin costos de transferencia
5. **Iteración rápida**: Reinicio inmediato de contenedores Docker
### Conclusión
Para un proyecto de investigación con múltiples iteraciones de ajuste de hiperparámetros y desarrollo, **la ejecución local ahorra ~$50-100/mes** comparado con cloud, además de ofrecer mayor flexibilidad y velocidad de iteración
## Resumen Ejecutivo
| Servicio | CER | WER | Tiempo/Página | Tiempo Total | VRAM |
|----------|-----|-----|---------------|--------------|------|
| **PaddleOCR (Mobile)** | **7.76%** | **11.62%** | 0.58s | 32.0s | 0.06 GB |
| EasyOCR | 11.23% | 36.36% | 1.88s | 88.5s | ~2 GB |
| DocTR | 12.06% | 42.01% | 0.50s | 28.4s | ~1 GB |
> **Ganador:** PaddleOCR (Mobile) - Mejor precisión (7.76% CER) con velocidad competitiva.
## Fases Experimentales
Este documento presenta resultados de dos fases experimentales distintas realizadas durante el desarrollo del TFM. La primera fase corresponde a la optimización de hiperparámetros utilizando Ray Tune, ejecutada en CPU debido a las limitaciones de hardware iniciales. La segunda fase corresponde a la validación práctica con aceleración GPU para evaluar la viabilidad en escenarios de producción.
**Tabla.** *Fases experimentales y sus características.*
| Fase | Dataset | Hardware | Resultado Principal |
|------|---------|----------|---------------------|
| Optimización (CPU) | 24 páginas | CPU | CER: 7.78% → **1.49%** (80.9% mejora) |
| Validación (GPU) | 45 páginas | RTX 3060 | CER: 7.76% baseline, 0.55s/página |
*Fuente: Elaboración propia.*
La fase de optimización representa el **resultado principal del TFM** (CER 1.49%, precisión 98.51%). La fase de validación GPU confirma la viabilidad práctica del enfoque, demostrando una aceleración de 126x respecto a CPU.
## Comparación de Servicios OCR
### Comparación de Precisión (CER - menor es mejor)
```mermaid
xychart-beta
title "Tasa de Error de Caracteres por Servicio"
x-axis ["PaddleOCR", "EasyOCR", "DocTR"]
y-axis "CER %" 0 --> 15
bar [7.76, 11.23, 12.06]
```
### Comparación de Velocidad (Tiempo por Página)
```mermaid
xychart-beta
title "Tiempo de Procesamiento por Página (segundos)"
x-axis ["DocTR", "PaddleOCR", "EasyOCR"]
y-axis "Segundos" 0 --> 2
bar [0.50, 0.58, 1.88]
```
### Flujo de Recomendación de Servicio
```mermaid
flowchart LR
A{Prioridad?}
A -->|Precisión| B[PaddleOCR]
A -->|Velocidad| C[DocTR]
A -->|Balance| B
B --> D["7.76% CER<br/>0.58s/página"]
C --> E["12.06% CER<br/>0.50s/página"]
```
### Hallazgos Clave
1. **Mejor Precisión**: PaddleOCR logra las tasas de error más bajas (7.76% CER, 11.62% WER)
2. **Mejor Velocidad**: DocTR es el más rápido (0.50s/página), pero 55% menos preciso que PaddleOCR
3. **EasyOCR**: El más lento (3.8x más lento que PaddleOCR) con precisión intermedia
4. **Eficiencia VRAM**: PaddleOCR Mobile usa solo 0.06 GB
## Configuración de Modelos
| Servicio | Detección | Reconocimiento | ¿Correcto para Español? |
|----------|-----------|----------------|-------------------------|
| **PaddleOCR** | PP-OCRv5_mobile_det | PP-OCRv5_mobile_rec | Sí |
| **DocTR** | db_resnet50 | crnn_vgg16_bn | No (entrenado en inglés/francés) |
| **EasyOCR** | CRAFT | latin_g2.pth | Sí |
### Notas sobre Modelos
- **PaddleOCR**: Modelos server más precisos disponibles pero requieren >5.3 GB VRAM (OOM en RTX 3060)
- **DocTR**: Se probó modelo `parseq` como alternativa, resultó 2% peor CER y 2x más lento. El problema de diacríticos es de datos de entrenamiento, no de arquitectura
- **EasyOCR**: Modelo `latin_g2.pth` es correcto. Los problemas son del detector CRAFT, no del reconocimiento
> **Conclusión sobre Fine-tuning:** Para documentos en español, **usar PaddleOCR directamente**. El fine-tuning de DocTR/EasyOCR no se justifica dado que PaddleOCR ya ofrece 31-36% mejor precisión sin configuración adicional.
## Análisis de Errores (del debugset)
### PaddleOCR (Mejor - 7.76% CER)
- **Fortalezas**: Preserva estructura de líneas, maneja bien acentos españoles
- **Problemas**: Errores menores de espaciado, diferencias ocasionales de mayúsculas en acentos
- **Mejorable**: Sí - el ajuste de hiperparámetros probablemente ayude
### DocTR (Peor WER - 42.01%)
- **Problema Crítico**: Colapsa todo el texto en líneas únicas (pierde estructura)
- **Problema de Acentos**: Omite diacríticos ("Indice" vs "Índice")
- **Mejorable**: Parcialmente - el problema de estructura puede ser a nivel de modelo
### EasyOCR (36.36% WER)
- **Problema Crítico**: Inserciones espurias de caracteres (";", "g", "0", "1")
- **Pérdida de Estructura**: Saltos de línea no preservados
- **Mejorable**: Sí - umbrales de detección demasiado sensibles
## Comparación de Modelos PaddleOCR (RTX 3060)
| Métrica | Modelos Server | Modelos Mobile | Ganador |
|---------|----------------|----------------|---------|
| **Tiempo** | 2.47s | 1.08s | Mobile (2.3x más rápido) |
| **CER** | 1.82% | 1.42% | Mobile |
| **WER** | 16.14% | 12.20% | Mobile |
| **VRAM** | 5.3 GB (OOM en página 2) | 0.06 GB | Mobile |
| **Multi-página** | No (OOM) | Sí | Mobile |
> **Conclusión:** Se recomiendan los modelos Mobile - más rápidos, más precisos, caben en VRAM.
## Rendimiento CPU vs GPU (PaddleOCR)
Datos de `raytune_paddle_subproc_results_20251207_192320.csv` (CPU) vs RTX 3060 (GPU):
| Métrica | CPU | GPU (RTX 3060) | Aceleración |
|---------|-----|----------------|-------------|
| **Tiempo/Página** | 69.4s | 0.55s | **126x más rápido** |
| **Mejor CER** | 1.15% | 0.79% | GPU mejor |
| **45 páginas** | ~52 min | ~25 seg | **126x más rápido** |
```mermaid
xychart-beta
title "Tiempo de Procesamiento por Página: CPU vs GPU"
x-axis ["CPU", "GPU (RTX 3060)"]
y-axis "Segundos" 0 --> 80
bar [69.4, 0.55]
```
> **Conclusión:** GPU es esencial para uso práctico de OCR. El procesamiento en CPU es 126x más lento, haciéndolo impráctico para procesamiento por lotes.
## Datos Crudos del Benchmark
```json
{
"timestamp": "2026-01-19T11:00:00.000000",
"platform": {
"gpu": "NVIDIA GeForce RTX 3060 Laptop GPU",
"vram": "5.66 GB",
"cuda": "12.4"
},
"services": {
"PaddleOCR_Mobile": {
"port": 8002,
"models": {"det": "PP-OCRv5_mobile_det", "rec": "PP-OCRv5_mobile_rec"},
"vram_used": "0.06 GB",
"results": {
"CER": 0.0776,
"WER": 0.1162,
"PAGES": 45,
"TIME_PER_PAGE": 0.58,
"TOTAL_TIME": 32.0
}
},
"DocTR": {
"port": 8003,
"models": {"det": "db_resnet50", "rec": "crnn_vgg16_bn"},
"vram_used": "~1 GB",
"results": {
"CER": 0.1206,
"WER": 0.4201,
"PAGES": 45,
"TIME_PER_PAGE": 0.50,
"TOTAL_TIME": 28.4
}
},
"EasyOCR": {
"port": 8002,
"languages": ["es", "en"],
"vram_used": "~2 GB",
"results": {
"CER": 0.1123,
"WER": 0.3636,
"PAGES": 45,
"TIME_PER_PAGE": 1.88,
"TOTAL_TIME": 88.5
}
}
}
}
```
## Resultados de Ajuste de Hiperparámetros
Resultados individuales de ajuste por servicio (64 muestras cada uno, páginas 5-10):
- [Resultados de Ajuste PaddleOCR](metrics_paddle.md)
- [Resultados de Ajuste DocTR](metrics_doctr.md)
- [Resultados de Ajuste EasyOCR](metrics_easyocr.md)
## Próximos Pasos
1. ~~Ajuste de Hiperparámetros~~ - Completado (64 muestras por servicio)
2. **Evaluación del Dataset Completo** - Ejecutar mejores configuraciones en las 45 páginas
3. **Comparar** - Rendimiento base vs ajustado en dataset completo