# Cuándo detener el entrenamiento

El entrenamiento no necesita ejecutarse "para siempre". En proyectos reales, los mejores resultados se obtienen al detenerse en el momento adecuado:

* no demasiado pronto (el modelo aún no ha aprendido)
* no demasiado tarde (el modelo empieza a sobreajustarse / memorizar)

{% hint style="info" %}
En AugeLab Studio, el entrenamiento normalmente termina cuando alcanza las **max iterations** configuradas, o cuando haces clic en **Stop Training**. El Training Chart te ayuda a decidir si vale la pena continuar.
{% endhint %}

Si este es tu primer entrenamiento, empieza con la [Starter Checklist](#starter-checklist).

## Monitorizar el progreso del entrenamiento <a href="#monitor-training-progress" id="monitor-training-progress"></a>

Durante el entrenamiento, monitoriza el progreso del modelo y observa la relación entre:

* Loss
* mAP
* IOU
* Iterations

Loss y mAP se muestran en un gráfico como el siguiente:

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-eb3d2368a1b64424ba6ea33d19901db8618b01b3%2F06_good_training.jpg?alt=media" alt="Good training example chart"><figcaption><p>Ejemplo: buen entrenamiento (loss disminuye, mAP aumenta y luego se estabiliza)</p></figcaption></figure>

{% hint style="warning" %}
Todas las métricas pueden variar enormemente según:

* Variedad de datos
* Tamaño del conjunto de datos
* Precisión de las anotaciones
* Tamaño del modelo

Los números que se muestran a continuación solo se proporcionan para establecer una base inicial para los recién llegados.
{% endhint %}

### Regla rápida (lo que suele funcionar) <a href="#quick-rule" id="quick-rule"></a>

Si solo recuerdas una regla:

Detente cuando el validation mAP deje de mejorar durante mucho tiempo, o cuando empiece a bajar mientras el loss sigue disminuyendo.

Ese segundo caso es la señal clásica de overfitting.

### Patrones comunes de entrenamiento (chuleta) <a href="#common-patterns" id="common-patterns"></a>

Estos patrones son comunes en el uso real. Para cada uno, mira primero el gráfico y luego lee la explicación.

{% hint style="info" %}
Estos gráficos de ejemplo se han generado con fines de entrenamiento/documentación. En tu repositorio, colócalos en la carpeta .assets/ junto a esta página.
{% endhint %}

#### Datos insuficientes <a href="#examples-insufficient-data" id="examples-insufficient-data"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-882840782b7c8dfca9d8ea5dca5a9c4385993981%2F01_insufficient_data.jpg?alt=media" alt="Insufficient data example chart"><figcaption><p>Datos insuficientes: muy pocos puntos / ejecución demasiado corta (métricas ruidosas al inicio)</p></figcaption></figure>

Explicación:

* Qué significa: no tienes suficiente señal aún para confiar en la tendencia.
* Causas probables: pocas imágenes, ejecución muy corta, validación muy pequeña o débil.
* Qué hacer: entrenar más tiempo; añadir datos; asegurarse de que la validación exista e incluya variedad real.

#### Baja varianza <a href="#examples-low-variance" id="examples-low-variance"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-ea9676c88af93d8fc73b669672d5dea8395188a7%2F02_low_variance.jpg?alt=media" alt="Low variance example chart"><figcaption><p>Baja varianza: el loss se estabiliza y el mAP apenas mejora</p></figcaption></figure>

Explicación:

* Qué significa: el modelo aprende la "repetición fácil" rápidamente y deja de obtener información nueva.
* Causas probables: dataset repetitivo (mismo fondo/ángulo/iluminación), falta de negativos, ausencia de casos límite.
* Qué hacer: añadir variedad (ángulos, fondos, iluminación), añadir negativos, capturar casos difíciles adrede.

#### Sobreentrenamiento <a href="#examples-overtraining" id="examples-overtraining"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-e0812ec68b36fc7b1fbfa9524a5ca1185bc5ee6b%2F03_overtraining.jpg?alt=media" alt="Overtraining example chart"><figcaption><p>Sobreentrenamiento: el loss sigue mejorando, pero el mAP alcanza un pico (incluso muy alto) y luego empeora</p></figcaption></figure>

El sobreentrenamiento no siempre es catastrófico, pero suele indicar memorización en lugar de generalización. Para entornos estrictos (cámara fija, iluminación fija) puede ser aceptable.

* Qué significa: el modelo mejora en el set de entrenamiento pero empeora en la validación (memorización).
* Causas probables: poca variedad, validación demasiado pequeña, duplicados/casi duplicados.
* Qué hacer: detener y conservar los mejores pesos; añadir más variedad; aumentar la partición de validación; eliminar duplicados.

#### Modelo que no aprende <a href="#examples-not-learning" id="examples-not-learning"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-33341889928fcf75675349b978bd582da1da5209%2F04_model_not_learning.jpg?alt=media" alt="Model not learning example chart"><figcaption><p>Modelo que no aprende: loss se mantiene alto/estable, mAP cercano a cero</p></figcaption></figure>

Explicación:

* Qué significa: el entrenamiento no progresa de forma significativa.
* Causas probables: etiquetas/clases equivocadas, desajuste de IDs de clase, formato de anotación roto, configuración incorrecta.
* Qué hacer: verificar el orden de `.names` vs IDs de etiquetas; revisar etiquetas aleatorias; confirmar formato YOLO; ajustar la configuración de entrenamiento.

#### Conjunto de datos corrupto <a href="#examples-corrupted" id="examples-corrupted"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-53fbc6a426fc4d6749f607dc378adb5a65a05460%2F05_corrupted_dataset.jpg?alt=media" alt="Corrupted dataset example chart"><figcaption><p>Conjunto de datos corrupto: picos inestables de loss y mAP errático</p></figcaption></figure>

Explicación:

* Qué significa: el entrenamiento se interrumpe por datos inconsistentes o dañados.
* Causas probables: archivos de imagen corruptos, etiquetas inválidas, fuentes/resoluciones mixtas, imágenes "vacías pero que contienen objetos".
* Qué hacer: ejecutar comprobaciones del dataset; eliminar datos corruptos; corregir el formato de etiquetas; reexportar un conjunto limpio.

#### Buen entrenamiento <a href="#examples-good" id="examples-good"></a>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-eb3d2368a1b64424ba6ea33d19901db8618b01b3%2F06_good_training.jpg?alt=media" alt="Good training example chart"><figcaption><p>Buen entrenamiento: aprendizaje constante y una meseta alta y estable</p></figcaption></figure>

Explicación:

* Qué significa: aprendizaje saludable y buena generalización.
* Causas probables: etiquetas consistentes + suficiente variedad.
* Qué hacer: detener cuando mAP se estabilice; validar con metraje real / un "golden set"; desplegar los mejores pesos.

### Loss <a href="#loss" id="loss"></a>

Loss es una señal de ajuste del entrenamiento. Representa qué tan bien se está ajustando el modelo a los batches de entrenamiento.

Loss es útil, pero puede ser engañoso:

* El loss puede seguir disminuyendo incluso cuando el modelo ya está sobreajustando.
* El loss no garantiza el rendimiento en el mundo real.

{% hint style="info" %}
El loss por sí solo no es suficiente para juzgar la precisión. Usa [mAP](#map) para entender la generalización en datos de validación.
{% endhint %}

#### 2.0 ≥ Loss <a href="#id-20-loss" id="id-20-loss"></a>

A menudo indica que "el aprendizaje ha empezado", pero la calidad puede seguir siendo pobre. Úsalo como señal de que la tubería funciona, no como línea de meta.

{% hint style="warning" %}
Como se muestra en el gráfico más arriba, valores de loss alrededor de 2.0 pueden no producir modelos precisos.
{% endhint %}

#### 1.0 ≥ Loss <a href="#id-10-loss" id="id-10-loss"></a>

Comúnmente una línea base usable en muchos datasets enfocados.

#### 0.5 ≥ Loss <a href="#id-05-loss" id="id-05-loss"></a>

A menudo indica un modelo bien ajustado en un dataset limpio y consistente. Después de este punto, las mejoras pueden ser lentas y el riesgo de overfitting aumenta.

<details>

<summary>Los umbrales de Loss no son universales (por qué)</summary>

Los valores de loss dependen de la arquitectura del modelo, tamaño de imagen, número de clases, ruido en las etiquetas, aumentos (augmentation) y complejidad del dataset. Usa los umbrales de loss para construir intuición, no como una regla universal de aprobado/reprobado.

</details>

### mAP <a href="#map" id="map"></a>

La métrica mAP (mean average precision) combina precisión y recall para ofrecer una evaluación completa de la exactitud del modelo al detectar objetos en una imagen.

Se calcula evaluando las predicciones frente a las etiquetas ground-truth en umbrales IoU específicos (los detalles exactos dependen del backend/configuración de entrenamiento).

{% hint style="warning" %}
mAP solo es tan buena como tu conjunto de validación. Si las imágenes de validación son muy pocas, demasiado "limpias", muy similares al entrenamiento o mal etiquetadas, el mAP puede parecer excelente mientras el modelo falla en producción.
{% endhint %}

Interpretación práctica:

* Una meseta estable suele ser más importante que perseguir el último +1%.
* Un mAP muy alto (p. ej. 95–99%) en un dataset pequeño o repetitivo es una trampa común de sobreajuste.
* Si mAP alcanza un pico y luego baja, consulta [Over-Fitting](#over-fitting).

### IOU <a href="#iou" id="iou"></a>

IOU (Intersection over Union) mide la superposición entre cajas delimitadoras predichas y reales para detecciones de objetos individuales. mAP evalúa el rendimiento general del modelo de detección considerando precisión y recall en todas las categorías de objetos.

{% hint style="info" %}
A mayor valor de IOU, más ajustada es la caja predicha.
{% endhint %}

Puedes seguir cada IOU en los registros de la Training Window:

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-3d62c639795ae120ec849d2dfd91a57483208aa6%2Fimage%20(40).png?alt=media" alt=""><figcaption></figcaption></figure>

## Ajustes finos <a href="#fine-tuning" id="fine-tuning"></a>

### Tiempo de entrenamiento <a href="#training-time" id="training-time"></a>

Define un presupuesto máximo de tiempo de entrenamiento basado en los recursos computacionales disponibles y las limitaciones del proyecto. Si el modelo no alcanza un rendimiento satisfactorio dentro del tiempo asignado, considera detener el entrenamiento y explorar otras vías como:

* Analizar manualmente la precisión de las anotaciones
* Verificar la variedad de clases
* Probar diferentes tamaños de modelo y tamaños de lote (batch)
* Aumentar el tamaño de la base de datos

### Over-Fitting <a href="#over-fitting" id="over-fitting"></a>

Evita el overfitting monitorizando cómo se comporta el mAP a lo largo del tiempo.

La señal de overfit más fiable en "la vida real" es:

loss disminuye, pero mAP alcanza un pico y luego empeora.

El overfitting no siempre es "catastrófico" en configuraciones muy restringidas y de cámara fija. Pero si te importa la robustez (diferente iluminación, turnos, fondos), el overfitting aparecerá rápidamente.

Qué suele ayudar:

* Añadir más variedad (días nuevos, iluminación distinta, nuevos fondos)
* Añadir negativos que se parezcan a tu entorno real
* Mejorar la consistencia de las etiquetas (mismo estilo entre etiquetadores)
* Aumentar la partición de validación para que mAP sea más difícil de "engañar"

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-9546176ba0c97b8067ef5280410b84615e349458%2Fimage%20(41).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://1490675745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F05D1CT7pajknL8HxF5RY%2Fuploads%2Fgit-blob-e0812ec68b36fc7b1fbfa9524a5ca1185bc5ee6b%2F03_overtraining.jpg?alt=media" alt="Overtraining example chart"><figcaption><p>Ejemplo de sobreentrenamiento: mAP alcanza un pico y luego cae mientras el loss sigue disminuyendo</p></figcaption></figure>

### Equilibrar tiempo y rendimiento <a href="#balancing-time-and-performance" id="balancing-time-and-performance"></a>

Equilibra el tiempo de entrenamiento con el rendimiento deseado del modelo. En algunos casos, iteraciones adicionales pueden mejorar el rendimiento, pero la ganancia puede disminuir con el tiempo. Valora los beneficios frente al coste computacional y la urgencia del proyecto.

Normalmente, dependiendo del número de clases y del tamaño de la base de datos, la duración del proceso de entrenamiento puede variar entre un día y una semana.

## Starter Checklist <a href="#starter-checklist" id="starter-checklist"></a>

Base de datos:

* [ ] Las etiquetas son coherentes (estilo de caja + significado de clase)
* [ ] El dataset tiene variedad del mundo real (iluminación, ángulos, fondos)
* [ ] Tienes suficientes ejemplos por clase para aprender (más es mejor; empieza pequeño y luego mejora)
* [ ] (Opcional) Augmentation está habilitado *después* de que las etiquetas sean correctas

Modelo:

* [ ] Elegir un tamaño de modelo que cumpla los requisitos de FPS
* [ ] Modelo adecuado para los [requisitos del sistema](https://docs.augelab.com/spanish/introduccion/system-requirements) y compatibilidad CUDA, memoria GPU.
* [ ] Tamaño de batch según la memoria GPU (usar subdivisions para evitar OOM)

Entrenamiento (detener si):

* [ ] [mAP](#map) se estabiliza durante mucho tiempo (rendimientos decrecientes)
* [ ] [mAP](#map) cae mientras [Loss](#loss) sigue cayendo (overfitting)
* [ ] Has alcanzado tu presupuesto de tiempo y los resultados son "lo suficientemente buenos" para probar con metraje real

<details>

<summary>Lista rápida de depuración (cuando algo va mal)</summary>

1. Revisa aleatoriamente 20–50 imágenes en el dataset (no solo la primera página)
2. Confirma el mapeo de clases:

* El archivo `.names` coincide en orden con los IDs de las etiquetas
* no hay clases faltantes o extra

3. Revisa archivos de etiquetas:

* Formato YOLO: `class x_center y_center width height` (normalizado)
* las cajas están dentro de los límites y no tienen tamaño cero

4. Si mAP parece "demasiado bueno para ser verdad":

* la partición de validación puede ser demasiado pequeña o demasiado similar al entrenamiento
* puede haber duplicados / casi duplicados

5. Si el entrenamiento es inestable o hay OOM:

* incrementa subdivisions o reduce batch
* reduce temporalmente la resolución de entrada para depurar

</details>
