Docs aligment on latest metrics.
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_cpu (pull_request) Successful in 5m25s
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
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_cpu (pull_request) Successful in 5m25s
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
This commit is contained in:
@@ -55,6 +55,21 @@ Para un proyecto de investigación con múltiples iteraciones de ajuste de hiper
|
||||
|
||||
> **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)
|
||||
@@ -96,6 +111,22 @@ flowchart LR
|
||||
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)
|
||||
|
||||
@@ -102,3 +102,79 @@ curl -X POST http://localhost:8003/evaluate_full \
|
||||
**Resultado:** CER 12.07%, WER 42.26%, 0.34s/página (sin mejora sobre la base)
|
||||
|
||||
**Conclusión:** Los problemas de precisión de DocTR son a nivel de modelo, no ajustables por hiperparámetros.
|
||||
|
||||
## Configuración del Modelo
|
||||
|
||||
### Modelo Actual
|
||||
|
||||
| Componente | Modelo | Estado |
|
||||
|------------|--------|--------|
|
||||
| Detección | `db_resnet50` | Correcto |
|
||||
| Reconocimiento | `crnn_vgg16_bn` | Mejor opción disponible |
|
||||
|
||||
El modelo `crnn_vgg16_bn` fue entrenado principalmente con datasets en inglés y francés, lo que explica la pérdida sistemática de diacríticos españoles (á, é, í, ó, ú, ñ).
|
||||
|
||||
### Prueba con Modelo Alternativo (parseq)
|
||||
|
||||
Se probó el modelo `parseq` (transformer) como alternativa:
|
||||
|
||||
| Métrica | crnn_vgg16_bn | parseq | Resultado |
|
||||
|---------|---------------|--------|-----------|
|
||||
| **CER** | 12.07% | 12.32% | **+2% peor** |
|
||||
| **WER** | 42.26% | 44.0% | **+4% peor** |
|
||||
| Tiempo/Página | 0.34s | 0.70s | 2x más lento |
|
||||
| Diacríticos | No | No | Sin mejora |
|
||||
|
||||
**Conclusión:** El modelo `parseq` no mejora los diacríticos españoles y es más lento. Todos los modelos pre-entrenados de DocTR fueron entrenados principalmente en inglés/francés. Para español se requeriría **fine-tuning con corpus español**.
|
||||
|
||||
### No Se Recomienda Cambio de Modelo
|
||||
|
||||
Mantener `crnn_vgg16_bn` (más rápido, ligeramente mejor precisión). Los problemas de diacríticos son de **datos de entrenamiento**, no de arquitectura del modelo
|
||||
|
||||
## Análisis de Errores del Debugset
|
||||
|
||||
### Errores Observados
|
||||
|
||||
| Ground Truth | DocTR | Tipo de Error |
|
||||
|--------------|-------|---------------|
|
||||
| `bibliográficas` | `bibliograficas` | Diacrítico omitido |
|
||||
| `sección` | `seccion` | Diacrítico omitido |
|
||||
| `Máster` | `Master` | Diacrítico omitido |
|
||||
| `información` | `informacion` | Diacrítico omitido |
|
||||
| `o amplían` | `O amplian` | Mayúscula incorrecta |
|
||||
| Líneas separadas | Todo en una línea | **Estructura perdida** |
|
||||
|
||||
### Problemas Críticos
|
||||
|
||||
1. **Pérdida total de estructura**: Todo el texto de la página se colapsa en una sola línea
|
||||
2. **Omisión sistemática de diacríticos**: TODOS los acentos españoles se pierden
|
||||
3. **Errores de capitalización**: `o` → `O` en medio de oraciones
|
||||
|
||||
### ¿Fine-tuning Recomendado?
|
||||
|
||||
**Sí, para diacríticos.** El modelo CRNN de DocTR fue entrenado principalmente con textos en inglés y francés, lo que explica la omisión sistemática de acentos españoles.
|
||||
|
||||
| Problema | ¿Fine-tuning ayuda? | Explicación |
|
||||
|----------|---------------------|-------------|
|
||||
| Diacríticos | **Sí** | Entrenar con corpus español enseñaría al modelo los acentos |
|
||||
| Estructura de líneas | **No** | Problema arquitectural del modelo, no de entrenamiento |
|
||||
| Capitalización | **Parcial** | Podría mejorar con datos de entrenamiento adecuados |
|
||||
|
||||
### Cómo Fine-Tunear DocTR
|
||||
|
||||
```python
|
||||
from doctr.models import recognition_predictor
|
||||
from doctr.datasets import RecognitionDataset
|
||||
|
||||
# Cargar dataset español
|
||||
train_set = RecognitionDataset(
|
||||
img_folder="path/to/spanish/images",
|
||||
labels_path="path/to/spanish/labels.json"
|
||||
)
|
||||
|
||||
# Fine-tune el modelo de reconocimiento
|
||||
model = recognition_predictor(pretrained=True)
|
||||
# ... configurar entrenamiento
|
||||
```
|
||||
|
||||
Documentación: https://mindee.github.io/doctr/using_doctr/custom_models_training.html
|
||||
|
||||
@@ -111,3 +111,72 @@ curl -X POST http://localhost:8002/evaluate_full \
|
||||
**Resultado:** CER 11.14%, WER 36.85%, 1.94s/página (mejora mínima)
|
||||
|
||||
**Conclusión:** El ajuste de EasyOCR proporcionó mejora insignificante en el dataset completo.
|
||||
|
||||
## Configuración del Modelo
|
||||
|
||||
### Modelo Actual (Correcto para Español)
|
||||
|
||||
| Componente | Modelo | Estado |
|
||||
|------------|--------|--------|
|
||||
| Detección | CRAFT | Correcto |
|
||||
| Reconocimiento | `latin_g2.pth` | Correcto para español |
|
||||
| Idiomas | `es,en` | Correcto |
|
||||
|
||||
El modelo `latin_g2.pth` está optimizado para idiomas con escritura latina incluyendo español. **El modelo de reconocimiento es correcto** - los problemas observados (caracteres espurios `0`, `;`, `g`) son del **detector CRAFT**, no del modelo de reconocimiento.
|
||||
|
||||
### No Se Requiere Cambio de Modelo
|
||||
|
||||
A diferencia de DocTR, EasyOCR usa el modelo correcto para español. Los problemas son de detección (umbrales del CRAFT), no de reconocimiento.
|
||||
|
||||
## Análisis de Errores del Debugset
|
||||
|
||||
### Errores Observados
|
||||
|
||||
| Ground Truth | EasyOCR | Tipo de Error |
|
||||
|--------------|---------|---------------|
|
||||
| `o figura` | `0 figura` | Letra `o` → número `0` |
|
||||
| `tabla o figura` | `tabla 0 figura` | Letra `o` → número `0` |
|
||||
| `grupal,` | `grupal;` | Coma → punto y coma |
|
||||
| `páginas,` | `páginas;` | Puntuación incorrecta |
|
||||
| (ninguno) | `g`, `1`, `2` | **Caracteres espurios insertados** |
|
||||
| Líneas separadas | Todo en una línea | **Estructura perdida** |
|
||||
|
||||
### Problemas Críticos
|
||||
|
||||
1. **Caracteres espurios**: El detector CRAFT inserta caracteres falsos (`g`, `1`, `2`, `;`) que no existen en el documento
|
||||
2. **Confusión letra/número**: Consistentemente confunde `o` con `0`
|
||||
3. **Puntuación incorrecta**: Reemplaza comas por punto y coma
|
||||
4. **Pérdida de estructura**: Todo el texto se colapsa en una línea
|
||||
|
||||
### ¿Fine-tuning Recomendado?
|
||||
|
||||
**Sí.** EasyOCR tiene problemas significativos que podrían mejorarse con fine-tuning:
|
||||
|
||||
| Problema | ¿Fine-tuning ayuda? | Explicación |
|
||||
|----------|---------------------|-------------|
|
||||
| Caracteres espurios | **Sí** | El detector CRAFT puede entrenarse para reducir falsos positivos |
|
||||
| Confusión `o`/`0` | **Sí** | El modelo de reconocimiento aprendería del contexto español |
|
||||
| Puntuación | **Sí** | Corpus español enseñaría patrones de puntuación correctos |
|
||||
| Estructura | **Parcial** | Depende de parámetros de agrupación de texto |
|
||||
|
||||
### Cómo Fine-Tunear EasyOCR
|
||||
|
||||
EasyOCR permite fine-tuning del modelo de reconocimiento:
|
||||
|
||||
```bash
|
||||
# 1. Preparar dataset en formato EasyOCR
|
||||
# Estructura: images/ + labels.txt (imagen<tab>texto)
|
||||
|
||||
# 2. Entrenar modelo de reconocimiento
|
||||
python train.py \
|
||||
--train_data ./train_data \
|
||||
--valid_data ./valid_data \
|
||||
--lang_list es en \
|
||||
--saved_model ./custom_model
|
||||
```
|
||||
|
||||
Documentación: https://github.com/JaidedAI/EasyOCR/blob/master/custom_model.md
|
||||
|
||||
### Alternativa Recomendada
|
||||
|
||||
Dado el CER de 11.14% y los problemas fundamentales de EasyOCR, se recomienda **usar PaddleOCR** (7.72% CER) en lugar de invertir esfuerzo en fine-tuning de EasyOCR
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# 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
|
||||
@@ -89,3 +91,51 @@ curl -X POST http://localhost:8002/evaluate_full \
|
||||
```
|
||||
|
||||
**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
|
||||
|
||||
Reference in New Issue
Block a user