Add references to each chapter
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,4 +2,5 @@
|
||||
results/
|
||||
__pycache__/
|
||||
dataset
|
||||
results
|
||||
results
|
||||
.DS_Store
|
||||
|
||||
366
claude.md
366
claude.md
@@ -50,15 +50,14 @@ config_optimizada = {
|
||||
|
||||
```
|
||||
MastersThesis/
|
||||
├── docs/ # Thesis chapters in Markdown
|
||||
│ ├── 00_resumen.md # Abstract (Spanish + English)
|
||||
│ ├── 01_introduccion.md # Introduction
|
||||
│ ├── 02_contexto_estado_arte.md # Context and State of Art
|
||||
│ ├── 03_objetivos_metodologia.md # Objectives and Methodology
|
||||
│ ├── 04_comparativa_soluciones.md # OCR Comparative Study
|
||||
│ ├── 05_optimizacion_hiperparametros.md # Ray Tune Optimization
|
||||
│ ├── 06_resultados_discusion.md # Results and Discussion
|
||||
│ └── 07_conclusiones_trabajo_futuro.md # Conclusions
|
||||
├── docs/ # Thesis chapters in Markdown (matches template structure)
|
||||
│ ├── 00_resumen.md # Resumen + Abstract
|
||||
│ ├── 01_introduccion.md # Chapter 1: Introducción
|
||||
│ ├── 02_contexto_estado_arte.md # Chapter 2: Contexto y estado del arte
|
||||
│ ├── 03_objetivos_metodologia.md # Chapter 3: Objetivos y metodología
|
||||
│ ├── 04_desarrollo_especifico.md # Chapter 4: Desarrollo específico (4.1, 4.2, 4.3)
|
||||
│ ├── 05_conclusiones_trabajo_futuro.md # Chapter 5: Conclusiones
|
||||
│ └── 06_referencias_bibliograficas.md # Referencias bibliográficas
|
||||
├── src/
|
||||
│ ├── paddle_ocr_fine_tune_unir_raytune.ipynb # Main experiment (64 trials)
|
||||
│ ├── paddle_ocr_tuning.py # CLI evaluation script
|
||||
@@ -66,11 +65,29 @@ MastersThesis/
|
||||
│ ├── prepare_dataset.ipynb # Dataset preparation
|
||||
│ └── raytune_paddle_subproc_results_20251207_192320.csv # 64 trial results
|
||||
├── results/ # Benchmark results CSVs
|
||||
├── instructions/ # UNIR PDF document used as dataset
|
||||
├── instructions/ # UNIR instructions and template
|
||||
│ ├── instrucciones.pdf # TFE writing guidelines
|
||||
│ └── plantilla_individual.pdf # Word template (PDF version)
|
||||
├── ocr_benchmark_notebook.ipynb # Initial OCR benchmark
|
||||
└── README.md
|
||||
```
|
||||
|
||||
### docs/ to Template Mapping
|
||||
|
||||
The template (`plantilla_individual.pdf`) requires **5 chapters**. The docs/ files now match this structure exactly:
|
||||
|
||||
| Template Section | docs/ File | Notes |
|
||||
|-----------------|------------|-------|
|
||||
| Resumen | `00_resumen.md` (Spanish part) | 150-300 words |
|
||||
| Abstract | `00_resumen.md` (English part) | 150-300 words |
|
||||
| 1. Introducción | `01_introduccion.md` | Subsections 1.1, 1.2, 1.3 |
|
||||
| 2. Contexto y estado del arte | `02_contexto_estado_arte.md` | Subsections 2.1, 2.2, 2.3 |
|
||||
| 3. Objetivos y metodología | `03_objetivos_metodologia.md` | Subsections 3.1, 3.2, 3.3 |
|
||||
| 4. Desarrollo específico | `04_desarrollo_especifico.md` | Includes 4.1, 4.2, 4.3 |
|
||||
| 5. Conclusiones y trabajo futuro | `05_conclusiones_trabajo_futuro.md` | Subsections 5.1, 5.2 |
|
||||
| Referencias bibliográficas | `06_referencias_bibliograficas.md` | APA, alphabetical |
|
||||
| Anexo A | (create from README) | Repository URL |
|
||||
|
||||
## Important Data Files
|
||||
|
||||
### Results CSV Files
|
||||
@@ -105,32 +122,339 @@ MastersThesis/
|
||||
- Compare with actual fine-tuning (if GPU access obtained)
|
||||
- Multi-objective optimization (CER + WER + inference time)
|
||||
|
||||
---
|
||||
|
||||
## UNIR TFE Document Guidelines
|
||||
|
||||
**CRITICAL:** The thesis MUST follow UNIR's official template (`instructions/plantilla_individual.pdf`) and guidelines (`instructions/instrucciones.pdf`).
|
||||
|
||||
### Work Type Classification
|
||||
|
||||
This thesis is a **hybrid of Type 1 (Piloto experimental) and Type 3 (Comparativa de soluciones)**:
|
||||
- Comparative study of OCR solutions (EasyOCR, PaddleOCR, DocTR)
|
||||
- Experimental pilot with Ray Tune hyperparameter optimization
|
||||
- 64 trials executed, results analyzed statistically
|
||||
|
||||
### Document Structure (from plantilla_individual.pdf - MANDATORY)
|
||||
|
||||
The TFE must follow this EXACT structure from the official template:
|
||||
|
||||
| Section | Subsections | Notes |
|
||||
|---------|-------------|-------|
|
||||
| **Portada** | Title, Author, Type, Director, Date | Use template format exactly |
|
||||
| **Resumen** | 150-300 words + 3-5 Palabras clave | Spanish summary |
|
||||
| **Abstract** | 150-300 words + 3-5 Keywords | English summary |
|
||||
| **Índice de contenidos** | Auto-generated | New page |
|
||||
| **Índice de figuras** | Auto-generated | New page |
|
||||
| **Índice de tablas** | Auto-generated | New page |
|
||||
| **1. Introducción** | 1.1 Motivación, 1.2 Planteamiento del trabajo, 1.3 Estructura del trabajo | 3-5 pages |
|
||||
| **2. Contexto y estado del arte** | 2.1 Contexto del problema, 2.2 Estado del arte, 2.3 Conclusiones | 10-15 pages |
|
||||
| **3. Objetivos concretos y metodología** | 3.1 Objetivo general, 3.2 Objetivos específicos, 3.3 Metodología del trabajo | Variable |
|
||||
| **4. Desarrollo específico** | Varies by work type (see below) | Main content |
|
||||
| **5. Conclusiones y trabajo futuro** | 5.1 Conclusiones, 5.2 Líneas de trabajo futuro | Variable |
|
||||
| **Referencias bibliográficas** | APA format, alphabetical, hanging indent | Variable |
|
||||
| **Anexo A** | Código fuente y datos analizados | Repository URL |
|
||||
|
||||
**Total length:** 50-90 pages (excluding cover, resumen, abstract, indices, annexes)
|
||||
|
||||
### Chapter-Specific Requirements (from plantilla_individual.pdf)
|
||||
|
||||
#### 1. Introducción
|
||||
The introduction must give a clear first idea of what was intended, the conclusions reached, and the procedure followed. Key ideas: problem identification, justification of importance, general objectives, preview of contribution.
|
||||
|
||||
**1.1 Motivación:**
|
||||
- Present the problem to solve
|
||||
- Justify importance to educational/scientific community
|
||||
- Answer: What problem? What are the causes? Why is it relevant?
|
||||
- Must include references to prior research
|
||||
|
||||
**1.2 Planteamiento del trabajo:**
|
||||
- Briefly state the problem/need detected
|
||||
- Describe the proposal and purpose
|
||||
- Answer: How to solve? What is proposed?
|
||||
|
||||
**1.3 Estructura del trabajo:**
|
||||
- Briefly describe what each subsequent chapter contains
|
||||
|
||||
#### 2. Contexto y estado del arte
|
||||
Study the application domain in depth, citing numerous references. Must consult different sources (not just online - also technical manuals, books).
|
||||
|
||||
**2.1 Contexto del problema:**
|
||||
- Deep study of the application domain
|
||||
|
||||
**2.2 Estado del arte:**
|
||||
- Antecedents, current studies, comparison of existing tools
|
||||
- Must reference key authors in the field (justify exclusions)
|
||||
|
||||
**2.3 Conclusiones:**
|
||||
- Summary linking research to the work to be done
|
||||
- How findings affect the specific development
|
||||
|
||||
#### 3. Objetivos concretos y metodología de trabajo
|
||||
Bridge between domain study and contribution. Three required elements: (1) general objective, (2) specific objectives, (3) methodology.
|
||||
|
||||
**3.1 Objetivo general:**
|
||||
- Must be SMART (Doran, 1981)
|
||||
- Focus on achieving an observable effect, not just "create a tool"
|
||||
- Example: "Mejorar el servicio X logrando Y valorado positivamente (mínimo 4/5) por Z"
|
||||
|
||||
**3.2 Objetivos específicos:**
|
||||
- Divide general objective into analyzable sub-objectives
|
||||
- Must be SMART
|
||||
- Use infinitive verbs: Analizar, Calcular, Clasificar, Comparar, Conocer, Cuantificar, Desarrollar, Describir, Descubrir, Determinar, Establecer, Explorar, Identificar, Indagar, Medir, Sintetizar, Verificar
|
||||
- Typically ~5 objectives: 1-2 about state of art, 2-3 about development
|
||||
|
||||
**3.3 Metodología del trabajo:**
|
||||
- Describe steps to achieve objectives
|
||||
- Explain WHY each step
|
||||
- What instruments will be used
|
||||
- How results will be analyzed
|
||||
|
||||
#### 4. Desarrollo específico de la contribución
|
||||
Structure depends on work type. Organize by methodology phases/activities.
|
||||
|
||||
**For Type 1 (Piloto experimental):**
|
||||
- 4.1 Descripción detallada del experimento
|
||||
- Technologies used (with justification)
|
||||
- How pilot was organized
|
||||
- Participants (demographics)
|
||||
- Automatic evaluation techniques
|
||||
- How experiment proceeded
|
||||
- Monitoring/evaluation instruments
|
||||
- Statistical analysis types
|
||||
- 4.2 Descripción de los resultados (objective, no interpretation)
|
||||
- Summary tables, result graphs, relevant data identification
|
||||
- 4.3 Discusión
|
||||
- Relevance of results, explanations for anomalies, highlight key findings
|
||||
|
||||
**For Type 3 (Comparativa de soluciones):**
|
||||
- 4.1 Planteamiento de la comparativa
|
||||
- Problem identification, alternative solutions to evaluate
|
||||
- Success criteria, measures to take
|
||||
- 4.2 Desarrollo de la comparativa
|
||||
- All results and measurements obtained
|
||||
- Graphs, tables, data visualization
|
||||
- 4.3 Discusión y análisis de resultados
|
||||
- Discussion of meaning, advantages/disadvantages of solutions
|
||||
|
||||
#### 5. Conclusiones y trabajo futuro
|
||||
|
||||
**5.1 Conclusiones:**
|
||||
- Summary of problem, approach, and why solution is valid
|
||||
- Summary of contributions
|
||||
- **Relate contributions and results to objectives** - discuss degree of achievement
|
||||
|
||||
**5.2 Líneas de trabajo futuro:**
|
||||
- Future work that would add value
|
||||
- Justify how contribution can be used and in what fields
|
||||
|
||||
### SMART Objectives Requirements
|
||||
|
||||
ALL objectives (general and specific) MUST be SMART:
|
||||
|
||||
| Criterion | Requirement | Example from this thesis |
|
||||
|-----------|-------------|-------------------------|
|
||||
| **S**pecific | Clearly define what to achieve | "Optimizar PaddleOCR para documentos en español" |
|
||||
| **M**easurable | Quantifiable success metric | "CER < 2%" |
|
||||
| **A**ttainable | Feasible with available resources | "Sin GPU, usando optimización de hiperparámetros" |
|
||||
| **R**elevant | Demonstrable impact | "Mejora extracción de texto en documentos académicos" |
|
||||
| **T**ime-bound | Achievable in timeframe | "Un cuatrimestre" |
|
||||
|
||||
### Citation and Reference Rules
|
||||
|
||||
#### APA Format is MANDATORY
|
||||
|
||||
Reference guide: https://bibliografiaycitas.unir.net/
|
||||
|
||||
**In-text citations:**
|
||||
- Single author: (Du, 2020) or Du (2020)
|
||||
- Two authors: (Du & Li, 2020)
|
||||
- Three+ authors: (Du et al., 2020)
|
||||
|
||||
**Reference list examples:**
|
||||
```
|
||||
# Journal article with DOI
|
||||
Shi, B., Bai, X., & Yao, C. (2016). An end-to-end trainable neural network
|
||||
for image-based sequence recognition. IEEE Transactions on Pattern
|
||||
Analysis and Machine Intelligence, 39(11), 2298-2304.
|
||||
https://doi.org/10.1109/TPAMI.2016.2646371
|
||||
|
||||
# Conference paper
|
||||
Akiba, T., Sano, S., Yanase, T., Ohta, T., & Koyama, M. (2019). Optuna:
|
||||
A next-generation hyperparameter optimization framework. Proceedings
|
||||
of the 25th ACM SIGKDD, 2623-2631.
|
||||
https://doi.org/10.1145/3292500.3330701
|
||||
|
||||
# arXiv preprint
|
||||
Du, Y., Li, C., Guo, R., ... & Wang, H. (2020). PP-OCR: A practical ultra
|
||||
lightweight OCR system. arXiv preprint arXiv:2009.09941.
|
||||
https://arxiv.org/abs/2009.09941
|
||||
|
||||
# Software/GitHub repository
|
||||
PaddlePaddle. (2024). PaddleOCR: Awesome multilingual OCR toolkits based
|
||||
on PaddlePaddle. GitHub. https://github.com/PaddlePaddle/PaddleOCR
|
||||
|
||||
# Book
|
||||
Cohen, J. (1988). Statistical power analysis for the behavioral sciences
|
||||
(2nd ed.). Lawrence Erlbaum Associates.
|
||||
```
|
||||
|
||||
#### Reference Rules
|
||||
- **NO Wikipedia citations**
|
||||
- Include variety: books, conferences, journal articles (not just URLs)
|
||||
- All cited references must appear in reference list
|
||||
- All references in list must be cited in text
|
||||
- Order alphabetically by first author's surname
|
||||
- Include DOI or URL when available
|
||||
|
||||
### Document Formatting Rules
|
||||
|
||||
#### Page Setup
|
||||
| Element | Specification |
|
||||
|---------|--------------|
|
||||
| Page size | A4 |
|
||||
| Left margin | 3.0 cm |
|
||||
| Right margin | 2.0 cm |
|
||||
| Top/Bottom margins | 2.5 cm |
|
||||
| Header | Student name + TFE title |
|
||||
| Footer | Page number |
|
||||
|
||||
#### Typography
|
||||
| Element | Format |
|
||||
|---------|--------|
|
||||
| Body text | Calibri 12, justified, 1.5 line spacing, 6pt before/after |
|
||||
| Título 1 | Calibri Light 18, blue, justified, 1.5 spacing |
|
||||
| Título 2 | Calibri Light 14, blue, justified, 1.5 spacing |
|
||||
| Título 3 | Calibri Light 12, justified, 1.5 spacing |
|
||||
| Footnotes | Calibri 10, justified, single spacing |
|
||||
| Code | Can reduce to 9pt if needed |
|
||||
|
||||
#### Tables and Figures (from plantilla_individual.pdf)
|
||||
|
||||
**Table format example:**
|
||||
```
|
||||
Tabla 1. Ejemplo de tabla con sus principales elementos.
|
||||
[TABLE CONTENT]
|
||||
Fuente: American Psychological Association, 2020a.
|
||||
```
|
||||
|
||||
**Figure format example:**
|
||||
```
|
||||
Figura 1. Ejemplo de figura realizada para nuestro trabajo.
|
||||
[FIGURE]
|
||||
Fuente: American Psychological Association, 2020b.
|
||||
```
|
||||
|
||||
**Rules:**
|
||||
- **Title position**: Above the table/figure
|
||||
- **Numbering format**: "**Tabla 1.**" / "**Figura 1.**" (Calibri 12, bold)
|
||||
- **Title text**: Calibri 12, italic (after the number)
|
||||
- **Source**: Below, centered, format "Fuente: Author, Year."
|
||||
- Can reduce font to 9pt for dense tables
|
||||
- Can use landscape orientation for large tables
|
||||
- Tables should have horizontal lines only (no vertical lines) per APA style
|
||||
|
||||
### Writing Style Rules
|
||||
|
||||
#### MUST DO:
|
||||
- Each chapter starts with introductory paragraph explaining content
|
||||
- Each paragraph has at least 3 sentences
|
||||
- Verify originality (cite all sources)
|
||||
- Check spelling with Word corrector
|
||||
- Ensure logical flow between paragraphs
|
||||
- Define concepts and include pertinent citations
|
||||
|
||||
#### MUST NOT DO:
|
||||
- Two consecutive headings without text between them
|
||||
- Superfluous phrases and repetition of ideas
|
||||
- Short paragraphs (less than 3 sentences)
|
||||
- Missing figure/table numbers or titles
|
||||
- Broken index generation
|
||||
|
||||
### Annexes Requirements
|
||||
|
||||
**Anexo A - Código fuente y datos:**
|
||||
- Include repository URL where code is hosted
|
||||
- Student must be sole author and owner of repository
|
||||
- No commits from other users
|
||||
- Data used should also be in repository
|
||||
- If confidential (company project), justify why not shared
|
||||
|
||||
### Final Submission
|
||||
|
||||
- **Drafts**: Submit in Word format
|
||||
- **Final deposit**: Submit in PDF format
|
||||
- Verify all indices generate correctly before final submission
|
||||
|
||||
---
|
||||
|
||||
## Guidelines for Claude
|
||||
|
||||
### When Working on This Project
|
||||
### CRITICAL: Academic Rigor Requirements
|
||||
|
||||
1. **Be rigorous with data**: Only cite numbers from actual CSV files and notebook outputs. Do not fabricate comparison data.
|
||||
**This is a Master's Thesis. Academic rigor is NON-NEGOTIABLE.**
|
||||
|
||||
2. **Reference sources**: When discussing results, reference the specific files:
|
||||
- Ray Tune results: `src/raytune_paddle_subproc_results_20251207_192320.csv`
|
||||
- Benchmark results: `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`
|
||||
#### DO NOT:
|
||||
- **NEVER fabricate data or statistics** - Every number must come from an actual file in this repository
|
||||
- **NEVER invent comparison results** - If we don't have data for EasyOCR or DocTR comparisons, don't make up numbers
|
||||
- **NEVER assume or estimate values** - If a metric isn't in the CSV/notebook, don't include it
|
||||
- **NEVER extrapolate beyond what the data shows** - 24 pages is a limited dataset, acknowledge this
|
||||
- **NEVER claim results that weren't measured** - Only report what was actually computed
|
||||
|
||||
3. **Key files to read first**:
|
||||
- This file (`claude.md`) for context
|
||||
- `README.md` for current project state
|
||||
- Relevant `docs/` chapter for specific topics
|
||||
#### ALWAYS:
|
||||
- **Read the source file first** before citing any result
|
||||
- **Quote exact values** from CSV files (e.g., CER 0.011535 not "approximately 1%")
|
||||
- **Reference the specific file and location** for every data point
|
||||
- **Acknowledge limitations** explicitly (dataset size, CPU-only, single document type)
|
||||
- **Distinguish between measured results and interpretations**
|
||||
|
||||
4. **Language**: Documentation is in Spanish (thesis requirement), code comments in English.
|
||||
#### Data Sources (ONLY use these):
|
||||
| Data Type | Source File |
|
||||
|-----------|-------------|
|
||||
| Ray Tune 64 trials | `src/raytune_paddle_subproc_results_20251207_192320.csv` |
|
||||
| Per-page benchmark | `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv` |
|
||||
| Experiment code | `src/paddle_ocr_fine_tune_unir_raytune.ipynb` |
|
||||
| Final comparison | Output cells in the notebook (baseline vs optimized) |
|
||||
|
||||
5. **Hardware context**: Remember this is CPU-only execution. Any suggestions about GPU training or real-time processing should acknowledge this limitation.
|
||||
#### Example of WRONG vs RIGHT:
|
||||
|
||||
**WRONG:** "EasyOCR achieved 8.5% CER while PaddleOCR achieved 5.2% CER"
|
||||
(We don't have this comparison data in our results files)
|
||||
|
||||
**RIGHT:** "PaddleOCR with baseline configuration achieved CER between 1.54% and 6.40% across pages 5-9 (source: `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`)"
|
||||
|
||||
**WRONG:** "The optimization improved results by approximately 80%"
|
||||
|
||||
**RIGHT:** "The optimization reduced CER from 7.78% to 1.49%, a reduction of 80.9% (source: final comparison in `paddle_ocr_fine_tune_unir_raytune.ipynb`)"
|
||||
|
||||
### When Working on Documentation
|
||||
|
||||
1. **Read UNIR guidelines first**: Check `instructions/instrucciones.pdf` for structure requirements
|
||||
|
||||
2. **Follow chapter structure**: Each chapter has specific content requirements per UNIR guidelines
|
||||
|
||||
3. **References are UNIFIED**: All references go in `docs/06_referencias_bibliograficas.md`, NOT per-chapter
|
||||
|
||||
4. **Use APA format**: All citations must follow APA style
|
||||
|
||||
5. **Include "Fuentes de datos"**: Each chapter should list which repository files the data came from
|
||||
|
||||
6. **Language**: Documentation is in Spanish (thesis requirement), code comments in English
|
||||
|
||||
7. **Hardware context**: Remember this is CPU-only execution. Any suggestions about GPU training should acknowledge this limitation
|
||||
|
||||
8. **When in doubt, ask**: If the user requests data that doesn't exist, ask rather than inventing numbers
|
||||
|
||||
### Common Tasks
|
||||
|
||||
- **Adding new experiments**: Update `src/paddle_ocr_fine_tune_unir_raytune.ipynb`
|
||||
- **Updating documentation**: Edit files in `docs/`
|
||||
- **Adding references**: Add to `docs/06_referencias_bibliograficas.md` (unified list)
|
||||
- **Dataset expansion**: Use `src/prepare_dataset.ipynb` as template
|
||||
- **Running evaluations**: Use `src/paddle_ocr_tuning.py` CLI
|
||||
|
||||
---
|
||||
|
||||
## Experiment Details
|
||||
|
||||
### Ray Tune Configuration
|
||||
|
||||
@@ -41,12 +41,9 @@ El presente documento se organiza en los siguientes capítulos:
|
||||
|
||||
**Capítulo 3 - Objetivos y Metodología**: Se definen los objetivos SMART del trabajo y se describe la metodología experimental seguida, incluyendo la preparación del dataset, las métricas de evaluación y el proceso de optimización con Ray Tune.
|
||||
|
||||
**Capítulo 4 - Comparativa de Soluciones OCR**: Se presentan los resultados del benchmark inicial comparando EasyOCR, PaddleOCR y DocTR, justificando la selección de PaddleOCR para la fase de optimización.
|
||||
**Capítulo 4 - Desarrollo Específico de la Contribución**: Este capítulo presenta el desarrollo completo del estudio comparativo y la optimización de hiperparámetros de sistemas OCR, estructurado en tres secciones: (4.1) planteamiento de la comparativa con la evaluación de EasyOCR, PaddleOCR y DocTR; (4.2) desarrollo de la comparativa con la optimización de hiperparámetros mediante Ray Tune; y (4.3) discusión y análisis de resultados.
|
||||
|
||||
**Capítulo 5 - Optimización de Hiperparámetros**: Se describe el experimento de optimización con Ray Tune, analizando el impacto de cada hiperparámetro y las correlaciones identificadas.
|
||||
|
||||
**Capítulo 6 - Resultados y Discusión**: Se presentan los resultados finales comparando el baseline con la configuración optimizada, incluyendo análisis estadísticos y visualizaciones.
|
||||
|
||||
**Capítulo 7 - Conclusiones y Trabajo Futuro**: Se resumen las contribuciones del trabajo, se discute el grado de cumplimiento de los objetivos y se proponen líneas de trabajo futuro.
|
||||
**Capítulo 5 - Conclusiones y Trabajo Futuro**: Se resumen las contribuciones del trabajo, se discute el grado de cumplimiento de los objetivos y se proponen líneas de trabajo futuro.
|
||||
|
||||
**Anexos**: Se incluye el enlace al repositorio de código fuente y datos, así como tablas completas de resultados experimentales.
|
||||
|
||||
|
||||
@@ -177,3 +177,4 @@ Este capítulo ha presentado:
|
||||
4. Las particularidades del OCR para el idioma español
|
||||
|
||||
El estado del arte revela que, si bien existen soluciones OCR de alta calidad, su optimización para dominios específicos mediante ajuste de hiperparámetros (sin fine-tuning) ha recibido poca atención. Este trabajo contribuye a llenar ese vacío proponiendo una metodología reproducible para la optimización de PaddleOCR en documentos académicos en español.
|
||||
|
||||
|
||||
@@ -285,4 +285,5 @@ Este capítulo ha establecido:
|
||||
4. El espacio de búsqueda de hiperparámetros y la configuración de Ray Tune
|
||||
5. Las limitaciones reconocidas del enfoque
|
||||
|
||||
El siguiente capítulo presenta los resultados del benchmark comparativo inicial entre las tres soluciones OCR evaluadas.
|
||||
El siguiente capítulo presenta el desarrollo específico de la contribución, incluyendo el benchmark comparativo de soluciones OCR, la optimización de hiperparámetros y el análisis de resultados.
|
||||
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
# Capítulo 4: Comparativa de Soluciones OCR
|
||||
|
||||
## 4.1 Introducción
|
||||
|
||||
Este capítulo presenta los resultados del estudio comparativo realizado entre tres soluciones OCR de código abierto: EasyOCR, PaddleOCR y DocTR. Los experimentos fueron documentados en el notebook `ocr_benchmark_notebook.ipynb` del repositorio. El objetivo es identificar el modelo base más prometedor para la posterior fase de optimización de hiperparámetros.
|
||||
|
||||
## 4.2 Configuración del Experimento
|
||||
|
||||
### 4.2.1 Dataset de Evaluación
|
||||
|
||||
Se utilizó el documento "Instrucciones para la redacción y elaboración del TFE" del Máster Universitario en Inteligencia Artificial de UNIR, ubicado en la carpeta `instructions/`.
|
||||
|
||||
| Característica | Valor |
|
||||
|----------------|-------|
|
||||
| Número de páginas evaluadas | 5 (páginas 1-5 en benchmark inicial) |
|
||||
| Formato | PDF digital (no escaneado) |
|
||||
| Idioma | Español |
|
||||
| Resolución de conversión | 300 DPI |
|
||||
|
||||
### 4.2.2 Configuración de los Modelos
|
||||
|
||||
Según el código en `ocr_benchmark_notebook.ipynb`:
|
||||
|
||||
**EasyOCR**:
|
||||
```python
|
||||
easyocr_reader = easyocr.Reader(['es', 'en']) # Spanish and English
|
||||
```
|
||||
|
||||
**PaddleOCR (PP-OCRv5)**:
|
||||
```python
|
||||
paddleocr_model = PaddleOCR(
|
||||
text_detection_model_name="PP-OCRv5_server_det",
|
||||
text_recognition_model_name="PP-OCRv5_server_rec",
|
||||
use_doc_orientation_classify=False,
|
||||
use_doc_unwarping=False,
|
||||
use_textline_orientation=True,
|
||||
)
|
||||
```
|
||||
Versión utilizada: PaddleOCR 3.2.0 (según output del notebook)
|
||||
|
||||
**DocTR**:
|
||||
```python
|
||||
doctr_model = ocr_predictor(det_arch="db_resnet50", reco_arch="sar_resnet31", pretrained=True)
|
||||
```
|
||||
|
||||
### 4.2.3 Métricas de Evaluación
|
||||
|
||||
Se utilizó la biblioteca `jiwer` para calcular CER y WER:
|
||||
```python
|
||||
from jiwer import wer, cer
|
||||
|
||||
def evaluate_text(reference, prediction):
|
||||
return {'WER': wer(reference, prediction), 'CER': cer(reference, prediction)}
|
||||
```
|
||||
|
||||
## 4.3 Resultados del Benchmark
|
||||
|
||||
### 4.3.1 Resultados de PaddleOCR (Datos del CSV)
|
||||
|
||||
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, se obtienen los siguientes resultados de PaddleOCR para las páginas 5-9 del documento:
|
||||
|
||||
| Página | WER | CER |
|
||||
|--------|-----|-----|
|
||||
| 5 | 12.16% | 6.33% |
|
||||
| 6 | 12.81% | 6.40% |
|
||||
| 7 | 11.06% | 6.24% |
|
||||
| 8 | 8.13% | 1.54% |
|
||||
| 9 | 10.61% | 5.58% |
|
||||
|
||||
**Promedio PaddleOCR (páginas 5-9):**
|
||||
- CER medio: ~5.22%
|
||||
- WER medio: ~10.95%
|
||||
|
||||
### 4.3.2 Comparativa de Modelos
|
||||
|
||||
Según la documentación del notebook `ocr_benchmark_notebook.ipynb`, los tres modelos evaluados representan diferentes paradigmas de OCR:
|
||||
|
||||
| Modelo | Tipo | Componentes | Fortalezas Clave |
|
||||
|--------|------|-------------|------------------|
|
||||
| **EasyOCR** | End-to-end (det + rec) | DB + CRNN/Transformer | Ligero, fácil de usar, multilingüe |
|
||||
| **PaddleOCR (PP-OCR)** | End-to-end (det + rec + cls) | DB + SRN/CRNN | Soporte multilingüe robusto, pipeline configurable |
|
||||
| **DocTR** | End-to-end (det + rec) | DB/LinkNet + CRNN/SAR/VitSTR | Orientado a investigación, API limpia |
|
||||
|
||||
### 4.3.3 Ejemplo de Salida OCR
|
||||
|
||||
Del archivo CSV, un ejemplo de predicción de PaddleOCR para la página 8:
|
||||
|
||||
> "Escribe siempre al menos un párrafo de introducción en cada capítulo o apartado, explicando de qué vas a tratar en esa sección. Evita que aparezcan dos encabezados de nivel consecutivos sin ningún texto entre medias. [...] En esta titulacióon se cita de acuerdo con la normativa Apa."
|
||||
|
||||
**Errores observados en este ejemplo:**
|
||||
- `titulacióon` en lugar de `titulación` (carácter duplicado)
|
||||
- `Apa` en lugar de `APA` (capitalización)
|
||||
|
||||
## 4.4 Justificación de la Selección de PaddleOCR
|
||||
|
||||
### 4.4.1 Criterios de Selección
|
||||
|
||||
Basándose en los resultados obtenidos y la documentación del benchmark:
|
||||
|
||||
1. **Rendimiento**: PaddleOCR obtuvo CER entre 1.54% y 6.40% en las páginas evaluadas
|
||||
2. **Configurabilidad**: PaddleOCR ofrece múltiples hiperparámetros ajustables:
|
||||
- Umbrales de detección (`text_det_thresh`, `text_det_box_thresh`)
|
||||
- Umbral de reconocimiento (`text_rec_score_thresh`)
|
||||
- Componentes opcionales (`use_textline_orientation`, `use_doc_orientation_classify`, `use_doc_unwarping`)
|
||||
|
||||
3. **Documentación oficial**: [PaddleOCR Documentation](https://www.paddleocr.ai/v3.0.0/en/version3.x/pipeline_usage/OCR.html)
|
||||
|
||||
### 4.4.2 Decisión
|
||||
|
||||
**Se selecciona PaddleOCR (PP-OCRv5)** para la fase de optimización debido a:
|
||||
- Resultados iniciales prometedores (CER ~5%)
|
||||
- Alta configurabilidad de hiperparámetros de inferencia
|
||||
- Pipeline modular que permite experimentación
|
||||
|
||||
## 4.5 Limitaciones del Benchmark
|
||||
|
||||
1. **Tamaño reducido**: Solo 5 páginas evaluadas en el benchmark comparativo inicial
|
||||
2. **Único tipo de documento**: Documentos académicos de UNIR únicamente
|
||||
3. **Ground truth**: El texto de referencia se extrajo automáticamente del PDF, lo cual puede introducir errores en layouts complejos
|
||||
|
||||
## 4.6 Resumen del Capítulo
|
||||
|
||||
Este capítulo ha presentado:
|
||||
|
||||
1. La configuración del benchmark según `ocr_benchmark_notebook.ipynb`
|
||||
2. Los resultados cuantitativos de PaddleOCR del archivo CSV de resultados
|
||||
3. La justificación de la selección de PaddleOCR para optimización
|
||||
|
||||
**Fuentes de datos utilizadas:**
|
||||
- `ocr_benchmark_notebook.ipynb`: Código del benchmark
|
||||
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`: Resultados numéricos
|
||||
- Documentación oficial de PaddleOCR
|
||||
533
docs/04_desarrollo_especifico.md
Normal file
533
docs/04_desarrollo_especifico.md
Normal file
@@ -0,0 +1,533 @@
|
||||
# Capítulo 4: Desarrollo Específico de la Contribución
|
||||
|
||||
Este capítulo presenta el desarrollo completo del estudio comparativo y la optimización de hiperparámetros de sistemas OCR. Se estructura según el tipo de trabajo "Comparativa de soluciones" establecido por las instrucciones de UNIR: planteamiento de la comparativa (4.1), desarrollo de la comparativa (4.2), y discusión y análisis de resultados (4.3).
|
||||
|
||||
## 4.1 Planteamiento de la Comparativa: Soluciones OCR
|
||||
|
||||
### 4.1.1 Introducción
|
||||
|
||||
Esta sección presenta los resultados del estudio comparativo realizado entre tres soluciones OCR de código abierto: EasyOCR, PaddleOCR y DocTR. Los experimentos fueron documentados en el notebook `ocr_benchmark_notebook.ipynb` del repositorio. El objetivo es identificar el modelo base más prometedor para la posterior fase de optimización de hiperparámetros.
|
||||
|
||||
### 4.1.2 Configuración del Experimento
|
||||
|
||||
#### Dataset de Evaluación
|
||||
|
||||
Se utilizó el documento "Instrucciones para la redacción y elaboración del TFE" del Máster Universitario en Inteligencia Artificial de UNIR, ubicado en la carpeta `instructions/`.
|
||||
|
||||
| Característica | Valor |
|
||||
|----------------|-------|
|
||||
| Número de páginas evaluadas | 5 (páginas 1-5 en benchmark inicial) |
|
||||
| Formato | PDF digital (no escaneado) |
|
||||
| Idioma | Español |
|
||||
| Resolución de conversión | 300 DPI |
|
||||
|
||||
#### Configuración de los Modelos
|
||||
|
||||
Según el código en `ocr_benchmark_notebook.ipynb`:
|
||||
|
||||
**EasyOCR**:
|
||||
```python
|
||||
easyocr_reader = easyocr.Reader(['es', 'en']) # Spanish and English
|
||||
```
|
||||
|
||||
**PaddleOCR (PP-OCRv5)**:
|
||||
```python
|
||||
paddleocr_model = PaddleOCR(
|
||||
text_detection_model_name="PP-OCRv5_server_det",
|
||||
text_recognition_model_name="PP-OCRv5_server_rec",
|
||||
use_doc_orientation_classify=False,
|
||||
use_doc_unwarping=False,
|
||||
use_textline_orientation=True,
|
||||
)
|
||||
```
|
||||
Versión utilizada: PaddleOCR 3.2.0 (según output del notebook)
|
||||
|
||||
**DocTR**:
|
||||
```python
|
||||
doctr_model = ocr_predictor(det_arch="db_resnet50", reco_arch="sar_resnet31", pretrained=True)
|
||||
```
|
||||
|
||||
#### Métricas de Evaluación
|
||||
|
||||
Se utilizó la biblioteca `jiwer` para calcular CER y WER:
|
||||
```python
|
||||
from jiwer import wer, cer
|
||||
|
||||
def evaluate_text(reference, prediction):
|
||||
return {'WER': wer(reference, prediction), 'CER': cer(reference, prediction)}
|
||||
```
|
||||
|
||||
### 4.1.3 Resultados del Benchmark
|
||||
|
||||
#### Resultados de PaddleOCR (Datos del CSV)
|
||||
|
||||
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, se obtienen los siguientes resultados de PaddleOCR para las páginas 5-9 del documento:
|
||||
|
||||
| Página | WER | CER |
|
||||
|--------|-----|-----|
|
||||
| 5 | 12.16% | 6.33% |
|
||||
| 6 | 12.81% | 6.40% |
|
||||
| 7 | 11.06% | 6.24% |
|
||||
| 8 | 8.13% | 1.54% |
|
||||
| 9 | 10.61% | 5.58% |
|
||||
|
||||
**Promedio PaddleOCR (páginas 5-9):**
|
||||
- CER medio: ~5.22%
|
||||
- WER medio: ~10.95%
|
||||
|
||||
#### Comparativa de Modelos
|
||||
|
||||
Según la documentación del notebook `ocr_benchmark_notebook.ipynb`, los tres modelos evaluados representan diferentes paradigmas de OCR:
|
||||
|
||||
| Modelo | Tipo | Componentes | Fortalezas Clave |
|
||||
|--------|------|-------------|------------------|
|
||||
| **EasyOCR** | End-to-end (det + rec) | DB + CRNN/Transformer | Ligero, fácil de usar, multilingüe |
|
||||
| **PaddleOCR (PP-OCR)** | End-to-end (det + rec + cls) | DB + SRN/CRNN | Soporte multilingüe robusto, pipeline configurable |
|
||||
| **DocTR** | End-to-end (det + rec) | DB/LinkNet + CRNN/SAR/VitSTR | Orientado a investigación, API limpia |
|
||||
|
||||
#### Ejemplo de Salida OCR
|
||||
|
||||
Del archivo CSV, un ejemplo de predicción de PaddleOCR para la página 8:
|
||||
|
||||
> "Escribe siempre al menos un párrafo de introducción en cada capítulo o apartado, explicando de qué vas a tratar en esa sección. Evita que aparezcan dos encabezados de nivel consecutivos sin ningún texto entre medias. [...] En esta titulacióon se cita de acuerdo con la normativa Apa."
|
||||
|
||||
**Errores observados en este ejemplo:**
|
||||
- `titulacióon` en lugar de `titulación` (carácter duplicado)
|
||||
- `Apa` en lugar de `APA` (capitalización)
|
||||
|
||||
### 4.1.4 Justificación de la Selección de PaddleOCR
|
||||
|
||||
#### Criterios de Selección
|
||||
|
||||
Basándose en los resultados obtenidos y la documentación del benchmark:
|
||||
|
||||
1. **Rendimiento**: PaddleOCR obtuvo CER entre 1.54% y 6.40% en las páginas evaluadas
|
||||
2. **Configurabilidad**: PaddleOCR ofrece múltiples hiperparámetros ajustables:
|
||||
- Umbrales de detección (`text_det_thresh`, `text_det_box_thresh`)
|
||||
- Umbral de reconocimiento (`text_rec_score_thresh`)
|
||||
- Componentes opcionales (`use_textline_orientation`, `use_doc_orientation_classify`, `use_doc_unwarping`)
|
||||
|
||||
3. **Documentación oficial**: [PaddleOCR Documentation](https://www.paddleocr.ai/v3.0.0/en/version3.x/pipeline_usage/OCR.html)
|
||||
|
||||
#### Decisión
|
||||
|
||||
**Se selecciona PaddleOCR (PP-OCRv5)** para la fase de optimización debido a:
|
||||
- Resultados iniciales prometedores (CER ~5%)
|
||||
- Alta configurabilidad de hiperparámetros de inferencia
|
||||
- Pipeline modular que permite experimentación
|
||||
|
||||
### 4.1.5 Limitaciones del Benchmark
|
||||
|
||||
1. **Tamaño reducido**: Solo 5 páginas evaluadas en el benchmark comparativo inicial
|
||||
2. **Único tipo de documento**: Documentos académicos de UNIR únicamente
|
||||
3. **Ground truth**: El texto de referencia se extrajo automáticamente del PDF, lo cual puede introducir errores en layouts complejos
|
||||
|
||||
### 4.1.6 Resumen de la Sección
|
||||
|
||||
Esta sección ha presentado:
|
||||
|
||||
1. La configuración del benchmark según `ocr_benchmark_notebook.ipynb`
|
||||
2. Los resultados cuantitativos de PaddleOCR del archivo CSV de resultados
|
||||
3. La justificación de la selección de PaddleOCR para optimización
|
||||
|
||||
**Fuentes de datos utilizadas:**
|
||||
- `ocr_benchmark_notebook.ipynb`: Código del benchmark
|
||||
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`: Resultados numéricos
|
||||
- Documentación oficial de PaddleOCR
|
||||
|
||||
## 4.2 Desarrollo de la Comparativa: Optimización de Hiperparámetros
|
||||
|
||||
### 4.2.1 Introducción
|
||||
|
||||
Esta sección describe el proceso de optimización de hiperparámetros de PaddleOCR utilizando Ray Tune con el algoritmo de búsqueda Optuna. Los experimentos fueron implementados en el notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb` y los resultados se almacenaron en `src/raytune_paddle_subproc_results_20251207_192320.csv`.
|
||||
|
||||
### 4.2.2 Configuración del Experimento
|
||||
|
||||
#### Entorno de Ejecución
|
||||
|
||||
Según los outputs del notebook:
|
||||
|
||||
| Componente | Versión/Especificación |
|
||||
|------------|------------------------|
|
||||
| Python | 3.11.9 |
|
||||
| PaddlePaddle | 3.2.2 |
|
||||
| PaddleOCR | 3.3.2 |
|
||||
| Ray | 2.52.1 |
|
||||
| GPU | No disponible (CPU only) |
|
||||
|
||||
#### Dataset
|
||||
|
||||
Se utilizó un dataset estructurado en `src/dataset/` creado mediante el notebook `src/prepare_dataset.ipynb`:
|
||||
|
||||
- **Estructura**: Carpetas con subcarpetas `img/` y `txt/` pareadas
|
||||
- **Páginas evaluadas por trial**: 5 (páginas 5-10 del documento)
|
||||
- **Gestión de datos**: Clase `ImageTextDataset` en `src/dataset_manager.py`
|
||||
|
||||
#### Espacio de Búsqueda
|
||||
|
||||
Según el código del notebook, se definió el siguiente espacio de búsqueda:
|
||||
|
||||
```python
|
||||
search_space = {
|
||||
"use_doc_orientation_classify": tune.choice([True, False]),
|
||||
"use_doc_unwarping": tune.choice([True, False]),
|
||||
"textline_orientation": tune.choice([True, False]),
|
||||
"text_det_thresh": tune.uniform(0.0, 0.7),
|
||||
"text_det_box_thresh": tune.uniform(0.0, 0.7),
|
||||
"text_det_unclip_ratio": tune.choice([0.0]), # Fijado
|
||||
"text_rec_score_thresh": tune.uniform(0.0, 0.7),
|
||||
}
|
||||
```
|
||||
|
||||
**Descripción de parámetros** (según documentación de PaddleOCR):
|
||||
|
||||
| Parámetro | Descripción |
|
||||
|-----------|-------------|
|
||||
| `use_doc_orientation_classify` | Clasificación de orientación del documento |
|
||||
| `use_doc_unwarping` | Corrección de deformación del documento |
|
||||
| `textline_orientation` | Clasificación de orientación de línea de texto |
|
||||
| `text_det_thresh` | Umbral de detección de píxeles de texto |
|
||||
| `text_det_box_thresh` | Umbral de caja de detección |
|
||||
| `text_det_unclip_ratio` | Coeficiente de expansión (fijado en 0.0) |
|
||||
| `text_rec_score_thresh` | Umbral de confianza de reconocimiento |
|
||||
|
||||
#### Configuración de Ray Tune
|
||||
|
||||
```python
|
||||
tuner = tune.Tuner(
|
||||
trainable_paddle_ocr,
|
||||
tune_config=tune.TuneConfig(
|
||||
metric="CER",
|
||||
mode="min",
|
||||
search_alg=OptunaSearch(),
|
||||
num_samples=64,
|
||||
max_concurrent_trials=2
|
||||
),
|
||||
run_config=air.RunConfig(verbose=2, log_to_file=False),
|
||||
param_space=search_space
|
||||
)
|
||||
```
|
||||
|
||||
- **Métrica objetivo**: CER (minimizar)
|
||||
- **Algoritmo de búsqueda**: Optuna (TPE - Tree-structured Parzen Estimator)
|
||||
- **Número de trials**: 64
|
||||
- **Trials concurrentes**: 2
|
||||
|
||||
### 4.2.3 Resultados de la Optimización
|
||||
|
||||
#### Estadísticas Descriptivas
|
||||
|
||||
Del archivo CSV de resultados (`raytune_paddle_subproc_results_20251207_192320.csv`):
|
||||
|
||||
| Estadística | CER | WER | Tiempo (s) | Tiempo/Página (s) |
|
||||
|-------------|-----|-----|------------|-------------------|
|
||||
| **count** | 64 | 64 | 64 | 64 |
|
||||
| **mean** | 5.25% | 14.28% | 347.61 | 69.42 |
|
||||
| **std** | 11.03% | 10.75% | 7.88 | 1.57 |
|
||||
| **min** | 1.15% | 9.89% | 320.97 | 64.10 |
|
||||
| **25%** | 1.20% | 10.04% | 344.24 | 68.76 |
|
||||
| **50%** | 1.23% | 10.20% | 346.42 | 69.19 |
|
||||
| **75%** | 4.03% | 13.20% | 350.14 | 69.93 |
|
||||
| **max** | 51.61% | 59.45% | 368.57 | 73.63 |
|
||||
|
||||
#### Mejor Configuración Encontrada
|
||||
|
||||
Según el análisis del notebook:
|
||||
|
||||
```
|
||||
Best CER: 0.011535 (1.15%)
|
||||
Best WER: 0.098902 (9.89%)
|
||||
|
||||
Configuración óptima:
|
||||
textline_orientation: True
|
||||
use_doc_orientation_classify: False
|
||||
use_doc_unwarping: False
|
||||
text_det_thresh: 0.4690
|
||||
text_det_box_thresh: 0.5412
|
||||
text_det_unclip_ratio: 0.0
|
||||
text_rec_score_thresh: 0.6350
|
||||
```
|
||||
|
||||
#### Análisis de Correlación
|
||||
|
||||
Correlación de Pearson entre parámetros y métricas de error (del notebook):
|
||||
|
||||
**Correlación con CER:**
|
||||
| Parámetro | Correlación |
|
||||
|-----------|-------------|
|
||||
| CER | 1.000 |
|
||||
| config/text_det_box_thresh | 0.226 |
|
||||
| config/text_rec_score_thresh | -0.161 |
|
||||
| **config/text_det_thresh** | **-0.523** |
|
||||
| config/text_det_unclip_ratio | NaN |
|
||||
|
||||
**Correlación con WER:**
|
||||
| Parámetro | Correlación |
|
||||
|-----------|-------------|
|
||||
| WER | 1.000 |
|
||||
| config/text_det_box_thresh | 0.227 |
|
||||
| config/text_rec_score_thresh | -0.173 |
|
||||
| **config/text_det_thresh** | **-0.521** |
|
||||
| config/text_det_unclip_ratio | NaN |
|
||||
|
||||
**Hallazgo clave**: El parámetro `text_det_thresh` muestra la correlación más fuerte (-0.52), indicando que valores más altos de este umbral tienden a reducir el error.
|
||||
|
||||
#### Impacto del Parámetro textline_orientation
|
||||
|
||||
Según el análisis del notebook, este parámetro booleano tiene el mayor impacto:
|
||||
|
||||
| textline_orientation | CER Medio | WER Medio |
|
||||
|---------------------|-----------|-----------|
|
||||
| True | ~3.76% | ~12.73% |
|
||||
| False | ~12.40% | ~21.71% |
|
||||
|
||||
**Interpretación del notebook**:
|
||||
> "7x better CER with textline_orientation=True. And the variance is much tighter — more reliable results. For Spanish business documents with mixed layouts (tables, headers, addresses), orientation classification helps PaddleOCR correctly order text lines."
|
||||
|
||||
#### Análisis de Fallos
|
||||
|
||||
Los trials con CER muy alto (>40%) se produjeron cuando:
|
||||
- `text_det_thresh` < 0.1 (valores muy bajos)
|
||||
- `textline_orientation = False`
|
||||
|
||||
Ejemplo de trial con fallo catastrófico:
|
||||
- CER: 51.61%
|
||||
- WER: 59.45%
|
||||
- Configuración: `text_det_thresh=0.017`, `textline_orientation=True`
|
||||
|
||||
### 4.2.4 Comparación Baseline vs Optimizado
|
||||
|
||||
#### Resultados sobre Dataset Completo (24 páginas)
|
||||
|
||||
Del análisis final del notebook ejecutando sobre las 24 páginas:
|
||||
|
||||
| Modelo | CER | WER |
|
||||
|--------|-----|-----|
|
||||
| PaddleOCR (Baseline) | 7.78% | 14.94% |
|
||||
| PaddleOCR-HyperAdjust | 1.49% | 7.62% |
|
||||
|
||||
#### Métricas de Mejora
|
||||
|
||||
| Métrica | Baseline | Optimizado | Mejora Absoluta | Reducción Error |
|
||||
|---------|----------|------------|-----------------|-----------------|
|
||||
| CER | 7.78% | 1.49% | -6.29 pp | 80.9% |
|
||||
| WER | 14.94% | 7.62% | -7.32 pp | 49.0% |
|
||||
|
||||
#### Interpretación (del notebook)
|
||||
|
||||
> "La optimización de hiperparámetros mejoró la precisión de caracteres de 92.2% a 98.5%, una ganancia de 6.3 puntos porcentuales. Aunque el baseline ya ofrecía resultados aceptables, la configuración optimizada reduce los errores residuales en un 80.9%."
|
||||
|
||||
**Impacto práctico**: En un documento de 10,000 caracteres:
|
||||
- Baseline: ~778 caracteres con error
|
||||
- Optimizado: ~149 caracteres con error
|
||||
- Diferencia: ~629 caracteres menos con errores
|
||||
|
||||
### 4.2.5 Tiempo de Ejecución
|
||||
|
||||
| Métrica | Valor |
|
||||
|---------|-------|
|
||||
| Tiempo total del experimento | ~6 horas (64 trials × ~6 min/trial) |
|
||||
| Tiempo medio por trial | 367.72 segundos |
|
||||
| Tiempo medio por página | 69.42 segundos |
|
||||
| Total páginas procesadas | 64 trials × 5 páginas = 320 evaluaciones |
|
||||
|
||||
### 4.2.6 Resumen de la Sección
|
||||
|
||||
Esta sección ha presentado:
|
||||
|
||||
1. **Configuración del experimento**: 64 trials con Ray Tune + Optuna sobre 7 hiperparámetros
|
||||
2. **Resultados estadísticos**: CER medio 5.25%, CER mínimo 1.15%
|
||||
3. **Hallazgos clave**:
|
||||
- `textline_orientation=True` es crítico (reduce CER ~70%)
|
||||
- `text_det_thresh` tiene correlación -0.52 con CER
|
||||
- Valores bajos de `text_det_thresh` (<0.1) causan fallos catastróficos
|
||||
4. **Mejora final**: CER reducido de 7.78% a 1.49% (reducción del 80.9%)
|
||||
|
||||
**Fuentes de datos:**
|
||||
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`: Código del experimento
|
||||
- `src/raytune_paddle_subproc_results_20251207_192320.csv`: Resultados de 64 trials
|
||||
- `src/paddle_ocr_tuning.py`: Script de evaluación
|
||||
|
||||
## 4.3 Discusión y Análisis de Resultados
|
||||
|
||||
### 4.3.1 Introducción
|
||||
|
||||
Esta sección presenta un análisis consolidado de los resultados obtenidos en las fases de benchmark comparativo y optimización de hiperparámetros. Se discuten las implicaciones prácticas y se evalúa el cumplimiento de los objetivos planteados.
|
||||
|
||||
### 4.3.2 Resumen de Resultados
|
||||
|
||||
#### Resultados del Benchmark Comparativo
|
||||
|
||||
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, PaddleOCR con configuración inicial (`use_textline_orientation=True`) obtuvo los siguientes resultados en las páginas 5-9:
|
||||
|
||||
| Página | WER | CER |
|
||||
|--------|-----|-----|
|
||||
| 5 | 12.16% | 6.33% |
|
||||
| 6 | 12.81% | 6.40% |
|
||||
| 7 | 11.06% | 6.24% |
|
||||
| 8 | 8.13% | 1.54% |
|
||||
| 9 | 10.61% | 5.58% |
|
||||
| **Promedio** | **10.95%** | **5.22%** |
|
||||
|
||||
#### Resultados de la Optimización con Ray Tune
|
||||
|
||||
Del archivo `src/raytune_paddle_subproc_results_20251207_192320.csv` (64 trials):
|
||||
|
||||
| Métrica | Valor |
|
||||
|---------|-------|
|
||||
| CER mínimo | 1.15% |
|
||||
| CER medio | 5.25% |
|
||||
| CER máximo | 51.61% |
|
||||
| WER mínimo | 9.89% |
|
||||
| WER medio | 14.28% |
|
||||
| WER máximo | 59.45% |
|
||||
|
||||
#### Comparación Final (Dataset Completo - 24 páginas)
|
||||
|
||||
Resultados del notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb`:
|
||||
|
||||
| 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% |
|
||||
|
||||
### 4.3.3 Análisis de Resultados
|
||||
|
||||
#### Mejora Obtenida
|
||||
|
||||
| Forma de Medición | Valor |
|
||||
|-------------------|-------|
|
||||
| Mejora en precisión de caracteres (absoluta) | +6.29 puntos porcentuales |
|
||||
| Reducción del CER (relativa) | 80.9% |
|
||||
| Mejora en precisión de palabras (absoluta) | +7.32 puntos porcentuales |
|
||||
| Reducción del WER (relativa) | 49.0% |
|
||||
| Precisión final de caracteres | 98.51% |
|
||||
|
||||
#### Impacto de Hiperparámetros Individuales
|
||||
|
||||
**Parámetro `textline_orientation`**
|
||||
|
||||
Este parámetro booleano demostró ser el más influyente:
|
||||
|
||||
| Valor | CER Medio | Impacto |
|
||||
|-------|-----------|---------|
|
||||
| True | ~3.76% | Rendimiento óptimo |
|
||||
| False | ~12.40% | 3.3x peor |
|
||||
|
||||
**Reducción del CER**: 69.7% cuando se habilita la clasificación de orientación de línea.
|
||||
|
||||
**Parámetro `text_det_thresh`**
|
||||
|
||||
Correlación con CER: **-0.523** (la más fuerte de los parámetros continuos)
|
||||
|
||||
| Rango | Comportamiento |
|
||||
|-------|----------------|
|
||||
| < 0.1 | Fallos catastróficos (CER 40-50%) |
|
||||
| 0.3 - 0.6 | Rendimiento óptimo |
|
||||
| Valor óptimo | 0.4690 |
|
||||
|
||||
**Parámetros con menor impacto**
|
||||
|
||||
| Parámetro | Correlación con CER | Valor óptimo |
|
||||
|-----------|---------------------|--------------|
|
||||
| text_det_box_thresh | +0.226 | 0.5412 |
|
||||
| text_rec_score_thresh | -0.161 | 0.6350 |
|
||||
| use_doc_orientation_classify | - | False |
|
||||
| use_doc_unwarping | - | False |
|
||||
|
||||
#### Configuración Óptima Final
|
||||
|
||||
```python
|
||||
config_optimizada = {
|
||||
"textline_orientation": True, # CRÍTICO
|
||||
"use_doc_orientation_classify": False,
|
||||
"use_doc_unwarping": False,
|
||||
"text_det_thresh": 0.4690, # Correlación -0.52
|
||||
"text_det_box_thresh": 0.5412,
|
||||
"text_det_unclip_ratio": 0.0,
|
||||
"text_rec_score_thresh": 0.6350,
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3.4 Discusión
|
||||
|
||||
#### Hallazgos Principales
|
||||
|
||||
1. **Importancia de la clasificación de orientación de línea**: El parámetro `textline_orientation=True` es el factor más determinante. Esto tiene sentido para documentos con layouts mixtos (tablas, encabezados, direcciones) donde el orden correcto de las líneas de texto es crucial.
|
||||
|
||||
2. **Umbral de detección crítico**: El parámetro `text_det_thresh` presenta un umbral mínimo efectivo (~0.1). Valores inferiores generan demasiados falsos positivos en la detección, corrompiendo el reconocimiento posterior.
|
||||
|
||||
3. **Componentes opcionales innecesarios**: Para documentos académicos digitales (no escaneados), los módulos de corrección de orientación de documento (`use_doc_orientation_classify`) y corrección de deformación (`use_doc_unwarping`) no aportan mejora e incluso pueden introducir overhead.
|
||||
|
||||
#### Interpretación de la Correlación Negativa
|
||||
|
||||
La correlación negativa de `text_det_thresh` (-0.52) con el CER indica que:
|
||||
- Umbrales más altos filtran detecciones de baja confianza
|
||||
- Esto reduce falsos positivos que generan texto erróneo
|
||||
- El reconocimiento es más preciso con menos regiones pero más confiables
|
||||
|
||||
#### Limitaciones de los Resultados
|
||||
|
||||
1. **Generalización**: Los resultados se obtuvieron sobre documentos de un único tipo (instrucciones académicas UNIR). La configuración óptima puede variar para otros tipos de documentos.
|
||||
|
||||
2. **Ground truth automático**: El texto de referencia se extrajo programáticamente del PDF. En layouts complejos, esto puede introducir errores en la evaluación.
|
||||
|
||||
3. **Ejecución en CPU**: Los tiempos reportados (~69s/página) corresponden a ejecución en CPU. Con GPU, los tiempos serían significativamente menores.
|
||||
|
||||
4. **Parámetro fijo**: `text_det_unclip_ratio` permaneció fijo en 0.0 durante todo el experimento por decisión de diseño.
|
||||
|
||||
#### Comparación con Objetivos
|
||||
|
||||
| Objetivo | Meta | Resultado | Cumplimiento |
|
||||
|----------|------|-----------|--------------|
|
||||
| OE1: Comparar soluciones OCR | Evaluar EasyOCR, PaddleOCR, DocTR | PaddleOCR seleccionado | ✓ |
|
||||
| OE2: Preparar dataset | Construir dataset estructurado | Dataset de 24 páginas | ✓ |
|
||||
| OE3: Identificar hiperparámetros críticos | Analizar correlaciones | `textline_orientation` y `text_det_thresh` identificados | ✓ |
|
||||
| OE4: Optimizar con Ray Tune | Mínimo 50 configuraciones | 64 trials ejecutados | ✓ |
|
||||
| OE5: Validar configuración | Documentar mejora | CER 7.78% → 1.49% | ✓ |
|
||||
| **Objetivo General** | CER < 2% | CER = 1.49% | ✓ |
|
||||
|
||||
### 4.3.5 Implicaciones Prácticas
|
||||
|
||||
#### Recomendaciones de Configuración
|
||||
|
||||
Para documentos académicos en español similares a los evaluados:
|
||||
|
||||
1. **Obligatorio**: `use_textline_orientation=True`
|
||||
2. **Recomendado**: `text_det_thresh` entre 0.4 y 0.5
|
||||
3. **Opcional**: `text_det_box_thresh` ~0.5, `text_rec_score_thresh` >0.6
|
||||
4. **No recomendado**: Habilitar `use_doc_orientation_classify` o `use_doc_unwarping` para documentos digitales
|
||||
|
||||
#### Impacto Cuantitativo
|
||||
|
||||
En un documento típico de 10,000 caracteres:
|
||||
|
||||
| Configuración | Errores estimados |
|
||||
|---------------|-------------------|
|
||||
| Baseline | ~778 caracteres |
|
||||
| Optimizada | ~149 caracteres |
|
||||
| **Reducción** | **629 caracteres menos con errores** |
|
||||
|
||||
#### Aplicabilidad
|
||||
|
||||
Esta metodología de optimización es aplicable cuando:
|
||||
- No se dispone de recursos GPU para fine-tuning
|
||||
- El modelo preentrenado ya tiene soporte para el idioma objetivo
|
||||
- Se busca mejorar rendimiento sin reentrenar
|
||||
|
||||
### 4.3.6 Resumen de la Sección
|
||||
|
||||
Esta sección ha presentado:
|
||||
|
||||
1. Los resultados consolidados del benchmark y la optimización
|
||||
2. El análisis del impacto de cada hiperparámetro
|
||||
3. La configuración óptima identificada
|
||||
4. La discusión de limitaciones y aplicabilidad
|
||||
5. El cumplimiento de los objetivos planteados
|
||||
|
||||
**Resultado principal**: Se logró reducir el CER del 7.78% al 1.49% (mejora del 80.9%) mediante optimización de hiperparámetros, cumpliendo el objetivo de alcanzar CER < 2%.
|
||||
|
||||
**Fuentes de datos:**
|
||||
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`
|
||||
- `src/raytune_paddle_subproc_results_20251207_192320.csv`
|
||||
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`
|
||||
@@ -1,8 +1,8 @@
|
||||
# Capítulo 7: Conclusiones y Trabajo Futuro
|
||||
# Capítulo 5: Conclusiones y Trabajo Futuro
|
||||
|
||||
## 7.1 Conclusiones
|
||||
## 5.1 Conclusiones
|
||||
|
||||
### 7.1.1 Conclusiones Generales
|
||||
### 5.1.1 Conclusiones Generales
|
||||
|
||||
Este Trabajo Fin de Máster ha demostrado que es posible mejorar significativamente el rendimiento de sistemas OCR preentrenados mediante optimización sistemática de hiperparámetros, sin requerir fine-tuning ni recursos GPU dedicados.
|
||||
|
||||
@@ -12,7 +12,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
|---------|----------|-----------|
|
||||
| CER | < 2% | **1.49%** |
|
||||
|
||||
### 7.1.2 Conclusiones Específicas
|
||||
### 5.1.2 Conclusiones Específicas
|
||||
|
||||
**Respecto a OE1 (Comparativa de soluciones OCR)**:
|
||||
- Se evaluaron tres soluciones OCR de código abierto: EasyOCR, PaddleOCR (PP-OCRv5) y DocTR
|
||||
@@ -39,7 +39,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
- La mejora obtenida fue del 80.9% en reducción del CER (7.78% → 1.49%)
|
||||
- La precisión de caracteres alcanzó el 98.51%
|
||||
|
||||
### 7.1.3 Hallazgos Clave
|
||||
### 5.1.3 Hallazgos Clave
|
||||
|
||||
1. **Arquitectura sobre umbrales**: Un único parámetro booleano (`textline_orientation`) tiene más impacto que todos los umbrales continuos combinados.
|
||||
|
||||
@@ -49,7 +49,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
|
||||
4. **Optimización sin fine-tuning**: Se puede mejorar significativamente el rendimiento de modelos preentrenados mediante ajuste de hiperparámetros de inferencia.
|
||||
|
||||
## 7.2 Contribuciones del Trabajo
|
||||
### 5.1.4 Contribuciones del Trabajo
|
||||
|
||||
1. **Metodología reproducible**: Se documenta un proceso completo de optimización de hiperparámetros OCR con Ray Tune + Optuna.
|
||||
|
||||
@@ -59,7 +59,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
|
||||
4. **Código fuente**: Todo el código está disponible en el repositorio GitHub para reproducción y extensión.
|
||||
|
||||
## 7.3 Limitaciones del Trabajo
|
||||
### 5.1.5 Limitaciones del Trabajo
|
||||
|
||||
1. **Tipo de documento único**: Los experimentos se realizaron únicamente sobre documentos académicos de UNIR. La generalización a otros tipos de documentos requiere validación adicional.
|
||||
|
||||
@@ -71,9 +71,9 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
|
||||
5. **Parámetro no explorado**: `text_det_unclip_ratio` permaneció fijo en 0.0 durante todo el experimento.
|
||||
|
||||
## 7.4 Trabajo Futuro
|
||||
## 5.2 Líneas de Trabajo Futuro
|
||||
|
||||
### 7.4.1 Extensiones Inmediatas
|
||||
### 5.2.1 Extensiones Inmediatas
|
||||
|
||||
1. **Validación cruzada**: Evaluar la configuración óptima en otros tipos de documentos en español (facturas, formularios, textos manuscritos).
|
||||
|
||||
@@ -83,7 +83,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
|
||||
4. **Evaluación con GPU**: Medir tiempos de inferencia con aceleración GPU.
|
||||
|
||||
### 7.4.2 Líneas de Investigación
|
||||
### 5.2.2 Líneas de Investigación
|
||||
|
||||
1. **Transfer learning de hiperparámetros**: Investigar si las configuraciones óptimas para un tipo de documento transfieren a otros dominios.
|
||||
|
||||
@@ -93,7 +93,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
|
||||
4. **Comparación con fine-tuning**: Cuantificar la brecha de rendimiento entre optimización de hiperparámetros y fine-tuning real.
|
||||
|
||||
### 7.4.3 Aplicaciones Prácticas
|
||||
### 5.2.3 Aplicaciones Prácticas
|
||||
|
||||
1. **Herramienta de configuración automática**: Desarrollar una herramienta que determine automáticamente la configuración óptima para un nuevo tipo de documento.
|
||||
|
||||
@@ -101,7 +101,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document
|
||||
|
||||
3. **Benchmark público**: Publicar un benchmark de OCR para documentos en español que facilite la comparación de soluciones.
|
||||
|
||||
## 7.5 Reflexión Final
|
||||
### 5.2.4 Reflexión Final
|
||||
|
||||
Este trabajo demuestra que, en un contexto de recursos limitados donde el fine-tuning de modelos de deep learning no es viable, la optimización de hiperparámetros representa una alternativa práctica y efectiva para mejorar sistemas OCR.
|
||||
|
||||
@@ -109,18 +109,3 @@ La metodología propuesta es reproducible, los resultados son cuantificables, y
|
||||
|
||||
El código fuente y los datos experimentales están disponibles públicamente para facilitar la reproducción y extensión de este trabajo.
|
||||
|
||||
---
|
||||
|
||||
## Referencias
|
||||
|
||||
**Herramientas y bibliotecas utilizadas:**
|
||||
|
||||
- PaddleOCR: https://github.com/PaddlePaddle/PaddleOCR
|
||||
- Ray Tune: https://docs.ray.io/en/latest/tune/index.html
|
||||
- Optuna: https://optuna.org/
|
||||
- PyMuPDF: https://pymupdf.readthedocs.io/
|
||||
- jiwer: https://github.com/jitsi/jiwer
|
||||
|
||||
**Repositorio del proyecto:**
|
||||
|
||||
- GitHub: https://seryus.ddns.net/unir/MastersThesis
|
||||
@@ -1,212 +0,0 @@
|
||||
# Capítulo 5: Optimización de Hiperparámetros
|
||||
|
||||
## 5.1 Introducción
|
||||
|
||||
Este capítulo describe el proceso de optimización de hiperparámetros de PaddleOCR utilizando Ray Tune con el algoritmo de búsqueda Optuna. Los experimentos fueron implementados en el notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb` y los resultados se almacenaron en `src/raytune_paddle_subproc_results_20251207_192320.csv`.
|
||||
|
||||
## 5.2 Configuración del Experimento
|
||||
|
||||
### 5.2.1 Entorno de Ejecución
|
||||
|
||||
Según los outputs del notebook:
|
||||
|
||||
| Componente | Versión/Especificación |
|
||||
|------------|------------------------|
|
||||
| Python | 3.11.9 |
|
||||
| PaddlePaddle | 3.2.2 |
|
||||
| PaddleOCR | 3.3.2 |
|
||||
| Ray | 2.52.1 |
|
||||
| GPU | No disponible (CPU only) |
|
||||
|
||||
### 5.2.2 Dataset
|
||||
|
||||
Se utilizó un dataset estructurado en `src/dataset/` creado mediante el notebook `src/prepare_dataset.ipynb`:
|
||||
|
||||
- **Estructura**: Carpetas con subcarpetas `img/` y `txt/` pareadas
|
||||
- **Páginas evaluadas por trial**: 5 (páginas 5-10 del documento)
|
||||
- **Gestión de datos**: Clase `ImageTextDataset` en `src/dataset_manager.py`
|
||||
|
||||
### 5.2.3 Espacio de Búsqueda
|
||||
|
||||
Según el código del notebook, se definió el siguiente espacio de búsqueda:
|
||||
|
||||
```python
|
||||
search_space = {
|
||||
"use_doc_orientation_classify": tune.choice([True, False]),
|
||||
"use_doc_unwarping": tune.choice([True, False]),
|
||||
"textline_orientation": tune.choice([True, False]),
|
||||
"text_det_thresh": tune.uniform(0.0, 0.7),
|
||||
"text_det_box_thresh": tune.uniform(0.0, 0.7),
|
||||
"text_det_unclip_ratio": tune.choice([0.0]), # Fijado
|
||||
"text_rec_score_thresh": tune.uniform(0.0, 0.7),
|
||||
}
|
||||
```
|
||||
|
||||
**Descripción de parámetros** (según documentación de PaddleOCR):
|
||||
|
||||
| Parámetro | Descripción |
|
||||
|-----------|-------------|
|
||||
| `use_doc_orientation_classify` | Clasificación de orientación del documento |
|
||||
| `use_doc_unwarping` | Corrección de deformación del documento |
|
||||
| `textline_orientation` | Clasificación de orientación de línea de texto |
|
||||
| `text_det_thresh` | Umbral de detección de píxeles de texto |
|
||||
| `text_det_box_thresh` | Umbral de caja de detección |
|
||||
| `text_det_unclip_ratio` | Coeficiente de expansión (fijado en 0.0) |
|
||||
| `text_rec_score_thresh` | Umbral de confianza de reconocimiento |
|
||||
|
||||
### 5.2.4 Configuración de Ray Tune
|
||||
|
||||
```python
|
||||
tuner = tune.Tuner(
|
||||
trainable_paddle_ocr,
|
||||
tune_config=tune.TuneConfig(
|
||||
metric="CER",
|
||||
mode="min",
|
||||
search_alg=OptunaSearch(),
|
||||
num_samples=64,
|
||||
max_concurrent_trials=2
|
||||
),
|
||||
run_config=air.RunConfig(verbose=2, log_to_file=False),
|
||||
param_space=search_space
|
||||
)
|
||||
```
|
||||
|
||||
- **Métrica objetivo**: CER (minimizar)
|
||||
- **Algoritmo de búsqueda**: Optuna (TPE - Tree-structured Parzen Estimator)
|
||||
- **Número de trials**: 64
|
||||
- **Trials concurrentes**: 2
|
||||
|
||||
## 5.3 Resultados de la Optimización
|
||||
|
||||
### 5.3.1 Estadísticas Descriptivas
|
||||
|
||||
Del archivo CSV de resultados (`raytune_paddle_subproc_results_20251207_192320.csv`):
|
||||
|
||||
| Estadística | CER | WER | Tiempo (s) | Tiempo/Página (s) |
|
||||
|-------------|-----|-----|------------|-------------------|
|
||||
| **count** | 64 | 64 | 64 | 64 |
|
||||
| **mean** | 5.25% | 14.28% | 347.61 | 69.42 |
|
||||
| **std** | 11.03% | 10.75% | 7.88 | 1.57 |
|
||||
| **min** | 1.15% | 9.89% | 320.97 | 64.10 |
|
||||
| **25%** | 1.20% | 10.04% | 344.24 | 68.76 |
|
||||
| **50%** | 1.23% | 10.20% | 346.42 | 69.19 |
|
||||
| **75%** | 4.03% | 13.20% | 350.14 | 69.93 |
|
||||
| **max** | 51.61% | 59.45% | 368.57 | 73.63 |
|
||||
|
||||
### 5.3.2 Mejor Configuración Encontrada
|
||||
|
||||
Según el análisis del notebook:
|
||||
|
||||
```
|
||||
Best CER: 0.011535 (1.15%)
|
||||
Best WER: 0.098902 (9.89%)
|
||||
|
||||
Configuración óptima:
|
||||
textline_orientation: True
|
||||
use_doc_orientation_classify: False
|
||||
use_doc_unwarping: False
|
||||
text_det_thresh: 0.4690
|
||||
text_det_box_thresh: 0.5412
|
||||
text_det_unclip_ratio: 0.0
|
||||
text_rec_score_thresh: 0.6350
|
||||
```
|
||||
|
||||
### 5.3.3 Análisis de Correlación
|
||||
|
||||
Correlación de Pearson entre parámetros y métricas de error (del notebook):
|
||||
|
||||
**Correlación con CER:**
|
||||
| Parámetro | Correlación |
|
||||
|-----------|-------------|
|
||||
| CER | 1.000 |
|
||||
| config/text_det_box_thresh | 0.226 |
|
||||
| config/text_rec_score_thresh | -0.161 |
|
||||
| **config/text_det_thresh** | **-0.523** |
|
||||
| config/text_det_unclip_ratio | NaN |
|
||||
|
||||
**Correlación con WER:**
|
||||
| Parámetro | Correlación |
|
||||
|-----------|-------------|
|
||||
| WER | 1.000 |
|
||||
| config/text_det_box_thresh | 0.227 |
|
||||
| config/text_rec_score_thresh | -0.173 |
|
||||
| **config/text_det_thresh** | **-0.521** |
|
||||
| config/text_det_unclip_ratio | NaN |
|
||||
|
||||
**Hallazgo clave**: El parámetro `text_det_thresh` muestra la correlación más fuerte (-0.52), indicando que valores más altos de este umbral tienden a reducir el error.
|
||||
|
||||
### 5.3.4 Impacto del Parámetro textline_orientation
|
||||
|
||||
Según el análisis del notebook, este parámetro booleano tiene el mayor impacto:
|
||||
|
||||
| textline_orientation | CER Medio | WER Medio |
|
||||
|---------------------|-----------|-----------|
|
||||
| True | ~3.76% | ~12.73% |
|
||||
| False | ~12.40% | ~21.71% |
|
||||
|
||||
**Interpretación del notebook**:
|
||||
> "7x better CER with textline_orientation=True. And the variance is much tighter — more reliable results. For Spanish business documents with mixed layouts (tables, headers, addresses), orientation classification helps PaddleOCR correctly order text lines."
|
||||
|
||||
### 5.3.5 Análisis de Fallos
|
||||
|
||||
Los trials con CER muy alto (>40%) se produjeron cuando:
|
||||
- `text_det_thresh` < 0.1 (valores muy bajos)
|
||||
- `textline_orientation = False`
|
||||
|
||||
Ejemplo de trial con fallo catastrófico:
|
||||
- CER: 51.61%
|
||||
- WER: 59.45%
|
||||
- Configuración: `text_det_thresh=0.017`, `textline_orientation=True`
|
||||
|
||||
## 5.4 Comparación Baseline vs Optimizado
|
||||
|
||||
### 5.4.1 Resultados sobre Dataset Completo (24 páginas)
|
||||
|
||||
Del análisis final del notebook ejecutando sobre las 24 páginas:
|
||||
|
||||
| Modelo | CER | WER |
|
||||
|--------|-----|-----|
|
||||
| PaddleOCR (Baseline) | 7.78% | 14.94% |
|
||||
| PaddleOCR-HyperAdjust | 1.49% | 7.62% |
|
||||
|
||||
### 5.4.2 Métricas de Mejora
|
||||
|
||||
| Métrica | Baseline | Optimizado | Mejora Absoluta | Reducción Error |
|
||||
|---------|----------|------------|-----------------|-----------------|
|
||||
| CER | 7.78% | 1.49% | -6.29 pp | 80.9% |
|
||||
| WER | 14.94% | 7.62% | -7.32 pp | 49.0% |
|
||||
|
||||
### 5.4.3 Interpretación (del notebook)
|
||||
|
||||
> "La optimización de hiperparámetros mejoró la precisión de caracteres de 92.2% a 98.5%, una ganancia de 6.3 puntos porcentuales. Aunque el baseline ya ofrecía resultados aceptables, la configuración optimizada reduce los errores residuales en un 80.9%."
|
||||
|
||||
**Impacto práctico**: En un documento de 10,000 caracteres:
|
||||
- Baseline: ~778 caracteres con error
|
||||
- Optimizado: ~149 caracteres con error
|
||||
- Diferencia: ~629 caracteres menos con errores
|
||||
|
||||
## 5.5 Tiempo de Ejecución
|
||||
|
||||
| Métrica | Valor |
|
||||
|---------|-------|
|
||||
| Tiempo total del experimento | ~6 horas (64 trials × ~6 min/trial) |
|
||||
| Tiempo medio por trial | 367.72 segundos |
|
||||
| Tiempo medio por página | 69.42 segundos |
|
||||
| Total páginas procesadas | 64 trials × 5 páginas = 320 evaluaciones |
|
||||
|
||||
## 5.6 Resumen del Capítulo
|
||||
|
||||
Este capítulo ha presentado:
|
||||
|
||||
1. **Configuración del experimento**: 64 trials con Ray Tune + Optuna sobre 7 hiperparámetros
|
||||
2. **Resultados estadísticos**: CER medio 5.25%, CER mínimo 1.15%
|
||||
3. **Hallazgos clave**:
|
||||
- `textline_orientation=True` es crítico (reduce CER ~70%)
|
||||
- `text_det_thresh` tiene correlación -0.52 con CER
|
||||
- Valores bajos de `text_det_thresh` (<0.1) causan fallos catastróficos
|
||||
4. **Mejora final**: CER reducido de 7.78% a 1.49% (reducción del 80.9%)
|
||||
|
||||
**Fuentes de datos:**
|
||||
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`: Código del experimento
|
||||
- `src/raytune_paddle_subproc_results_20251207_192320.csv`: Resultados de 64 trials
|
||||
- `src/paddle_ocr_tuning.py`: Script de evaluación
|
||||
67
docs/06_referencias_bibliograficas.md
Normal file
67
docs/06_referencias_bibliograficas.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# Referencias Bibliográficas
|
||||
|
||||
## Referencias
|
||||
|
||||
Akiba, T., Sano, S., Yanase, T., Ohta, T., & Koyama, M. (2019). Optuna: A next-generation hyperparameter optimization framework. *Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining*, 2623-2631. https://doi.org/10.1145/3292500.3330701
|
||||
|
||||
Baek, Y., Lee, B., Han, D., Yun, S., & Lee, H. (2019). Character region awareness for text detection. *Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition*, 9365-9374. https://doi.org/10.1109/CVPR.2019.00959
|
||||
|
||||
Bergstra, J., & Bengio, Y. (2012). Random search for hyper-parameter optimization. *Journal of Machine Learning Research*, 13(1), 281-305. https://jmlr.org/papers/v13/bergstra12a.html
|
||||
|
||||
Bergstra, J., Bardenet, R., Bengio, Y., & Kégl, B. (2011). Algorithms for hyper-parameter optimization. *Advances in Neural Information Processing Systems*, 24, 2546-2554. https://papers.nips.cc/paper/2011/hash/86e8f7ab32cfd12577bc2619bc635690-Abstract.html
|
||||
|
||||
Cohen, J. (1988). *Statistical power analysis for the behavioral sciences* (2nd ed.). Lawrence Erlbaum Associates.
|
||||
|
||||
Doran, G. T. (1981). There's a S.M.A.R.T. way to write management's goals and objectives. *Management Review*, 70(11), 35-36.
|
||||
|
||||
Du, Y., Li, C., Guo, R., Yin, X., Liu, W., Zhou, J., Bai, Y., Yu, Z., Yang, Y., Dang, Q., & Wang, H. (2020). PP-OCR: A practical ultra lightweight OCR system. *arXiv preprint arXiv:2009.09941*. https://arxiv.org/abs/2009.09941
|
||||
|
||||
Du, Y., Li, C., Guo, R., Cui, C., Liu, W., Zhou, J., Lu, B., Yang, Y., Liu, Q., Hu, X., Yu, D., & Wang, H. (2023). PP-OCRv4: Mobile scene text detection and recognition. *arXiv preprint arXiv:2310.05930*. https://arxiv.org/abs/2310.05930
|
||||
|
||||
Feurer, M., & Hutter, F. (2019). Hyperparameter optimization. In F. Hutter, L. Kotthoff, & J. Vanschoren (Eds.), *Automated machine learning: Methods, systems, challenges* (pp. 3-33). Springer. https://doi.org/10.1007/978-3-030-05318-5_1
|
||||
|
||||
He, P., Huang, W., Qiao, Y., Loy, C. C., & Tang, X. (2016). Reading scene text in deep convolutional sequences. *Proceedings of the AAAI Conference on Artificial Intelligence*, 30(1), 3501-3508. https://doi.org/10.1609/aaai.v30i1.10291
|
||||
|
||||
JaidedAI. (2020). EasyOCR: Ready-to-use OCR with 80+ supported languages. GitHub. https://github.com/JaidedAI/EasyOCR
|
||||
|
||||
Liang, J., Doermann, D., & Li, H. (2005). Camera-based analysis of text and documents: A survey. *International Journal of Document Analysis and Recognition*, 7(2), 84-104. https://doi.org/10.1007/s10032-004-0138-z
|
||||
|
||||
Liao, M., Wan, Z., Yao, C., Chen, K., & Bai, X. (2020). Real-time scene text detection with differentiable binarization. *Proceedings of the AAAI Conference on Artificial Intelligence*, 34(07), 11474-11481. https://doi.org/10.1609/aaai.v34i07.6812
|
||||
|
||||
Liaw, R., Liang, E., Nishihara, R., Moritz, P., Gonzalez, J. E., & Stoica, I. (2018). Tune: A research platform for distributed model selection and training. *arXiv preprint arXiv:1807.05118*. https://arxiv.org/abs/1807.05118
|
||||
|
||||
Mindee. (2021). DocTR: Document Text Recognition. GitHub. https://github.com/mindee/doctr
|
||||
|
||||
Moritz, P., Nishihara, R., Wang, S., Tumanov, A., Liaw, R., Liang, E., Elibol, M., Yang, Z., Paul, W., Jordan, M. I., & Stoica, I. (2018). Ray: A distributed framework for emerging AI applications. *13th USENIX Symposium on Operating Systems Design and Implementation (OSDI 18)*, 561-577. https://www.usenix.org/conference/osdi18/presentation/moritz
|
||||
|
||||
Morris, A. C., Maier, V., & Green, P. D. (2004). From WER and RIL to MER and WIL: Improved evaluation measures for connected speech recognition. *Eighth International Conference on Spoken Language Processing*. https://doi.org/10.21437/Interspeech.2004-668
|
||||
|
||||
PaddlePaddle. (2024). PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle. GitHub. https://github.com/PaddlePaddle/PaddleOCR
|
||||
|
||||
Pearson, K. (1895). Notes on regression and inheritance in the case of two parents. *Proceedings of the Royal Society of London*, 58, 240-242. https://doi.org/10.1098/rspl.1895.0041
|
||||
|
||||
PyMuPDF. (2024). PyMuPDF documentation. https://pymupdf.readthedocs.io/
|
||||
|
||||
Shi, B., Bai, X., & Yao, C. (2016). An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition. *IEEE Transactions on Pattern Analysis and Machine Intelligence*, 39(11), 2298-2304. https://doi.org/10.1109/TPAMI.2016.2646371
|
||||
|
||||
Smith, R. (2007). An overview of the Tesseract OCR engine. *Ninth International Conference on Document Analysis and Recognition (ICDAR 2007)*, 2, 629-633. https://doi.org/10.1109/ICDAR.2007.4376991
|
||||
|
||||
Zhou, X., Yao, C., Wen, H., Wang, Y., Zhou, S., He, W., & Liang, J. (2017). EAST: An efficient and accurate scene text detector. *Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition*, 5551-5560. https://doi.org/10.1109/CVPR.2017.283
|
||||
|
||||
Zoph, B., & Le, Q. V. (2017). Neural architecture search with reinforcement learning. *International Conference on Learning Representations (ICLR)*. https://arxiv.org/abs/1611.01578
|
||||
|
||||
---
|
||||
|
||||
## Herramientas y Bibliotecas Utilizadas
|
||||
|
||||
- **PaddleOCR**: https://github.com/PaddlePaddle/PaddleOCR
|
||||
- **Ray Tune**: https://docs.ray.io/en/latest/tune/index.html
|
||||
- **Optuna**: https://optuna.org/
|
||||
- **PyMuPDF**: https://pymupdf.readthedocs.io/
|
||||
- **jiwer**: https://github.com/jitsi/jiwer
|
||||
|
||||
---
|
||||
|
||||
## Repositorio del Proyecto
|
||||
|
||||
- **GitHub**: https://seryus.ddns.net/unir/MastersThesis
|
||||
@@ -1,183 +0,0 @@
|
||||
# Capítulo 6: Resultados y Discusión
|
||||
|
||||
## 6.1 Introducción
|
||||
|
||||
Este capítulo presenta un análisis consolidado de los resultados obtenidos en las fases de benchmark comparativo y optimización de hiperparámetros. Se discuten las implicaciones prácticas y se evalúa el cumplimiento de los objetivos planteados.
|
||||
|
||||
## 6.2 Resumen de Resultados
|
||||
|
||||
### 6.2.1 Resultados del Benchmark Comparativo
|
||||
|
||||
Del archivo `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`, PaddleOCR con configuración inicial (`use_textline_orientation=True`) obtuvo los siguientes resultados en las páginas 5-9:
|
||||
|
||||
| Página | WER | CER |
|
||||
|--------|-----|-----|
|
||||
| 5 | 12.16% | 6.33% |
|
||||
| 6 | 12.81% | 6.40% |
|
||||
| 7 | 11.06% | 6.24% |
|
||||
| 8 | 8.13% | 1.54% |
|
||||
| 9 | 10.61% | 5.58% |
|
||||
| **Promedio** | **10.95%** | **5.22%** |
|
||||
|
||||
### 6.2.2 Resultados de la Optimización con Ray Tune
|
||||
|
||||
Del archivo `src/raytune_paddle_subproc_results_20251207_192320.csv` (64 trials):
|
||||
|
||||
| Métrica | Valor |
|
||||
|---------|-------|
|
||||
| CER mínimo | 1.15% |
|
||||
| CER medio | 5.25% |
|
||||
| CER máximo | 51.61% |
|
||||
| WER mínimo | 9.89% |
|
||||
| WER medio | 14.28% |
|
||||
| WER máximo | 59.45% |
|
||||
|
||||
### 6.2.3 Comparación Final (Dataset Completo - 24 páginas)
|
||||
|
||||
Resultados del notebook `src/paddle_ocr_fine_tune_unir_raytune.ipynb`:
|
||||
|
||||
| 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% |
|
||||
|
||||
## 6.3 Análisis de Resultados
|
||||
|
||||
### 6.3.1 Mejora Obtenida
|
||||
|
||||
| Forma de Medición | Valor |
|
||||
|-------------------|-------|
|
||||
| Mejora en precisión de caracteres (absoluta) | +6.29 puntos porcentuales |
|
||||
| Reducción del CER (relativa) | 80.9% |
|
||||
| Mejora en precisión de palabras (absoluta) | +7.32 puntos porcentuales |
|
||||
| Reducción del WER (relativa) | 49.0% |
|
||||
| Precisión final de caracteres | 98.51% |
|
||||
|
||||
### 6.3.2 Impacto de Hiperparámetros Individuales
|
||||
|
||||
#### Parámetro `textline_orientation`
|
||||
|
||||
Este parámetro booleano demostró ser el más influyente:
|
||||
|
||||
| Valor | CER Medio | Impacto |
|
||||
|-------|-----------|---------|
|
||||
| True | ~3.76% | Rendimiento óptimo |
|
||||
| False | ~12.40% | 3.3x peor |
|
||||
|
||||
**Reducción del CER**: 69.7% cuando se habilita la clasificación de orientación de línea.
|
||||
|
||||
#### Parámetro `text_det_thresh`
|
||||
|
||||
Correlación con CER: **-0.523** (la más fuerte de los parámetros continuos)
|
||||
|
||||
| Rango | Comportamiento |
|
||||
|-------|----------------|
|
||||
| < 0.1 | Fallos catastróficos (CER 40-50%) |
|
||||
| 0.3 - 0.6 | Rendimiento óptimo |
|
||||
| Valor óptimo | 0.4690 |
|
||||
|
||||
#### Parámetros con menor impacto
|
||||
|
||||
| Parámetro | Correlación con CER | Valor óptimo |
|
||||
|-----------|---------------------|--------------|
|
||||
| text_det_box_thresh | +0.226 | 0.5412 |
|
||||
| text_rec_score_thresh | -0.161 | 0.6350 |
|
||||
| use_doc_orientation_classify | - | False |
|
||||
| use_doc_unwarping | - | False |
|
||||
|
||||
### 6.3.3 Configuración Óptima Final
|
||||
|
||||
```python
|
||||
config_optimizada = {
|
||||
"textline_orientation": True, # CRÍTICO
|
||||
"use_doc_orientation_classify": False,
|
||||
"use_doc_unwarping": False,
|
||||
"text_det_thresh": 0.4690, # Correlación -0.52
|
||||
"text_det_box_thresh": 0.5412,
|
||||
"text_det_unclip_ratio": 0.0,
|
||||
"text_rec_score_thresh": 0.6350,
|
||||
}
|
||||
```
|
||||
|
||||
## 6.4 Discusión
|
||||
|
||||
### 6.4.1 Hallazgos Principales
|
||||
|
||||
1. **Importancia de la clasificación de orientación de línea**: El parámetro `textline_orientation=True` es el factor más determinante. Esto tiene sentido para documentos con layouts mixtos (tablas, encabezados, direcciones) donde el orden correcto de las líneas de texto es crucial.
|
||||
|
||||
2. **Umbral de detección crítico**: El parámetro `text_det_thresh` presenta un umbral mínimo efectivo (~0.1). Valores inferiores generan demasiados falsos positivos en la detección, corrompiendo el reconocimiento posterior.
|
||||
|
||||
3. **Componentes opcionales innecesarios**: Para documentos académicos digitales (no escaneados), los módulos de corrección de orientación de documento (`use_doc_orientation_classify`) y corrección de deformación (`use_doc_unwarping`) no aportan mejora e incluso pueden introducir overhead.
|
||||
|
||||
### 6.4.2 Interpretación de la Correlación Negativa
|
||||
|
||||
La correlación negativa de `text_det_thresh` (-0.52) con el CER indica que:
|
||||
- Umbrales más altos filtran detecciones de baja confianza
|
||||
- Esto reduce falsos positivos que generan texto erróneo
|
||||
- El reconocimiento es más preciso con menos regiones pero más confiables
|
||||
|
||||
### 6.4.3 Limitaciones de los Resultados
|
||||
|
||||
1. **Generalización**: Los resultados se obtuvieron sobre documentos de un único tipo (instrucciones académicas UNIR). La configuración óptima puede variar para otros tipos de documentos.
|
||||
|
||||
2. **Ground truth automático**: El texto de referencia se extrajo programáticamente del PDF. En layouts complejos, esto puede introducir errores en la evaluación.
|
||||
|
||||
3. **Ejecución en CPU**: Los tiempos reportados (~69s/página) corresponden a ejecución en CPU. Con GPU, los tiempos serían significativamente menores.
|
||||
|
||||
4. **Parámetro fijo**: `text_det_unclip_ratio` permaneció fijo en 0.0 durante todo el experimento por decisión de diseño.
|
||||
|
||||
### 6.4.4 Comparación con Objetivos
|
||||
|
||||
| Objetivo | Meta | Resultado | Cumplimiento |
|
||||
|----------|------|-----------|--------------|
|
||||
| OE1: Comparar soluciones OCR | Evaluar EasyOCR, PaddleOCR, DocTR | PaddleOCR seleccionado | ✓ |
|
||||
| OE2: Preparar dataset | Construir dataset estructurado | Dataset de 24 páginas | ✓ |
|
||||
| OE3: Identificar hiperparámetros críticos | Analizar correlaciones | `textline_orientation` y `text_det_thresh` identificados | ✓ |
|
||||
| OE4: Optimizar con Ray Tune | Mínimo 50 configuraciones | 64 trials ejecutados | ✓ |
|
||||
| OE5: Validar configuración | Documentar mejora | CER 7.78% → 1.49% | ✓ |
|
||||
| **Objetivo General** | CER < 2% | CER = 1.49% | ✓ |
|
||||
|
||||
## 6.5 Implicaciones Prácticas
|
||||
|
||||
### 6.5.1 Recomendaciones de Configuración
|
||||
|
||||
Para documentos académicos en español similares a los evaluados:
|
||||
|
||||
1. **Obligatorio**: `use_textline_orientation=True`
|
||||
2. **Recomendado**: `text_det_thresh` entre 0.4 y 0.5
|
||||
3. **Opcional**: `text_det_box_thresh` ~0.5, `text_rec_score_thresh` >0.6
|
||||
4. **No recomendado**: Habilitar `use_doc_orientation_classify` o `use_doc_unwarping` para documentos digitales
|
||||
|
||||
### 6.5.2 Impacto Cuantitativo
|
||||
|
||||
En un documento típico de 10,000 caracteres:
|
||||
|
||||
| Configuración | Errores estimados |
|
||||
|---------------|-------------------|
|
||||
| Baseline | ~778 caracteres |
|
||||
| Optimizada | ~149 caracteres |
|
||||
| **Reducción** | **629 caracteres menos con errores** |
|
||||
|
||||
### 6.5.3 Aplicabilidad
|
||||
|
||||
Esta metodología de optimización es aplicable cuando:
|
||||
- No se dispone de recursos GPU para fine-tuning
|
||||
- El modelo preentrenado ya tiene soporte para el idioma objetivo
|
||||
- Se busca mejorar rendimiento sin reentrenar
|
||||
|
||||
## 6.6 Resumen del Capítulo
|
||||
|
||||
Este capítulo ha presentado:
|
||||
|
||||
1. Los resultados consolidados del benchmark y la optimización
|
||||
2. El análisis del impacto de cada hiperparámetro
|
||||
3. La configuración óptima identificada
|
||||
4. La discusión de limitaciones y aplicabilidad
|
||||
5. El cumplimiento de los objetivos planteados
|
||||
|
||||
**Resultado principal**: Se logró reducir el CER del 7.78% al 1.49% (mejora del 80.9%) mediante optimización de hiperparámetros, cumpliendo el objetivo de alcanzar CER < 2%.
|
||||
|
||||
**Fuentes de datos:**
|
||||
- `results/ai_ocr_benchmark_finetune_results_20251206_113206.csv`
|
||||
- `src/raytune_paddle_subproc_results_20251207_192320.csv`
|
||||
- `src/paddle_ocr_fine_tune_unir_raytune.ipynb`
|
||||
BIN
instructions/plantilla_individual.pdf
Normal file
BIN
instructions/plantilla_individual.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user