Ultralytics YOLO27:
Get Started

Predicción de modelos con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introducción#

En el ámbito del aprendizaje automático y la visión artificial, el proceso de interpretar datos visuales suele denominarse inferencia o predicción. Ultralytics YOLO26 ofrece una potente función llamada modo de predicción, diseñada para realizar inferencias de alto rendimiento en tiempo real con una amplia variedad de fuentes de datos.

Consulta la vista previa de YOLO27 aún no publicada para ver ejemplos de inferencia previstos.



Ver: Cómo extraer resultados de las tareas de Ultralytics YOLO26 para proyectos personalizados 🚀

Aplicaciones en el mundo real#

FabricaciónDeportesSeguridad
Detección de piezas de repuesto de vehículosDetección de jugadores de fútbolDetección de caídas de personas

¿Por qué usar Ultralytics YOLO para la inferencia?#

Estas son algunas razones para considerar el modo de predicción de YOLO26 para tus distintas necesidades de inferencia:

  • Versatilidad: Puede ejecutar inferencias sobre imágenes, vídeos e incluso transmisiones en directo.
  • Rendimiento: Diseñado para procesar datos a gran velocidad y en tiempo real sin sacrificar la precisión.
  • Facilidad de uso: Interfaces intuitivas de Python y CLI para implementar y probar rápidamente.
  • Altamente personalizable: Diversos ajustes y parámetros para adaptar el comportamiento de inferencia del modelo a tus requisitos específicos.
  • Listo para producción: Implementa modelos como puntos de conexión de inferencia de Ultralytics Platform con escalado automático y supervisión, o ejecuta inferencias en local.

Características principales del modo de predicción#

El modo de predicción de YOLO26 está diseñado para ser robusto y versátil, e incluye:

  • Compatibilidad con varios tipos de fuentes de datos: Tanto si tus datos son imágenes individuales, un conjunto de imágenes, archivos de vídeo o transmisiones de vídeo en tiempo real, el modo de predicción te ofrece todo lo que necesitas.
  • Modo de transmisión: Usa la función de transmisión para generar un generador de objetos Results que ahorra memoria. Actívala estableciendo stream=True en el método de llamada del predictor. A diferencia del comportamiento predeterminado (stream=False), que devuelve una lista con todos los resultados, stream=True produce los resultados uno a uno, lo que resulta especialmente útil para vídeos largos y transmisiones en directo.
  • Procesamiento por lotes: Procesa varias imágenes o fotogramas de vídeo en un solo lote para reducir aún más el tiempo total de inferencia.
  • Fácil integración: Gracias a su API flexible, se integra fácilmente con las canalizaciones de datos existentes y otros componentes de software.

Los modelos Ultralytics YOLO devuelven una lista de objetos Results de Python o, si se pasa stream=True al modelo durante la inferencia, un generador de objetos Results que ahorra memoria:

Predecir
from ultralytics import YOLO

# Cargar un modelo
model = YOLO("yolo26n.pt")  # modelo YOLO26n preentrenado

# Ejecuta la inferencia por lotes en una lista de imágenes
results = model(["image1.jpg", "image2.jpg"])  # devuelve una lista de objetos Results

# Procesa la lista de resultados
for result in results:
    boxes = result.boxes  # Objeto Boxes para las salidas de cuadros delimitadores
    masks = result.masks  # Objeto Masks para las salidas de máscaras de segmentación
    keypoints = result.keypoints  # Objeto Keypoints para las salidas de pose
    probs = result.probs  # Objeto Probs para las salidas de clasificación
    obb = result.obb  # Objeto Oriented boxes para las salidas OBB
    result.show()  # mostrar en pantalla
    result.save(filename="result.jpg")  # guardar en el disco

Fuentes de inferencia#

YOLO26 puede procesar distintos tipos de fuentes de entrada para realizar inferencias, como se muestra en la siguiente tabla. Entre las fuentes hay imágenes estáticas, transmisiones de vídeo y varios formatos de datos. La tabla también indica si se puede usar cada fuente en modo de transmisión con el argumento stream=True ✅. El modo de transmisión resulta útil para procesar vídeos o emisiones en directo, ya que crea un generador de resultados en lugar de cargar todos los fotogramas en memoria.

Consejo

Usa stream=True para procesar vídeos largos o conjuntos de datos grandes y gestionar la memoria de forma eficiente. Cuando se usa stream=False, los resultados de todos los fotogramas o puntos de datos se almacenan en memoria, lo que puede acumularse rápidamente y provocar errores de falta de memoria con entradas grandes. En cambio, stream=True utiliza un generador que solo mantiene en memoria los resultados del fotograma o punto de datos actual, lo que reduce considerablemente el consumo de memoria y evita problemas de falta de memoria.

FuenteEjemploTipoNotas
imagen'image.jpg'str o PathArchivo de imagen individual.
URL'https://ultralytics.com/images/bus.jpg'strURL de una imagen.
captura de pantalla'screen'strHaz una captura de pantalla.
PILImage.open('image.jpg')PIL.ImageFormato HWC con canales RGB.
OpenCVcv2.imread('image.jpg')np.ndarrayFormato HWC con canales BGR uint8 (0-255).
NumPynp.zeros((640,1280,3))np.ndarrayFormato HWC con canales BGR uint8 (0-255).
torchtorch.zeros(16,3,320,640)torch.TensorFormato BCHW con canales RGB float32 (0.0-1.0).
CSV'sources.csv'str o PathArchivo CSV con rutas a imágenes, vídeos o directorios.
vídeo ✅'video.mp4'str o PathArchivo de vídeo en formatos como MP4, AVI, etc.
directorio ✅'path/'str o PathRuta a un directorio que contiene imágenes o vídeos.
glob ✅'path/*.jpg'strPatrón glob para buscar varios archivos. Usa el carácter * como comodín.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strURL de un vídeo de YouTube.
transmisión ✅'rtsp://example.com/media.mp4'strURL para protocolos de transmisión como RTSP, RTMP, TCP o una dirección IP.
varias transmisiones ✅'list.streams'str o PathArchivo de texto *.streams con una URL de transmisión por fila; es decir, se ejecutarán 8 transmisiones con un tamaño de lote de 8.
cámara web ✅0intÍndice del dispositivo de cámara conectado en el que se ejecutará la inferencia.

A continuación se muestran ejemplos de código para usar cada tipo de fuente:

Fuentes de predicción

Ejecuta inferencias sobre un archivo de imagen.

from ultralytics import YOLO

# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")

# Define la ruta al archivo de imagen
source = "path/to/image.jpg"

# Ejecuta la inferencia sobre la fuente
results = model(source)  # lista de objetos Results

Argumentos de inferencia#

model.predict() acepta varios argumentos que puedes pasar en el momento de la inferencia para sustituir los valores predeterminados:

Tamaño fijo frente a rectángulo mínimo (rect)#

De forma predeterminada, predict usa rect=True, que aplica un relleno de rectángulo mínimo cuando es posible. La imagen se escala para caber dentro de imgsz y solo se rellena hasta el múltiplo de stride más cercano, por lo que el tensor final puede ser más pequeño que imgsz. El relleno de rectángulo mínimo solo se usa cuando todas las imágenes del lote tienen la misma forma y el backend lo admite (PyTorch .pt o una exportación con forma dinámica, como ONNX dinámico). En caso contrario, las imágenes se rellenan hasta el objetivo imgsz completo.

Usa rect=False para rellenar siempre hasta el objetivo imgsz completo. Se recomienda esta opción cuando necesitas un tamaño de entrada fijo que coincida con el de los modelos exportados (ONNX, TensorRT, etc.).

imgsz entero frente a tupla

  • Un imgsz=640 entero se convierte en un objetivo cuadrado (640, 640) tras el redondeo al stride.
  • Una tupla imgsz=(384, 672) establece un objetivo rectangular. Con rect=True, el tensor real puede ser más pequeño que este objetivo.

Entrenamiento frente a predict/export

El entrenamiento solo acepta un imgsz entero (una lista [h, w] se convierte en el valor más alto). Predict y export aceptan un entero o una tupla (height, width).

Ejemplo
from ultralytics import YOLO

# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")

# Ejecuta inferencias en «bus.jpg» con argumentos
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)

Argumentos de inferencia:

ArgumentoTipoPredeterminadoDescripción
sourcestr o int o NoneNoneEspecifica el origen de datos para la inferencia. Puede ser la ruta a una imagen, un archivo de vídeo, un directorio, una URL o el ID de un dispositivo para transmisiones en directo. Si se omite, se registra una advertencia y el modelo recurre a los recursos de demostración integrados (ultralytics/assets o una URL de demostración para OBB). Admite una amplia variedad de formatos y orígenes, lo que permite usarlo con flexibilidad en distintos tipos de entrada.
conffloat0.25Establece el umbral mínimo de confianza para las detecciones. Se descartan los objetos detectados con un nivel de confianza inferior a este umbral. Ajustar este valor puede ayudar a reducir los falsos positivos.
ioufloat0.7Umbral de intersección sobre unión (IoU) para la supresión no máxima (NMS). Los valores más bajos producen menos detecciones al eliminar cuadros superpuestos, lo que resulta útil para reducir los duplicados.
imgszint o tuple640Objetivo de Letterbox. Un entero define un N×N cuadrado; una tupla define (height, width). Con rect=True, el tensor real puede ser más pequeño que este objetivo debido al relleno mínimo en rectángulo. Usa rect=False para fijar el tamaño. Consulta Forma fija frente a rectángulo mínimo.
rectboolTrueSi True, usa el relleno mínimo en rectángulo cuando sea posible (lotes con la misma forma y backend compatible). Si False, rellena siempre hasta el valor completo de imgsz. Consulta Forma fija frente a rectángulo mínimo.
quantizeint o strNonePrecisión de inferencia: 16/"fp16" y 32/"fp32"/unset seleccionan el cálculo FP16 o FP32 para los modelos PyTorch y TorchScript (FP32 en CPU); los demás formatos usan la precisión que seleccionen el artefacto y el entorno de ejecución. En 16, OpenVINO sigue redondeando la entrada a FP16 en el cliente y volviéndola a ampliar a FP32, sin cambiar la precisión del entorno de ejecución. La cuantización INT8/PTQ se configura durante la exportación y se utiliza después al cargar el modelo exportado. Sustituye a la marca obsoleta half.
devicestrNoneEspecifica el dispositivo para la inferencia (p. ej., cpu, cuda:0, 0, npu o npu:0). Permite seleccionar entre CPU, una GPU específica, una NPU Huawei Ascend u otros dispositivos de cálculo para ejecutar el modelo.
dnnboolFalseSi True, usa el módulo DNN de OpenCV en lugar de ONNX Runtime para la inferencia de modelos ONNX.
datastrNoneRuta a un YAML del conjunto de datos (p. ej., coco8.yaml) que se lee solo para obtener su names, y únicamente cuando el modelo cargado no incluye nombres de clase propios: una exportación de terceros o una exportación de Ultralytics separada de los metadatos que la acompañan. De lo contrario, el modelo indica class0, class1, etc.
batchint1Especifica el tamaño del lote para la inferencia (solo funciona cuando el origen es un directorio, un archivo de vídeo o un archivo .txt). Un tamaño de lote mayor puede aumentar el rendimiento y reducir el tiempo total necesario para la inferencia.
max_detint300Número máximo de detecciones permitido por imagen. Limita el número total de objetos que el modelo puede detectar en una sola inferencia para evitar resultados excesivos en escenas densas.
vid_strideint1Salto de fotogramas para entradas de vídeo. Permite omitir fotogramas para acelerar el procesamiento a costa de la resolución temporal. El valor 1 procesa todos los fotogramas; los valores superiores los omiten.
stream_bufferboolFalseDetermina si se ponen en cola los fotogramas entrantes de las secuencias de vídeo. Si False, se descartan los fotogramas antiguos para dejar sitio a los nuevos (optimizado para aplicaciones en tiempo real). Si True, los fotogramas nuevos se guardan en un búfer para garantizar que no se omita ninguno, pero se introduce latencia si los FPS de inferencia son inferiores a los FPS de la secuencia.
visualizeboolFalseGuarda un mapa de calor de activación de clases junto a cada predicción, que muestra qué píxeles han elevado las puntuaciones de la clase predicha. Respeta conf y classes, por lo que classes=[0] solo asigna esa clase. Solo está disponible para modelos PyTorch de Ultralytics.
augmentboolFalseActiva el aumento en tiempo de prueba (TTA) para las predicciones, lo que puede mejorar la robustez de la detección a costa de la velocidad de inferencia. Solo está disponible para modelos PyTorch de Ultralytics.
agnostic_nmsboolFalseActiva la supresión no máxima (NMS) independiente de la clase, que suprime los cuadros solapados con puntuaciones más bajas entre clases distintas, en lugar de hacerlo solo dentro de la misma clase. Es útil en escenarios de detección multiclase donde los solapamientos entre clases son frecuentes. Con la inferencia sin NMS (nms=False en YOLO26 o YOLOv10), solo impide que la misma detección aparezca con varias etiquetas de clase (duplicados con IoU=1.0); no suprime cuadros distintos según el umbral de IoU.
classeslist[int]NoneFiltra las predicciones para limitarse a un conjunto de ID de clase. Solo se devuelven las detecciones pertenecientes a las clases especificadas. Es útil para centrarse en los objetos relevantes en tareas de detección multiclase.
retina_masksboolFalseDevuelve máscaras de segmentación de alta resolución. Si se activa, las máscaras devueltas (masks.data) coinciden con el tamaño de la imagen original. Si se desactiva, tienen el tamaño de imagen utilizado durante la inferencia.
embedlist[int]NoneEspecifica las capas de las que se extraen vectores de características o embeddings. Usa model.embed(source) para obtener embeddings de la penúltima capa o model.predict(source, embed=[layer]) para seleccionar capas concretas. Es útil para tareas posteriores, como la agrupación en clústeres o la búsqueda por similitud. Solo está disponible para modelos PyTorch de Ultralytics.
projectstrNoneNombre del directorio del proyecto donde se guardan los resultados de las predicciones si se activa save.
namestrNoneNombre de la ejecución de predicción. Se usa para crear un subdirectorio dentro de la carpeta del proyecto, donde se guardan los resultados de las predicciones si se activa save.
streamboolFalsePermite procesar de forma eficiente en cuanto a memoria vídeos largos o numerosas imágenes, ya que devuelve un generador de objetos Results en lugar de cargar todos los fotogramas en memoria a la vez.
verboseboolTrueControla si se muestran registros detallados de inferencia en el terminal para ofrecer información en tiempo real sobre el proceso de predicción.
compilebool o strFalseActiva la compilación de grafos torch.compile de PyTorch 2.x con backend='inductor'. Acepta True → "default" para activarla, False → para desactivarla o un modo de cadena como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Si no es compatible, vuelve al modo eager y muestra una advertencia.
channels_lastboolNoneUsa el formato de memoria channels_last (NHWC) para la inferencia nativa de PyTorch. None lo activa automáticamente en CPU x86 con Linux y Windows, compatible con oneDNN y PyTorch 1.13 o posterior; False lo desactiva y True lo solicita en dispositivos CPU x86 o CUDA compatibles. ARM64, MPS, las versiones anteriores de PyTorch, las CPU sin oneDNN y los formatos exportados como TensorRT y ONNX no cambian.
nmsbool, opcionalNonePor defecto, ejecuta inferencia uno a varios con NMS (None o True). Configura False para usar el cabezal uno a uno sin NMS cuando esté disponible. Consulta la guía de detección de extremo a extremo para obtener más información.

Argumentos de visualización:

ArgumentoTipoPredeterminadoDescripción
showboolFalseSi True, muestra las imágenes o los vídeos anotados en una ventana. Es útil para obtener información visual inmediata durante el desarrollo o las pruebas.
saveboolFalse or TrueActiva el guardado de las imágenes o los vídeos anotados en archivos. Es útil para documentar, analizar más adelante o compartir resultados. De forma predeterminada, es True al usar la CLI y False al usar Python.
save_framesboolFalseAl procesar vídeos, guarda fotogramas individuales como imágenes. Es útil para extraer fotogramas concretos o analizarlos detalladamente uno por uno.
save_txtboolFalseGuarda los resultados de detección en un archivo de texto con el formato [class] [x_center] [y_center] [width] [height] [confidence]. Es útil para integrarlos con otras herramientas de análisis.
save_confboolFalseIncluye puntuaciones de confianza en los archivos de texto guardados. Ofrece más detalles para el posprocesamiento y el análisis.
save_cropboolFalseGuarda imágenes recortadas de las detecciones. Es útil para aumentar conjuntos de datos, realizar análisis o crear conjuntos de datos centrados en objetos concretos.
show_labelsboolTrueMuestra etiquetas para cada detección en la salida visual. Facilita la identificación inmediata de los objetos detectados.
show_confboolTrueMuestra la puntuación de confianza de cada detección junto a su etiqueta. Permite conocer el grado de certeza del modelo para cada detección.
show_boxesboolTrueDibuja cuadros delimitadores alrededor de los objetos detectados. Es esencial para identificar visualmente y localizar objetos en imágenes o fotogramas de vídeo.
line_widthint or NoneNoneEspecifica el grosor de línea de los cuadros delimitadores. Si None, el grosor de línea se ajusta automáticamente al tamaño de la imagen. Permite personalizar la visualización para mejorar la claridad.

Formatos de imagen y vídeo#

YOLO26 admite varios formatos de imagen y vídeo, como se especifica en ultralytics/data/utils.py. Consulta las tablas siguientes para ver las extensiones válidas y ejemplos de comandos predict.

Imágenes#

La tabla siguiente contiene los formatos de imagen válidos de Ultralytics.

Nota

Los formatos HEIC/HEIF requieren pi-heif, que se instala automáticamente la primera vez que se usa. Pillow admite AVIF de forma nativa.

Extensiones de imagenEjemplo de comando predictReferencia
.avifyolo predict source=image.avifFormato de archivo de imagen AV1
.bmpyolo predict source=image.bmpFormato de archivo BMP de Microsoft
.dngyolo predict source=image.dngDNG de Adobe
.heicyolo predict source=image.heicFormato de imagen de alta eficiencia
.heifyolo predict source=image.heifFormato de imagen de alta eficiencia
.jp2yolo predict source=image.jp2JPEG 2000
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoObjeto de varias imágenes
.pngyolo predict source=image.pngGráficos de red portátiles
.tifyolo predict source=image.tifFormato de archivo de imagen etiquetado
.tiffyolo predict source=image.tiffFormato de archivo de imagen etiquetado
.webpyolo predict source=image.webpWebP

Vídeos#

La tabla siguiente contiene los formatos de vídeo válidos de Ultralytics.

Extensiones de vídeoEjemplo de comando predictReferencia
.asfyolo predict source=video.asfFormato de sistemas avanzados
.aviyolo predict source=video.aviEntrelazado de audio y vídeo
.gifyolo predict source=video.gifFormato de intercambio de gráficos
.m4vyolo predict source=video.m4vMPEG-4 Parte 14
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movFormato de archivo QuickTime
.mp4yolo predict source=video.mp4MPEG-4 Parte 14 - Wikipedia
.mpegyolo predict source=video.mpegMPEG-1 Parte 2
.mpgyolo predict source=video.mpgMPEG-1 Parte 2
.tsyolo predict source=video.tsFlujo de transporte MPEG
.wmvyolo predict source=video.wmvVídeo de Windows Media
.webmyolo predict source=video.webmProyecto WebM

Trabajar con resultados#

Todas las llamadas de Ultralytics predict() devuelven una lista de objetos Results:

Resultados
from ultralytics import YOLO

# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")

# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
    [
        "https://ultralytics.com/images/bus.jpg",
        "https://ultralytics.com/images/zidane.jpg",
    ]
)  # inferencias por lotes

Los objetos Results tienen los siguientes atributos:

AtributoTipoDescripción
orig_imgnp.ndarrayLa imagen original como matriz NumPy.
orig_shapetupleLa forma de la imagen original en formato (alto, ancho).
boxesBoxes, optionalUn objeto Boxes que contiene los cuadros delimitadores de las detecciones.
masksMasks, optionalUn objeto Masks que contiene las máscaras de las detecciones.
probsProbs, optionalUn objeto Probs que contiene las probabilidades de cada clase para la tarea de clasificación.
keypointsKeypoints, optionalUn objeto Keypoints que contiene los puntos clave detectados de cada objeto.
obbOBB, optionalUn objeto OBB que contiene cuadros delimitadores orientados.
semantic_maskSemanticMask, optionalUn objeto SemanticMask que contiene un mapa de clases denso por píxel.
depthDepthMap, optionalUn objeto DepthMap que contiene un mapa de profundidad denso por píxel.
speeddictUn diccionario con las velocidades de preprocesamiento, inferencia y posprocesamiento, en milisegundos por imagen.
namesdictUn diccionario que asigna índices de clase a nombres de clase.
pathstrLa ruta al archivo de imagen.
save_dirstr, optionalDirectorio en el que guardar los resultados.

Resultados por tarea#

Los campos que se rellenan a continuación dependen de la tarea del modelo: compara la detección, la segmentación, la segmentación semántica, la estimación de profundidad, la clasificación, la pose y OBB si aún no has elegido una. Cada predicción devuelve un objeto Results por imagen o fotograma. Los campos comunes anteriores siempre están disponibles, mientras que los datos de predicción específicos de cada tarea se almacenan en los campos siguientes. Los tensores de coordenadas y confianza de YOLO son torch.float32; los tensores de probabilidad son torch.float32, salvo que se use inferencia FP16 (quantize=16), en cuyo caso son torch.float16. Después de result.numpy(), los tensores se convierten en matrices NumPy con tipos de datos NumPy equivalentes. Las máscaras de instancia son tensores binarios torch.uint8, mientras que las máscaras semánticas usan el tipo de dato entero más pequeño que resulte práctico para los ID de clase: torch.uint8, torch.int16 o torch.int32, según el número de clases.

AtributoTipoFormaDescripción
result.boxesBoxes(N)Cuadros de detección.
result.boxes.datatorch.float32(N,6/7)[x1,y1,x2,y2,conf,cls] sin procesar, más un ID de seguimiento opcional.
result.boxes.xyxytorch.float32(N,4)Cuadros de píxeles xyxy.
result.boxes.conftorch.float32(N,)Puntuaciones de confianza.
result.boxes.clstorch.float32(N,)ID de clase; conviértelos a int para obtener los nombres.

Los objetos Results tienen los siguientes métodos:

MétodoTipo de retornoDescripción
update()NoneActualiza el objeto Results con datos nuevos, como cajas, máscaras, probs, obb, puntos clave, máscaras semánticas o profundidad.
cpu()ResultsDevuelve una copia del objeto Results con todos los tensores trasladados a la memoria de la CPU.
numpy()ResultsDevuelve una copia del objeto Results con todos los tensores convertidos en matrices NumPy.
cuda()ResultsDevuelve una copia del objeto Results con todos los tensores trasladados a la memoria de la GPU.
to()ResultsDevuelve una copia del objeto Results con los tensores trasladados al dispositivo y tipo de datos especificados.
new()ResultsCrea un nuevo objeto Results con los mismos atributos de imagen, ruta, nombres y velocidad.
plot()np.ndarrayRepresenta los resultados de detección en una imagen BGR de entrada y devuelve la imagen anotada.
show()NoneMuestra la imagen con los resultados de inferencia anotados.
save()strGuarda en un archivo la imagen con los resultados de inferencia anotados y devuelve el nombre del archivo.
verbose()strDevuelve una cadena de registro para cada tarea, con detalles de los resultados de detección y clasificación.
save_txt()strGuarda los resultados de detección en un archivo de texto y devuelve la ruta del archivo guardado.
save_crop()NoneGuarda las imágenes recortadas de detección en el directorio especificado.
summary()List[Dict[str, Any]]Convierte los resultados de inferencia en un diccionario resumido, con normalización opcional.
to_df()DataFrameConvierte los resultados de detección en un DataFrame de Polars.
to_csv()strConvierte los resultados de detección al formato CSV.
to_json()strConvierte los resultados de detección al formato JSON.

Para obtener más información, consulta la documentación de la clase Results.

Cajas#

El objeto Boxes se puede usar para indexar y manipular cajas delimitadoras, y convertirlas a distintos formatos.

Cajas
from ultralytics import YOLO

# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")

# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg")  # lista de resultados

# Ver resultados
for r in results:
    print(r.boxes)  # imprimir el objeto Boxes que contiene las cajas delimitadoras de detección

Aquí tienes una tabla con los métodos y propiedades de la clase Boxes, incluidos sus nombres, tipos y descripciones:

NombreTipoDescripción
cpu()MétodoTraslada el objeto a la memoria de la CPU.
numpy()MétodoConvierte el objeto en una matriz NumPy.
cuda()MétodoTraslada el objeto a la memoria de CUDA.
to()MétodoTraslada el objeto al dispositivo especificado.
xyxyPropiedad (torch.Tensor)Devuelve las cajas en formato xyxy.
confPropiedad (torch.Tensor)Devuelve los valores de confianza de las cajas.
clsPropiedad (torch.Tensor)Devuelve los valores de clase de las cajas.
idPropiedad (torch.Tensor)Devuelve los ID de seguimiento de las cajas (si están disponibles).
xywhPropiedad (torch.Tensor)Devuelve las cajas en formato xywh.
xyxynPropiedad (torch.Tensor)Devuelve las cajas en formato xyxy, normalizadas según el tamaño original de la imagen.
xywhnPropiedad (torch.Tensor)Devuelve las cajas en formato xywh, normalizadas según el tamaño original de la imagen.

Para obtener más información, consulta la documentación de la clase Boxes.

Máscaras#

El objeto Masks se puede usar para indexar y manipular máscaras, y convertirlas en segmentos.

Máscaras
from ultralytics import YOLO

# Cargar un modelo de segmentación YOLO26n-seg preentrenado
model = YOLO("yolo26n-seg.pt")

# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg")  # lista de resultados

# Ver resultados
for r in results:
    print(r.masks)  # imprimir el objeto Masks que contiene las máscaras de instancia detectadas

Aquí tienes una tabla con los métodos y propiedades de la clase Masks, incluidos sus nombres, tipos y descripciones:

NombreTipoDescripción
dataPropiedad (torch.Tensor)Tensor de máscara binaria torch.uint8 con forma (N,H,W) y valores 0 o 1.
cpu()MétodoDevuelve el tensor de máscaras en la memoria de la CPU.
numpy()MétodoDevuelve el tensor de máscaras como una matriz NumPy.
cuda()MétodoDevuelve el tensor de máscaras en la memoria de la GPU.
to()MétodoDevuelve el tensor de máscaras con el dispositivo y el tipo de datos especificados.
xynPropiedad (list[np.ndarray])Una lista de polígonos de máscara normalizados.
xyPropiedad (list[np.ndarray])Una lista de polígonos de máscara en coordenadas de píxeles.

Para obtener más información, consulta la documentación de la clase Masks.

Máscara semántica#

SemanticMask almacena un mapa de clases denso para los resultados de segmentación semántica. A diferencia de Masks, no contiene una máscara binaria por objeto ni proporciona funciones auxiliares para polígonos.

Máscara semántica
from ultralytics import YOLO

# Cargar un modelo semántico YOLO26n-sem preentrenado
model = YOLO("yolo26n-sem.pt")

# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg")  # lista de resultados

# Ver resultados
for r in results:
    print(r.semantic_mask.data)  # imprimir el mapa de ID de clase H x W
NombreTipoDescripción
dataPropiedad (torch.Tensor)Mapa de ID de clase con forma (H,W). El tipo de datos es torch.uint8, torch.int16 o torch.int32, según el número de clases.
shapePropiedad (tuple)Forma del mapa de clases, que suele coincidir con result.orig_shape.
cpu()MétodoDevuelve el tensor de máscara semántica en la memoria de la CPU.
numpy()MétodoDevuelve el tensor de máscara semántica como una matriz NumPy.
cuda()MétodoDevuelve el tensor de máscara semántica en la memoria de la GPU.
to()MétodoDevuelve el tensor de máscara semántica con el dispositivo y el tipo de datos especificados.

Puntos clave#

El objeto Keypoints se puede usar para indexar y manipular coordenadas, y normalizarlas.

Puntos clave
from ultralytics import YOLO

# Cargar un modelo Pose YOLO26n-pose preentrenado
model = YOLO("yolo26n-pose.pt")

# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg")  # lista de resultados

# Ver resultados
for r in results:
    print(r.keypoints)  # imprimir el objeto Keypoints que contiene los puntos clave detectados

Aquí tienes una tabla con los métodos y propiedades de la clase Keypoints, incluidos sus nombres, tipos y descripciones:

NombreTipoDescripción
cpu()MétodoDevuelve el tensor de puntos clave en la memoria de la CPU.
numpy()MétodoDevuelve el tensor de puntos clave como una matriz NumPy.
cuda()MétodoDevuelve el tensor de puntos clave en la memoria de la GPU.
to()MétodoDevuelve el tensor de puntos clave con el dispositivo y el tipo de datos especificados.
xynPropiedad (torch.Tensor)Coordenadas normalizadas de puntos clave con forma (N,K,2).
xyPropiedad (torch.Tensor)Coordenadas de puntos clave en píxeles con forma (N,K,2).
confPropiedad (torch.Tensor)Devuelve los valores de confianza de los puntos clave si están disponibles; de lo contrario, devuelve None.

Para obtener más información, consulta la documentación de la clase Keypoints.

Probabilidades#

El objeto Probs se puede usar para obtener los índices y las puntuaciones de clasificación top1 y top5.

Probabilidades
from ultralytics import YOLO

# Cargar un modelo Classify YOLO26n-cls preentrenado
model = YOLO("yolo26n-cls.pt")

# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg")  # lista de resultados

# Ver resultados
for r in results:
    print(r.probs)  # imprimir el objeto Probs que contiene las probabilidades de clase detectadas

Aquí tienes una tabla que resume los métodos y las propiedades de la clase Probs:

NombreTipoDescripción
cpu()MétodoDevuelve una copia del tensor probs en la memoria de la CPU.
numpy()MétodoDevuelve una copia del tensor probs como matriz NumPy.
cuda()MétodoDevuelve una copia del tensor probs en la memoria de la GPU.
to()MétodoDevuelve una copia del tensor probs con el dispositivo y el tipo de datos especificados.
top1Propiedad (int)Índice de la clase con mayor puntuación.
top5Propiedad (list[int])Índices de las 5 clases con mayor puntuación.
top1confPropiedad (torch.Tensor)Confianza de la clase con mayor puntuación.
top5confPropiedad (torch.Tensor)Confianzas de las 5 clases con mayor puntuación.

Para obtener más información, consulta la documentación de la clase Probs.

OBB#

El objeto OBB permite indexar, manipular y convertir cajas delimitadoras orientadas a distintos formatos.

OBB
from ultralytics import YOLO

# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n-obb.pt")

# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/boats.jpg")  # lista de resultados

# Ver resultados
for r in results:
    print(r.obb)  # imprime el objeto OBB que contiene las cajas delimitadoras orientadas de las detecciones

Aquí tienes una tabla con los métodos y propiedades de la clase OBB, incluidos sus nombres, tipos y descripciones:

NombreTipoDescripción
cpu()MétodoTraslada el objeto a la memoria de la CPU.
numpy()MétodoConvierte el objeto en una matriz NumPy.
cuda()MétodoTraslada el objeto a la memoria de CUDA.
to()MétodoTraslada el objeto al dispositivo especificado.
confPropiedad (torch.Tensor)Devuelve los valores de confianza de las cajas.
clsPropiedad (torch.Tensor)Devuelve los valores de clase de las cajas.
idPropiedad (torch.Tensor)Devuelve los ID de seguimiento de las cajas (si están disponibles).
xyxyPropiedad (torch.Tensor)Devuelve las cajas horizontales en formato xyxy.
xywhrPropiedad (torch.Tensor)Devuelve las cajas giradas en formato xywhr.
xyxyxyxyPropiedad (torch.Tensor)Devuelve las cajas giradas en formato xyxyxyxy.
xyxyxyxynPropiedad (torch.Tensor)Devuelve las cajas giradas en formato xyxyxyxy normalizadas según el tamaño de la imagen.

Para obtener más información, consulta la documentación de la clase OBB.

Representación de resultados#

El método plot() de los objetos Results facilita la visualización de las predicciones al superponer los objetos detectados (como cajas delimitadoras, máscaras, puntos clave y probabilidades) sobre la imagen original. Este método devuelve la imagen anotada como una matriz NumPy, lo que permite mostrarla o guardarla fácilmente.

Representación
from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on 'bus.jpg'
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"])  # results list

# Visualize the results
for i, r in enumerate(results):
    # Plot results image
    im_bgr = r.plot()  # BGR-order numpy array
    im_rgb = Image.fromarray(im_bgr[..., ::-1])  # RGB-order PIL image

    # Show results to screen (in supported environments)
    r.show()

    # Save results to disk
    r.save(filename=f"results{i}.jpg")

Parámetros del método plot()#

El método plot() admite varios argumentos para personalizar el resultado:

ArgumentoTipoDescripciónPredeterminado
confboolIncluye las puntuaciones de confianza de las detecciones.True
line_widthfloatGrosor de línea de las cajas delimitadoras. Se escala con el tamaño de la imagen si None.None
font_sizefloatTamaño de fuente del texto. Se escala con el tamaño de la imagen si None.None
fontstrNombre de la fuente para las anotaciones de texto.'Arial.ttf'
pilboolDevuelve la imagen como un objeto PIL Image.False
imgnp.ndarray | torch.TensorImagen alternativa. Los tensores deben ser contiguos y tener el formato HWC BGR uint8.None
kpt_radiusintRadio de los puntos clave dibujados.5
kpt_lineboolConecta los puntos clave con líneas.True
labelsboolIncluye las etiquetas de clase en las anotaciones.True
boxesboolSuperpone las cajas delimitadoras en la imagen.True
masksboolSuperpone las máscaras en la imagen.True
probsboolIncluye las probabilidades de clasificación.True
showboolMuestra directamente la imagen anotada con el visor de imágenes predeterminado.False
saveboolGuarda la imagen anotada en el archivo especificado por filename.False
filenamestrRuta y nombre del archivo en el que se guardará la imagen anotada si save es True.None
color_modestrEspecifica el modo de color, por ejemplo, 'instance' o 'class'.'class'
txt_colortuple[int, int, int]Color de texto BGR para las etiquetas de clasificación.(255, 255, 255)

Inferencia segura para subprocesos#

Garantizar la seguridad de los subprocesos durante la inferencia es fundamental cuando ejecutas varios modelos YOLO en paralelo en distintos subprocesos. La inferencia segura para subprocesos garantiza que las predicciones de cada subproceso estén aisladas y no interfieran entre sí, evita las condiciones de carrera y asegura resultados coherentes y fiables.

Al usar modelos YOLO en una aplicación con varios subprocesos, es importante crear instancias de modelo separadas para cada subproceso o emplear almacenamiento local para cada subproceso a fin de evitar conflictos:

Inferencia segura para subprocesos

Crea una única instancia del modelo dentro de cada subproceso para realizar inferencias de forma segura:

from threading import Thread

from ultralytics import YOLO

def thread_safe_predict(model, image_path):
    """Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
    model = YOLO(model)
    results = model.predict(image_path)
    # Procesa los resultados

# Inicia subprocesos, cada uno con su propia instancia del modelo
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()

Para profundizar en la inferencia segura para subprocesos con modelos YOLO y consultar instrucciones paso a paso, visita nuestra guía de inferencia segura para subprocesos con YOLO. Esta guía te proporcionará toda la información necesaria para evitar errores habituales y garantizar que la inferencia con varios subprocesos se ejecute sin problemas.

Bucle for para fuentes de transmisión#

Aquí tienes un script de Python que utiliza OpenCV (cv2) y YOLO para realizar inferencias en fotogramas de vídeo. Este script presupone que ya has instalado los paquetes necesarios (opencv-python y ultralytics).

Bucle for de transmisión
import cv2

from ultralytics import YOLO

# Cargar el modelo YOLO
model = YOLO("yolo26n.pt")

# Abre el archivo de vídeo
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Recorre los fotogramas del vídeo
while cap.isOpened():
    # Lee un fotograma del vídeo
    success, frame = cap.read()

    if success:
        # Realiza inferencias de YOLO en el fotograma
        results = model(frame)

        # Visualiza los resultados en el fotograma
        annotated_frame = results[0].plot()

        # Muestra el fotograma anotado
        cv2.imshow("YOLO Inference", annotated_frame)

        # Interrumpe el bucle si se pulsa 'q'
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Interrumpe el bucle si se llega al final del vídeo
        break

# Libera el objeto de captura de vídeo y cierra la ventana de visualización
cap.release()
cv2.destroyAllWindows()

Este script realizará predicciones en cada fotograma del vídeo, visualizará los resultados y los mostrará en una ventana. Puedes salir del bucle pulsando 'q'.

Qué hacer a continuación#

¿Listo para pasar de un modelo preentrenado? Confirma que tu tarea se ajusta a tu problema, da formato a tus propios datos con la guía de conjuntos de datos y, después, entrena con ellos.

Preguntas frecuentes#

  • Ultralytics YOLO es un modelo de última generación para la detección de objetos, la segmentación de instancias, la segmentación semántica, la estimación de profundidad, la clasificación, la estimación de poses y la detección de cajas delimitadoras orientadas (OBB) en tiempo real. Su modo predict permite realizar inferencias de alta velocidad con diversas fuentes de datos, como imágenes, vídeos y transmisiones en directo. Diseñado para ofrecer rendimiento y versatilidad, también admite el procesamiento por lotes y los modos de transmisión. Para obtener más información sobre sus funciones, consulta el modo predict de Ultralytics YOLO.

  • Ultralytics YOLO puede procesar una amplia variedad de fuentes de datos, como imágenes individuales, vídeos, directorios, URL y transmisiones. Puedes especificar la fuente de datos en la llamada model.predict(). Por ejemplo, usa 'image.jpg' para una imagen local o 'https://ultralytics.com/images/bus.jpg' para una URL. Consulta los ejemplos detallados de distintas fuentes de inferencia en la documentación.

  • Para optimizar la velocidad de inferencia y gestionar la memoria de forma eficiente, puedes usar el modo de transmisión estableciendo stream=True en el método de llamada del predictor. El modo de transmisión genera un generador de objetos Results que consume poca memoria, en lugar de cargar todos los fotogramas en memoria. Este modo es especialmente útil para procesar vídeos largos o conjuntos de datos grandes. Descubre más sobre el modo de transmisión.

  • El método model.predict() de YOLO admite varios argumentos, como conf, iou, imgsz, device, entre otros. Estos argumentos permiten personalizar el proceso de inferencia y establecer parámetros como los umbrales de confianza, el tamaño de imagen y el dispositivo utilizado para los cálculos. Encontrarás descripciones detalladas de estos argumentos en la sección de argumentos de inferencia.

  • Usa model.embed(source) para extraer incrustaciones de características de la penúltima capa, o pasa embed=[layer_index] a model.predict() para elegir capas específicas.

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    source = "https://ultralytics.com/images/bus.jpg"
    
    results = model.predict(source)  # Objetos de resultados
    embeddings = model.embed(source)  # lista de incrustaciones torch.Tensor
  • Tras realizar inferencias con YOLO, los objetos Results contienen métodos para mostrar y guardar imágenes anotadas. Puedes usar métodos como result.show() y result.save(filename="result.jpg") para visualizar y guardar los resultados. Las carpetas principales que falten en la ruta del nombre de archivo se crean automáticamente (por ejemplo, result.save("path/to/result.jpg")). Para consultar una lista completa de estos métodos, ve a la sección trabajar con resultados.

Comentarios