PyTorch рдЪрдХреНрд░рдирд╛рднрд┐
ЁЯУЪ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП YOLOv5 ЁЯЪА рд╕реЗ PyTorch рд╣рдм рдкрд░ https://pytorch.org/hub/ultralytics_yolov5ред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
requirements.txt рдХреЛ рдПрдХ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВPython> = 3.8.0 рдкрд░реНрдпрд╛рд╡рд░рдг, рд╕рд╣рд┐рдд PyTorch>=1.8ред рдореЙрдбрд▓ рдФрд░ рдбреЗрдЯрд╛рд╕реЗрдЯ рдирд╡реАрдирддрдо рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ YOLOv5 рд░рд┐рд▓реАрдЬред
ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк: рдХреНрд▓реЛрдирд┐рдВрдЧ 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
рд╕рднреА рдЕрдиреБрдорд╛рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ 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
рдЙрдкрдХрд░рдг
рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдореЙрдбрд▓ рдХреЛ рдХрд┐рд╕реА рднреА рдЙрдкрдХрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдореЙрдбрд▓ рд╕реАрдзреЗ рдХрд┐рд╕реА рдкрд░ рднреА рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ device
:
ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк: рдЗрдирдкреБрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрдиреБрдорд╛рди рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдореЙрдбрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдЗрд▓реЗрдВрд╕ рдЖрдЙрдЯрдкреБрдЯ
рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЪреБрдкрдЪрд╛рдк рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ _verbose=False
:
рдЗрдирдкреБрдЯ рдЪреИрдирд▓
рдкреВрд░реНрд╡рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд YOLOv5s рдореЙрдбрд▓ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ 4 рдХреЗ рдмрдЬрд╛рдп 3 рдЗрдирдкреБрдЯ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЙрдбрд▓ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдкрд░рдд рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╡рдЬрди рд╕реЗ рдмрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЕрдм рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЗрдирдкреБрдЯ рдкрд░рдд рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЗрдирдкреБрдЯ рдкрд░рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рднрд╛рд░ рджреНрд╡рд╛рд░рд╛ initialized рд░рд╣реЗрдЧрд╛.
рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
рдбрд┐рдлрд╝реЙрд▓реНрдЯ 5 рдХреЗ рдмрдЬрд╛рдп 10 рдЖрдЙрдЯрдкреБрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрд╡рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд YOLOv80s рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЙрдбрд▓ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднрд╛рд░ рд╕реЗ рдмрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЕрдм рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЛрдВ рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рднрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд░рдВрдн рд░рд╣реЗрдВрдЧреАред
рдлреЛрд░реНрд╕ рд░реАрд▓реЛрдб рдХрд░реЗрдВ
рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╕реЗрдЯрд┐рдВрдЧ force_reload=True
рдореМрдЬреВрджрд╛ рдХреИрд╢ рдХреЛ рддреНрдпрд╛рдЧрдХрд░ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд╡реАрдирддрдо рдХреЗ рдирдП рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ YOLOv5 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ PyTorch рдЪрдХреНрд░рдирд╛рднрд┐ред
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЕрдиреБрдорд╛рди
рдЕрдкрдиреА рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрдиреБрдорд╛рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
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
рдХреНрд░реЙрдк рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╕рд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд╛рдВрдбрд╛ рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдо рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд╛рдВрдбрд╛ рдЖрдЙрдЯрдкреБрдЯ (рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ)
рдХреНрд░рдордмрджреНрдз рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛рдиреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд▓реЗрдЯ рдЕрдВрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЛ рдмрд╛рдПрдВ-рд╕реЗ-рджрд╛рдПрдВ (рдПрдХреНрд╕-рдЕрдХреНрд╖) рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдмреЙрдХреНрд╕-рдХреНрд░реЙрдк рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╕рд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
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, рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХрд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- рдореБрдлреНрдд GPU рдиреЛрдЯрдмреБрдХ:
- Google рдХреНрд▓рд╛рдЙрдб: GCP рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
- Amazon: AWS рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
- Azure: AzureML рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
- рдмрдВрджрд░рдЧрд╛рд╣-рдореЫрджреВрд░: рдбреЙрдХрд░ рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐
рдпрд╣ рдмреИрдЬ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА YOLOv5 GitHub рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рддрдд рдПрдХреАрдХрд░рдг (CI) рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд╕ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдпреЗ рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд╕рдЦреНрддреА рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ YOLOv5 рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдореБрдЦ рдкрд╣рд▓реБрдУрдВ рдХреЗ рдкрд╛рд░: рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рд╕рддреНрдпрд╛рдкрди, рдЕрдиреБрдорд╛рди, рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХред рд╡реЗ macOS, Windows рдФрд░ Ubuntu рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдЪрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рд░ 24 рдШрдВрдЯреЗ рдореЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
2023-11-12 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2023-12-03
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (3)