İçeriğe geç

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

zidane.jpg üzerinde YOLO çıkarım sonuçları bus.jpg üzerinde YOLO çıkarım sonuçları

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=FalseRastgele başlatılmış ağırlıklara sahip bir modeli yüklemek (sıfırdan eğitmek için) için şunu kullanın: pretrained=FalseBu 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.

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ş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.



📅 1 yıl önce oluşturuldu ✏️ 5 ay önce güncellendi

Yorumlar