Overslaan naar inhoud

PyTorch Hub

📚 In deze handleiding wordt uitgelegd hoe je YOLOv5 🚀 kunt laden van PyTorch Hub op https://pytorch.org/hub/ultralytics_yolov5.

Voordat je begint

Installeer requirements.txt in een Python>=3.8.0 omgeving, inclusief PyTorch>=1.8. Modellen en datasets worden automatisch gedownload van de nieuwste YOLOv5 release.

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

💡 ProTip: Het klonen van https://github.com/ultralytics / yolov5 is niet nodig 😃

Belasting YOLOv5 met PyTorch Hub

Eenvoudig voorbeeld

Dit voorbeeld laadt een voorgetraind YOLOv5s-model van PyTorch Hub als model en geeft een afbeelding door voor inferentie. 'yolov5s' is het lichtste en snelste YOLOv5 model. Zie voor meer informatie over alle beschikbare modellen de README.

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

Gedetailleerd voorbeeld

Dit voorbeeld toont gebundelde inferentie met PIL en OpenCV beeldbronnen. results kunnen gedrukt naar console, opgeslagen naar runs/hub, toonde om te screenen op ondersteunde omgevingen en wordt geretourneerd als tensoren of panda's dataframes.

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 inferentieresultaten op zidane.jpg YOLO inferentieresultaten op bus.jpg

Voor alle inferentieopties zie YOLOv5 AutoShape() voorwaarts methode.

Inferentie-instellingen

YOLOv5 modellen bevatten verschillende inferentieattributen zoals vertrouwensdrempel, IoU-drempel, enz. die ingesteld kunnen worden door:

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

Apparaat

Modellen kunnen na het maken worden overgezet naar elk apparaat:

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

Modellen kunnen ook direct op elke device:

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

💡 ProTip: Invoerafbeeldingen worden automatisch overgebracht naar het juiste modelapparaat vóór de inferentie.

Stilte Uitgangen

Modellen kunnen geruisloos worden geladen met _verbose=False:

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

Ingangskanalen

Om een voorgetraind YOLOv5s model te laden met 4 invoerkanalen in plaats van de standaard 3:

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

In dit geval zal het model bestaan uit voorgetrainde gewichten , behalve de allereerste inputlaag, die niet langer dezelfde vorm heeft als de voorgetrainde inputlaag. De inputlaag blijft geïnitialiseerd door willekeurige gewichten.

Aantal klassen

Om een voorgetraind YOLOv5s model te laden met 10 uitvoerklassen in plaats van de standaard 80:

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

In dit geval zal het model bestaan uit voorgetrainde gewichten , behalve de uitvoerlagen, die niet langer dezelfde vorm hebben als de voorgetrainde uitvoerlagen. De uitvoerlagen blijven geïnitialiseerd door willekeurige gewichten.

Forceer herladen

Als je problemen ondervindt met de bovenstaande stappen, kun je het volgende instellen force_reload=True kan helpen door de bestaande cache te verwijderen en een nieuwe download van de nieuwste YOLOv5 versie van PyTorch Hub te forceren.

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

Screenshot Inferentie

Inferentie uitvoeren op je bureaubladscherm:

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)

Multi-GPU-inferentie

YOLOv5 Modellen kunnen parallel naar meerdere GPU's worden geladen met threaded inferentie:

import torch
import threading


def run(model, im):
    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()

Training

Om een YOLOv5 model te laden voor training in plaats van inferentie, stel je autoshape=False. Om een model te laden met willekeurig geïnitialiseerde gewichten (om vanaf nul te trainen) gebruik je pretrained=False. In dit geval moet je zelf voor een trainingsscript zorgen. Je kunt ook onze YOLOv5 Handleiding aangepaste gegevens trainen voor modeltraining.

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

Base64-resultaten

Voor gebruik met API services. Zie https://github.com/ultralytics/yolov5/pull/2291 en Flask REST API voorbeeld voor details.

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

Bijgesneden resultaten

Resultaten kunnen worden teruggestuurd en opgeslagen als detectiegewassen:

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

Panda's Resultaten

Resultaten kunnen worden geretourneerd als Pandas DataFrames:

results = model(im)  # inference
results.pandas().xyxy[0]  # Pandas DataFrame
Pandas uitvoer (klik om uit te breiden)
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

Gesorteerde resultaten

Resultaten kunnen gesorteerd worden op kolom, d.w.z. om kentekenherkenning van links naar rechts te sorteren (x-as):

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

Resultaten omkaderd

Resultaten kunnen worden teruggestuurd en opgeslagen als detectiegewassen:

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

JSON resultaten

Resultaten kunnen worden geretourneerd in JSON-indeling zodra ze zijn geconverteerd naar .pandas() dataframes met behulp van de .to_json() methode. Het JSON formaat kan worden aangepast met de orient argument. Zie pandas .to_json() documentatie voor meer informatie.

results = model(ims)  # inference
results.pandas().xyxy[0].to_json(orient="records")  # JSON img1 predictions
JSON uitvoer (klik om uit te breiden)
[
  {
    "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"
  }
]

Aangepaste modellen

Dit voorbeeld laadt een aangepaste 20-klasse VOCGetraind YOLOv5s-model 'best.pt' met 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 en OpenVINO Modellen

PyTorch Hub ondersteunt inferentie op de meeste YOLOv5 exportformaten, inclusief aangepaste getrainde modellen. Zie TFLite, ONNX, CoreML, TensorRT Export tutorial voor meer informatie over het exporteren van modellen.

ProTip: TensorRT kan tot 2-5X sneller zijn dan PyTorch bij GPU benchmarks ProTip: ONNX en OpenVINO kan tot 2-3X sneller zijn dan PyTorch in CPU-benchmarks

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

Ondersteunde omgevingen

Ultralytics biedt een reeks kant-en-klare omgevingen, elk vooraf geïnstalleerd met essentiële afhankelijkheden zoals CUDA, CUDNN, Python, en PyTorchom je projecten een kickstart te geven.

Projectstatus

YOLOv5 CI

Deze badge geeft aan dat alle YOLOv5 GitHub Actions Continuous Integration (CI) tests met succes zijn doorstaan. Deze CI-tests controleren rigoureus de functionaliteit en prestaties van YOLOv5 op verschillende belangrijke aspecten: training, validatie, inferentie, export en benchmarks. Ze zorgen voor een consistente en betrouwbare werking op macOS, Windows en Ubuntu, met tests die elke 24 uur en bij elke nieuwe commit worden uitgevoerd.



Gemaakt op 2023-11-12, Bijgewerkt op 2023-12-03
Auteurs: glenn-jocher (3)

Reacties