Spaces:
Sleeping
Sleeping
# Ultralytics YOLO 🚀, AGPL-3.0 license | |
import contextlib | |
from pathlib import Path | |
import pytest | |
from ultralytics import YOLO, download | |
from ultralytics.utils import ASSETS, DATASETS_DIR, ROOT, SETTINGS, WEIGHTS_DIR | |
from ultralytics.utils.checks import check_requirements | |
MODEL = WEIGHTS_DIR / 'path with spaces' / 'yolov8n.pt' # test spaces in path | |
CFG = 'yolov8n.yaml' | |
SOURCE = ASSETS / 'bus.jpg' | |
TMP = (ROOT / '../tests/tmp').resolve() # temp directory for test files | |
def test_model_ray_tune(): | |
"""Tune YOLO model with Ray optimization library.""" | |
YOLO('yolov8n-cls.yaml').tune(use_ray=True, | |
data='imagenet10', | |
grace_period=1, | |
iterations=1, | |
imgsz=32, | |
epochs=1, | |
plots=False, | |
device='cpu') | |
def test_mlflow(): | |
"""Test training with MLflow tracking enabled.""" | |
SETTINGS['mlflow'] = True | |
YOLO('yolov8n-cls.yaml').train(data='imagenet10', imgsz=32, epochs=3, plots=False, device='cpu') | |
def test_triton(): | |
"""Test NVIDIA Triton Server functionalities.""" | |
check_requirements('tritonclient[all]') | |
import subprocess | |
import time | |
from tritonclient.http import InferenceServerClient # noqa | |
# Create variables | |
model_name = 'yolo' | |
triton_repo_path = TMP / 'triton_repo' | |
triton_model_path = triton_repo_path / model_name | |
# Export model to ONNX | |
f = YOLO(MODEL).export(format='onnx', dynamic=True) | |
# Prepare Triton repo | |
(triton_model_path / '1').mkdir(parents=True, exist_ok=True) | |
Path(f).rename(triton_model_path / '1' / 'model.onnx') | |
(triton_model_path / 'config.pdtxt').touch() | |
# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver | |
tag = 'nvcr.io/nvidia/tritonserver:23.09-py3' # 6.4 GB | |
# Pull the image | |
subprocess.call(f'docker pull {tag}', shell=True) | |
# Run the Triton server and capture the container ID | |
container_id = subprocess.check_output( | |
f'docker run -d --rm -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models', | |
shell=True).decode('utf-8').strip() | |
# Wait for the Triton server to start | |
triton_client = InferenceServerClient(url='localhost:8000', verbose=False, ssl=False) | |
# Wait until model is ready | |
for _ in range(10): | |
with contextlib.suppress(Exception): | |
assert triton_client.is_model_ready(model_name) | |
break | |
time.sleep(1) | |
# Check Triton inference | |
YOLO(f'http://localhost:8000/{model_name}', 'detect')(SOURCE) # exported model inference | |
# Kill and remove the container at the end of the test | |
subprocess.call(f'docker kill {container_id}', shell=True) | |
def test_pycocotools(): | |
"""Validate model predictions using pycocotools.""" | |
from ultralytics.models.yolo.detect import DetectionValidator | |
from ultralytics.models.yolo.pose import PoseValidator | |
from ultralytics.models.yolo.segment import SegmentationValidator | |
# Download annotations after each dataset downloads first | |
url = 'https://github.com/ultralytics/assets/releases/download/v0.0.0/' | |
args = {'model': 'yolov8n.pt', 'data': 'coco8.yaml', 'save_json': True, 'imgsz': 64} | |
validator = DetectionValidator(args=args) | |
validator() | |
validator.is_coco = True | |
download(f'{url}instances_val2017.json', dir=DATASETS_DIR / 'coco8/annotations') | |
_ = validator.eval_json(validator.stats) | |
args = {'model': 'yolov8n-seg.pt', 'data': 'coco8-seg.yaml', 'save_json': True, 'imgsz': 64} | |
validator = SegmentationValidator(args=args) | |
validator() | |
validator.is_coco = True | |
download(f'{url}instances_val2017.json', dir=DATASETS_DIR / 'coco8-seg/annotations') | |
_ = validator.eval_json(validator.stats) | |
args = {'model': 'yolov8n-pose.pt', 'data': 'coco8-pose.yaml', 'save_json': True, 'imgsz': 64} | |
validator = PoseValidator(args=args) | |
validator() | |
validator.is_coco = True | |
download(f'{url}person_keypoints_val2017.json', dir=DATASETS_DIR / 'coco8-pose/annotations') | |
_ = validator.eval_json(validator.stats) | |