dgenerate-ultralytics-headless 8.3.191__tar.gz → 8.3.193__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.
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/__init__.py +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/__init__.py +7 -5
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/SKU-110K.yaml +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/xView.yaml +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/utils.py +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/exporter.py +5 -4
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/model.py +4 -4
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/predictor.py +7 -3
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/trainer.py +5 -5
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/tuner.py +227 -40
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/classify/train.py +2 -2
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/classify/val.py +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/detect/val.py +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/pose/val.py +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/segment/val.py +14 -14
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/world/train.py +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/yoloe/train.py +3 -4
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/yoloe/val.py +3 -3
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/__init__.py +2 -4
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/autobackend.py +2 -2
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/tasks.py +2 -51
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/__init__.py +5 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/checks.py +2 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/plotting.py +2 -2
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/tal.py +2 -2
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/torch_utils.py +7 -6
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/tqdm.py +50 -74
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/tuner.py +1 -1
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/LICENSE +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/README.md +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/pyproject.toml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/setup.cfg +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/conftest.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/test_cli.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/test_cuda.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/test_engine.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/test_exports.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/test_integrations.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/test_python.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/tests/test_solutions.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/assets/bus.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/assets/zidane.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/default.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/annotator.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/augment.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/build.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/converter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/dataset.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/loaders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/scripts/download_weights.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/scripts/get_coco.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/split.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/data/split_dota.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/results.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/engine/validator.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/hub/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/hub/auth.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/hub/google/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/hub/session.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/hub/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/fastsam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/fastsam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/fastsam/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/fastsam/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/fastsam/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/nas/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/nas/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/nas/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/nas/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/rtdetr/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/rtdetr/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/rtdetr/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/rtdetr/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/rtdetr/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/amg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/build.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/blocks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/decoders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/encoders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/sam.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/modules/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/sam/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/utils/loss.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/classify/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/detect/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/detect/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/obb/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/obb/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/obb/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/pose/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/pose/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/segment/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/segment/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/world/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/world/train_world.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/modules/activation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/modules/block.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/modules/conv.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/modules/head.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/modules/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/nn/text_model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/py.typed +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/ai_gym.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/analytics.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/config.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/distance_calculation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/heatmap.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/instance_segmentation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/object_blurrer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/object_counter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/object_cropper.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/parking_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/queue_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/region_counter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/security_alarm.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/similarity_search.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/solutions.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/speed_estimation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/streamlit_inference.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/templates/similarity-search.html +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/trackzone.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/solutions/vision_eye.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/basetrack.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/bot_sort.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/byte_tracker.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/track.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/utils/gmc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/trackers/utils/matching.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/autobatch.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/autodevice.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/benchmarks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/clearml.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/comet.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/dvc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/hub.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/neptune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/platform.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/raytune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/callbacks/wb.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/dist.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/downloads.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/errors.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/export.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/files.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/git.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/instance.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/logger.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/loss.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/metrics.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/nms.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/patches.py +0 -0
- {dgenerate_ultralytics_headless-8.3.191 → dgenerate_ultralytics_headless-8.3.193}/ultralytics/utils/triton.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dgenerate-ultralytics-headless
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.193
|
4
4
|
Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dgenerate-ultralytics-headless
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.193
|
4
4
|
Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -15,6 +15,7 @@ from ultralytics.utils import (
|
|
15
15
|
DEFAULT_CFG,
|
16
16
|
DEFAULT_CFG_DICT,
|
17
17
|
DEFAULT_CFG_PATH,
|
18
|
+
FLOAT_OR_INT,
|
18
19
|
IS_VSCODE,
|
19
20
|
LOGGER,
|
20
21
|
RANK,
|
@@ -22,6 +23,7 @@ from ultralytics.utils import (
|
|
22
23
|
RUNS_DIR,
|
23
24
|
SETTINGS,
|
24
25
|
SETTINGS_FILE,
|
26
|
+
STR_OR_PATH,
|
25
27
|
TESTS_RUNNING,
|
26
28
|
YAML,
|
27
29
|
IterableSimpleNamespace,
|
@@ -267,7 +269,7 @@ def cfg2dict(cfg: str | Path | dict | SimpleNamespace) -> dict:
|
|
267
269
|
- If cfg is a SimpleNamespace object, it's converted to a dictionary using vars().
|
268
270
|
- If cfg is already a dictionary, it's returned unchanged.
|
269
271
|
"""
|
270
|
-
if isinstance(cfg,
|
272
|
+
if isinstance(cfg, STR_OR_PATH):
|
271
273
|
cfg = YAML.load(cfg) # load dict
|
272
274
|
elif isinstance(cfg, SimpleNamespace):
|
273
275
|
cfg = vars(cfg) # convert to dict
|
@@ -309,7 +311,7 @@ def get_cfg(cfg: str | Path | dict | SimpleNamespace = DEFAULT_CFG_DICT, overrid
|
|
309
311
|
|
310
312
|
# Special handling for numeric project/name
|
311
313
|
for k in "project", "name":
|
312
|
-
if k in cfg and isinstance(cfg[k],
|
314
|
+
if k in cfg and isinstance(cfg[k], FLOAT_OR_INT):
|
313
315
|
cfg[k] = str(cfg[k])
|
314
316
|
if cfg.get("name") == "model": # assign model to 'name' arg
|
315
317
|
cfg["name"] = str(cfg.get("model", "")).partition(".")[0]
|
@@ -352,7 +354,7 @@ def check_cfg(cfg: dict, hard: bool = True) -> None:
|
|
352
354
|
"""
|
353
355
|
for k, v in cfg.items():
|
354
356
|
if v is not None: # None values may be from optional args
|
355
|
-
if k in CFG_FLOAT_KEYS and not isinstance(v,
|
357
|
+
if k in CFG_FLOAT_KEYS and not isinstance(v, FLOAT_OR_INT):
|
356
358
|
if hard:
|
357
359
|
raise TypeError(
|
358
360
|
f"'{k}={v}' is of invalid type {type(v).__name__}. "
|
@@ -360,7 +362,7 @@ def check_cfg(cfg: dict, hard: bool = True) -> None:
|
|
360
362
|
)
|
361
363
|
cfg[k] = float(v)
|
362
364
|
elif k in CFG_FRACTION_KEYS:
|
363
|
-
if not isinstance(v,
|
365
|
+
if not isinstance(v, FLOAT_OR_INT):
|
364
366
|
if hard:
|
365
367
|
raise TypeError(
|
366
368
|
f"'{k}={v}' is of invalid type {type(v).__name__}. "
|
@@ -413,7 +415,7 @@ def get_save_dir(args: SimpleNamespace, name: str = None) -> Path:
|
|
413
415
|
name = name or args.name or f"{args.mode}"
|
414
416
|
save_dir = increment_path(Path(project) / name, exist_ok=args.exist_ok if RANK in {-1, 0} else True)
|
415
417
|
|
416
|
-
return Path(save_dir)
|
418
|
+
return Path(save_dir).resolve() # resolve to display full path in console
|
417
419
|
|
418
420
|
|
419
421
|
def _handle_deprecation(custom: dict) -> dict:
|
@@ -45,7 +45,7 @@ download: |
|
|
45
45
|
# Convert labels
|
46
46
|
names = "image", "x1", "y1", "x2", "y2", "class", "image_width", "image_height" # column names
|
47
47
|
for d in "annotations_train.csv", "annotations_val.csv", "annotations_test.csv":
|
48
|
-
x = pl.read_csv(dir / "annotations" / d, names=names).to_numpy() # annotations
|
48
|
+
x = pl.read_csv(dir / "annotations" / d, names=names, infer_schema_length=None).to_numpy() # annotations
|
49
49
|
images, unique_images = x[:, 0], np.unique(x[:, 0])
|
50
50
|
with open((dir / d).with_suffix(".txt").__str__().replace("annotations_", ""), "w", encoding="utf-8") as f:
|
51
51
|
f.writelines(f"./images/{s}\n" for s in unique_images)
|
@@ -216,7 +216,7 @@ def verify_image_label(args: tuple) -> list:
|
|
216
216
|
points = lb[:, 1:]
|
217
217
|
# Coordinate points check with 1% tolerance
|
218
218
|
assert points.max() <= 1.01, f"non-normalized or out of bounds coordinates {points[points > 1.01]}"
|
219
|
-
assert lb.min() >= -0.01, f"negative class labels {lb[lb < -0.01]}"
|
219
|
+
assert lb.min() >= -0.01, f"negative class labels or coordinate {lb[lb < -0.01]}"
|
220
220
|
|
221
221
|
# All labels
|
222
222
|
max_cls = 0 if single_cls else lb[:, 0].max() # max label count
|
@@ -90,6 +90,7 @@ from ultralytics.utils import (
|
|
90
90
|
RKNN_CHIPS,
|
91
91
|
ROOT,
|
92
92
|
SETTINGS,
|
93
|
+
TORCH_VERSION,
|
93
94
|
WINDOWS,
|
94
95
|
YAML,
|
95
96
|
callbacks,
|
@@ -567,7 +568,7 @@ class Exporter:
|
|
567
568
|
@try_export
|
568
569
|
def export_torchscript(self, prefix=colorstr("TorchScript:")):
|
569
570
|
"""Export YOLO model to TorchScript format."""
|
570
|
-
LOGGER.info(f"\n{prefix} starting export with torch {
|
571
|
+
LOGGER.info(f"\n{prefix} starting export with torch {TORCH_VERSION}...")
|
571
572
|
f = self.file.with_suffix(".torchscript")
|
572
573
|
|
573
574
|
ts = torch.jit.trace(NMSModel(self.model, self.args) if self.args.nms else self.model, self.im, strict=False)
|
@@ -586,7 +587,7 @@ class Exporter:
|
|
586
587
|
"""Export YOLO model to ONNX format."""
|
587
588
|
requirements = ["onnx>=1.12.0"]
|
588
589
|
if self.args.simplify:
|
589
|
-
requirements += ["onnxslim
|
590
|
+
requirements += ["onnxslim==0.1.65", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
|
590
591
|
check_requirements(requirements)
|
591
592
|
import onnx # noqa
|
592
593
|
|
@@ -648,7 +649,7 @@ class Exporter:
|
|
648
649
|
import openvino as ov
|
649
650
|
|
650
651
|
LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...")
|
651
|
-
assert TORCH_1_13, f"OpenVINO export requires torch>=1.13.0 but torch=={
|
652
|
+
assert TORCH_1_13, f"OpenVINO export requires torch>=1.13.0 but torch=={TORCH_VERSION} is installed"
|
652
653
|
ov_model = ov.convert_model(
|
653
654
|
NMSModel(self.model, self.args) if self.args.nms else self.model,
|
654
655
|
input=None if self.args.dynamic else [self.im.shape],
|
@@ -964,7 +965,7 @@ class Exporter:
|
|
964
965
|
"ai-edge-litert>=1.2.0,<1.4.0", # required by 'onnx2tf' package
|
965
966
|
"onnx>=1.12.0",
|
966
967
|
"onnx2tf>=1.26.3",
|
967
|
-
"onnxslim
|
968
|
+
"onnxslim==0.1.65",
|
968
969
|
"onnxruntime-gpu" if cuda else "onnxruntime",
|
969
970
|
"protobuf>=5",
|
970
971
|
),
|
@@ -12,7 +12,7 @@ from PIL import Image
|
|
12
12
|
|
13
13
|
from ultralytics.cfg import TASK2DATA, get_cfg, get_save_dir
|
14
14
|
from ultralytics.engine.results import Results
|
15
|
-
from ultralytics.nn.tasks import
|
15
|
+
from ultralytics.nn.tasks import guess_model_task, load_checkpoint, yaml_model_load
|
16
16
|
from ultralytics.utils import (
|
17
17
|
ARGV,
|
18
18
|
ASSETS,
|
@@ -294,7 +294,7 @@ class Model(torch.nn.Module):
|
|
294
294
|
weights = checks.check_model_file_from_stem(weights) # add suffix, i.e. yolo11n -> yolo11n.pt
|
295
295
|
|
296
296
|
if str(weights).rpartition(".")[-1] == "pt":
|
297
|
-
self.model, self.ckpt =
|
297
|
+
self.model, self.ckpt = load_checkpoint(weights)
|
298
298
|
self.task = self.model.task
|
299
299
|
self.overrides = self.model.args = self._reset_ckpt_args(self.model.args)
|
300
300
|
self.ckpt_path = self.model.pt_path
|
@@ -385,7 +385,7 @@ class Model(torch.nn.Module):
|
|
385
385
|
self._check_is_pytorch_model()
|
386
386
|
if isinstance(weights, (str, Path)):
|
387
387
|
self.overrides["pretrained"] = weights # remember the weights for DDP training
|
388
|
-
weights, self.ckpt =
|
388
|
+
weights, self.ckpt = load_checkpoint(weights)
|
389
389
|
self.model.load(weights)
|
390
390
|
return self
|
391
391
|
|
@@ -802,7 +802,7 @@ class Model(torch.nn.Module):
|
|
802
802
|
# Update model and cfg after training
|
803
803
|
if RANK in {-1, 0}:
|
804
804
|
ckpt = self.trainer.best if self.trainer.best.exists() else self.trainer.last
|
805
|
-
self.model, self.ckpt =
|
805
|
+
self.model, self.ckpt = load_checkpoint(ckpt)
|
806
806
|
self.overrides = self.model.args
|
807
807
|
self.metrics = getattr(self.trainer.validator, "metrics", None) # TODO: no metrics returned by DDP
|
808
808
|
return self.metrics
|
@@ -266,13 +266,17 @@ class BasePredictor:
|
|
266
266
|
channels=getattr(self.model, "ch", 3),
|
267
267
|
)
|
268
268
|
self.source_type = self.dataset.source_type
|
269
|
-
|
269
|
+
long_sequence = (
|
270
270
|
self.source_type.stream
|
271
271
|
or self.source_type.screenshot
|
272
272
|
or len(self.dataset) > 1000 # many images
|
273
273
|
or any(getattr(self.dataset, "video_flag", [False]))
|
274
|
-
)
|
275
|
-
|
274
|
+
)
|
275
|
+
if long_sequence:
|
276
|
+
import torchvision # noqa (import here triggers torchvision NMS use in nms.py)
|
277
|
+
|
278
|
+
if not getattr(self, "stream", True): # videos
|
279
|
+
LOGGER.warning(STREAM_WARNING)
|
276
280
|
self.vid_writer = {}
|
277
281
|
|
278
282
|
@smart_inference_mode()
|
@@ -24,7 +24,7 @@ from torch import nn, optim
|
|
24
24
|
from ultralytics import __version__
|
25
25
|
from ultralytics.cfg import get_cfg, get_save_dir
|
26
26
|
from ultralytics.data.utils import check_cls_dataset, check_det_dataset
|
27
|
-
from ultralytics.nn.tasks import
|
27
|
+
from ultralytics.nn.tasks import load_checkpoint
|
28
28
|
from ultralytics.utils import (
|
29
29
|
DEFAULT_CFG,
|
30
30
|
GIT,
|
@@ -544,7 +544,7 @@ class BaseTrainer:
|
|
544
544
|
"""Read results.csv into a dictionary using polars."""
|
545
545
|
import polars as pl # scope for faster 'import ultralytics'
|
546
546
|
|
547
|
-
return pl.read_csv(self.csv).to_dict(as_series=False)
|
547
|
+
return pl.read_csv(self.csv, infer_schema_length=None).to_dict(as_series=False)
|
548
548
|
|
549
549
|
def _model_train(self):
|
550
550
|
"""Set model in training mode."""
|
@@ -644,10 +644,10 @@ class BaseTrainer:
|
|
644
644
|
cfg, weights = self.model, None
|
645
645
|
ckpt = None
|
646
646
|
if str(self.model).endswith(".pt"):
|
647
|
-
weights, ckpt =
|
647
|
+
weights, ckpt = load_checkpoint(self.model)
|
648
648
|
cfg = weights.yaml
|
649
649
|
elif isinstance(self.args.pretrained, (str, Path)):
|
650
|
-
weights, _ =
|
650
|
+
weights, _ = load_checkpoint(self.args.pretrained)
|
651
651
|
self.model = self.get_model(cfg=cfg, weights=weights, verbose=RANK == -1) # calls Model(cfg, weights)
|
652
652
|
return ckpt
|
653
653
|
|
@@ -768,7 +768,7 @@ class BaseTrainer:
|
|
768
768
|
last = Path(check_file(resume) if exists else get_latest_run())
|
769
769
|
|
770
770
|
# Check that resume data YAML exists, otherwise strip to force re-download of dataset
|
771
|
-
ckpt_args =
|
771
|
+
ckpt_args = load_checkpoint(last)[0].args
|
772
772
|
if not isinstance(ckpt_args["data"], dict) and not Path(ckpt_args["data"]).exists():
|
773
773
|
ckpt_args["data"] = self.args.data
|
774
774
|
|
@@ -20,11 +20,13 @@ import random
|
|
20
20
|
import shutil
|
21
21
|
import subprocess
|
22
22
|
import time
|
23
|
+
from datetime import datetime
|
23
24
|
|
24
25
|
import numpy as np
|
25
26
|
|
26
27
|
from ultralytics.cfg import get_cfg, get_save_dir
|
27
28
|
from ultralytics.utils import DEFAULT_CFG, LOGGER, YAML, callbacks, colorstr, remove_colorstr
|
29
|
+
from ultralytics.utils.checks import check_requirements
|
28
30
|
from ultralytics.utils.patches import torch_load
|
29
31
|
from ultralytics.utils.plotting import plot_tune_results
|
30
32
|
|
@@ -34,15 +36,18 @@ class Tuner:
|
|
34
36
|
A class for hyperparameter tuning of YOLO models.
|
35
37
|
|
36
38
|
The class evolves YOLO model hyperparameters over a given number of iterations by mutating them according to the
|
37
|
-
search space and retraining the model to evaluate their performance.
|
39
|
+
search space and retraining the model to evaluate their performance. Supports both local CSV storage and
|
40
|
+
distributed MongoDB Atlas coordination for multi-machine hyperparameter optimization.
|
38
41
|
|
39
42
|
Attributes:
|
40
|
-
space (
|
43
|
+
space (dict[str, tuple]): Hyperparameter search space containing bounds and scaling factors for mutation.
|
41
44
|
tune_dir (Path): Directory where evolution logs and results will be saved.
|
42
45
|
tune_csv (Path): Path to the CSV file where evolution logs are saved.
|
43
46
|
args (dict): Configuration arguments for the tuning process.
|
44
47
|
callbacks (list): Callback functions to be executed during tuning.
|
45
48
|
prefix (str): Prefix string for logging messages.
|
49
|
+
mongodb (MongoClient): Optional MongoDB client for distributed tuning.
|
50
|
+
collection (Collection): MongoDB collection for storing tuning results.
|
46
51
|
|
47
52
|
Methods:
|
48
53
|
_mutate: Mutate hyperparameters based on bounds and scaling factors.
|
@@ -53,11 +58,26 @@ class Tuner:
|
|
53
58
|
>>> from ultralytics import YOLO
|
54
59
|
>>> model = YOLO("yolo11n.pt")
|
55
60
|
>>> model.tune(
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
>>>
|
61
|
+
>>> data="coco8.yaml",
|
62
|
+
>>> epochs=10,
|
63
|
+
>>> iterations=300,
|
64
|
+
>>> plots=False,
|
65
|
+
>>> save=False,
|
66
|
+
>>> val=False
|
67
|
+
>>> )
|
68
|
+
|
69
|
+
Tune with distributed MongoDB Atlas coordination across multiple machines:
|
70
|
+
>>> model.tune(
|
71
|
+
>>> data="coco8.yaml",
|
72
|
+
>>> epochs=10,
|
73
|
+
>>> iterations=300,
|
74
|
+
>>> mongodb_uri="mongodb+srv://user:pass@cluster.mongodb.net/",
|
75
|
+
>>> mongodb_db="ultralytics",
|
76
|
+
>>> mongodb_collection="tune_results"
|
77
|
+
>>> )
|
78
|
+
|
79
|
+
Tune with custom search space:
|
80
|
+
>>> model.tune(space={"lr0": (1e-5, 1e-1), "momentum": (0.6, 0.98)})
|
61
81
|
"""
|
62
82
|
|
63
83
|
def __init__(self, args=DEFAULT_CFG, _callbacks: list | None = None):
|
@@ -66,7 +86,7 @@ class Tuner:
|
|
66
86
|
|
67
87
|
Args:
|
68
88
|
args (dict): Configuration for hyperparameter evolution.
|
69
|
-
_callbacks (
|
89
|
+
_callbacks (list | None, optional): Callback functions to be executed during tuning.
|
70
90
|
"""
|
71
91
|
self.space = args.pop("space", None) or { # key: (min, max, gain(optional))
|
72
92
|
# 'optimizer': tune.choice(['SGD', 'Adam', 'AdamW', 'NAdam', 'RAdam', 'RMSProp']),
|
@@ -95,6 +115,10 @@ class Tuner:
|
|
95
115
|
"cutmix": (0.0, 1.0), # image cutmix (probability)
|
96
116
|
"copy_paste": (0.0, 1.0), # segment copy-paste (probability)
|
97
117
|
}
|
118
|
+
mongodb_uri = args.pop("mongodb_uri", None)
|
119
|
+
mongodb_db = args.pop("mongodb_db", "ultralytics")
|
120
|
+
mongodb_collection = args.pop("mongodb_collection", "tuner_results")
|
121
|
+
|
98
122
|
self.args = get_cfg(overrides=args)
|
99
123
|
self.args.exist_ok = self.args.resume # resume w/ same tune_dir
|
100
124
|
self.tune_dir = get_save_dir(self.args, name=self.args.name or "tune")
|
@@ -103,13 +127,151 @@ class Tuner:
|
|
103
127
|
self.callbacks = _callbacks or callbacks.get_default_callbacks()
|
104
128
|
self.prefix = colorstr("Tuner: ")
|
105
129
|
callbacks.add_integration_callbacks(self)
|
130
|
+
|
131
|
+
# MongoDB Atlas support (optional)
|
132
|
+
self.mongodb = None
|
133
|
+
if mongodb_uri:
|
134
|
+
self._init_mongodb(mongodb_uri, mongodb_db, mongodb_collection)
|
135
|
+
|
106
136
|
LOGGER.info(
|
107
137
|
f"{self.prefix}Initialized Tuner instance with 'tune_dir={self.tune_dir}'\n"
|
108
138
|
f"{self.prefix}💡 Learn about tuning at https://docs.ultralytics.com/guides/hyperparameter-tuning"
|
109
139
|
)
|
110
140
|
|
141
|
+
def _connect(self, uri: str = "mongodb+srv://username:password@cluster.mongodb.net/", max_retries: int = 3):
|
142
|
+
"""
|
143
|
+
Create MongoDB client with exponential backoff retry on connection failures.
|
144
|
+
|
145
|
+
Args:
|
146
|
+
uri (str): MongoDB connection string with credentials and cluster information.
|
147
|
+
max_retries (int): Maximum number of connection attempts before giving up.
|
148
|
+
|
149
|
+
Returns:
|
150
|
+
(MongoClient): Connected MongoDB client instance.
|
151
|
+
"""
|
152
|
+
check_requirements("pymongo")
|
153
|
+
|
154
|
+
from pymongo import MongoClient
|
155
|
+
from pymongo.errors import ConnectionFailure, ServerSelectionTimeoutError
|
156
|
+
|
157
|
+
for attempt in range(max_retries):
|
158
|
+
try:
|
159
|
+
client = MongoClient(
|
160
|
+
uri,
|
161
|
+
serverSelectionTimeoutMS=30000,
|
162
|
+
connectTimeoutMS=20000,
|
163
|
+
socketTimeoutMS=40000,
|
164
|
+
retryWrites=True,
|
165
|
+
retryReads=True,
|
166
|
+
maxPoolSize=30,
|
167
|
+
minPoolSize=3,
|
168
|
+
maxIdleTimeMS=60000,
|
169
|
+
)
|
170
|
+
client.admin.command("ping") # Test connection
|
171
|
+
LOGGER.info(f"{self.prefix}Connected to MongoDB Atlas (attempt {attempt + 1})")
|
172
|
+
return client
|
173
|
+
except (ConnectionFailure, ServerSelectionTimeoutError):
|
174
|
+
if attempt == max_retries - 1:
|
175
|
+
raise
|
176
|
+
wait_time = 2**attempt
|
177
|
+
LOGGER.warning(
|
178
|
+
f"{self.prefix}MongoDB connection failed (attempt {attempt + 1}), retrying in {wait_time}s..."
|
179
|
+
)
|
180
|
+
time.sleep(wait_time)
|
181
|
+
|
182
|
+
def _init_mongodb(self, mongodb_uri="", mongodb_db="", mongodb_collection=""):
|
183
|
+
"""
|
184
|
+
Initialize MongoDB connection for distributed tuning.
|
185
|
+
|
186
|
+
Connects to MongoDB Atlas for distributed hyperparameter optimization across multiple machines.
|
187
|
+
Each worker saves results to a shared collection and reads the latest best hyperparameters
|
188
|
+
from all workers for evolution.
|
189
|
+
|
190
|
+
Args:
|
191
|
+
mongodb_uri (str): MongoDB connection string, e.g. 'mongodb+srv://username:password@cluster.mongodb.net/'.
|
192
|
+
mongodb_db (str, optional): Database name.
|
193
|
+
mongodb_collection (str, optional): Collection name.
|
194
|
+
|
195
|
+
Notes:
|
196
|
+
- Creates a fitness index for fast queries of top results
|
197
|
+
- Falls back to CSV-only mode if connection fails
|
198
|
+
- Uses connection pooling and retry logic for production reliability
|
199
|
+
"""
|
200
|
+
self.mongodb = self._connect(mongodb_uri)
|
201
|
+
self.collection = self.mongodb[mongodb_db][mongodb_collection]
|
202
|
+
self.collection.create_index([("fitness", -1)], background=True)
|
203
|
+
LOGGER.info(f"{self.prefix}Using MongoDB Atlas for distributed tuning")
|
204
|
+
|
205
|
+
def _get_mongodb_results(self, n: int = 5) -> list:
|
206
|
+
"""
|
207
|
+
Get top N results from MongoDB sorted by fitness.
|
208
|
+
|
209
|
+
Args:
|
210
|
+
n (int): Number of top results to retrieve.
|
211
|
+
|
212
|
+
Returns:
|
213
|
+
(list[dict]): List of result documents with fitness scores and hyperparameters.
|
214
|
+
"""
|
215
|
+
try:
|
216
|
+
return list(self.collection.find().sort("fitness", -1).limit(n))
|
217
|
+
except Exception:
|
218
|
+
return []
|
219
|
+
|
220
|
+
def _save_to_mongodb(self, fitness: float, hyperparameters: dict[str, float], metrics: dict, iteration: int):
|
221
|
+
"""
|
222
|
+
Save results to MongoDB with proper type conversion.
|
223
|
+
|
224
|
+
Args:
|
225
|
+
fitness (float): Fitness score achieved with these hyperparameters.
|
226
|
+
hyperparameters (dict[str, float]): Dictionary of hyperparameter values.
|
227
|
+
metrics (dict): Complete training metrics dictionary (mAP, precision, recall, losses, etc.).
|
228
|
+
iteration (int): Current iteration number.
|
229
|
+
"""
|
230
|
+
try:
|
231
|
+
self.collection.insert_one(
|
232
|
+
{
|
233
|
+
"fitness": float(fitness),
|
234
|
+
"hyperparameters": {k: (v.item() if hasattr(v, "item") else v) for k, v in hyperparameters.items()},
|
235
|
+
"metrics": metrics,
|
236
|
+
"timestamp": datetime.now(),
|
237
|
+
"iteration": iteration,
|
238
|
+
}
|
239
|
+
)
|
240
|
+
except Exception as e:
|
241
|
+
LOGGER.warning(f"{self.prefix}MongoDB save failed: {e}")
|
242
|
+
|
243
|
+
def _sync_mongodb_to_csv(self):
|
244
|
+
"""
|
245
|
+
Sync MongoDB results to CSV for plotting compatibility.
|
246
|
+
|
247
|
+
Downloads all results from MongoDB and writes them to the local CSV file in chronological order. This enables
|
248
|
+
the existing plotting functions to work seamlessly with distributed MongoDB data.
|
249
|
+
"""
|
250
|
+
try:
|
251
|
+
# Get all results from MongoDB
|
252
|
+
all_results = list(self.collection.find().sort("iteration", 1))
|
253
|
+
if not all_results:
|
254
|
+
return
|
255
|
+
|
256
|
+
# Write to CSV
|
257
|
+
headers = ",".join(["fitness"] + list(self.space.keys())) + "\n"
|
258
|
+
with open(self.tune_csv, "w", encoding="utf-8") as f:
|
259
|
+
f.write(headers)
|
260
|
+
for result in all_results:
|
261
|
+
fitness = result["fitness"]
|
262
|
+
hyp_values = [result["hyperparameters"][k] for k in self.space.keys()]
|
263
|
+
log_row = [round(fitness, 5)] + hyp_values
|
264
|
+
f.write(",".join(map(str, log_row)) + "\n")
|
265
|
+
|
266
|
+
except Exception as e:
|
267
|
+
LOGGER.warning(f"{self.prefix}MongoDB to CSV sync failed: {e}")
|
268
|
+
|
111
269
|
def _mutate(
|
112
|
-
self,
|
270
|
+
self,
|
271
|
+
parent: str = "single",
|
272
|
+
n: int = 5,
|
273
|
+
mutation: float = 0.8,
|
274
|
+
sigma: float = 0.2,
|
113
275
|
) -> dict[str, float]:
|
114
276
|
"""
|
115
277
|
Mutate hyperparameters based on bounds and scaling factors specified in `self.space`.
|
@@ -121,23 +283,36 @@ class Tuner:
|
|
121
283
|
sigma (float): Standard deviation for Gaussian random number generator.
|
122
284
|
|
123
285
|
Returns:
|
124
|
-
(
|
286
|
+
(dict[str, float]): A dictionary containing mutated hyperparameters.
|
125
287
|
"""
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
288
|
+
x = None
|
289
|
+
|
290
|
+
# Try MongoDB first if available
|
291
|
+
if self.mongodb:
|
292
|
+
results = self._get_mongodb_results(n)
|
293
|
+
if results:
|
294
|
+
# MongoDB already sorted by fitness DESC, so results[0] is best
|
295
|
+
x = np.array([[r["fitness"]] + [r["hyperparameters"][k] for k in self.space.keys()] for r in results])
|
296
|
+
n = min(n, len(x))
|
297
|
+
|
298
|
+
# Fall back to CSV if MongoDB unavailable or empty
|
299
|
+
if x is None and self.tune_csv.exists():
|
300
|
+
csv_data = np.loadtxt(self.tune_csv, ndmin=2, delimiter=",", skiprows=1)
|
301
|
+
if len(csv_data) > 0:
|
302
|
+
fitness = csv_data[:, 0] # first column
|
303
|
+
n = min(n, len(csv_data))
|
304
|
+
x = csv_data[np.argsort(-fitness)][:n] # top n sorted by fitness DESC
|
305
|
+
|
306
|
+
# Mutate if we have data, otherwise use defaults
|
307
|
+
if x is not None:
|
132
308
|
w = x[:, 0] - x[:, 0].min() + 1e-6 # weights (sum > 0)
|
133
|
-
if parent == "single" or len(x)
|
134
|
-
# x = x[random.randint(0, n - 1)] # random selection
|
309
|
+
if parent == "single" or len(x) <= 1:
|
135
310
|
x = x[random.choices(range(n), weights=w)[0]] # weighted selection
|
136
311
|
elif parent == "weighted":
|
137
312
|
x = (x * w.reshape(n, 1)).sum(0) / w.sum() # weighted combination
|
138
313
|
|
139
314
|
# Mutate
|
140
|
-
r = np.random
|
315
|
+
r = np.random
|
141
316
|
r.seed(int(time.time()))
|
142
317
|
g = np.array([v[2] if len(v) == 3 else 1.0 for v in self.space.values()]) # gains 0-1
|
143
318
|
ng = len(self.space)
|
@@ -149,9 +324,9 @@ class Tuner:
|
|
149
324
|
hyp = {k: getattr(self.args, k) for k in self.space.keys()}
|
150
325
|
|
151
326
|
# Constrain to limits
|
152
|
-
for k,
|
153
|
-
hyp[k] = max(hyp[k],
|
154
|
-
hyp[k] = min(hyp[k],
|
327
|
+
for k, bounds in self.space.items():
|
328
|
+
hyp[k] = max(hyp[k], bounds[0]) # lower limit
|
329
|
+
hyp[k] = min(hyp[k], bounds[1]) # upper limit
|
155
330
|
hyp[k] = round(hyp[k], 5) # significant digits
|
156
331
|
|
157
332
|
return hyp
|
@@ -160,25 +335,26 @@ class Tuner:
|
|
160
335
|
"""
|
161
336
|
Execute the hyperparameter evolution process when the Tuner instance is called.
|
162
337
|
|
163
|
-
This method iterates through the number of iterations, performing the following steps
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
338
|
+
This method iterates through the specified number of iterations, performing the following steps:
|
339
|
+
1. Sync MongoDB results to CSV (if using distributed mode)
|
340
|
+
2. Mutate hyperparameters using the best previous results or defaults
|
341
|
+
3. Train a YOLO model with the mutated hyperparameters
|
342
|
+
4. Log fitness scores and hyperparameters to MongoDB and/or CSV
|
343
|
+
5. Track the best performing configuration across all iterations
|
169
344
|
|
170
345
|
Args:
|
171
|
-
model (Model): A pre-initialized YOLO model to be used for training.
|
346
|
+
model (Model | None, optional): A pre-initialized YOLO model to be used for training.
|
172
347
|
iterations (int): The number of generations to run the evolution for.
|
173
|
-
cleanup (bool): Whether to delete iteration weights to reduce storage space
|
174
|
-
|
175
|
-
Note:
|
176
|
-
The method utilizes the `self.tune_csv` Path object to read and log hyperparameters and fitness scores.
|
177
|
-
Ensure this path is set correctly in the Tuner instance.
|
348
|
+
cleanup (bool): Whether to delete iteration weights to reduce storage space during tuning.
|
178
349
|
"""
|
179
350
|
t0 = time.time()
|
180
351
|
best_save_dir, best_metrics = None, None
|
181
352
|
(self.tune_dir / "weights").mkdir(parents=True, exist_ok=True)
|
353
|
+
|
354
|
+
# Sync MongoDB to CSV at startup for proper resume logic
|
355
|
+
if self.mongodb:
|
356
|
+
self._sync_mongodb_to_csv()
|
357
|
+
|
182
358
|
start = 0
|
183
359
|
if self.tune_csv.exists():
|
184
360
|
x = np.loadtxt(self.tune_csv, ndmin=2, delimiter=",", skiprows=1)
|
@@ -205,12 +381,23 @@ class Tuner:
|
|
205
381
|
except Exception as e:
|
206
382
|
LOGGER.error(f"training failure for hyperparameter tuning iteration {i + 1}\n{e}")
|
207
383
|
|
208
|
-
# Save results
|
384
|
+
# Save results - MongoDB takes precedence
|
209
385
|
fitness = metrics.get("fitness", 0.0)
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
386
|
+
if self.mongodb:
|
387
|
+
self._save_to_mongodb(fitness, mutated_hyp, metrics, i + 1)
|
388
|
+
self._sync_mongodb_to_csv()
|
389
|
+
total_mongo_iterations = self.collection.count_documents({})
|
390
|
+
if total_mongo_iterations >= iterations:
|
391
|
+
LOGGER.info(
|
392
|
+
f"{self.prefix}Target iterations ({iterations}) reached in MongoDB ({total_mongo_iterations}). Stopping."
|
393
|
+
)
|
394
|
+
break
|
395
|
+
else:
|
396
|
+
# Save to CSV only if no MongoDB
|
397
|
+
log_row = [round(fitness, 5)] + [mutated_hyp[k] for k in self.space.keys()]
|
398
|
+
headers = "" if self.tune_csv.exists() else (",".join(["fitness"] + list(self.space.keys())) + "\n")
|
399
|
+
with open(self.tune_csv, "a", encoding="utf-8") as f:
|
400
|
+
f.write(headers + ",".join(map(str, log_row)) + "\n")
|
214
401
|
|
215
402
|
# Get best results
|
216
403
|
x = np.loadtxt(self.tune_csv, ndmin=2, delimiter=",", skiprows=1)
|
@@ -226,7 +413,7 @@ class Tuner:
|
|
226
413
|
shutil.rmtree(weights_dir, ignore_errors=True) # remove iteration weights/ dir to reduce storage space
|
227
414
|
|
228
415
|
# Plot tune results
|
229
|
-
plot_tune_results(self.tune_csv)
|
416
|
+
plot_tune_results(str(self.tune_csv))
|
230
417
|
|
231
418
|
# Save and print tune results
|
232
419
|
header = (
|
@@ -166,8 +166,8 @@ class ClassificationTrainer(BaseTrainer):
|
|
166
166
|
|
167
167
|
def preprocess_batch(self, batch: dict[str, torch.Tensor]) -> dict[str, torch.Tensor]:
|
168
168
|
"""Preprocess a batch of images and classes."""
|
169
|
-
batch["img"] = batch["img"].to(self.device)
|
170
|
-
batch["cls"] = batch["cls"].to(self.device)
|
169
|
+
batch["img"] = batch["img"].to(self.device, non_blocking=True)
|
170
|
+
batch["cls"] = batch["cls"].to(self.device, non_blocking=True)
|
171
171
|
return batch
|
172
172
|
|
173
173
|
def progress_string(self) -> str:
|
@@ -91,7 +91,7 @@ class ClassificationValidator(BaseValidator):
|
|
91
91
|
"""Preprocess input batch by moving data to device and converting to appropriate dtype."""
|
92
92
|
batch["img"] = batch["img"].to(self.device, non_blocking=True)
|
93
93
|
batch["img"] = batch["img"].half() if self.args.half else batch["img"].float()
|
94
|
-
batch["cls"] = batch["cls"].to(self.device)
|
94
|
+
batch["cls"] = batch["cls"].to(self.device, non_blocking=True)
|
95
95
|
return batch
|
96
96
|
|
97
97
|
def update_metrics(self, preds: torch.Tensor, batch: dict[str, Any]) -> None:
|