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

PyTorch चक्रनाभि

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

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

requirements.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 चक्रनाभि

सरल उदाहरण

यह उदाहरण एक पूर्व-प्रशिक्षित YOLOv5s मॉडल को लोड करता है PyTorch हब के रूप में 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 zidane.jpg पर अनुमान परिणाम YOLO bus.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 चक्रनाभि।

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

प्रशिक्षण

एक लोड करने के लिए 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 चक्रनाभि।

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 हब अधिकांश पर अनुमान का समर्थन करता है YOLOv5 कस्टम प्रशिक्षित मॉडल सहित निर्यात प्रारूप। देखना टीफ़्लाइट, ONNX, CoreML, TensorRT निर्यात मॉडल पर विवरण के लिए निर्यात ट्यूटोरियल।

💡 ProTip: TensorRT may be up to 2-5X faster than PyTorch on GPU benchmarks 💡 ProTip: ONNX and OpenVINO may be up to 2-3X faster than PyTorch on CPU benchmarks

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 provides a range of ready-to-use environments, each pre-installed with essential dependencies such as CUDA, CUDNN, Python, and PyTorch, to kickstart your projects.

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

YOLOv5 सीआई

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



बनाया गया 2023-11-12, अपडेट किया गया 2024-06-10
लेखक: ग्लेन-जोचर (7), बुरहान-क्यू (1)

टिप्पणियाँ