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.

Files changed (180) hide show
  1. {ultralytics-8.0.197/ultralytics.egg-info → ultralytics-8.0.198}/PKG-INFO +1 -1
  2. {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_cuda.py +3 -20
  3. ultralytics-8.0.198/tests/test_integrations.py +26 -0
  4. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/__init__.py +1 -1
  5. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/__init__.py +4 -5
  6. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/trainer.py +1 -0
  7. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/__init__.py +2 -1
  8. ultralytics-8.0.198/ultralytics/utils/callbacks/mlflow.py +107 -0
  9. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/wb.py +2 -2
  10. {ultralytics-8.0.197 → ultralytics-8.0.198/ultralytics.egg-info}/PKG-INFO +1 -1
  11. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/SOURCES.txt +1 -0
  12. ultralytics-8.0.197/ultralytics/utils/callbacks/mlflow.py +0 -67
  13. {ultralytics-8.0.197 → ultralytics-8.0.198}/CONTRIBUTING.md +0 -0
  14. {ultralytics-8.0.197 → ultralytics-8.0.198}/LICENSE +0 -0
  15. {ultralytics-8.0.197 → ultralytics-8.0.198}/MANIFEST.in +0 -0
  16. {ultralytics-8.0.197 → ultralytics-8.0.198}/README.md +0 -0
  17. {ultralytics-8.0.197 → ultralytics-8.0.198}/README.zh-CN.md +0 -0
  18. {ultralytics-8.0.197 → ultralytics-8.0.198}/requirements.txt +0 -0
  19. {ultralytics-8.0.197 → ultralytics-8.0.198}/setup.cfg +0 -0
  20. {ultralytics-8.0.197 → ultralytics-8.0.198}/setup.py +0 -0
  21. {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/conftest.py +0 -0
  22. {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_cli.py +0 -0
  23. {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_engine.py +0 -0
  24. {ultralytics-8.0.197 → ultralytics-8.0.198}/tests/test_python.py +0 -0
  25. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/assets/bus.jpg +0 -0
  26. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/assets/zidane.jpg +0 -0
  27. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  28. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/DOTAv2.yaml +0 -0
  29. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  30. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  31. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  32. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  33. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  34. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  35. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  36. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco.yaml +0 -0
  37. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  38. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  39. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  40. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  41. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  42. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  43. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  44. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/datasets/xView.yaml +0 -0
  45. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/default.yaml +0 -0
  46. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  47. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  48. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  49. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  50. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  51. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  52. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  53. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  54. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  55. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  56. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  57. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  58. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  59. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  60. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  61. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  62. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  63. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  64. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  65. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/__init__.py +0 -0
  66. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/annotator.py +0 -0
  67. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/augment.py +0 -0
  68. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/base.py +0 -0
  69. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/build.py +0 -0
  70. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/converter.py +0 -0
  71. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/dataset.py +0 -0
  72. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/loaders.py +0 -0
  73. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/data/utils.py +0 -0
  74. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/__init__.py +0 -0
  75. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/exporter.py +0 -0
  76. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/model.py +0 -0
  77. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/predictor.py +0 -0
  78. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/results.py +0 -0
  79. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/tuner.py +0 -0
  80. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/engine/validator.py +0 -0
  81. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/__init__.py +0 -0
  82. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/auth.py +0 -0
  83. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/session.py +0 -0
  84. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/hub/utils.py +0 -0
  85. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/__init__.py +0 -0
  86. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/__init__.py +0 -0
  87. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/model.py +0 -0
  88. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/predict.py +0 -0
  89. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/prompt.py +0 -0
  90. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/utils.py +0 -0
  91. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/fastsam/val.py +0 -0
  92. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/__init__.py +0 -0
  93. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/model.py +0 -0
  94. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/predict.py +0 -0
  95. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/nas/val.py +0 -0
  96. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/__init__.py +0 -0
  97. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/model.py +0 -0
  98. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/predict.py +0 -0
  99. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/train.py +0 -0
  100. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/rtdetr/val.py +0 -0
  101. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/__init__.py +0 -0
  102. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/amg.py +0 -0
  103. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/build.py +0 -0
  104. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/model.py +0 -0
  105. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/__init__.py +0 -0
  106. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/decoders.py +0 -0
  107. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/encoders.py +0 -0
  108. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/sam.py +0 -0
  109. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  110. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/modules/transformer.py +0 -0
  111. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/sam/predict.py +0 -0
  112. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/utils/__init__.py +0 -0
  113. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/utils/loss.py +0 -0
  114. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/utils/ops.py +0 -0
  115. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/__init__.py +0 -0
  116. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/__init__.py +0 -0
  117. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/predict.py +0 -0
  118. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/train.py +0 -0
  119. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/classify/val.py +0 -0
  120. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/__init__.py +0 -0
  121. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/predict.py +0 -0
  122. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/train.py +0 -0
  123. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/detect/val.py +0 -0
  124. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/model.py +0 -0
  125. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/__init__.py +0 -0
  126. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/predict.py +0 -0
  127. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/train.py +0 -0
  128. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/pose/val.py +0 -0
  129. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/__init__.py +0 -0
  130. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/predict.py +0 -0
  131. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/train.py +0 -0
  132. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/models/yolo/segment/val.py +0 -0
  133. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/__init__.py +0 -0
  134. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/autobackend.py +0 -0
  135. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/__init__.py +0 -0
  136. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/block.py +0 -0
  137. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/conv.py +0 -0
  138. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/head.py +0 -0
  139. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/transformer.py +0 -0
  140. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/modules/utils.py +0 -0
  141. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/nn/tasks.py +0 -0
  142. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/__init__.py +0 -0
  143. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/basetrack.py +0 -0
  144. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/bot_sort.py +0 -0
  145. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/byte_tracker.py +0 -0
  146. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/track.py +0 -0
  147. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/__init__.py +0 -0
  148. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/gmc.py +0 -0
  149. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  150. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/trackers/utils/matching.py +0 -0
  151. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/autobatch.py +0 -0
  152. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/benchmarks.py +0 -0
  153. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/__init__.py +0 -0
  154. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/base.py +0 -0
  155. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/clearml.py +0 -0
  156. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/comet.py +0 -0
  157. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/dvc.py +0 -0
  158. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/hub.py +0 -0
  159. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/neptune.py +0 -0
  160. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/raytune.py +0 -0
  161. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  162. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/checks.py +0 -0
  163. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/dist.py +0 -0
  164. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/downloads.py +0 -0
  165. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/errors.py +0 -0
  166. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/files.py +0 -0
  167. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/instance.py +0 -0
  168. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/loss.py +0 -0
  169. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/metrics.py +0 -0
  170. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/ops.py +0 -0
  171. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/patches.py +0 -0
  172. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/plotting.py +0 -0
  173. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/tal.py +0 -0
  174. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/torch_utils.py +0 -0
  175. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/triton.py +0 -0
  176. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics/utils/tuner.py +0 -0
  177. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/dependency_links.txt +0 -0
  178. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/entry_points.txt +0 -0
  179. {ultralytics-8.0.197 → ultralytics-8.0.198}/ultralytics.egg-info/requires.txt +0 -0
  180. {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.197
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')
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = '8.0.197'
3
+ __version__ = '8.0.198'
4
4
 
5
5
  from ultralytics.models import RTDETR, SAM, YOLO
6
6
  from ultralytics.models.fastsam import FastSAM
@@ -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, SETTINGS,
11
- SETTINGS_YAML, TESTS_RUNNING, IterableSimpleNamespace, __version__, checks, colorstr,
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', x_axis_title='Recall', y_axis_title='Precision'):
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': x_axis_title, 'y-axis-title': y_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.197
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
@@ -10,6 +10,7 @@ tests/conftest.py
10
10
  tests/test_cli.py
11
11
  tests/test_cuda.py
12
12
  tests/test_engine.py
13
+ tests/test_integrations.py
13
14
  tests/test_python.py
14
15
  ultralytics/__init__.py
15
16
  ultralytics.egg-info/PKG-INFO
@@ -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