सामग्री पर जाएं

PyTorch Hub

📚 यह मार्गदर्शिका बताती है कि कैसे लोड किया जाए YOLOv5 🚀 से PyTorch Hub पर https://pytorch.org/hub/ultralytics_yolov5

शुरू करने से पहले

आवश्यकताओं को स्थापित करें.txt एक में Python> = 3.8.0 पर्यावरण, सहित PyTorch>=1.8मॉडल और डेटासेट नवीनतम से स्वचालित रूप से डाउनलोड होते हैं YOLOv5 रिलीज

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

💡 प्रो टिप: क्लोनिंग https://github.com/ultralytics/yolov5 आवश्यक 😃 नहीं है

भार YOLOv5 के साथ PyTorch Hub

सरल उदाहरण

यह उदाहरण एक पूर्व-प्रशिक्षित YOLOv5s मॉडल को लोड करता है PyTorch Hub जैसा model और अनुमान के लिए एक छवि पास करता है। 'yolov5s' सबसे हल्का और सबसे तेज है YOLOv5 को गढ़ना। सभी उपलब्ध मॉडलों के विवरण के लिए कृपया देखें रीडमी.

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

विस्तृत उदाहरण

यह उदाहरण दिखाता है बैच्ड अनुमान के साथ जनहित याचिका और ओपनसीवी छवि स्रोत। results हो सकता है मुद्रित सांत्वना देने के लिए, सहेजा तक runs/hub, दिखाया समर्थित परिवेशों पर स्क्रीन करने के लिए, और के रूप में लौटाया टेंसर नहीं तो पांडा डेटाफ्रेम।

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 जिदान पर अनुमान परिणाम.jpg YOLO बस पर अनुमान परिणाम.jpg

सभी अनुमान विकल्पों के लिए देखें YOLOv5 AutoShape() आगे विधि.

अनुमान सेटिंग्स

YOLOv5 मॉडल में विभिन्न अनुमान विशेषताएं होती हैं जैसे कि आत्मविश्वास दहलीज, IoU थ्रेशोल्ड, आदि जिन्हें निम्न द्वारा निर्धारित किया जा सकता है:

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

उपकरण

निर्माण के बाद मॉडल को किसी भी उपकरण में स्थानांतरित किया जा सकता है:

model.cpu()  # CPU
model.cuda()  # GPU
model.to(device)  # i.e. device=torch.device(0)

मॉडल सीधे किसी पर भी बनाए जा सकते हैं device:

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

💡 प्रो टिप: इनपुट छवियों को अनुमान से पहले स्वचालित रूप से सही मॉडल डिवाइस में स्थानांतरित कर दिया जाता है।

साइलेंस आउटपुट

मॉडल के साथ चुपचाप लोड किया जा सकता है _verbose=False:

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', _verbose=False)  # load silently

इनपुट चैनल

पूर्वप्रशिक्षित YOLOv5s मॉडल को डिफ़ॉल्ट 4 के बजाय 3 इनपुट चैनलों के साथ लोड करने के लिए:

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

इस मामले में मॉडल बहुत पहले इनपुट परत को छोड़कर पूर्व-प्रशिक्षित वजन से बना होगा, जो अब पूर्व-प्रशिक्षित इनपुट परत के समान आकार नहीं है। इनपुट परत यादृच्छिक भार द्वारा initialized रहेगा.

कक्षाओं की संख्या

डिफ़ॉल्ट 5 के बजाय 10 आउटपुट वर्गों के साथ एक पूर्वप्रशिक्षित YOLOv80s मॉडल लोड करने के लिए:

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

इस मामले में मॉडल आउटपुट परतों को छोड़कर पूर्व-प्रशिक्षित भार से बना होगा, जो अब पूर्व-प्रशिक्षित आउटपुट परतों के समान आकार नहीं हैं। आउटपुट परतें यादृच्छिक भार द्वारा प्रारंभ रहेंगी।

फोर्स रीलोड करें

यदि आप उपरोक्त चरणों के साथ समस्याओं में भाग लेते हैं, तो सेटिंग force_reload=True मौजूदा कैश को त्यागकर मदद कर सकता है और नवीनतम के नए डाउनलोड को मजबूर कर सकता है YOLOv5 संस्करण से PyTorch Hub.

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

स्क्रीनशॉट अनुमान

अपनी डेस्कटॉप स्क्रीन पर अनुमान चलाने के लिए:

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)

मल्टी-GPU अनुमान

YOLOv5 मॉडल को थ्रेडेड अनुमान के साथ समानांतर में कई जीपीयू में लोड किया जा सकता है:

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()

प्रशिक्षण

एक लोड करने के लिए YOLOv5 अनुमान के बजाय प्रशिक्षण के लिए मॉडल, सेट autoshape=False. बेतरतीब ढंग से प्रारंभ किए गए भार के साथ एक मॉडल लोड करने के लिए (खरोंच से प्रशिक्षित करने के लिए) का उपयोग करें pretrained=False. आपको इस मामले में अपनी खुद की प्रशिक्षण स्क्रिप्ट प्रदान करनी होगी। वैकल्पिक रूप से हमारे देखें YOLOv5 ट्रेन कस्टम डेटा ट्यूटोरियल मॉडल प्रशिक्षण के लिए।

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

बेस 64 परिणाम

एपीआई सेवाओं के साथ उपयोग के लिए। https://github.com/ देखेंultralytics/yolov5/pull/2291 और फ्लास्क आरईएसटी एपीआई उदाहरण विवरण के लिए।

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

क्रॉप किए गए परिणाम

परिणाम लौटाए जा सकते हैं और पता लगाने वाली फसलों के रूप में सहेजे जा सकते हैं:

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

पांडा परिणाम

परिणाम पांडा डेटाफ्रेम के रूप में लौटाए जा सकते हैं:

results = model(im)  # inference
results.pandas().xyxy[0]  # Pandas DataFrame
पांडा आउटपुट (विस्तार करने के लिए क्लिक करें)
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

क्रमबद्ध परिणाम

परिणामों को कॉलम द्वारा सॉर्ट किया जा सकता है, यानी लाइसेंस प्लेट अंक का पता लगाने को बाएं-से-दाएं (एक्स-अक्ष) सॉर्ट करने के लिए:

results = model(im)  # inference
results.pandas().xyxy[0].sort_values('xmin')  # sorted left-right

बॉक्स-क्रॉप किए गए परिणाम

परिणाम लौटाए जा सकते हैं और पता लगाने वाली फसलों के रूप में सहेजे जा सकते हैं:

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

JSON परिणाम

एक बार कनवर्ट होने के बाद परिणाम JSON प्रारूप में लौटाए जा सकते हैं .pandas() डेटाफ्रेम का उपयोग कर .to_json() विधि। JSON प्रारूप को orient युक्ति। पांडा देखें .to_json() प्रलेखन विवरण के लिए।

results = model(ims)  # inference
results.pandas().xyxy[0].to_json(orient="records")  # JSON img1 predictions
JSON आउटपुट (विस्तार करने के लिए क्लिक करें)
[
  {
    "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"
  }
]

कस्टम मॉडल

यह उदाहरण एक कस्टम 20-वर्ग लोड करता है वीओसी-प्रशिक्षित YOLOv5s मॉडल 'best.pt' के साथ PyTorch Hub.

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 और OpenVINO मॉडल

PyTorch Hub अधिकांश पर अनुमान का समर्थन करता है YOLOv5 कस्टम प्रशिक्षित मॉडल सहित निर्यात प्रारूप। देखना टीफ़्लाइट, ONNX, CoreML, TensorRT निर्यात मॉडल पर विवरण के लिए निर्यात ट्यूटोरियल।

💡 प्रो टिप: TensorRT की तुलना में 2-5X तक तेज हो सकता है PyTorch GPU बेंचमार्क पर 💡 प्रो टिप:ONNX और OpenVINO की तुलना में 2-3X तक तेज हो सकता है PyTorch सीपीयू बेंचमार्क पर

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

समर्थित वातावरण

Ultralytics उपयोग के लिए तैयार वातावरण की एक श्रृंखला प्रदान करता है, प्रत्येक आवश्यक निर्भरताओं जैसे CUDA, CUDNN के साथ पूर्व-स्थापित, Pythonऔर PyTorch, अपनी परियोजनाओं को किकस्टार्ट करने के लिए।

परियोजना की स्थिति

YOLOv5 सीआई

यह बैज इंगित करता है कि सभी YOLOv5 GitHub क्रियाएँ सतत एकीकरण (CI) परीक्षण सफलतापूर्वक पास हो रहे हैं। ये सीआई परीक्षण सख्ती से कार्यक्षमता और प्रदर्शन की जांच करते हैं YOLOv5 विभिन्न प्रमुख पहलुओं के पार: प्रशिक्षण, सत्यापन, अनुमान, निर्यात और बेंचमार्क। वे macOS, Windows और Ubuntu पर लगातार और विश्वसनीय संचालन सुनिश्चित करते हैं, हर 24 घंटे में और प्रत्येक नई प्रतिबद्धता पर परीक्षण किए जाते हैं।



2023-11-12 बनाया गया, अपडेट किया गया 2023-12-03
लेखक: ग्लेन-जोचर (3)

टिप्पणियाँ