PyTorch Hub'dan YOLOv5 Yükleme#
Bu kılavuz, PyTorch için önceden eğitilmiş model deposu olan PyTorch Hub üzerinden YOLOv5 modelinin nasıl yükleneceğini açıklar.
Başlamadan Önce#
requirements.txt dosyasını, PyTorch>=1.8 dahil olmak üzere Python>=3.8.0 yüklü bir ortama kur. Modeller ve veri kümeleri, en son YOLOv5 sürümünden otomatik olarak indirilir.
pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txtultralytics/yolov5 deposunu klonlaman gerekmez — PyTorch Hub kodu otomatik olarak alır.
YOLOv5'i PyTorch Hub ile Yükleme#
Basit Örnek#
Bu örnek, PyTorch Hub üzerinden önceden eğitilmiş bir YOLOv5s modelini model olarak yükler ve çıkarım için bir görüntü aktarır. 'yolov5s', YOLOv5 önceden eğitilmiş kontrol noktaları arasındaki küçük ve hızlı modellerden biridir.
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 güven sınıf ad
# 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, YOLOv5 AutoShape() forward yönteminin kabul ettiği girdi türlerinden ikisi olan PIL ve OpenCV görüntü kaynaklarıyla toplu çıkarımı gösterir. results konsola yazdırılabilir, runs/hub konumuna kaydedilebilir, desteklenen ortamlarda ekranda gösterilebilir ve tensörler ya da pandas DataFrame'leri 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(f"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
Çıkarım Ayarları#
YOLOv5 modelleri, aşağıdaki gibi ayarlanabilen güven eşiği ve IoU eşiği gibi çeşitli çıkarım öznitelikleri içerir:
model.conf = 0.25 # NMS güven eşiği
model.iou = 0.45 # NMS IoU eşiği
model.agnostic = False # NMS sınıftan bağımsız
model.multi_label = False # NMS kutu başına birden fazla etiket
model.classes = None # (isteğe bağlı liste) sınıfa göre filtrele; ör. COCO'daki kişiler, kediler ve köpekler için = [0, 15, 16]
model.max_det = 1000 # görüntü başına en fazla tespit sayısı
model.amp = False # Otomatik Karma Hassasiyetli (AMP) çıkarım
results = model(im, size=320) # özel çıkarım boyutuAygıt#
Modeller oluşturulduktan sonra herhangi bir aygıta aktarılabilir:
model.cpu() # CPU
model.cuda() # GPU
model.to(device) # örn. device=torch.device(0)Modeller doğrudan herhangi bir device üzerinde de oluşturulabilir:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu") # CPU'da yükleGirdi görüntüleri çıkarımdan önce otomatik olarak doğru model aygıtına aktarılır.
Çıktıları Sessize Alma#
Modeller _verbose=False ile sessizce yüklenebilir:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False) # sessizce yükleGirdi Kanalları#
Varsayılan 3 kanal yerine 4 girdi kanalına sahip önceden eğitilmiş bir YOLOv5s modelini yüklemek için:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)Bu durumda model, önceden eğitilmiş giriş katmanıyla artık aynı şekle sahip olmayan ilk giriş katmanı hariç önceden eğitilmiş ağırlıklardan oluşur. Giriş katmanı rastgele ağırlıklarla başlatılmış olarak kalır.
Sınıf Sayısı#
Varsayılan 80 yerine 10 çıktı sınıfına sahip önceden eğitilmiş bir YOLOv5s modelini yüklemek için:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)Bu durumda model, önceden eğitilmiş çıkış katmanlarıyla artık aynı şekle sahip olmayan çıkış katmanları hariç önceden eğitilmiş ağırlıklardan oluşur. Çıkış katmanları rastgele ağırlıklarla başlatılmış olarak kalır.
Yeniden Yüklemeyi Zorla#
Yukarıdaki adımlarda sorun yaşarsan force_reload=True ayarı mevcut önbelleği silip PyTorch Hub'dan YOLOv5'in en son sürümünün yeniden indirilmesini zorlayarak yardımcı olabilir. Önbelleğe alınmış kopyalar ~/.cache/torch/hub içinde bulunur; bu klasörü silmek aynı sonucu verir.
model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True) # yeniden yüklemeyi zorlaEkran Görüntüsünde Çıkarım#
Masaüstü ekranında çıkarım yapmak için:
import torch
from PIL import ImageGrab
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Image
im = ImageGrab.grab() # ekran görüntüsü al
# Inference
results = model(im)Çoklu GPU Çıkarımı#
YOLOv5 modelleri, iş parçacıklı çıkarım kullanılarak birden fazla GPU'ya paralel biçimde 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#
YOLOv5 modelini çıkarım yerine eğitim için yüklemek üzere autoshape=False değerini ayarla. Rastgele başlatılmış ağırlıklara sahip bir modeli (sıfırdan eğitmek için) yüklemek üzere pretrained=False kullan. Bu durumda kendi eğitim betiğini sağlamalı veya YOLOv5 Özel Veriyle Eğitim Öğreticisi'nde gösterildiği gibi train.py ile eğitim yapmalısın.
import torch
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False) # önceden eğitilmiş modeli yükle
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False, pretrained=False) # sıfırdan yükleBase64 Sonuçları#
Base64 kodlu sonuçlar, YOLOv5 Flask REST API örneğinde olduğu gibi API hizmetleri için kullanışlıdır.
import base64
from io import BytesIO
from PIL import Image
results = model(im) # inference
results.ims # çıkarım için modele iletilen özgün görüntülerin dizisi (np dizisi olarak)
results.render() # results.ims öğesini kutular ve etiketlerle günceller
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")) # sonuçları içeren Base64 kodlu görüntüKırpılmış Sonuçlar#
Sonuçlar tespit kırpmaları olarak döndürülebilir ve kaydedilebilir:
results = model(im) # inference
crops = results.crop(save=True) # kırpılmış tespitler sözlüğüPandas Sonuçları#
Sonuçlar Pandas DataFrame'leri olarak döndürülebilir:
results = model(im) # inference
results.pandas().xyxy[0] # Pandas DataFramePandas çıktısı (genişletmek için tıkla)
print(results.pandas().xyxy[0])
# xmin ymin xmax ymax güven sınıf ad
# 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 rakamı tespitlerini soldan sağa (x ekseni) sıralamak için:
results = model(im) # inference
results.pandas().xyxy[0].sort_values("xmin") # soldan sağa sıralanmışJSON Sonuçları#
Sonuçlar, .to_json() yöntemiyle .pandas() DataFrame'lerine dönüştürüldükten sonra JSON biçiminde döndürülebilir. JSON biçimi orient bağımsız değişkeni kullanılarak değiştirilebilir. Ayrıntılar için pandas .to_json() belgelerine bak.
results = model(im) # inference
results.pandas().xyxy[0].to_json(orient="records") # JSON img1 tahminleriJSON çıktısı (genişletmek için tıkla)
[
{
"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 özel olarak eğitilmiş 20 sınıflı VOC YOLOv5s modelini 'best.pt' yükler.
import torch
model = torch.hub.load("ultralytics/yolov5", "custom", path="path/to/best.pt") # yerel model
model = torch.hub.load("path/to/yolov5", "custom", path="path/to/best.pt", source="local") # yerel depoTensorRT, ONNX ve OpenVINO Modelleri#
PyTorch Hub, özel olarak eğitilmiş modeller dâhil çoğu YOLOv5 dışa aktarma biçiminde çıkarımı destekler.
- TensorRT, GPU kıyaslamalarında PyTorch'tan 2-5× daha hızlı olabilir.
- ONNX ve OpenVINO, CPU kıyaslamalarında PyTorch'tan 2-3× 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.mlpackage") # CoreML (yalnızca macOS)
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ıca başlaman için CUDA, cuDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklendiği, kullanıma hazır çeşitli ortamlar sunar.
- Ücretsiz GPU Not Defterleri:
- Google Cloud: GCP Hızlı Başlangıç Kılavuzu
- Amazon: AWS Hızlı Başlangıç Kılavuzu
- Azure: AzureML Hızlı Başlangıç Kılavuzu
- Docker: Docker Hızlı 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ğitim, doğrulama, çıkarım, dışa aktarma ve karşılaştırmalı testler gibi temel alanlarda titizlikle denetler. Testler her 24 saatte bir ve her yeni gönderimde gerçekleştirilerek macOS, Windows ve Ubuntu'da tutarlı ve güvenilir çalışma sağlanır.
Sık Sorulan Sorular#
Hayır.
torch.hub.load("ultralytics/yolov5", ...)ilk kullanımda kodu~/.cache/torch/hubkonumuna ve ağırlıkları indirir. Yalnızcarequirements.txtiçindeki paketlerin yüklenmesi gerekir.Kontrol noktası yolunu belirterek
customgiriş noktasını kullan:torch.hub.load("ultralytics/yolov5", "custom", path="runs/train/exp/weights/best.pt"). Ağ erişimi olmadan yüklemek içinsource="local"ve yerel depo yolunu ekle.Evet. Dışa aktarılan dosyayı aynı
customyükleyicisine ver; YOLOv5, uzantıya göre eşleşen arka ucu seçer. Örneğinyolov5s.onnx,yolov5s.engineveyayolov5s_openvino_model/.Önbelleğe alınan depoyu silip en son kodu almak için
force_reload=Truedeğerini ilet veya~/.cache/torch/huböğesini elle sil. Bu işlem yeni YOLOv5 sürümlerini de alır.results.xyxy[0],[x1, y1, x2, y2, confidence, class]satırlarından oluşan bir tensör döndürür;results.pandas().xyxy[0], sınıf adlarını içeren bir DataFrame döndürür ve bu DataFrame üzerinde.to_json(orient="records")kullanmak JSON üretir.
Yorumlar
Bir soru sor, sonuçlarını paylaş veya başka birine yardım et.