33. Deployment de modelos de visión artificial

33.1 Introducción

Después de construir, entrenar, evaluar, optimizar e interpretar modelos, llega una etapa decisiva: ponerlos a funcionar en un entorno real. Esa etapa es el deployment.

En visión por computadora, hacer deployment no significa solo “guardar un archivo y ejecutarlo”. Implica decidir dónde correrá el modelo, cómo recibirá imágenes o video, cómo devolverá resultados, cómo mediremos su comportamiento y cómo mantendremos el sistema operativo con el tiempo.

En este tema veremos la lógica general del deployment de modelos de visión artificial, qué formas de despliegue existen, qué componentes suelen intervenir y qué riesgos aparecen cuando un modelo pasa del laboratorio a producción.

33.2 ¿Qué significa hacer deployment?

Hacer deployment significa tomar un modelo entrenado y convertirlo en un sistema utilizable por otras personas o por otros programas.

Eso puede tomar formas distintas:

  • Una API que recibe imágenes y devuelve predicciones.
  • Una aplicación de escritorio.
  • Un servicio en la nube.
  • Un sistema embebido en una cámara o dispositivo edge.
  • Un pipeline batch que procesa miles de archivos.

La idea central es la misma: el modelo deja de ser un experimento aislado y pasa a ser parte de un flujo operativo.

33.3 Del notebook al sistema real

En desarrollo solemos probar el modelo desde notebooks o scripts locales. Eso es útil para investigar, depurar y aprender. Pero un sistema real necesita algo más robusto.

Un usuario final no debería depender de abrir un notebook para clasificar una imagen. Normalmente necesita una interfaz, un endpoint o un proceso automático con entradas y salidas claras.

Un modelo en un notebook es un experimento. Un modelo desplegado es un servicio o componente que otros sistemas pueden usar de forma confiable.

33.4 Componentes típicos del deployment

En muchos despliegues de visión por computadora aparecen componentes como:

  • El archivo del modelo.
  • El código de preprocesamiento.
  • El motor de inferencia.
  • Una interfaz o API.
  • Un mecanismo de logging y monitoreo.
  • Configuración de hardware y dependencias.

Si alguno de estos elementos queda mal resuelto, el deployment puede fallar aunque el modelo sea bueno.

33.5 Preprocesamiento consistente

Una de las fuentes más comunes de errores en deployment es no respetar el mismo preprocesamiento usado durante entrenamiento o validación.

Si el modelo fue entrenado con cierto tamaño de entrada, normalización o espacio de color, el entorno desplegado debe reproducir esa lógica de forma consistente.

Un deployment incorrecto puede degradar fuertemente el desempeño sin que el modelo en sí esté mal.

33.6 Postprocesamiento y formato de salida

No alcanza con ejecutar la red. Muchas veces también hay que transformar la salida bruta en algo útil para el consumidor del sistema.

Por ejemplo:

  • En clasificación, convertir logits en clases y probabilidades.
  • En detección, filtrar cajas por score y aplicar NMS.
  • En segmentación, transformar máscaras en una forma visualizable.

Ese postprocesamiento también forma parte del deployment, no es un detalle accesorio.

33.7 Distintos modos de despliegue

No existe un único tipo de deployment. En visión por computadora suelen aparecer al menos tres escenarios frecuentes:

  • Procesamiento batch.
  • Inferencia online mediante API.
  • Procesamiento en tiempo real sobre video o streams.

Cada uno cambia las decisiones técnicas sobre latencia, throughput, escalado y arquitectura de sistema.

33.8 Deployment batch

En un esquema batch, el sistema procesa archivos acumulados: carpetas con imágenes, lotes de videos o trabajos programados.

Este modo es muy útil cuando no necesitamos respuesta inmediata. Por ejemplo, análisis nocturno de imágenes médicas, clasificación masiva de catálogos o procesamiento offline de video.

Aquí suele importar más el throughput total que la latencia individual de cada predicción.

33.9 Deployment online con API

Otra forma muy común es exponer el modelo mediante una API. Un cliente envía una imagen o una referencia a un archivo, y el servidor responde con la predicción.

Esto permite integrar el modelo con aplicaciones web, móviles, paneles de control o sistemas empresariales.

En este caso, el diseño de la interfaz del servicio es tan importante como el modelo: qué recibe, qué devuelve, cómo reporta errores y cómo autentica solicitudes.

33.10 Deployment en tiempo real

Cuando el sistema trabaja con cámaras o video continuo, la situación cambia bastante. Ya no se trata solo de procesar imágenes sueltas, sino de sostener un flujo constante.

En estos contextos importan especialmente:

  • FPS.
  • Latencia extremo a extremo.
  • Estabilidad del pipeline.
  • Consumo de recursos sostenido.

Un modelo puede rendir bien sobre imágenes sueltas y no alcanzar la exigencia del tiempo real.

33.11 Edge versus cloud

Una decisión central de deployment es dónde correrá la inferencia:

  • Edge: en el dispositivo o cerca de la fuente de datos.
  • Cloud: en un servidor remoto.

El edge reduce dependencia de red y puede mejorar privacidad o latencia. La nube facilita escalado y administración centralizada. La elección depende del caso de uso real.

33.12 Ventajas del edge

Desplegar en edge puede ser muy conveniente cuando:

  • La conexión es inestable o costosa.
  • La latencia debe ser muy baja.
  • No conviene enviar imágenes a un servidor remoto.
  • Hay requisitos de privacidad o soberanía de datos.

Claro que esto exige modelos más livianos y una ingeniería más ajustada al hardware disponible.

33.13 Ventajas de la nube

La nube ofrece ventajas operativas importantes:

  • Mayor capacidad de cómputo.
  • Escalado según demanda.
  • Versionado más centralizado.
  • Monitoreo y logging más fáciles de consolidar.

En muchos proyectos, la nube simplifica la administración general, aunque también agrega costos de infraestructura y dependencia de red.

33.14 Empaquetado del modelo

Para desplegar, el modelo debe guardarse de una forma que el sistema pueda cargar de manera confiable. En PyTorch, una opción habitual es:

torch.save(model.state_dict(), "modelo.pth")

Después, en el entorno de deployment, se reconstruye la arquitectura y se cargan los pesos.

33.15 Carga del modelo en producción

Una estructura muy típica del lado de inferencia es:

model = MiModelo()
state_dict = torch.load("modelo.pth", map_location=device)
model.load_state_dict(state_dict)
model.to(device)
model.eval()

Esta secuencia deja el modelo listo para recibir entradas en producción, siempre que el preprocesamiento coincida con el usado durante el desarrollo.

33.16 TorchScript y ONNX

En algunos entornos conviene exportar el modelo a un formato más portable o más fácil de ejecutar fuera del código PyTorch original.

Dos nombres frecuentes son:

  • TorchScript: para serializar y ejecutar modelos PyTorch de manera más controlada.
  • ONNX: para interoperar con otros runtimes o motores de inferencia.

No siempre son obligatorios, pero forman parte del panorama real de deployment.

33.17 Contenerización con Docker

Una práctica muy común es empaquetar el servicio de inferencia dentro de un contenedor Docker. Esto ayuda a que el entorno sea reproducible.

El contenedor suele incluir:

  • El código del servicio.
  • Las dependencias Python.
  • El modelo o la lógica para descargarlo.
  • La configuración de arranque.

Esto reduce el clásico problema de “en mi máquina funciona, en producción no”.

33.18 Una API mínima para inferencia

Conceptualmente, una API de inferencia hace algo como esto:

  1. Recibe una imagen.
  2. La valida.
  3. La preprocesa.
  4. Ejecuta el modelo.
  5. Devuelve una respuesta estructurada.

La lógica del modelo es solo una parte. También importan mucho la validación de entrada y el contrato de salida.

33.19 Ejemplo simple con FastAPI

Un ejemplo mínimo de endpoint de inferencia podría verse así:

from fastapi import FastAPI

app = FastAPI()

@app.post("/predict")
def predict():
    return {"clase": "gato", "score": 0.98}

Obviamente, en un sistema real aquí habría que recibir la imagen, preprocesarla, ejecutar el modelo y devolver una respuesta más rica. Pero este ejemplo ya muestra la idea de exponer inferencia como servicio.

33.20 Formato de la respuesta

Un buen deployment no solo “predice”, sino que devuelve información utilizable. En una respuesta JSON suelen incluirse elementos como:

  • Clase o clases predichas.
  • Scores o probabilidades.
  • Tiempos de inferencia.
  • Metadatos de la versión del modelo.

Esto facilita depuración, integración y trazabilidad.

33.21 Manejo de errores

En producción no debemos asumir que toda entrada será válida. Puede llegar un archivo corrupto, una imagen vacía, un formato inesperado o incluso una solicitud maliciosa.

Por eso el deployment debe contemplar:

  • Validación de tipo de archivo.
  • Límites de tamaño.
  • Mensajes de error claros.
  • Registro de fallos.

33.22 Versionado del modelo

Con el tiempo, un sistema real suele tener más de una versión del modelo. Tal vez entrenamos una variante mejor, o una más rápida, o una adaptada a otra población de datos.

Por eso conviene versionar explícitamente:

  • El archivo del modelo.
  • El código de inferencia.
  • Las transforms y configuración.
  • El contrato de la API.

Sin versionado, es difícil saber qué modelo generó cierta predicción o reproducir comportamientos pasados.

33.23 Monitoreo en producción

Una vez desplegado, el trabajo no termina. El modelo debe observarse en operación. Algunas señales importantes son:

  • Tasa de errores.
  • Latencia media.
  • Uso de CPU y memoria.
  • Distribución de clases predichas.
  • Volumen de solicitudes.

Esto ayuda a detectar caídas de servicio, degradaciones de rendimiento o comportamientos anómalos.

33.24 Drift y degradación

Un modelo puede funcionar muy bien al principio y degradarse luego porque cambian las condiciones reales: cámaras nuevas, distinta iluminación, nuevos tipos de imágenes o cambios en la población de datos.

A eso se lo suele relacionar con drift. El deployment serio debe contemplar que el entorno real no es estático y que puede exigir reentrenamiento o recalibración.

33.25 Seguridad y privacidad

En visión por computadora muchas veces se manejan imágenes sensibles: personas, documentos, vehículos, placas, estudios médicos o escenas internas de una empresa.

Por eso el deployment debe considerar también:

  • Control de acceso.
  • Cifrado en tránsito y almacenamiento.
  • Políticas de retención de imágenes.
  • Separación entre datos de prueba y datos reales.

Un modelo útil pero inseguro puede convertirse en un problema mayor que el que intenta resolver.

33.26 Ejemplo simple de pipeline de inferencia

Una estructura local muy básica de deployment podría verse así:

from PIL import Image
import torch

model.eval()

imagen = Image.open("entrada.jpg").convert("RGB")
tensor = preprocess(imagen).unsqueeze(0).to(device)

with torch.no_grad():
    salida = model(tensor)

pred = salida.argmax(dim=1).item()
print("Predicción:", pred)

Este ejemplo es simple, pero muestra el esqueleto central del deployment: cargar, preprocesar, inferir y devolver un resultado.

33.27 Errores comunes al hacer deployment

Algunos errores muy frecuentes son:

  • Desplegar un modelo sin respetar el preprocesamiento correcto.
  • No medir latencia y consumo en el hardware real.
  • No manejar errores de entrada.
  • No versionar el modelo ni el servicio.
  • Asumir que el desempeño observado en desarrollo se mantendrá igual en producción.
  • No monitorear el sistema una vez desplegado.

33.28 Qué debes recordar de este tema

  • Deployment significa convertir un modelo en un sistema usable por personas o programas.
  • El deployment incluye modelo, preprocesamiento, postprocesamiento, interfaz, dependencias y monitoreo.
  • Batch, API y tiempo real son modos de despliegue con exigencias distintas.
  • La decisión entre edge y cloud depende del caso de uso, la latencia, la privacidad y el hardware.
  • Versionado, validación de entradas y monitoreo son partes esenciales del ciclo de vida en producción.

33.29 Conclusión

El deployment es la etapa donde un modelo de visión artificial deja de ser una pieza académica y pasa a formar parte de un sistema real. Ahí importan tanto la precisión como la confiabilidad operacional, la latencia, la seguridad y la capacidad de mantenimiento.

Comprender esta etapa es fundamental para hacer ingeniería útil con modelos de visión por computadora. Muchas veces, el verdadero valor de un proyecto no está solo en entrenar un buen modelo, sino en conseguir que ese modelo funcione de manera estable, medible y sostenible en el mundo real.

En el próximo tema construiremos un caso práctico completo de clasificación de imágenes, integrando de punta a punta varios de los conceptos que ya desarrollamos a lo largo del curso.