ultralytics 8.0.197__tar.gz → 8.0.198__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ultralytics might be problematic. Click here for more details.
- {ultralytics-8.0.197/ultralytics.egg-info → ultralytics-8.0.198}/PKG-INFO +1 -1
- {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_cuda.py +3 -20
- ultralytics-8.0.198/tests/test_integrations.py +26 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/__init__.py +1 -1
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/__init__.py +4 -5
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/trainer.py +1 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/__init__.py +2 -1
- ultralytics-8.0.198/ultralytics/utils/callbacks/mlflow.py +107 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/wb.py +2 -2
- {ultralytics-8.0.197 → ultralytics-8.0.198/ultralytics.egg-info}/PKG-INFO +1 -1
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/SOURCES.txt +1 -0
- ultralytics-8.0.197/ultralytics/utils/callbacks/mlflow.py +0 -67
- {ultralytics-8.0.197 → ultralytics-8.0.198}/CONTRIBUTING.md +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/LICENSE +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/MANIFEST.in +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/README.md +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/README.zh-CN.md +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/requirements.txt +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/setup.cfg +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/setup.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/conftest.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_cli.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_engine.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_python.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/DOTAv2.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/base.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/build.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/exporter.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/prompt.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/requires.txt +0 -0
- {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.198
|
|
4
4
|
Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Home-page: https://github.com/ultralytics/ultralytics
|
|
6
6
|
Author: Ultralytics
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
2
|
|
|
3
|
-
import contextlib
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
4
|
import torch
|
|
7
5
|
|
|
8
6
|
from ultralytics import YOLO, download
|
|
9
|
-
from ultralytics.utils import ASSETS, DATASETS_DIR, WEIGHTS_DIR
|
|
10
|
-
from ultralytics.utils.checks import cuda_device_count, cuda_is_available
|
|
7
|
+
from ultralytics.utils import ASSETS, DATASETS_DIR, WEIGHTS_DIR, checks
|
|
11
8
|
|
|
12
|
-
CUDA_IS_AVAILABLE = cuda_is_available()
|
|
13
|
-
CUDA_DEVICE_COUNT = cuda_device_count()
|
|
9
|
+
CUDA_IS_AVAILABLE = checks.cuda_is_available()
|
|
10
|
+
CUDA_DEVICE_COUNT = checks.cuda_device_count()
|
|
14
11
|
|
|
15
12
|
MODEL = WEIGHTS_DIR / 'path with spaces' / 'yolov8n.pt' # test spaces in path
|
|
16
13
|
DATA = 'coco8.yaml'
|
|
@@ -107,20 +104,6 @@ def test_predict_sam():
|
|
|
107
104
|
predictor.reset_image()
|
|
108
105
|
|
|
109
106
|
|
|
110
|
-
@pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason='CUDA is not available')
|
|
111
|
-
def test_model_ray_tune():
|
|
112
|
-
"""Tune YOLO model with Ray optimization library."""
|
|
113
|
-
with contextlib.suppress(RuntimeError): # RuntimeError may be caused by out-of-memory
|
|
114
|
-
YOLO('yolov8n-cls.yaml').tune(use_ray=True,
|
|
115
|
-
data='imagenet10',
|
|
116
|
-
grace_period=1,
|
|
117
|
-
iterations=1,
|
|
118
|
-
imgsz=32,
|
|
119
|
-
epochs=1,
|
|
120
|
-
plots=False,
|
|
121
|
-
device='cpu')
|
|
122
|
-
|
|
123
|
-
|
|
124
107
|
@pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason='CUDA is not available')
|
|
125
108
|
def test_model_tune():
|
|
126
109
|
"""Tune YOLO model for performance."""
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from ultralytics import YOLO
|
|
6
|
+
from ultralytics.utils import SETTINGS, checks
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@pytest.mark.skipif(not checks.check_requirements('ray', install=False), reason='RayTune not installed')
|
|
10
|
+
def test_model_ray_tune():
|
|
11
|
+
"""Tune YOLO model with Ray optimization library."""
|
|
12
|
+
YOLO('yolov8n-cls.yaml').tune(use_ray=True,
|
|
13
|
+
data='imagenet10',
|
|
14
|
+
grace_period=1,
|
|
15
|
+
iterations=1,
|
|
16
|
+
imgsz=32,
|
|
17
|
+
epochs=1,
|
|
18
|
+
plots=False,
|
|
19
|
+
device='cpu')
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@pytest.mark.skipif(not checks.check_requirements('mlflow', install=False), reason='MLflow not installed')
|
|
23
|
+
def test_mlflow():
|
|
24
|
+
"""Test training with MLflow tracking enabled."""
|
|
25
|
+
SETTINGS['mlflow'] = True
|
|
26
|
+
YOLO('yolov8n-cls.yaml').train(data='imagenet10', imgsz=32, epochs=3, plots=False, device='cpu')
|
|
@@ -7,9 +7,9 @@ from pathlib import Path
|
|
|
7
7
|
from types import SimpleNamespace
|
|
8
8
|
from typing import Dict, List, Union
|
|
9
9
|
|
|
10
|
-
from ultralytics.utils import (ASSETS, DEFAULT_CFG, DEFAULT_CFG_DICT, DEFAULT_CFG_PATH, LOGGER, RANK, ROOT,
|
|
11
|
-
SETTINGS_YAML, TESTS_RUNNING, IterableSimpleNamespace, __version__, checks,
|
|
12
|
-
deprecation_warn, yaml_load, yaml_print)
|
|
10
|
+
from ultralytics.utils import (ASSETS, DEFAULT_CFG, DEFAULT_CFG_DICT, DEFAULT_CFG_PATH, LOGGER, RANK, ROOT, RUNS_DIR,
|
|
11
|
+
SETTINGS, SETTINGS_YAML, TESTS_RUNNING, IterableSimpleNamespace, __version__, checks,
|
|
12
|
+
colorstr, deprecation_warn, yaml_load, yaml_print)
|
|
13
13
|
|
|
14
14
|
# Define valid tasks and modes
|
|
15
15
|
MODES = 'train', 'val', 'predict', 'export', 'track', 'benchmark'
|
|
@@ -153,8 +153,7 @@ def get_save_dir(args, name=None):
|
|
|
153
153
|
else:
|
|
154
154
|
from ultralytics.utils.files import increment_path
|
|
155
155
|
|
|
156
|
-
project = args.project or (ROOT /
|
|
157
|
-
'../tests/tmp/runs' if TESTS_RUNNING else Path(SETTINGS['runs_dir'])) / args.task
|
|
156
|
+
project = args.project or (ROOT.parent / 'tests/tmp/runs' if TESTS_RUNNING else RUNS_DIR) / args.task
|
|
158
157
|
name = name or args.name or f'{args.mode}'
|
|
159
158
|
save_dir = increment_path(Path(project) / name, exist_ok=args.exist_ok if RANK in (-1, 0) else True)
|
|
160
159
|
|
|
@@ -91,6 +91,7 @@ class BaseTrainer:
|
|
|
91
91
|
|
|
92
92
|
# Dirs
|
|
93
93
|
self.save_dir = get_save_dir(self.args)
|
|
94
|
+
self.args.name = self.save_dir.name # update name for loggers
|
|
94
95
|
self.wdir = self.save_dir / 'weights' # weights dir
|
|
95
96
|
if RANK in (-1, 0):
|
|
96
97
|
self.wdir.mkdir(parents=True, exist_ok=True) # make dir
|
|
@@ -930,7 +930,8 @@ def url2file(url):
|
|
|
930
930
|
PREFIX = colorstr('Ultralytics: ')
|
|
931
931
|
SETTINGS = SettingsManager() # initialize settings
|
|
932
932
|
DATASETS_DIR = Path(SETTINGS['datasets_dir']) # global datasets directory
|
|
933
|
-
WEIGHTS_DIR = Path(SETTINGS['weights_dir'])
|
|
933
|
+
WEIGHTS_DIR = Path(SETTINGS['weights_dir']) # global weights directory
|
|
934
|
+
RUNS_DIR = Path(SETTINGS['runs_dir']) # global runs directory
|
|
934
935
|
ENVIRONMENT = 'Colab' if is_colab() else 'Kaggle' if is_kaggle() else 'Jupyter' if is_jupyter() else \
|
|
935
936
|
'Docker' if is_docker() else platform.system()
|
|
936
937
|
TESTS_RUNNING = is_pytest_running() or is_github_actions_ci()
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
"""
|
|
3
|
+
MLflow Logging for Ultralytics YOLO.
|
|
4
|
+
|
|
5
|
+
This module enables MLflow logging for Ultralytics YOLO. It logs metrics, parameters, and model artifacts.
|
|
6
|
+
For setting up, a tracking URI should be specified. The logging can be customized using environment variables.
|
|
7
|
+
|
|
8
|
+
Commands:
|
|
9
|
+
1. To set a project name:
|
|
10
|
+
`export MLFLOW_EXPERIMENT_NAME=<your_experiment_name>` or use the project=<project> argument
|
|
11
|
+
|
|
12
|
+
2. To set a run name:
|
|
13
|
+
`export MLFLOW_RUN=<your_run_name>` or use the name=<name> argument
|
|
14
|
+
|
|
15
|
+
3. To start a local MLflow server:
|
|
16
|
+
mlflow server --backend-store-uri runs/mlflow
|
|
17
|
+
It will by default start a local server at http://127.0.0.1:5000.
|
|
18
|
+
To specify a different URI, set the MLFLOW_TRACKING_URI environment variable.
|
|
19
|
+
|
|
20
|
+
4. To kill all running MLflow server instances:
|
|
21
|
+
ps aux | grep 'mlflow' | grep -v 'grep' | awk '{print $2}' | xargs kill -9
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from ultralytics.utils import LOGGER, RUNS_DIR, SETTINGS, TESTS_RUNNING, colorstr
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
import os
|
|
28
|
+
|
|
29
|
+
assert not TESTS_RUNNING or 'test_mlflow' in os.environ.get('PYTEST_CURRENT_TEST', '') # do not log pytest
|
|
30
|
+
assert SETTINGS['mlflow'] is True # verify integration is enabled
|
|
31
|
+
import mlflow
|
|
32
|
+
|
|
33
|
+
assert hasattr(mlflow, '__version__') # verify package is not directory
|
|
34
|
+
from pathlib import Path
|
|
35
|
+
PREFIX = colorstr('MLflow: ')
|
|
36
|
+
|
|
37
|
+
except (ImportError, AssertionError):
|
|
38
|
+
mlflow = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def on_pretrain_routine_end(trainer):
|
|
42
|
+
"""
|
|
43
|
+
Log training parameters to MLflow at the end of the pretraining routine.
|
|
44
|
+
|
|
45
|
+
This function sets up MLflow logging based on environment variables and trainer arguments. It sets the tracking URI,
|
|
46
|
+
experiment name, and run name, then starts the MLflow run if not already active. It finally logs the parameters
|
|
47
|
+
from the trainer.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
trainer (ultralytics.engine.trainer.BaseTrainer): The training object with arguments and parameters to log.
|
|
51
|
+
|
|
52
|
+
Global:
|
|
53
|
+
mlflow: The imported mlflow module to use for logging.
|
|
54
|
+
|
|
55
|
+
Environment Variables:
|
|
56
|
+
MLFLOW_TRACKING_URI: The URI for MLflow tracking. If not set, defaults to 'runs/mlflow'.
|
|
57
|
+
MLFLOW_EXPERIMENT_NAME: The name of the MLflow experiment. If not set, defaults to trainer.args.project.
|
|
58
|
+
MLFLOW_RUN: The name of the MLflow run. If not set, defaults to trainer.args.name.
|
|
59
|
+
"""
|
|
60
|
+
global mlflow
|
|
61
|
+
|
|
62
|
+
uri = os.environ.get('MLFLOW_TRACKING_URI') or str(RUNS_DIR / 'mlflow')
|
|
63
|
+
LOGGER.debug(f'{PREFIX} tracking uri: {uri}')
|
|
64
|
+
mlflow.set_tracking_uri(uri)
|
|
65
|
+
|
|
66
|
+
# Set experiment and run names
|
|
67
|
+
experiment_name = os.environ.get('MLFLOW_EXPERIMENT_NAME') or trainer.args.project or '/Shared/YOLOv8'
|
|
68
|
+
run_name = os.environ.get('MLFLOW_RUN') or trainer.args.name
|
|
69
|
+
mlflow.set_experiment(experiment_name)
|
|
70
|
+
|
|
71
|
+
mlflow.autolog()
|
|
72
|
+
try:
|
|
73
|
+
active_run = mlflow.active_run() or mlflow.start_run(run_name=run_name)
|
|
74
|
+
LOGGER.info(f'{PREFIX}logging run_id({active_run.info.run_id}) to {uri}')
|
|
75
|
+
if Path(uri).is_dir():
|
|
76
|
+
LOGGER.info(f"{PREFIX}view at http://127.0.0.1:5000 with 'mlflow server --backend-store-uri {uri}'")
|
|
77
|
+
LOGGER.info(f"{PREFIX}disable with 'yolo settings mlflow=False'")
|
|
78
|
+
mlflow.log_params(dict(trainer.args))
|
|
79
|
+
except Exception as e:
|
|
80
|
+
LOGGER.warning(f'{PREFIX}WARNING ⚠️ Failed to initialize: {e}\n'
|
|
81
|
+
f'{PREFIX}WARNING ⚠️ Not tracking this run')
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def on_fit_epoch_end(trainer):
|
|
85
|
+
"""Log training metrics at the end of each fit epoch to MLflow."""
|
|
86
|
+
if mlflow:
|
|
87
|
+
sanitized_metrics = {k.replace('(', '').replace(')', ''): float(v) for k, v in trainer.metrics.items()}
|
|
88
|
+
mlflow.log_metrics(metrics=sanitized_metrics, step=trainer.epoch)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def on_train_end(trainer):
|
|
92
|
+
"""Log model artifacts at the end of the training."""
|
|
93
|
+
if mlflow:
|
|
94
|
+
mlflow.log_artifact(str(trainer.best.parent)) # log save_dir/weights directory with best.pt and last.pt
|
|
95
|
+
for f in trainer.save_dir.glob('*'): # log all other files in save_dir
|
|
96
|
+
if f.suffix in {'.png', '.jpg', '.csv', '.pt', '.yaml'}:
|
|
97
|
+
mlflow.log_artifact(str(f))
|
|
98
|
+
|
|
99
|
+
mlflow.end_run()
|
|
100
|
+
LOGGER.info(f'{PREFIX}results logged to {mlflow.get_tracking_uri()}\n'
|
|
101
|
+
f"{PREFIX}disable with 'yolo settings mlflow=False'")
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
callbacks = {
|
|
105
|
+
'on_pretrain_routine_end': on_pretrain_routine_end,
|
|
106
|
+
'on_fit_epoch_end': on_fit_epoch_end,
|
|
107
|
+
'on_train_end': on_train_end} if mlflow else {}
|
|
@@ -19,7 +19,7 @@ except (ImportError, AssertionError):
|
|
|
19
19
|
wb = None
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
def _custom_table(x, y, classes, title='Precision Recall Curve',
|
|
22
|
+
def _custom_table(x, y, classes, title='Precision Recall Curve', x_title='Recall', y_title='Precision'):
|
|
23
23
|
"""
|
|
24
24
|
Create and log a custom metric visualization to wandb.plot.pr_curve.
|
|
25
25
|
|
|
@@ -39,7 +39,7 @@ def _custom_table(x, y, classes, title='Precision Recall Curve', x_axis_title='R
|
|
|
39
39
|
"""
|
|
40
40
|
df = pd.DataFrame({'class': classes, 'y': y, 'x': x}).round(3)
|
|
41
41
|
fields = {'x': 'x', 'y': 'y', 'class': 'class'}
|
|
42
|
-
string_fields = {'title': title, 'x-axis-title':
|
|
42
|
+
string_fields = {'title': title, 'x-axis-title': x_title, 'y-axis-title': y_title}
|
|
43
43
|
return wb.plot_table('wandb/area-under-curve/v0',
|
|
44
44
|
wb.Table(dataframe=df),
|
|
45
45
|
fields=fields,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.198
|
|
4
4
|
Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Home-page: https://github.com/ultralytics/ultralytics
|
|
6
6
|
Author: Ultralytics
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
-
|
|
3
|
-
from ultralytics.utils import LOGGER, SETTINGS, TESTS_RUNNING, colorstr
|
|
4
|
-
|
|
5
|
-
try:
|
|
6
|
-
assert not TESTS_RUNNING # do not log pytest
|
|
7
|
-
assert SETTINGS['mlflow'] is True # verify integration is enabled
|
|
8
|
-
import mlflow
|
|
9
|
-
|
|
10
|
-
assert hasattr(mlflow, '__version__') # verify package is not directory
|
|
11
|
-
PREFIX = colorstr('MLFlow:')
|
|
12
|
-
import os
|
|
13
|
-
import re
|
|
14
|
-
|
|
15
|
-
except (ImportError, AssertionError):
|
|
16
|
-
mlflow = None
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def on_pretrain_routine_end(trainer):
|
|
20
|
-
"""Logs training parameters to MLflow."""
|
|
21
|
-
global mlflow, run, experiment_name
|
|
22
|
-
|
|
23
|
-
if os.environ.get('MLFLOW_TRACKING_URI') is None:
|
|
24
|
-
mlflow = None
|
|
25
|
-
|
|
26
|
-
if mlflow:
|
|
27
|
-
mlflow_location = os.environ['MLFLOW_TRACKING_URI'] # "http://192.168.xxx.xxx:5000"
|
|
28
|
-
LOGGER.debug(f'{PREFIX} tracking uri: {mlflow_location}')
|
|
29
|
-
mlflow.set_tracking_uri(mlflow_location)
|
|
30
|
-
experiment_name = os.environ.get('MLFLOW_EXPERIMENT_NAME') or trainer.args.project or '/Shared/YOLOv8'
|
|
31
|
-
run_name = os.environ.get('MLFLOW_RUN') or trainer.args.name
|
|
32
|
-
experiment = mlflow.set_experiment(experiment_name) # change since mlflow does this now by default
|
|
33
|
-
|
|
34
|
-
mlflow.autolog()
|
|
35
|
-
prefix = colorstr('MLFlow: ')
|
|
36
|
-
try:
|
|
37
|
-
run, active_run = mlflow, mlflow.active_run()
|
|
38
|
-
if not active_run:
|
|
39
|
-
active_run = mlflow.start_run(experiment_id=experiment.experiment_id, run_name=run_name)
|
|
40
|
-
LOGGER.info(f'{prefix}Using run_id({active_run.info.run_id}) at {mlflow_location}')
|
|
41
|
-
run.log_params(trainer.args)
|
|
42
|
-
except Exception as err:
|
|
43
|
-
LOGGER.error(f'{prefix}Failing init - {repr(err)}')
|
|
44
|
-
LOGGER.warning(f'{prefix}Continuing without Mlflow')
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
def on_fit_epoch_end(trainer):
|
|
48
|
-
"""Logs training metrics to Mlflow."""
|
|
49
|
-
if mlflow:
|
|
50
|
-
metrics_dict = {f"{re.sub('[()]', '', k)}": float(v) for k, v in trainer.metrics.items()}
|
|
51
|
-
run.log_metrics(metrics=metrics_dict, step=trainer.epoch)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def on_train_end(trainer):
|
|
55
|
-
"""Called at end of train loop to log model artifact info."""
|
|
56
|
-
if mlflow:
|
|
57
|
-
run.log_artifact(trainer.last)
|
|
58
|
-
run.log_artifact(trainer.best)
|
|
59
|
-
run.log_artifact(trainer.save_dir)
|
|
60
|
-
mlflow.end_run()
|
|
61
|
-
LOGGER.debug(f'{PREFIX} ending run')
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
callbacks = {
|
|
65
|
-
'on_pretrain_routine_end': on_pretrain_routine_end,
|
|
66
|
-
'on_fit_epoch_end': on_fit_epoch_end,
|
|
67
|
-
'on_train_end': on_train_end} if mlflow else {}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|