─░├žeri─če ge├ž

PyTorch Hub

­čôÜ Bu k─▒lavuz, https://pytorch.org/hub/ultralytics_yolov5 adresindeki PyTorch Hub'dan YOLOv5 ­čÜÇ nas─▒l y├╝klenece─čini a├ž─▒klamaktad─▒r.

Ba┼člamadan ├ľnce

requirements.txt dosyas─▒n─▒ bir Python>=3.8.0 ortam─▒ dahil olmak ├╝zere PyTorch>=1.8. Modeller ve veri setleri en son YOLOv5 s├╝r├╝m├╝nden otomatik olarak indirilir.

pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txt

­čĺí ProTip: https://github.com/ ultralytics/ yolov5 adreslerinin klonlanmas─▒ gerekli de─čildir ­čśâ

PyTorch Hub ile YOLOv5 adresini y├╝kleyin

Basit ├ľrnek

Bu ├Ârnek, PyTorch Hub adresinden ├Ânceden e─čitilmi┼č bir YOLOv5s modelini ┼č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 modeller hakk─▒nda ayr─▒nt─▒l─▒ bilgi i├žin l├╝tfen README.

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

Detayl─▒ ├ľrnek

Bu ├Ârnek ┼čunlar─▒ g├Âstermektedir toplu ├ž─▒kar─▒m ile PIL ve OpenCV g├Âr├╝nt├╝ kaynaklar─▒. results olabilir bas─▒l─▒ konsola, kaydedildi i├žin runs/hub, g├Âsterdi desteklenen ortamlarda ekrana getirilir ve tens├Ârler veya pandalar 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

YOLO zidane.jpg ├╝zerinde ├ž─▒kar─▒m sonu├žlar─▒ YOLO otob├╝ste ├ž─▒kar─▒m sonu├žlar─▒.jpg

T├╝m ├ž─▒kar─▒m se├ženekleri i├žin bkz. YOLOv5 AutoShape() ileri y├Ântem.

Çıkarım Ayarları

YOLOv5 modeller, g├╝ven e┼či─či, IoU e┼či─či vb. gibi ├že┼čitli ├ž─▒kar─▒m ├Âznitelikleri i├žerir ve bunlar taraf─▒ndan ayarlanabilir:

model.conf = 0.25  # NMS confidence threshold
iou = 0.45  # NMS IoU threshold
agnostic = False  # NMS class-agnostic
multi_label = False  # NMS multiple labels per box
classes = None  # (optional list) filter by class, i.e. = [0, 15, 16] for COCO persons, cats and dogs
max_det = 1000  # maximum number of detections per image
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 device:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu")  # load on CPU

­čĺí ProTip: Girdi g├Âr├╝nt├╝leri, ├ž─▒kar─▒mdan ├Ânce otomatik olarak do─čru model cihaza aktar─▒l─▒r.

Sessizlik ├ç─▒k─▒┼člar─▒

Modeller ┼ču ┼čekilde 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 modeli y├╝klemek i├žin:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)

Bu durumda model, art─▒k ├Ân e─čitimli girdi katman─▒yla ayn─▒ ┼čekilde olmayan ilk girdi katman─▒ d─▒┼č─▒nda ├Ân e─čitimli 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─▒ ile ├Ânceden e─čitilmi┼č bir YOLOv5s modeli y├╝klemek i├žin:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)

Bu durumda model, art─▒k ├Ânceden e─čitilmi┼č ├ž─▒kt─▒ katmanlar─▒yla ayn─▒ ┼čekilde olmayan ├ž─▒kt─▒ katmanlar─▒ d─▒┼č─▒nda ├Ânceden e─čitilmi┼č a─č─▒rl─▒klardan olu┼čacakt─▒r. ├ç─▒kt─▒ katmanlar─▒ rastgele a─č─▒rl─▒klarla ba┼člat─▒lm─▒┼č olarak kalacakt─▒r.

Yeniden Y├╝klemeye 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├╝ yeni bir indirmeye zorlayarak yard─▒mc─▒ olabilir.

model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True)  # force reload

Ekran G├Âr├╝nt├╝s├╝ ├ç─▒karsama

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 Çıkarsaması

YOLOv5 modeller, i┼č par├žac─▒kl─▒ ├ž─▒kar─▒m ile 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

├ç─▒kar─▒m yerine e─čitim i├žin bir YOLOv5 modeli y├╝klemek i├žin autoshape=False. Bir modeli rastgele ba┼člat─▒lm─▒┼č a─č─▒rl─▒klarla y├╝klemek i├žin (s─▒f─▒rdan e─čitmek i├žin) pretrained=False. Bu durumda kendi e─čitim metninizi sa─člaman─▒z gerekir. Alternatif olarak bizim YOLOv5 ├ľzel Verileri E─čitme 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 hizmetleri ile kullan─▒m i├žin. Ayr─▒nt─▒lar i├žin https://github.com/ultralytics/yolov5/pull/2291 ve Flask REST API ├Ârne─čine bak─▒n.

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 geri d├Ând├╝r├╝lebilir ve tespit mahsulleri olarak kaydedilebilir:

results = model(im)  # inference
crops = results.crop(save=True)  # cropped detections dictionary

Pandalar Sonu├žlar

Sonu├žlar Pandas DataFrames olarak d├Ând├╝r├╝lebilir:

results = model(im)  # inference
results.pandas().xyxy[0]  # Pandas DataFrame
Pandalar─▒n ├ç─▒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, yani plaka hanesi 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 geri d├Ând├╝r├╝lebilir ve tespit mahsulleri olarak kaydedilebilir:

results = model(im)  # inference
crops = results.crop(save=True)  # cropped detections dictionary

JSON Sonu├žlar─▒

Sonu├žlar JSON format─▒na d├Ân├╝┼čt├╝r├╝ld├╝kten sonra .pandas() veri ├žer├ževelerini kullanarak .to_json() y├Ântemini kullanabilirsiniz. JSON bi├žimi, a┼ča─č─▒daki kullan─▒larak de─či┼čtirilebilir orient arg├╝man. Bkz. pandas .to_json() dok├╝mantasyon detaylar 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─▒f─▒ 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 e─čitimli modeller de dahil olmak ├╝zere ├žo─ču YOLOv5 d─▒┼ča aktarma format─▒nda ├ž─▒kar─▒m─▒ destekler. Modellerin d─▒┼ča aktar─▒lmas─▒yla ilgili ayr─▒nt─▒lar i├žin TFLite, ONNX, CoreML, TensorRT D─▒┼ča aktarma ├Â─čreticisine bak─▒n.

­čĺí ProTip: TensorRTPyTorch adresinden 2-5 kata kadar daha h─▒zl─▒ olabilir GPU k─▒yaslamalar─▒ ­čĺí ProTip: ONNX ve OpenVINOPyTorch adresinden 2-3 kata kadar daha h─▒zl─▒ olabilir. CPU k─▒yaslamalar─▒

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 her biri CUDA, CUDNN gibi temel ba─č─▒ml─▒l─▒klarla ├Ânceden y├╝klenmi┼č bir dizi kullan─▒ma haz─▒r ortam sa─člar, Pythonve PyTorchProjelerinizi ba┼člatmak i├žin.

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 'un i┼člevselli─čini ve performans─▒n─▒ ├že┼čitli temel y├Ânlerden titizlikle kontrol eder: e─čitim, do─črulama, ├ž─▒kar─▒m, d─▒┼ča aktarma ve k─▒yaslamalar. Her 24 saatte bir ve her yeni i┼člemde yap─▒lan testlerle macOS, Windows ve Ubuntu ├╝zerinde tutarl─▒ ve g├╝venilir ├žal─▒┼čma sa─člarlar.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (7), Burhan-Q (1)

Yorumlar