Predicción de modelos con Ultralytics YOLO#
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ó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?#
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 estableciendostream=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 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:
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 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.
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.
| Origen | Ejemplo | Tipo | Notas |
|---|---|---|---|
| imagen | 'image.jpg' | str o Path | Archivo de imagen individual. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL de una imagen. |
| captura de pantalla | 'screen' | str | Captura una imagen de la 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 coincidir con varios archivos. Usa 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 | Archivo 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 ✅ | 0 | int | Í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:
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 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=640se convierte en un objetivo cuadrado(640, 640)después del redondeo al 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/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).
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 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. |
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 producen menos detecciones al eliminar las cajas superpuestas, lo que resulta útil para reducir duplicados. |
imgsz | int o tuple | 640 | Objetivo 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. |
rect | bool | True | Si 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. |
quantize | int o str | None | Precisió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. |
device | str | None | Especifica 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. |
dnn | bool | False | Si True, usa el módulo DNN de OpenCV en lugar de ONNX Runtime para la inferencia de modelos ONNX. |
data | str | None | Ruta 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. |
batch | int | 1 | Especifica 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_det | int | 300 | Nú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_stride | int | 1 | Salto 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_buffer | bool | False | Determina 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. |
visualize | bool | False | Guarda 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. |
augment | bool | False | Activa 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_nms | bool | False | Habilita 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. |
classes | list[int] | None | Filtra 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_masks | bool | False | Devuelve 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. |
embed | list[int] | None | Especifica 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. |
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 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. |
stream | bool | False | Activa 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. |
verbose | bool | True | Controla si se muestran registros detallados de inferencia 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 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_last | bool | None | Usa 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. |
nms | bool, opcional | None | Ejecuta 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:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
show | bool | False | Si 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. |
save | bool | False or True | Activa 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_frames | bool | False | Al 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_txt | bool | False | Guarda 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_conf | bool | False | Incluye las puntuaciones de confianza en los archivos de texto guardados. Aumenta el nivel de detalle disponible para el posprocesamiento y el análisis. |
save_crop | bool | False | Guarda imágenes recortadas de las detecciones. Resulta útil para aumentar conjuntos de datos, realizar análisis o crear conjuntos centrados en objetos concretos. |
show_labels | bool | True | Muestra las etiquetas de 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 de cada detección junto a su etiqueta. Permite conocer el grado de 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 | int or None | None | Especifica 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.
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 imagen | Ejemplo de comando de predicción | Referencia |
|---|---|---|
.avif | yolo predict source=image.avif | Formato de archivo de imagen AV1 |
.bmp | yolo predict source=image.bmp | Formato de archivo BMP de Microsoft |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | Formato de imagen de alta eficiencia |
.heif | yolo predict source=image.heif | Formato de imagen de alta eficiencia |
.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 | Objeto de varias imágenes |
.png | yolo predict source=image.png | Gráficos de red portátiles |
.tif | yolo predict source=image.tif | Formato de archivo de imagen etiquetado |
.tiff | yolo predict source=image.tiff | Formato de archivo de imagen etiquetado |
.webp | yolo predict source=image.webp | WebP |
Vídeos#
La tabla siguiente contiene los formatos de vídeo de Ultralytics válidos.
| Sufijos de vídeo | Ejemplo de comando de predicción | 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 | 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 | 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 | Flujo de transporte MPEG |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | Proyecto WebM |
Trabajo con resultados#
Todas las llamadas predict() de Ultralytics devuelven 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 una matriz de NumPy. |
orig_shape | tuple | La forma de la imagen original en formato (alto, ancho). |
boxes | Boxes, optional | Un objeto Boxes que contiene las cajas delimitadoras de las detecciones. |
masks | Masks, optional | Un objeto Masks que contiene las máscaras de las detecciones. |
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 de 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 asigna índices de clase a nombres de clase. |
path | str | La ruta al archivo de imagen. |
save_dir | str, optional | Directorio 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.
| 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] sin procesar, además del 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; conviértelos 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 datos nuevos, como cajas, máscaras, probs, obb, puntos clave o máscaras semánticas. |
cpu() | Results | Devuelve una copia del objeto Results con todos los tensores trasladados a la memoria de la CPU. |
numpy() | Results | Devuelve una copia del objeto Results con todos los tensores convertidos en matrices de NumPy. |
cuda() | Results | Devuelve una copia del objeto Results con todos los tensores trasladados a la memoria de la GPU. |
to() | Results | Devuelve una copia del objeto Results con los tensores trasladados al dispositivo y tipo de datos especificados. |
new() | Results | Crea un objeto Results nuevo con los mismos atributos de imagen, ruta, nombres y velocidad. |
plot() | np.ndarray | Traza los resultados de detección sobre 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 con 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 detección en un archivo de texto y devuelve la ruta al archivo guardado. |
save_crop() | None | Guarda 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() | DataFrame | Convierte los resultados de detección en un DataFrame de Polars. |
to_csv() | str | Convierte los resultados de detección al formato CSV. |
to_json() | str | Convierte 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.
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 boxesEsta es una tabla con los métodos y las propiedades de la clase Boxes, incluidos 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 una matriz de NumPy. |
cuda() | Método | Mueve el objeto a la memoria de CUDA. |
to() | Método | Mueve el objeto al dispositivo especificado. |
xyxy | Propiedad (torch.Tensor) | Devuelve los BBox en formato xyxy. |
conf | Propiedad (torch.Tensor) | Devuelve los valores de confianza de los BBox. |
cls | Propiedad (torch.Tensor) | Devuelve los valores de clase de los BBox. |
id | Propiedad (torch.Tensor) | Devuelve los ID de seguimiento de los BBox (si están disponibles). |
xywh | Propiedad (torch.Tensor) | Devuelve los BBox en formato xywh. |
xyxyn | Propiedad (torch.Tensor) | Devuelve los BBox en formato xyxy normalizados según el tamaño de la imagen original. |
xywhn | Propiedad (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.
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 masksEsta es una tabla con los métodos y las propiedades de la clase Masks, incluidos 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 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 (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í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.
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 número 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 de 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 el dtype especificados. |
Puntos clave#
El objeto Keypoints se puede usar 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 keypointsEsta es una tabla con los métodos y las propiedades de la clase Keypoints, incluidos 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 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íxel representados como tensores. |
conf | Propiedad (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.
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 probabilitiesEsta es una tabla que resume los métodos y las propiedades de la clase Probs:
| Nombre | Tipo | Descripción |
|---|---|---|
cpu() | Método | Devuelve una copia del tensor de probabilidades en la memoria de la CPU. |
numpy() | Método | Devuelve una copia del tensor de probabilidades como una matriz de NumPy. |
cuda() | Método | Devuelve una copia del tensor de probabilidades en la memoria de la GPU. |
to() | Método | Devuelve una copia del tensor de probabilidades con el dispositivo y el dtype especificados. |
top1 | Propiedad (int) | Índice de la clase principal. |
top5 | Propiedad (list[int]) | Índices de las cinco clases principales. |
top1conf | Propiedad (torch.Tensor) | Confianza de la clase principal. |
top5conf | Propiedad (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.
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 boxesEsta es una tabla con los métodos y las propiedades de la clase OBB, incluidos 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 una matriz de NumPy. |
cuda() | Método | Mueve el objeto a la memoria de CUDA. |
to() | Método | Mueve el objeto al dispositivo especificado. |
conf | Propiedad (torch.Tensor) | Devuelve los valores de confianza de los BBox. |
cls | Propiedad (torch.Tensor) | Devuelve los valores de clase de los BBox. |
id | Propiedad (torch.Tensor) | Devuelve los ID de seguimiento de los BBox (si están disponibles). |
xyxy | Propiedad (torch.Tensor) | Devuelve los BBox horizontales en formato xyxy. |
xywhr | Propiedad (torch.Tensor) | Devuelve los BBox rotados en formato xywhr. |
xyxyxyxy | Propiedad (torch.Tensor) | Devuelve los BBox rotados en formato xyxyxyxy. |
xyxyxyxyn | Propiedad (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.
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:
| Argumento | Tipo | Descripción | Predeterminado |
|---|---|---|---|
conf | bool | Incluye las puntuaciones de confianza de las detecciones. | True |
line_width | float | Ancho de línea de los BBox. Se escala según el tamaño de la imagen si None. | None |
font_size | float | Tamaño de fuente del texto. Se escala según 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 PIL Image. | False |
img | np.ndarray | torch.Tensor | Imagen alternativa. Los tensores deben ser contiguos, HWC, BGR y uint8. | None |
kpt_radius | int | Radio de los puntos clave dibujados. | 5 |
kpt_line | bool | Conecta los puntos clave con líneas. | True |
labels | bool | Incluye las etiquetas de clase en las anotaciones. | True |
boxes | bool | Superpone los BBox sobre la imagen. | True |
masks | bool | Superpone las máscaras sobre la imagen. | True |
probs | bool | Incluye las probabilidades de clasificación. | True |
show | bool | Muestra directamente la imagen anotada con el visor de imágenes predeterminado. | False |
save | bool | Guarda la imagen anotada en el archivo especificado por filename. | False |
filename | str | Ruta y nombre del archivo en el que se guardará la imagen anotada si save es True. | None |
color_mode | str | Especifica el modo de color, por ejemplo, 'instance' o 'class'. | 'class' |
txt_color | tuple[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:
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).
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=Trueen el método de llamada del predictor. El modo streaming genera un generador de objetosResultseficiente 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, comoconf,iou,imgsz,devicey 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 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 usar métodos comoresult.show()yresult.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.