Del laboratorio a producción
Instala Ultralytics, ejecuta YOLO26 con tus propias imágenes, comprueba el resultado según tus especificaciones y elige el siguiente paso.
Diez minutos con un modelo preentrenado bastan para responder a la pregunta que determina todo tu plan: ¿un modelo listo para usar ya cubre tus clases y tu cámara, o necesitas tus propios datos? Aquí instalarás Ultralytics, ejecutarás YOLO26 con imágenes reales y comprobarás el resultado según las especificaciones que redactaste en la primera lección.
Práctico
Instalación#
pip install ultralytics
yolo checksLa primera línea instala el paquete Python ultralytics y el comando yolo, además de PyTorch si aún no está instalado. yolo checks muestra las versiones de Python, PyTorch y CUDA, así como el hardware que utilizará Ultralytics, para que puedas confirmar la configuración antes de ejecutar nada. Usa un entorno virtual nuevo; en la guía de inicio rápido se explican las configuraciones con conda, Docker y GPU.
El paquete ultralytics se instala en Python 3.8 y versiones posteriores, pero las versiones actuales de PyTorch necesitan Python 3.10 o posterior. Si tu entorno es anterior, crea primero un entorno virtual nuevo con una versión reciente de Python.

Síntoma: yolo checks muestra CPU en una máquina con una GPU NVIDIA y la inferencia es lenta. Causa: una compilación de PyTorch solo para CPU; por ejemplo, la rueda pip predeterminada en Windows. Solución: selecciona tu sistema operativo, gestor de paquetes y versión de CUDA en el selector de PyTorch de arriba, ejecuta el comando que aparece y vuelve a instalar ultralytics. En un Mac, como en la captura de pantalla, la compilación predeterminada es la adecuada; Ultralytics se ejecuta en la CPU, a menos que pases device=mps para usar la GPU de Apple.
Una primera predicción#
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # descarga el modelo nano de ~5 MB en el primer uso
results = model("https://ultralytics.com/images/bus.jpg", save=True)
for box in results[0].boxes:
print(model.names[int(box.cls)], round(float(box.conf), 2))Ambos imprimen un resumen de una línea por imagen y guardan la imagen anotada en runs/detect/predict:
image 1/1 .../bus.jpg: 640x480 4 persons, 1 bus, 19.7ms
Speed: 0.9ms preprocess, 19.7ms inference, 0.4ms postprocess per image at shape (1, 3, 640, 480)
Results saved to runs/detect/predictLínea por línea: la imagen se ha redimensionado a 640×480 para la inferencia; el modelo ha detectado cuatro personas y un autobús; la inferencia ha tardado unos 20 ms en la CPU de un portátil. La línea Speed es tu primera comprobación de latencia: compárala con la frecuencia de fotogramas indicada en la línea de entrada de tus especificaciones. Abre la imagen guardada: cada caja muestra la clase, la caja y la confianza de la lección sobre detección.
Comprueba el resultado según tus especificaciones#
| Pregunta | Si la respuesta es sí | Si la respuesta es no |
|---|---|---|
| ¿Están tus clases entre las 80 clases de COCO que conoce el modelo? | Crear un prototipo sin entrenar | Necesitas datos etiquetados y un ajuste fino (guía de ajuste fino) |
| En tus imágenes, ¿las cajas por encima de tu umbral señalan los objetos correctos? | La tarea y el punto de vista coinciden | Espera una brecha de dominio: recopila datos de tus cámaras |
| ¿El tipo de salida es el que necesita tu criterio de decisión? | Mantén la tarea | Cambia los pesos: -seg, -sem, -depth, -pose, -obb o -cls |
| ¿Es lo bastante rápido para la frecuencia de fotogramas que necesitas en el hardware de destino? | Continúa | Prueba un modelo más pequeño o un formato de exportación optimizado |
La primera pregunta tiene una respuesta exacta: model.names enumera todas las clases que conoce el modelo preentrenado. En las especificaciones de la carretilla elevadora, person es una clase de COCO y forklift no lo es, así que ningún umbral hará que el modelo preentrenado detecte una carretilla elevadora. Este es el resultado más habitual en la primera ejecución: el modelo cubre parte de las especificaciones. Lo correcto es crear un prototipo de la lógica de decisión con las clases disponibles mientras preparas el conjunto de datos para las demás.
Qué cambia en producción#
Un modelo desplegado se encuentra con condiciones que nunca se incluyeron en el muestreo de su conjunto de datos: cámaras nuevas, estaciones del año, productos y uniformes. Sin reentrenamiento, la precisión se degrada; con reentrenamientos periódicos basados en lo que observas en producción, se recupera:

Todas las lecciones de este curso alimentan ese ciclo: las especificaciones definen un fallo, la auditoría de cobertura indica dónde buscar, el validador de etiquetas y las directrices permiten aprovechar los datos nuevos, y las particiones y métricas fiables te dicen si el modelo reentrenado es realmente mejor. Dos hábitos ayudan a que funcione desde el primer día: registra una muestra de las entradas y predicciones, incluidas las de baja confianza, y conserva el conjunto de prueba congelado para comparar todos los modelos con las mismas imágenes. En Observabilidad y deriva se explica en profundidad la supervisión de la deriva de datos.
Qué hacer a continuación#
| Curso | Hazlo cuando |
|---|---|
| Creación de conjuntos de datos YOLO de alto rendimiento | Tus clases no están preentrenadas o tus escenas son distintas de COCO |
| Entrena tu primer modelo YOLO | Tienes un conjunto de datos etiquetado y quieres ajustarlo |
| Ultralytics YOLO en producción | Tienes un modelo y necesitas exportarlo, realizar un seguimiento y supervisarlo |
| Crea con Ultralytics Platform | Quieres gestionar los datos, el etiquetado, el entrenamiento y el despliegue en un solo lugar |
¿Prefieres un flujo de trabajo en el navegador? Ultralytics Platform ejecuta el mismo ciclo —subir, anotar, entrenar y desplegar— sin necesidad de instalar nada localmente:
Mostrar solución
from pathlib import Path
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# 1. Which classes in your output line does the pretrained model already know?
spec_classes = {"person", "forklift"}
known = set(model.names.values())
print(f"pretrained: {sorted(spec_classes & known)} needs your own data: {sorted(spec_classes - known)}")
# 2. What does it find on your images?
sources = [
"https://ultralytics.com/images/bus.jpg", # replace with your own images
"https://ultralytics.com/images/zidane.jpg",
]
for source, result in zip(sources, model.predict(sources, conf=0.25, save=True, verbose=False)):
names = [result.names[int(c)] for c in result.boxes.cls]
print(f"{Path(source).name}: {len(names)} detections -> {sorted(set(names))}")pretrained: ['person'] needs your own data: ['forklift']
bus.jpg: 5 detections -> ['bus', 'person']
zidane.jpg: 3 detections -> ['person', 'tie']Para las especificaciones de la carretilla elevadora: person está cubierta y forklift no. Siguiente paso: crea ahora un prototipo de la regla de zona para personas con el modelo preentrenado y empieza el curso Creación de conjuntos de datos YOLO de alto rendimiento para recopilar y etiquetar carretillas elevadoras captadas por las cámaras del almacén.