PyTorch Hub'dan YOLOv5 yükleme#
📚 Bu kılavuzda YOLOv5 🚀 modelinin PyTorch Hub'dan https://pytorch.org/hub/ultralytics_yolov5 nasıl yükleneceği açıklanmaktadır.
Başlamadan Önce#
requirements.txt dosyasını Python>=3.8.0 ortamına ve PyTorch>=1.8 dahil olmak üzere yükle. 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 klonlamak gerekli değildir — PyTorch Hub kodu otomatik olarak getirir.
YOLOv5'i PyTorch Hub ile yükleme#
Basit Örnek#
Bu örnek, PyTorch Hub'dan önceden eğitilmiş bir YOLOv5s modelini model olarak yükler ve çıkarım için bir görüntü gönderir. 'yolov5s', en hafif ve en hızlı YOLOv5 modelidir. Kullanılabilir tüm modeller hakkında ayrıntılar için 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ı gösterir. results konsola yazdırılabilir, runs/hub konumuna kaydedilebilir, desteklenen ortamlarda ekranda gösterilebilir ve tensor 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(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
Tüm çıkarım seçenekleri için YOLOv5 AutoShape() ileri method yöntemine bak.
Çıkarım Ayarları#
YOLOv5 modelleri güven eşiği, IoU eşiği gibi çeşitli çıkarım öznitelikleri içerir ve bunlar şu şekilde ayarlanabilir:
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#
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 doğrudan herhangi bir device üzerinde de oluşturulabilir:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu") # load on CPUGirdi görüntüleri, çıkarımdan önce otomatik olarak doğru model cihazına aktarılır.
Çıktıları Susturma#
Modeller _verbose=False ile sessizce yüklenebilir:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False) # load silentlyGirdi Kanalları#
Önceden eğitilmiş bir YOLOv5s modelini varsayılan 3 yerine 4 girdi kanalıyla yüklemek için:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)Bu durumda model, önceden eğitilmiş ağırlıklardan oluşur; ancak önceden eğitilmiş girdi katmanıyla artık aynı şekle sahip olmayan ilk girdi katmanı bunun dışındadır. Girdi katmanı rastgele ağırlıklarla başlatılmış olarak kalır.
Sınıf Sayısı#
Önceden eğitilmiş bir YOLOv5s modelini varsayılan 80 yerine 10 çıktı sınıfıyla yüklemek için:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)Bu durumda model, önceden eğitilmiş ağırlıklardan oluşur; ancak önceden eğitilmiş çıktı katmanlarıyla artık aynı şekle sahip olmayan çıktı katmanları bunun dışındadır. Çıktı katmanları rastgele ağırlıklarla başlatılmış olarak kalır.
Yeniden Yüklemeyi Zorlama#
Yukarıdaki adımlarla sorun yaşarsan force_reload=True ayarını yapmak mevcut önbelleği atıp PyTorch Hub'dan en son YOLOv5 sürümünü yeniden indirmeye zorlayarak yardımcı olabilir. Önbelleğe alınan kopyalar ~/.cache/torch/hub konumunda 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ünde Çı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 Çıkarımı#
YOLOv5 modelleri, iş parçacıklı çıkarımla 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#
Bir YOLOv5 modelini çıkarım yerine eğitim için yüklemek üzere autoshape=False ayarını yap. Rastgele başlatılmış ağırlıklara sahip bir model yüklemek (sıfırdan eğitim yapmak) için pretrained=False kullan. Bu durumda kendi eğitim betiğini sağlamalısın. Alternatif olarak model eğitimi için YOLOv5 Özel Veri Eğitimi Eğitimi sayfamıza 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 hizmetleriyle kullanım içindir. 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ırpıntıları 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 rakamı 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, .to_json() yöntemi kullanılarak .pandas() veri çerçevelerine 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(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 özel 20 sınıflı VOC eğitilmiş bir YOLOv5s modelini 'best.pt' 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 aktarma biçiminde çıkarımı destekler. Modellerin dışa aktarılması hakkında ayrıntılar için TFLite, ONNX, CoreML, TensorRT Dışa Aktarma eğitimi sayfasına bak.
- 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.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ü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 çeşitli önemli alanlardaki işlevselliğini ve performansını titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve karşılaştırmalı testler. Testler her 24 saatte bir ve her yeni işleme sonrasında yürütülerek macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir çalışmayı güvence altına alır.