PyTorch Hub'dan YOLOv5 Yükleme
📚 Bu kılavuz, YOLOv5 🚀'in PyTorch Hub'dan https://pytorch.org/hub/ultralytics_yolov5 adresinden nasıl yükleneceğini açıklamaktadır.
Başlamadan Önce
requirements.txt dosyasını Python>=3.8.0 ortamında, PyTorch>=1.8 dahil olmak üzere kurun. 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.txt
💡 Uzman İpucu: https://github.com/ultralytics/yolov5 adresini klonlamak gerekli değildir 😃
YOLOv5'i PyTorch Hub ile Yükleme
Basit Örnek
Bu örnek, önceden eğitilmiş bir YOLOv5s modelini PyTorch Hub'dan şu şekilde yükler model
ve çıkarım için bir görüntü iletir. 'yolov5s'
en hafif ve en hızlı YOLOv5 modelidir. Mevcut tüm modellerle ilgili ayrıntılar için lütfen şu bölüme bakın: BENİ OKU.
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
Ayrıntılı Örnek
Bu örnek şunu gösterir toplu çıkarım ile PIL ve OpenCV resim kaynakları. results
olabilir yazdırıldı konsola, kaydedildi için runs/hub
, gösterildi desteklenen ortamlarda ekrana yansıtmak ve şu şekilde döndürülmek üzere tensorler veya pandas veri çerçeveleri.
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 bkz. YOLOv5 AutoShape()
ileri metodu.
Çıkarım Ayarları
YOLOv5 modelleri, güven eşiği, IoU eşiği vb. gibi çeşitli çıkarım özelliklerine sahiptir 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 size
Cihaz
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 cihaz üzerinde de oluşturulabilir: device
:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu") # load on CPU
💡 Uzman İpucu: Giriş görüntüleri, çıkarım öncesinde otomatik olarak doğru model cihazına aktarılır.
Çıktıları Sessize Al
Modeller sessizce yüklenebilir: _verbose=False
:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False) # load silently
Giriş Kanalları
Varsayılan 3 yerine 4 giriş 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 aynı şekle sahip olmayan ilk giriş katmanı dışında ö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 çı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 aynı şekle sahip olmayan çıkış katmanları dışında önceden eğitilmiş ağırlıklardan oluşacaktır. Çıkış katmanları rastgele ağırlıklarla başlatılmış olarak kalacaktır.
Yeniden Yüklemeyi Zorla
Yukarıdaki adımlarla ilgili sorunlarla karşılaşırsanız, force_reload=True
mevcut önbelleği atarak ve PyTorch Hub'dan en son YOLOv5 sürümünün yeni bir indirilmesini zorlayarak yardımcı olabilir.
model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True) # force reload
Ekran Görüntüsü Çıkarımı
Masaüstü ekranınızda çı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 paralel olarak birden fazla GPU'ya 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 için şunu ayarlayın: autoshape=False
Rastgele başlatılmış ağırlıklara sahip bir modeli yüklemek (sıfırdan eğitmek için) için şunu kullanın: pretrained=False
Bu durumda kendi eğitim komut dosyanızı sağlamanız gerekir. Alternatif olarak, YOLOv5'imize bakın Özel Veri Eğitimi Eğitimi model eğitimi için.
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 Sonuçları
API servisleri ile kullanım için. Detaylar için Flask REST API örneğine bakınız.
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 results
Kı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 dictionary
Pandas Sonuçları
Sonuçlar Pandas Veri Çerçeveleri olarak döndürülebilir:
results = model(im) # inference
results.pandas().xyxy[0] # Pandas DataFrame
Pandas Çıktısı (genişletmek için tıklayın)
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 tie
Sıralanmış Sonuçlar
Sonuçlar sütuna göre sıralanabilir, örneğin plaka rakamı tespitini soldan sağa (x ekseni) sıralamak için:
results = model(im) # inference
results.pandas().xyxy[0].sort_values("xmin") # sorted left-right
Kutu Kı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 dictionary
JSON Sonuçları
Sonuçlar, dönüştürüldükten sonra JSON formatında döndürülebilir: .pandas()
veri çerçeveleri kullanılarak .to_json()
method'u. JSON formatı, kullanılarak değiştirilebilir orient
argümanı. Bkz. pandas .to_json()
belgeleme ayrıntılar için.
results = model(ims) # inference
results.pandas().xyxy[0].to_json(orient="records") # JSON img1 predictions
JSON Çıktısı (genişletmek için tıklayın)
[
{
"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, özel bir 20 sınıflı yükler VOC-eğitilmiş YOLOv5s modeli 'best.pt'
PyTorch Hub ile.
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 ve OpenVINO Modelleri
PyTorch Hub, özel olarak eğitilmiş modeller de dahil olmak üzere çoğu YOLOv5 dışa aktarım formatında çıkarımı destekler. Modelleri dışa aktarma hakkında ayrıntılı bilgi için TFLite, ONNX, CoreML, TensorRT Dışa Aktarma eğitimine bakın.
💡 Uzman İpucu: TensorRT, GPU kıyaslamalarında PyTorch'tan 2-5 kat daha hızlı olabilir. 💡 Uzman İpucu: ONNX ve OpenVINO, CPU kıyaslamaları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/") # PaddlePaddle
Desteklenen Ortamlar
Ultralytics, projelerinize hızlı bir başlangıç yapmanız için her biri CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam 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şitli temel açılardan titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. macOS, Windows ve Ubuntu'da tutarlı ve güvenilir çalışmayı sağlarlar; testler her 24 saatte bir ve her yeni commit'te yapılır.