35. Buenas prácticas en proyectos de visión por computadora

35.1 Introducción

En este curso recorrimos fundamentos, procesamiento de imágenes, convoluciones, entrenamiento, evaluación, transfer learning, modelos preentrenados, optimización, deployment y un caso práctico completo. Como cierre, conviene consolidar una pregunta más general: ¿cómo trabajar bien en un proyecto real de visión por computadora?

Las buenas prácticas no son adornos metodológicos. Son lo que separa un experimento que “parece funcionar” de un sistema que puede entenderse, mejorarse, mantenerse y defenderse técnicamente.

En este tema reuniremos criterios prácticos para diseñar mejores proyectos de visión artificial, desde la definición del problema hasta el mantenimiento del modelo ya desplegado.

35.2 Empezar por el problema, no por el modelo

Un error frecuente es arrancar el proyecto eligiendo una arquitectura o una librería antes de entender con precisión el problema real.

La primera buena práctica es formular claramente:

  • Qué entrada tendrá el sistema.
  • Qué salida se espera.
  • Qué errores son más costosos.
  • Qué restricciones operativas existen.

Si el problema está mal definido, incluso un buen modelo puede terminar resolviendo algo distinto de lo que el proyecto necesitaba.

35.3 Entender el contexto de uso

No es lo mismo un modelo para análisis offline que uno para video en tiempo real. Tampoco es lo mismo un sistema para clasificación recreativa que uno para inspección industrial o apoyo médico.

El contexto define prioridades: precisión, recall, latencia, interpretabilidad, privacidad, costo computacional y facilidad de mantenimiento.

35.4 La calidad de los datos manda

En visión por computadora, la calidad del dataset suele tener más impacto que pequeños cambios arquitectónicos.

Una buena práctica central es invertir tiempo en revisar:

  • Si las clases están bien definidas.
  • Si las etiquetas son confiables.
  • Si los casos difíciles están representados.
  • Si existen sesgos evidentes en la recolección.

Un pipeline técnicamente impecable no compensa un dataset mal construido.

35.5 Curado y limpieza del dataset

Antes de entrenar, conviene revisar manualmente una parte del dataset. Esto ayuda a detectar imágenes dañadas, etiquetas incorrectas, duplicados o ejemplos que en realidad no pertenecen a ninguna clase.

La limpieza de datos suele parecer tediosa, pero evita muchos problemas posteriores difíciles de diagnosticar.

35.6 Evitar fuga de información

Una buena práctica esencial es evitar que información de validation o test se filtre al entrenamiento.

Esto puede ocurrir de varias maneras:

  • Duplicados entre subconjuntos.
  • Frames de un mismo video repartidos entre train y test.
  • Normalización o decisiones tomadas mirando el test.

Cuando esto pasa, las métricas resultan artificialmente optimistas.

35.7 Mantener una separación clara entre train, validation y test

Ya vimos esta idea en temas anteriores, pero aquí conviene reforzarla como práctica profesional:

  • Train: ajusta los pesos.
  • Validation: guía decisiones de desarrollo.
  • Test: se reserva para la evaluación final.

Cuando un proyecto no respeta esta disciplina, pierde confiabilidad técnica.

35.8 Documentar las clases y el criterio de etiquetado

En proyectos colaborativos es muy útil dejar por escrito qué significa cada clase y qué hacer con casos ambiguos. Eso mejora la consistencia del etiquetado y reduce discusiones posteriores.

Una breve guía de anotación puede ahorrar muchísimo retrabajo.

35.9 Empezar simple

Una buena práctica de ingeniería es construir primero una línea base simple y verificable. Por ejemplo:

  • Una resolución moderada.
  • Una arquitectura estándar.
  • Un loop de entrenamiento claro.
  • Métricas básicas bien interpretadas.

Es mejor tener un pipeline pequeño pero confiable que un sistema complejo difícil de entender desde el primer día.

35.10 Controlar la reproducibilidad

Si no podemos reproducir razonablemente un resultado, es difícil confiar en él. Por eso conviene registrar semillas, configuraciones y versiones de librerías.

import torch
import random
import numpy as np

seed = 42
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)

La reproducibilidad exacta absoluta no siempre es trivial, pero una buena disciplina mejora mucho la trazabilidad del experimento.

35.11 Registrar configuraciones e hiperparámetros

Otra práctica muy valiosa es registrar de manera explícita qué configuración produjo cada resultado. Por ejemplo:

  • Arquitectura usada.
  • Learning rate.
  • Batch size.
  • Transforms aplicadas.
  • Número de épocas.
  • Versión del dataset.

Esto evita que el proyecto dependa de la memoria informal del equipo.

35.12 Medir más de una métrica

Una buena práctica es no enamorarse de una única cifra. La accuracy puede ser útil, pero no siempre cuenta toda la historia.

Según el problema, conviene mirar también:

  • Precision.
  • Recall.
  • F1-score.
  • Matriz de confusión.
  • Tiempo de inferencia.

Una sola métrica puede ocultar fallas importantes.

35.13 Revisar errores reales

No alcanza con leer números agregados. Una buena práctica clave es inspeccionar ejemplos mal clasificados, casos dudosos y situaciones límite.

Ver errores concretos suele revelar problemas de etiquetas, sesgos del dataset, debilidades del modelo o incluso defectos en el preprocesamiento.

35.14 Cuidar el overfitting

Si el entrenamiento mejora pero la validación se estanca o empeora, probablemente estamos sobreajustando.

Buenas prácticas para controlarlo incluyen:

  • Monitorear curvas de train y validation.
  • Usar augmentation razonable.
  • Aplicar regularización cuando corresponde.
  • No entrenar indefinidamente sin una razón clara.

35.15 No complicar el augmentation sin necesidad

El augmentation puede ser muy valioso, pero debe tener sentido para el problema. No toda transformación preserva la semántica de la clase.

Por ejemplo, una rotación extrema puede ser razonable en algunos problemas y absurda en otros. La buena práctica es elegir augmentations compatibles con la lógica visual del dominio.

35.16 Mantener consistencia entre entrenamiento e inferencia

El pipeline de inferencia debe respetar supuestos fundamentales del entrenamiento: tamaño de entrada, orden de canales, normalización y mapeo de clases.

Muchos bugs de producción aparecen porque el modelo es correcto, pero la imagen llega mal preparada.

35.17 Versionar datos, código y modelos

En un proyecto serio conviene poder responder preguntas como:

  • ¿Con qué datos se entrenó esta versión?
  • ¿Qué código generó este modelo?
  • ¿Qué hiperparámetros se usaron?

Por eso es buena práctica versionar no solo el código, sino también el dataset y los artefactos generados.

35.18 Guardar artefactos útiles

No solo conviene guardar el modelo final. También puede ser útil guardar:

  • Curvas de entrenamiento.
  • Matrices de confusión.
  • Mapeo de clases.
  • Logs de experimentos.
  • Configuraciones usadas.

Esto mejora la trazabilidad del proyecto y simplifica la revisión técnica.

35.19 Diseñar el código de forma modular

Una buena base de código separa responsabilidades. Por ejemplo:

  • Módulo de datos.
  • Módulo de modelo.
  • Módulo de entrenamiento.
  • Módulo de evaluación.
  • Módulo de inferencia.

Esto facilita pruebas, mantenimiento y reutilización.

35.20 Validar con pequeños experimentos antes de escalar

Antes de lanzar un entrenamiento largo o un deployment complejo, conviene hacer pruebas pequeñas:

  • Verificar que el dataset carga bien.
  • Confirmar dimensiones de entrada y salida.
  • Comprobar que la pérdida baja.
  • Asegurar que la inferencia funciona sobre una imagen real.

Esto evita perder horas en ejecuciones largas que estaban mal planteadas desde el principio.

35.21 Pensar en deployment desde temprano

Una buena práctica es no dejar el deployment para el final absoluto. Desde el inicio conviene considerar:

  • Qué hardware habrá disponible.
  • Qué latencia es aceptable.
  • Qué formato de salida necesitará el sistema.
  • Si el modelo deberá correr en edge o en cloud.

Esto evita diseñar un pipeline imposible de desplegar después.

35.22 Medir en el entorno real

No alcanza con que el modelo funcione en la máquina de desarrollo. Buenas prácticas de deployment exigen medir en el hardware y contexto reales.

Un modelo que es rápido en GPU de escritorio puede ser demasiado lento en CPU o en un dispositivo embebido.

35.23 Monitorear después del despliegue

Una buena práctica profesional es seguir observando el modelo una vez desplegado. Algunas señales útiles son:

  • Latencia.
  • Tasa de errores.
  • Distribución de clases predichas.
  • Volumen de solicitudes.
  • Casos que requieren revisión humana.

Esto ayuda a detectar drift, degradación o cambios en las condiciones reales de operación.

35.24 Incluir interpretación cuando haga falta

En algunos dominios no alcanza con obtener una etiqueta. Puede ser útil sumar herramientas de interpretación como mapas de calor, análisis de errores o reportes por clase.

La buena práctica aquí es alinear el nivel de explicabilidad con el riesgo y la sensibilidad del problema.

35.25 Tratar con respeto la privacidad y la ética

Muchos proyectos de visión trabajan con personas, espacios privados, documentos o escenas sensibles. La buena práctica no es solo técnica: también es ética y legal.

Conviene preguntarse:

  • ¿Estamos recolectando más datos de los necesarios?
  • ¿Hay consentimiento o base legítima para usar estas imágenes?
  • ¿Existen sesgos contra ciertos grupos o condiciones?
  • ¿Cómo se almacenan y protegen las imágenes?

35.26 Aceptar que el proyecto evoluciona

Una buena práctica madura consiste en asumir que el modelo no es estático. Los datos cambian, los requerimientos cambian y el sistema deberá revisarse con el tiempo.

Por eso conviene diseñar pensando en iteración, no en una solución “definitiva” e inmutable.

35.27 Una lista práctica de verificación

Antes de dar por sólido un proyecto de visión por computadora, conviene poder responder que sí a preguntas como estas:

  • ¿El problema está claramente definido?
  • ¿El dataset fue revisado y documentado?
  • ¿Hay separación correcta entre train, validation y test?
  • ¿El entrenamiento es razonablemente reproducible?
  • ¿Las métricas elegidas reflejan el problema real?
  • ¿La inferencia reproduce el preprocesamiento correcto?
  • ¿El modelo está versionado y medido en el entorno real?
  • ¿Existe monitoreo posterior al deployment?

35.28 Errores comunes que estas prácticas ayudan a evitar

Cuando se descuidan estas buenas prácticas, aparecen problemas muy típicos:

  • Métricas irreales por fuga de información.
  • Modelos imposibles de reproducir.
  • Deployment inconsistente con el entrenamiento.
  • Curvas prometedoras pero datos mal etiquetados.
  • Resultados inestables por falta de control experimental.
  • Proyectos difíciles de mantener porque dependen de conocimiento tácito.

35.29 Qué debes recordar de este tema

  • La calidad del proyecto depende tanto de los datos y el proceso como del modelo.
  • Definir bien el problema y documentar el dataset es una práctica central.
  • Reproducibilidad, versionado y separación correcta de subconjuntos son pilares técnicos.
  • Evaluar bien implica mirar más de una métrica y revisar errores concretos.
  • Deployment y monitoreo también forman parte del ciclo profesional del modelo.

35.30 Conclusión

Las buenas prácticas en visión por computadora son, en el fondo, buenas prácticas de ingeniería aplicada al trabajo con imágenes, modelos y datos reales. No sustituyen el conocimiento técnico del modelo, pero sí hacen posible que ese conocimiento produzca resultados confiables y sostenibles.

Un proyecto sólido no es el que tiene la arquitectura más llamativa, sino el que está bien planteado, bien medido, bien documentado y listo para evolucionar sin perder control técnico.

Con este tema cerramos el recorrido del curso. El paso natural a partir de aquí es construir proyectos propios, aplicar estos criterios en contextos reales y profundizar progresivamente en problemas específicos de clasificación, detección, segmentación e inferencia en producción.