PyTorch Hub
📚 Ce guide explique comment charger YOLOv5 🚀 à partir de PyTorch Hub à https://pytorch.org/hub/ultralytics_yolov5.
Avant de commencer
Installer le fichier requirements.txt dans un Python>=3.8.0 y compris PyTorch>=1.8. Les modèles et les ensembles de données sont téléchargés automatiquement à partir de la dernièreversion de YOLOv5 .
💡 ProTip : Le clonage de https://github.com/ultralytics / yolov5 n'est pas nécessaire 😃
Charge YOLOv5 avec PyTorch Hub
Exemple simple
Cet exemple charge un modèle YOLOv5s pré-entraîné à partir de PyTorch Hub en tant que model
et transmet une image pour inférence. 'yolov5s'
est le modèle le plus léger et le plus rapide de YOLOv5 . Pour plus d'informations sur tous les modèles disponibles, veuillez consulter le site LISEZ-MOI.
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
Exemple détaillé
Cet exemple montre inférence par lots avec LIP et OpenCV sources d'images. results
peut être imprimé à la console, sauvegardé à runs/hub
, a montré à l'écran sur les environnements pris en charge, et renvoyée en tant que tenseurs ou pandas les cadres de données.
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
Pour toutes les options d'inférence, voir YOLOv5 AutoShape()
avant méthode.
Paramètres d'inférence
YOLOv5 contiennent divers attributs d'inférence tels que le seuil de confiance, le seuil de l'indice d'intégrité, etc. qui peuvent être définis par l'utilisateur :
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
Dispositif
Les modèles peuvent être transférés sur n'importe quel appareil après leur création :
Les modèles peuvent également être créés directement sur n'importe quel device
:
💡 ProTip : Les images d'entrée sont automatiquement transférées vers l'appareil modèle correct avant l'inférence.
Sorties de silence
Les modèles peuvent être chargés silencieusement avec _verbose=False
:
Canaux d'entrée
Pour charger un modèle YOLOv5s pré-entraîné avec 4 canaux d'entrée au lieu des 3 par défaut :
Dans ce cas, le modèle sera composé de poids pré-entraînés à l'exception de la toute première couche d'entrée, qui n'a plus la même forme que la couche d'entrée pré-entraînée. La couche d'entrée restera initialisée par des poids aléatoires.
Nombre de classes
Pour charger un modèle YOLOv5s pré-entraîné avec 10 classes de sortie au lieu des 80 par défaut :
Dans ce cas, le modèle sera composé de poids pré-entraînés , à l'exception des couches de sortie, qui n'ont plus la même forme que les couches de sortie pré-entraînées. Les couches de sortie resteront initialisées par des poids aléatoires.
Force Reload
Si vous rencontrez des problèmes lors des étapes ci-dessus, vous pouvez régler le paramètre force_reload=True
peut aider en supprimant le cache existant et en forçant un nouveau téléchargement de la dernière version de YOLOv5 à partir de PyTorch Hub.
Inférence de capture d'écran
Pour exécuter l'inférence sur l'écran de votre bureau :
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)
Inférence multi-GPU
YOLOv5 peuvent être chargés sur plusieurs GPU en parallèle avec une inférence threadée :
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()
Formation
Pour charger un modèle YOLOv5 pour l'entraînement plutôt que pour l'inférence, définissez autoshape=False
. Pour charger un modèle avec des poids initialisés de manière aléatoire (pour l'entraîner à partir de zéro), utiliser pretrained=False
. Dans ce cas, vous devez fournir votre propre script de formation. Vous pouvez également consulter notre YOLOv5 Didacticiel sur les données personnalisées pour l'apprentissage du modèle.
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
Résultats Base64
À utiliser avec les services API. Voir https://github.com/ultralytics / yolov5/pull/2291 et l'exemple d' API REST de Flask pour plus de détails.
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
Résultats du recadrage
Les résultats peuvent être renvoyés et enregistrés en tant que cultures de détection :
Résultats pour les pandas
Les résultats peuvent être renvoyés sous forme de Pandas DataFrames:
Sortie des pandas (cliquer pour agrandir)
Résultats triés
Les résultats peuvent être triés par colonne, par exemple pour trier la détection des chiffres de la plaque d'immatriculation de gauche à droite (axe des x) :
Résultats encadrés
Les résultats peuvent être renvoyés et enregistrés en tant que cultures de détection :
Résultats JSON
Les résultats peuvent être renvoyés au format JSON une fois convertis au format .pandas()
à l'aide de l'outil .to_json()
méthode. Le format JSON peut être modifié à l'aide de la méthode orient
argument. Voir pandas .to_json()
la documentation pour plus de détails.
results = model(ims) # inference
results.pandas().xyxy[0].to_json(orient="records") # JSON img1 predictions
Sortie JSON (cliquer pour développer)
[
{
"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"
}
]
Modèles personnalisés
Cet exemple charge une classe 20 personnalisée COV-Modèle YOLOv5s entraîné 'best.pt'
avec 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
TensorRTModèles ONNX et OpenVINO
PyTorch Hub prend en charge l'inférence sur la plupart des formats d'exportation YOLOv5 , y compris les modèles formés personnalisés. Voir le tutoriel d'exportation de TFLite, ONNX, CoreML, TensorRT pour plus de détails sur l'exportation de modèles.
💡 ProTip : TensorRT peut être jusqu'à 2-5X plus rapide que PyTorch sur les GPU benchmarks 💡 ProTip : ONNX et OpenVINO peut être jusqu'à 2 à 3 fois plus rapide que PyTorch sur les CPU repères
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
Environnements pris en charge
Ultralytics fournit une série d'environnements prêts à l'emploi, chacun étant préinstallé avec des dépendances essentielles telles que CUDACUDNN, Pythonet PyTorchpour lancer vos projets.
- Carnets de notes gratuits GPU:
- Google Cloud: Guide de démarrage rapide GCP
- Amazon: Guide de démarrage rapide AWS
- Azure: Guide de démarrage rapide AzureML
- Docker: Guide de démarrage rapide de Docker
État d'avancement du projet
Ce badge indique que tous les tests d'intégration continue (CI) deYOLOv5 GitHub Actions ont été passés avec succès. Ces tests d'intégration continue vérifient rigoureusement la fonctionnalité et les performances de YOLOv5 sur différents aspects clés : formation, validation, inférence, exportation et tests de référence. Ils garantissent un fonctionnement cohérent et fiable sur macOS, Windows et Ubuntu, avec des tests effectués toutes les 24 heures et à chaque nouveau commit.