ultralytics 8.2.39__tar.gz → 8.2.41__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.2.39 → ultralytics-8.2.41}/PKG-INFO +3 -5
- {ultralytics-8.2.39 → ultralytics-8.2.41}/pyproject.toml +2 -4
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/__init__.py +1 -1
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/model.py +3 -26
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/trainer.py +6 -1
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/__init__.py +17 -2
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/session.py +43 -26
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/hub.py +9 -2
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/dist.py +1 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/downloads.py +7 -5
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/torch_utils.py +2 -2
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/PKG-INFO +3 -5
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/requires.txt +2 -4
- {ultralytics-8.2.39 → ultralytics-8.2.41}/LICENSE +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/README.md +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/setup.cfg +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/conftest.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_cli.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_cuda.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_engine.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_explorer.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_exports.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_integrations.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_python.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/base.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/build.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/explorer.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/gui/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/gui/dash.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/utils.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/exporter.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/prompt.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.2.39 → ultralytics-8.2.41}/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.2.
|
|
3
|
+
Version: 8.2.41
|
|
4
4
|
Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
6
6
|
Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
@@ -30,7 +30,7 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
|
30
30
|
Requires-Python: >=3.8
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
32
|
License-File: LICENSE
|
|
33
|
-
Requires-Dist: numpy<2.0.0
|
|
33
|
+
Requires-Dist: numpy<2.0.0,>=1.23.5
|
|
34
34
|
Requires-Dist: matplotlib>=3.3.0
|
|
35
35
|
Requires-Dist: opencv-python>=4.6.0
|
|
36
36
|
Requires-Dist: pillow>=7.1.2
|
|
@@ -47,8 +47,6 @@ Requires-Dist: seaborn>=0.11.0
|
|
|
47
47
|
Requires-Dist: ultralytics-thop>=2.0.0
|
|
48
48
|
Provides-Extra: dev
|
|
49
49
|
Requires-Dist: ipython; extra == "dev"
|
|
50
|
-
Requires-Dist: check-manifest; extra == "dev"
|
|
51
|
-
Requires-Dist: pre-commit; extra == "dev"
|
|
52
50
|
Requires-Dist: pytest; extra == "dev"
|
|
53
51
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
54
52
|
Requires-Dist: coverage[toml]; extra == "dev"
|
|
@@ -77,7 +75,7 @@ Requires-Dist: comet; extra == "logging"
|
|
|
77
75
|
Requires-Dist: tensorboard>=2.13.0; extra == "logging"
|
|
78
76
|
Requires-Dist: dvclive>=2.12.0; extra == "logging"
|
|
79
77
|
Provides-Extra: extra
|
|
80
|
-
Requires-Dist: hub-sdk>=0.0.
|
|
78
|
+
Requires-Dist: hub-sdk>=0.0.8; extra == "extra"
|
|
81
79
|
Requires-Dist: ipython; extra == "extra"
|
|
82
80
|
Requires-Dist: albumentations>=1.4.6; extra == "extra"
|
|
83
81
|
Requires-Dist: pycocotools>=2.0.7; extra == "extra"
|
|
@@ -64,7 +64,7 @@ classifiers = [
|
|
|
64
64
|
|
|
65
65
|
# Required dependencies ------------------------------------------------------------------------------------------------
|
|
66
66
|
dependencies = [
|
|
67
|
-
"numpy
|
|
67
|
+
"numpy>=1.23.5,<2.0.0", # temporary patch for compat errors https://github.com/ultralytics/yolov5/actions/runs/9538130424/job/26286956354
|
|
68
68
|
"matplotlib>=3.3.0",
|
|
69
69
|
"opencv-python>=4.6.0",
|
|
70
70
|
"pillow>=7.1.2",
|
|
@@ -85,8 +85,6 @@ dependencies = [
|
|
|
85
85
|
[project.optional-dependencies]
|
|
86
86
|
dev = [
|
|
87
87
|
"ipython",
|
|
88
|
-
"check-manifest",
|
|
89
|
-
"pre-commit",
|
|
90
88
|
"pytest",
|
|
91
89
|
"pytest-cov",
|
|
92
90
|
"coverage[toml]",
|
|
@@ -119,7 +117,7 @@ logging = [
|
|
|
119
117
|
"dvclive>=2.12.0",
|
|
120
118
|
]
|
|
121
119
|
extra = [
|
|
122
|
-
"hub-sdk>=0.0.
|
|
120
|
+
"hub-sdk>=0.0.8", # Ultralytics HUB
|
|
123
121
|
"ipython", # interactive notebook
|
|
124
122
|
"albumentations>=1.4.6", # training augmentations
|
|
125
123
|
"pycocotools>=2.0.7", # COCO mAP
|
|
@@ -9,7 +9,7 @@ import torch
|
|
|
9
9
|
|
|
10
10
|
from ultralytics.cfg import TASK2DATA, get_cfg, get_save_dir
|
|
11
11
|
from ultralytics.engine.results import Results
|
|
12
|
-
from ultralytics.hub
|
|
12
|
+
from ultralytics.hub import HUB_WEB_ROOT, HUBTrainingSession
|
|
13
13
|
from ultralytics.nn.tasks import attempt_load_one_weight, guess_model_task, nn, yaml_model_load
|
|
14
14
|
from ultralytics.utils import (
|
|
15
15
|
ARGV,
|
|
@@ -17,7 +17,6 @@ from ultralytics.utils import (
|
|
|
17
17
|
DEFAULT_CFG_DICT,
|
|
18
18
|
LOGGER,
|
|
19
19
|
RANK,
|
|
20
|
-
SETTINGS,
|
|
21
20
|
callbacks,
|
|
22
21
|
checks,
|
|
23
22
|
emojis,
|
|
@@ -76,7 +75,6 @@ class Model(nn.Module):
|
|
|
76
75
|
add_callback: Adds a callback function for an event.
|
|
77
76
|
clear_callback: Clears all callbacks for an event.
|
|
78
77
|
reset_callbacks: Resets all callbacks to their default functions.
|
|
79
|
-
_get_hub_session: Retrieves or creates an Ultralytics HUB session.
|
|
80
78
|
is_triton_model: Checks if a model is a Triton Server model.
|
|
81
79
|
is_hub_model: Checks if a model is an Ultralytics HUB model.
|
|
82
80
|
_reset_ckpt_args: Resets checkpoint arguments when loading a PyTorch model.
|
|
@@ -135,8 +133,8 @@ class Model(nn.Module):
|
|
|
135
133
|
# Check if Ultralytics HUB model from https://hub.ultralytics.com
|
|
136
134
|
if self.is_hub_model(model):
|
|
137
135
|
# Fetch model from HUB
|
|
138
|
-
checks.check_requirements("hub-sdk>=0.0.
|
|
139
|
-
self.session =
|
|
136
|
+
checks.check_requirements("hub-sdk>=0.0.8")
|
|
137
|
+
self.session = HUBTrainingSession.create_session(model)
|
|
140
138
|
model = self.session.model_file
|
|
141
139
|
|
|
142
140
|
# Check if Triton Server model
|
|
@@ -175,14 +173,6 @@ class Model(nn.Module):
|
|
|
175
173
|
"""
|
|
176
174
|
return self.predict(source, stream, **kwargs)
|
|
177
175
|
|
|
178
|
-
@staticmethod
|
|
179
|
-
def _get_hub_session(model: str):
|
|
180
|
-
"""Creates a session for Hub Training."""
|
|
181
|
-
from ultralytics.hub.session import HUBTrainingSession
|
|
182
|
-
|
|
183
|
-
session = HUBTrainingSession(model)
|
|
184
|
-
return session if session.client.authenticated else None
|
|
185
|
-
|
|
186
176
|
@staticmethod
|
|
187
177
|
def is_triton_model(model: str) -> bool:
|
|
188
178
|
"""Is model a Triton Server URL string, i.e. <scheme>://<netloc>/<endpoint>/<task_name>"""
|
|
@@ -656,19 +646,6 @@ class Model(nn.Module):
|
|
|
656
646
|
self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
|
|
657
647
|
self.model = self.trainer.model
|
|
658
648
|
|
|
659
|
-
if SETTINGS["hub"] is True and not self.session:
|
|
660
|
-
# Create a model in HUB
|
|
661
|
-
try:
|
|
662
|
-
self.session = self._get_hub_session(self.model_name)
|
|
663
|
-
if self.session:
|
|
664
|
-
self.session.create_model(args)
|
|
665
|
-
# Check model was created
|
|
666
|
-
if not getattr(self.session.model, "id", None):
|
|
667
|
-
self.session = None
|
|
668
|
-
except (PermissionError, ModuleNotFoundError):
|
|
669
|
-
# Ignore PermissionError and ModuleNotFoundError which indicates hub-sdk not installed
|
|
670
|
-
pass
|
|
671
|
-
|
|
672
649
|
self.trainer.hub_session = self.session # attach optional HUB session
|
|
673
650
|
self.trainer.train()
|
|
674
651
|
# Update model and cfg after training
|
|
@@ -48,6 +48,7 @@ from ultralytics.utils.torch_utils import (
|
|
|
48
48
|
one_cycle,
|
|
49
49
|
select_device,
|
|
50
50
|
strip_optimizer,
|
|
51
|
+
torch_distributed_zero_first,
|
|
51
52
|
)
|
|
52
53
|
|
|
53
54
|
|
|
@@ -127,7 +128,8 @@ class BaseTrainer:
|
|
|
127
128
|
|
|
128
129
|
# Model and Dataset
|
|
129
130
|
self.model = check_model_file_from_stem(self.args.model) # add suffix, i.e. yolov8n -> yolov8n.pt
|
|
130
|
-
|
|
131
|
+
with torch_distributed_zero_first(RANK): # avoid auto-downloading dataset multiple times
|
|
132
|
+
self.trainset, self.testset = self.get_dataset()
|
|
131
133
|
self.ema = None
|
|
132
134
|
|
|
133
135
|
# Optimization utils init
|
|
@@ -143,6 +145,9 @@ class BaseTrainer:
|
|
|
143
145
|
self.csv = self.save_dir / "results.csv"
|
|
144
146
|
self.plot_idx = [0, 1, 2]
|
|
145
147
|
|
|
148
|
+
# HUB
|
|
149
|
+
self.hub_session = None
|
|
150
|
+
|
|
146
151
|
# Callbacks
|
|
147
152
|
self.callbacks = _callbacks or callbacks.get_default_callbacks()
|
|
148
153
|
if RANK in {-1, 0}:
|
|
@@ -4,9 +4,24 @@ import requests
|
|
|
4
4
|
|
|
5
5
|
from ultralytics.data.utils import HUBDatasetStats
|
|
6
6
|
from ultralytics.hub.auth import Auth
|
|
7
|
-
from ultralytics.hub.
|
|
7
|
+
from ultralytics.hub.session import HUBTrainingSession
|
|
8
|
+
from ultralytics.hub.utils import HUB_API_ROOT, HUB_WEB_ROOT, PREFIX, events
|
|
8
9
|
from ultralytics.utils import LOGGER, SETTINGS, checks
|
|
9
10
|
|
|
11
|
+
__all__ = (
|
|
12
|
+
"PREFIX",
|
|
13
|
+
"HUB_WEB_ROOT",
|
|
14
|
+
"HUBTrainingSession",
|
|
15
|
+
"login",
|
|
16
|
+
"logout",
|
|
17
|
+
"reset_model",
|
|
18
|
+
"export_fmts_hub",
|
|
19
|
+
"export_model",
|
|
20
|
+
"get_export",
|
|
21
|
+
"check_dataset",
|
|
22
|
+
"events",
|
|
23
|
+
)
|
|
24
|
+
|
|
10
25
|
|
|
11
26
|
def login(api_key: str = None, save=True) -> bool:
|
|
12
27
|
"""
|
|
@@ -23,7 +38,7 @@ def login(api_key: str = None, save=True) -> bool:
|
|
|
23
38
|
Returns:
|
|
24
39
|
(bool): True if authentication is successful, False otherwise.
|
|
25
40
|
"""
|
|
26
|
-
checks.check_requirements("hub-sdk>=0.0.
|
|
41
|
+
checks.check_requirements("hub-sdk>=0.0.8")
|
|
27
42
|
from hub_sdk import HUBClient
|
|
28
43
|
|
|
29
44
|
api_key_url = f"{HUB_WEB_ROOT}/settings?tab=api+keys" # set the redirect URL
|
|
@@ -19,16 +19,12 @@ class HUBTrainingSession:
|
|
|
19
19
|
HUB training session for Ultralytics HUB YOLO models. Handles model initialization, heartbeats, and checkpointing.
|
|
20
20
|
|
|
21
21
|
Attributes:
|
|
22
|
-
agent_id (str): Identifier for the instance communicating with the server.
|
|
23
22
|
model_id (str): Identifier for the YOLO model being trained.
|
|
24
23
|
model_url (str): URL for the model in Ultralytics HUB.
|
|
25
|
-
api_url (str): API URL for the model in Ultralytics HUB.
|
|
26
|
-
auth_header (dict): Authentication header for the Ultralytics HUB API requests.
|
|
27
24
|
rate_limits (dict): Rate limits for different API calls (in seconds).
|
|
28
25
|
timers (dict): Timers for rate limiting.
|
|
29
26
|
metrics_queue (dict): Queue for the model's metrics.
|
|
30
27
|
model (dict): Model data fetched from Ultralytics HUB.
|
|
31
|
-
alive (bool): Indicates if the heartbeat loop is active.
|
|
32
28
|
"""
|
|
33
29
|
|
|
34
30
|
def __init__(self, identifier):
|
|
@@ -46,14 +42,12 @@ class HUBTrainingSession:
|
|
|
46
42
|
"""
|
|
47
43
|
from hub_sdk import HUBClient
|
|
48
44
|
|
|
49
|
-
self.rate_limits = {
|
|
50
|
-
"metrics": 3.0,
|
|
51
|
-
"ckpt": 900.0,
|
|
52
|
-
"heartbeat": 300.0,
|
|
53
|
-
} # rate limits (seconds)
|
|
45
|
+
self.rate_limits = {"metrics": 3, "ckpt": 900, "heartbeat": 300} # rate limits (seconds)
|
|
54
46
|
self.metrics_queue = {} # holds metrics for each epoch until upload
|
|
55
47
|
self.metrics_upload_failed_queue = {} # holds metrics for each epoch if upload failed
|
|
56
48
|
self.timers = {} # holds timers in ultralytics/utils/callbacks/hub.py
|
|
49
|
+
self.model = None
|
|
50
|
+
self.model_url = None
|
|
57
51
|
|
|
58
52
|
# Parse input
|
|
59
53
|
api_key, model_id, self.filename = self._parse_identifier(identifier)
|
|
@@ -65,10 +59,30 @@ class HUBTrainingSession:
|
|
|
65
59
|
# Initialize client
|
|
66
60
|
self.client = HUBClient(credentials)
|
|
67
61
|
|
|
68
|
-
if
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
# Load models if authenticated
|
|
63
|
+
if self.client.authenticated:
|
|
64
|
+
if model_id:
|
|
65
|
+
self.load_model(model_id) # load existing model
|
|
66
|
+
else:
|
|
67
|
+
self.model = self.client.model() # load empty model
|
|
68
|
+
|
|
69
|
+
@classmethod
|
|
70
|
+
def create_session(cls, identifier, args=None):
|
|
71
|
+
"""Class method to create an authenticated HUBTrainingSession or return None."""
|
|
72
|
+
try:
|
|
73
|
+
session = cls(identifier)
|
|
74
|
+
if not session.client.authenticated:
|
|
75
|
+
if identifier.startswith(f"{HUB_WEB_ROOT}/models/"):
|
|
76
|
+
LOGGER.warning(f"{PREFIX}WARNING ⚠️ Login to Ultralytics HUB with 'yolo hub login API_KEY'.")
|
|
77
|
+
exit()
|
|
78
|
+
return None
|
|
79
|
+
if args and not identifier.startswith(f"{HUB_WEB_ROOT}/models/"): # not a HUB model URL
|
|
80
|
+
session.create_model(args)
|
|
81
|
+
assert session.model.id, "HUB model not loaded correctly"
|
|
82
|
+
return session
|
|
83
|
+
# PermissionError and ModuleNotFoundError indicate hub-sdk not installed
|
|
84
|
+
except (PermissionError, ModuleNotFoundError, AssertionError):
|
|
85
|
+
return None
|
|
72
86
|
|
|
73
87
|
def load_model(self, model_id):
|
|
74
88
|
"""Loads an existing model from Ultralytics HUB using the provided model identifier."""
|
|
@@ -92,14 +106,12 @@ class HUBTrainingSession:
|
|
|
92
106
|
"epochs": model_args.get("epochs", 300),
|
|
93
107
|
"imageSize": model_args.get("imgsz", 640),
|
|
94
108
|
"patience": model_args.get("patience", 100),
|
|
95
|
-
"device": model_args.get("device", ""),
|
|
96
|
-
"cache": model_args.get("cache", "ram"),
|
|
109
|
+
"device": str(model_args.get("device", "")), # convert None to string
|
|
110
|
+
"cache": str(model_args.get("cache", "ram")), # convert True, False, None to string
|
|
97
111
|
},
|
|
98
112
|
"dataset": {"name": model_args.get("data")},
|
|
99
113
|
"lineage": {
|
|
100
|
-
"architecture": {
|
|
101
|
-
"name": self.filename.replace(".pt", "").replace(".yaml", ""),
|
|
102
|
-
},
|
|
114
|
+
"architecture": {"name": self.filename.replace(".pt", "").replace(".yaml", "")},
|
|
103
115
|
"parent": {},
|
|
104
116
|
},
|
|
105
117
|
"meta": {"name": self.filename},
|
|
@@ -113,7 +125,7 @@ class HUBTrainingSession:
|
|
|
113
125
|
# Model could not be created
|
|
114
126
|
# TODO: improve error handling
|
|
115
127
|
if not self.model.id:
|
|
116
|
-
return
|
|
128
|
+
return None
|
|
117
129
|
|
|
118
130
|
self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
|
|
119
131
|
|
|
@@ -122,7 +134,8 @@ class HUBTrainingSession:
|
|
|
122
134
|
|
|
123
135
|
LOGGER.info(f"{PREFIX}View model at {self.model_url} 🚀")
|
|
124
136
|
|
|
125
|
-
|
|
137
|
+
@staticmethod
|
|
138
|
+
def _parse_identifier(identifier):
|
|
126
139
|
"""
|
|
127
140
|
Parses the given identifier to determine the type of identifier and extract relevant components.
|
|
128
141
|
|
|
@@ -213,13 +226,14 @@ class HUBTrainingSession:
|
|
|
213
226
|
thread=True,
|
|
214
227
|
verbose=True,
|
|
215
228
|
progress_total=None,
|
|
216
|
-
|
|
229
|
+
stream_response=None,
|
|
217
230
|
*args,
|
|
218
231
|
**kwargs,
|
|
219
232
|
):
|
|
220
233
|
def retry_request():
|
|
221
234
|
"""Attempts to call `request_func` with retries, timeout, and optional threading."""
|
|
222
235
|
t0 = time.time() # Record the start time for the timeout
|
|
236
|
+
response = None
|
|
223
237
|
for i in range(retry + 1):
|
|
224
238
|
if (time.time() - t0) > timeout:
|
|
225
239
|
LOGGER.warning(f"{PREFIX}Timeout for request reached. {HELP_MSG}")
|
|
@@ -233,7 +247,7 @@ class HUBTrainingSession:
|
|
|
233
247
|
|
|
234
248
|
if progress_total:
|
|
235
249
|
self._show_upload_progress(progress_total, response)
|
|
236
|
-
elif
|
|
250
|
+
elif stream_response:
|
|
237
251
|
self._iterate_content(response)
|
|
238
252
|
|
|
239
253
|
if HTTPStatus.OK <= response.status_code < HTTPStatus.MULTIPLE_CHOICES:
|
|
@@ -268,7 +282,8 @@ class HUBTrainingSession:
|
|
|
268
282
|
# If running in the main thread, call retry_request directly
|
|
269
283
|
return retry_request()
|
|
270
284
|
|
|
271
|
-
|
|
285
|
+
@staticmethod
|
|
286
|
+
def _should_retry(status_code):
|
|
272
287
|
"""Determines if a request should be retried based on the HTTP status code."""
|
|
273
288
|
retry_codes = {
|
|
274
289
|
HTTPStatus.REQUEST_TIMEOUT,
|
|
@@ -338,12 +353,13 @@ class HUBTrainingSession:
|
|
|
338
353
|
timeout=3600,
|
|
339
354
|
thread=not final,
|
|
340
355
|
progress_total=progress_total,
|
|
341
|
-
|
|
356
|
+
stream_response=True,
|
|
342
357
|
)
|
|
343
358
|
else:
|
|
344
359
|
LOGGER.warning(f"{PREFIX}WARNING ⚠️ Model upload issue. Missing model {weights}.")
|
|
345
360
|
|
|
346
|
-
|
|
361
|
+
@staticmethod
|
|
362
|
+
def _show_upload_progress(content_length: int, response: requests.Response) -> None:
|
|
347
363
|
"""
|
|
348
364
|
Display a progress bar to track the upload progress of a file download.
|
|
349
365
|
|
|
@@ -358,7 +374,8 @@ class HUBTrainingSession:
|
|
|
358
374
|
for data in response.iter_content(chunk_size=1024):
|
|
359
375
|
pbar.update(len(data))
|
|
360
376
|
|
|
361
|
-
|
|
377
|
+
@staticmethod
|
|
378
|
+
def _iterate_content(response: requests.Response) -> None:
|
|
362
379
|
"""
|
|
363
380
|
Process the streamed HTTP response data.
|
|
364
381
|
|
|
@@ -3,8 +3,14 @@
|
|
|
3
3
|
import json
|
|
4
4
|
from time import time
|
|
5
5
|
|
|
6
|
-
from ultralytics.hub
|
|
7
|
-
from ultralytics.utils import LOGGER, SETTINGS
|
|
6
|
+
from ultralytics.hub import HUB_WEB_ROOT, PREFIX, HUBTrainingSession, events
|
|
7
|
+
from ultralytics.utils import LOGGER, RANK, SETTINGS
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def on_pretrain_routine_start(trainer):
|
|
11
|
+
"""Create a remote Ultralytics HUB session to log local model training."""
|
|
12
|
+
if RANK in {-1, 0} and SETTINGS["hub"] is True and SETTINGS["api_key"] and trainer.hub_session is None:
|
|
13
|
+
trainer.hub_session = HUBTrainingSession.create_session(trainer.args.model, trainer.args)
|
|
8
14
|
|
|
9
15
|
|
|
10
16
|
def on_pretrain_routine_end(trainer):
|
|
@@ -91,6 +97,7 @@ def on_export_start(exporter):
|
|
|
91
97
|
|
|
92
98
|
callbacks = (
|
|
93
99
|
{
|
|
100
|
+
"on_pretrain_routine_start": on_pretrain_routine_start,
|
|
94
101
|
"on_pretrain_routine_end": on_pretrain_routine_end,
|
|
95
102
|
"on_fit_epoch_end": on_fit_epoch_end,
|
|
96
103
|
"on_model_save": on_model_save,
|
|
@@ -37,6 +37,7 @@ if __name__ == "__main__":
|
|
|
37
37
|
cfg = DEFAULT_CFG_DICT.copy()
|
|
38
38
|
cfg.update(save_dir='') # handle the extra key 'save_dir'
|
|
39
39
|
trainer = {name}(cfg=cfg, overrides=overrides)
|
|
40
|
+
trainer.args.model = "{getattr(trainer.hub_session, 'model_url', trainer.args.model)}"
|
|
40
41
|
results = trainer.train()
|
|
41
42
|
"""
|
|
42
43
|
(USER_CONFIG_DIR / "DDP").mkdir(exist_ok=True)
|
|
@@ -168,13 +168,15 @@ def unzip_file(file, path=None, exclude=(".DS_Store", "__MACOSX"), exist_ok=Fals
|
|
|
168
168
|
files = [f for f in zipObj.namelist() if all(x not in f for x in exclude)]
|
|
169
169
|
top_level_dirs = {Path(f).parts[0] for f in files}
|
|
170
170
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
else:
|
|
171
|
+
# Decide to unzip directly or unzip into a directory
|
|
172
|
+
unzip_as_dir = len(top_level_dirs) == 1 # (len(files) > 1 and not files[0].endswith("/"))
|
|
173
|
+
if unzip_as_dir:
|
|
175
174
|
# Zip has 1 top-level directory
|
|
176
175
|
extract_path = path # i.e. ../datasets
|
|
177
|
-
path = Path(path) / list(top_level_dirs)[0] # i.e. ../datasets/
|
|
176
|
+
path = Path(path) / list(top_level_dirs)[0] # i.e. extract coco8/ dir to ../datasets/
|
|
177
|
+
else:
|
|
178
|
+
# Zip has multiple files at top level
|
|
179
|
+
path = extract_path = Path(path) / Path(file).stem # i.e. extract multiple files to ../datasets/coco8/
|
|
178
180
|
|
|
179
181
|
# Check if destination directory already exists and contains files
|
|
180
182
|
if path.exists() and any(path.iterdir()) and not exist_ok:
|
|
@@ -43,8 +43,8 @@ TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
|
|
|
43
43
|
|
|
44
44
|
@contextmanager
|
|
45
45
|
def torch_distributed_zero_first(local_rank: int):
|
|
46
|
-
"""
|
|
47
|
-
initialized =
|
|
46
|
+
"""Ensures all processes in distributed training wait for the local master (rank 0) to complete a task first."""
|
|
47
|
+
initialized = dist.is_available() and dist.is_initialized()
|
|
48
48
|
if initialized and local_rank not in {-1, 0}:
|
|
49
49
|
dist.barrier(device_ids=[local_rank])
|
|
50
50
|
yield
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.2.
|
|
3
|
+
Version: 8.2.41
|
|
4
4
|
Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
6
6
|
Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
@@ -30,7 +30,7 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
|
30
30
|
Requires-Python: >=3.8
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
32
|
License-File: LICENSE
|
|
33
|
-
Requires-Dist: numpy<2.0.0
|
|
33
|
+
Requires-Dist: numpy<2.0.0,>=1.23.5
|
|
34
34
|
Requires-Dist: matplotlib>=3.3.0
|
|
35
35
|
Requires-Dist: opencv-python>=4.6.0
|
|
36
36
|
Requires-Dist: pillow>=7.1.2
|
|
@@ -47,8 +47,6 @@ Requires-Dist: seaborn>=0.11.0
|
|
|
47
47
|
Requires-Dist: ultralytics-thop>=2.0.0
|
|
48
48
|
Provides-Extra: dev
|
|
49
49
|
Requires-Dist: ipython; extra == "dev"
|
|
50
|
-
Requires-Dist: check-manifest; extra == "dev"
|
|
51
|
-
Requires-Dist: pre-commit; extra == "dev"
|
|
52
50
|
Requires-Dist: pytest; extra == "dev"
|
|
53
51
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
54
52
|
Requires-Dist: coverage[toml]; extra == "dev"
|
|
@@ -77,7 +75,7 @@ Requires-Dist: comet; extra == "logging"
|
|
|
77
75
|
Requires-Dist: tensorboard>=2.13.0; extra == "logging"
|
|
78
76
|
Requires-Dist: dvclive>=2.12.0; extra == "logging"
|
|
79
77
|
Provides-Extra: extra
|
|
80
|
-
Requires-Dist: hub-sdk>=0.0.
|
|
78
|
+
Requires-Dist: hub-sdk>=0.0.8; extra == "extra"
|
|
81
79
|
Requires-Dist: ipython; extra == "extra"
|
|
82
80
|
Requires-Dist: albumentations>=1.4.6; extra == "extra"
|
|
83
81
|
Requires-Dist: pycocotools>=2.0.7; extra == "extra"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
numpy<2.0.0
|
|
1
|
+
numpy<2.0.0,>=1.23.5
|
|
2
2
|
matplotlib>=3.3.0
|
|
3
3
|
opencv-python>=4.6.0
|
|
4
4
|
pillow>=7.1.2
|
|
@@ -16,8 +16,6 @@ ultralytics-thop>=2.0.0
|
|
|
16
16
|
|
|
17
17
|
[dev]
|
|
18
18
|
ipython
|
|
19
|
-
check-manifest
|
|
20
|
-
pre-commit
|
|
21
19
|
pytest
|
|
22
20
|
pytest-cov
|
|
23
21
|
coverage[toml]
|
|
@@ -49,7 +47,7 @@ h5py!=3.11.0
|
|
|
49
47
|
coremltools>=7.0
|
|
50
48
|
|
|
51
49
|
[extra]
|
|
52
|
-
hub-sdk>=0.0.
|
|
50
|
+
hub-sdk>=0.0.8
|
|
53
51
|
ipython
|
|
54
52
|
albumentations>=1.4.6
|
|
55
53
|
pycocotools>=2.0.7
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml
RENAMED
|
File without changes
|
{ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|