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.
💡 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
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:
Modellen kunnen ook direct op elke device
:
💡 ProTip: Invoerafbeeldingen worden automatisch overgebracht naar het juiste modelapparaat vóór de inferentie.
Stilte Uitgangen
Modellen kunnen geruisloos worden geladen met _verbose=False
:
Ingangskanalen
Om een voorgetraind YOLOv5s model te laden met 4 invoerkanalen in plaats van de standaard 3:
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:
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.
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:
Panda's Resultaten
Resultaten kunnen worden geretourneerd als Pandas DataFrames:
Pandas uitvoer (klik om uit te breiden)
Gesorteerde resultaten
Resultaten kunnen gesorteerd worden op kolom, d.w.z. om kentekenherkenning van links naar rechts te sorteren (x-as):
Resultaten omkaderd
Resultaten kunnen worden teruggestuurd en opgeslagen als detectiegewassen:
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.
- Gratis GPU notitieboeken:
- Google Cloud: GCP snelstartgids
- Amazon: AWS Snelstartgids
- Azure: AzureML snelstartgids
- Docker: Docker snelstartgids
Projectstatus
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.