ultralytics 8.3.212__tar.gz → 8.3.213__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.
- {ultralytics-8.3.212 → ultralytics-8.3.213}/PKG-INFO +1 -1
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/test_engine.py +19 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/test_python.py +3 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/Objects365.yaml +19 -15
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/VOC.yaml +4 -5
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/VisDrone.yaml +5 -5
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco-pose.yaml +3 -2
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco.yaml +2 -2
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/lvis.yaml +2 -2
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/trainer.py +51 -10
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics.egg-info/PKG-INFO +1 -1
- {ultralytics-8.3.212 → ultralytics-8.3.213}/LICENSE +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/README.md +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/pyproject.toml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/setup.cfg +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/conftest.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/test_cli.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/test_exports.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/base.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/split.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/exporter.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/nn/text_model.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/py.typed +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/config.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/object_blurrer.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/similarity_search.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/solutions.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/templates/similarity-search.html +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/solutions/vision_eye.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/autodevice.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/platform.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/cpu.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/events.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/export/__init__.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/export/imx.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/git.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/logger.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/nms.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/tqdm.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics.egg-info/requires.txt +0 -0
- {ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.213
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -3,6 +3,8 @@
|
|
3
3
|
import sys
|
4
4
|
from unittest import mock
|
5
5
|
|
6
|
+
import torch
|
7
|
+
|
6
8
|
from tests import MODEL
|
7
9
|
from ultralytics import YOLO
|
8
10
|
from ultralytics.cfg import get_cfg
|
@@ -136,3 +138,20 @@ def test_classify():
|
|
136
138
|
assert test_func in pred.callbacks["on_predict_start"], "callback test failed"
|
137
139
|
result = pred(source=ASSETS, model=trainer.best)
|
138
140
|
assert len(result), "predictor test failed"
|
141
|
+
|
142
|
+
|
143
|
+
def test_nan_recovery():
|
144
|
+
"""Test NaN loss detection and recovery during training."""
|
145
|
+
nan_injected = [False]
|
146
|
+
|
147
|
+
def inject_nan(trainer):
|
148
|
+
"""Inject NaN into loss during batch processing to test recovery mechanism."""
|
149
|
+
if trainer.epoch == 1 and trainer.tloss is not None and not nan_injected[0]:
|
150
|
+
trainer.tloss *= torch.tensor(float("nan"))
|
151
|
+
nan_injected[0] = True
|
152
|
+
|
153
|
+
overrides = {"data": "coco8.yaml", "model": "yolo11n.yaml", "imgsz": 32, "epochs": 3}
|
154
|
+
trainer = detect.DetectionTrainer(overrides=overrides)
|
155
|
+
trainer.add_callback("on_train_batch_end", inject_nan)
|
156
|
+
trainer.train()
|
157
|
+
assert nan_injected[0], "NaN injection failed"
|
@@ -23,6 +23,8 @@ from ultralytics.utils import (
|
|
23
23
|
ASSETS_URL,
|
24
24
|
DEFAULT_CFG,
|
25
25
|
DEFAULT_CFG_PATH,
|
26
|
+
IS_JETSON,
|
27
|
+
IS_RASPBERRYPI,
|
26
28
|
LINUX,
|
27
29
|
LOGGER,
|
28
30
|
ONLINE,
|
@@ -217,6 +219,7 @@ def test_val(task: str, weight: str, data: str) -> None:
|
|
217
219
|
metrics.confusion_matrix.to_json()
|
218
220
|
|
219
221
|
|
222
|
+
@pytest.mark.skipif(IS_JETSON or IS_RASPBERRYPI, reason="Edge devices not intended for training")
|
220
223
|
def test_train_scratch():
|
221
224
|
"""Test training the YOLO model from scratch using the provided configuration."""
|
222
225
|
model = YOLO(CFG)
|
@@ -384,6 +384,7 @@ names:
|
|
384
384
|
|
385
385
|
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
386
386
|
download: |
|
387
|
+
from concurrent.futures import ThreadPoolExecutor
|
387
388
|
from pathlib import Path
|
388
389
|
|
389
390
|
import numpy as np
|
@@ -396,31 +397,28 @@ download: |
|
|
396
397
|
check_requirements("faster-coco-eval")
|
397
398
|
from faster_coco_eval import COCO
|
398
399
|
|
399
|
-
# Make Directories
|
400
|
-
dir = Path(yaml["path"]) # dataset root dir
|
401
|
-
for p in "images", "labels":
|
402
|
-
(dir / p).mkdir(parents=True, exist_ok=True)
|
403
|
-
for q in "train", "val":
|
404
|
-
(dir / p / q).mkdir(parents=True, exist_ok=True)
|
405
|
-
|
406
400
|
# Train, Val Splits
|
401
|
+
dir = Path(yaml["path"])
|
407
402
|
for split, patches in [("train", 50 + 1), ("val", 43 + 1)]:
|
408
403
|
print(f"Processing {split} in {patches} patches ...")
|
409
404
|
images, labels = dir / "images" / split, dir / "labels" / split
|
405
|
+
images.mkdir(parents=True, exist_ok=True)
|
406
|
+
labels.mkdir(parents=True, exist_ok=True)
|
410
407
|
|
411
408
|
# Download
|
412
409
|
url = f"https://dorc.ks3-cn-beijing.ksyun.com/data-set/2020Objects365%E6%95%B0%E6%8D%AE%E9%9B%86/{split}/"
|
413
410
|
if split == "train":
|
414
411
|
download([f"{url}zhiyuan_objv2_{split}.tar.gz"], dir=dir) # annotations json
|
415
|
-
download([f"{url}patch{i}.tar.gz" for i in range(patches)], dir=images,
|
412
|
+
download([f"{url}patch{i}.tar.gz" for i in range(patches)], dir=images, threads=17) # 51 patches / 17 threads = 3
|
416
413
|
elif split == "val":
|
417
414
|
download([f"{url}zhiyuan_objv2_{split}.json"], dir=dir) # annotations json
|
418
|
-
download([f"{url}images/v1/patch{i}.tar.gz" for i in range(15 + 1)], dir=images,
|
419
|
-
download([f"{url}images/v2/patch{i}.tar.gz" for i in range(16, patches)], dir=images,
|
415
|
+
download([f"{url}images/v1/patch{i}.tar.gz" for i in range(15 + 1)], dir=images, threads=16)
|
416
|
+
download([f"{url}images/v2/patch{i}.tar.gz" for i in range(16, patches)], dir=images, threads=16)
|
420
417
|
|
421
418
|
# Move
|
422
|
-
|
423
|
-
|
419
|
+
files = list(images.rglob("*.jpg"))
|
420
|
+
with ThreadPoolExecutor(max_workers=16) as executor:
|
421
|
+
list(TQDM(executor.map(lambda f: f.rename(images / f.name), files), total=len(files), desc=f"Moving {split} images"))
|
424
422
|
|
425
423
|
# Labels
|
426
424
|
coco = COCO(dir / f"zhiyuan_objv2_{split}.json")
|
@@ -428,10 +426,12 @@ download: |
|
|
428
426
|
for cid, cat in enumerate(names):
|
429
427
|
catIds = coco.getCatIds(catNms=[cat])
|
430
428
|
imgIds = coco.getImgIds(catIds=catIds)
|
431
|
-
|
432
|
-
|
433
|
-
|
429
|
+
|
430
|
+
def process_annotation(im):
|
431
|
+
"""Process and write annotations for a single image."""
|
434
432
|
try:
|
433
|
+
width, height = im["width"], im["height"]
|
434
|
+
path = Path(im["file_name"])
|
435
435
|
with open(labels / path.with_suffix(".txt").name, "a", encoding="utf-8") as file:
|
436
436
|
annIds = coco.getAnnIds(imgIds=im["id"], catIds=catIds, iscrowd=None)
|
437
437
|
for a in coco.loadAnns(annIds):
|
@@ -441,3 +441,7 @@ download: |
|
|
441
441
|
file.write(f"{cid} {x:.5f} {y:.5f} {w:.5f} {h:.5f}\n")
|
442
442
|
except Exception as e:
|
443
443
|
print(e)
|
444
|
+
|
445
|
+
images_list = coco.loadImgs(imgIds)
|
446
|
+
with ThreadPoolExecutor(max_workers=16) as executor:
|
447
|
+
list(TQDM(executor.map(process_annotation, images_list), total=len(images_list), desc=f"Class {cid + 1}/{len(names)} {cat}"))
|
@@ -49,7 +49,7 @@ download: |
|
|
49
49
|
from pathlib import Path
|
50
50
|
|
51
51
|
from ultralytics.utils.downloads import download
|
52
|
-
from ultralytics.utils import TQDM
|
52
|
+
from ultralytics.utils import ASSETS_URL, TQDM
|
53
53
|
|
54
54
|
def convert_label(path, lb_path, year, image_id):
|
55
55
|
"""Converts XML annotations from VOC format to YOLO format by extracting bounding boxes and class IDs."""
|
@@ -79,11 +79,10 @@ download: |
|
|
79
79
|
|
80
80
|
# Download
|
81
81
|
dir = Path(yaml["path"]) # dataset root dir
|
82
|
-
url = "https://github.com/ultralytics/assets/releases/download/v0.0.0/"
|
83
82
|
urls = [
|
84
|
-
f"{
|
85
|
-
f"{
|
86
|
-
f"{
|
83
|
+
f"{ASSETS_URL}/VOCtrainval_06-Nov-2007.zip", # 446MB, 5012 images
|
84
|
+
f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip", # 438MB, 4953 images
|
85
|
+
f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip", # 1.95GB, 17126 images
|
87
86
|
]
|
88
87
|
download(urls, dir=dir / "images", threads=3, exist_ok=True) # download and unzip over existing (required)
|
89
88
|
|
@@ -34,7 +34,7 @@ download: |
|
|
34
34
|
import shutil
|
35
35
|
|
36
36
|
from ultralytics.utils.downloads import download
|
37
|
-
from ultralytics.utils import TQDM
|
37
|
+
from ultralytics.utils import ASSETS_URL, TQDM
|
38
38
|
|
39
39
|
|
40
40
|
def visdrone2yolo(dir, split, source_name=None):
|
@@ -73,10 +73,10 @@ download: |
|
|
73
73
|
# Download (ignores test-challenge split)
|
74
74
|
dir = Path(yaml["path"]) # dataset root dir
|
75
75
|
urls = [
|
76
|
-
"
|
77
|
-
"
|
78
|
-
"
|
79
|
-
# "
|
76
|
+
f"{ASSETS_URL}/VisDrone2019-DET-train.zip",
|
77
|
+
f"{ASSETS_URL}/VisDrone2019-DET-val.zip",
|
78
|
+
f"{ASSETS_URL}/VisDrone2019-DET-test-dev.zip",
|
79
|
+
# f"{ASSETS_URL}/VisDrone2019-DET-test-challenge.zip",
|
80
80
|
]
|
81
81
|
download(urls, dir=dir, threads=4)
|
82
82
|
|
@@ -26,12 +26,13 @@ names:
|
|
26
26
|
download: |
|
27
27
|
from pathlib import Path
|
28
28
|
|
29
|
+
from ultralytics.utils import ASSETS_URL
|
29
30
|
from ultralytics.utils.downloads import download
|
30
31
|
|
31
32
|
# Download labels
|
32
33
|
dir = Path(yaml["path"]) # dataset root dir
|
33
|
-
|
34
|
-
urls = [f"{
|
34
|
+
|
35
|
+
urls = [f"{ASSETS_URL}/coco2017labels-pose.zip"]
|
35
36
|
download(urls, dir=dir.parent)
|
36
37
|
# Download data
|
37
38
|
urls = [
|
@@ -101,13 +101,13 @@ names:
|
|
101
101
|
download: |
|
102
102
|
from pathlib import Path
|
103
103
|
|
104
|
+
from ultralytics.utils import ASSETS_URL
|
104
105
|
from ultralytics.utils.downloads import download
|
105
106
|
|
106
107
|
# Download labels
|
107
108
|
segments = True # segment or box labels
|
108
109
|
dir = Path(yaml["path"]) # dataset root dir
|
109
|
-
|
110
|
-
urls = [url + ("coco2017labels-segments.zip" if segments else "coco2017labels.zip")] # labels
|
110
|
+
urls = [ASSETS_URL + ("/coco2017labels-segments.zip" if segments else "/coco2017labels.zip")] # labels
|
111
111
|
download(urls, dir=dir.parent)
|
112
112
|
# Download data
|
113
113
|
urls = [
|
@@ -1223,12 +1223,12 @@ names:
|
|
1223
1223
|
download: |
|
1224
1224
|
from pathlib import Path
|
1225
1225
|
|
1226
|
+
from ultralytics.utils import ASSETS_URL
|
1226
1227
|
from ultralytics.utils.downloads import download
|
1227
1228
|
|
1228
1229
|
# Download labels
|
1229
1230
|
dir = Path(yaml["path"]) # dataset root dir
|
1230
|
-
|
1231
|
-
urls = [f"{url}lvis-labels-segments.zip"]
|
1231
|
+
urls = [f"{ASSETS_URL}/lvis-labels-segments.zip"]
|
1232
1232
|
download(urls, dir=dir.parent)
|
1233
1233
|
|
1234
1234
|
# Download data
|
@@ -171,6 +171,7 @@ class BaseTrainer:
|
|
171
171
|
self.loss_names = ["Loss"]
|
172
172
|
self.csv = self.save_dir / "results.csv"
|
173
173
|
self.plot_idx = [0, 1, 2]
|
174
|
+
self.nan_recovery_attempts = 0
|
174
175
|
|
175
176
|
# Callbacks
|
176
177
|
self.callbacks = _callbacks or callbacks.get_default_callbacks()
|
@@ -458,6 +459,7 @@ class BaseTrainer:
|
|
458
459
|
self.run_callbacks("on_train_batch_end")
|
459
460
|
|
460
461
|
self.lr = {f"lr/pg{ir}": x["lr"] for ir, x in enumerate(self.optimizer.param_groups)} # for loggers
|
462
|
+
|
461
463
|
self.run_callbacks("on_train_epoch_end")
|
462
464
|
if RANK in {-1, 0}:
|
463
465
|
final_epoch = epoch + 1 >= self.epochs
|
@@ -467,6 +469,13 @@ class BaseTrainer:
|
|
467
469
|
if self.args.val or final_epoch or self.stopper.possible_stop or self.stop:
|
468
470
|
self._clear_memory(threshold=0.5) # prevent VRAM spike
|
469
471
|
self.metrics, self.fitness = self.validate()
|
472
|
+
|
473
|
+
# NaN recovery
|
474
|
+
if self._handle_nan_recovery(epoch):
|
475
|
+
continue
|
476
|
+
|
477
|
+
self.nan_recovery_attempts = 0
|
478
|
+
if RANK in {-1, 0}:
|
470
479
|
self.save_metrics(metrics={**self.label_loss_items(self.tloss), **self.metrics, **self.lr})
|
471
480
|
self.stop |= self.stopper(epoch + 1, self.fitness) or final_epoch
|
472
481
|
if self.args.time:
|
@@ -804,20 +813,52 @@ class BaseTrainer:
|
|
804
813
|
) from e
|
805
814
|
self.resume = resume
|
806
815
|
|
807
|
-
def
|
808
|
-
"""
|
809
|
-
if ckpt is None or not self.resume:
|
810
|
-
return
|
811
|
-
best_fitness = 0.0
|
812
|
-
start_epoch = ckpt.get("epoch", -1) + 1
|
816
|
+
def _load_checkpoint_state(self, ckpt):
|
817
|
+
"""Load optimizer, scaler, EMA, and best_fitness from checkpoint."""
|
813
818
|
if ckpt.get("optimizer") is not None:
|
814
|
-
self.optimizer.load_state_dict(ckpt["optimizer"])
|
815
|
-
best_fitness = ckpt["best_fitness"]
|
819
|
+
self.optimizer.load_state_dict(ckpt["optimizer"])
|
816
820
|
if ckpt.get("scaler") is not None:
|
817
821
|
self.scaler.load_state_dict(ckpt["scaler"])
|
818
822
|
if self.ema and ckpt.get("ema"):
|
819
|
-
self.ema.ema.load_state_dict(ckpt["ema"].float().state_dict())
|
823
|
+
self.ema.ema.load_state_dict(ckpt["ema"].float().state_dict())
|
820
824
|
self.ema.updates = ckpt["updates"]
|
825
|
+
self.best_fitness = ckpt.get("best_fitness", 0.0)
|
826
|
+
|
827
|
+
def _handle_nan_recovery(self, epoch):
|
828
|
+
"""Detect and recover from NaN/Inf loss or fitness collapse by loading last checkpoint."""
|
829
|
+
loss_nan = self.tloss is not None and not torch.isfinite(self.tloss).all()
|
830
|
+
fitness_nan = self.fitness is not None and not np.isfinite(self.fitness)
|
831
|
+
fitness_collapse = self.best_fitness and self.best_fitness > 0 and self.fitness == 0
|
832
|
+
corrupted = RANK in {-1, 0} and (loss_nan or fitness_nan or fitness_collapse)
|
833
|
+
reason = "Loss NaN/Inf" if loss_nan else "Fitness NaN/Inf" if fitness_nan else "Fitness collapse"
|
834
|
+
if RANK != -1: # DDP: broadcast to all ranks
|
835
|
+
broadcast_list = [corrupted if RANK == 0 else None]
|
836
|
+
dist.broadcast_object_list(broadcast_list, 0)
|
837
|
+
corrupted = broadcast_list[0]
|
838
|
+
if not corrupted:
|
839
|
+
return False
|
840
|
+
if epoch == self.start_epoch or not self.last.exists():
|
841
|
+
LOGGER.warning(f"{reason} detected but can not recover from last.pt...")
|
842
|
+
return False # Cannot recover on first epoch, let training continue
|
843
|
+
self.nan_recovery_attempts += 1
|
844
|
+
if self.nan_recovery_attempts > 3:
|
845
|
+
raise RuntimeError(f"Training failed: NaN persisted for {self.nan_recovery_attempts} epochs")
|
846
|
+
LOGGER.warning(f"{reason} detected (attempt {self.nan_recovery_attempts}/3), recovering from last.pt...")
|
847
|
+
_, ckpt = load_checkpoint(self.last)
|
848
|
+
ema_state = ckpt["ema"].float().state_dict()
|
849
|
+
if not all(torch.isfinite(v).all() for v in ema_state.values() if isinstance(v, torch.Tensor)):
|
850
|
+
raise RuntimeError(f"Checkpoint {self.last} is corrupted with NaN/Inf weights")
|
851
|
+
unwrap_model(self.model).load_state_dict(ema_state) # Load EMA weights into model
|
852
|
+
self._load_checkpoint_state(ckpt) # Load optimizer/scaler/EMA/best_fitness
|
853
|
+
del ckpt, ema_state
|
854
|
+
self.scheduler.last_epoch = epoch - 1
|
855
|
+
return True
|
856
|
+
|
857
|
+
def resume_training(self, ckpt):
|
858
|
+
"""Resume YOLO training from given epoch and best fitness."""
|
859
|
+
if ckpt is None or not self.resume:
|
860
|
+
return
|
861
|
+
start_epoch = ckpt.get("epoch", -1) + 1
|
821
862
|
assert start_epoch > 0, (
|
822
863
|
f"{self.args.model} training to {self.epochs} epochs is finished, nothing to resume.\n"
|
823
864
|
f"Start a new training without resuming, i.e. 'yolo train model={self.args.model}'"
|
@@ -828,7 +869,7 @@ class BaseTrainer:
|
|
828
869
|
f"{self.model} has been trained for {ckpt['epoch']} epochs. Fine-tuning for {self.epochs} more epochs."
|
829
870
|
)
|
830
871
|
self.epochs += ckpt["epoch"] # finetune additional epochs
|
831
|
-
self.
|
872
|
+
self._load_checkpoint_state(ckpt)
|
832
873
|
self.start_epoch = start_epoch
|
833
874
|
if start_epoch > (self.epochs - self.args.close_mosaic):
|
834
875
|
self._close_dataloader_mosaic()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.213
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/coco8-multispectral.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/datasets/dota8-multispectral.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml
RENAMED
File without changes
|
{ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml
RENAMED
File without changes
|
{ultralytics-8.3.212 → ultralytics-8.3.213}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|