Some checks failed
build_docker / essential (push) Successful in 0s
build_docker / build_paddle_ocr (push) Successful in 4m57s
build_docker / build_raytune (push) Has been cancelled
build_docker / build_easyocr_gpu (push) Has been cancelled
build_docker / build_doctr (push) Has been cancelled
build_docker / build_doctr_gpu (push) Has been cancelled
build_docker / build_paddle_ocr_gpu (push) Has been cancelled
build_docker / build_easyocr (push) Has been cancelled
183 lines
6.9 KiB
Markdown
183 lines
6.9 KiB
Markdown
# 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.
|
||
|
||
*Fuente: https://seryus.ddns.net/unir/MastersThesis/src/branch/main/src/results/raytune_doctr_results_20260119_121445.csv*
|
||
|
||
## 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
|