6.8 KiB
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:
- Velocidad: 64 pruebas × 5 páginas = 320 evaluaciones de página. Con 45 páginas, serían 2,880 evaluaciones (~9x más tiempo)
- 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
{
"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
- straighten_pages: false - ¡Crítico! Configurarlo en true causa ~79% CER (catastrófico)
- assume_straight_pages: true - Funciona bien con escaneos de documentos rectos
- resolve_lines: true - Ayuda a mantener la estructura de líneas
- disable_page_orientation: true - Evita rotación innecesaria
Impacto de Parámetros
Parámetros que mejoraron la precisión:
straighten_pages=Falseabsolutamente críticoassume_straight_pages=Trueen los mejores resultadosresolve_lines=Truemantiene la estructura del texto
Parámetros que perjudicaron la precisión:
straighten_pages=Truecatastróficamente malo (~79% CER)resolve_blocks=Trueligeramente 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
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
- Pérdida total de estructura: Todo el texto de la página se colapsa en una sola línea
- Omisión sistemática de diacríticos: TODOS los acentos españoles se pierden
- Errores de capitalización:
o→Oen 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
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