İç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 torch
import threading


def run(model, im):
    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.



Oluşturuldu 2023-11-12, Güncellendi 2023-12-03
Yazarlar: glenn-jocher (3)

Yorumlar