Predicción de modelos con Ultralytics YOLO
Introducción
En el mundo del aprendizaje automático y la visión artificial, el proceso de dar sentido a los datos visuales se denomina 'inferencia' o 'predicción'. Ultralytics YOLO11 ofrece una potente función conocida como modo predict que está diseñada para la inferencia en tiempo real y de alto rendimiento en una amplia gama de fuentes de datos.
Ver: Cómo extraer las salidas del modelo Ultralytics YOLO para proyectos personalizados.
Aplicaciones en el mundo real
Fabricación | Deportes | Seguridad |
---|---|---|
Detección de repuestos de vehículos | Detección de jugadores de fútbol | Detección de caídas de personas |
¿Por qué utilizar Ultralytics YOLO para la inferencia?
He aquí por qué debería considerar el modo predict de YOLO11 para sus diversas necesidades de inferencia:
- Versatilidad: Capaz de realizar inferencias sobre imágenes, vídeos e incluso transmisiones en directo.
- Rendimiento: Diseñado para el procesamiento en tiempo real y de alta velocidad sin sacrificar la precisión.
- Facilidad de uso: Interfaces intuitivas de python y CLI para una rápida implementación y pruebas.
- Altamente personalizable: Varios ajustes y parámetros para optimizar el comportamiento de la inferencia del modelo según sus requisitos específicos.
Características principales del modo Predict
El modo de predicción de YOLO11 está diseñado para ser robusto y versátil, y ofrece:
- Compatibilidad con múltiples fuentes de datos: Ya sea que sus datos estén en forma de imágenes individuales, una colección de imágenes, archivos de video o transmisiones de video en tiempo real, el modo de predicción lo tiene cubierto.
- Modo de transmisión: Utilice la función de transmisión para generar un generador de objetos eficiente en cuanto a la memoria
Results
objetos. Habilite esto configurandostream=True
en el método de llamada del predictor. - Procesamiento por lotes: La capacidad de procesar múltiples imágenes o fotogramas de video en un solo lote, lo que acelera aún más el tiempo de inferencia.
- Fácil de integrar: Se integra fácilmente con los flujos de datos existentes y otros componentes de software, gracias a su API flexible.
Los modelos YOLO de Ultralytics devuelven una lista de python de Results
objetos, o un generador de python de bajo consumo de memoria de Results
objetos cuando stream=True
se pasa al modelo durante la inferencia:
Predecir
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # pretrained YOLO11n 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
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # pretrained YOLO11n model
# Run batched inference on a list of images
results = model(["image1.jpg", "image2.jpg"], stream=True) # return a generator of Results objects
# Process results generator
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
YOLO11 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, transmisiones de video y varios formatos de datos. La tabla también indica si cada fuente se puede utilizar en el modo de transmisión con el argumento stream=True
✅. El modo de transmisión es beneficioso para procesar videos o transmisiones en vivo, ya que crea un generador de resultados en lugar de cargar todos los fotogramas en la memoria.
Consejo
Utilice stream=True
para procesar videos largos o grandes conjuntos de datos para administrar 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 para 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 evita problemas de falta de memoria.
Fuente | Ejemplo | Tipo | Notas |
---|---|---|---|
imagen | 'image.jpg' |
str o Path |
Archivo de imagen único. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
URL de una imagen. |
captura de pantalla | '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. |
vídeo ✅ | 'video.mp4' |
str o Path |
Archivo de vídeo en formatos como MP4, AVI, etc. |
directorio ✅ | 'path/' |
str o Path |
Ruta a un directorio que contiene imágenes o vídeos. |
glob ✅ | 'path/*.jpg' |
str |
Patrón glob para encontrar múltiples archivos. Utilice el * carácter como comodín. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
URL de 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 |
*.streams Archivo de texto con una URL de stream por fila, es decir, 8 streams se ejecutarán con un tamaño de lote de 8. |
webcam ✅ | 0 |
int |
Índice del dispositivo de cámara conectado para ejecutar la inferencia. |
A continuación, se muestran ejemplos de código para usar cada tipo de fuente:
Fuentes de predicción
Ejecutar inferencia en un archivo de imagen.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define path to the image file
source = "path/to/image.jpg"
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en el contenido actual de la pantalla como una captura de pantalla.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define current screenshot as source
source = "screen"
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en una imagen o video alojado de forma remota a través de URL.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define remote image or video URL
source = "https://ultralytics.com/images/bus.jpg"
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en una imagen abierta con la biblioteca de imágenes de python (PIL).
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Open an image using PIL
source = Image.open("path/to/image.jpg")
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en una imagen leída con OpenCV.
import cv2
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Read an image using OpenCV
source = cv2.imread("path/to/image.jpg")
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en una imagen representada como un array de numpy.
import numpy as np
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype="uint8")
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en una imagen representada como un PyTorch tensor.
import torch
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en una colección de imágenes, URLs, videos y directorios listados en un archivo CSV.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define a path to a CSV file with images, URLs, videos and directories
source = "path/to/file.csv"
# Run inference on the source
results = model(source) # list of Results objects
Ejecutar inferencia en un archivo de video. Usando stream=True
, puede crear un generador de objetos Results para reducir el uso de memoria.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define path to video file
source = "path/to/video.mp4"
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Ejecutar inferencia en todas las imágenes y videos de un directorio. Para capturar también imágenes y videos en subdirectorios, utilice un patrón glob, p. ej. path/to/dir/**/*
.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define path to directory containing images and videos for inference
source = "path/to/dir"
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Ejecutar inferencia en todas las imágenes y videos que coincidan con una expresión glob con *
caracteres.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define a glob search for all JPG files in a directory
source = "path/to/dir/*.jpg"
# OR define a recursive glob search for all JPG files including subdirectories
source = "path/to/dir/**/*.jpg"
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Ejecutar inferencia en un video de YouTube. Usando stream=True
, puede crear un generador de objetos Results para reducir el uso de memoria en videos largos.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define source as YouTube video URL
source = "https://youtu.be/LNwODJXcvt4"
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Utilice el modo stream para ejecutar la inferencia en transmisiones de video en vivo utilizando los protocolos RTSP, RTMP, TCP o la dirección IP. Si se proporciona una sola transmisión, el modelo ejecuta la inferencia con un tamaño de lote de 1. Para múltiples transmisiones, se puede utilizar un archivo de .streams
texto para realizar la inferencia por lotes, donde el tamaño del lote está determinado por el número de transmisiones proporcionadas (por ejemplo, tamaño de lote 8 para 8 transmisiones).
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Single stream with batch-size 1 inference
source = "rtsp://example.com/media.mp4" # RTSP, RTMP, TCP, or IP streaming address
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Para el uso de un solo flujo, el tamaño del lote se establece en 1 de forma predeterminada, lo que permite un procesamiento eficiente en tiempo real de la señal de vídeo.
Para gestionar múltiples flujos de vídeo simultáneamente, utilice un .streams
archivo de texto que contenga las fuentes de transmisión. El modelo ejecutará la inferencia por lotes, donde el tamaño del lote es igual al número de flujos. Esta configuración permite el procesamiento eficiente de múltiples fuentes de forma concurrente.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Multiple streams with batched inference (e.g., batch-size 8 for 8 streams)
source = "path/to/list.streams" # *.streams text file with one streaming address per line
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Ejemplo .streams
archivo de texto:
rtsp://example.com/media1.mp4
rtsp://example.com/media2.mp4
rtmp://example2.com/live
tcp://192.168.1.100:554
...
Cada fila del archivo representa una fuente de transmisión, lo que le permite supervisar y realizar inferencias en varios flujos de vídeo a la vez.
Puede ejecutar la inferencia en un dispositivo de cámara conectado pasando el índice de esa cámara en particular a source
.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on the source
results = model(source=0, stream=True) # generator of Results objects
Argumentos de inferencia
model.predict()
acepta múltiples argumentos que se pueden pasar en tiempo de inferencia para anular los valores predeterminados:
Ejemplo
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.5)
Argumentos de inferencia:
Argumento | Tipo | Predeterminado | Descripción |
---|---|---|---|
source |
str |
'ultralytics/assets' |
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 vivo. Admite una amplia gama de formatos y fuentes, lo que permite una aplicación flexible a través de diferentes tipos de entrada. |
conf |
float |
0.25 |
Establece 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. |
iou |
float |
0.7 |
Umbral de Intersección sobre Unión (IoU) para la Supresión No Máxima (NMS). Los valores más bajos resultan en menos detecciones al eliminar los cuadros superpuestos, lo cual es útil para reducir los duplicados. |
imgsz |
int o tuple |
640 |
Define el tamaño de la imagen para la inferencia. Puede ser un entero único 640 para el redimensionamiento cuadrado o una tupla (alto, ancho). El tamaño adecuado puede mejorar la detección precisión y la velocidad de procesamiento. |
rect |
bool |
True |
Si está habilitado, rellena mínimamente el lado más corto de la imagen hasta que sea divisible por el stride para mejorar la velocidad de inferencia. Si está deshabilitado, rellena la imagen a un cuadrado durante la inferencia. |
half |
bool |
False |
Activa la inferencia de media precisión (FP16), lo que puede acelerar la inferencia del modelo en las GPUs compatibles con un impacto mínimo en la precisión. |
device |
str |
None |
Especifica el dispositivo para la inferencia (p. ej., cpu , cuda:0 o 0 ). Permite a los usuarios seleccionar entre CPU, una GPU específica u otros dispositivos de cálculo para la ejecución del modelo. |
batch |
int |
1 |
Especifica el tamaño del lote para la inferencia (solo funciona cuando la fuente es un directorio, archivo de video o .txt archivo). Un tamaño de lote mayor puede proporcionar un mayor rendimiento, acortando la cantidad total de tiempo 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 sola inferencia, evitando salidas excesivas en escenas densas. |
vid_stride |
int |
1 |
Stride 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, los valores más altos omiten fotogramas. |
stream_buffer |
bool |
False |
Determina si se deben poner en cola los fotogramas entrantes para las transmisiones de vídeo. Si False , los fotogramas antiguos se descartan para dar cabida a los nuevos (optimizado para aplicaciones en tiempo real). Si True , pone en cola nuevos fotogramas en un búfer, asegurando que no se omitan fotogramas, pero causará latencia si los FPS de inferencia son más bajos que los FPS del flujo. |
visualize |
bool |
False |
Activa la visualización de las características del modelo durante la inferencia, proporcionando información sobre lo que el modelo está "viendo". Útil para la depuración y la interpretación del modelo. |
augment |
bool |
False |
Activa el aumento de datos en tiempo de prueba (TTA) para las predicciones, lo que podría mejorar la robustez de la detección a costa de la velocidad de inferencia. |
agnostic_nms |
bool |
False |
Activa la Supresión No Máxima (NMS) agnóstica a la clase, que fusiona los cuadros superpuestos de diferentes clases. Útil en escenarios de detección de múltiples clases donde la superposición de clases es común. |
classes |
list[int] |
None |
Filtra las predicciones a un conjunto de ID de clase. Solo se devolverán las detecciones pertenecientes a las clases especificadas. Útil para centrarse en objetos relevantes en tareas de detección de múltiples clases. |
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 está activado. Si está desactivado, tienen el tamaño de imagen utilizado durante la inferencia. |
embed |
list[int] |
None |
Especifica las capas de las que se extraerán los vectores de características o los embeddings. Útil para tareas posteriores como la agrupación o la búsqueda de similitud. |
project |
str |
None |
Nombre del directorio del proyecto donde se guardan las salidas de predicción si save está activado. |
name |
str |
None |
Nombre de la ejecución de la predicción. Se utiliza para crear un subdirectorio dentro de la carpeta del proyecto, donde se almacenan las salidas de la predicción si save está activado. |
stream |
bool |
False |
Permite el procesamiento eficiente de la memoria para videos largos o numerosas imágenes al devolver un generador de objetos Results en lugar de cargar todos los fotogramas en la memoria a la vez. |
verbose |
bool |
True |
Controla si se deben mostrar registros de inferencia detallados en la terminal, proporcionando retroalimentación en tiempo real sobre el proceso de predicción. |
Argumentos de visualización:
Argumento | Tipo | Predeterminado | Descripción |
---|---|---|---|
show |
bool |
False |
Si True , muestra las imágenes o vídeos anotados en una ventana. Útil para obtener información visual inmediata durante el desarrollo o las pruebas. |
save |
bool |
False or True |
Permite guardar las imágenes o vídeos anotados en un archivo. Útil para la documentación, el análisis posterior o el intercambio de resultados. El valor predeterminado es True cuando se utiliza la CLI y False cuando se utiliza en python. |
save_frames |
bool |
False |
Cuando se procesan vídeos, guarda los 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] . Útil para la integración con otras herramientas de análisis. |
save_conf |
bool |
False |
Incluye las puntuaciones de confianza en los archivos de texto guardados. Mejora el detalle disponible para el post-procesamiento y el análisis. |
save_crop |
bool |
False |
Guarda imágenes recortadas de las detecciones. Útil para el aumento del conjunto de datos, el análisis o la creación de conjuntos de datos enfocados para objetos específicos. |
show_labels |
bool |
True |
Muestra 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 con la etiqueta. Ofrece información sobre la certeza del modelo para cada detección. |
show_boxes |
bool |
True |
Dibuja 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_width |
None or int |
None |
Especifica el ancho de línea de los cuadros delimitadores. Si None , el ancho de línea se ajusta automáticamente en función del tamaño de la imagen. Proporciona personalización visual para mayor claridad. |
Formatos de imagen y vídeo
YOLO11 admite varios formatos de imagen y vídeo, como se especifica en ultralytics/data/utils.py. Consulte las tablas siguientes para ver los sufijos válidos y los comandos de predicción de ejemplo.
Imágenes
La siguiente tabla contiene formatos de imagen Ultralytics válidos.
Nota
Las imágenes HEIC solo se admiten para la inferencia, no para el entrenamiento.
Sufijos de imagen | Comando de predicción de ejemplo | Referencia |
---|---|---|
.bmp |
yolo predict source=image.bmp |
Formato de archivo BMP de Microsoft |
.dng |
yolo predict source=image.dng |
Adobe DNG |
.jpeg |
yolo predict source=image.jpeg |
JPEG |
.jpg |
yolo predict source=image.jpg |
JPEG |
.mpo |
yolo predict source=image.mpo |
Objeto de imágenes múltiples |
.png |
yolo predict source=image.png |
Gráficos de red portátiles |
.tif |
yolo predict source=image.tif |
Formato de archivo de imagen etiquetada |
.tiff |
yolo predict source=image.tiff |
Formato de archivo de imagen etiquetada |
.webp |
yolo predict source=image.webp |
WebP |
.pfm |
yolo predict source=image.pfm |
FloatMap portátil |
.HEIC |
yolo predict source=image.HEIC |
Formato de imagen de alta eficiencia |
Vídeos
La siguiente tabla contiene formatos de vídeo Ultralytics válidos.
Sufijos de vídeo | Comando de predicción de ejemplo | Referencia |
---|---|---|
.asf |
yolo predict source=video.asf |
Formato de sistemas avanzados |
.avi |
yolo predict source=video.avi |
Audio Video Interleave |
.gif |
yolo predict source=video.gif |
Graphics Interchange Format (Formato de Intercambio de Gráficos) |
.m4v |
yolo predict source=video.m4v |
MPEG-4 Parte 14 |
.mkv |
yolo predict source=video.mkv |
Matroska |
.mov |
yolo predict source=video.mov |
QuickTime File Format (Formato de Archivo QuickTime) |
.mp4 |
yolo predict source=video.mp4 |
MPEG-4 Parte 14 - Wikipedia |
.mpeg |
yolo predict source=video.mpeg |
MPEG-1 Parte 2 |
.mpg |
yolo predict source=video.mpg |
MPEG-1 Parte 2 |
.ts |
yolo predict source=video.ts |
MPEG Transport Stream (Flujo de Transporte MPEG) |
.wmv |
yolo predict source=video.wmv |
Windows Media Video |
.webm |
yolo predict source=video.webm |
WebM Project |
Trabajar con resultados
Todos los Ultralytics predict()
las llamadas devolverán una lista de Results
objetos:
Resultados
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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
Results
los objetos 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 original de la imagen en formato (alto, ancho). |
boxes |
Boxes, optional |
Un objeto Boxes que contiene los cuadros delimitadores de detección. |
masks |
Masks, optional |
Un objeto Masks que contiene las máscaras de 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 los cuadros delimitadores orientados. |
speed |
dict |
Un diccionario de velocidades de preprocesamiento, inferencia y postprocesamiento 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. |
Results
Los objetos tienen los siguientes métodos:
Método | Tipo de retorno | Descripción |
---|---|---|
update() |
None |
Actualiza el objeto Results con nuevos datos de detección (boxes, masks, probs, obb, keypoints). |
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 a arrays 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 la misma imagen, ruta, nombres y atributos de velocidad. |
plot() |
np.ndarray |
Traza los resultados de la detección en una imagen RGB de entrada y devuelve la imagen anotada. |
show() |
None |
Muestra la imagen con los resultados de la inferencia anotados. |
save() |
str |
Guarda la imagen de los resultados de la inferencia anotada 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 Polars DataFrame. |
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 obtener más detalles, consulte la Results
documentación de la clase.
Cajas delimitadoras
Boxes
El objeto puede utilizarse para indexar, manipular y convertir bounding boxes a diferentes formatos.
Cajas delimitadoras
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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
Aquí hay una tabla para los Boxes
métodos y propiedades de la clase, 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 en un array de NumPy. |
cuda() |
Método | Mueve el objeto a la memoria de la CUDA. |
to() |
Método | Mueve el objeto al dispositivo especificado. |
xyxy |
Propiedad (torch.Tensor ) |
Devuelve los cuadros delimitadores en formato xyxy. |
conf |
Propiedad (torch.Tensor ) |
Devuelve los valores de confianza de los cuadros delimitadores. |
cls |
Propiedad (torch.Tensor ) |
Devuelve los valores de clase de los cuadros delimitadores. |
id |
Propiedad (torch.Tensor ) |
Devuelve los IDs de seguimiento de los cuadros delimitadores (si están disponibles). |
xywh |
Propiedad (torch.Tensor ) |
Devuelve los cuadros delimitadores en formato xywh. |
xyxyn |
Propiedad (torch.Tensor ) |
Devuelve los cuadros delimitadores en formato xyxy normalizados por el tamaño original de la imagen. |
xywhn |
Propiedad (torch.Tensor ) |
Devuelve los cuadros delimitadores en formato xywh normalizados por el tamaño original de la imagen. |
Para obtener más detalles, consulte la Boxes
documentación de la clase.
Máscaras
Masks
El objeto se puede utilizar para indexar, manipular y convertir máscaras en segmentos.
Máscaras
from ultralytics import YOLO
# Load a pretrained YOLO11n-seg Segment model
model = YOLO("yolo11n-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
Aquí hay una tabla para los Masks
métodos y propiedades de la clase, incluyendo su nombre, tipo y descripción:
Nombre | Tipo | Descripción |
---|---|---|
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 un array de 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 el dtype especificados. |
xyn |
Propiedad (torch.Tensor ) |
Una lista de segmentos normalizados representados como tensores. |
xy |
Propiedad (torch.Tensor ) |
Una lista de segmentos en coordenadas de píxeles representados como tensores. |
Para obtener más detalles, consulte la Masks
documentación de la clase.
Puntos clave
Keypoints
El objeto se puede utilizar para indexar, manipular y normalizar coordenadas.
Puntos clave
from ultralytics import YOLO
# Load a pretrained YOLO11n-pose Pose model
model = YOLO("yolo11n-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
Aquí hay una tabla para los Keypoints
métodos y propiedades de la clase, 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 un array de 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 el 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 obtener más detalles, consulte la Keypoints
documentación de la clase.
Probabilidades
Probs
El objeto se puede utilizar para indexar, obtener top1
y top5
índices y puntuaciones de clasificación.
Probabilidades
from ultralytics import YOLO
# Load a pretrained YOLO11n-cls Classify model
model = YOLO("yolo11n-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
Aquí tienes una tabla que resume los métodos y propiedades para el Probs
clase:
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 el dtype especificados. |
top1 |
Propiedad (int ) |
Índice de la clase superior 1. |
top5 |
Propiedad (list[int] ) |
Índices de las 5 clases superiores. |
top1conf |
Propiedad (torch.Tensor ) |
Confianza de la clase superior 1. |
top5conf |
Propiedad (torch.Tensor ) |
Confidencias de las 5 clases superiores. |
Para obtener más detalles, consulte la Probs
documentación de la clase.
OBB
OBB
El objeto se puede utilizar para indexar, manipular y convertir cajas delimitadoras orientadas a diferentes formatos.
OBB
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n-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
Aquí hay una tabla para los OBB
métodos y propiedades de la clase, 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 en un array de NumPy. |
cuda() |
Método | Mueve el objeto a la memoria de la CUDA. |
to() |
Método | Mueve el objeto al dispositivo especificado. |
conf |
Propiedad (torch.Tensor ) |
Devuelve los valores de confianza de los cuadros delimitadores. |
cls |
Propiedad (torch.Tensor ) |
Devuelve los valores de clase de los cuadros delimitadores. |
id |
Propiedad (torch.Tensor ) |
Devuelve los IDs de seguimiento de los cuadros delimitadores (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 obtener más detalles, consulte la OBB
documentación de la clase.
Graficar resultados
El plot()
método en Results
objetos 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 un array de NumPy, lo que permite mostrarla o guardarla fácilmente.
Trazado
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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")
plot()
Parámetros del método
El plot()
El método admite varios argumentos para personalizar la salida:
Argumento | Tipo | Descripción | Predeterminado |
---|---|---|---|
conf |
bool |
Incluye las puntuaciones de confianza de la detección. | True |
line_width |
float |
Ancho de línea de las cajas delimitadoras. Se escala con el tamaño de la imagen si None . |
None |
font_size |
float |
Tamaño de la fuente del texto. Se escala con el tamaño de la imagen si None . |
None |
font |
str |
Nombre de la fuente para las anotaciones de texto. | 'Arial.ttf' |
pil |
bool |
Devuelve la imagen como un objeto de imagen PIL. | False |
img |
np.ndarray |
Imagen alternativa para el trazado. Utiliza la imagen original si None . |
None |
im_gpu |
torch.Tensor |
Imagen acelerada por GPU para un trazado de máscaras más rápido. Forma: (1, 3, 640, 640). | None |
kpt_radius |
int |
Radio para los puntos clave dibujados. | 5 |
kpt_line |
bool |
Conectar los puntos clave con líneas. | True |
labels |
bool |
Incluir las etiquetas de clase en las anotaciones. | True |
boxes |
bool |
Superponer los cuadros delimitadores en la imagen. | True |
masks |
bool |
Superponer máscaras en la imagen. | True |
probs |
bool |
Incluir las probabilidades de clasificación. | True |
show |
bool |
Mostrar la imagen anotada directamente usando el visor de imágenes predeterminado. | False |
save |
bool |
Guardar 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 |
Especificar el modo de color, por ejemplo, 'instancia' o 'clase'. | 'class' |
txt_color |
tuple[int, int, int] |
Color de texto RGB para el cuadro delimitador y la etiqueta de clasificación de imágenes. | (255, 255, 255) |
Inferencia segura para subprocesos
Garantizar la seguridad de los hilos durante la inferencia es crucial cuando se ejecutan 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 salidas consistentes y confiables.
Cuando se utilizan modelos YOLO en una aplicación multi-hilo, es importante instanciar objetos de modelo separados para cada hilo o emplear almacenamiento local de hilos para prevenir conflictos:
Inferencia segura para subprocesos
Instanciar un único modelo dentro de cada hilo para una inferencia segura 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=("yolo11n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo11n.pt", "image2.jpg")).start()
Para una visión en profundidad de la inferencia segura para hilos con modelos YOLO e instrucciones paso a paso, por favor, consulte nuestra Guía de Inferencia Segura para Hilos YOLO. Esta guía le proporcionará toda la información necesaria para evitar errores comunes y asegurar que su inferencia multi-hilo se ejecute sin problemas.
Fuente de Streaming for
-loop
Aquí hay un script de python usando OpenCV (cv2
) y YOLO para ejecutar la inferencia en los fotogramas de vídeo. Este script asume que ya ha instalado los paquetes necesarios (opencv-python
y ultralytics
).
Bucle for de Streaming
import cv2
from ultralytics import YOLO
# Load the YOLO model
model = YOLO("yolo11n.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. Se puede salir del bucle pulsando 'q'.
Preguntas frecuentes
¿Qué es Ultralytics YOLO y su modo predict para la inferencia en tiempo real?
Ultralytics YOLO es un modelo de última generación para la detección de objetos, la segmentación y la clasificación en tiempo real. Su modo predict permite a los usuarios realizar inferencias de alta velocidad en varias fuentes de datos, como imágenes, vídeos y transmisiones en vivo. Diseñado para el rendimiento y la versatilidad, también ofrece procesamiento por lotes y modos de transmisión. Para obtener más detalles sobre sus características, consulte el modo predict de Ultralytics YOLO.
¿Cómo puedo ejecutar la inferencia usando Ultralytics YOLO en diferentes fuentes de datos?
Ultralytics YOLO puede procesar una amplia gama de fuentes de datos, incluyendo imágenes individuales, vídeos, directorios, URLs y streams. Puede especificar la fuente de datos en la model.predict()
llamada. Por ejemplo, use 'image.jpg'
para una imagen local o 'https://ultralytics.com/images/bus.jpg'
para una URL. Consulte los ejemplos detallados para varios fuentes de inferencia en la documentación.
¿Cómo optimizo la velocidad de inferencia y el uso de memoria de YOLO?
Para optimizar la velocidad de inferencia y gestionar la memoria de manera eficiente, puede utilizar el modo de transmisión configurando stream=True
en el método de llamada del predictor. El modo de transmisión genera un generador de objetos con uso eficiente de la memoria en lugar de cargar todos los fotogramas en la memoria. Para procesar videos largos o grandes conjuntos de datos, el modo de transmisión es particularmente útil. Obtenga más información sobre el Results
objetos en lugar de cargar todos los fotogramas en la memoria. Para procesar videos largos o grandes conjuntos de datos, el modo de transmisión es particularmente útil. Obtenga más información sobre el modo de transmisión.
¿Qué argumentos de inferencia admite Ultralytics YOLO?
El model.predict()
método en YOLO admite varios argumentos como conf
, iou
, imgsz
, device
, y más. Estos argumentos le permiten personalizar el proceso de inferencia, estableciendo parámetros como los umbrales de confianza, el tamaño de la imagen y el dispositivo utilizado para el cálculo. Puede encontrar descripciones detalladas de estos argumentos en los argumentos de inferencia sección.
¿Cómo puedo visualizar y guardar los resultados de las predicciones de YOLO?
Después de ejecutar la inferencia con YOLO, los Results
objetos contienen métodos para mostrar y guardar imágenes anotadas. Puede utilizar métodos como result.show()
y result.save(filename="result.jpg")
para visualizar y guardar los resultados. Para obtener una lista completa de estos métodos, consulte la sección de trabajar con resultados sección.