Predicción del Modelo con YOLO de Ultralytics
Introducción
En el mundo del aprendizaje automático y la visión por computadora, el proceso de dar sentido a los datos visuales se denomina 'inferencia' o 'predicción'. YOLOv8 de Ultralytics ofrece una característica poderosa conocida como modo predictivo que está diseñada para inferencias de alto rendimiento y en tiempo real en una amplia gama de fuentes de datos.
Ver: Cómo Extraer las Salidas del Modelo YOLOv8 de Ultralytics para Proyectos Personalizados.
Aplicaciones en el Mundo Real
Manufactura | 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 YOLO de Ultralytics para la Inferencia?
Estas son algunas razones para considerar el modo predictivo de YOLOv8 para sus necesidades de inferencia:
- Versatilidad: Capaz de realizar inferencias en imágenes, videos e incluso transmisiones en vivo.
- Rendimiento: Diseñado para procesamiento en tiempo real y de alta velocidad sin sacrificar precisión.
- Facilidad de Uso: Interfaces de Python y CLI intuitivas para una rápida implementación y pruebas.
- Alta Personalización: Diversos ajustes y parámetros para afinar el comportamiento de inferencia del modelo según sus requisitos específicos.
Características Principales del Modo Predictivo
El modo predictivo de YOLOv8 está diseñado para ser robusto y versátil, y cuenta con:
- 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 predictivo le tiene cubierto.
- Modo de Transmisión: Utilice la función de transmisión para generar un generador eficiente de memoria de objetos
Results
. Active 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, acelerando aún más el tiempo de inferencia.
- Amigable para la Integración: Se integra fácilmente con pipelines de datos existentes y otros componentes de software, gracias a su API flexible.
Los modelos YOLO de Ultralytics devuelven ya sea una lista de objetos Results
de Python, o un generador de objetos Results
de Python eficiente en memoria cuando se pasa stream=True
al modelo durante la inferencia:
Predict
from ultralytics import YOLO
# Cargar un modelo
model = YOLO('yolov8n.pt') # modelo YOLOv8n preentrenado
# Ejecutar inferencia por lotes en una lista de imágenes
results = model(['im1.jpg', 'im2.jpg']) # devuelve una lista de objetos Results
# Procesar lista de resultados
for result in results:
boxes = result.boxes # Objeto Boxes para salidas de bbox
masks = result.masks # Objeto Masks para salidas de máscaras de segmentación
keypoints = result.keypoints # Objeto Keypoints para salidas de postura
probs = result.probs # Objeto Probs para salidas de clasificación
from ultralytics import YOLO
# Cargar un modelo
model = YOLO('yolov8n.pt') # modelo YOLOv8n preentrenado
# Ejecutar inferencia por lotes en una lista de imágenes
results = model(['im1.jpg', 'im2.jpg'], stream=True) # devuelve un generador de objetos Results
# Procesar generador de resultados
for result in results:
boxes = result.boxes # Objeto Boxes para salidas de bbox
.masks = result.masks # Objeto Masks para salidas de máscaras de segmentación
keypoints = result.keypoints # Objeto Keypoints para salidas de postura
probs = result.probs # Objeto Probs para salidas de clasificación
Fuentes de Inferencia
YOLOv8 puede procesar diferentes tipos de fuentes de entrada para la inferencia, como se muestra en la tabla a continuación. 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 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 conjuntos de datos grandes para gestionar eficientemente la memoria. Cuando stream=False
, los resultados de todos los fotogramas o puntos de datos se almacenan en la memoria, lo que puede aumentar rápidamente y causar errores de memoria insuficiente para entradas grandes. En contraste, stream=True
utiliza un generador, que solo mantiene los resultados del fotograma o punto de datos actual en la memoria, reduciendo significativamente el consumo de memoria y previniendo problemas de falta de memoria.
Fuente | Argumento | Tipo | Notas |
---|---|---|---|
imagen | 'image.jpg' |
str o Path |
Archivo único de imagen. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
URL a una imagen. |
captura de pantalla | 'screen' |
str |
Captura una captura de pantalla. |
PIL | Image.open('im.jpg') |
PIL.Image |
Formato HWC con canales RGB. |
OpenCV | cv2.imread('im.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, videos o directorios. |
video ✅ | 'video.mp4' |
str o Path |
Archivo de video en formatos como MP4, AVI, etc. |
directorio ✅ | 'path/' |
str o Path |
Ruta a un directorio que contiene imágenes o videos. |
glob ✅ | 'path/*.jpg' |
str |
Patrón glob para coincidir con múltiples archivos. Utilice el carácter * como comodín. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
URL a un video 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. |
multi-transmisión ✅ | 'list.streams' |
str o Path |
Archivo de texto *.streams con una URL de transmisión por fila, es decir, 8 transmisiones se ejecutarán con tamaño de lote 8. |
A continuación se muestran ejemplos de código para usar cada tipo de fuente:
Fuentes de predicción
Ejecute inferencia en un archivo de imagen.
Ejecute inferencia en el contenido actual de la pantalla como captura de pantalla.
Ejecute inferencia en una imagen o video alojados remotamente a través de URL.
Ejecute inferencia en una imagen abierta con la Biblioteca de Imágenes de Python (PIL).
Ejecute inferencia en una imagen leída con OpenCV.
Ejecute inferencia en una imagen representada como un array de numpy.
import numpy as np
from ultralytics import YOLO
# Cargar el modelo YOLOv8n preentrenado
model = YOLO('yolov8n.pt')
# Crear un array aleatorio de numpy con forma HWC (640, 640, 3) con valores en rango [0, 255] y tipo uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')
# Ejecutar inferencia en la fuente
results = model(source) # lista de objetos Results
Ejecute inferencia en una imagen representada como un tensor de PyTorch. ```python import torch from ultralytics import YOLO
Cargar el modelo YOLOv8n preentrenado
model = YOLO('yolov8n.pt')
Crear un tensor aleatorio de torch con forma BCHW (1, 3, 640, 640) con valores en rango [0, 1] y tipo float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)
Ejecutar inferencia en la fuente
results = model(source) # lista de objetos Results