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.
- {ultralytics-8.0.66/ultralytics.egg-info → ultralytics-8.0.68}/PKG-INFO +11 -11
- {ultralytics-8.0.66 → ultralytics-8.0.68}/README.md +10 -10
- {ultralytics-8.0.66 → ultralytics-8.0.68}/README.zh-CN.md +10 -10
- {ultralytics-8.0.66 → ultralytics-8.0.68}/tests/test_engine.py +32 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/__init__.py +1 -1
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/__init__.py +6 -4
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/auth.py +6 -4
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/session.py +1 -1
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/utils.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/exporter.py +8 -3
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/model.py +9 -11
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/predictor.py +8 -3
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/trainer.py +4 -5
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/validator.py +8 -3
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/__init__.py +16 -5
- ultralytics-8.0.68/ultralytics/yolo/utils/callbacks/__init__.py +3 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/base.py +6 -0
- ultralytics-8.0.68/ultralytics/yolo/utils/callbacks/clearml.py +127 -0
- ultralytics-8.0.68/ultralytics/yolo/utils/callbacks/comet.py +324 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/checks.py +5 -5
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/downloads.py +17 -9
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/files.py +0 -7
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/train.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/val.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/val.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/train.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/val.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/train.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/val.py +2 -2
- {ultralytics-8.0.66 → ultralytics-8.0.68/ultralytics.egg-info}/PKG-INFO +11 -11
- ultralytics-8.0.66/ultralytics/yolo/utils/callbacks/__init__.py +0 -3
- ultralytics-8.0.66/ultralytics/yolo/utils/callbacks/clearml.py +0 -60
- ultralytics-8.0.66/ultralytics/yolo/utils/callbacks/comet.py +0 -54
- {ultralytics-8.0.66 → ultralytics-8.0.68}/CONTRIBUTING.md +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/LICENSE +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/MANIFEST.in +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/requirements.txt +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/setup.cfg +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/setup.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/tests/test_cli.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/tests/test_python.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/Objects365.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/VOC.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco128.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/coco8.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/datasets/xView.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/autoshape.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/modules.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/cfg/botsort.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/cfg/bytetrack.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/track.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/basetrack.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/bot_sort.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/trackers/byte_tracker.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/gmc.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/kalman_filter.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/tracker/utils/matching.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/cfg/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/cfg/default.yaml +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/augment.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/base.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/build.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/stream_loaders.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/v5augmentations.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataloaders/v5loader.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataset.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/data/dataset_wrappers.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/engine/results.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/autobatch.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/benchmarks.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/hub.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/dist.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/instance.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/loss.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/metrics.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/ops.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/plotting.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/tal.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/utils/torch_utils.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/classify/predict.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/predict.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/detect/train.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/pose/predict.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/__init__.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics/yolo/v8/segment/predict.py +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.0.66 → ultralytics-8.0.68}/ultralytics.egg-info/requires.txt +0 -0
- {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.
|
|
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 |
|
|
224
|
-
| [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 |
|
|
225
|
-
| [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 |
|
|
226
|
-
| [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 |
|
|
227
|
-
| [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 |
|
|
228
|
-
| [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 |
|
|
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/
|
|
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
|
|
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/
|
|
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 |
|
|
187
|
-
| [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 |
|
|
188
|
-
| [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 |
|
|
189
|
-
| [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 |
|
|
190
|
-
| [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 |
|
|
191
|
-
| [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 |
|
|
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/
|
|
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
|
|
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/
|
|
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 |
|
|
173
|
-
| [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | - | 59.2 |
|
|
174
|
-
| [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | - | 63.6 |
|
|
175
|
-
| [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | - | 67.0 |
|
|
176
|
-
| [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | - | 68.9 |
|
|
177
|
-
| [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | - | 71.5 |
|
|
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/
|
|
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 ⭐ 新
|
|
211
|
-
| :--------------------------------------------------------------------------------: | :-------------------------------------------------------------------------: |
|
|
212
|
-
| 将您的自定义数据集进行标注并直接导出到 YOLOv8 以进行训练 [Roboflow](https://roboflow.com/?ref=ultralytics) | 自动跟踪、可视化甚至远程训练 YOLOv8 [ClearML](https://cutt.ly/yolov5-readme-clearml)(开源!) | 永远免费,[Comet](https://bit.ly/
|
|
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'
|
|
@@ -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('
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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 =
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
403
|
-
def _reset_callbacks():
|
|
401
|
+
def _reset_callbacks(self):
|
|
404
402
|
for event in callbacks.default_callbacks.keys():
|
|
405
|
-
callbacks
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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__[
|
|
653
|
-
LOGGER.warning(
|
|
654
|
-
|
|
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 ------------------------------------------------------------------------------------
|