рдЯреАрдлрд╝реНрд▓рд╛рдЗрдЯ, ONNX, CoreML, TensorRT рдирд┐рд░реНрдпрд╛рддрд┐рдд рдорд╛рд▓
ЁЯУЪ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЛ рдХреИрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП YOLOv5 ЁЯЪА рд╕реЗ рдореЙрдбрд▓ PyTorch рддрдХ ONNX рдФрд░ TorchScript рд╕реНрд╡рд░реВрдкреЛрдВред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рд░реЗрдкреЛ рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ requirements.txt рдХреЛ рдПрдХ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ Python> = 3.8.0 рдкрд░реНрдпрд╛рд╡рд░рдг, рд╕рд╣рд┐рдд PyTorch>=1.8ред рдореЙрдбрд▓ рдФрд░ рдбреЗрдЯрд╛рд╕реЗрдЯ рдирд╡реАрдирддрдо рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ YOLOv5 рд░рд┐рд▓реАрдЬред
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
рдХреЗ рд▓рд┐рдП TensorRT рдирд┐рд░реНрдпрд╛рдд рдЙрджрд╛рд╣рд░рдг (GPU рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рд╣рдорд╛рд░рд╛ Colab рджреЗрдЦреЗрдВ рдиреЛрдЯрдмреБрдХ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрднрд╛рдЧред
рд╕реНрд╡рд░реВрдкреЛрдВ
YOLOv5 рдЕрдиреБрдорд╛рди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ 11 рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ:
ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк: рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ONNX рдирд╣реАрдВ рддреЛ OpenVINO 3x CPU рд╕реНрдкреАрдбрдЕрдк рддрдХред рд╕реАрдкреАрдпреВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рджреЗрдЦреЗрдВред ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк: рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TensorRT 5x GPU рд╕реНрдкреАрдбрдЕрдк рддрдХред GPU рдмреЗрдВрдЪрдорд╛рд░реНрдХ рджреЗрдЦреЗрдВред
рдкреНрд░рд╛рд░реВрдк | export.py --include |
рдХреЛ рдЧрдврд╝рдирд╛ |
---|---|---|
PyTorch | - | yolov5s.pt |
TorchScript | torchscript |
yolov5s.torchscript |
ONNX | onnx |
yolov5s.onnx |
OpenVINO | openvino |
yolov5s_openvino_model/ |
TensorRT | engine |
yolov5s.engine |
CoreML | coreml |
yolov5s.mlmodel |
TensorFlow SavedModel | saved_model |
yolov5s_saved_model/ |
TensorFlow GraphDef | pb |
yolov5s.pb |
TensorFlow рд▓рд╛рдЗрдЯ | tflite |
yolov5s.tflite |
TensorFlow рдХрд┐рдирд╛рд░рд╛ TPU | edgetpu |
yolov5s_edgetpu.tflite |
TensorFlowредрдЬреЗ рдПрд╕ | tfjs |
yolov5s_web_model/ |
PaddlePaddle | paddle |
yolov5s_paddle_model/ |
рдорд╛рдирдХ
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ Colab Pro рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ YOLOv5 рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдиреЛрдЯрдмреБрдХ . рдкреНрд░рдЬрдирди рдХрд░рдирд╛:
Colab Pro V100 GPU
benchmarks: weights=/content/yolov5/yolov5s.pt, imgsz=640, batch_size=1, data=/content/yolov5/data/coco128.yaml, device=0, half=False, test=False
Checking setup...
YOLOv5 ЁЯЪА v6.1-135-g7926afc torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)
Setup complete тЬЕ (8 CPUs, 51.0 GB RAM, 46.7/166.8 GB disk)
Benchmarks complete (458.07s)
Format mAP@0.5:0.95 Inference time (ms)
0 PyTorch 0.4623 10.19
1 TorchScript 0.4623 6.85
2 ONNX 0.4623 14.63
3 OpenVINO NaN NaN
4 TensorRT 0.4617 1.89
5 CoreML NaN NaN
6 TensorFlow SavedModel 0.4623 21.28
7 TensorFlow GraphDef 0.4623 21.22
8 TensorFlow Lite NaN NaN
9 TensorFlow Edge TPU NaN NaN
10 TensorFlow.js NaN NaN
рдХреЛрд▓рд╛рдм рдкреНрд░реЛ рд╕реАрдкреАрдпреВ
benchmarks: weights=/content/yolov5/yolov5s.pt, imgsz=640, batch_size=1, data=/content/yolov5/data/coco128.yaml, device=cpu, half=False, test=False
Checking setup...
YOLOv5 ЁЯЪА v6.1-135-g7926afc torch 1.10.0+cu111 CPU
Setup complete тЬЕ (8 CPUs, 51.0 GB RAM, 41.5/166.8 GB disk)
Benchmarks complete (241.20s)
Format mAP@0.5:0.95 Inference time (ms)
0 PyTorch 0.4623 127.61
1 TorchScript 0.4623 131.23
2 ONNX 0.4623 69.34
3 OpenVINO 0.4623 66.52
4 TensorRT NaN NaN
5 CoreML NaN NaN
6 TensorFlow SavedModel 0.4623 123.79
7 TensorFlow GraphDef 0.4623 121.57
8 TensorFlow Lite 0.4623 316.61
9 TensorFlow Edge TPU NaN NaN
10 TensorFlow.js NaN NaN
рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ YOLOv5 рдХреЛ рдЧрдврд╝рдирд╛
рдпрд╣ рдХрдорд╛рдВрдб рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд YOLOv5s рдореЙрдбрд▓ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ TorchScript рдФрд░ ONNX рд╕реНрд╡рд░реВрдкреЛрдВред yolov5s.pt
'рдЫреЛрдЯрд╛' рдореЙрдбрд▓ рд╣реИ, рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдореЙрдбрд▓ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ yolov5n.pt
, yolov5m.pt
, yolov5l.pt
рдФрд░ yolov5x.pt
, рдЙрдирдХреЗ рдкреА 6 рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдЕрд░реНрдерд╛рддреН yolov5s6.pt
рдпрд╛ рдЖрдк рдХрд╕реНрдЯрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдпрд╛рдиреА runs/exp/weights/best.pt
. рд╕рднреА рдЙрдкрд▓рдмреНрдз рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рд╣рдорд╛рд░рд╛ README рджреЗрдЦреЗрдВ рд╕рд╛рд░рдгреА.
ЁЯТб рдкреНрд░реЛ рдЯрд┐рдк: рдЬреЛрдбрд╝реЗрдВ --half
FP16 рдкрд░ рдореЙрдбрд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛
рдЖрдЙрдЯрдкреБрдЯ:
export: data=data/coco128.yaml, weights=['yolov5s.pt'], imgsz=[640, 640], batch_size=1, device=cpu, half=False, inplace=False, train=False, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['torchscript', 'onnx']
YOLOv5 ЁЯЪА v6.2-104-ge3e5122 Python-3.8.0 torch-1.12.1+cu113 CPU
Downloading https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt to yolov5s.pt...
100% 14.1M/14.1M [00:00<00:00, 274MB/s]
Fusing layers...
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
PyTorch: starting from yolov5s.pt with output shape (1, 25200, 85) (14.1 MB)
TorchScript: starting export with torch 1.12.1+cu113...
TorchScript: export success тЬЕ 1.7s, saved as yolov5s.torchscript (28.1 MB)
ONNX: starting export with onnx 1.12.0...
ONNX: export success тЬЕ 2.3s, saved as yolov5s.onnx (28.0 MB)
Export complete (5.5s)
Results saved to /content/yolov5
Detect: python detect.py --weights yolov5s.onnx
Validate: python val.py --weights yolov5s.onnx
PyTorch Hub: model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.onnx')
Visualize: https://netron.app/
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП 3 рдореЙрдбрд▓ рдореВрд▓ рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ PyTorch рдХреЛ рдЧрдврд╝рдирд╛:
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП Netron рд╡реНрдпреВрдЕрд░ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ:
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
detect.py
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдкрд░ рдЕрдиреБрдорд╛рди рдЪрд▓рд╛рддрд╛ рд╣реИ:
python detect.py --weights yolov5s.pt # PyTorch
yolov5s.torchscript # TorchScript
yolov5s.onnx # ONNX Runtime or OpenCV DNN with dnn=True
yolov5s_openvino_model # OpenVINO
yolov5s.engine # TensorRT
yolov5s.mlmodel # CoreML (macOS only)
yolov5s_saved_model # TensorFlow SavedModel
yolov5s.pb # TensorFlow GraphDef
yolov5s.tflite # TensorFlow Lite
yolov5s_edgetpu.tflite # TensorFlow Edge TPU
yolov5s_paddle_model # PaddlePaddle
val.py
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдЪрд▓рд╛рддрд╛ рд╣реИ:
python val.py --weights yolov5s.pt # PyTorch
yolov5s.torchscript # TorchScript
yolov5s.onnx # ONNX Runtime or OpenCV DNN with dnn=True
yolov5s_openvino_model # OpenVINO
yolov5s.engine # TensorRT
yolov5s.mlmodel # CoreML (macOS Only)
yolov5s_saved_model # TensorFlow SavedModel
yolov5s.pb # TensorFlow GraphDef
yolov5s.tflite # TensorFlow Lite
yolov5s_edgetpu.tflite # TensorFlow Edge TPU
yolov5s_paddle_model # PaddlePaddle
рдкреНрд░рдпреЛрдЧ PyTorch рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рд╛рде рд╣рдм YOLOv5 рдореЙрдбрд▓:
import torch
# Model
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.pt')
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.torchscript ') # TorchScript
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.onnx') # ONNX Runtime
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s_openvino_model') # OpenVINO
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.engine') # TensorRT
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.mlmodel') # CoreML (macOS Only)
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s_saved_model') # TensorFlow SavedModel
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.pb') # TensorFlow GraphDef
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.tflite') # TensorFlow Lite
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s_edgetpu.tflite') # TensorFlow Edge TPU
model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s_paddle_model') # PaddlePaddle
# Images
img = 'https://ultralytics.com/images/zidane.jpg' # or file, Path, PIL, OpenCV, numpy, list
# Inference
results = model(img)
# Results
results.print() # or .show(), .save(), .crop(), .pandas(), etc.
рдУрдкрдирд╕реАрд╡реА рдбреАрдПрдирдПрди рдЕрдиреБрдорд╛рди
OpenCV рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде ONNX рдореЙрдбрд▓:
python export.py --weights yolov5s.pt --include onnx
python detect.py --weights yolov5s.onnx --dnn # detect
python val.py --weights yolov5s.onnx --dnn # validate
рд╕реА ++ рдЕрдиреБрдорд╛рди
YOLOv5 рдирд┐рд░реНрдпрд╛рдд рдкрд░ рдУрдкрдирд╕реАрд╡реА рдбреАрдПрдирдПрди рд╕реА ++ рдЕрдиреБрдорд╛рди ONNX рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг:
- https://github.com/Hexmagic/ONNX-yolov5/blob/master/src/test.cpp
- https://github.com/doleron/yolov5-opencv-cpp-python
YOLOv5 OpenVINO рд╕реА ++ рдЕрдиреБрдорд╛рди рдЙрджрд╛рд╣рд░рдг:
- https://github.com/dacquaviva/yolov5-openvino-cpp-python
- https://github.com/UNeedCryDear/yolov5-seg-opencv-dnn-cpp
TensorFlow.js рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдиреБрдорд╛рди
рд╕рдорд░реНрдерд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг
Ultralytics рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдЬреИрд╕реЗ CUDA, CUDNN рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд, PythonрдФрд░ PyTorch, рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХрд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- рдореБрдлреНрдд GPU рдиреЛрдЯрдмреБрдХ:
- Google рдХреНрд▓рд╛рдЙрдб: GCP рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
- Amazon: AWS рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
- Azure: AzureML рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
- рдмрдВрджрд░рдЧрд╛рд╣-рдореЫрджреВрд░: рдбреЙрдХрд░ рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдЧрд╛рдЗрдб
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐
рдпрд╣ рдмреИрдЬ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА YOLOv5 GitHub рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рддрдд рдПрдХреАрдХрд░рдг (CI) рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд╕ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдпреЗ рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд╕рдЦреНрддреА рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ YOLOv5 рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдореБрдЦ рдкрд╣рд▓реБрдУрдВ рдХреЗ рдкрд╛рд░: рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рд╕рддреНрдпрд╛рдкрди, рдЕрдиреБрдорд╛рди, рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХред рд╡реЗ macOS, Windows рдФрд░ Ubuntu рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдЪрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рд░ 24 рдШрдВрдЯреЗ рдореЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
2023-11-12 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-01-12
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (5)