Saltar al contenido

PyTorch Cubo

馃摎 Esta gu铆a explica c贸mo cargar YOLOv5 馃殌 desde PyTorch Hub en https://pytorch.org/hub/ultralytics_yolov5.

Antes de empezar

Instalar requirements.txt en un Python>=3.8.0 incluyendo PyTorch>=1.8. Los modelos y conjuntos de datos se descargan autom谩ticamente de la 煤ltimaversi贸n de YOLOv5 .

pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txt

馃挕 ProTip: Clonar https://github.com/ultralytics / yolov5 no es necesario 馃槂

Carga YOLOv5 con PyTorch Hub

Ejemplo sencillo

Este ejemplo carga un modelo YOLOv5s preentrenado de PyTorch Hub como model y pasa una imagen para su inferencia. 'yolov5s' es el modelo m谩s ligero y r谩pido de YOLOv5 . Para m谩s detalles sobre todos los modelos disponibles, consulta la p谩gina L脡EME.

import torch

# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")

# Image
im = "https://ultralytics.com/images/zidane.jpg"

# Inference
results = model(im)

results.pandas().xyxy[0]
#      xmin    ymin    xmax   ymax  confidence  class    name
# 0  749.50   43.50  1148.0  704.5    0.874023      0  person
# 1  433.50  433.50   517.5  714.5    0.687988     27     tie
# 2  114.75  195.75  1095.0  708.0    0.624512      0  person
# 3  986.00  304.00  1028.0  420.0    0.286865     27     tie

Ejemplo detallado

Este ejemplo muestra inferencia por lotes con PIL y OpenCV fuentes de las im谩genes. results puede ser impreso a la consola, guardado a runs/hub, mostr贸 a la pantalla en entornos compatibles, y devuelto como tensores o pandas marcos de datos.

import cv2
import torch
from PIL import Image

# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")

# Images
for f in "zidane.jpg", "bus.jpg":
    torch.hub.download_url_to_file("https://ultralytics.com/images/" + f, f)  # download 2 images
im1 = Image.open("zidane.jpg")  # PIL image
im2 = cv2.imread("bus.jpg")[..., ::-1]  # OpenCV image (BGR to RGB)

# Inference
results = model([im1, im2], size=640)  # batch of images

# Results
results.print()
results.save()  # or .show()

results.xyxy[0]  # im1 predictions (tensor)
results.pandas().xyxy[0]  # im1 predictions (pandas)
#      xmin    ymin    xmax   ymax  confidence  class    name
# 0  749.50   43.50  1148.0  704.5    0.874023      0  person
# 1  433.50  433.50   517.5  714.5    0.687988     27     tie
# 2  114.75  195.75  1095.0  708.0    0.624512      0  person
# 3  986.00  304.00  1028.0  420.0    0.286865     27     tie

YOLO resultados de la inferencia sobre zidane.jpg YOLO resultados de inferencia en bus.jpg

Para conocer todas las opciones de inferencia, consulta YOLOv5 AutoShape() adelante m茅todo.

Ajustes de inferencia

YOLOv5 Los modelos contienen varios atributos de inferencia, como el umbral de confianza, el umbral de IoU, etc., que pueden establecerse mediante:

model.conf = 0.25  # NMS confidence threshold
iou = 0.45  # NMS IoU threshold
agnostic = False  # NMS class-agnostic
multi_label = False  # NMS multiple labels per box
classes = None  # (optional list) filter by class, i.e. = [0, 15, 16] for COCO persons, cats and dogs
max_det = 1000  # maximum number of detections per image
amp = False  # Automatic Mixed Precision (AMP) inference

results = model(im, size=320)  # custom inference size

Dispositivo

Los modelos pueden transferirse a cualquier dispositivo despu茅s de su creaci贸n:

model.cpu()  # CPU
model.cuda()  # GPU
model.to(device)  # i.e. device=torch.device(0)

Los modelos tambi茅n pueden crearse directamente en cualquier device:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu")  # load on CPU

馃挕 ProTip: Las im谩genes de entrada se transfieren autom谩ticamente al dispositivo modelo correcto antes de la inferencia.

Silenciar salidas

Los modelos pueden cargarse silenciosamente con _verbose=False:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False)  # load silently

Canales de entrada

Para cargar un modelo YOLOv5s preentrenado con 4 canales de entrada en lugar de los 3 predeterminados:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)

En este caso, el modelo estar谩 compuesto por pesos preentrenados, excepto la primera capa de entrada, que ya no tendr谩 la misma forma que la capa de entrada preentrenada. La capa de entrada seguir谩 inicializada con pesos aleatorios.

N煤mero de clases

Para cargar un modelo YOLOv5s preentrenado con 10 clases de salida en lugar de las 80 por defecto:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)

En este caso, el modelo estar谩 compuesto por pesos preentrenados, excepto las capas de salida, que ya no tendr谩n la misma forma que las capas de salida preentrenadas. Las capas de salida seguir谩n inicializadas por pesos aleatorios.

Recarga forzada

Si tienes problemas con los pasos anteriores, configura force_reload=True puede ayudar descartando la cach茅 existente y forzando una nueva descarga de la 煤ltima versi贸n de YOLOv5 desde PyTorch Hub.

model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True)  # force reload

Inferencia de capturas de pantalla

Para ejecutar la inferencia en la pantalla de tu escritorio:

import torch
from PIL import ImageGrab

# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")

# Image
im = ImageGrab.grab()  # take a screenshot

# Inference
results = model(im)

Inferencia Multi-GPU

YOLOv5 Los modelos pueden cargarse en varias GPU en paralelo con inferencia enhebrada:

import threading

import torch


def run(model, im):
    """Performs inference on an image using a given model and saves the output; model must support `.save()` method."""
    results = model(im)
    results.save()


# Models
model0 = torch.hub.load("ultralytics/yolov5", "yolov5s", device=0)
model1 = torch.hub.load("ultralytics/yolov5", "yolov5s", device=1)

# Inference
threading.Thread(target=run, args=[model0, "https://ultralytics.com/images/zidane.jpg"], daemon=True).start()
threading.Thread(target=run, args=[model1, "https://ultralytics.com/images/bus.jpg"], daemon=True).start()

Formaci贸n

Para cargar un modelo YOLOv5 para el entrenamiento en lugar de para la inferencia, establece autoshape=False. Para cargar un modelo con pesos inicializados aleatoriamente (para entrenar desde cero) utiliza pretrained=False. En este caso, debes proporcionar tu propio gui贸n de formaci贸n. Tambi茅n puedes consultar nuestro YOLOv5 Tutorial Entrenar datos personalizados para el entrenamiento del modelo.

import torch

model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False)  # load pretrained
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False, pretrained=False)  # load scratch

Resultados Base64

Para utilizar con servicios API. Consulta https://github.com/ultralytics/yolov5/pull/2291 y el ejemplo de API REST de Flask para m谩s detalles.

results = model(im)  # inference

results.ims  # array of original images (as np array) passed to model for inference
results.render()  # updates results.ims with boxes and labels
for im in results.ims:
    buffered = BytesIO()
    im_base64 = Image.fromarray(im)
    im_base64.save(buffered, format="JPEG")
    print(base64.b64encode(buffered.getvalue()).decode("utf-8"))  # base64 encoded image with results

Resultados recortados

Los resultados pueden devolverse y guardarse como cultivos de detecci贸n:

results = model(im)  # inference
crops = results.crop(save=True)  # cropped detections dictionary

Resultados Pandas

Los resultados pueden devolverse como Pandas DataFrames:

results = model(im)  # inference
results.pandas().xyxy[0]  # Pandas DataFrame
Salida de pandas (haz clic para ampliar)
print(results.pandas().xyxy[0])
#      xmin    ymin    xmax   ymax  confidence  class    name
# 0  749.50   43.50  1148.0  704.5    0.874023      0  person
# 1  433.50  433.50   517.5  714.5    0.687988     27     tie
# 2  114.75  195.75  1095.0  708.0    0.624512      0  person
# 3  986.00  304.00  1028.0  420.0    0.286865     27     tie

Resultados ordenados

Los resultados se pueden ordenar por columnas, es decir, ordenar la detecci贸n de d铆gitos de matr铆cula de izquierda a derecha (eje x):

results = model(im)  # inference
results.pandas().xyxy[0].sort_values("xmin")  # sorted left-right

Resultados recortados

Los resultados pueden devolverse y guardarse como cultivos de detecci贸n:

results = model(im)  # inference
crops = results.crop(save=True)  # cropped detections dictionary

Resultados JSON

Los resultados pueden devolverse en formato JSON una vez convertidos a .pandas() utilizando la funci贸n .to_json() m茅todo. El formato JSON puede modificarse utilizando la funci贸n orient argumento. Ver pandas .to_json() documentaci贸n para m谩s detalles.

results = model(ims)  # inference
results.pandas().xyxy[0].to_json(orient="records")  # JSON img1 predictions
Salida JSON (haz clic para ampliar)
[
    {
        "xmin": 749.5,
        "ymin": 43.5,
        "xmax": 1148.0,
        "ymax": 704.5,
        "confidence": 0.8740234375,
        "class": 0,
        "name": "person"
    },
    {
        "xmin": 433.5,
        "ymin": 433.5,
        "xmax": 517.5,
        "ymax": 714.5,
        "confidence": 0.6879882812,
        "class": 27,
        "name": "tie"
    },
    {
        "xmin": 115.25,
        "ymin": 195.75,
        "xmax": 1096.0,
        "ymax": 708.0,
        "confidence": 0.6254882812,
        "class": 0,
        "name": "person"
    },
    {
        "xmin": 986.0,
        "ymin": 304.0,
        "xmax": 1028.0,
        "ymax": 420.0,
        "confidence": 0.2873535156,
        "class": 27,
        "name": "tie"
    }
]

Modelos a medida

Este ejemplo carga una clase 20 personalizada COV-modelo YOLOv5s entrenado 'best.pt' con PyTorch Hub.

import torch

model = torch.hub.load("ultralytics/yolov5", "custom", path="path/to/best.pt")  # local model
model = torch.hub.load("path/to/yolov5", "custom", path="path/to/best.pt", source="local")  # local repo

TensorRT, ONNX y OpenVINO Modelos

PyTorch Hub admite la inferencia en la mayor铆a de los formatos de exportaci贸n de YOLOv5 , incluidos los modelos entrenados a medida. Consulta el tutorial de exportaci贸n de TFLite, ONNX, CoreML, TensorRT para obtener m谩s detalles sobre la exportaci贸n de modelos.

馃挕 ProTip: TensorRT puede ser hasta 2-5 veces m谩s r谩pido que PyTorch en pruebas de GPU 馃挕 ProTip: ONNX y OpenVINO puede ser hasta 2-3 veces m谩s r谩pido que PyTorch en pruebas de CPU

import torch

model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.pt")  # PyTorch
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.torchscript")  # TorchScript
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.onnx")  # ONNX
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s_openvino_model/")  # OpenVINO
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.engine")  # TensorRT
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.mlmodel")  # CoreML (macOS-only)
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.tflite")  # TFLite
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s_paddle_model/")  # PaddlePaddle

Entornos compatibles

Ultralytics proporciona una serie de entornos listos para usar, cada uno de ellos preinstalado con dependencias esenciales como CUDA, CUDNN, Pythony PyTorchpara poner en marcha tus proyectos.

Estado del proyecto

YOLOv5 CI

Este distintivo indica que todas las pruebas de Integraci贸n Continua (IC) de las Acciones de GitHub deYOLOv5 se han superado con 茅xito. Estas pruebas de IC comprueban rigurosamente la funcionalidad y el rendimiento de YOLOv5 en varios aspectos clave: formaci贸n, validaci贸n, inferencia, exportaci贸n y puntos de referencia. Garantizan un funcionamiento coherente y fiable en macOS, Windows y Ubuntu, con pruebas realizadas cada 24 horas y con cada nueva confirmaci贸n.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (7), Burhan-Q (1)

Comentarios