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,180 @@
# Resultados de Ajuste de Hiperparámetros DocTR
**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 ~2-20 segundos en GPU
**Riesgo de Sobreajuste**: El ajuste de hiperparámetros en un subconjunto pequeño PUEDE causar sobreajuste. Nuestros resultados confirman esto:
- Subconjunto de ajuste: **38% mejora** (7.43% CER)
- Dataset completo: **0% mejora** (12.07% CER)
La falta total de mejora en el dataset completo indica sobreajuste severo a las páginas 5-10, combinado con limitaciones a nivel de modelo (manejo de diacríticos, estructura de líneas) que los hiperparámetros no pueden corregir.
## Evaluación del Dataset Completo (45 páginas)
| Métrica | Base | Ajustado | Mejora |
|---------|------|----------|--------|
| **CER** | 12.06% | 12.07% | **0%** |
| **WER** | 42.01% | 42.26% | **0%** |
| Tiempo/Página | 0.33s | 0.34s | - |
> **Nota:** El ajuste no generalizó al dataset completo. Los problemas de DocTR parecen ser a nivel de modelo (diacríticos, estructura de líneas).
## Resultados del Subconjunto de Ajuste (páginas 5-10)
| Métrica | Base | Ajustado | Mejora |
|---------|------|----------|--------|
| **CER** | 12.06% | **7.43%** | **38%** |
| **WER** | 42.01% | **35.23%** | **16%** |
> Nota: Las mejoras en el subconjunto de ajuste no se transfirieron al dataset completo.
## Mejor Configuración Encontrada
```json
{
"assume_straight_pages": true,
"straighten_pages": false,
"preserve_aspect_ratio": false,
"symmetric_pad": false,
"disable_page_orientation": true,
"disable_crop_orientation": false,
"resolve_lines": true,
"resolve_blocks": false,
"paragraph_break": 0.0977
}
```
## Hallazgos Clave
1. **straighten_pages: false** - ¡Crítico! Configurarlo en true causa ~79% CER (catastrófico)
2. **assume_straight_pages: true** - Funciona bien con escaneos de documentos rectos
3. **resolve_lines: true** - Ayuda a mantener la estructura de líneas
4. **disable_page_orientation: true** - Evita rotación innecesaria
## Impacto de Parámetros
Parámetros que mejoraron la precisión:
- `straighten_pages=False` absolutamente crítico
- `assume_straight_pages=True` en los mejores resultados
- `resolve_lines=True` mantiene la estructura del texto
Parámetros que perjudicaron la precisión:
- `straighten_pages=True` catastróficamente malo (~79% CER)
- `resolve_blocks=True` ligeramente peor que False
## Limitaciones Conocidas
Incluso con ajuste, DocTR todavía tiene problemas:
- Omite diacríticos (tildes) - probablemente problema a nivel de modelo
- Todavía tiene mayor WER que PaddleOCR debido a problemas de estructura
## Evaluación del Dataset Completo
**Estado:** Completado
```bash
curl -X POST http://localhost:8003/evaluate_full \
-H "Content-Type: application/json" \
-d '{
"pdf_folder": "/app/dataset",
"assume_straight_pages": true,
"straighten_pages": false,
"preserve_aspect_ratio": false,
"symmetric_pad": false,
"disable_page_orientation": true,
"disable_crop_orientation": false,
"resolve_lines": true,
"resolve_blocks": false,
"paragraph_break": 0.0977,
"save_output": true
}'
```
**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