dgenerate-ultralytics-headless 8.3.191__tar.gz → 8.3.193__tar.gz

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