From 569a7bca4a239805fc3601d26aa9dac716ec1731 Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 21 Apr 2026 20:54:59 +0200 Subject: [PATCH] plain image manifests --- .gitea/workflows/ci.yaml | 154 ++++++++++-------- .../presentation/slides/03_script.md | 8 +- .../presentation/slides/04_script.md | 14 +- .../presentation/slides/05_script.md | 2 +- .../presentation/slides/09_script.md | 4 +- .../presentation/slides/12_script.md | 4 +- .../presentation/slides/17_script.md | 14 +- 7 files changed, 110 insertions(+), 90 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 456d2f0..306b4d4 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -52,16 +52,18 @@ jobs: username: username password: ${{ secrets.CI_READWRITE }} - - name: Build and push CPU image - uses: docker/build-push-action@v5 - with: - context: src/paddle_ocr - file: src/paddle_ocr/Dockerfile.cpu - platforms: linux/amd64 - push: true - tags: | - ${{ needs.essential.outputs.image_cpu }}:${{ needs.essential.outputs.Version }} - ${{ needs.essential.outputs.image_cpu }}:latest + - name: Build and push CPU image + uses: docker/build-push-action@v5 + with: + context: src/paddle_ocr + file: src/paddle_ocr/Dockerfile.cpu + platforms: linux/amd64 + push: true + provenance: false + sbom: false + tags: | + ${{ needs.essential.outputs.image_cpu }}:${{ needs.essential.outputs.Version }} + ${{ needs.essential.outputs.image_cpu }}:latest # PaddleOCR GPU image (amd64 only) build_paddle_ocr_gpu: @@ -81,16 +83,18 @@ jobs: username: username password: ${{ secrets.CI_READWRITE }} - - name: Build and push GPU image - uses: docker/build-push-action@v5 - with: - context: src/paddle_ocr - file: src/paddle_ocr/Dockerfile.gpu - platforms: linux/amd64 - push: true - tags: | - ${{ needs.essential.outputs.image_gpu }}:${{ needs.essential.outputs.Version }} - ${{ needs.essential.outputs.image_gpu }}:latest + - name: Build and push GPU image + uses: docker/build-push-action@v5 + with: + context: src/paddle_ocr + file: src/paddle_ocr/Dockerfile.gpu + platforms: linux/amd64 + push: true + provenance: false + sbom: false + tags: | + ${{ needs.essential.outputs.image_gpu }}:${{ needs.essential.outputs.Version }} + ${{ needs.essential.outputs.image_gpu }}:latest # EasyOCR CPU image (amd64 only) build_easyocr: @@ -110,16 +114,18 @@ jobs: username: username password: ${{ secrets.CI_READWRITE }} - - name: Build and push EasyOCR image - uses: docker/build-push-action@v5 - with: - context: src/easyocr_service - file: src/easyocr_service/Dockerfile - platforms: linux/amd64 - push: true - tags: | - ${{ needs.essential.outputs.image_easyocr }}:${{ needs.essential.outputs.Version }} - ${{ needs.essential.outputs.image_easyocr }}:latest + - name: Build and push EasyOCR image + uses: docker/build-push-action@v5 + with: + context: src/easyocr_service + file: src/easyocr_service/Dockerfile + platforms: linux/amd64 + push: true + provenance: false + sbom: false + tags: | + ${{ needs.essential.outputs.image_easyocr }}:${{ needs.essential.outputs.Version }} + ${{ needs.essential.outputs.image_easyocr }}:latest # EasyOCR GPU image (amd64 only) build_easyocr_gpu: @@ -139,16 +145,18 @@ jobs: username: username password: ${{ secrets.CI_READWRITE }} - - name: Build and push EasyOCR GPU image - uses: docker/build-push-action@v5 - with: - context: src/easyocr_service - file: src/easyocr_service/Dockerfile.gpu - platforms: linux/amd64 - push: true - tags: | - ${{ needs.essential.outputs.image_easyocr_gpu }}:${{ needs.essential.outputs.Version }} - ${{ needs.essential.outputs.image_easyocr_gpu }}:latest + - name: Build and push EasyOCR GPU image + uses: docker/build-push-action@v5 + with: + context: src/easyocr_service + file: src/easyocr_service/Dockerfile.gpu + platforms: linux/amd64 + push: true + provenance: false + sbom: false + tags: | + ${{ needs.essential.outputs.image_easyocr_gpu }}:${{ needs.essential.outputs.Version }} + ${{ needs.essential.outputs.image_easyocr_gpu }}:latest # DocTR CPU image (amd64 only) build_doctr: @@ -168,16 +176,18 @@ jobs: username: username password: ${{ secrets.CI_READWRITE }} - - name: Build and push DocTR image - uses: docker/build-push-action@v5 - with: - context: src/doctr_service - file: src/doctr_service/Dockerfile - platforms: linux/amd64 - push: true - tags: | - ${{ needs.essential.outputs.image_doctr }}:${{ needs.essential.outputs.Version }} - ${{ needs.essential.outputs.image_doctr }}:latest + - name: Build and push DocTR image + uses: docker/build-push-action@v5 + with: + context: src/doctr_service + file: src/doctr_service/Dockerfile + platforms: linux/amd64 + push: true + provenance: false + sbom: false + tags: | + ${{ needs.essential.outputs.image_doctr }}:${{ needs.essential.outputs.Version }} + ${{ needs.essential.outputs.image_doctr }}:latest # DocTR GPU image (amd64 only) build_doctr_gpu: @@ -197,16 +207,18 @@ jobs: username: username password: ${{ secrets.CI_READWRITE }} - - name: Build and push DocTR GPU image - uses: docker/build-push-action@v5 - with: - context: src/doctr_service - file: src/doctr_service/Dockerfile.gpu - platforms: linux/amd64 - push: true - tags: | - ${{ needs.essential.outputs.image_doctr_gpu }}:${{ needs.essential.outputs.Version }} - ${{ needs.essential.outputs.image_doctr_gpu }}:latest + - name: Build and push DocTR GPU image + uses: docker/build-push-action@v5 + with: + context: src/doctr_service + file: src/doctr_service/Dockerfile.gpu + platforms: linux/amd64 + push: true + provenance: false + sbom: false + tags: | + ${{ needs.essential.outputs.image_doctr_gpu }}:${{ needs.essential.outputs.Version }} + ${{ needs.essential.outputs.image_doctr_gpu }}:latest # Ray Tune OCR image (amd64 only) build_raytune: @@ -226,13 +238,15 @@ jobs: username: username password: ${{ secrets.CI_READWRITE }} - - name: Build and push Ray Tune image - uses: docker/build-push-action@v5 - with: - context: src/raytune - file: src/raytune/Dockerfile - platforms: linux/amd64 - push: true - tags: | - ${{ needs.essential.outputs.image_raytune }}:${{ needs.essential.outputs.Version }} - ${{ needs.essential.outputs.image_raytune }}:latest + - name: Build and push Ray Tune image + uses: docker/build-push-action@v5 + with: + context: src/raytune + file: src/raytune/Dockerfile + platforms: linux/amd64 + push: true + provenance: false + sbom: false + tags: | + ${{ needs.essential.outputs.image_raytune }}:${{ needs.essential.outputs.Version }} + ${{ needs.essential.outputs.image_raytune }}:latest diff --git a/thesis_output/presentation/slides/03_script.md b/thesis_output/presentation/slides/03_script.md index 424b117..0515024 100644 --- a/thesis_output/presentation/slides/03_script.md +++ b/thesis_output/presentation/slides/03_script.md @@ -6,11 +6,11 @@ ¿Por qué? Porque los modelos preentrenados se entrenan mayoritariamente con datasets internacionales donde los caracteres específicos del español — las tildes, la eñe, los signos de interrogación y exclamación invertidos — están infrarrepresentados. -Como pueden ver en la tabla, los errores típicos incluyen la pérdida de acentos, como 'información' que se convierte en 'informacion'; la eñe que se confunde con una ene; y artefactos de duplicación. Estos errores no son anecdóticos: afectan la precisión en entornos reales como archivos académicos, registros legales o facturación. +Como pueden ver en la tabla, los errores típicos incluyen la pérdida de acentos, como 'más' que se convierte en 'mas'; la eñe que se confunde con una ene; y artefactos de duplicación. Estos errores no son anecdóticos: afectan la precisión en entornos reales como archivos académicos, registros legales o facturación. -La solución habitual es el fine-tuning, pero esto requiere datasets etiquetados extensos y una infraestructura costosa. La pregunta que nos planteamos es: ¿se puede mejorar significativamente un modelo OCR sin necesidad de reentrenarlo?" +Este trabajo se enmarca en el campo del AutoML — Automated Machine Learning — aplicado a la optimización de configuraciones de inferencia. La mayor parte de la investigación en AutoML se centra en la fase de entrenamiento: selección de arquitecturas, learning rates, regularización. Sin embargo, los modelos OCR modernos exponen numerosos hiperparámetros en la fase de inferencia que permanecen sin explorar. Nuestra hipótesis es que estos modelos preentrenados contienen capacidades latentes que pueden activarse mediante la configuración óptima de su pipeline de inferencia." **Tips:** - Point to the error table when you mention specific examples -- Emphasize the practical relevance — this isn't just academic -- The rhetorical question at the end bridges naturally to the next slide +- Emphasize AutoML as the AI framework — this positions the work within a recognized AI subfield +- "Capacidades latentes" is the key concept — the model already knows, we just need to configure it right diff --git a/thesis_output/presentation/slides/04_script.md b/thesis_output/presentation/slides/04_script.md index df908fa..e3ddf31 100644 --- a/thesis_output/presentation/slides/04_script.md +++ b/thesis_output/presentation/slides/04_script.md @@ -2,15 +2,15 @@ **What to say:** -"Y esa es exactamente la pregunta central de este trabajo: ¿Se pueden mejorar modelos OCR preentrenados de forma significativa para documentos en español mediante optimización sistemática de hiperparámetros, sin necesidad de fine-tuning? +"La pregunta central de este trabajo es: ¿Se pueden mejorar modelos OCR preentrenados de forma significativa para documentos en español mediante optimización sistemática de hiperparámetros de inferencia? -Para entender por qué esta pregunta es relevante, veamos la comparación. El fine-tuning requiere miles de imágenes etiquetadas, GPUs de alta memoria — más de 16 gigabytes —, puede tardar días o semanas, exige alta experiencia en machine learning, y conlleva riesgo de overfitting catastrófico. +Es importante entender que el fine-tuning y la optimización de hiperparámetros no son alternativas excluyentes — son capas complementarias de optimización. El fine-tuning modifica los pesos del modelo. La HPO optimiza la configuración del pipeline de inferencia. Son problemas de optimización distintos que actúan en niveles diferentes. -En cambio, la optimización de hiperparámetros solo necesita un subconjunto de validación, funciona con CPUs o GPUs eficientes, se ejecuta en minutos u horas, requiere experiencia media, y el riesgo es limitado y reversible. +Dicho esto, la tabla muestra las diferencias prácticas. El fine-tuning requiere miles de imágenes etiquetadas, GPUs de alta memoria, días o semanas de entrenamiento, y alta experiencia en ML. La optimización de hiperparámetros necesita solo un subconjunto de validación, funciona con GPUs de consumo, se ejecuta en minutos, y el riesgo es limitado. -Es decir, estamos proponiendo una alternativa práctica y accesible, especialmente relevante para organizaciones con recursos limitados que necesitan mejorar su OCR sin invertir en infraestructura de entrenamiento." +Lo que este trabajo investiga es cuánto rendimiento latente existe en la capa de configuración de inferencia — sin tocar los pesos del modelo. Si la ganancia es significativa, como demostraremos, esto tiene implicaciones directas para el despliegue práctico de modelos OCR: cualquier organización puede mejorar sus resultados antes de considerar siquiera el fine-tuning." **Tips:** -- Read the central question with emphasis — it's the thesis statement -- Use the comparison table as a visual anchor: point left (fine-tuning) vs right (HPO) -- Stress "accesible" and "recursos limitados" — this is the practical value proposition +- Emphasize "capas complementarias" — this is the key reframing, not "cheap alternative" +- "Rendimiento latente en la capa de inferencia" — the core scientific question +- The practical implication (any organization can do this) comes naturally at the end diff --git a/thesis_output/presentation/slides/05_script.md b/thesis_output/presentation/slides/05_script.md index 671c68a..191cb79 100644 --- a/thesis_output/presentation/slides/05_script.md +++ b/thesis_output/presentation/slides/05_script.md @@ -12,7 +12,7 @@ OE2: preparar un dataset estructurado de 45 páginas con ground truth extraído OE3: identificar los hiperparámetros críticos mediante análisis de correlación de Pearson. -OE4: ejecutar 64 ensayos automatizados de optimización usando Ray Tune con el algoritmo Optuna TPE. +OE4: ejecutar 64 ensayos automatizados de optimización usando Ray Tune con optimización bayesiana — concretamente, el algoritmo TPE de Optuna, que construye un modelo probabilístico del espacio de búsqueda para proponer configuraciones cada vez más prometedoras. Y OE5: validar la configuración optimizada contra el baseline en el dataset completo. diff --git a/thesis_output/presentation/slides/09_script.md b/thesis_output/presentation/slides/09_script.md index 7d42615..51d4df9 100644 --- a/thesis_output/presentation/slides/09_script.md +++ b/thesis_output/presentation/slides/09_script.md @@ -10,7 +10,9 @@ Tres son continuos — umbrales numéricos que ajustan la sensibilidad. text_det El séptimo, text_det_unclip_ratio, se fijó en 0.0 basándonos en pruebas preliminares. -Lo interesante es que los 3 parámetros booleanos generan solo 8 combinaciones posibles, pero como veremos, son los que más impactan en el rendimiento. El algoritmo TPE de Optuna explora este espacio mixto discreto-continuo de forma inteligente con 64 ensayos y 2 workers concurrentes." +Lo interesante es que los 3 parámetros booleanos generan solo 8 combinaciones posibles, pero como veremos, son los que más impactan en el rendimiento. + +Para explorar este espacio utilizamos el algoritmo TPE — Tree-structured Parzen Estimator — una técnica de optimización bayesiana. A diferencia de grid search o random search, TPE construye un modelo probabilístico que aprende de los ensayos anteriores y propone configuraciones cada vez más prometedoras. Es un ejemplo de SMBO — Sequential Model-Based Optimization — donde cada nuevo ensayo está informado por los resultados previos. Esto permite explorar eficientemente un espacio mixto discreto-continuo con solo 64 ensayos y 2 workers concurrentes." **Tips:** - This is technical — slow down and let the audience absorb diff --git a/thesis_output/presentation/slides/12_script.md b/thesis_output/presentation/slides/12_script.md index b55b27b..8155953 100644 --- a/thesis_output/presentation/slides/12_script.md +++ b/thesis_output/presentation/slides/12_script.md @@ -12,7 +12,9 @@ El tercero es textline_orientation, con correlación -0.54. Es crítico para doc Los umbrales numéricos tienen un impacto menor, con correlaciones de hasta -0.43. -La conclusión clave es que las decisiones arquitectónicas — los booleanos — dominan sobre los ajustes finos numéricos. Y sin una búsqueda sistemática de 64 ensayos, estas interacciones entre parámetros habrían permanecido desconocidas." +La conclusión clave es que las decisiones arquitectónicas — los booleanos — dominan sobre los ajustes finos numéricos. Esto constituye una forma de descubrimiento de conocimiento automatizado sobre el comportamiento del modelo en inferencia: la optimización bayesiana no solo encontró la mejor configuración, sino que reveló la estructura interna de cómo los hiperparámetros interactúan y afectan al rendimiento. + +Sin una exploración sistemática de 64 ensayos con optimización bayesiana, estas relaciones habrían permanecido ocultas. Este tipo de análisis es una contribución directa al entendimiento de los pipelines de OCR basados en redes neuronales." **Tips:** - This is your MAIN intellectual contribution — take your time diff --git a/thesis_output/presentation/slides/17_script.md b/thesis_output/presentation/slides/17_script.md index fce3bd0..8ada9cc 100644 --- a/thesis_output/presentation/slides/17_script.md +++ b/thesis_output/presentation/slides/17_script.md @@ -2,17 +2,19 @@ **What to say:** -"En conclusión, este trabajo aporta cuatro contribuciones principales. +"En conclusión, este trabajo aporta cuatro contribuciones principales al campo del AutoML aplicado a sistemas OCR. -Primera: una metodología reproducible para optimización de hiperparámetros OCR, basada en herramientas de código abierto — Ray Tune, Optuna y PaddleOCR. +Primera: una metodología reproducible de optimización bayesiana de hiperparámetros de inferencia OCR, basada en herramientas de código abierto — Ray Tune, Optuna y PaddleOCR. -Segunda: un análisis sistemático de los hiperparámetros de PaddleOCR mediante correlaciones de Pearson, que revela la jerarquía de impacto donde los parámetros arquitectónicos dominan sobre los numéricos. +Segunda: un análisis automatizado del comportamiento del modelo en inferencia — mediante correlaciones de Pearson sobre 64 ensayos — que revela una jerarquía de impacto donde los parámetros arquitectónicos dominan sobre los numéricos. Esta es una contribución al entendimiento de cómo los hiperparámetros de inferencia afectan el rendimiento de redes neuronales de OCR. -Tercera: una configuración validada para documentos académicos en español que logra un CER del 0.79% en el mejor ensayo — superando el objetivo del 2%. +Tercera: una configuración validada para documentos académicos en español que logra un CER del 0.79% en el mejor ensayo — superando ampliamente el objetivo del 2%. -Y cuarta: una infraestructura Dockerizada con imágenes públicas que permite reproducir el experimento completo. +Y cuarta: una infraestructura Dockerizada reproducible que permite replicar el experimento con un solo comando. -En cuanto a las limitaciones, las reconocemos explícitamente: un solo tipo de documento, un corpus modesto de 45 páginas, overfitting al subconjunto de optimización de 5 páginas, y el parámetro text_det_unclip_ratio que no se exploró. Estas limitaciones son, a su vez, oportunidades claras de mejora." +En conjunto, este trabajo demuestra que la optimización bayesiana de hiperparámetros de inferencia es una herramienta de AutoML eficaz para mejorar modelos preentrenados sin modificarlos — una capa de optimización complementaria al fine-tuning con un coste significativamente menor. + +En cuanto a las limitaciones, las reconocemos explícitamente: un solo tipo de documento, un corpus modesto de 45 páginas, overfitting al subconjunto de 5 páginas, y el parámetro text_det_unclip_ratio sin explorar. Estas limitaciones son, a su vez, líneas claras de trabajo futuro." **Tips:** - Number the contributions clearly — the tribunal is evaluating these