ultralytics 8.0.66__tar.gz → 8.0.68__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 (131) hide show
  1. {ultralytics-8.0.66/ultralytics.egg-info → ultralytics-8.0.68}/PKG-INFO +11 -11
  2. {ultralytics-8.0.66 → ultralytics-8.0.68}/README.md +10 -10
  3. {ultralytics-8.0.66 → ultralytics-8.0.68}/README.zh-CN.md +10 -10
  4. {ultralytics-8.0.66 → ultralytics-8.0.68}/tests/test_engine.py +32 -0
  5. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/__init__.py +6 -4
  7. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/auth.py +6 -4
  8. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/session.py +1 -1
  9. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/utils.py +2 -2
  10. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/exporter.py +8 -3
  11. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/model.py +9 -11
  12. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/predictor.py +8 -3
  13. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/trainer.py +4 -5
  14. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/validator.py +8 -3
  15. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/__init__.py +16 -5
  16. ultralytics-8.0.68/ultralytics/yolo/utils/callbacks/__init__.py +3 -0
  17. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/base.py +6 -0
  18. ultralytics-8.0.68/ultralytics/yolo/utils/callbacks/clearml.py +127 -0
  19. ultralytics-8.0.68/ultralytics/yolo/utils/callbacks/comet.py +324 -0
  20. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/checks.py +5 -5
  21. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/downloads.py +17 -9
  22. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/files.py +0 -7
  23. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/train.py +2 -2
  24. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/val.py +2 -2
  25. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/val.py +2 -2
  26. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/train.py +2 -2
  27. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/val.py +2 -2
  28. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/train.py +2 -2
  29. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/val.py +2 -2
  30. {ultralytics-8.0.66 → ultralytics-8.0.68/ultralytics.egg-info}/PKG-INFO +11 -11
  31. ultralytics-8.0.66/ultralytics/yolo/utils/callbacks/__init__.py +0 -3
  32. ultralytics-8.0.66/ultralytics/yolo/utils/callbacks/clearml.py +0 -60
  33. ultralytics-8.0.66/ultralytics/yolo/utils/callbacks/comet.py +0 -54
  34. {ultralytics-8.0.66 → ultralytics-8.0.68}/CONTRIBUTING.md +0 -0
  35. {ultralytics-8.0.66 → ultralytics-8.0.68}/LICENSE +0 -0
  36. {ultralytics-8.0.66 → ultralytics-8.0.68}/MANIFEST.in +0 -0
  37. {ultralytics-8.0.66 → ultralytics-8.0.68}/requirements.txt +0 -0
  38. {ultralytics-8.0.66 → ultralytics-8.0.68}/setup.cfg +0 -0
  39. {ultralytics-8.0.66 → ultralytics-8.0.68}/setup.py +0 -0
  40. {ultralytics-8.0.66 → ultralytics-8.0.68}/tests/test_cli.py +0 -0
  41. {ultralytics-8.0.66 → ultralytics-8.0.68}/tests/test_python.py +0 -0
  42. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/assets/bus.jpg +0 -0
  43. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/assets/zidane.jpg +0 -0
  44. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/Argoverse.yaml +0 -0
  45. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/GlobalWheat2020.yaml +0 -0
  46. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/ImageNet.yaml +0 -0
  47. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/Objects365.yaml +0 -0
  48. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/SKU-110K.yaml +0 -0
  49. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/VOC.yaml +0 -0
  50. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/VisDrone.yaml +0 -0
  51. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco-pose.yaml +0 -0
  52. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco.yaml +0 -0
  53. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco128-seg.yaml +0 -0
  54. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco128.yaml +0 -0
  55. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco8-pose.yaml +0 -0
  56. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco8-seg.yaml +0 -0
  57. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco8.yaml +0 -0
  58. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/xView.yaml +0 -0
  59. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/utils.py +0 -0
  60. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v3/yolov3-spp.yaml +0 -0
  61. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v3/yolov3-tiny.yaml +0 -0
  62. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v3/yolov3.yaml +0 -0
  63. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v5/yolov5-p6.yaml +0 -0
  64. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v5/yolov5.yaml +0 -0
  65. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-cls.yaml +0 -0
  66. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-p2.yaml +0 -0
  67. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-p6.yaml +0 -0
  68. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-pose-p6.yaml +0 -0
  69. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-pose.yaml +0 -0
  70. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-seg.yaml +0 -0
  71. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8.yaml +0 -0
  72. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/__init__.py +0 -0
  73. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/autobackend.py +0 -0
  74. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/autoshape.py +0 -0
  75. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/modules.py +0 -0
  76. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/tasks.py +0 -0
  77. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/__init__.py +0 -0
  78. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/cfg/botsort.yaml +0 -0
  79. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/cfg/bytetrack.yaml +0 -0
  80. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/track.py +0 -0
  81. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/__init__.py +0 -0
  82. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/basetrack.py +0 -0
  83. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/bot_sort.py +0 -0
  84. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/byte_tracker.py +0 -0
  85. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/__init__.py +0 -0
  86. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/gmc.py +0 -0
  87. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/kalman_filter.py +0 -0
  88. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/matching.py +0 -0
  89. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/__init__.py +0 -0
  90. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/cfg/__init__.py +0 -0
  91. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/cfg/default.yaml +0 -0
  92. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/__init__.py +0 -0
  93. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/augment.py +0 -0
  94. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/base.py +0 -0
  95. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/build.py +0 -0
  96. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/__init__.py +0 -0
  97. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/stream_loaders.py +0 -0
  98. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/v5augmentations.py +0 -0
  99. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/v5loader.py +0 -0
  100. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataset.py +0 -0
  101. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataset_wrappers.py +0 -0
  102. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/__init__.py +0 -0
  103. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/results.py +0 -0
  104. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/autobatch.py +0 -0
  105. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/benchmarks.py +0 -0
  106. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/hub.py +0 -0
  107. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/mlflow.py +0 -0
  108. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/tensorboard.py +0 -0
  109. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/dist.py +0 -0
  110. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/instance.py +0 -0
  111. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/loss.py +0 -0
  112. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/metrics.py +0 -0
  113. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/ops.py +0 -0
  114. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/plotting.py +0 -0
  115. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/tal.py +0 -0
  116. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/torch_utils.py +0 -0
  117. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/__init__.py +0 -0
  118. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/__init__.py +0 -0
  119. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/predict.py +0 -0
  120. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/__init__.py +0 -0
  121. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/predict.py +0 -0
  122. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/train.py +0 -0
  123. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/__init__.py +0 -0
  124. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/predict.py +0 -0
  125. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/__init__.py +0 -0
  126. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/predict.py +0 -0
  127. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/SOURCES.txt +0 -0
  128. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/dependency_links.txt +0 -0
  129. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/entry_points.txt +0 -0
  130. {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/requires.txt +0 -0
  131. {ultralytics-8.0.66 → ultralytics-8.0.68}/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.66
3
+ Version: 8.0.68
4
4
  Summary: Ultralytics YOLOv8
5
5
  Home-page: https://github.com/ultralytics/ultralytics
6
6
  Author: Ultralytics
@@ -220,12 +220,12 @@ See [Pose Docs](https://docs.ultralytics.com/tasks/) for usage examples with the
220
220
 
221
221
  | Model | size<br><sup>(pixels) | mAP<sup>box<br>50-95 | mAP<sup>pose<br>50-95 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>A100 TensorRT<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
222
222
  | ---------------------------------------------------------------------------------------------------- | --------------------- | -------------------- | --------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
223
- | [YOLOv8n-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt) | 640 | - | 49.7 | - | - | 3.3 | 9.2 |
224
- | [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 | - | - | 11.6 | 30.2 |
225
- | [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 | - | - | 26.4 | 81.0 |
226
- | [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 | - | - | 44.4 | 168.6 |
227
- | [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 | - | - | 69.4 | 263.2 |
228
- | [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 | - | - | 99.1 | 1066.4 |
223
+ | [YOLOv8n-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt) | 640 | - | 49.7 | 131.8 | 1.18 | 3.3 | 9.2 |
224
+ | [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 | 233.2 | 1.42 | 11.6 | 30.2 |
225
+ | [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 | 456.3 | 2.00 | 26.4 | 81.0 |
226
+ | [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 | 784.5 | 2.59 | 44.4 | 168.6 |
227
+ | [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 | 1607.1 | 3.73 | 69.4 | 263.2 |
228
+ | [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 | 4088.7 | 10.04 | 99.1 | 1066.4 |
229
229
 
230
230
  - **mAP<sup>val</sup>** values are for single-model single-scale on [COCO Keypoints val2017](http://cocodataset.org)
231
231
  dataset.
@@ -251,16 +251,16 @@ See [Pose Docs](https://docs.ultralytics.com/tasks/) for usage examples with the
251
251
  <a href="https://cutt.ly/yolov5-readme-clearml">
252
252
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-clearml.png" width="10%" /></a>
253
253
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="15%" height="0" alt="" />
254
- <a href="https://bit.ly/yolov5-readme-comet2">
254
+ <a href="https://bit.ly/yolov8-readme-comet">
255
255
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-comet.png" width="10%" /></a>
256
256
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="15%" height="0" alt="" />
257
257
  <a href="https://bit.ly/yolov5-neuralmagic">
258
258
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-neuralmagic.png" width="10%" /></a>
259
259
  </div>
260
260
 
261
- | Roboflow | ClearML ⭐ NEW | Comet ⭐ NEW | Neural Magic ⭐ NEW |
262
- | :--------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------: |
263
- | Label and export your custom datasets directly to YOLOv8 for training with [Roboflow](https://roboflow.com/?ref=ultralytics) | Automatically track, visualize and even remotely train YOLOv8 using [ClearML](https://cutt.ly/yolov5-readme-clearml) (open-source!) | Free forever, [Comet](https://bit.ly/yolov5-readme-comet2) lets you save YOLOv8 models, resume training, and interactively visualize and debug predictions | Run YOLOv8 inference up to 6x faster with [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic) |
261
+ | Roboflow | ClearML ⭐ NEW | Comet ⭐ NEW | Neural Magic ⭐ NEW |
262
+ | :--------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------: |
263
+ | Label and export your custom datasets directly to YOLOv8 for training with [Roboflow](https://roboflow.com/?ref=ultralytics) | Automatically track, visualize and even remotely train YOLOv8 using [ClearML](https://cutt.ly/yolov5-readme-clearml) (open-source!) | Free forever, [Comet](https://bit.ly/yolov8-readme-comet) lets you save YOLOv8 models, resume training, and interactively visualize and debug predictions | Run YOLOv8 inference up to 6x faster with [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic) |
264
264
 
265
265
  ## <div align="center">Ultralytics HUB</div>
266
266
 
@@ -183,12 +183,12 @@ See [Pose Docs](https://docs.ultralytics.com/tasks/) for usage examples with the
183
183
 
184
184
  | Model | size<br><sup>(pixels) | mAP<sup>box<br>50-95 | mAP<sup>pose<br>50-95 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>A100 TensorRT<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
185
185
  | ---------------------------------------------------------------------------------------------------- | --------------------- | -------------------- | --------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
186
- | [YOLOv8n-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt) | 640 | - | 49.7 | - | - | 3.3 | 9.2 |
187
- | [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 | - | - | 11.6 | 30.2 |
188
- | [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 | - | - | 26.4 | 81.0 |
189
- | [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 | - | - | 44.4 | 168.6 |
190
- | [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 | - | - | 69.4 | 263.2 |
191
- | [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 | - | - | 99.1 | 1066.4 |
186
+ | [YOLOv8n-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt) | 640 | - | 49.7 | 131.8 | 1.18 | 3.3 | 9.2 |
187
+ | [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 | 233.2 | 1.42 | 11.6 | 30.2 |
188
+ | [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 | 456.3 | 2.00 | 26.4 | 81.0 |
189
+ | [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 | 784.5 | 2.59 | 44.4 | 168.6 |
190
+ | [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 | 1607.1 | 3.73 | 69.4 | 263.2 |
191
+ | [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 | 4088.7 | 10.04 | 99.1 | 1066.4 |
192
192
 
193
193
  - **mAP<sup>val</sup>** values are for single-model single-scale on [COCO Keypoints val2017](http://cocodataset.org)
194
194
  dataset.
@@ -214,16 +214,16 @@ See [Pose Docs](https://docs.ultralytics.com/tasks/) for usage examples with the
214
214
  <a href="https://cutt.ly/yolov5-readme-clearml">
215
215
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-clearml.png" width="10%" /></a>
216
216
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="15%" height="0" alt="" />
217
- <a href="https://bit.ly/yolov5-readme-comet2">
217
+ <a href="https://bit.ly/yolov8-readme-comet">
218
218
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-comet.png" width="10%" /></a>
219
219
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="15%" height="0" alt="" />
220
220
  <a href="https://bit.ly/yolov5-neuralmagic">
221
221
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-neuralmagic.png" width="10%" /></a>
222
222
  </div>
223
223
 
224
- | Roboflow | ClearML ⭐ NEW | Comet ⭐ NEW | Neural Magic ⭐ NEW |
225
- | :--------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------: |
226
- | Label and export your custom datasets directly to YOLOv8 for training with [Roboflow](https://roboflow.com/?ref=ultralytics) | Automatically track, visualize and even remotely train YOLOv8 using [ClearML](https://cutt.ly/yolov5-readme-clearml) (open-source!) | Free forever, [Comet](https://bit.ly/yolov5-readme-comet2) lets you save YOLOv8 models, resume training, and interactively visualize and debug predictions | Run YOLOv8 inference up to 6x faster with [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic) |
224
+ | Roboflow | ClearML ⭐ NEW | Comet ⭐ NEW | Neural Magic ⭐ NEW |
225
+ | :--------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------: |
226
+ | Label and export your custom datasets directly to YOLOv8 for training with [Roboflow](https://roboflow.com/?ref=ultralytics) | Automatically track, visualize and even remotely train YOLOv8 using [ClearML](https://cutt.ly/yolov5-readme-clearml) (open-source!) | Free forever, [Comet](https://bit.ly/yolov8-readme-comet) lets you save YOLOv8 models, resume training, and interactively visualize and debug predictions | Run YOLOv8 inference up to 6x faster with [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic) |
227
227
 
228
228
  ## <div align="center">Ultralytics HUB</div>
229
229
 
@@ -169,12 +169,12 @@ See [Pose Docs](https://docs.ultralytics.com/tasks/) for usage examples with the
169
169
 
170
170
  | Model | size<br><sup>(pixels) | mAP<sup>box<br>50-95 | mAP<sup>pose<br>50-95 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>A100 TensorRT<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
171
171
  | ---------------------------------------------------------------------------------------------------- | --------------------- | -------------------- | --------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
172
- | [YOLOv8n-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt) | 640 | - | 49.7 | - | - | 3.3 | 9.2 |
173
- | [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 | - | - | 11.6 | 30.2 |
174
- | [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 | - | - | 26.4 | 81.0 |
175
- | [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 | - | - | 44.4 | 168.6 |
176
- | [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 | - | - | 69.4 | 263.2 |
177
- | [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 | - | - | 99.1 | 1066.4 |
172
+ | [YOLOv8n-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt) | 640 | - | 49.7 | 131.8 | 1.18 | 3.3 | 9.2 |
173
+ | [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 | 233.2 | 1.42 | 11.6 | 30.2 |
174
+ | [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 | 456.3 | 2.00 | 26.4 | 81.0 |
175
+ | [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 | 784.5 | 2.59 | 44.4 | 168.6 |
176
+ | [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 | 1607.1 | 3.73 | 69.4 | 263.2 |
177
+ | [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 | 4088.7 | 10.04 | 99.1 | 1066.4 |
178
178
 
179
179
  - **mAP<sup>val</sup>** values are for single-model single-scale on [COCO Keypoints val2017](http://cocodataset.org)
180
180
  dataset.
@@ -200,16 +200,16 @@ See [Pose Docs](https://docs.ultralytics.com/tasks/) for usage examples with the
200
200
  <a href="https://cutt.ly/yolov5-readme-clearml">
201
201
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-clearml.png" width="10%" /></a>
202
202
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="15%" height="0" alt="" />
203
- <a href="https://bit.ly/yolov5-readme-comet2">
203
+ <a href="https://bit.ly/yolov8-readme-comet">
204
204
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-comet.png" width="10%" /></a>
205
205
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="15%" height="0" alt="" />
206
206
  <a href="https://bit.ly/yolov5-neuralmagic">
207
207
  <img src="https://github.com/ultralytics/assets/raw/main/partners/logo-neuralmagic.png" width="10%" /></a>
208
208
  </div>
209
209
 
210
- | Roboflow | ClearML ⭐ 新 | Comet ⭐ 新 | Neural Magic ⭐ 新 |
211
- | :--------------------------------------------------------------------------------: | :-------------------------------------------------------------------------: | :--------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------: |
212
- | 将您的自定义数据集进行标注并直接导出到 YOLOv8 以进行训练 [Roboflow](https://roboflow.com/?ref=ultralytics) | 自动跟踪、可视化甚至远程训练 YOLOv8 [ClearML](https://cutt.ly/yolov5-readme-clearml)(开源!) | 永远免费,[Comet](https://bit.ly/yolov5-readme-comet2)可让您保存 YOLOv8 模型、恢复训练以及交互式可视化和调试预测 | 使用 [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic),运行 YOLOv8 推理的速度最高可提高6倍 |
210
+ | Roboflow | ClearML ⭐ 新 | Comet ⭐ 新 | Neural Magic ⭐ 新 |
211
+ | :--------------------------------------------------------------------------------: | :-------------------------------------------------------------------------: | :-------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------: |
212
+ | 将您的自定义数据集进行标注并直接导出到 YOLOv8 以进行训练 [Roboflow](https://roboflow.com/?ref=ultralytics) | 自动跟踪、可视化甚至远程训练 YOLOv8 [ClearML](https://cutt.ly/yolov5-readme-clearml)(开源!) | 永远免费,[Comet](https://bit.ly/yolov8-readme-comet)可让您保存 YOLOv8 模型、恢复训练以及交互式可视化和调试预测 | 使用 [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic),运行 YOLOv8 推理的速度最高可提高6倍 |
213
213
 
214
214
  ## <div align="center">Ultralytics HUB</div>
215
215
 
@@ -2,7 +2,9 @@
2
2
 
3
3
  from pathlib import Path
4
4
 
5
+ from ultralytics import YOLO
5
6
  from ultralytics.yolo.cfg import get_cfg
7
+ from ultralytics.yolo.engine.exporter import Exporter
6
8
  from ultralytics.yolo.utils import DEFAULT_CFG, ROOT, SETTINGS
7
9
  from ultralytics.yolo.v8 import classify, detect, segment
8
10
 
@@ -14,20 +16,38 @@ MODEL = Path(SETTINGS['weights_dir']) / 'yolov8n'
14
16
  SOURCE = ROOT / 'assets'
15
17
 
16
18
 
19
+ def test_func(model=None):
20
+ print('callback test passed')
21
+
22
+
23
+ def test_export():
24
+ exporter = Exporter()
25
+ exporter.add_callback('on_export_start', test_func)
26
+ assert test_func in exporter.callbacks['on_export_start'], 'callback test failed'
27
+ f = exporter(model=YOLO(CFG_DET).model)
28
+ YOLO(f)(SOURCE) # exported model inference
29
+
30
+
17
31
  def test_detect():
18
32
  overrides = {'data': 'coco8.yaml', 'model': CFG_DET, 'imgsz': 32, 'epochs': 1, 'save': False}
19
33
  CFG.data = 'coco8.yaml'
20
34
 
21
35
  # Trainer
22
36
  trainer = detect.DetectionTrainer(overrides=overrides)
37
+ trainer.add_callback('on_train_start', test_func)
38
+ assert test_func in trainer.callbacks['on_train_start'], 'callback test failed'
23
39
  trainer.train()
24
40
 
25
41
  # Validator
26
42
  val = detect.DetectionValidator(args=CFG)
43
+ val.add_callback('on_val_start', test_func)
44
+ assert test_func in val.callbacks['on_val_start'], 'callback test failed'
27
45
  val(model=trainer.best) # validate best.pt
28
46
 
29
47
  # Predictor
30
48
  pred = detect.DetectionPredictor(overrides={'imgsz': [64, 64]})
49
+ pred.add_callback('on_predict_start', test_func)
50
+ assert test_func in pred.callbacks['on_predict_start'], 'callback test failed'
31
51
  result = pred(source=SOURCE, model=f'{MODEL}.pt')
32
52
  assert len(result), 'predictor test failed'
33
53
 
@@ -50,14 +70,20 @@ def test_segment():
50
70
 
51
71
  # trainer
52
72
  trainer = segment.SegmentationTrainer(overrides=overrides)
73
+ trainer.add_callback('on_train_start', test_func)
74
+ assert test_func in trainer.callbacks['on_train_start'], 'callback test failed'
53
75
  trainer.train()
54
76
 
55
77
  # Validator
56
78
  val = segment.SegmentationValidator(args=CFG)
79
+ val.add_callback('on_val_start', test_func)
80
+ assert test_func in val.callbacks['on_val_start'], 'callback test failed'
57
81
  val(model=trainer.best) # validate best.pt
58
82
 
59
83
  # Predictor
60
84
  pred = segment.SegmentationPredictor(overrides={'imgsz': [64, 64]})
85
+ pred.add_callback('on_predict_start', test_func)
86
+ assert test_func in pred.callbacks['on_predict_start'], 'callback test failed'
61
87
  result = pred(source=SOURCE, model=f'{MODEL}-seg.pt')
62
88
  assert len(result), 'predictor test failed'
63
89
 
@@ -81,13 +107,19 @@ def test_classify():
81
107
 
82
108
  # Trainer
83
109
  trainer = classify.ClassificationTrainer(overrides=overrides)
110
+ trainer.add_callback('on_train_start', test_func)
111
+ assert test_func in trainer.callbacks['on_train_start'], 'callback test failed'
84
112
  trainer.train()
85
113
 
86
114
  # Validator
87
115
  val = classify.ClassificationValidator(args=CFG)
116
+ val.add_callback('on_val_start', test_func)
117
+ assert test_func in val.callbacks['on_val_start'], 'callback test failed'
88
118
  val(model=trainer.best)
89
119
 
90
120
  # Predictor
91
121
  pred = classify.ClassificationPredictor(overrides={'imgsz': [64, 64]})
122
+ pred.add_callback('on_predict_start', test_func)
123
+ assert test_func in pred.callbacks['on_predict_start'], 'callback test failed'
92
124
  result = pred(source=SOURCE, model=trainer.best)
93
125
  assert len(result), 'predictor test failed'
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, GPL-3.0 license
2
2
 
3
- __version__ = '8.0.66'
3
+ __version__ = '8.0.68'
4
4
 
5
5
  from ultralytics.hub import start
6
6
  from ultralytics.yolo.engine.model import YOLO
@@ -3,7 +3,7 @@
3
3
  import requests
4
4
 
5
5
  from ultralytics.hub.utils import PREFIX, split_key
6
- from ultralytics.yolo.utils import LOGGER
6
+ from ultralytics.yolo.utils import LOGGER, SETTINGS, USER_CONFIG_DIR, yaml_save
7
7
 
8
8
 
9
9
  def login(api_key=''):
@@ -15,7 +15,7 @@ def login(api_key=''):
15
15
 
16
16
  Example:
17
17
  from ultralytics import hub
18
- hub.login('your_api_key')
18
+ hub.login('API_KEY')
19
19
  """
20
20
  from ultralytics.hub.auth import Auth
21
21
  Auth(api_key)
@@ -23,13 +23,15 @@ def login(api_key=''):
23
23
 
24
24
  def logout():
25
25
  """
26
- Logout Ultralytics HUB
26
+ Log out of Ultralytics HUB by removing the API key from the settings file. To log in again, use 'yolo hub login'.
27
27
 
28
28
  Example:
29
29
  from ultralytics import hub
30
30
  hub.logout()
31
31
  """
32
- LOGGER.warning('WARNING ⚠️ This method is not yet implemented.')
32
+ SETTINGS['api_key'] = ''
33
+ yaml_save(USER_CONFIG_DIR / 'settings.yaml', SETTINGS)
34
+ LOGGER.info(f"{PREFIX}logged out ✅. To log in again, use 'yolo hub login'.")
33
35
 
34
36
 
35
37
  def start(key=''):
@@ -11,7 +11,7 @@ API_KEY_URL = 'https://hub.ultralytics.com/settings?tab=api+keys'
11
11
  class Auth:
12
12
  id_token = api_key = model_key = False
13
13
 
14
- def __init__(self, api_key=''):
14
+ def __init__(self, api_key='', verbose=True):
15
15
  """
16
16
  Initialize the Auth class with an optional API key.
17
17
 
@@ -29,7 +29,8 @@ class Auth:
29
29
  # If the provided API key matches the API key in the SETTINGS
30
30
  if self.api_key == SETTINGS.get('api_key'):
31
31
  # Log that the user is already logged in
32
- LOGGER.info(f'{PREFIX}Authenticated ✅')
32
+ if verbose:
33
+ LOGGER.info(f'{PREFIX}Authenticated ✅')
33
34
  return
34
35
  else:
35
36
  # Attempt to authenticate with the provided API key
@@ -46,8 +47,9 @@ class Auth:
46
47
  if success:
47
48
  set_settings({'api_key': self.api_key})
48
49
  # Log that the new login was successful
49
- LOGGER.info(f'{PREFIX}New authentication successful ✅')
50
- else:
50
+ if verbose:
51
+ LOGGER.info(f'{PREFIX}New authentication successful ✅')
52
+ elif verbose:
51
53
  LOGGER.info(f'{PREFIX}Retrieve API key from {API_KEY_URL}')
52
54
 
53
55
  def request_api_key(self, max_attempts=3):
@@ -58,7 +58,7 @@ class HUBTrainingSession:
58
58
  raise ValueError(f'Invalid HUBTrainingSession input: {url}')
59
59
 
60
60
  # Authorize
61
- auth = Auth(key)
61
+ auth = Auth(key, verbose=False)
62
62
  self.agent_id = None # identifies which instance is communicating with server
63
63
  self.model_id = model_id
64
64
  self.model_url = f'https://hub.ultralytics.com/models/{model_id}'
@@ -17,7 +17,7 @@ from PIL import ExifTags, Image, ImageOps
17
17
  from tqdm import tqdm
18
18
 
19
19
  from ultralytics.nn.autobackend import check_class_names
20
- from ultralytics.yolo.utils import DATASETS_DIR, LOGGER, NUM_THREADS, ROOT, colorstr, emojis, yaml_load
20
+ from ultralytics.yolo.utils import DATASETS_DIR, LOGGER, NUM_THREADS, ROOT, clean_url, colorstr, emojis, yaml_load
21
21
  from ultralytics.yolo.utils.checks import check_file, check_font, is_ascii
22
22
  from ultralytics.yolo.utils.downloads import download, safe_download, unzip_file
23
23
  from ultralytics.yolo.utils.ops import segments2boxes
@@ -241,7 +241,7 @@ def check_det_dataset(dataset, autodownload=True):
241
241
  if val:
242
242
  val = [Path(x).resolve() for x in (val if isinstance(val, list) else [val])] # val path
243
243
  if not all(x.exists() for x in val):
244
- name = str(dataset).split('?')[0] # dataset name with URL auth stripped
244
+ name = clean_url(dataset) # dataset name with URL auth stripped
245
245
  m = f"\nDataset '{name}' images not found ⚠️, missing paths %s" % [str(x) for x in val if not x.exists()]
246
246
  if s and autodownload:
247
247
  LOGGER.warning(m)
@@ -53,7 +53,6 @@ import platform
53
53
  import subprocess
54
54
  import time
55
55
  import warnings
56
- from collections import defaultdict
57
56
  from copy import deepcopy
58
57
  from pathlib import Path
59
58
 
@@ -130,7 +129,7 @@ class Exporter:
130
129
  save_dir (Path): Directory to save results.
131
130
  """
132
131
 
133
- def __init__(self, cfg=DEFAULT_CFG, overrides=None):
132
+ def __init__(self, cfg=DEFAULT_CFG, overrides=None, _callbacks=None):
134
133
  """
135
134
  Initializes the Exporter class.
136
135
 
@@ -139,7 +138,7 @@ class Exporter:
139
138
  overrides (dict, optional): Configuration overrides. Defaults to None.
140
139
  """
141
140
  self.args = get_cfg(cfg, overrides)
142
- self.callbacks = defaultdict(list, callbacks.default_callbacks) # add callbacks
141
+ self.callbacks = _callbacks if _callbacks else callbacks.get_default_callbacks()
143
142
  callbacks.add_integration_callbacks(self)
144
143
 
145
144
  @smart_inference_mode()
@@ -854,6 +853,12 @@ class Exporter:
854
853
  LOGGER.info(f'{prefix} pipeline success')
855
854
  return model
856
855
 
856
+ def add_callback(self, event: str, callback):
857
+ """
858
+ Appends the given callback.
859
+ """
860
+ self.callbacks[event].append(callback)
861
+
857
862
  def run_callbacks(self, event: str):
858
863
  for callback in self.callbacks.get(event, []):
859
864
  callback(self)
@@ -78,7 +78,7 @@ class YOLO:
78
78
  task (Any, optional): Task type for the YOLO model. Defaults to None.
79
79
 
80
80
  """
81
- self._reset_callbacks()
81
+ self.callbacks = callbacks.get_default_callbacks()
82
82
  self.predictor = None # reuse predictor
83
83
  self.model = None # model object
84
84
  self.trainer = None # trainer object
@@ -238,7 +238,7 @@ class YOLO:
238
238
  overrides['save'] = kwargs.get('save', False) # not save files by default
239
239
  if not self.predictor:
240
240
  self.task = overrides.get('task') or self.task
241
- self.predictor = TASK_MAP[self.task][3](overrides=overrides)
241
+ self.predictor = TASK_MAP[self.task][3](overrides=overrides, _callbacks=self.callbacks)
242
242
  self.predictor.setup_model(model=self.model, verbose=is_cli)
243
243
  else: # only update args if predictor is already setup
244
244
  self.predictor.args = get_cfg(self.predictor.args, overrides)
@@ -277,7 +277,7 @@ class YOLO:
277
277
  args.imgsz = self.model.args['imgsz'] # use trained imgsz unless custom value is passed
278
278
  args.imgsz = check_imgsz(args.imgsz, max_dim=1)
279
279
 
280
- validator = TASK_MAP[self.task][2](args=args)
280
+ validator = TASK_MAP[self.task][2](args=args, _callbacks=self.callbacks)
281
281
  validator(model=self.model)
282
282
  self.metrics = validator.metrics
283
283
 
@@ -316,7 +316,7 @@ class YOLO:
316
316
  args.imgsz = self.model.args['imgsz'] # use trained imgsz unless custom value is passed
317
317
  if args.batch == DEFAULT_CFG.batch:
318
318
  args.batch = 1 # default to 1 if not modified
319
- return Exporter(overrides=args)(model=self.model)
319
+ return Exporter(overrides=args, _callbacks=self.callbacks)(model=self.model)
320
320
 
321
321
  def train(self, **kwargs):
322
322
  """
@@ -344,7 +344,7 @@ class YOLO:
344
344
  overrides['resume'] = self.ckpt_path
345
345
 
346
346
  self.task = overrides.get('task') or self.task
347
- self.trainer = TASK_MAP[self.task][1](overrides=overrides)
347
+ self.trainer = TASK_MAP[self.task][1](overrides=overrides, _callbacks=self.callbacks)
348
348
  if not overrides.get('resume'): # manually set model only if not resuming
349
349
  self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
350
350
  self.model = self.trainer.model
@@ -387,19 +387,17 @@ class YOLO:
387
387
  """
388
388
  return self.model.transforms if hasattr(self.model, 'transforms') else None
389
389
 
390
- @staticmethod
391
- def add_callback(event: str, func):
390
+ def add_callback(self, event: str, func):
392
391
  """
393
392
  Add callback
394
393
  """
395
- callbacks.default_callbacks[event].append(func)
394
+ self.callbacks[event].append(func)
396
395
 
397
396
  @staticmethod
398
397
  def _reset_ckpt_args(args):
399
398
  include = {'imgsz', 'data', 'task', 'single_cls'} # only remember these arguments when loading a PyTorch model
400
399
  return {k: v for k, v in args.items() if k in include}
401
400
 
402
- @staticmethod
403
- def _reset_callbacks():
401
+ def _reset_callbacks(self):
404
402
  for event in callbacks.default_callbacks.keys():
405
- callbacks.default_callbacks[event] = [callbacks.default_callbacks[event][0]]
403
+ self.callbacks[event] = [callbacks.default_callbacks[event][0]]
@@ -28,7 +28,6 @@ Usage - formats:
28
28
  yolov8n_paddle_model # PaddlePaddle
29
29
  """
30
30
  import platform
31
- from collections import defaultdict
32
31
  from pathlib import Path
33
32
 
34
33
  import cv2
@@ -75,7 +74,7 @@ class BasePredictor:
75
74
  data_path (str): Path to data.
76
75
  """
77
76
 
78
- def __init__(self, cfg=DEFAULT_CFG, overrides=None):
77
+ def __init__(self, cfg=DEFAULT_CFG, overrides=None, _callbacks=None):
79
78
  """
80
79
  Initializes the BasePredictor class.
81
80
 
@@ -104,7 +103,7 @@ class BasePredictor:
104
103
  self.data_path = None
105
104
  self.source_type = None
106
105
  self.batch = None
107
- self.callbacks = defaultdict(list, callbacks.default_callbacks) # add callbacks
106
+ self.callbacks = _callbacks if _callbacks else callbacks.get_default_callbacks()
108
107
  callbacks.add_integration_callbacks(self)
109
108
 
110
109
  def preprocess(self, img):
@@ -283,3 +282,9 @@ class BasePredictor:
283
282
  def run_callbacks(self, event: str):
284
283
  for callback in self.callbacks.get(event, []):
285
284
  callback(self)
285
+
286
+ def add_callback(self, event: str, func):
287
+ """
288
+ Add callback
289
+ """
290
+ self.callbacks[event].append(func)
@@ -8,7 +8,6 @@ Usage:
8
8
  import os
9
9
  import subprocess
10
10
  import time
11
- from collections import defaultdict
12
11
  from copy import deepcopy
13
12
  from datetime import datetime
14
13
  from pathlib import Path
@@ -26,7 +25,7 @@ from ultralytics.nn.tasks import attempt_load_one_weight, attempt_load_weights
26
25
  from ultralytics.yolo.cfg import get_cfg
27
26
  from ultralytics.yolo.data.utils import check_cls_dataset, check_det_dataset
28
27
  from ultralytics.yolo.utils import (DEFAULT_CFG, LOGGER, ONLINE, RANK, ROOT, SETTINGS, TQDM_BAR_FORMAT, __version__,
29
- callbacks, colorstr, emojis, yaml_save)
28
+ callbacks, clean_url, colorstr, emojis, yaml_save)
30
29
  from ultralytics.yolo.utils.autobatch import check_train_batch_size
31
30
  from ultralytics.yolo.utils.checks import check_file, check_imgsz, print_args
32
31
  from ultralytics.yolo.utils.dist import ddp_cleanup, generate_ddp_command
@@ -72,7 +71,7 @@ class BaseTrainer:
72
71
  csv (Path): Path to results CSV file.
73
72
  """
74
73
 
75
- def __init__(self, cfg=DEFAULT_CFG, overrides=None):
74
+ def __init__(self, cfg=DEFAULT_CFG, overrides=None, _callbacks=None):
76
75
  """
77
76
  Initializes the BaseTrainer class.
78
77
 
@@ -124,7 +123,7 @@ class BaseTrainer:
124
123
  if 'yaml_file' in self.data:
125
124
  self.args.data = self.data['yaml_file'] # for validating 'yolo train data=url.zip' usage
126
125
  except Exception as e:
127
- raise RuntimeError(emojis(f"Dataset '{self.args.data}' error ❌ {e}")) from e
126
+ raise RuntimeError(emojis(f"Dataset '{clean_url(self.args.data)}' error ❌ {e}")) from e
128
127
 
129
128
  self.trainset, self.testset = self.get_dataset(self.data)
130
129
  self.ema = None
@@ -143,7 +142,7 @@ class BaseTrainer:
143
142
  self.plot_idx = [0, 1, 2]
144
143
 
145
144
  # Callbacks
146
- self.callbacks = defaultdict(list, callbacks.default_callbacks) # add callbacks
145
+ self.callbacks = _callbacks if _callbacks else callbacks.get_default_callbacks()
147
146
  if RANK in (-1, 0):
148
147
  callbacks.add_integration_callbacks(self)
149
148
 
@@ -19,7 +19,6 @@ Usage - formats:
19
19
  yolov8n_paddle_model # PaddlePaddle
20
20
  """
21
21
  import json
22
- from collections import defaultdict
23
22
  from pathlib import Path
24
23
 
25
24
  import torch
@@ -55,7 +54,7 @@ class BaseValidator:
55
54
  save_dir (Path): Directory to save results.
56
55
  """
57
56
 
58
- def __init__(self, dataloader=None, save_dir=None, pbar=None, args=None):
57
+ def __init__(self, dataloader=None, save_dir=None, pbar=None, args=None, _callbacks=None):
59
58
  """
60
59
  Initializes a BaseValidator instance.
61
60
 
@@ -85,7 +84,7 @@ class BaseValidator:
85
84
  if self.args.conf is None:
86
85
  self.args.conf = 0.001 # default conf=0.001
87
86
 
88
- self.callbacks = defaultdict(list, callbacks.default_callbacks) # add callbacks
87
+ self.callbacks = _callbacks if _callbacks else callbacks.get_default_callbacks()
89
88
 
90
89
  @smart_inference_mode()
91
90
  def __call__(self, trainer=None, model=None):
@@ -195,6 +194,12 @@ class BaseValidator:
195
194
  LOGGER.info(f"Results saved to {colorstr('bold', self.save_dir)}")
196
195
  return stats
197
196
 
197
+ def add_callback(self, event: str, callback):
198
+ """
199
+ Appends the given callback.
200
+ """
201
+ self.callbacks[event].append(callback)
202
+
198
203
  def run_callbacks(self, event: str):
199
204
  for callback in self.callbacks.get(event, []):
200
205
  callback(self)
@@ -10,6 +10,7 @@ import subprocess
10
10
  import sys
11
11
  import tempfile
12
12
  import threading
13
+ import urllib
13
14
  import uuid
14
15
  from pathlib import Path
15
16
  from types import SimpleNamespace
@@ -165,7 +166,7 @@ class IterableSimpleNamespace(SimpleNamespace):
165
166
  def set_logging(name=LOGGING_NAME, verbose=True):
166
167
  # sets up logging for the given name
167
168
  rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings
168
- level = logging.INFO if verbose and rank in (-1, 0) else logging.ERROR
169
+ level = logging.INFO if verbose and rank in {-1, 0} else logging.ERROR
169
170
  logging.config.dictConfig({
170
171
  'version': 1,
171
172
  'disable_existing_loggers': False,
@@ -649,10 +650,20 @@ def set_settings(kwargs, file=USER_CONFIG_DIR / 'settings.yaml'):
649
650
 
650
651
  def deprecation_warn(arg, new_arg, version=None):
651
652
  if not version:
652
- version = float(__version__[0:3]) + 0.2 # deprecate after 2nd major release
653
- LOGGER.warning(
654
- f'WARNING: `{arg}` is deprecated and will be removed in upcoming major release {version}. Use `{new_arg}` instead'
655
- )
653
+ version = float(__version__[:3]) + 0.2 # deprecate after 2nd major release
654
+ LOGGER.warning(f"WARNING ⚠️ '{arg}' is deprecated and will be removed in 'ultralytics {version}' in the future. "
655
+ f"Please use '{new_arg}' instead.")
656
+
657
+
658
+ def clean_url(url):
659
+ # Strip auth from URL, i.e. https://url.com/file.txt?auth -> https://url.com/file.txt
660
+ url = str(Path(url)).replace(':/', '://') # Pathlib turns :// -> :/
661
+ return urllib.parse.unquote(url).split('?')[0] # '%2F' to '/', split https://url.com/file.txt?auth
662
+
663
+
664
+ def url2file(url):
665
+ # Convert URL to filename, i.e. https://url.com/file.txt?auth -> file.txt
666
+ return Path(clean_url(url)).name
656
667
 
657
668
 
658
669
  # Run below code on yolo/utils init ------------------------------------------------------------------------------------
@@ -0,0 +1,3 @@
1
+ from .base import add_integration_callbacks, default_callbacks, get_default_callbacks
2
+
3
+ __all__ = 'add_integration_callbacks', 'default_callbacks', 'get_default_callbacks'