Ultralytics YOLO27:
Get Started

PyTorch Hub'dan YOLOv5 Yükleme#

📚 Bu kılavuz, YOLOv5 🚀 modelini PyTorch Hub'dan https://pytorch.org/hub/ultralytics_yolov5 adresinde nasıl yükleyeceğ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.txt
İpucu

ultralytics/yolov5 deposunu klonlaman gerekmez — PyTorch Hub kodu otomatik olarak alır.

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ü iletir. 'yolov5s', küçük ve hızlı bir YOLOv5 modelidir. Kullanılabilir tüm modeller hakkında ayrıntılı bilgi 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  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     tie

Ayrı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 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
YOLO inference results on zidane.jpg YOLO inference results on bus.jpg

Tüm çıkarım seçenekleri için YOLOv5 AutoShape() ileri yöntemine bak.

Çıkarım Ayarları#

YOLOv5 modellerinde güven eşiği, IoU eşiği gibi çeşitli çıkarım öznitelikleri bulunur. Bunlar şu şekilde ayarlanabilir:

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 boyutu

Aygı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ükle
İpucu

Girdi 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ükle

Girdi 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, ilk girdi katmanı dışında önceden eğitilmiş ağırlıklardan oluşur; ilk katmanın şekli artık önceden eğitilmiş girdi katmanıyla aynı değildir. Girdi 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, çıktı katmanları dışında önceden eğitilmiş ağırlıklardan oluşur; çıktı katmanlarının şekli artık önceden eğitilmiş çıktı katmanlarıyla aynı değildir. Çıktı 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 zorla

Ekran 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#

Bir 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ısın. Alternatif olarak model eğitimi için YOLOv5 Özel Verilerle Eğitim Eğitimi sayfamıza bak.

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ükle

Base64 Sonuçları#

API hizmetlerinde 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  # çı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 DataFrame
Pandas çı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     tie

Sıralanmış Sonuçlar#

Sonuçlar sütuna göre sıralanabilir; örneğin plaka rakamı tespitlerini soldan sağa (x ekseninde) 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 tahminleri
JSON çı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 depo

TensorRT, ONNX ve OpenVINO Modelleri#

PyTorch Hub, özel olarak eğitilmiş modeller de dahil olmak üzere çoğu YOLOv5 dışa aktarma biçiminde çıkarımı destekler. Modelleri dışa aktarma hakkında ayrıntılar için TFLite, ONNX, CoreML, TensorRT Dışa Aktarma öğreticisine bak.

İpucu
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/")  # PaddlePaddle

Desteklenen Ortamlar#

Ultralytics, projelerine hızlıca başlaman için CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklü olduğu çeşitli kullanıma hazır ortamlar sunar.

Proje Durumu#

YOLOv5 CI

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/hub konumuna ve ağırlıkları indirir. Yalnızca requirements.txt içindeki paketlerin yüklenmesi gerekir.

  • Kontrol noktası yolunu belirterek custom giriş noktasını kullan: torch.hub.load("ultralytics/yolov5", "custom", path="runs/train/exp/weights/best.pt"). Ağ erişimi olmadan yüklemek için source="local" ve yerel depo yolunu ekle.

  • Evet. Dışa aktarılan dosyayı aynı custom yükleyicisine ver; YOLOv5, uzantıya göre eşleşen arka ucu seçer. Örneğin yolov5s.onnx, yolov5s.engine veya yolov5s_openvino_model/.

  • Önbelleğe alınan depoyu silip en son kodu almak için force_reload=True değ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