Predicción de modelos con Ultralytics YOLO#
Introducción#
En el ámbito del aprendizaje automático y la visión artificial, el proceso de interpretar datos visuales suele denominarse inferencia o predicción. Ultralytics YOLO26 ofrece una potente función llamada modo de predicción, diseñada para realizar inferencias de alto rendimiento en tiempo real con una amplia variedad de fuentes de datos.
Consulta la vista previa de YOLO27 aún no publicada para ver ejemplos de inferencia previstos.
Ver: Cómo extraer resultados de las tareas de Ultralytics YOLO26 para proyectos personalizados 🚀
Aplicaciones en el mundo real#
| Fabricació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 algunas razones para considerar el modo de predicción de YOLO26 para tus distintas necesidades de inferencia:
- Versatilidad: Puede ejecutar inferencias sobre imágenes, vídeos e incluso transmisiones en directo.
- Rendimiento: Diseñado para procesar datos a gran velocidad y en tiempo real sin sacrificar la precisión.
- Facilidad de uso: Interfaces intuitivas de Python y CLI para implementar y probar rápidamente.
- Altamente personalizable: Diversos ajustes y parámetros para adaptar el comportamiento de inferencia del modelo a tus requisitos específicos.
- Listo para producción: Implementa modelos como puntos de conexión de inferencia de Ultralytics Platform con escalado automático y supervisión, o ejecuta inferencias en local.
Características principales del modo de predicción#
El modo de predicción de YOLO26 está diseñado para ser robusto y versátil, e incluye:
- Compatibilidad con varios tipos de fuentes de datos: Tanto si tus datos son imágenes individuales, un conjunto de imágenes, archivos de vídeo o transmisiones de vídeo en tiempo real, el modo de predicción te ofrece todo lo que necesitas.
- Modo de transmisión: Usa la función de transmisión para generar un generador de objetos
Resultsque ahorra memoria. 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 uno a uno, lo que resulta especialmente útil para vídeos largos y transmisiones en directo. - Procesamiento por lotes: Procesa varias imágenes o fotogramas de vídeo en un solo lote para reducir aún más el tiempo total de inferencia.
- Fácil integración: Gracias a su API flexible, se integra fácilmente con las canalizaciones de datos existentes y otros componentes de software.
Los modelos Ultralytics YOLO devuelven una lista de objetos Results de Python o, si se pasa stream=True al modelo durante la inferencia, un generador de objetos Results que ahorra memoria:
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n.pt") # modelo YOLO26n preentrenado
# Ejecuta la inferencia por lotes en una lista de imágenes
results = model(["image1.jpg", "image2.jpg"]) # devuelve una lista de objetos Results
# Procesa la lista de resultados
for result in results:
boxes = result.boxes # Objeto Boxes para las salidas de cuadros delimitadores
masks = result.masks # Objeto Masks para las salidas de máscaras de segmentación
keypoints = result.keypoints # Objeto Keypoints para las salidas de pose
probs = result.probs # Objeto Probs para las salidas de clasificación
obb = result.obb # Objeto Oriented boxes para las salidas OBB
result.show() # mostrar en pantalla
result.save(filename="result.jpg") # guardar en el discoFuentes de inferencia#
YOLO26 puede procesar distintos tipos de fuentes de entrada para realizar inferencias, como se muestra en la siguiente tabla. Entre las fuentes hay imágenes estáticas, transmisiones de vídeo y varios formatos de datos. La tabla también indica si se puede usar cada fuente en modo de transmisión con el argumento stream=True ✅. El modo de transmisión resulta útil para procesar vídeos o emisiones en directo, ya que crea un generador de resultados en lugar de cargar todos los fotogramas en memoria.
Usa stream=True para procesar vídeos largos o conjuntos de datos grandes y gestionar la memoria de forma eficiente. Cuando se usa stream=False, los resultados de todos los fotogramas o puntos de datos se almacenan en memoria, lo que puede acumularse rápidamente y provocar errores de falta de memoria con entradas grandes. En cambio, stream=True utiliza un generador que solo mantiene en memoria los resultados del fotograma o punto de datos actual, lo que reduce considerablemente el consumo de memoria y evita problemas de falta de memoria.
| Fuente | 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 | Haz 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 con 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 buscar varios archivos. Usa el carácter * como comodín. |
| YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | URL de un vídeo de YouTube. |
| transmisión ✅ | 'rtsp://example.com/media.mp4' | str | URL para protocolos de transmisión como RTSP, RTMP, TCP o una dirección IP. |
| varias transmisiones ✅ | 'list.streams' | str o Path | Archivo de texto *.streams con una URL de transmisión por fila; es decir, se ejecutarán 8 transmisiones con un tamaño de lote de 8. |
| cámara web ✅ | 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 usar cada tipo de fuente:
Ejecuta inferencias sobre un archivo de imagen.
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")
# Define la ruta al archivo de imagen
source = "path/to/image.jpg"
# Ejecuta la inferencia sobre la fuente
results = model(source) # lista de objetos ResultsArgumentos de inferencia#
model.predict() acepta varios argumentos que puedes pasar en el momento de la inferencia para sustituir los valores predeterminados:
Tamaño fijo frente a rectángulo mínimo (rect)#
De forma predeterminada, predict usa rect=True, que aplica un relleno de rectángulo mínimo cuando es posible. La imagen se escala para caber dentro de imgsz y solo se rellena hasta el múltiplo de stride más cercano, por lo que el tensor final puede ser más pequeño que imgsz. El relleno de rectángulo mínimo solo se usa cuando todas las imágenes del lote tienen la misma forma y el backend lo admite (PyTorch .pt o una exportación con forma dinámica, como ONNX dinámico). En caso contrario, las imágenes se rellenan hasta el objetivo imgsz completo.
Usa rect=False para rellenar siempre hasta el objetivo imgsz completo. Se recomienda esta opción cuando necesitas un tamaño de entrada fijo que coincida con el de los modelos exportados (ONNX, TensorRT, etc.).
imgsz entero frente a tupla
- Un
imgsz=640entero se convierte en un objetivo cuadrado(640, 640)tras el redondeo al stride. - Una tupla
imgsz=(384, 672)establece un objetivo rectangular. Conrect=True, el tensor real puede ser más pequeño que este objetivo.
Entrenamiento frente a predict/export
El entrenamiento solo acepta un imgsz entero (una lista [h, w] se convierte en el valor más alto). Predict y export aceptan un entero o una tupla (height, width).
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")
# Ejecuta inferencias en «bus.jpg» con argumentos
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)Argumentos de inferencia:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
source | str o int o None | None | Especifica el origen de datos para la inferencia. Puede ser la ruta a una imagen, un archivo de vídeo, un directorio, una URL o el ID de un dispositivo para transmisiones en directo. Si se omite, se registra una advertencia y el modelo recurre a los recursos de demostración integrados (ultralytics/assets o una URL de demostración para OBB). Admite una amplia variedad de formatos y orígenes, lo que permite usarlo con flexibilidad en distintos tipos de entrada. |
conf | float | 0.25 | Establece el umbral mínimo de confianza para las detecciones. Se descartan los objetos detectados con un nivel de confianza inferior a este umbral. Ajustar este valor puede ayudar a reducir los falsos positivos. |
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 cuadros superpuestos, lo que resulta útil para reducir los duplicados. |
imgsz | int o tuple | 640 | Objetivo de Letterbox. Un entero define un N×N cuadrado; una tupla define (height, width). Con rect=True, el tensor real puede ser más pequeño que este objetivo debido al relleno mínimo en rectángulo. Usa rect=False para fijar el tamaño. Consulta Forma fija frente a rectángulo mínimo. |
rect | bool | True | Si True, usa el relleno mínimo en rectángulo cuando sea posible (lotes con la misma forma y backend compatible). Si False, rellena siempre hasta el valor completo de imgsz. Consulta Forma fija frente a rectángulo mínimo. |
quantize | int o str | None | Precisión de inferencia: 16/"fp16" y 32/"fp32"/unset seleccionan el cálculo FP16 o FP32 para los modelos PyTorch y TorchScript (FP32 en CPU); los demás formatos usan la precisión que seleccionen el artefacto y el entorno de ejecución. En 16, OpenVINO sigue redondeando la entrada a FP16 en el cliente y volviéndola a ampliar a FP32, sin cambiar la precisión del entorno de ejecución. La cuantización INT8/PTQ se configura durante la exportación y se utiliza después al cargar el modelo exportado. Sustituye a la marca obsoleta half. |
device | str | None | Especifica el dispositivo para la inferencia (p. ej., cpu, cuda:0, 0, npu o npu:0). Permite seleccionar entre CPU, una GPU específica, una NPU Huawei Ascend u otros dispositivos de cálculo para ejecutar el modelo. |
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 del conjunto de datos (p. ej., coco8.yaml) que se lee solo para obtener su names, y únicamente cuando el modelo cargado no incluye nombres de clase propios: una exportación de terceros o una exportación de Ultralytics separada de los metadatos que la acompañan. De lo contrario, el modelo indica class0, class1, etc. |
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 aumentar el rendimiento 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 para evitar resultados excesivos en escenas densas. |
vid_stride | int | 1 | Salto de fotogramas para entradas de vídeo. Permite omitir fotogramas para acelerar el procesamiento a costa de la resolución temporal. El valor 1 procesa todos los fotogramas; los valores superiores los omiten. |
stream_buffer | bool | False | Determina si se ponen en cola los fotogramas entrantes de las secuencias de vídeo. Si False, se descartan los fotogramas antiguos para dejar sitio a los nuevos (optimizado para aplicaciones en tiempo real). Si True, los fotogramas nuevos se guardan en un búfer para garantizar que no se omita ninguno, pero se introduce latencia si los FPS de inferencia son inferiores a los FPS de la secuencia. |
visualize | bool | False | Guarda un mapa de calor de activación de clases junto a cada predicción, que muestra qué píxeles han elevado las puntuaciones de la clase predicha. Respeta conf y classes, por lo que classes=[0] solo asigna esa clase. Solo está disponible para modelos PyTorch de Ultralytics. |
augment | bool | False | Activa el aumento en tiempo de prueba (TTA) para las predicciones, lo que puede mejorar la robustez de la detección a costa de la velocidad de inferencia. Solo está disponible para modelos PyTorch de Ultralytics. |
agnostic_nms | bool | False | Activa la supresión no máxima (NMS) independiente de la clase, que suprime los cuadros solapados con puntuaciones más bajas entre clases distintas, en lugar de hacerlo solo dentro de la misma clase. Es útil en escenarios de detección multiclase donde los solapamientos entre clases son frecuentes. Con la inferencia sin NMS (nms=False en YOLO26 o YOLOv10), solo impide que la misma detección aparezca con varias etiquetas de clase (duplicados con IoU=1.0); no suprime cuadros distintos según el umbral de IoU. |
classes | list[int] | None | Filtra las predicciones para limitarse a un conjunto de ID de clase. Solo se devuelven las detecciones pertenecientes a las clases especificadas. Es útil para centrarse en los objetos relevantes en tareas de detección multiclase. |
retina_masks | bool | False | Devuelve máscaras de segmentación de alta resolución. Si se activa, las máscaras devueltas (masks.data) coinciden con el tamaño de la imagen original. Si se desactiva, tienen el tamaño de imagen utilizado durante la inferencia. |
embed | list[int] | None | Especifica las capas de las que se extraen vectores de características o embeddings. Usa model.embed(source) para obtener embeddings de la penúltima capa o model.predict(source, embed=[layer]) para seleccionar capas concretas. Es útil para tareas posteriores, como la agrupación en clústeres o la búsqueda por similitud. Solo está disponible para modelos PyTorch de Ultralytics. |
project | str | None | Nombre del directorio del proyecto donde se guardan los resultados de las predicciones si se activa save. |
name | str | None | Nombre de la ejecución de predicción. Se usa para crear un subdirectorio dentro de la carpeta del proyecto, donde se guardan los resultados de las predicciones si se activa save. |
stream | bool | False | Permite procesar de forma eficiente en cuanto a memoria vídeos largos o numerosas imágenes, ya que devuelve un generador de objetos Results en lugar de cargar todos los fotogramas en memoria a la vez. |
verbose | bool | True | Controla si se muestran registros detallados de inferencia en el terminal para ofrecer información en tiempo real sobre el proceso de predicción. |
compile | bool o str | False | Activa la compilación de grafos torch.compile de PyTorch 2.x con backend='inductor'. Acepta True → "default" para activarla, False → para desactivarla o un modo de cadena como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Si no es compatible, vuelve al modo eager y muestra una advertencia. |
channels_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, compatible con oneDNN y PyTorch 1.13 o posterior; False lo desactiva y True lo solicita en dispositivos CPU x86 o CUDA compatibles. ARM64, MPS, las versiones anteriores de PyTorch, las CPU sin oneDNN y los formatos exportados como TensorRT y ONNX no cambian. |
nms | bool, opcional | None | Por defecto, ejecuta inferencia uno a varios con NMS (None o True). Configura False para usar el cabezal uno a uno sin NMS cuando esté disponible. Consulta la guía de detección de extremo a extremo para obtener más información. |
Argumentos de visualización:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
show | bool | False | Si True, muestra las imágenes o los vídeos anotados en una ventana. Es útil para obtener información visual inmediata durante el desarrollo o las pruebas. |
save | bool | False or True | Activa el guardado de las imágenes o los vídeos anotados en archivos. Es útil para documentar, analizar más adelante o compartir resultados. De forma predeterminada, es True al usar la CLI y False al usar Python. |
save_frames | bool | False | Al procesar vídeos, guarda fotogramas individuales como imágenes. Es útil para extraer fotogramas concretos o analizarlos detalladamente uno por uno. |
save_txt | bool | False | Guarda los resultados de detección en un archivo de texto con el formato [class] [x_center] [y_center] [width] [height] [confidence]. Es útil para integrarlos con otras herramientas de análisis. |
save_conf | bool | False | Incluye puntuaciones de confianza en los archivos de texto guardados. Ofrece más detalles para el posprocesamiento y el análisis. |
save_crop | bool | False | Guarda imágenes recortadas de las detecciones. Es útil para aumentar conjuntos de datos, realizar análisis o crear conjuntos de datos centrados en objetos concretos. |
show_labels | bool | True | Muestra etiquetas para cada detección en la salida visual. Facilita la identificació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. Es esencial para identificar visualmente y localizar 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 None, el grosor de línea se ajusta automáticamente al tamaño de la imagen. Permite personalizar la visualización para mejorar la claridad. |
Formatos de imagen y vídeo#
YOLO26 admite varios formatos de imagen y vídeo, como se especifica en ultralytics/data/utils.py. Consulta las tablas siguientes para ver las extensiones válidas y ejemplos de comandos predict.
Imágenes#
La tabla siguiente contiene los formatos de imagen válidos de Ultralytics.
Los formatos HEIC/HEIF requieren pi-heif, que se instala automáticamente la primera vez que se usa. Pillow admite AVIF de forma nativa.
| Extensiones de imagen | Ejemplo de comando predict | 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 | DNG de Adobe |
.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 válidos de Ultralytics.
| Extensiones de vídeo | Ejemplo de comando predict | Referencia |
|---|---|---|
.asf | yolo predict source=video.asf | Formato de sistemas avanzados |
.avi | yolo predict source=video.avi | Entrelazado de audio y vídeo |
.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 | Vídeo de Windows Media |
.webm | yolo predict source=video.webm | Proyecto WebM |
Trabajar con resultados#
Todas las llamadas de Ultralytics predict() devuelven una lista de objetos Results:
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")
# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
[
"https://ultralytics.com/images/bus.jpg",
"https://ultralytics.com/images/zidane.jpg",
]
) # inferencias por lotesLos objetos Results tienen los siguientes atributos:
| Atributo | Tipo | Descripción |
|---|---|---|
orig_img | np.ndarray | La imagen original como matriz NumPy. |
orig_shape | tuple | La forma de la imagen original en formato (alto, ancho). |
boxes | Boxes, optional | Un objeto Boxes que contiene los cuadros delimitadores 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 cuadros delimitadores orientados. |
semantic_mask | SemanticMask, optional | Un objeto SemanticMask que contiene un mapa de clases denso por píxel. |
depth | DepthMap, optional | Un objeto DepthMap que contiene un mapa de profundidad 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 en el que guardar los resultados. |
Resultados por tarea#
Los campos que se rellenan a continuación dependen de la tarea del modelo: compara la detección, la segmentación, la segmentación semántica, la estimación de profundidad, la clasificación, la pose y OBB si aún no has elegido una. Cada predicción devuelve un objeto Results por imagen o fotograma. Los campos comunes anteriores siempre están disponibles, mientras que los datos de predicción específicos de cada tarea se almacenan en los campos siguientes. Los tensores de coordenadas y confianza de YOLO son torch.float32; los tensores de probabilidad son torch.float32, salvo que se use inferencia FP16 (quantize=16), en cuyo caso son torch.float16. Después de result.numpy(), los tensores se convierten en matrices NumPy con tipos de datos NumPy equivalentes. Las máscaras de instancia son tensores binarios torch.uint8, mientras que las máscaras semánticas usan el tipo de dato entero más pequeño que resulte práctico para los ID de clase: torch.uint8, torch.int16 o torch.int32, según el número de clases.
| Atributo | Tipo | Forma | Descripción |
|---|---|---|---|
result.boxes | Boxes | (N) | Cuadros de detección. |
result.boxes.data | torch.float32 | (N,6/7) | [x1,y1,x2,y2,conf,cls] sin procesar, más un ID de seguimiento opcional. |
result.boxes.xyxy | torch.float32 | (N,4) | Cuadros 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, máscaras semánticas o profundidad. |
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 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 nuevo objeto Results con los mismos atributos de imagen, ruta, nombres y velocidad. |
plot() | np.ndarray | Representa 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 en un archivo la imagen con los resultados de inferencia anotados y devuelve el nombre del archivo. |
verbose() | str | Devuelve una cadena de registro para cada tarea, con detalles de 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 del archivo guardado. |
save_crop() | None | Guarda las imágenes recortadas de detección en el directorio especificado. |
summary() | List[Dict[str, Any]] | Convierte los resultados de inferencia en un diccionario resumido, con normalización opcional. |
to_df() | 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.
Cajas#
El objeto Boxes se puede usar para indexar y manipular cajas delimitadoras, y convertirlas a distintos formatos.
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")
# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg") # lista de resultados
# Ver resultados
for r in results:
print(r.boxes) # imprimir el objeto Boxes que contiene las cajas delimitadoras de detecciónAquí tienes una tabla con los métodos y propiedades de la clase Boxes, incluidos sus nombres, tipos y descripciones:
| Nombre | Tipo | Descripción |
|---|---|---|
cpu() | Método | Traslada el objeto a la memoria de la CPU. |
numpy() | Método | Convierte el objeto en una matriz NumPy. |
cuda() | Método | Traslada el objeto a la memoria de CUDA. |
to() | Método | Traslada 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 ID 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 según el tamaño original de la imagen. |
xywhn | Propiedad (torch.Tensor) | Devuelve las cajas en formato xywh, normalizadas según el tamaño original de la imagen. |
Para obtener más información, consulta la documentación de la clase Boxes.
Máscaras#
El objeto Masks se puede usar para indexar y manipular máscaras, y convertirlas en segmentos.
from ultralytics import YOLO
# Cargar un modelo de segmentación YOLO26n-seg preentrenado
model = YOLO("yolo26n-seg.pt")
# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg") # lista de resultados
# Ver resultados
for r in results:
print(r.masks) # imprimir el objeto Masks que contiene las máscaras de instancia detectadasAquí tienes una tabla con los métodos y propiedades de la clase Masks, incluidos sus nombres, tipos y descripciones:
| 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 el tipo de datos 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 obtener más información, consulta la documentación de la clase Masks.
Máscara semántica#
SemanticMask almacena un mapa de clases denso para los resultados de segmentación semántica. A diferencia de Masks, no contiene una máscara binaria por objeto ni proporciona funciones auxiliares para polígonos.
from ultralytics import YOLO
# Cargar un modelo semántico YOLO26n-sem preentrenado
model = YOLO("yolo26n-sem.pt")
# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg") # lista de resultados
# Ver resultados
for r in results:
print(r.semantic_mask.data) # imprimir el mapa de ID de clase H x W| Nombre | Tipo | Descripción |
|---|---|---|
data | Propiedad (torch.Tensor) | Mapa de ID de clase con forma (H,W). El tipo de datos es torch.uint8, torch.int16 o torch.int32, según el número de clases. |
shape | Propiedad (tuple) | Forma del mapa de clases, que suele coincidir 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 el tipo de datos especificados. |
Puntos clave#
El objeto Keypoints se puede usar para indexar y manipular coordenadas, y normalizarlas.
from ultralytics import YOLO
# Cargar un modelo Pose YOLO26n-pose preentrenado
model = YOLO("yolo26n-pose.pt")
# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg") # lista de resultados
# Ver resultados
for r in results:
print(r.keypoints) # imprimir el objeto Keypoints que contiene los puntos clave detectadosAquí tienes una tabla con los métodos y propiedades de la clase Keypoints, incluidos sus nombres, tipos y descripciones:
| 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 el tipo de datos especificados. |
xyn | Propiedad (torch.Tensor) | Coordenadas normalizadas de puntos clave con forma (N,K,2). |
xy | Propiedad (torch.Tensor) | Coordenadas de puntos clave en píxeles con forma (N,K,2). |
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.
Probabilidades#
El objeto Probs se puede usar para obtener los índices y las puntuaciones de clasificación top1 y top5.
from ultralytics import YOLO
# Cargar un modelo Classify YOLO26n-cls preentrenado
model = YOLO("yolo26n-cls.pt")
# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/bus.jpg") # lista de resultados
# Ver resultados
for r in results:
print(r.probs) # imprimir el objeto Probs que contiene las probabilidades de clase detectadasAquí tienes 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 probs en la memoria de la CPU. |
numpy() | Método | Devuelve una copia del tensor probs como matriz 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 tipo de datos especificados. |
top1 | Propiedad (int) | Índice de la clase con mayor puntuación. |
top5 | Propiedad (list[int]) | Índices de las 5 clases con mayor puntuación. |
top1conf | Propiedad (torch.Tensor) | Confianza de la clase con mayor puntuación. |
top5conf | Propiedad (torch.Tensor) | Confianzas de las 5 clases con mayor puntuación. |
Para obtener más información, consulta la documentación de la clase Probs.
OBB#
El objeto OBB permite indexar, manipular y convertir cajas delimitadoras orientadas a distintos formatos.
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n-obb.pt")
# Ejecuta la inferencia en una imagen
results = model("https://ultralytics.com/images/boats.jpg") # lista de resultados
# Ver resultados
for r in results:
print(r.obb) # imprime el objeto OBB que contiene las cajas delimitadoras orientadas de las deteccionesAquí tienes una tabla con los métodos y propiedades de la clase OBB, incluidos sus nombres, tipos y descripciones:
| Nombre | Tipo | Descripción |
|---|---|---|
cpu() | Método | Traslada el objeto a la memoria de la CPU. |
numpy() | Método | Convierte el objeto en una matriz NumPy. |
cuda() | Método | Traslada el objeto a la memoria de CUDA. |
to() | Método | Traslada 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 ID 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 giradas en formato xywhr. |
xyxyxyxy | Propiedad (torch.Tensor) | Devuelve las cajas giradas en formato xyxyxyxy. |
xyxyxyxyn | Propiedad (torch.Tensor) | Devuelve las cajas giradas en formato xyxyxyxy normalizadas según el tamaño de la imagen. |
Para obtener más información, consulta la documentación de la clase OBB.
Representación de resultados#
El método plot() de los objetos Results facilita la visualización de las predicciones al superponer los objetos detectados (como cajas delimitadoras, máscaras, puntos clave y probabilidades) sobre la imagen original. Este método devuelve la imagen anotada como una matriz NumPy, lo que permite mostrarla o guardarla fácilmente.
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 las puntuaciones de confianza de las detecciones. | True |
line_width | float | Grosor 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 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 PIL Image. | False |
img | np.ndarray | torch.Tensor | Imagen alternativa. Los tensores deben ser contiguos y tener el formato HWC BGR 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 las cajas delimitadoras en la imagen. | True |
masks | bool | Superpone las máscaras en 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 de texto BGR para las etiquetas de clasificación. | (255, 255, 255) |
Inferencia segura para subprocesos#
Garantizar la seguridad de los subprocesos durante la inferencia es fundamental cuando ejecutas varios modelos YOLO en paralelo en distintos subprocesos. La inferencia segura para subprocesos garantiza que las predicciones de cada subproceso estén aisladas y no interfieran entre sí, evita las condiciones de carrera y asegura resultados coherentes y fiables.
Al usar modelos YOLO en una aplicación con varios subprocesos, es importante crear instancias de modelo separadas para cada subproceso o emplear almacenamiento local para cada subproceso a fin de evitar conflictos:
Crea una única instancia del modelo dentro de cada subproceso para realizar inferencias de forma segura:
from threading import Thread
from ultralytics import YOLO
def thread_safe_predict(model, image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
model = YOLO(model)
results = model.predict(image_path)
# Procesa los resultados
# Inicia subprocesos, cada uno con su propia instancia del modelo
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()Para profundizar en la inferencia segura para subprocesos con modelos YOLO y consultar instrucciones paso a paso, visita nuestra guía de inferencia segura para subprocesos con YOLO. Esta guía te proporcionará toda la información necesaria para evitar errores habituales y garantizar que la inferencia con varios subprocesos se ejecute sin problemas.
Bucle for para fuentes de transmisión#
Aquí tienes un script de Python que utiliza OpenCV (cv2) y YOLO para realizar inferencias en fotogramas de vídeo. Este script presupone que ya has instalado los paquetes necesarios (opencv-python y ultralytics).
import cv2
from ultralytics import YOLO
# Cargar el modelo YOLO
model = YOLO("yolo26n.pt")
# Abre el archivo de vídeo
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
# Recorre los fotogramas del vídeo
while cap.isOpened():
# Lee un fotograma del vídeo
success, frame = cap.read()
if success:
# Realiza inferencias de YOLO en el fotograma
results = model(frame)
# Visualiza los resultados en el fotograma
annotated_frame = results[0].plot()
# Muestra el fotograma anotado
cv2.imshow("YOLO Inference", annotated_frame)
# Interrumpe el bucle si se pulsa 'q'
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Interrumpe el bucle si se llega al final del vídeo
break
# Libera el objeto de captura de vídeo y cierra la ventana de visualización
cap.release()
cv2.destroyAllWindows()Este script realizará predicciones en cada fotograma del vídeo, visualizará los resultados y los mostrará en una ventana. Puedes salir del bucle pulsando 'q'.
Qué hacer a continuación#
¿Listo para pasar de un modelo preentrenado? Confirma que tu tarea se ajusta a tu problema, da formato a tus propios datos con la guía de conjuntos de datos y, después, entrena con ellos.
Preguntas frecuentes#
Ultralytics YOLO es un modelo de última generación para la detección de objetos, la segmentación de instancias, la segmentación semántica, la estimación de profundidad, la clasificación, la estimación de poses y la detección de cajas delimitadoras orientadas (OBB) en tiempo real. Su modo predict permite realizar inferencias de alta velocidad con diversas fuentes de datos, como imágenes, vídeos y transmisiones en directo. Diseñado para ofrecer rendimiento y versatilidad, también admite el procesamiento por lotes y los modos de transmisión. Para obtener más información sobre sus funciones, consulta el modo predict de Ultralytics YOLO.
Ultralytics YOLO puede procesar una amplia variedad de fuentes de datos, como imágenes individuales, vídeos, directorios, URL y transmisiones. Puedes especificar la fuente de datos en la llamada
model.predict(). Por ejemplo, usa'image.jpg'para una imagen local o'https://ultralytics.com/images/bus.jpg'para una URL. Consulta los ejemplos detallados de distintas fuentes de inferencia en la documentación.Para optimizar la velocidad de inferencia y gestionar la memoria de forma eficiente, puedes usar el modo de transmisión estableciendo
stream=Trueen el método de llamada del predictor. El modo de transmisión genera un generador de objetosResultsque consume poca memoria, en lugar de cargar todos los fotogramas en memoria. Este modo es especialmente útil para procesar vídeos largos o conjuntos de datos grandes. Descubre más sobre el modo de transmisión.El método
model.predict()de YOLO admite varios argumentos, comoconf,iou,imgsz,device, entre otros. Estos argumentos permiten personalizar el proceso de inferencia y establecer parámetros como los umbrales de confianza, el tamaño de imagen y el dispositivo utilizado para los cálculos. Encontrarás descripciones detalladas de estos argumentos en la sección de argumentos de inferencia.Usa
model.embed(source)para extraer incrustaciones de características de la penúltima capa, o 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) # Objetos de resultados embeddings = model.embed(source) # lista de incrustaciones torch.TensorTras realizar inferencias 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. Las carpetas principales que falten en la ruta del nombre de archivo se crean automáticamente (por ejemplo,result.save("path/to/result.jpg")). Para consultar una lista completa de estos métodos, ve a la sección trabajar con resultados.