dgenerate-ultralytics-headless 8.3.195__tar.gz → 8.3.197__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.195 → dgenerate_ultralytics_headless-8.3.197}/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +1 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/__init__.py +1 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/__init__.py +1 -0
- dgenerate_ultralytics_headless-8.3.197/ultralytics/cfg/datasets/construction-ppe.yaml +32 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/default.yaml +1 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/augment.py +1 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/build.py +5 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/exporter.py +20 -31
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/model.py +1 -2
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/predictor.py +3 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/trainer.py +17 -8
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/validator.py +6 -2
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/classify/train.py +1 -11
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/detect/train.py +27 -6
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/detect/val.py +6 -5
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/obb/train.py +0 -9
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/pose/train.py +0 -9
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/pose/val.py +1 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/segment/train.py +0 -9
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/segment/val.py +5 -5
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/world/train.py +4 -4
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/world/train_world.py +2 -2
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/yoloe/train.py +3 -12
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/yoloe/val.py +0 -7
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/tasks.py +4 -2
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/__init__.py +30 -19
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/tensorboard.py +2 -2
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/checks.py +2 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/loss.py +12 -7
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/nms.py +3 -1
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/plotting.py +1 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/torch_utils.py +89 -9
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/LICENSE +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/README.md +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/pyproject.toml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/setup.cfg +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/conftest.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/test_cli.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/test_cuda.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/test_engine.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/test_exports.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/test_integrations.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/test_python.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/tests/test_solutions.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/assets/bus.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/assets/zidane.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/annotator.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/converter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/dataset.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/loaders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/scripts/download_weights.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/scripts/get_coco.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/split.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/split_dota.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/data/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/results.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/engine/tuner.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/hub/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/hub/auth.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/hub/google/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/hub/session.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/hub/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/fastsam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/fastsam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/fastsam/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/fastsam/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/fastsam/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/nas/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/nas/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/nas/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/nas/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/rtdetr/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/rtdetr/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/rtdetr/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/rtdetr/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/rtdetr/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/amg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/build.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/blocks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/decoders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/encoders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/sam.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/modules/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/sam/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/utils/loss.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/classify/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/classify/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/detect/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/obb/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/obb/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/pose/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/segment/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/world/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/autobackend.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/modules/activation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/modules/block.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/modules/conv.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/modules/head.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/modules/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/nn/text_model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/py.typed +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/ai_gym.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/analytics.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/config.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/distance_calculation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/heatmap.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/instance_segmentation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/object_blurrer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/object_counter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/object_cropper.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/parking_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/queue_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/region_counter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/security_alarm.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/similarity_search.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/solutions.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/speed_estimation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/streamlit_inference.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/templates/similarity-search.html +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/trackzone.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/solutions/vision_eye.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/basetrack.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/bot_sort.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/byte_tracker.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/track.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/utils/gmc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/trackers/utils/matching.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/autobatch.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/autodevice.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/benchmarks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/clearml.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/comet.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/dvc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/hub.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/neptune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/platform.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/raytune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/callbacks/wb.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/cpu.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/dist.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/downloads.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/errors.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/events.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/export.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/files.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/git.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/instance.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/logger.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/metrics.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/patches.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/tal.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/tqdm.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/triton.py +0 -0
- {dgenerate_ultralytics_headless-8.3.195 → dgenerate_ultralytics_headless-8.3.197}/ultralytics/utils/tuner.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.197
|
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.197
|
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>
|
@@ -51,6 +51,7 @@ ultralytics/cfg/datasets/coco8-multispectral.yaml
|
|
51
51
|
ultralytics/cfg/datasets/coco8-pose.yaml
|
52
52
|
ultralytics/cfg/datasets/coco8-seg.yaml
|
53
53
|
ultralytics/cfg/datasets/coco8.yaml
|
54
|
+
ultralytics/cfg/datasets/construction-ppe.yaml
|
54
55
|
ultralytics/cfg/datasets/crack-seg.yaml
|
55
56
|
ultralytics/cfg/datasets/dog-pose.yaml
|
56
57
|
ultralytics/cfg/datasets/dota8-multispectral.yaml
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
|
3
|
+
# Construction-PPE dataset by Ultralytics
|
4
|
+
# Documentation: https://docs.ultralytics.com/datasets/detect/construction-ppe/
|
5
|
+
# Example usage: yolo train data=construction-ppe.yaml
|
6
|
+
# parent
|
7
|
+
# ├── ultralytics
|
8
|
+
# └── datasets
|
9
|
+
# └── construction-ppe ← downloads here (178.4 MB)
|
10
|
+
|
11
|
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
12
|
+
path: construction-ppe # dataset root dir
|
13
|
+
train: images/train # train images (relative to 'path') 1132 images
|
14
|
+
val: images/val # val images (relative to 'path') 143 images
|
15
|
+
test: images/test # test images (relative to 'path') 141 images
|
16
|
+
|
17
|
+
# Classes
|
18
|
+
names:
|
19
|
+
0: helmet
|
20
|
+
1: gloves
|
21
|
+
2: vest
|
22
|
+
3: boots
|
23
|
+
4: goggles
|
24
|
+
5: none
|
25
|
+
6: Person
|
26
|
+
7: no_helmet
|
27
|
+
8: no_goggle
|
28
|
+
9: no_gloves
|
29
|
+
10: no_boots
|
30
|
+
|
31
|
+
# Download script/URL (optional)
|
32
|
+
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/construction-ppe.zip
|
@@ -37,6 +37,7 @@ fraction: 1.0 # (float) dataset fraction to train on (default is 1.0, all images
|
|
37
37
|
profile: False # (bool) profile ONNX and TensorRT speeds during training for loggers
|
38
38
|
freeze: # (int | list, optional) freeze first n layers, or freeze list of layer indices during training
|
39
39
|
multi_scale: False # (bool) Whether to use multiscale during training
|
40
|
+
compile: False # (bool) Run torch.compile() on the model before train/val/predict
|
40
41
|
# Segmentation
|
41
42
|
overlap_mask: True # (bool) merge object masks into a single image mask during training (segment train only)
|
42
43
|
mask_ratio: 4 # (int) mask downsample ratio (segment train only)
|
@@ -2202,7 +2202,7 @@ class Format:
|
|
2202
2202
|
)
|
2203
2203
|
labels["masks"] = masks
|
2204
2204
|
labels["img"] = self._format_img(img)
|
2205
|
-
labels["cls"] = torch.from_numpy(cls) if nl else torch.zeros(nl)
|
2205
|
+
labels["cls"] = torch.from_numpy(cls) if nl else torch.zeros(nl, 1)
|
2206
2206
|
labels["bboxes"] = torch.from_numpy(instances.bboxes) if nl else torch.zeros((nl, 4))
|
2207
2207
|
if self.return_keypoint:
|
2208
2208
|
labels["keypoints"] = (
|
@@ -28,6 +28,7 @@ from ultralytics.data.loaders import (
|
|
28
28
|
from ultralytics.data.utils import IMG_FORMATS, VID_FORMATS
|
29
29
|
from ultralytics.utils import RANK, colorstr
|
30
30
|
from ultralytics.utils.checks import check_file
|
31
|
+
from ultralytics.utils.torch_utils import TORCH_2_0
|
31
32
|
|
32
33
|
|
33
34
|
class InfiniteDataLoader(dataloader.DataLoader):
|
@@ -57,6 +58,8 @@ class InfiniteDataLoader(dataloader.DataLoader):
|
|
57
58
|
|
58
59
|
def __init__(self, *args: Any, **kwargs: Any):
|
59
60
|
"""Initialize the InfiniteDataLoader with the same arguments as DataLoader."""
|
61
|
+
if not TORCH_2_0:
|
62
|
+
kwargs.pop("prefetch_factor", None) # not supported by earlier versions
|
60
63
|
super().__init__(*args, **kwargs)
|
61
64
|
object.__setattr__(self, "batch_sampler", _RepeatSampler(self.batch_sampler))
|
62
65
|
self.iterator = super().__iter__()
|
@@ -209,11 +212,12 @@ def build_dataloader(dataset, batch: int, workers: int, shuffle: bool = True, ra
|
|
209
212
|
shuffle=shuffle and sampler is None,
|
210
213
|
num_workers=nw,
|
211
214
|
sampler=sampler,
|
215
|
+
prefetch_factor=4 if nw > 0 else None, # increase over default 2
|
212
216
|
pin_memory=nd > 0,
|
213
217
|
collate_fn=getattr(dataset, "collate_fn", None),
|
214
218
|
worker_init_fn=seed_worker,
|
215
219
|
generator=generator,
|
216
|
-
drop_last=drop_last,
|
220
|
+
drop_last=drop_last and len(dataset) % batch != 0,
|
217
221
|
)
|
218
222
|
|
219
223
|
|
@@ -1353,64 +1353,52 @@ class Exporter:
|
|
1353
1353
|
import coremltools as ct # noqa
|
1354
1354
|
|
1355
1355
|
LOGGER.info(f"{prefix} starting pipeline with coremltools {ct.__version__}...")
|
1356
|
-
_, _, h, w = list(self.im.shape) # BCHW
|
1357
1356
|
|
1358
1357
|
# Output shapes
|
1359
1358
|
spec = model.get_spec()
|
1360
|
-
|
1361
|
-
if
|
1362
|
-
|
1363
|
-
|
1364
|
-
img = Image.new("RGB", (w, h)) # w=192, h=320
|
1365
|
-
out = model.predict({"image": img})
|
1366
|
-
out0_shape = out[out0.name].shape # (3780, 80)
|
1367
|
-
out1_shape = out[out1.name].shape # (3780, 4)
|
1368
|
-
else: # linux and windows can not run model.predict(), get sizes from PyTorch model output y
|
1369
|
-
out0_shape = self.output_shape[2], self.output_shape[1] - 4 # (3780, 80)
|
1370
|
-
out1_shape = self.output_shape[2], 4 # (3780, 4)
|
1359
|
+
outs = list(iter(spec.description.output))
|
1360
|
+
if self.args.format == "mlmodel": # mlmodel doesn't infer shapes automatically
|
1361
|
+
outs[0].type.multiArrayType.shape[:] = self.output_shape[2], self.output_shape[1] - 4
|
1362
|
+
outs[1].type.multiArrayType.shape[:] = self.output_shape[2], 4
|
1371
1363
|
|
1372
1364
|
# Checks
|
1373
1365
|
names = self.metadata["names"]
|
1374
1366
|
nx, ny = spec.description.input[0].type.imageType.width, spec.description.input[0].type.imageType.height
|
1375
|
-
|
1367
|
+
nc = outs[0].type.multiArrayType.shape[-1]
|
1376
1368
|
assert len(names) == nc, f"{len(names)} names found for nc={nc}" # check
|
1377
1369
|
|
1378
|
-
# Define output shapes (missing)
|
1379
|
-
out0.type.multiArrayType.shape[:] = out0_shape # (3780, 80)
|
1380
|
-
out1.type.multiArrayType.shape[:] = out1_shape # (3780, 4)
|
1381
|
-
|
1382
1370
|
# Model from spec
|
1383
1371
|
model = ct.models.MLModel(spec, weights_dir=weights_dir)
|
1384
1372
|
|
1385
|
-
#
|
1373
|
+
# Create NMS protobuf
|
1386
1374
|
nms_spec = ct.proto.Model_pb2.Model()
|
1387
1375
|
nms_spec.specificationVersion = spec.specificationVersion
|
1388
|
-
for i in range(
|
1376
|
+
for i in range(len(outs)):
|
1389
1377
|
decoder_output = model._spec.description.output[i].SerializeToString()
|
1390
1378
|
nms_spec.description.input.add()
|
1391
1379
|
nms_spec.description.input[i].ParseFromString(decoder_output)
|
1392
1380
|
nms_spec.description.output.add()
|
1393
1381
|
nms_spec.description.output[i].ParseFromString(decoder_output)
|
1394
1382
|
|
1395
|
-
|
1396
|
-
|
1383
|
+
output_names = ["confidence", "coordinates"]
|
1384
|
+
for i, name in enumerate(output_names):
|
1385
|
+
nms_spec.description.output[i].name = name
|
1397
1386
|
|
1398
|
-
|
1399
|
-
for i in range(2):
|
1387
|
+
for i, out in enumerate(outs):
|
1400
1388
|
ma_type = nms_spec.description.output[i].type.multiArrayType
|
1401
1389
|
ma_type.shapeRange.sizeRanges.add()
|
1402
1390
|
ma_type.shapeRange.sizeRanges[0].lowerBound = 0
|
1403
1391
|
ma_type.shapeRange.sizeRanges[0].upperBound = -1
|
1404
1392
|
ma_type.shapeRange.sizeRanges.add()
|
1405
|
-
ma_type.shapeRange.sizeRanges[1].lowerBound =
|
1406
|
-
ma_type.shapeRange.sizeRanges[1].upperBound =
|
1393
|
+
ma_type.shapeRange.sizeRanges[1].lowerBound = out.type.multiArrayType.shape[-1]
|
1394
|
+
ma_type.shapeRange.sizeRanges[1].upperBound = out.type.multiArrayType.shape[-1]
|
1407
1395
|
del ma_type.shape[:]
|
1408
1396
|
|
1409
1397
|
nms = nms_spec.nonMaximumSuppression
|
1410
|
-
nms.confidenceInputFeatureName =
|
1411
|
-
nms.coordinatesInputFeatureName =
|
1412
|
-
nms.confidenceOutputFeatureName =
|
1413
|
-
nms.coordinatesOutputFeatureName =
|
1398
|
+
nms.confidenceInputFeatureName = outs[0].name # 1x507x80
|
1399
|
+
nms.coordinatesInputFeatureName = outs[1].name # 1x507x4
|
1400
|
+
nms.confidenceOutputFeatureName = output_names[0]
|
1401
|
+
nms.coordinatesOutputFeatureName = output_names[1]
|
1414
1402
|
nms.iouThresholdInputFeatureName = "iouThreshold"
|
1415
1403
|
nms.confidenceThresholdInputFeatureName = "confidenceThreshold"
|
1416
1404
|
nms.iouThreshold = self.args.iou
|
@@ -1419,14 +1407,14 @@ class Exporter:
|
|
1419
1407
|
nms.stringClassLabels.vector.extend(names.values())
|
1420
1408
|
nms_model = ct.models.MLModel(nms_spec)
|
1421
1409
|
|
1422
|
-
#
|
1410
|
+
# Pipeline models together
|
1423
1411
|
pipeline = ct.models.pipeline.Pipeline(
|
1424
1412
|
input_features=[
|
1425
1413
|
("image", ct.models.datatypes.Array(3, ny, nx)),
|
1426
1414
|
("iouThreshold", ct.models.datatypes.Double()),
|
1427
1415
|
("confidenceThreshold", ct.models.datatypes.Double()),
|
1428
1416
|
],
|
1429
|
-
output_features=
|
1417
|
+
output_features=output_names,
|
1430
1418
|
)
|
1431
1419
|
pipeline.add_model(model)
|
1432
1420
|
pipeline.add_model(nms_model)
|
@@ -1572,6 +1560,7 @@ class NMSModel(torch.nn.Module):
|
|
1572
1560
|
or (self.args.format == "openvino" and self.args.int8) # OpenVINO int8 error with triu
|
1573
1561
|
),
|
1574
1562
|
iou_func=batch_probiou,
|
1563
|
+
exit_early=False,
|
1575
1564
|
)
|
1576
1565
|
if self.obb
|
1577
1566
|
else nms
|
@@ -788,7 +788,7 @@ class Model(torch.nn.Module):
|
|
788
788
|
"model": self.overrides["model"],
|
789
789
|
"task": self.task,
|
790
790
|
} # method defaults
|
791
|
-
args = {**overrides, **custom, **kwargs, "mode": "train"} #
|
791
|
+
args = {**overrides, **custom, **kwargs, "mode": "train", "session": self.session} # prioritizes rightmost args
|
792
792
|
if args.get("resume"):
|
793
793
|
args["resume"] = self.ckpt_path
|
794
794
|
|
@@ -797,7 +797,6 @@ class Model(torch.nn.Module):
|
|
797
797
|
self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
|
798
798
|
self.model = self.trainer.model
|
799
799
|
|
800
|
-
self.trainer.hub_session = self.session # attach optional HUB session
|
801
800
|
self.trainer.train()
|
802
801
|
# Update model and cfg after training
|
803
802
|
if RANK in {-1, 0}:
|
@@ -51,7 +51,7 @@ from ultralytics.nn.autobackend import AutoBackend
|
|
51
51
|
from ultralytics.utils import DEFAULT_CFG, LOGGER, MACOS, WINDOWS, callbacks, colorstr, ops
|
52
52
|
from ultralytics.utils.checks import check_imgsz, check_imshow
|
53
53
|
from ultralytics.utils.files import increment_path
|
54
|
-
from ultralytics.utils.torch_utils import select_device, smart_inference_mode
|
54
|
+
from ultralytics.utils.torch_utils import attempt_compile, select_device, smart_inference_mode
|
55
55
|
|
56
56
|
STREAM_WARNING = """
|
57
57
|
inference results will accumulate in RAM unless `stream=True` is passed, causing potential out-of-memory
|
@@ -409,6 +409,8 @@ class BasePredictor:
|
|
409
409
|
if hasattr(self.model, "imgsz") and not getattr(self.model, "dynamic", False):
|
410
410
|
self.args.imgsz = self.model.imgsz # reuse imgsz from export metadata
|
411
411
|
self.model.eval()
|
412
|
+
if self.args.compile:
|
413
|
+
self.model = attempt_compile(self.model, device=self.device)
|
412
414
|
|
413
415
|
def write_results(self, i: int, p: Path, im: torch.Tensor, s: list[str]) -> str:
|
414
416
|
"""
|
@@ -46,6 +46,7 @@ from ultralytics.utils.torch_utils import (
|
|
46
46
|
TORCH_2_4,
|
47
47
|
EarlyStopping,
|
48
48
|
ModelEMA,
|
49
|
+
attempt_compile,
|
49
50
|
autocast,
|
50
51
|
convert_optimizer_state_dict_to_fp16,
|
51
52
|
init_seeds,
|
@@ -54,6 +55,7 @@ from ultralytics.utils.torch_utils import (
|
|
54
55
|
strip_optimizer,
|
55
56
|
torch_distributed_zero_first,
|
56
57
|
unset_deterministic,
|
58
|
+
unwrap_model,
|
57
59
|
)
|
58
60
|
|
59
61
|
|
@@ -117,6 +119,7 @@ class BaseTrainer:
|
|
117
119
|
overrides (dict, optional): Configuration overrides.
|
118
120
|
_callbacks (list, optional): List of callback functions.
|
119
121
|
"""
|
122
|
+
self.hub_session = overrides.pop("session", None) # HUB
|
120
123
|
self.args = get_cfg(cfg, overrides)
|
121
124
|
self.check_resume(overrides)
|
122
125
|
self.device = select_device(self.args.device, self.args.batch)
|
@@ -168,9 +171,6 @@ class BaseTrainer:
|
|
168
171
|
self.csv = self.save_dir / "results.csv"
|
169
172
|
self.plot_idx = [0, 1, 2]
|
170
173
|
|
171
|
-
# HUB
|
172
|
-
self.hub_session = None
|
173
|
-
|
174
174
|
# Callbacks
|
175
175
|
self.callbacks = _callbacks or callbacks.get_default_callbacks()
|
176
176
|
if RANK in {-1, 0}:
|
@@ -256,6 +256,14 @@ class BaseTrainer:
|
|
256
256
|
self.model = self.model.to(self.device)
|
257
257
|
self.set_model_attributes()
|
258
258
|
|
259
|
+
# Initialize loss criterion before compilation for torch.compile compatibility
|
260
|
+
if hasattr(self.model, "init_criterion"):
|
261
|
+
self.model.criterion = self.model.init_criterion()
|
262
|
+
|
263
|
+
# Compile model
|
264
|
+
if self.args.compile:
|
265
|
+
self.model = attempt_compile(self.model, device=self.device)
|
266
|
+
|
259
267
|
# Freeze layers
|
260
268
|
freeze_list = (
|
261
269
|
self.args.freeze
|
@@ -404,7 +412,9 @@ class BaseTrainer:
|
|
404
412
|
# Forward
|
405
413
|
with autocast(self.amp):
|
406
414
|
batch = self.preprocess_batch(batch)
|
407
|
-
loss
|
415
|
+
# decouple inference and loss calculations for torch.compile convenience
|
416
|
+
preds = self.model(batch["img"])
|
417
|
+
loss, self.loss_items = self.model.loss(batch, preds)
|
408
418
|
self.loss = loss.sum()
|
409
419
|
if RANK != -1:
|
410
420
|
self.loss *= world_size
|
@@ -565,7 +575,7 @@ class BaseTrainer:
|
|
565
575
|
"epoch": self.epoch,
|
566
576
|
"best_fitness": self.best_fitness,
|
567
577
|
"model": None, # resume and final checkpoints derive from EMA
|
568
|
-
"ema": deepcopy(self.ema.ema).half(),
|
578
|
+
"ema": deepcopy(unwrap_model(self.ema.ema)).half(),
|
569
579
|
"updates": self.ema.updates,
|
570
580
|
"optimizer": convert_optimizer_state_dict_to_fp16(deepcopy(self.optimizer.state_dict())),
|
571
581
|
"train_args": vars(self.args), # save as dict
|
@@ -592,8 +602,6 @@ class BaseTrainer:
|
|
592
602
|
self.best.write_bytes(serialized_ckpt) # save best.pt
|
593
603
|
if (self.save_period > 0) and (self.epoch % self.save_period == 0):
|
594
604
|
(self.wdir / f"epoch{self.epoch}.pt").write_bytes(serialized_ckpt) # save epoch, i.e. 'epoch3.pt'
|
595
|
-
# if self.args.close_mosaic and self.epoch == (self.epochs - self.args.close_mosaic - 1):
|
596
|
-
# (self.wdir / "last_mosaic.pt").write_bytes(serialized_ckpt) # save mosaic checkpoint
|
597
605
|
|
598
606
|
def get_dataset(self):
|
599
607
|
"""
|
@@ -667,7 +675,7 @@ class BaseTrainer:
|
|
667
675
|
|
668
676
|
def validate(self):
|
669
677
|
"""
|
670
|
-
Run validation on
|
678
|
+
Run validation on val set using self.validator.
|
671
679
|
|
672
680
|
Returns:
|
673
681
|
metrics (dict): Dictionary of validation metrics.
|
@@ -755,6 +763,7 @@ class BaseTrainer:
|
|
755
763
|
strip_optimizer(f, updates={k: ckpt[k]} if k in ckpt else None)
|
756
764
|
LOGGER.info(f"\nValidating {f}...")
|
757
765
|
self.validator.args.plots = self.args.plots
|
766
|
+
self.validator.args.compile = False # disable final val compile as too slow
|
758
767
|
self.metrics = self.validator(model=f)
|
759
768
|
self.metrics.pop("fitness", None)
|
760
769
|
self.run_callbacks("on_fit_epoch_end")
|
@@ -36,7 +36,7 @@ from ultralytics.nn.autobackend import AutoBackend
|
|
36
36
|
from ultralytics.utils import LOGGER, TQDM, callbacks, colorstr, emojis
|
37
37
|
from ultralytics.utils.checks import check_imgsz
|
38
38
|
from ultralytics.utils.ops import Profile
|
39
|
-
from ultralytics.utils.torch_utils import
|
39
|
+
from ultralytics.utils.torch_utils import attempt_compile, select_device, smart_inference_mode, unwrap_model
|
40
40
|
|
41
41
|
|
42
42
|
class BaseValidator:
|
@@ -148,6 +148,8 @@ class BaseValidator:
|
|
148
148
|
# Force FP16 val during training
|
149
149
|
self.args.half = self.device.type != "cpu" and trainer.amp
|
150
150
|
model = trainer.ema.ema or trainer.model
|
151
|
+
if trainer.args.compile and hasattr(model, "_orig_mod"):
|
152
|
+
model = model._orig_mod # validate non-compiled original model to avoid issues
|
151
153
|
model = model.half() if self.args.half else model.float()
|
152
154
|
self.loss = torch.zeros_like(trainer.loss_items, device=trainer.device)
|
153
155
|
self.args.plots &= trainer.stopper.possible_stop or (trainer.epoch == trainer.epochs - 1)
|
@@ -186,6 +188,8 @@ class BaseValidator:
|
|
186
188
|
self.dataloader = self.dataloader or self.get_dataloader(self.data.get(self.args.split), self.args.batch)
|
187
189
|
|
188
190
|
model.eval()
|
191
|
+
if self.args.compile:
|
192
|
+
model = attempt_compile(model, device=self.device)
|
189
193
|
model.warmup(imgsz=(1 if pt else self.args.batch, self.data["channels"], imgsz, imgsz)) # warmup
|
190
194
|
|
191
195
|
self.run_callbacks("on_val_start")
|
@@ -196,7 +200,7 @@ class BaseValidator:
|
|
196
200
|
Profile(device=self.device),
|
197
201
|
)
|
198
202
|
bar = TQDM(self.dataloader, desc=self.get_desc(), total=len(self.dataloader))
|
199
|
-
self.init_metrics(
|
203
|
+
self.init_metrics(unwrap_model(model))
|
200
204
|
self.jdict = [] # empty before each val
|
201
205
|
for batch_i, batch in enumerate(bar):
|
202
206
|
self.run_callbacks("on_val_batch_start")
|
@@ -55,20 +55,10 @@ class ClassificationTrainer(BaseTrainer):
|
|
55
55
|
"""
|
56
56
|
Initialize a ClassificationTrainer object.
|
57
57
|
|
58
|
-
This constructor sets up a trainer for image classification tasks, configuring the task type and default
|
59
|
-
image size if not specified.
|
60
|
-
|
61
58
|
Args:
|
62
59
|
cfg (dict[str, Any], optional): Default configuration dictionary containing training parameters.
|
63
60
|
overrides (dict[str, Any], optional): Dictionary of parameter overrides for the default configuration.
|
64
61
|
_callbacks (list[Any], optional): List of callback functions to be executed during training.
|
65
|
-
|
66
|
-
Examples:
|
67
|
-
Create a trainer with custom configuration
|
68
|
-
>>> from ultralytics.models.yolo.classify import ClassificationTrainer
|
69
|
-
>>> args = dict(model="yolo11n-cls.pt", data="imagenet10", epochs=3)
|
70
|
-
>>> trainer = ClassificationTrainer(overrides=args)
|
71
|
-
>>> trainer.train()
|
72
62
|
"""
|
73
63
|
if overrides is None:
|
74
64
|
overrides = {}
|
@@ -155,7 +145,7 @@ class ClassificationTrainer(BaseTrainer):
|
|
155
145
|
with torch_distributed_zero_first(rank): # init dataset *.cache only once if DDP
|
156
146
|
dataset = self.build_dataset(dataset_path, mode)
|
157
147
|
|
158
|
-
loader = build_dataloader(dataset, batch_size, self.args.workers, rank=rank)
|
148
|
+
loader = build_dataloader(dataset, batch_size, self.args.workers, rank=rank, drop_last=self.args.compile)
|
159
149
|
# Attach inference transforms
|
160
150
|
if mode != "train":
|
161
151
|
if is_parallel(self.model):
|
@@ -8,16 +8,17 @@ from copy import copy
|
|
8
8
|
from typing import Any
|
9
9
|
|
10
10
|
import numpy as np
|
11
|
+
import torch
|
11
12
|
import torch.nn as nn
|
12
13
|
|
13
14
|
from ultralytics.data import build_dataloader, build_yolo_dataset
|
14
15
|
from ultralytics.engine.trainer import BaseTrainer
|
15
16
|
from ultralytics.models import yolo
|
16
17
|
from ultralytics.nn.tasks import DetectionModel
|
17
|
-
from ultralytics.utils import LOGGER, RANK
|
18
|
+
from ultralytics.utils import DEFAULT_CFG, LOGGER, RANK
|
18
19
|
from ultralytics.utils.patches import override_configs
|
19
20
|
from ultralytics.utils.plotting import plot_images, plot_labels, plot_results
|
20
|
-
from ultralytics.utils.torch_utils import
|
21
|
+
from ultralytics.utils.torch_utils import torch_distributed_zero_first, unwrap_model
|
21
22
|
|
22
23
|
|
23
24
|
class DetectionTrainer(BaseTrainer):
|
@@ -53,6 +54,17 @@ class DetectionTrainer(BaseTrainer):
|
|
53
54
|
>>> trainer.train()
|
54
55
|
"""
|
55
56
|
|
57
|
+
def __init__(self, cfg=DEFAULT_CFG, overrides: dict[str, Any] | None = None, _callbacks=None):
|
58
|
+
"""
|
59
|
+
Initialize a DetectionTrainer object for training YOLO object detection model training.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
cfg (dict, optional): Default configuration dictionary containing training parameters.
|
63
|
+
overrides (dict, optional): Dictionary of parameter overrides for the default configuration.
|
64
|
+
_callbacks (list, optional): List of callback functions to be executed during training.
|
65
|
+
"""
|
66
|
+
super().__init__(cfg, overrides, _callbacks)
|
67
|
+
|
56
68
|
def build_dataset(self, img_path: str, mode: str = "train", batch: int | None = None):
|
57
69
|
"""
|
58
70
|
Build YOLO Dataset for training or validation.
|
@@ -65,7 +77,7 @@ class DetectionTrainer(BaseTrainer):
|
|
65
77
|
Returns:
|
66
78
|
(Dataset): YOLO dataset object configured for the specified mode.
|
67
79
|
"""
|
68
|
-
gs = max(int(
|
80
|
+
gs = max(int(unwrap_model(self.model).stride.max() if self.model else 0), 32)
|
69
81
|
return build_yolo_dataset(self.args, img_path, batch, self.data, mode=mode, rect=mode == "val", stride=gs)
|
70
82
|
|
71
83
|
def get_dataloader(self, dataset_path: str, batch_size: int = 16, rank: int = 0, mode: str = "train"):
|
@@ -88,8 +100,14 @@ class DetectionTrainer(BaseTrainer):
|
|
88
100
|
if getattr(dataset, "rect", False) and shuffle:
|
89
101
|
LOGGER.warning("'rect=True' is incompatible with DataLoader shuffle, setting shuffle=False")
|
90
102
|
shuffle = False
|
91
|
-
|
92
|
-
|
103
|
+
return build_dataloader(
|
104
|
+
dataset,
|
105
|
+
batch=batch_size,
|
106
|
+
workers=self.args.workers if mode == "train" else self.args.workers * 2,
|
107
|
+
shuffle=shuffle,
|
108
|
+
rank=rank,
|
109
|
+
drop_last=self.args.compile and mode == "train",
|
110
|
+
)
|
93
111
|
|
94
112
|
def preprocess_batch(self, batch: dict) -> dict:
|
95
113
|
"""
|
@@ -101,7 +119,10 @@ class DetectionTrainer(BaseTrainer):
|
|
101
119
|
Returns:
|
102
120
|
(dict): Preprocessed batch with normalized images.
|
103
121
|
"""
|
104
|
-
|
122
|
+
for k, v in batch.items():
|
123
|
+
if isinstance(v, torch.Tensor):
|
124
|
+
batch[k] = v.to(self.device, non_blocking=True)
|
125
|
+
batch["img"] = batch["img"].float() / 255
|
105
126
|
if self.args.multi_scale:
|
106
127
|
imgs = batch["img"]
|
107
128
|
sz = (
|
@@ -71,11 +71,10 @@ class DetectionValidator(BaseValidator):
|
|
71
71
|
Returns:
|
72
72
|
(dict[str, Any]): Preprocessed batch.
|
73
73
|
"""
|
74
|
-
|
74
|
+
for k, v in batch.items():
|
75
|
+
if isinstance(v, torch.Tensor):
|
76
|
+
batch[k] = v.to(self.device, non_blocking=True)
|
75
77
|
batch["img"] = (batch["img"].half() if self.args.half else batch["img"].float()) / 255
|
76
|
-
for k in {"batch_idx", "cls", "bboxes"}:
|
77
|
-
batch[k] = batch[k].to(self.device, non_blocking=True)
|
78
|
-
|
79
78
|
return batch
|
80
79
|
|
81
80
|
def init_metrics(self, model: torch.nn.Module) -> None:
|
@@ -300,7 +299,9 @@ class DetectionValidator(BaseValidator):
|
|
300
299
|
(torch.utils.data.DataLoader): Dataloader for validation.
|
301
300
|
"""
|
302
301
|
dataset = self.build_dataset(dataset_path, batch=batch_size, mode="val")
|
303
|
-
return build_dataloader(
|
302
|
+
return build_dataloader(
|
303
|
+
dataset, batch_size, self.args.workers, shuffle=False, rank=-1, drop_last=self.args.compile
|
304
|
+
)
|
304
305
|
|
305
306
|
def plot_val_samples(self, batch: dict[str, Any], ni: int) -> None:
|
306
307
|
"""
|
@@ -37,21 +37,12 @@ class OBBTrainer(yolo.detect.DetectionTrainer):
|
|
37
37
|
"""
|
38
38
|
Initialize an OBBTrainer object for training Oriented Bounding Box (OBB) models.
|
39
39
|
|
40
|
-
This trainer extends the DetectionTrainer class to specialize in training models that detect oriented
|
41
|
-
bounding boxes. It automatically sets the task to 'obb' in the configuration.
|
42
|
-
|
43
40
|
Args:
|
44
41
|
cfg (dict, optional): Configuration dictionary for the trainer. Contains training parameters and
|
45
42
|
model configuration.
|
46
43
|
overrides (dict, optional): Dictionary of parameter overrides for the configuration. Any values here
|
47
44
|
will take precedence over those in cfg.
|
48
45
|
_callbacks (list[Any], optional): List of callback functions to be invoked during training.
|
49
|
-
|
50
|
-
Examples:
|
51
|
-
>>> from ultralytics.models.yolo.obb import OBBTrainer
|
52
|
-
>>> args = dict(model="yolo11n-obb.pt", data="dota8.yaml", epochs=3)
|
53
|
-
>>> trainer = OBBTrainer(overrides=args)
|
54
|
-
>>> trainer.train()
|
55
46
|
"""
|
56
47
|
if overrides is None:
|
57
48
|
overrides = {}
|
@@ -44,9 +44,6 @@ class PoseTrainer(yolo.detect.DetectionTrainer):
|
|
44
44
|
"""
|
45
45
|
Initialize a PoseTrainer object for training YOLO pose estimation models.
|
46
46
|
|
47
|
-
This initializes a trainer specialized for pose estimation tasks, setting the task to 'pose' and
|
48
|
-
handling specific configurations needed for keypoint detection models.
|
49
|
-
|
50
47
|
Args:
|
51
48
|
cfg (dict, optional): Default configuration dictionary containing training parameters.
|
52
49
|
overrides (dict, optional): Dictionary of parameter overrides for the default configuration.
|
@@ -55,12 +52,6 @@ class PoseTrainer(yolo.detect.DetectionTrainer):
|
|
55
52
|
Notes:
|
56
53
|
This trainer will automatically set the task to 'pose' regardless of what is provided in overrides.
|
57
54
|
A warning is issued when using Apple MPS device due to known bugs with pose models.
|
58
|
-
|
59
|
-
Examples:
|
60
|
-
>>> from ultralytics.models.yolo.pose import PoseTrainer
|
61
|
-
>>> args = dict(model="yolo11n-pose.pt", data="coco8-pose.yaml", epochs=3)
|
62
|
-
>>> trainer = PoseTrainer(overrides=args)
|
63
|
-
>>> trainer.train()
|
64
55
|
"""
|
65
56
|
if overrides is None:
|
66
57
|
overrides = {}
|
@@ -86,7 +86,7 @@ class PoseValidator(DetectionValidator):
|
|
86
86
|
def preprocess(self, batch: dict[str, Any]) -> dict[str, Any]:
|
87
87
|
"""Preprocess batch by converting keypoints data to float and moving it to the device."""
|
88
88
|
batch = super().preprocess(batch)
|
89
|
-
batch["keypoints"] = batch["keypoints"].
|
89
|
+
batch["keypoints"] = batch["keypoints"].float()
|
90
90
|
return batch
|
91
91
|
|
92
92
|
def get_desc(self) -> str:
|
@@ -32,19 +32,10 @@ class SegmentationTrainer(yolo.detect.DetectionTrainer):
|
|
32
32
|
"""
|
33
33
|
Initialize a SegmentationTrainer object.
|
34
34
|
|
35
|
-
This initializes a trainer for segmentation tasks, extending the detection trainer with segmentation-specific
|
36
|
-
functionality. It sets the task to 'segment' and prepares the trainer for training segmentation models.
|
37
|
-
|
38
35
|
Args:
|
39
36
|
cfg (dict): Configuration dictionary with default training settings.
|
40
37
|
overrides (dict, optional): Dictionary of parameter overrides for the default configuration.
|
41
38
|
_callbacks (list, optional): List of callback functions to be executed during training.
|
42
|
-
|
43
|
-
Examples:
|
44
|
-
>>> from ultralytics.models.yolo.segment import SegmentationTrainer
|
45
|
-
>>> args = dict(model="yolo11n-seg.pt", data="coco8-seg.yaml", epochs=3)
|
46
|
-
>>> trainer = SegmentationTrainer(overrides=args)
|
47
|
-
>>> trainer.train()
|
48
39
|
"""
|
49
40
|
if overrides is None:
|
50
41
|
overrides = {}
|
@@ -63,7 +63,7 @@ class SegmentationValidator(DetectionValidator):
|
|
63
63
|
(dict[str, Any]): Preprocessed batch.
|
64
64
|
"""
|
65
65
|
batch = super().preprocess(batch)
|
66
|
-
batch["masks"] = batch["masks"].
|
66
|
+
batch["masks"] = batch["masks"].float()
|
67
67
|
return batch
|
68
68
|
|
69
69
|
def init_metrics(self, model: torch.nn.Module) -> None:
|
@@ -187,10 +187,10 @@ class SegmentationValidator(DetectionValidator):
|
|
187
187
|
"""
|
188
188
|
for p in preds:
|
189
189
|
masks = p["masks"]
|
190
|
-
if masks.shape[0] >
|
191
|
-
LOGGER.warning("Limiting validation plots to
|
192
|
-
p["masks"] = torch.as_tensor(masks[:
|
193
|
-
super().plot_predictions(batch, preds, ni, max_det=
|
190
|
+
if masks.shape[0] > self.args.max_det:
|
191
|
+
LOGGER.warning(f"Limiting validation plots to 'max_det={self.args.max_det}' items.")
|
192
|
+
p["masks"] = torch.as_tensor(masks[: self.args.max_det], dtype=torch.uint8).cpu()
|
193
|
+
super().plot_predictions(batch, preds, ni, max_det=self.args.max_det) # plot bboxes
|
194
194
|
|
195
195
|
def save_one_txt(self, predn: torch.Tensor, save_conf: bool, shape: tuple[int, int], file: Path) -> None:
|
196
196
|
"""
|