YOLOv5'i PyTorch Hub'dan Yükleme
📚 Bu kılavuz, YOLOv5'i 🚀 PyTorch Hub üzerinden https://pytorch.org/hub/ultralytics_yolov5 adresinden nasıl yükleyeceğini açıklar.
Başlamadan Önce
Install requirements.txt in a Python>=3.8.0 environment, including PyTorch>=1.8. Models and datasets download automatically from the latest YOLOv5 release.
pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txtultralytics/yolov5 reposunu klonlaman gerekmiyor; PyTorch Hub kodu otomatik olarak çeker.
YOLOv5'i PyTorch Hub ile Yükle
Basit Örnek
Bu örnek, önceden eğitilmiş bir YOLOv5s modelini PyTorch Hub'dan model olarak yükler ve çıkarım (inference) için bir görüntü gönderir. 'yolov5s', en hafif ve en hızlı YOLOv5 modelidir. Mevcut tüm modellerle ilgili ayrıntılar için lütfen README dosyasına bak.
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 tieAyrıntılı Örnek
Bu örnek, PIL ve OpenCV görüntü kaynaklarıyla toplu çıkarımı (batched inference) gösterir. results konsola yazdırılabilir, runs/hub dizinine kaydedilebilir, desteklenen ortamlarda ekranda gösterilebilir ve tensors veya pandas veri çerçeveleri olarak döndürülebilir.
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
Tüm çıkarım seçenekleri için YOLOv5 AutoShape() ileri yöntemine bak.
Çıkarım Ayarları
YOLOv5 modelleri, aşağıdakilerle ayarlanabilen güven eşiği (confidence threshold), IoU eşiği gibi çeşitli çıkarım öznitelikleri içerir:
model.conf = 0.25 # NMS confidence threshold
model.iou = 0.45 # NMS IoU threshold
model.agnostic = False # NMS class-agnostic
model.multi_label = False # NMS multiple labels per box
model.classes = None # (optional list) filter by class, i.e. = [0, 15, 16] for COCO persons, cats and dogs
model.max_det = 1000 # maximum number of detections per image
model.amp = False # Automatic Mixed Precision (AMP) inference
results = model(im, size=320) # custom inference sizeCihaz (Device)
Modeller oluşturulduktan sonra herhangi bir cihaza aktarılabilir:
model.cpu() # CPU
model.cuda() # GPU
model.to(device) # i.e. device=torch.device(0)Modeller ayrıca doğrudan herhangi bir device üzerinde oluşturulabilir:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu") # load on CPUGiriş görüntüleri, çıkarımdan önce otomatik olarak doğru model cihazına aktarılır.
Çıktıları Sessize Al
Modeller _verbose=False ile sessizce yüklenebilir:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False) # load silentlyGiriş Kanalları
Varsayılan 3 yerine 4 giriş kanallı, önceden eğitilmiş bir YOLOv5s modeli yüklemek için:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)Bu durumda model, artık önceden eğitilmiş giriş katmanıyla aynı şekle sahip olmayan ilk giriş katmanı hariç önceden eğitilmiş ağırlıklardan oluşacaktır. Giriş katmanı rastgele ağırlıklarla başlatılmış olarak kalacaktır.
Sınıf Sayısı
Varsayılan 80 yerine 10 çıkış sınıfına sahip, önceden eğitilmiş bir YOLOv5s modeli yüklemek için:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)Bu durumda model, artık önceden eğitilmiş çıkış katmanlarıyla aynı şekle sahip olmayan çıkış katmanları hariç önceden eğitilmiş ağırlıklardan oluşacaktır. Çıkış katmanları rastgele ağırlıklarla başlatılmış olarak kalacaktır.
Zorunlu Yeniden Yükleme
Yukarıdaki adımlarla ilgili sorun yaşarsan, force_reload=True ayarını yapmak mevcut önbelleği atarak PyTorch Hub'dan en son YOLOv5 sürümünün yeniden indirilmesini zorlayabilir. Önbelleğe alınan kopyalar ~/.cache/torch/hub dizininde bulunur; bu klasörü silmek aynı etkiyi yaratır.
model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True) # force reloadEkran Görüntüsü ile Çıkarım
Masaüstü ekranında çıkarım çalıştırmak için:
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)Çoklu GPU ile Çıkarım
YOLOv5 modelleri, iş parçacıklı çıkarım ile birden fazla GPU'ya paralel olarak yüklenebilir:
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()Eğitim
Çıkarım yerine eğitim için bir YOLOv5 modeli yüklemek istersen autoshape=False olarak ayarla. Rastgele başlatılmış ağırlıklarla bir model yüklemek için (sıfırdan eğitmek üzere) pretrained=False kullan. Bu durumda kendi eğitim betiğini sağlamalısın. Alternatif olarak, model eğitimi için YOLOv5 Özel Veri ile Eğitim Eğitimimize bak.
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 scratchBase64 Sonuçları
API servisleriyle kullanım için. Ayrıntılar için Flask REST API örneğine bak.
import base64
from io import BytesIO
from PIL import Image
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 resultsKırpılmış Sonuçlar
Sonuçlar, algılama kırpmaları (detection crops) olarak döndürülebilir ve kaydedilebilir:
results = model(im) # inference
crops = results.crop(save=True) # cropped detections dictionaryPandas Sonuçları
Sonuçlar Pandas DataFrames olarak döndürülebilir:
results = model(im) # inference
results.pandas().xyxy[0] # Pandas DataFramePandas Output (click to expand)
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 tieSıralanmış Sonuçlar
Sonuçlar sütuna göre sıralanabilir, örneğin plaka basamak algılamasını soldan sağa (x-ekseni) sıralamak için:
results = model(im) # inference
results.pandas().xyxy[0].sort_values("xmin") # sorted left-rightJSON Sonuçları
Sonuçlar, .pandas() veri çerçevelerine dönüştürüldükten sonra .to_json() yöntemi kullanılarak JSON formatında döndürülebilir. JSON formatı orient argümanı kullanılarak değiştirilebilir. Ayrıntılar için pandas .to_json() dokümantasyonuna bak.
results = model(ims) # inference
results.pandas().xyxy[0].to_json(orient="records") # JSON img1 predictionsJSON Output (click to expand)
[
{
"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"
}
]Özel Modeller
Bu örnek, PyTorch Hub ile 20 sınıflı, VOC üzerinde eğitilmiş özel bir YOLOv5s modeli olan 'best.pt' dosyasını yükler.
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 repoTensorRT, ONNX ve OpenVINO Modelleri
PyTorch Hub, özel eğitilmiş modeller dahil olmak üzere çoğu YOLOv5 dışa aktarım formatında çıkarımı destekler. Modelleri dışa aktarma hakkında ayrıntılar için TFLite, ONNX, CoreML, TensorRT Dışa Aktarım eğitimine bak.
- TensorRT, GPU karşılaştırmalarında PyTorch'tan 2-5 kat daha hızlı olabilir.
- ONNX ve OpenVINO, CPU karşılaştırmalarında PyTorch'tan 2-3 kat daha hızlı olabilir.
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/") # PaddlePaddleDesteklenen Ortamlar
Ultralytics, projelerine hızlı bir başlangıç yapman için CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklü olduğu, kullanıma hazır çeşitli ortamlar sunar.
- Ücretsiz GPU Not defterleri:
- Google Cloud: GCP Başlangıç Kılavuzu
- Amazon: AWS Başlangıç Kılavuzu
- Azure: AzureML Başlangıç Kılavuzu
- Docker: Docker Başlangıç Kılavuzu
Proje Durumu
Bu rozet, tüm YOLOv5 GitHub Actions Sürekli Entegrasyon (CI) testlerinin başarıyla geçtiğini gösterir. Bu CI testleri, YOLOv5'in işlevselliğini ve performansını çeşitli temel açılardan titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir bir çalışma sağlarlar; testler her 24 saatte bir ve her yeni commit'te gerçekleştirilir.