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
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:
138
README.md
138
README.md
@@ -18,11 +18,15 @@ Optimizar el rendimiento de PaddleOCR para documentos académicos en español me
|
||||
|
||||
## Resultados Principales
|
||||
|
||||
**Tabla.** *Comparación de métricas OCR entre configuración baseline y optimizada.*
|
||||
|
||||
| Modelo | CER | Precisión Caracteres | WER | Precisión Palabras |
|
||||
|--------|-----|---------------------|-----|-------------------|
|
||||
| PaddleOCR (Baseline) | 7.78% | 92.22% | 14.94% | 85.06% |
|
||||
| **PaddleOCR-HyperAdjust** | **1.49%** | **98.51%** | **7.62%** | **92.38%** |
|
||||
|
||||
*Fuente: Elaboración propia.*
|
||||
|
||||
**Mejora obtenida:** Reducción del CER en un **80.9%**
|
||||
|
||||
### Configuración Óptima Encontrada
|
||||
@@ -56,6 +60,8 @@ PDF (académico UNIR)
|
||||
|
||||
### Experimento de Optimización
|
||||
|
||||
**Tabla.** *Parámetros de configuración del experimento Ray Tune.*
|
||||
|
||||
| Parámetro | Valor |
|
||||
|-----------|-------|
|
||||
| Número de trials | 64 |
|
||||
@@ -64,6 +70,8 @@ PDF (académico UNIR)
|
||||
| Trials concurrentes | 2 |
|
||||
| Tiempo total | ~6 horas (CPU) |
|
||||
|
||||
*Fuente: Elaboración propia.*
|
||||
|
||||
---
|
||||
|
||||
## Estructura del Repositorio
|
||||
@@ -113,18 +121,50 @@ MastersThesis/
|
||||
|
||||
---
|
||||
|
||||
## Rendimiento GPU
|
||||
|
||||
Se realizó una validación adicional con aceleración GPU para evaluar la viabilidad práctica del enfoque en escenarios de producción.
|
||||
|
||||
**Tabla.** *Comparación de rendimiento CPU vs GPU.*
|
||||
|
||||
| Métrica | CPU | GPU (RTX 3060) | Aceleración |
|
||||
|---------|-----|----------------|-------------|
|
||||
| Tiempo/Página | 69.4s | 0.55s | **126x** |
|
||||
| Dataset completo (45 páginas) | ~52 min | ~25 seg | **126x** |
|
||||
|
||||
*Fuente: Elaboración propia.*
|
||||
|
||||
### Recomendación de Modelos
|
||||
|
||||
**Tabla.** *Comparación de modelos PaddleOCR en RTX 3060.*
|
||||
|
||||
| Modelo | VRAM | Recomendación |
|
||||
|--------|------|---------------|
|
||||
| **PP-OCRv5 Mobile** | 0.06 GB | ✓ Recomendado |
|
||||
| PP-OCRv5 Server | 5.3 GB | ✗ Causa OOM en RTX 3060 |
|
||||
|
||||
*Fuente: Elaboración propia.*
|
||||
|
||||
**Conclusión:** Para hardware con VRAM limitada (≤6 GB), los modelos Mobile ofrecen el mejor balance entre precisión y recursos. La aceleración GPU hace viable el procesamiento en tiempo real.
|
||||
|
||||
---
|
||||
|
||||
## Requisitos
|
||||
|
||||
**Tabla.** *Dependencias principales del proyecto y versiones utilizadas.*
|
||||
|
||||
| Componente | Versión |
|
||||
|------------|---------|
|
||||
| Python | 3.11.9 |
|
||||
| Python | 3.12.3 |
|
||||
| PaddlePaddle | 3.2.2 |
|
||||
| PaddleOCR | 3.3.2 |
|
||||
| Ray | 2.52.1 |
|
||||
| Optuna | 4.6.0 |
|
||||
| Optuna | 4.7.0 |
|
||||
| jiwer | (para métricas CER/WER) |
|
||||
| PyMuPDF | (para conversión PDF) |
|
||||
|
||||
*Fuente: Elaboración propia.*
|
||||
|
||||
---
|
||||
|
||||
## Uso
|
||||
@@ -155,7 +195,7 @@ python src/paddle_ocr_tuning.py \
|
||||
|
||||
## Fuentes de Datos
|
||||
|
||||
- **Dataset**: Instrucciones para la elaboración del TFE (UNIR), 24 páginas
|
||||
- **Dataset**: 2 documentos UNIR (45 páginas total): Instrucciones TFE (24 pág.) + Plantilla TFE (21 pág.)
|
||||
- **Resultados Ray Tune (PRINCIPAL)**: `src/raytune_paddle_subproc_results_20251207_192320.csv` - 64 trials de optimización con todas las métricas y configuraciones
|
||||
|
||||
---
|
||||
@@ -234,14 +274,18 @@ python3 apply_content.py
|
||||
|
||||
### Archivos de Entrada y Salida
|
||||
|
||||
**Tabla.** *Relación de scripts de generación con sus archivos de entrada y salida.*
|
||||
|
||||
| Script | Entrada | Salida |
|
||||
|--------|---------|--------|
|
||||
| `generate_mermaid_figures.py` | `docs/*.md` (bloques ```mermaid```) | `thesis_output/figures/figura_*.png`, `figures_manifest.json` |
|
||||
| `apply_content.py` | `instructions/plantilla_individual.htm`, `docs/*.md`, `thesis_output/figures/*.png` | `thesis_output/plantilla_individual.htm` |
|
||||
|
||||
*Fuente: Elaboración propia.*
|
||||
|
||||
### Contenido Generado Automáticamente
|
||||
|
||||
- **30 tablas** con formato APA (Tabla X. *Título* + Fuente: ...)
|
||||
- **53 tablas** con formato APA (Tabla X. *Título* + Fuente: ...)
|
||||
- **8 figuras** desde Mermaid (Figura X. *Título* + Fuente: Elaboración propia)
|
||||
- **25 referencias** en formato APA con sangría francesa
|
||||
- **Resumen/Abstract** con palabras clave
|
||||
@@ -252,48 +296,70 @@ python3 apply_content.py
|
||||
|
||||
## Trabajo Pendiente para Completar el TFM
|
||||
|
||||
### Contexto: Limitaciones de Hardware
|
||||
### Contexto: Hardware
|
||||
|
||||
Este trabajo adoptó la estrategia de **optimización de hiperparámetros** en lugar de **fine-tuning** debido a:
|
||||
- **Sin GPU dedicada**: Ejecución exclusivamente en CPU
|
||||
- **Tiempo de inferencia elevado**: ~69 segundos/página en CPU
|
||||
- **Fine-tuning inviable**: Entrenar modelos de deep learning sin GPU requeriría tiempos prohibitivos
|
||||
Este trabajo adoptó la estrategia de **optimización de hiperparámetros** en lugar de **fine-tuning** debido a que el fine-tuning de modelos OCR requiere datasets etiquetados extensos y tiempos de entrenamiento prohibitivos.
|
||||
|
||||
**Hardware utilizado:**
|
||||
- **Optimización (CPU)**: Los 64 trials de Ray Tune se ejecutaron en CPU (~69s/página)
|
||||
- **Validación (GPU)**: Se validó con RTX 3060 logrando 126x de aceleración (0.55s/página)
|
||||
|
||||
La optimización de hiperparámetros demostró ser una **alternativa efectiva** al fine-tuning, logrando una reducción del 80.9% en el CER sin reentrenar el modelo.
|
||||
|
||||
### Tareas Completadas
|
||||
|
||||
- [x] **Estructura docs/ según plantilla UNIR**: Todos los capítulos siguen numeración exacta (1.1, 1.2, etc.)
|
||||
- [x] **Añadir diagramas Mermaid**: 7 diagramas añadidos (pipeline OCR, arquitectura Ray Tune, gráficos de comparación)
|
||||
- [x] **Generar documento TFM unificado**: Script `apply_content.py` genera documento completo desde docs/
|
||||
- [x] **Convertir Mermaid a PNG**: Script `generate_mermaid_figures.py` genera figuras automáticamente
|
||||
|
||||
### Tareas Pendientes
|
||||
|
||||
#### 1. Validación del Enfoque (Prioridad Alta)
|
||||
- [ ] **Validación cruzada en otros documentos**: Evaluar la configuración óptima en otros tipos de documentos en español (facturas, formularios, contratos) para verificar generalización
|
||||
- [ ] **Ampliar el dataset**: El dataset actual tiene solo 24 páginas. Construir un corpus más amplio y diverso (mínimo 100 páginas)
|
||||
- [ ] **Validación del ground truth**: Revisar manualmente el texto de referencia extraído automáticamente para asegurar su exactitud
|
||||
|
||||
#### 2. Experimentación Adicional (Prioridad Media)
|
||||
- [ ] **Explorar `text_det_unclip_ratio`**: Este parámetro quedó fijado en 0.0. Incluirlo en el espacio de búsqueda podría mejorar resultados
|
||||
- [ ] **Comparativa con fine-tuning** (si se obtiene acceso a GPU): Cuantificar la brecha de rendimiento entre optimización de hiperparámetros y fine-tuning real
|
||||
- [ ] **Evaluación con GPU**: Medir tiempos de inferencia con aceleración GPU para escenarios de producción
|
||||
|
||||
#### 3. Documentación y Presentación (Prioridad Alta)
|
||||
#### Obligatorias para Entrega
|
||||
- [ ] **Revisión final del documento**: Abrir en Word, actualizar índices (Ctrl+A → F9), ajustar figuras, guardar como .docx
|
||||
- [ ] **Crear presentación**: Preparar slides para la defensa del TFM
|
||||
- [ ] **Revisión final del documento**: Verificar formato, índices y contenido en Word
|
||||
|
||||
#### 4. Extensiones Futuras (Opcional)
|
||||
- [ ] **Herramienta de configuración automática**: Desarrollar una herramienta que determine automáticamente la configuración óptima para un nuevo tipo de documento
|
||||
- [ ] **Benchmark público para español**: Publicar un benchmark de OCR para documentos en español que facilite comparación de soluciones
|
||||
- [ ] **Optimización multi-objetivo**: Considerar CER, WER y tiempo de inferencia simultáneamente
|
||||
#### Opcionales (Mejoras Futuras)
|
||||
- [ ] **Validación cruzada**: Evaluar configuración en otros documentos (facturas, formularios)
|
||||
- [ ] **Explorar `text_det_unclip_ratio`**: Parámetro fijado en 0.0, podría mejorar resultados
|
||||
- [ ] **Comparativa con fine-tuning**: Cuantificar brecha vs fine-tuning real
|
||||
- [ ] **Herramienta de configuración automática**: Auto-detectar configuración óptima por documento
|
||||
- [ ] **Benchmark público para español**: Facilitar comparación de soluciones OCR
|
||||
|
||||
### Recomendación de Próximos Pasos
|
||||
#### Completadas
|
||||
- [x] **Estructura docs/ según plantilla UNIR**
|
||||
- [x] **Diagramas Mermaid**: 8 figuras generadas
|
||||
- [x] **Documento TFM unificado**: Script `apply_content.py`
|
||||
- [x] **Evaluación con GPU**: RTX 3060 - 126x más rápido (0.55s/página)
|
||||
|
||||
1. **Inmediato**: Abrir documento generado en Word, actualizar índices (Ctrl+A, F9), guardar como .docx
|
||||
2. **Corto plazo**: Validar en 2-3 tipos de documentos adicionales para demostrar generalización
|
||||
3. **Para la defensa**: Crear presentación con visualizaciones de resultados
|
||||
### Dataset
|
||||
|
||||
El dataset contiene **45 páginas** de 2 documentos UNIR:
|
||||
- `src/dataset/0/`: Instrucciones TFE (24 páginas)
|
||||
- `src/dataset/1/`: Plantilla TFE (21 páginas)
|
||||
|
||||
#### Formato Hugging Face
|
||||
|
||||
El dataset está disponible en formato Hugging Face en `src/dataset_hf/`:
|
||||
|
||||
```
|
||||
src/dataset_hf/
|
||||
├── README.md # Dataset card
|
||||
├── metadata.jsonl # Metadata (image_path, text, doc_id, page_num)
|
||||
└── data/ # 45 imágenes PNG
|
||||
```
|
||||
|
||||
#### Generar/Regenerar Dataset
|
||||
|
||||
```bash
|
||||
# Convertir de formato original a HF
|
||||
source .venv/bin/activate
|
||||
python src/dataset_formatting/convert_to_hf_dataset.py
|
||||
|
||||
# Upload a Gitea packages (requiere GITEA_TOKEN)
|
||||
./src/dataset_formatting/upload-dataset.sh $GITEA_TOKEN
|
||||
```
|
||||
|
||||
#### Descargar Dataset
|
||||
|
||||
```bash
|
||||
# Desde Gitea packages
|
||||
curl -O https://seryus.ddns.net/api/packages/unir/generic/ocr-dataset-spanish/1.0.0/dataset-1.0.0.tar.gz
|
||||
tar -xzf dataset-1.0.0.tar.gz -C src/dataset_hf/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user