Ultralytics YOLO27:

Predicción de modelos con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introducción#

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

Consulta la vista previa no publicada de YOLO27 para ver ejemplos de inferencia planeados.



Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀

Aplicaciones del 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 las razones por las que deberías considerar el modo predict de YOLO26 para tus distintas necesidades de inferencia:

  • Versatilidad: Capaz de realizar inferencias en imágenes, vídeos e incluso retransmisiones en directo.
  • Rendimiento: Diseñado para un procesamiento de alta velocidad en tiempo real sin sacrificar la precisión.
  • Facilidad de uso: Interfaces intuitivas de Python y CLI para una implementación y unas pruebas rápidas.
  • 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 endpoints de inferencia de Ultralytics Platform con escalado automático y supervisión, o ejecuta la inferencia localmente.

Funciones clave del modo predict#

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

  • Compatibilidad con múltiples fuentes de datos: Tanto si tus datos tienen la forma de imágenes individuales, una colección de imágenes, archivos de vídeo o retransmisiones de vídeo en tiempo real, el modo predict se adapta a tus necesidades.
  • Modo de streaming: Usa la función de streaming para generar un generador eficiente en memoria de objetos Results. 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 de uno en uno, lo que resulta especialmente útil para vídeos largos y retransmisiones en directo.
  • Procesamiento por lotes: Procesa varias imágenes o fotogramas de vídeo en un solo lote, reduciendo aún más el tiempo total de inferencia.
  • Fácil integración: Intégralo fácilmente con canalizaciones de datos existentes y otros componentes de software gracias a su API flexible.

Los modelos Ultralytics YOLO devuelven una lista de Python de objetos Results o un generador eficiente en memoria de objetos Results cuando se pasa stream=True al modelo durante la inferencia:

Predecir
from ultralytics import YOLO

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

# Run batched inference on a list of images
results = model(["image1.jpg", "image2.jpg"])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

Fuentes de inferencia#

YOLO26 puede procesar distintos tipos de fuentes de entrada para la inferencia, como se muestra en la tabla siguiente. Las fuentes incluyen imágenes estáticas, retransmisiones de vídeo y varios formatos de datos. La tabla también indica si cada fuente puede utilizarse en modo de streaming con el argumento stream=True ✅. El modo de streaming resulta útil para procesar vídeos o retransmisiones 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 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 memoria insuficiente con entradas grandes. En cambio, stream=True utiliza un generador que solo mantiene en memoria los resultados del fotograma o punto de datos actual, reduciendo significativamente el consumo de memoria y evitando problemas de memoria insuficiente.

OrigenEjemploTipoNotas
imagen'image.jpg'str o PathArchivo de imagen individual.
URL'https://ultralytics.com/images/bus.jpg'strURL de una imagen.
captura de pantalla'screen'strCaptura una imagen de la 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 que contiene 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 coincidir con varios archivos. Usa el carácter * como comodín.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strURL de un vídeo de YouTube.
stream ✅'rtsp://example.com/media.mp4'strURL para protocolos de streaming como RTSP, RTMP, TCP o una dirección IP.
multi-stream ✅'list.streams'str o PathArchivo de texto *.streams con una URL de stream por fila; es decir, 8 streams se ejecutarán con un tamaño de lote de 8.
webcam ✅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 utilizar cada tipo de fuente:

Fuentes de predicción

Ejecuta la inferencia en un archivo de imagen.

from ultralytics import YOLO

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

# Define path to the image file
source = "path/to/image.jpg"

# Run inference on the source
results = model(source)  # list of Results objects

Argumentos de inferencia#

model.predict() acepta varios argumentos que pueden pasarse durante la inferencia para anular los valores predeterminados:

Forma fija frente a rectángulo mínimo (rect)#

De forma predeterminada, predict usa rect=True, que activa el relleno de rectángulo mínimo cuando es posible. La imagen se escala para ajustarse 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 utiliza cuando todas las imágenes del lote tienen la misma forma y el backend lo admite (PyTorch .pt, u ONNX / Triton dinámico). De lo contrario, las imágenes se rellenan hasta el objetivo completo imgsz.

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

Entero frente a tupla imgsz

  • Un entero imgsz=640 se convierte en un objetivo cuadrado (640, 640) después del redondeo al stride.
  • Una tupla imgsz=(384, 672) establece un objetivo rectangular. Con rect=True y auto=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 al valor más grande). Predict y export aceptan un entero o una tupla (height, width).

Ejemplo
from ultralytics import YOLO

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

# Run inference on 'bus.jpg' with arguments
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 los datos para la inferencia. Puede ser una ruta de imagen, un archivo de vídeo, un directorio, una URL o un ID de 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 fuentes, lo que permite utilizarlo de forma flexible con distintos tipos de entrada.
conffloat0.25Establece el umbral mínimo de confianza para las detecciones. Los objetos detectados con una confianza inferior a este umbral se descartarán. 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 las cajas superpuestas, lo que resulta útil para reducir duplicados.
imgszint o tuple640Objetivo del letterbox. Un entero proporciona un N×N cuadrado; una tupla proporciona (height, width). Con rect=True, el tensor real puede ser más pequeño que este objetivo debido al relleno de rectángulo mínimo. Usa rect=False para obtener un tamaño fijo. Consulta Forma fija frente a rectángulo mínimo.
rectboolTrueSi True, usa el relleno de rectángulo mínimo cuando sea posible (lotes con la misma forma y backend compatible). Si False, aplica siempre el relleno hasta imgsz completo. Consulta Forma fija frente a rectángulo mínimo.
quantizeint o strNonePrecisión de inferencia: 16/"fp16" y 32/"fp32"/sin definir seleccionan cálculo FP16 o FP32 para modelos de PyTorch y TorchScript; otros formatos calculan con la precisión que seleccionan su artefacto y su motor de ejecución. En 16, OpenVINO sigue redondeando la entrada a FP16 en el cliente y la vuelve a ampliar a FP32, sin cambiar aquello con lo que calcula el motor de ejecución. La cuantización INT8/PTQ se configura durante la exportación y luego se utiliza cargando el modelo exportado. Reemplaza al indicador obsoleto half.
devicestrNoneEspecifica el dispositivo para la inferencia (por ejemplo, cpu, cuda:0, 0, npu o npu:0). Permite seleccionar entre la CPU, una GPU específica, la 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 de conjunto de datos (por ejemplo, coco8.yaml) que se lee únicamente para obtener su names, y solo cuando el modelo cargado no contiene nombres de clase propios: una exportación de terceros o una exportación de Ultralytics separada de los metadatos con los que se distribuye. De lo contrario, dicho modelo muestra 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 proporcionar un rendimiento superior 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, evitando salidas excesivas en escenas densas.
vid_strideint1Salto de fotogramas para entradas de vídeo. Permite omitir fotogramas en los vídeos para acelerar el procesamiento, a costa de la resolución temporal. Un valor de 1 procesa todos los fotogramas; los valores superiores omiten fotogramas.
stream_bufferboolFalseDetermina si se ponen en cola los fotogramas entrantes de los streams de vídeo. Si False, se descartan los fotogramas antiguos para dar cabida a los nuevos (optimizado para aplicaciones en tiempo real). Si True, los fotogramas nuevos se guardan en un búfer, lo que garantiza que no se omita ninguno, pero provoca latencia si los FPS de inferencia son inferiores a los FPS del stream.
visualizeboolFalseGuarda un mapa de calor de activación de clase junto a cada predicción, mostrando qué píxeles elevaron las puntuaciones de la clase predicha. Respeta conf y classes, por lo que classes=[0] asigna el mapa únicamente a esa clase. Solo está disponible para modelos de PyTorch de Ultralytics.
augmentboolFalseActiva la aumentación 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 de PyTorch de Ultralytics.
agnostic_nmsboolFalseHabilita la supresión no máxima independiente de la clase (NMS), suprimiendo las cajas superpuestas con puntuaciones más bajas entre diferentes clases en lugar de solo dentro de la misma clase. Es útil en escenarios de detección multiclase donde la superposición de clases es común. Con la inferencia sin NMS (nms=False en YOLO26 o YOLOv10), esto solo evita que la misma detección aparezca con múltiples etiquetas de clase (duplicados con IoU=1.0) y no realiza la supresión basada en el umbral de IoU entre cajas distintas.
classeslist[int]NoneFiltra las predicciones según un conjunto de ID de clase. Solo se devolverán las detecciones pertenecientes a las clases especificadas. Resulta ú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 está activado, las máscaras devueltas (masks.data) coincidirán con el tamaño de la imagen original. Si está desactivado, tendrán el tamaño de imagen utilizado durante la inferencia.
embedlist[int]NoneEspecifica las capas de las que se extraerán vectores de características o embeddings. Usa model.embed(source) para los embeddings de la penúltima capa, o model.predict(source, embed=[layer]) para seleccionar capas concretas. Resulta útil para tareas posteriores, como la agrupación o la búsqueda por similitud. Solo está disponible para modelos de PyTorch de Ultralytics.
projectstrNoneNombre del directorio del proyecto donde se guardan las salidas de predicción si save está activado.
namestrNoneNombre de la ejecución de predicción. Se utiliza para crear un subdirectorio dentro de la carpeta del proyecto, donde se almacenan las salidas de predicción si save está activado.
streamboolFalseActiva un procesamiento eficiente en memoria para vídeos largos o numerosas imágenes, devolviendo 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, proporcionando información en tiempo real sobre el proceso de predicción.
compilebool o strFalseHabilita la compilación de grafos torch.compile de PyTorch 2.x con backend='inductor'. Acepta True"default", False → deshabilita la función, 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 que tengan oneDNN habilitado y PyTorch 1.13 o posterior; False lo desactiva; y True lo solicita en CPU x86 o dispositivos CUDA compatibles. ARM64, MPS, versiones antiguas de PyTorch, CPU sin oneDNN y formatos exportados como TensorRT y ONNX no se modifican.
nmsbool, opcionalNoneEjecuta la inferencia de uno a muchos con NMS por defecto (None o True). Configura False para utilizar la cabeza de uno a uno sin NMS cuando esté disponible. Consulta la guía de detección de extremo a extremo para obtener más detalles.

Argumentos de visualización:

ArgumentoTipoPredeterminadoDescripción
showboolFalseSi True, muestra las imágenes o 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 vídeos anotados en archivos. Resulta útil para documentar, analizar posteriormente o compartir resultados. De forma predeterminada, es True al utilizar la CLI y False al utilizar Python.
save_framesboolFalseAl procesar vídeos, guarda los fotogramas individuales como imágenes. Resulta útil para extraer fotogramas concretos o realizar un análisis detallado fotograma a fotograma.
save_txtboolFalseGuarda los resultados de detección en un archivo de texto siguiendo el formato [class] [x_center] [y_center] [width] [height] [confidence]. Resulta útil para integrarlos con otras herramientas de análisis.
save_confboolFalseIncluye las puntuaciones de confianza en los archivos de texto guardados. Aumenta el nivel de detalle disponible para el posprocesamiento y el análisis.
save_cropboolFalseGuarda imágenes recortadas de las detecciones. Resulta útil para aumentar conjuntos de datos, realizar análisis o crear conjuntos centrados en objetos concretos.
show_labelsboolTrueMuestra las etiquetas de cada detección en la salida visual. Proporciona una comprensió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. Esencial para la identificación visual y la ubicación de objetos en imágenes o fotogramas de vídeo.
line_widthint or NoneNoneEspecifica el ancho de línea de las cajas delimitadoras. Si None, el ancho de línea se ajusta automáticamente según el 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, tal como se especifica en ultralytics/data/utils.py. Consulta las tablas siguientes para ver los sufijos válidos y ejemplos de comandos de predicción.

Imágenes#

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

Nota

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

Sufijos de imagenEjemplo de comando de predicciónReferencia
.avifyolo predict source=image.avifFormato de archivo de imagen AV1
.bmpyolo predict source=image.bmpFormato de archivo BMP de Microsoft
.dngyolo predict source=image.dngAdobe DNG
.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 de Ultralytics válidos.

Sufijos de vídeoEjemplo de comando de predicciónReferencia
.asfyolo predict source=video.asfFormato de sistemas avanzados
.aviyolo predict source=video.aviAudio Video Interleave
.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.wmvWindows Media Video
.webmyolo predict source=video.webmProyecto WebM

Trabajo con resultados#

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

Resultados
from ultralytics import YOLO

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

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

Los objetos Results tienen los siguientes atributos:

AtributoTipoDescripción
orig_imgnp.ndarrayLa imagen original como una matriz de NumPy.
orig_shapetupleLa forma de la imagen original en formato (alto, ancho).
boxesBoxes, optionalUn objeto Boxes que contiene las cajas delimitadoras 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 cajas delimitadoras orientadas.
semantic_maskSemanticMask, optionalUn objeto SemanticMask que contiene un mapa de clases 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 donde se guardan los resultados.

Resultados por tarea#

Qué campos de los siguientes se rellenan depende de la tarea de tu modelo; compara detección, segmentación, segmentación semántica, estimación de profundidad, clasificación, 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 están siempre disponibles, mientras que los datos de predicción específicos de la 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 a menos que se use media precisión, en cuyo caso son torch.float16. Después de result.numpy(), los tensores se convierten en matrices de NumPy con los tipos de datos de NumPy correspondientes. Las máscaras de instancia son tensores binarios torch.uint8, mientras que las máscaras semánticas utilizan el tipo de datos entero más pequeño posible para los ID de clase: torch.uint8, torch.int16 o torch.int32, según el recuento de clases.

AtributoTipoFormaDescripción
result.boxesBoxes(N)Cajas de detección.
result.boxes.datatorch.float32(N,6/7)[x1,y1,x2,y2,conf,cls] sin procesar, además del ID de seguimiento opcional.
result.boxes.xyxytorch.float32(N,4)Cajas 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 o máscaras semánticas.
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 de 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 objeto Results nuevo con los mismos atributos de imagen, ruta, nombres y velocidad.
plot()np.ndarrayTraza los resultados de detección sobre una imagen BGR de entrada y devuelve la imagen anotada.
show()NoneMuestra la imagen con los resultados de inferencia anotados.
save()strGuarda la imagen con los resultados de inferencia anotados en un archivo y devuelve el nombre del archivo.
verbose()strDevuelve una cadena de registro para cada tarea, detallando 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 al archivo guardado.
save_crop()NoneGuarda las imágenes recortadas de las detecciones 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.

Cuadros#

El objeto Boxes se puede usar para indexar, manipular y convertir BBox a distintos formatos.

Cuadros
from ultralytics import YOLO

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

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.boxes)  # print the Boxes object containing the detection bounding boxes

Esta es una tabla con los métodos y las propiedades de la clase Boxes, incluidos su nombre, tipo y descripción:

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

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

Máscaras#

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

Máscaras
from ultralytics import YOLO

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

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

Esta es una tabla con los métodos y las propiedades de la clase Masks, incluidos su nombre, tipo y descripción:

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 de 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 dtype 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íxel.

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

SemanticMask#

SemanticMask almacena un único 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 utilidades para polígonos.

SemanticMask
from ultralytics import YOLO

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

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.semantic_mask.data)  # print the H x W class-ID map
NombreTipoDescripción
dataPropiedad (torch.Tensor)Mapa de ID de clase con forma (H,W). El dtype es torch.uint8, torch.int16 o torch.int32, seleccionado según el número de clases.
shapePropiedad (tuple)Forma del mapa de clases, que normalmente coincide 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 de 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 dtype especificados.

Puntos clave#

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

Puntos clave
from ultralytics import YOLO

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

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected keypoints

Esta es una tabla con los métodos y las propiedades de la clase Keypoints, incluidos su nombre, tipo y descripción:

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 de 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 dtype especificados.
xynPropiedad (torch.Tensor)Una lista de puntos clave normalizados representados como tensores.
xyPropiedad (torch.Tensor)Una lista de puntos clave en coordenadas de píxel representados como tensores.
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.

Probs#

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

Probs
from ultralytics import YOLO

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

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

Esta es una tabla que resume los métodos y las propiedades de la clase Probs:

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

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

OBB#

El objeto OBB se puede usar para indexar, manipular y convertir BBox orientados a distintos formatos.

OBB
from ultralytics import YOLO

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

# Run inference on an image
results = model("https://ultralytics.com/images/boats.jpg")  # results list

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

Esta es una tabla con los métodos y las propiedades de la clase OBB, incluidos su nombre, tipo y descripción:

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

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

Resultados de trazado#

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

Trazado
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 la salida:

ArgumentoTipoDescripciónPredeterminado
confboolIncluye las puntuaciones de confianza de las detecciones.True
line_widthfloatAncho de línea de los BBox. Se escala según el tamaño de la imagen si None.None
font_sizefloatTamaño de fuente del texto. Se escala según 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 de PIL Image.False
imgnp.ndarray | torch.TensorImagen alternativa. Los tensores deben ser contiguos, HWC, BGR y 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 los BBox sobre la imagen.True
masksboolSuperpone las máscaras sobre 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 del texto BGR para el BBox y la etiqueta de clasificación de la imagen.(255, 255, 255)

Inferencia segura para subprocesos#

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

Al usar modelos YOLO en una aplicación multihilo, es importante instanciar objetos de modelo independientes para cada hilo o utilizar almacenamiento local de hilos para evitar conflictos:

Inferencia segura para subprocesos

Instancia un único modelo dentro de cada hilo para realizar inferencias seguras para hilos:

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)
    # Process results

# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()

Para consultar en profundidad la inferencia segura para hilos con modelos YOLO y obtener instrucciones paso a paso, consulta nuestra Guía de inferencia segura para hilos con YOLO. Esta guía te proporcionará toda la información necesaria para evitar errores habituales y garantizar que la inferencia multihilo se ejecute sin problemas.

Bucle for de la fuente de streaming#

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

Bucle for de streaming
import cv2

from ultralytics import YOLO

# Load the YOLO model
model = YOLO("yolo26n.pt")

# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLO Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

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

¿Y ahora qué?#

¿Listo para ir más allá 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 y la clasificación en tiempo real. Su modo predict permite realizar inferencias de alta velocidad sobre diversas fuentes de datos, como imágenes, vídeos y streams en directo. Diseñado para ofrecer rendimiento y versatilidad, también proporciona modos de procesamiento por lotes y streaming. 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 streams. 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 streaming estableciendo stream=True en el método de llamada del predictor. El modo streaming genera un generador de objetos Results eficiente en cuanto al uso de memoria, en lugar de cargar todos los fotogramas en la memoria. El modo streaming resulta especialmente útil para procesar vídeos largos o conjuntos de datos grandes. Obtén más información sobre el modo streaming.

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

  • Usa model.embed(source) para extraer embeddings 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)  # Results objects
    embeddings = model.embed(source)  # list of torch.Tensor embeddings
  • Después de ejecutar la inferencia 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. Los directorios padre 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