рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

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 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 рдЪрдХреНрд░рдирд╛рднрд┐ред

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 рдирд┐рд░реНрдпрд╛рдд рдореЙрдбрд▓ рдкрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ред

ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк: 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)

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ