Paddle ocr, easyicr and doctr gpu support. (#4)
All checks were successful
build_docker / essential (push) Successful in 0s
build_docker / build_cpu (push) Successful in 5m0s
build_docker / build_gpu (push) Successful in 22m55s
build_docker / build_easyocr (push) Successful in 18m47s
build_docker / build_easyocr_gpu (push) Successful in 19m0s
build_docker / build_raytune (push) Successful in 3m27s
build_docker / build_doctr (push) Successful in 19m42s
build_docker / build_doctr_gpu (push) Successful in 14m49s

This commit was merged in pull request #4.
This commit is contained in:
2026-01-19 17:35:24 +00:00
committed by Sergio Jimenez Jimenez
parent 8e2b7a5096
commit c7ed7b2b9c
105 changed files with 8170 additions and 1263 deletions

View File

@@ -0,0 +1,141 @@
# Resultados de Ajuste de Hiperparámetros PaddleOCR
> **Nota:** Los resultados de este documento corresponden a la fase de validación GPU con 45 páginas. El resultado oficial del TFM es **CER 1.49%** obtenido en la validación final de 24 páginas con la configuración optimizada (ver `docs/04_desarrollo_especifico.md`).
**Fecha de Ajuste:** 2026-01-19
**Plataforma:** NVIDIA RTX 3060 Laptop GPU
**Muestras:** 64
**Páginas de Prueba:** 5-10 (primer documento)
### ¿Por Qué Solo 5 Páginas?
Usamos solo 5 páginas (páginas 5-10) para el ajuste de hiperparámetros porque:
1. **Velocidad**: 64 pruebas × 5 páginas = 320 evaluaciones de página. Con 45 páginas, serían 2,880 evaluaciones (~9x más tiempo)
2. **Eficiencia de recursos**: Cada prueba toma ~3-10 segundos en GPU; el dataset completo tomaría ~1 hora por prueba en CPU
**Riesgo de Sobreajuste**: El ajuste de hiperparámetros en un subconjunto pequeño PUEDE causar sobreajuste. Nuestros resultados confirman esto:
- Subconjunto de ajuste: **90% mejora** (0.79% CER)
- Dataset completo: **12.8% mejora** (7.72% CER)
La diferencia dramática muestra que los hiperparámetros se sobreajustaron parcialmente a las páginas 5-10. Un subconjunto de ajuste más grande (ej. 15-20 páginas) podría producir parámetros que generalicen mejor, pero aumentaría el tiempo de ajuste proporcionalmente.
## Evaluación del Dataset Completo (45 páginas)
| Métrica | Base | Ajustado | Mejora |
|---------|------|----------|--------|
| **CER** | 8.85% | **7.72%** | **12.8%** |
| **WER** | 13.05% | **11.40%** | **12.6%** |
| Tiempo/Página | 0.51s | 0.55s | - |
## Resultados del Subconjunto de Ajuste (páginas 5-10)
| Métrica | Base | Ajustado | Mejora |
|---------|------|----------|--------|
| **CER** | 7.76% | **0.79%** | **90%** |
| **WER** | 11.62% | **7.78%** | **33%** |
> Nota: El subconjunto de ajuste mostró mayores mejoras, sugiriendo que algunos hiperparámetros son específicos de la página.
## Mejor Configuración Encontrada
```json
{
"use_doc_orientation_classify": true,
"use_doc_unwarping": false,
"textline_orientation": true,
"text_det_thresh": 0.0462,
"text_det_box_thresh": 0.4862,
"text_det_unclip_ratio": 0.0,
"text_rec_score_thresh": 0.5658
}
```
## Hallazgos Clave
1. **textline_orientation: true** - Crítico para la precisión
2. **use_doc_orientation_classify: true** - Ayuda con la detección de orientación de página
3. **use_doc_unwarping: false** - El enderezamiento de documentos perjudica la precisión en este dataset
4. **Bajo text_det_thresh (0.0462)** - Detección de texto más sensible ayuda
5. **Mayor text_rec_score_thresh (0.5658)** - Filtra reconocimientos de baja confianza
## Impacto de Parámetros
Parámetros que mejoraron la precisión:
- `textline_orientation=True` consistentemente en los mejores resultados
- `use_doc_orientation_classify=True` en las mejores pruebas
- Valores más bajos de `text_det_thresh` (0.04-0.10)
Parámetros que perjudicaron la precisión:
- `use_doc_unwarping=True` aumentó el CER significativamente
- `text_det_box_thresh` muy bajo (<0.01) causó problemas
## Evaluación del Dataset Completo
**Estado:** Completado
```bash
curl -X POST http://localhost:8002/evaluate_full \
-H "Content-Type: application/json" \
-d '{
"pdf_folder": "/app/dataset",
"use_doc_orientation_classify": true,
"use_doc_unwarping": false,
"textline_orientation": true,
"text_det_thresh": 0.0462,
"text_det_box_thresh": 0.4862,
"text_det_unclip_ratio": 0.0,
"text_rec_score_thresh": 0.5658,
"save_output": true
}'
```
**Resultado:** CER 7.72%, WER 11.40%, 0.55s/página
## Configuración del Modelo
### Modelo Actual (Correcto para Español)
| Componente | Modelo | Estado |
|------------|--------|--------|
| Detección | `PP-OCRv5_mobile_det` | Correcto |
| Reconocimiento | `PP-OCRv5_mobile_rec` | Correcto |
Los modelos PP-OCRv5 mobile soportan múltiples idiomas incluyendo español con buen manejo de diacríticos.
### Nota sobre Modelos Server
PaddleOCR ofrece modelos "server" más precisos:
- `PP-OCRv5_server_det` + `PP-OCRv5_server_rec`
- Requieren ~5.3 GB VRAM
**Limitación:** En la RTX 3060 (5.66 GB VRAM) los modelos server causan **OOM (Out of Memory)** en la página 2. Los modelos mobile usados (7.72% CER) son la mejor opción práctica para este hardware.
Para hardware con más VRAM (8+ GB), los modelos server podrían mejorar la precisión.
## Análisis de Errores del Debugset
### Errores Observados
| Ground Truth | PaddleOCR | Tipo de Error |
|--------------|-----------|---------------|
| `bibliografía` | `bibliografia` | Acento omitido |
| `amplían` | `amplian` | Acento omitido |
| `, debes` | ` debes` | Coma Unicode china |
| Líneas separadas | Footer fusionado | Estructura menor |
### Fortalezas
- **Preserva estructura de líneas**: Mantiene saltos de línea correctamente
- **Buen manejo de español**: La mayoría de acentos se reconocen bien
- **Bajo ruido**: No inserta caracteres espurios
### ¿Fine-tuning Recomendado?
**No.** Con 7.72% CER, PaddleOCR ya tiene excelente precisión para documentos españoles. Los errores observados son menores:
- Acentos omitidos: ~5% de casos
- Puntuación Unicode: Muy ocasional
- Impacto en legibilidad: Mínimo
El esfuerzo de fine-tuning no se justifica para ganancias marginales. Para casos de uso críticos donde se requiera <5% CER, considerar post-procesamiento con corrector ortográfico