Predicción de modelos con Ultralytics YOLO#
Introducción#
En el mundo del machine learning y la computer vision, el proceso de dar sentido a los datos visuales suele denominarse inferencia o predicción. Ultralytics YOLO26 ofrece una potente función conocida como predict mode, adaptada para ofrecer inferencia en tiempo real y de alto rendimiento en una amplia gama de fuentes de datos.
Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀
Aplicaciones en el mundo real#
| Fabricación | Deportes | Seguridad |
|---|---|---|
| Detección de piezas de repuesto de vehículos | Detección de jugadores de fútbol | Detección de caídas de personas |
¿Por qué usar Ultralytics YOLO para la inferencia?#
Aquí tienes por qué deberías considerar el modo de predicción de YOLO26 para tus diversas necesidades de inferencia:
- Versatilidad: Capaz de realizar inferencias en imágenes, vídeos e incluso transmisiones en vivo.
- Performance: Diseñado para un procesamiento a alta velocidad y en tiempo real sin sacrificar la accuracy.
- Facilidad de uso: Interfaces intuitivas de Python y CLI para un despliegue y pruebas rápidas.
- Altamente personalizable: Diversos ajustes y parámetros para adaptar el comportamiento de inferencia del modelo según tus requisitos específicos.
- Production Ready: Despliega modelos como Ultralytics Platform inference endpoints con autoescalado y monitorización, o ejecuta la inferencia localmente.
Características clave del modo de predicción#
El modo de predicción de YOLO26 está diseñado para ser robusto y versátil, incluyendo:
- Compatibilidad con múltiples fuentes de datos: Ya sea que tus datos tengan forma de imágenes individuales, una colección de imágenes, archivos de vídeo o transmisiones de vídeo en tiempo real, el modo de predicción te cubre.
- Streaming Mode: Utiliza la función de transmisión para generar un generador eficiente en memoria de objetos
Results. Habilita esta opción configurandostream=Trueen el método de llamada del predictor. A diferencia del comportamiento predeterminado (stream=False), que devuelve una lista con todos los resultados,stream=Trueproduce los resultados uno a uno, lo que resulta especialmente útil para vídeos largos y transmisiones en directo. - Procesamiento por lotes: Procesa múltiples imágenes o fotogramas de vídeo en un solo lote, lo que reduce aún más el tiempo total de inferencia.
- Fácil integración: Integra fácilmente con pipelines de datos existentes y otros componentes de software, gracias a su API flexible.
Los modelos de 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:
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 diskFuentes de inferencia#
YOLO26 puede procesar diferentes tipos de fuentes de entrada para la inferencia, como se muestra en la siguiente tabla. Las fuentes incluyen imágenes estáticas, secuencias de vídeo y varios formatos de datos. La tabla también indica si cada fuente se puede utilizar en streaming mode con el argumento stream=True ✅. El streaming mode es beneficioso para procesar vídeos o transmisiones en directo, ya que crea un generador de resultados en lugar de cargar todos los fotogramas en la memoria.
Usa stream=True para procesar vídeos largos o conjuntos de datos grandes con el fin de gestionar la memoria de manera eficiente. Cuando stream=False, los resultados de todos los fotogramas o puntos de datos se almacenan en la memoria, lo que puede acumularse rápidamente y provocar errores de falta de memoria (out-of-memory) con entradas grandes. Por el contrario, stream=True utiliza un generador que solo mantiene en la memoria los resultados del fotograma o punto de datos actual, lo que reduce significativamente el consumo de memoria y previene problemas de falta de memoria.
| Fuente | Ejemplo | Tipo | Notas |
|---|---|---|---|
| image | 'image.jpg' | str o Path | Archivo de imagen único. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL a una imagen. |
| screenshot | 'screen' | str | Capturar una captura de pantalla. |
| PIL | Image.open('image.jpg') | PIL.Image | Formato HWC con canales RGB. |
| OpenCV | cv2.imread('image.jpg') | np.ndarray | Formato HWC con canales BGR uint8 (0-255). |
| NumPy | np.zeros((640,1280,3)) | np.ndarray | Formato HWC con canales BGR uint8 (0-255). |
| torch | torch.zeros(16,3,320,640) | torch.Tensor | Formato BCHW con canales RGB float32 (0.0-1.0). |
| CSV | 'sources.csv' | str o Path | Archivo CSV que contiene rutas a imágenes, vídeos o directorios. |
| video ✅ | 'video.mp4' | str o Path | Archivo de vídeo en formatos como MP4, AVI, etc. |
| directory ✅ | 'path/' | str o Path | Ruta a un directorio que contiene imágenes o vídeos. |
| glob ✅ | 'path/*.jpg' | str | Patrón glob para coincidir con varios archivos. Utiliza el carácter * como comodín. |
| YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | URL a un vídeo de YouTube. |
| stream ✅ | 'rtsp://example.com/media.mp4' | str | URL para protocolos de streaming como RTSP, RTMP, TCP o una dirección IP. |
| multi-stream ✅ | 'list.streams' | str o Path | Archivo de texto *.streams con una URL de transmisión por fila; es decir, 8 transmisiones se ejecutarán con un batch-size de 8. |
| webcam ✅ | 0 | int | Índice del dispositivo de cámara conectado para ejecutar la inferencia. |
A continuación, tienes ejemplos de código para utilizar cada tipo de fuente:
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 objectsArgumentos de inferencia#
model.predict() acepta múltiples argumentos que se pueden pasar en el momento de la inferencia para anular los valores predeterminados:
Forma fija frente a rectángulo mínimo (rect)#
Por defecto, predict utiliza rect=True, lo que habilita el relleno de rectángulo mínimo cuando es posible. La imagen se escala para encajar dentro de imgsz y se rellena solo hasta el múltiplo de paso (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, o un ONNX / Triton dinámico). De lo contrario, las imágenes se rellenan hasta el destino completo de imgsz.
Usa rect=False para rellenar siempre hasta el destino completo de imgsz. Esto se recomienda cuando necesitas un tamaño de entrada fijo para que coincida con los modelos exportados (ONNX, TensorRT, etc.).
imgsz entero frente a tupla
- Un
imgsz=640entero se convierte en un objetivo cuadrado(640, 640)tras el redondeo del paso (stride). - Una tupla
imgsz=(384, 672)establece un objetivo rectangular. Conrect=Trueyauto=True, el tensor real puede ser más pequeño que este objetivo.
Entrenamiento frente a predict/exportación
El entrenamiento solo acepta un único entero imgsz (una lista [h, w] se fuerza al valor más grande). La predicción y la exportación aceptan tanto un entero como una tupla (height, width).
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:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
source | str o int o None | None | Especifica la fuente de 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 gama de formatos y fuentes, lo que permite una aplicación flexible en different types of input. |
conf | float | 0.25 | Establece el umbral mínimo de confianza para las detecciones. Los objetos detectados con una confianza inferior a este umbral serán descartados. Ajustar este valor puede ayudar a reducir los falsos positivos. |
iou | float | 0.7 | Umbral de Intersection Over Union (IoU) para Non-Maximum Suppression (NMS). Los valores más bajos dan lugar a un menor número de detecciones al eliminar los cuadros superpuestos, lo cual es útil para reducir los duplicados. |
imgsz | int o tuple | 640 | Destino Letterbox. Un número entero da un N×N cuadrado; una tupla da (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. Utiliza rect=False para un tamaño fijo. Consulta Fixed shape vs minimum rectangle. |
rect | bool | True | Si es True, utiliza un relleno de rectángulo mínimo cuando sea posible (lote de la misma forma y backend compatible). Si es False, rellena siempre hasta el imgsz completo. Consulta Fixed shape vs minimum rectangle. |
quantize | int o str | None | Precisión de la inferencia: 16/"fp16" habilita la inferencia en FP16 en GPUs compatibles; 32/"fp32"/sin establecer es FP32. La cuantización INT8/PTQ se configura durante el export y, a continuación, se utiliza cargando el modelo exportado. Sustituye al indicador obsoleto half. |
device | str | None | Especifica el dispositivo para la inferencia (por ejemplo, cpu, cuda:0, 0, npu o npu:0). Permite a los usuarios seleccionar entre la CPU, una GPU específica, la NPU Ascend de Huawei u otros dispositivos de computación para la ejecución del modelo. |
dnn | bool | False | Si es True, utiliza el módulo DNN de OpenCV en lugar de ONNX Runtime para la inferencia del modelo ONNX. |
data | str | None | Ruta a un YAML de dataset (p. ej., coco8.yaml) leído únicamente por 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, un modelo de este tipo informa class0, class1, etc. |
batch | int | 1 | Especifica el tamaño del lote para la inferencia (solo funciona cuando la fuente es a directory, video file, or .txt file). Un tamaño de lote mayor puede proporcionar un mayor rendimiento, acortando el tiempo total requerido para la inferencia. |
max_det | int | 300 | Número máximo de detecciones permitidas por imagen. Limita el número total de objetos que el modelo puede detectar en una única inferencia, evitando salidas excesivas en escenas densas. |
vid_stride | int | 1 | Salto de fotogramas para entradas de vídeo. Permite omitir fotogramas en vídeos para acelerar el procesamiento a costa de la resolución temporal. Un valor de 1 procesa cada fotograma, valores más altos omiten fotogramas. |
stream_buffer | bool | False | Determina si se deben poner en cola los fotogramas entrantes para las secuencias de vídeo. Si es False, los fotogramas antiguos se descartan para dar cabida a los nuevos (optimizado para aplicaciones en tiempo real). Si es True, pone en cola los nuevos fotogramas en un búfer, lo que garantiza que no se omita ningún fotograma, pero provocará latencia si los FPS de la inferencia son inferiores a los FPS de la secuencia. |
visualize | bool | False | Guarda un mapa de activacion de clases junto a cada prediccion, mostrando que pixeles elevaron las puntuaciones de las clases predichas. Respeta conf y classes, por lo que classes=[0] mapea unicamente esa clase. Solo disponible para modelos Ultralytics PyTorch. |
augment | bool | False | Habilita la aumentacion en tiempo de prueba (TTA) para las predicciones, lo que puede mejorar la robustez de la deteccion a costa de la velocidad de inferencia. Solo disponible para modelos Ultralytics PyTorch. |
agnostic_nms | bool | False | Habilita la supresión de no máximos (NMS) agnóstica de clases, 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. Para modelos de extremo a extremo (YOLO26, YOLOv10), esto solo evita que la misma detección aparezca con múltiples etiquetas de clase (duplicados con IoU=1.0) y no realiza una supresión basada en el umbral de IoU entre cajas distintas. |
classes | list[int] | None | Filtra las predicciones a un conjunto de IDs de clase. Solo se devolverán las detecciones pertenecientes a las clases especificadas. Útil para centrarse en objetos relevantes en tareas de detección multiclase. |
retina_masks | bool | False | Devuelve máscaras de segmentación de alta resolución. Las máscaras devueltas (masks.data) coincidirán con el tamaño de la imagen original si se activa. Si se desactiva, tendrán el tamaño de imagen utilizado durante la inferencia. |
embed | list[int] | None | Especifica las capas de las que extraer vectores de caracteristicas o embeddings. Usa model.embed(source) para los embeddings de la penultima capa, o model.predict(source, embed=[layer]) para seleccionar capas especificas. Util para tareas posteriores como agrupamiento o busqueda de similitud. Solo disponible para modelos Ultralytics PyTorch. |
project | str | None | Nombre del directorio del proyecto donde se guardan los resultados de la predicción si save está habilitado. |
name | str | None | Nombre de la ejecución de predicción. Se utiliza para crear un subdirectorio dentro de la carpeta del proyecto, donde se almacenan los resultados de la predicción si save está habilitado. |
stream | bool | False | Habilita el procesamiento eficiente en memoria para vídeos largos o numerosas imágenes al devolver un generador de objetos Results en lugar de cargar todos los fotogramas en la memoria de una vez. |
verbose | bool | True | Controla si se deben mostrar registros de inferencia detallados en el terminal, proporcionando información en tiempo real sobre el proceso de predicción. |
compile | bool o str | False | Habilita la compilación de grafos torch.compile de PyTorch 2.x con backend='inductor'. Acepta True → "default", False → deshabilita, o un modo de cadena de texto como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Vuelve al modo diligente (eager) con una advertencia si no es compatible. |
channels_last | bool | False | Usa el formato de memoria channels_last (NHWC) para las convoluciones durante la inferencia, lo que acelera las GPU CUDA Tensor Core sin cambios en los resultados. Se aplica solo a modelos nativos de PyTorch; se ignora para CPU, MPS y formatos exportados como TensorRT y ONNX. |
end2end | bool | None | Anula el modo de extremo a extremo (end-to-end) en los modelos YOLO que admiten inferencia sin NMS (YOLO26, YOLOv10). Configurarlo en False te permite ejecutar la predicción utilizando la canalización NMS tradicional, lo que te permite además hacer uso del argumento iou. Consulta la End-to-End Detection guide para obtener más detalles. |
Argumentos de visualización:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
show | bool | False | Si es True, muestra las imágenes o vídeos anotados en una ventana. Es útil para obtener retroalimentación visual inmediata durante el desarrollo o las pruebas. |
save | bool | False or True | Habilita el guardado de las imágenes o vídeos anotados en archivos. Útil para documentación, análisis posterior o compartir resultados. Predeterminado a True cuando se usa CLI y False cuando se usa en Python. |
save_frames | bool | False | Al procesar vídeos, guarda fotogramas individuales como imágenes. Útil para extraer fotogramas específicos o para un análisis detallado fotograma a fotograma. |
save_txt | bool | False | Guarda los resultados de la detección en un archivo de texto, siguiendo el formato [class] [x_center] [y_center] [width] [height] [confidence]. Es útil para la integración con otras herramientas de análisis. |
save_conf | bool | False | Incluye puntuaciones de confianza en los archivos de texto guardados. Mejora el detalle disponible para el posprocesamiento y el análisis. |
save_crop | bool | False | Guarda imágenes recortadas de las detecciones. Útil para la aumentación de conjuntos de datos, el análisis o la creación de conjuntos de datos enfocados en objetos específicos. |
show_labels | bool | True | Muestra las etiquetas para cada detección en la salida visual. Proporciona una comprensión inmediata de los objetos detectados. |
show_conf | bool | True | Muestra la puntuación de confianza para cada detección junto a la etiqueta. Proporciona información sobre la certeza del modelo para cada detección. |
show_boxes | bool | True | Dibuja cajas delimitadoras 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_width | int or None | None | Especifica el grosor de línea de los cuadros delimitadores. Si es None, el grosor de la línea se ajusta automáticamente según el tamaño de la imagen. Proporciona una personalización visual para mayor 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 los sufijos válidos y ejemplos de comandos de predicción.
Imágenes#
La tabla siguiente contiene formatos de imagen Ultralytics válidos.
Los formatos HEIC/HEIF requieren pi-heif, que se instala automáticamente en el primer uso. AVIF es compatible de forma nativa con Pillow.
| Sufijos de imagen | Ejemplo de comando Predict | Referencia |
|---|---|---|
.avif | yolo predict source=image.avif | AV1 Image File Format |
.bmp | yolo predict source=image.bmp | Microsoft BMP File Format |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | High Efficiency Image Format |
.heif | yolo predict source=image.heif | High Efficiency Image Format |
.jp2 | yolo predict source=image.jp2 | JPEG 2000 |
.jpeg | yolo predict source=image.jpeg | JPEG |
.jpg | yolo predict source=image.jpg | JPEG |
.mpo | yolo predict source=image.mpo | Multi Picture Object |
.png | yolo predict source=image.png | Portable Network Graphics |
.tif | yolo predict source=image.tif | Tag Image File Format |
.tiff | yolo predict source=image.tiff | Tag Image File Format |
.webp | yolo predict source=image.webp | WebP |
Vídeos#
La tabla siguiente contiene formatos de vídeo Ultralytics válidos.
| Sufijos de vídeo | Ejemplo de comando Predict | Referencia |
|---|---|---|
.asf | yolo predict source=video.asf | Advanced Systems Format |
.avi | yolo predict source=video.avi | Audio Video Interleave |
.gif | yolo predict source=video.gif | Graphics Interchange Format |
.m4v | yolo predict source=video.m4v | MPEG-4 Part 14 |
.mkv | yolo predict source=video.mkv | Matroska |
.mov | yolo predict source=video.mov | QuickTime File Format |
.mp4 | yolo predict source=video.mp4 | MPEG-4 Part 14 - Wikipedia |
.mpeg | yolo predict source=video.mpeg | MPEG-1 Part 2 |
.mpg | yolo predict source=video.mpg | MPEG-1 Part 2 |
.ts | yolo predict source=video.ts | MPEG Transport Stream |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | WebM Project |
Trabajar con resultados#
Todas las llamadas a predict() de Ultralytics devolverán una lista de objetos Results:
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 inferenceLos objetos Results tienen los siguientes atributos:
| Atributo | Tipo | Descripción |
|---|---|---|
orig_img | np.ndarray | La imagen original como un array de NumPy. |
orig_shape | tuple | La forma de la imagen original en formato (altura, anchura). |
boxes | Boxes, optional | Un objeto Boxes que contiene las cajas delimitadoras de la detección. |
masks | Masks, optional | Un objeto Masks que contiene las máscaras de la detección. |
probs | Probs, optional | Un objeto Probs que contiene las probabilidades de cada clase para la tarea de clasificación. |
keypoints | Keypoints, optional | Un objeto Keypoints que contiene los puntos clave detectados para cada objeto. |
obb | OBB, optional | Un objeto OBB que contiene cajas delimitadoras orientadas. |
semantic_mask | SemanticMask, optional | Un objeto SemanticMask que contiene un mapa de clases denso por píxel. |
speed | dict | Un diccionario con las velocidades de preprocesamiento, inferencia y posprocesamiento en milisegundos por imagen. |
names | dict | Un diccionario que mapea los índices de clase a los nombres de clase. |
path | str | La ruta al archivo de imagen. |
save_dir | str, optional | Directorio para guardar los resultados. |
Resultados por tarea#
Los campos que se rellenan a continuación dependen 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, confianza y 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 (dtypes) 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 y práctico para los ID de clase: torch.uint8, torch.int16 o torch.int32, dependiendo del recuento de clases.
| Atributo | Tipo | Forma | Descripción |
|---|---|---|---|
result.boxes | Boxes | (N) | Cajas de detección. |
result.boxes.data | torch.float32 | (N,6/7) | [x1,y1,x2,y2,conf,cls] en bruto, más ID de seguimiento opcional. |
result.boxes.xyxy | torch.float32 | (N,4) | Cajas de píxeles xyxy. |
result.boxes.conf | torch.float32 | (N,) | Puntuaciones de confianza. |
result.boxes.cls | torch.float32 | (N,) | ID de clase; convertidos a int para obtener los nombres. |
Los objetos Results tienen los siguientes métodos:
| Método | Tipo de retorno | Descripción |
|---|---|---|
update() | None | Actualiza el objeto Results con nuevos datos como cajas, máscaras, probabilidades, obb, puntos clave o máscaras semánticas. |
cpu() | Results | Devuelve una copia del objeto Results con todos los tensores movidos a la memoria de la CPU. |
numpy() | Results | Devuelve una copia del objeto Results con todos los tensores convertidos en matrices NumPy. |
cuda() | Results | Devuelve una copia del objeto Results con todos los tensores movidos a la memoria de la GPU. |
to() | Results | Devuelve una copia del objeto Results con los tensores movidos al dispositivo y dtype especificados. |
new() | Results | Crea un nuevo objeto Results con los mismos atributos de imagen, ruta, nombres y velocidad. |
plot() | np.ndarray | Dibuja los resultados de detección en una imagen BGR de entrada y devuelve la imagen anotada. |
show() | None | Muestra la imagen con los resultados de inferencia anotados. |
save() | str | Guarda la imagen de los resultados de inferencia anotados en un archivo y devuelve el nombre del archivo. |
verbose() | str | Devuelve una cadena de registro para cada tarea, detallando los resultados de detección y clasificación. |
save_txt() | str | Guarda los resultados de la detección en un archivo de texto y devuelve la ruta al archivo guardado. |
save_crop() | None | Guarda las imágenes de detección recortadas en el directorio especificado. |
summary() | List[Dict[str, Any]] | Convierte los resultados de la inferencia en un diccionario resumido con normalización opcional. |
to_df() | DataFrame | Convierte los resultados de la detección en un DataFrame de Polars. |
to_csv() | str | Convierte los resultados de la detección al formato CSV. |
to_json() | str | Convierte los resultados de la detección al formato JSON. |
Para más detalles, consulta la documentación de la clase Results.
Cajas (Boxes)#
El objeto Boxes se puede utilizar para indexar, manipular y convertir cajas delimitadoras a diferentes formatos.
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 boxesAquí tienes una tabla con los métodos y propiedades de la clase Boxes, incluyendo su nombre, tipo y descripción:
| Nombre | Tipo | Descripción |
|---|---|---|
cpu() | Método | Mueve el objeto a la memoria de la CPU. |
numpy() | Método | Convierte el objeto a una matriz NumPy. |
cuda() | Método | Mueve el objeto a la memoria CUDA. |
to() | Método | Mueve el objeto al dispositivo especificado. |
xyxy | Propiedad (torch.Tensor) | Devuelve las cajas en formato xyxy. |
conf | Propiedad (torch.Tensor) | Devuelve los valores de confianza de las cajas. |
cls | Propiedad (torch.Tensor) | Devuelve los valores de clase de las cajas. |
id | Propiedad (torch.Tensor) | Devuelve los IDs de seguimiento de las cajas (si están disponibles). |
xywh | Propiedad (torch.Tensor) | Devuelve las cajas en formato xywh. |
xyxyn | Propiedad (torch.Tensor) | Devuelve las cajas en formato xyxy normalizadas por el tamaño original de la imagen. |
xywhn | Propiedad (torch.Tensor) | Devuelve las cajas en formato xywh normalizadas por el tamaño original de la imagen. |
Para más detalles, consulta la documentación de la clase Boxes.
Máscaras#
El objeto Masks se puede utilizar para indexar, manipular y convertir máscaras en segmentos.
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 masksAquí tienes una tabla con los métodos y propiedades de la clase Masks, incluyendo su nombre, tipo y descripción:
| Nombre | Tipo | Descripción |
|---|---|---|
data | Propiedad (torch.Tensor) | Tensor de máscara binaria torch.uint8 con forma (N,H,W) y valores 0 o 1. |
cpu() | Método | Devuelve el tensor de máscaras en la memoria de la CPU. |
numpy() | Método | Devuelve el tensor de máscaras como una matriz NumPy. |
cuda() | Método | Devuelve el tensor de máscaras en la memoria de la GPU. |
to() | Método | Devuelve el tensor de máscaras con el dispositivo y dtype especificados. |
xyn | Propiedad (list[np.ndarray]) | Una lista de polígonos de máscara normalizados. |
xy | Propiedad (list[np.ndarray]) | Una lista de polígonos de máscara en coordenadas de píxeles. |
Para más detalles, consulta la documentación de la clase Masks.
SemanticMask#
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 y no proporciona funciones auxiliares para polígonos.
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| Nombre | Tipo | Descripción |
|---|---|---|
data | Propiedad (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 recuento de clases. |
shape | Propiedad (tuple) | Forma del mapa de clases, que normalmente coincide con result.orig_shape. |
cpu() | Método | Devuelve el tensor de máscara semántica en la memoria de la CPU. |
numpy() | Método | Devuelve el tensor de máscara semántica como una matriz NumPy. |
cuda() | Método | Devuelve el tensor de máscara semántica en la memoria de la GPU. |
to() | Método | Devuelve el tensor de máscara semántica con el dispositivo y dtype especificados. |
Puntos clave#
El objeto Keypoints se puede utilizar para indexar, manipular y normalizar coordenadas.
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 keypointsAquí tienes una tabla con los métodos y propiedades de la clase Keypoints, incluyendo su nombre, tipo y descripción:
| Nombre | Tipo | Descripción |
|---|---|---|
cpu() | Método | Devuelve el tensor de puntos clave en la memoria de la CPU. |
numpy() | Método | Devuelve el tensor de puntos clave como una matriz NumPy. |
cuda() | Método | Devuelve el tensor de puntos clave en la memoria de la GPU. |
to() | Método | Devuelve el tensor de puntos clave con el dispositivo y dtype especificados. |
xyn | Propiedad (torch.Tensor) | Una lista de puntos clave normalizados representados como tensores. |
xy | Propiedad (torch.Tensor) | Una lista de puntos clave en coordenadas de píxeles representados como tensores. |
conf | Propiedad (torch.Tensor) | Devuelve los valores de confianza de los puntos clave si están disponibles, de lo contrario None. |
Para más detalles, consulta la documentación de la clase Keypoints.
Probs#
El objeto Probs se puede utilizar para obtener índices y puntuaciones de clasificación de top1 y top5.
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 probabilitiesHe aquí una tabla que resume los métodos y propiedades de la clase Probs:
| Nombre | Tipo | Descripción |
|---|---|---|
cpu() | Método | Devuelve una copia del tensor probs en la memoria de la CPU. |
numpy() | Método | Devuelve una copia del tensor probs como un array de NumPy. |
cuda() | Método | Devuelve una copia del tensor probs en la memoria de la GPU. |
to() | Método | Devuelve una copia del tensor probs con el dispositivo y dtype especificados. |
top1 | Propiedad (int) | Índice de la clase top 1. |
top5 | Propiedad (list[int]) | Índices de las 5 clases principales. |
top1conf | Propiedad (torch.Tensor) | Confianza de la clase top 1. |
top5conf | Propiedad (torch.Tensor) | Confianzas de las 5 clases principales. |
Para más detalles, consulta la documentación de la clase Probs.
OBB#
El objeto OBB se puede utilizar para indexar, manipular y convertir cajas delimitadoras orientadas (OBB) a diferentes formatos.
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 boxesAquí tienes una tabla con los métodos y propiedades de la clase OBB, incluyendo su nombre, tipo y descripción:
| Nombre | Tipo | Descripción |
|---|---|---|
cpu() | Método | Mueve el objeto a la memoria de la CPU. |
numpy() | Método | Convierte el objeto a una matriz NumPy. |
cuda() | Método | Mueve el objeto a la memoria CUDA. |
to() | Método | Mueve el objeto al dispositivo especificado. |
conf | Propiedad (torch.Tensor) | Devuelve los valores de confianza de las cajas. |
cls | Propiedad (torch.Tensor) | Devuelve los valores de clase de las cajas. |
id | Propiedad (torch.Tensor) | Devuelve los IDs de seguimiento de las cajas (si están disponibles). |
xyxy | Propiedad (torch.Tensor) | Devuelve las cajas horizontales en formato xyxy. |
xywhr | Propiedad (torch.Tensor) | Devuelve las cajas rotadas en formato xywhr. |
xyxyxyxy | Propiedad (torch.Tensor) | Devuelve las cajas rotadas en formato xyxyxyxy. |
xyxyxyxyn | Propiedad (torch.Tensor) | Devuelve las cajas rotadas en formato xyxyxyxy normalizadas por el tamaño de la imagen. |
Para más detalles, consulta la documentación de la clase OBB.
Visualización de resultados#
El método plot() en los objetos Results facilita la visualización de las predicciones superponiendo los objetos detectados (como cajas delimitadoras, máscaras, puntos clave y probabilidades) en la imagen original. Este método devuelve la imagen anotada como una matriz de NumPy, lo que permite visualizarla o guardarla fácilmente.
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:
| Argumento | Tipo | Descripción | Predeterminado |
|---|---|---|---|
conf | bool | Incluye puntuaciones de confianza de detección. | True |
line_width | float | Grosor de línea de las cajas delimitadoras. Se escala con el tamaño de la imagen si es None. | None |
font_size | float | Tamaño de fuente del texto. Se escala con el tamaño de la imagen si es None. | None |
font | str | Nombre de la fuente para las anotaciones de texto. | 'Arial.ttf' |
pil | bool | Devuelve la imagen como un objeto PIL Image. | False |
img | np.ndarray | torch.Tensor | Imagen alternativa. Los Tensors deben ser HWC BGR uint8 contiguos. | None |
kpt_radius | int | Radio para los puntos clave dibujados. | 5 |
kpt_line | bool | Conecta los puntos clave con líneas. | True |
labels | bool | Incluye etiquetas de clase en las anotaciones. | True |
boxes | bool | Superpone cajas delimitadoras en la imagen. | True |
masks | bool | Superpone máscaras en la imagen. | True |
probs | bool | Incluye probabilidades de clasificación. | True |
show | bool | Muestra la imagen anotada directamente usando el visor de imágenes predeterminado. | False |
save | bool | Guarda la imagen anotada en un archivo especificado por filename. | False |
filename | str | Ruta y nombre del archivo para guardar la imagen anotada si save es True. | None |
color_mode | str | Especifica el modo de color, p. ej., 'instance' o 'class'. | 'class' |
txt_color | tuple[int, int, int] | Color de texto BGR para la caja delimitadora y la etiqueta de clasificación de imagen. | (255, 255, 255) |
Inferencia segura para subprocesos#
Garantizar la seguridad de los hilos durante la inferencia es crucial cuando ejecutas múltiples modelos YOLO en paralelo a través de diferentes hilos. La inferencia segura para hilos garantiza que las predicciones de cada hilo estén aisladas y no interfieran entre sí, evitando condiciones de carrera y asegurando resultados consistentes y fiables.
Al usar modelos YOLO en una aplicación multihilo, es importante instanciar objetos de modelo separados para cada hilo o emplear almacenamiento local de hilos para evitar conflictos:
Instancia un único modelo dentro de cada hilo para una inferencia 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)
# 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 obtener una visión detallada de la inferencia segura para subprocesos (thread-safe) con modelos YOLO e instrucciones paso a paso, consulta nuestra YOLO Thread-Safe Inference Guide. Esta guía te proporcionará toda la información necesaria para evitar errores comunes y garantizar que tu inferencia multihilo se ejecute sin problemas.
Bucle de origen de streaming for#
Aquí tienes un script de Python que utiliza OpenCV (cv2) y YOLO para ejecutar la inferencia en fotogramas de vídeo. Este script asume que ya has instalado los paquetes necesarios (opencv-python y ultralytics).
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 frame del video, visualizará los resultados y los mostrará en una ventana. Puedes salir del bucle presionando 'q'.
Qué sigue#
¿Estás listo para dejar atrás un modelo preentrenado? Confirma que tu tarea se ajusta a tu problema, formatea tus propios datos con la Datasets guide y luego entrénate con ellos.
FAQ#
Ultralytics YOLO es un modelo de última generación para object detection, instance segmentation, semantic segmentation, depth estimation y classification en tiempo real. Su predict mode permite a los usuarios realizar inferencias de alta velocidad en diversas fuentes de datos, como imágenes, vídeos y transmisiones en directo. Diseñado para ofrecer rendimiento y versatilidad, también ofrece modos de procesamiento por lotes y de transmisión. Para obtener más detalles sobre sus características, consulta el Ultralytics YOLO predict mode.
Ultralytics YOLO puede procesar una amplia gama de fuentes de datos, incluidas imágenes individuales, vídeos, directorios, URL y transmisiones. Puedes especificar la fuente de datos en la llamada a
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 para varias inference sources en la documentación.Para optimizar la velocidad de inferencia y gestionar la memoria de manera eficiente, puedes utilizar el streaming mode configurando
stream=Trueen el método de llamada del predictor. El streaming mode genera un generador eficiente en memoria de objetosResultsen lugar de cargar todos los fotogramas en la memoria. Para procesar vídeos largos o conjuntos de datos grandes, el streaming mode es especialmente útil. Obtén más información sobre el streaming mode.El método
model.predict()en YOLO admite varios argumentos comoconf,iou,imgsz,devicey más. Estos argumentos te permiten personalizar el proceso de inferencia, configurando parámetros como los umbrales de confianza, el tamaño de la imagen y el dispositivo utilizado para el cálculo. Las descripciones detalladas de estos argumentos se pueden encontrar en la sección inference arguments.Usa
model.embed(source)para extraer incrustaciones de características (feature embeddings) de la penúltima capa, o pasaembed=[layer_index]amodel.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 embeddingsDespués de ejecutar la inferencia con YOLO, los objetos
Resultscontienen métodos para mostrar y guardar imágenes anotadas. Puedes utilizar métodos comoresult.show()yresult.save(filename="result.jpg")para visualizar y guardar los resultados. Los directorios principales que falten en la ruta del archivo se crean automáticamente (por ejemplo,result.save("path/to/result.jpg")). Para obtener una lista completa de estos métodos, consulta la sección working with results.