dgenerate-ultralytics-headless 8.3.225__tar.gz → 8.3.227__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 (291) hide show
  1. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/PKG-INFO +4 -4
  2. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/README.md +2 -2
  3. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +4 -4
  4. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/dgenerate_ultralytics_headless.egg-info/requires.txt +3 -1
  5. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/pyproject.toml +1 -1
  6. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/test_cuda.py +1 -0
  7. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/test_python.py +41 -2
  8. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/__init__.py +1 -1
  9. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/__init__.py +11 -4
  10. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/augment.py +28 -12
  11. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/loaders.py +1 -1
  12. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/exporter.py +30 -66
  13. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/model.py +1 -0
  14. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/predictor.py +2 -3
  15. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/trainer.py +22 -6
  16. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/tuner.py +1 -2
  17. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/fastsam/model.py +1 -1
  18. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/detect/val.py +1 -1
  19. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/analytics.py +2 -0
  20. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/__init__.py +8 -8
  21. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/benchmarks.py +2 -2
  22. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/checks.py +8 -5
  23. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/cpu.py +2 -6
  24. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/git.py +1 -2
  25. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/logger.py +5 -0
  26. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/tqdm.py +3 -5
  27. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/triton.py +2 -1
  28. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/LICENSE +0 -0
  29. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
  30. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
  31. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
  32. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
  33. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/setup.cfg +0 -0
  34. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/__init__.py +0 -0
  35. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/conftest.py +0 -0
  36. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/test_cli.py +0 -0
  37. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/test_engine.py +0 -0
  38. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/test_exports.py +0 -0
  39. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/test_integrations.py +0 -0
  40. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/tests/test_solutions.py +0 -0
  41. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/assets/bus.jpg +0 -0
  42. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/assets/zidane.jpg +0 -0
  43. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  44. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  45. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  46. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  47. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  48. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  49. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  50. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  51. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  52. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  53. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  54. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  55. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  56. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  57. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco.yaml +0 -0
  58. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  59. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  60. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  61. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  62. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  63. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  64. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  65. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  66. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  67. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  68. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  69. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  70. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  71. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/kitti.yaml +0 -0
  72. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  73. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  74. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  75. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  76. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/signature.yaml +0 -0
  77. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  78. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/datasets/xView.yaml +0 -0
  79. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/default.yaml +0 -0
  80. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  81. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  82. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  83. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  84. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  85. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  86. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  87. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  88. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  89. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  90. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  91. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  92. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  93. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  94. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  95. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  96. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  97. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  98. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  99. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  100. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  101. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  102. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  103. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  104. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  105. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  106. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  107. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  108. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  109. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  110. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  111. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  112. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  113. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  114. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  115. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  116. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  117. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  118. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  119. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  120. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  121. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  122. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  123. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  124. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  125. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  126. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  127. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  128. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  129. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  130. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  131. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  132. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  133. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  134. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  135. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  136. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  137. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/__init__.py +0 -0
  138. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/annotator.py +0 -0
  139. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/base.py +0 -0
  140. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/build.py +0 -0
  141. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/converter.py +0 -0
  142. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/dataset.py +0 -0
  143. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/scripts/download_weights.sh +0 -0
  144. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/scripts/get_coco.sh +0 -0
  145. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/scripts/get_coco128.sh +0 -0
  146. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  147. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/split.py +0 -0
  148. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/split_dota.py +0 -0
  149. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/data/utils.py +0 -0
  150. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/__init__.py +0 -0
  151. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/results.py +0 -0
  152. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/engine/validator.py +0 -0
  153. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/hub/__init__.py +0 -0
  154. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/hub/auth.py +0 -0
  155. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/hub/google/__init__.py +0 -0
  156. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/hub/session.py +0 -0
  157. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/hub/utils.py +0 -0
  158. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/__init__.py +0 -0
  159. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/fastsam/__init__.py +0 -0
  160. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/fastsam/predict.py +0 -0
  161. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/fastsam/utils.py +0 -0
  162. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/fastsam/val.py +0 -0
  163. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/nas/__init__.py +0 -0
  164. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/nas/model.py +0 -0
  165. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/nas/predict.py +0 -0
  166. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/nas/val.py +0 -0
  167. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/rtdetr/__init__.py +0 -0
  168. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/rtdetr/model.py +0 -0
  169. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/rtdetr/predict.py +0 -0
  170. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/rtdetr/train.py +0 -0
  171. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/rtdetr/val.py +0 -0
  172. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/__init__.py +0 -0
  173. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/amg.py +0 -0
  174. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/build.py +0 -0
  175. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/model.py +0 -0
  176. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/__init__.py +0 -0
  177. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/blocks.py +0 -0
  178. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/decoders.py +0 -0
  179. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/encoders.py +0 -0
  180. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  181. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/sam.py +0 -0
  182. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  183. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/transformer.py +0 -0
  184. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/modules/utils.py +0 -0
  185. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/sam/predict.py +0 -0
  186. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/utils/__init__.py +0 -0
  187. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/utils/loss.py +0 -0
  188. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/utils/ops.py +0 -0
  189. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/__init__.py +0 -0
  190. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/classify/__init__.py +0 -0
  191. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/classify/predict.py +0 -0
  192. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/classify/train.py +0 -0
  193. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/classify/val.py +0 -0
  194. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/detect/__init__.py +0 -0
  195. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/detect/predict.py +0 -0
  196. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/detect/train.py +0 -0
  197. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/model.py +0 -0
  198. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/obb/__init__.py +0 -0
  199. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/obb/predict.py +0 -0
  200. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/obb/train.py +0 -0
  201. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/obb/val.py +0 -0
  202. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/pose/__init__.py +0 -0
  203. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/pose/predict.py +0 -0
  204. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/pose/train.py +0 -0
  205. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/pose/val.py +0 -0
  206. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/segment/__init__.py +0 -0
  207. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/segment/predict.py +0 -0
  208. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/segment/train.py +0 -0
  209. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/segment/val.py +0 -0
  210. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/world/__init__.py +0 -0
  211. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/world/train.py +0 -0
  212. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/world/train_world.py +0 -0
  213. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  214. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  215. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/yoloe/train.py +0 -0
  216. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  217. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/models/yolo/yoloe/val.py +0 -0
  218. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/__init__.py +0 -0
  219. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/autobackend.py +0 -0
  220. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/modules/__init__.py +0 -0
  221. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/modules/activation.py +0 -0
  222. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/modules/block.py +0 -0
  223. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/modules/conv.py +0 -0
  224. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/modules/head.py +0 -0
  225. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/modules/transformer.py +0 -0
  226. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/modules/utils.py +0 -0
  227. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/tasks.py +0 -0
  228. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/nn/text_model.py +0 -0
  229. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/py.typed +0 -0
  230. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/__init__.py +0 -0
  231. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/ai_gym.py +0 -0
  232. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/config.py +0 -0
  233. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/distance_calculation.py +0 -0
  234. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/heatmap.py +0 -0
  235. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/instance_segmentation.py +0 -0
  236. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/object_blurrer.py +0 -0
  237. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/object_counter.py +0 -0
  238. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/object_cropper.py +0 -0
  239. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/parking_management.py +0 -0
  240. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/queue_management.py +0 -0
  241. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/region_counter.py +0 -0
  242. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/security_alarm.py +0 -0
  243. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/similarity_search.py +0 -0
  244. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/solutions.py +0 -0
  245. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/speed_estimation.py +0 -0
  246. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/streamlit_inference.py +0 -0
  247. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/templates/similarity-search.html +0 -0
  248. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/trackzone.py +0 -0
  249. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/solutions/vision_eye.py +0 -0
  250. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/__init__.py +0 -0
  251. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/basetrack.py +0 -0
  252. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/bot_sort.py +0 -0
  253. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/byte_tracker.py +0 -0
  254. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/track.py +0 -0
  255. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/utils/__init__.py +0 -0
  256. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/utils/gmc.py +0 -0
  257. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  258. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/trackers/utils/matching.py +0 -0
  259. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/autobatch.py +0 -0
  260. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/autodevice.py +0 -0
  261. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/__init__.py +0 -0
  262. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/base.py +0 -0
  263. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/clearml.py +0 -0
  264. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/comet.py +0 -0
  265. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/dvc.py +0 -0
  266. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/hub.py +0 -0
  267. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/mlflow.py +0 -0
  268. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/neptune.py +0 -0
  269. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/platform.py +0 -0
  270. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/raytune.py +0 -0
  271. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  272. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/callbacks/wb.py +0 -0
  273. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/dist.py +0 -0
  274. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/downloads.py +0 -0
  275. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/errors.py +0 -0
  276. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/events.py +0 -0
  277. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/export/__init__.py +0 -0
  278. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/export/engine.py +0 -0
  279. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/export/imx.py +0 -0
  280. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/export/tensorflow.py +0 -0
  281. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/files.py +0 -0
  282. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/instance.py +0 -0
  283. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/loss.py +0 -0
  284. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/metrics.py +0 -0
  285. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/nms.py +0 -0
  286. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/ops.py +0 -0
  287. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/patches.py +0 -0
  288. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/plotting.py +0 -0
  289. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/tal.py +0 -0
  290. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/torch_utils.py +0 -0
  291. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.227}/ultralytics/utils/tuner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.225
3
+ Version: 8.3.227
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>
@@ -80,7 +80,7 @@ Requires-Dist: ipython; extra == "extra"
80
80
  Requires-Dist: albumentations>=1.4.6; extra == "extra"
81
81
  Requires-Dist: faster-coco-eval>=1.6.7; extra == "extra"
82
82
  Provides-Extra: typing
83
- Requires-Dist: scipy-stubs; extra == "typing"
83
+ Requires-Dist: scipy-stubs>=1.14.1.4; python_version >= "3.10" and extra == "typing"
84
84
  Requires-Dist: types-pillow; extra == "typing"
85
85
  Requires-Dist: types-psutil; extra == "typing"
86
86
  Requires-Dist: types-pyyaml; extra == "typing"
@@ -160,7 +160,7 @@ Request an Enterprise License for commercial use at [Ultralytics Licensing](http
160
160
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
161
161
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
162
162
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
163
- <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
163
+ <a href="https://www.youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
164
164
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
165
165
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
166
166
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
@@ -396,7 +396,7 @@ For bug reports and feature requests related to Ultralytics software, please vis
396
396
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
397
397
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
398
398
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
399
- <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
399
+ <a href="https://www.youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
400
400
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
401
401
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
402
402
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
@@ -70,7 +70,7 @@ Request an Enterprise License for commercial use at [Ultralytics Licensing](http
70
70
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
71
71
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
72
72
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
73
- <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
73
+ <a href="https://www.youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
74
74
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
75
75
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
76
76
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
@@ -306,7 +306,7 @@ For bug reports and feature requests related to Ultralytics software, please vis
306
306
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
307
307
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
308
308
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
309
- <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
309
+ <a href="https://www.youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
310
310
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
311
311
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
312
312
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.225
3
+ Version: 8.3.227
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>
@@ -80,7 +80,7 @@ Requires-Dist: ipython; extra == "extra"
80
80
  Requires-Dist: albumentations>=1.4.6; extra == "extra"
81
81
  Requires-Dist: faster-coco-eval>=1.6.7; extra == "extra"
82
82
  Provides-Extra: typing
83
- Requires-Dist: scipy-stubs; extra == "typing"
83
+ Requires-Dist: scipy-stubs>=1.14.1.4; python_version >= "3.10" and extra == "typing"
84
84
  Requires-Dist: types-pillow; extra == "typing"
85
85
  Requires-Dist: types-psutil; extra == "typing"
86
86
  Requires-Dist: types-pyyaml; extra == "typing"
@@ -160,7 +160,7 @@ Request an Enterprise License for commercial use at [Ultralytics Licensing](http
160
160
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
161
161
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
162
162
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
163
- <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
163
+ <a href="https://www.youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
164
164
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
165
165
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
166
166
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
@@ -396,7 +396,7 @@ For bug reports and feature requests related to Ultralytics software, please vis
396
396
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
397
397
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
398
398
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
399
- <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
399
+ <a href="https://www.youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
400
400
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
401
401
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
402
402
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
@@ -64,9 +64,11 @@ streamlit>=1.29.0
64
64
  flask>=3.0.1
65
65
 
66
66
  [typing]
67
- scipy-stubs
68
67
  types-pillow
69
68
  types-psutil
70
69
  types-pyyaml
71
70
  types-requests
72
71
  types-shapely
72
+
73
+ [typing:python_version >= "3.10"]
74
+ scipy-stubs>=1.14.1.4
@@ -118,7 +118,7 @@ extra = [
118
118
  "faster-coco-eval>=1.6.7", # COCO mAP
119
119
  ]
120
120
  typing = [
121
- "scipy-stubs",
121
+ "scipy-stubs>=1.14.1.4; python_version >= '3.10'",
122
122
  "types-pillow",
123
123
  "types-psutil",
124
124
  "types-pyyaml",
@@ -118,6 +118,7 @@ def test_train():
118
118
  results = YOLO(MODEL).train(
119
119
  data="coco8.yaml", imgsz=64, epochs=1, device=device, batch=15
120
120
  ) # requires imgsz>=64
121
+ results = YOLO(MODEL).train(data="coco8.yaml", imgsz=64, epochs=1, device=device, batch=15, val=False)
121
122
  visible = eval(os.environ["CUDA_VISIBLE_DEVICES"])
122
123
  assert visible == device, f"Passed GPUs '{device}', but used GPUs '{visible}'"
123
124
  assert (
@@ -385,7 +385,46 @@ def test_cfg_init():
385
385
  check_dict_alignment({"a": 1}, {"b": 2})
386
386
  copy_default_cfg()
387
387
  (Path.cwd() / DEFAULT_CFG_PATH.name.replace(".yaml", "_copy.yaml")).unlink(missing_ok=False)
388
- [smart_value(x) for x in {"none", "true", "false"}]
388
+
389
+ # Test smart_value() with comprehensive cases
390
+ # Test None conversion
391
+ assert smart_value("none") is None
392
+ assert smart_value("None") is None
393
+ assert smart_value("NONE") is None
394
+
395
+ # Test boolean conversion
396
+ assert smart_value("true") is True
397
+ assert smart_value("True") is True
398
+ assert smart_value("TRUE") is True
399
+ assert smart_value("false") is False
400
+ assert smart_value("False") is False
401
+ assert smart_value("FALSE") is False
402
+
403
+ # Test numeric conversion (ast.literal_eval)
404
+ assert smart_value("42") == 42
405
+ assert smart_value("-42") == -42
406
+ assert smart_value("3.14") == 3.14
407
+ assert smart_value("-3.14") == -3.14
408
+ assert smart_value("1e-3") == 0.001
409
+
410
+ # Test list/tuple conversion (ast.literal_eval)
411
+ assert smart_value("[1, 2, 3]") == [1, 2, 3]
412
+ assert smart_value("(1, 2, 3)") == (1, 2, 3)
413
+ assert smart_value("[640, 640]") == [640, 640]
414
+
415
+ # Test dict conversion (ast.literal_eval)
416
+ assert smart_value("{'a': 1, 'b': 2}") == {"a": 1, "b": 2}
417
+
418
+ # Test string fallback (when ast.literal_eval fails)
419
+ assert smart_value("some_string") == "some_string"
420
+ assert smart_value("path/to/file") == "path/to/file"
421
+ assert smart_value("hello world") == "hello world"
422
+
423
+ # Test that code injection is prevented (ast.literal_eval safety)
424
+ # These should return strings, not execute code
425
+ assert smart_value("__import__('os').system('ls')") == "__import__('os').system('ls')"
426
+ assert smart_value("eval('1+1')") == "eval('1+1')"
427
+ assert smart_value("exec('x=1')") == "exec('x=1')"
389
428
 
390
429
 
391
430
  def test_utils_init():
@@ -721,7 +760,7 @@ def test_grayscale(task: str, model: str, data: str, tmp_path) -> None:
721
760
  grayscale_data = tmp_path / f"{Path(data).stem}-grayscale.yaml"
722
761
  data = check_det_dataset(data)
723
762
  data["channels"] = 1 # add additional channels key for grayscale
724
- YAML.save(grayscale_data, data)
763
+ YAML.save(data=data, file=grayscale_data)
725
764
  # remove npy files in train/val splits if exists, might be created by previous tests
726
765
  for split in {"train", "val"}:
727
766
  for npy_file in (Path(data["path"]) / data[split]).glob("*.npy"):
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.225"
3
+ __version__ = "8.3.227"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import ast
5
6
  import shutil
6
7
  import subprocess
7
8
  import sys
@@ -459,7 +460,9 @@ def _handle_deprecation(custom: dict) -> dict:
459
460
  return custom
460
461
 
461
462
 
462
- def check_dict_alignment(base: dict, custom: dict, e: Exception | None = None) -> None:
463
+ def check_dict_alignment(
464
+ base: dict, custom: dict, e: Exception | None = None, allowed_custom_keys: set | None = None
465
+ ) -> None:
463
466
  """Check alignment between custom and base configuration dictionaries, handling deprecated keys and providing error
464
467
  messages for mismatched keys.
465
468
 
@@ -467,6 +470,7 @@ def check_dict_alignment(base: dict, custom: dict, e: Exception | None = None) -
467
470
  base (dict): The base configuration dictionary containing valid keys.
468
471
  custom (dict): The custom configuration dictionary to be checked for alignment.
469
472
  e (Exception | None): Optional error instance passed by the calling function.
473
+ allowed_custom_keys (set | None): Optional set of additional keys that are allowed in the custom dictionary.
470
474
 
471
475
  Raises:
472
476
  SystemExit: If mismatched keys are found between the custom and base dictionaries.
@@ -486,7 +490,10 @@ def check_dict_alignment(base: dict, custom: dict, e: Exception | None = None) -
486
490
  """
487
491
  custom = _handle_deprecation(custom)
488
492
  base_keys, custom_keys = (frozenset(x.keys()) for x in (base, custom))
489
- if mismatched := [k for k in custom_keys if k not in base_keys]:
493
+ # Allow 'augmentations' as a valid custom parameter for custom Albumentations transforms
494
+ if allowed_custom_keys is None:
495
+ allowed_custom_keys = {"augmentations"}
496
+ if mismatched := [k for k in custom_keys if k not in base_keys and k not in allowed_custom_keys]:
490
497
  from difflib import get_close_matches
491
498
 
492
499
  string = ""
@@ -797,7 +804,7 @@ def smart_value(v: str) -> Any:
797
804
 
798
805
  Notes:
799
806
  - The function uses a case-insensitive comparison for boolean and None values.
800
- - For other types, it attempts to use Python's eval() function, which can be unsafe if used on untrusted input.
807
+ - For other types, it attempts to use Python's ast.literal_eval() function for safe evaluation.
801
808
  - If no conversion is possible, the original string is returned.
802
809
  """
803
810
  v_lower = v.lower()
@@ -809,7 +816,7 @@ def smart_value(v: str) -> Any:
809
816
  return False
810
817
  else:
811
818
  try:
812
- return eval(v)
819
+ return ast.literal_eval(v)
813
820
  except Exception:
814
821
  return v
815
822
 
@@ -1845,7 +1845,7 @@ class Albumentations:
1845
1845
  - Spatial transforms are handled differently and require special processing for bounding boxes.
1846
1846
  """
1847
1847
 
1848
- def __init__(self, p: float = 1.0) -> None:
1848
+ def __init__(self, p: float = 1.0, transforms: list | None = None) -> None:
1849
1849
  """Initialize the Albumentations transform object for YOLO bbox formatted parameters.
1850
1850
 
1851
1851
  This class applies various image augmentations using the Albumentations library, including Blur, Median Blur,
@@ -1854,6 +1854,7 @@ class Albumentations:
1854
1854
 
1855
1855
  Args:
1856
1856
  p (float): Probability of applying the augmentations. Must be between 0 and 1.
1857
+ transforms (list, optional): List of custom Albumentations transforms. If None, uses default transforms.
1857
1858
 
1858
1859
  Attributes:
1859
1860
  p (float): Probability of applying the augmentations.
@@ -1870,6 +1871,11 @@ class Albumentations:
1870
1871
  >>> augmented_image = augmented["image"]
1871
1872
  >>> augmented_bboxes = augmented["bboxes"]
1872
1873
 
1874
+ >>> # Custom transforms example
1875
+ >>> import albumentations as A
1876
+ >>> custom_transforms = [A.Blur(p=0.01), A.CLAHE(p=0.01)]
1877
+ >>> transform = Albumentations(p=1.0, transforms=custom_transforms)
1878
+
1873
1879
  Notes:
1874
1880
  - Requires Albumentations version 1.0.3 or higher.
1875
1881
  - Spatial transforms are handled differently to ensure bbox compatibility.
@@ -1931,16 +1937,20 @@ class Albumentations:
1931
1937
  "XYMasking",
1932
1938
  } # from https://albumentations.ai/docs/getting_started/transforms_and_targets/#spatial-level-transforms
1933
1939
 
1934
- # Transforms
1935
- T = [
1936
- A.Blur(p=0.01),
1937
- A.MedianBlur(p=0.01),
1938
- A.ToGray(p=0.01),
1939
- A.CLAHE(p=0.01),
1940
- A.RandomBrightnessContrast(p=0.0),
1941
- A.RandomGamma(p=0.0),
1942
- A.ImageCompression(quality_range=(75, 100), p=0.0),
1943
- ]
1940
+ # Transforms, use custom transforms if provided, otherwise use defaults
1941
+ T = (
1942
+ [
1943
+ A.Blur(p=0.01),
1944
+ A.MedianBlur(p=0.01),
1945
+ A.ToGray(p=0.01),
1946
+ A.CLAHE(p=0.01),
1947
+ A.RandomBrightnessContrast(p=0.0),
1948
+ A.RandomGamma(p=0.0),
1949
+ A.ImageCompression(quality_range=(75, 100), p=0.0),
1950
+ ]
1951
+ if transforms is None
1952
+ else transforms
1953
+ )
1944
1954
 
1945
1955
  # Compose transforms
1946
1956
  self.contains_spatial = any(transform.__class__.__name__ in spatial_transforms for transform in T)
@@ -2482,6 +2492,12 @@ def v8_transforms(dataset, imgsz: int, hyp: IterableSimpleNamespace, stretch: bo
2482
2492
  >>> hyp = IterableSimpleNamespace(mosaic=1.0, copy_paste=0.5, degrees=10.0, translate=0.2, scale=0.9)
2483
2493
  >>> transforms = v8_transforms(dataset, imgsz=640, hyp=hyp)
2484
2494
  >>> augmented_data = transforms(dataset[0])
2495
+
2496
+ >>> # With custom albumentations
2497
+ >>> import albumentations as A
2498
+ >>> augmentations = [A.Blur(p=0.01), A.CLAHE(p=0.01)]
2499
+ >>> hyp.augmentations = augmentations
2500
+ >>> transforms = v8_transforms(dataset, imgsz=640, hyp=hyp)
2485
2501
  """
2486
2502
  mosaic = Mosaic(dataset, imgsz=imgsz, p=hyp.mosaic)
2487
2503
  affine = RandomPerspective(
@@ -2519,7 +2535,7 @@ def v8_transforms(dataset, imgsz: int, hyp: IterableSimpleNamespace, stretch: bo
2519
2535
  pre_transform,
2520
2536
  MixUp(dataset, pre_transform=pre_transform, p=hyp.mixup),
2521
2537
  CutMix(dataset, pre_transform=pre_transform, p=hyp.cutmix),
2522
- Albumentations(p=1.0),
2538
+ Albumentations(p=1.0, transforms=getattr(hyp, "augmentations", None)),
2523
2539
  RandomHSV(hgain=hyp.hsv_h, sgain=hyp.hsv_s, vgain=hyp.hsv_v),
2524
2540
  RandomFlip(direction="vertical", p=hyp.flipud, flip_idx=flip_idx),
2525
2541
  RandomFlip(direction="horizontal", p=hyp.fliplr, flip_idx=flip_idx),
@@ -123,7 +123,7 @@ class LoadStreams:
123
123
  if urllib.parse.urlparse(s).hostname in {"www.youtube.com", "youtube.com", "youtu.be"}: # YouTube video
124
124
  # YouTube format i.e. 'https://www.youtube.com/watch?v=Jsn8D3aC840' or 'https://youtu.be/Jsn8D3aC840'
125
125
  s = get_best_youtube_url(s)
126
- s = eval(s) if s.isnumeric() else s # i.e. s = '0' local webcam
126
+ s = int(s) if s.isnumeric() else s # i.e. s = '0' local webcam
127
127
  if s == 0 and (IS_COLAB or IS_KAGGLE):
128
128
  raise NotImplementedError(
129
129
  "'source=0' webcam not supported in Colab and Kaggle notebooks. "
@@ -90,7 +90,6 @@ from ultralytics.utils import (
90
90
  MACOS,
91
91
  MACOS_VERSION,
92
92
  RKNN_CHIPS,
93
- ROOT,
94
93
  SETTINGS,
95
94
  TORCH_VERSION,
96
95
  WINDOWS,
@@ -101,13 +100,11 @@ from ultralytics.utils import (
101
100
  )
102
101
  from ultralytics.utils.checks import (
103
102
  check_imgsz,
104
- check_is_path_safe,
105
103
  check_requirements,
106
104
  check_version,
107
105
  is_intel,
108
106
  is_sudo_available,
109
107
  )
110
- from ultralytics.utils.downloads import get_github_assets, safe_download
111
108
  from ultralytics.utils.export import (
112
109
  keras2pb,
113
110
  onnx2engine,
@@ -165,12 +162,12 @@ def export_formats():
165
162
 
166
163
  def best_onnx_opset(onnx, cuda=False) -> int:
167
164
  """Return max ONNX opset for this torch version with ONNX fallback."""
168
- version = ".".join(TORCH_VERSION.split(".")[:2])
169
165
  if TORCH_2_4: # _constants.ONNX_MAX_OPSET first defined in torch 1.13
170
166
  opset = torch.onnx.utils._constants.ONNX_MAX_OPSET - 1 # use second-latest version for safety
171
167
  if cuda:
172
168
  opset -= 2 # fix CUDA ONNXRuntime NMS squeeze op errors
173
169
  else:
170
+ version = ".".join(TORCH_VERSION.split(".")[:2])
174
171
  opset = {
175
172
  "1.8": 12,
176
173
  "1.9": 12,
@@ -532,7 +529,7 @@ class Exporter:
532
529
  f[0] = self.export_torchscript()
533
530
  if engine: # TensorRT required before ONNX
534
531
  f[1] = self.export_engine(dla=dla)
535
- if onnx or ncnn: # ONNX
532
+ if onnx: # ONNX
536
533
  f[2] = self.export_onnx()
537
534
  if xml: # OpenVINO
538
535
  f[3] = self.export_openvino()
@@ -630,7 +627,7 @@ class Exporter:
630
627
  @try_export
631
628
  def export_onnx(self, prefix=colorstr("ONNX:")):
632
629
  """Export YOLO model to ONNX format."""
633
- requirements = ["onnx>=1.12.0"]
630
+ requirements = ["onnx>=1.12.0,<=1.19.1"]
634
631
  if self.args.simplify:
635
632
  requirements += ["onnxslim>=0.1.71", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
636
633
  check_requirements(requirements)
@@ -822,65 +819,31 @@ class Exporter:
822
819
  def export_ncnn(self, prefix=colorstr("NCNN:")):
823
820
  """Export YOLO model to NCNN format using PNNX https://github.com/pnnx/pnnx."""
824
821
  check_requirements("ncnn", cmds="--no-deps") # no deps to avoid installing opencv-python
822
+ check_requirements("pnnx")
825
823
  import ncnn
824
+ import pnnx
826
825
 
827
- LOGGER.info(f"\n{prefix} starting export with NCNN {ncnn.__version__}...")
826
+ LOGGER.info(f"\n{prefix} starting export with NCNN {ncnn.__version__} and PNNX {pnnx.__version__}...")
828
827
  f = Path(str(self.file).replace(self.file.suffix, f"_ncnn_model{os.sep}"))
829
- f_onnx = self.file.with_suffix(".onnx")
830
828
 
831
- name = Path("pnnx.exe" if WINDOWS else "pnnx") # PNNX filename
832
- pnnx = name if name.is_file() else (ROOT / name)
833
- if not pnnx.is_file():
834
- LOGGER.warning(
835
- f"{prefix} PNNX not found. Attempting to download binary file from "
836
- "https://github.com/pnnx/pnnx/.\nNote PNNX Binary file must be placed in current working directory "
837
- f"or in {ROOT}. See PNNX repo for full installation instructions."
838
- )
839
- system = "macos" if MACOS else "windows" if WINDOWS else "linux-aarch64" if ARM64 else "linux"
840
- try:
841
- release, assets = get_github_assets(repo="pnnx/pnnx")
842
- asset = next(x for x in assets if f"{system}.zip" in x)
843
- assert isinstance(asset, str), "Unable to retrieve PNNX repo assets" # i.e. pnnx-20250930-macos.zip
844
- LOGGER.info(f"{prefix} successfully found latest PNNX asset file {asset}")
845
- except Exception as e:
846
- release = "20250930"
847
- asset = f"pnnx-{release}-{system}.zip"
848
- LOGGER.warning(f"{prefix} PNNX GitHub assets not found: {e}, using default {asset}")
849
- unzip_dir = safe_download(f"https://github.com/pnnx/pnnx/releases/download/{release}/{asset}", delete=True)
850
- if check_is_path_safe(Path.cwd(), unzip_dir): # avoid path traversal security vulnerability
851
- shutil.move(src=unzip_dir / name, dst=pnnx) # move binary to ROOT
852
- pnnx.chmod(0o777) # set read, write, and execute permissions for everyone
853
- shutil.rmtree(unzip_dir) # delete unzip dir
854
-
855
- ncnn_args = [
856
- f"ncnnparam={f / 'model.ncnn.param'}",
857
- f"ncnnbin={f / 'model.ncnn.bin'}",
858
- f"ncnnpy={f / 'model_ncnn.py'}",
859
- ]
860
-
861
- pnnx_args = [
862
- f"pnnxparam={f / 'model.pnnx.param'}",
863
- f"pnnxbin={f / 'model.pnnx.bin'}",
864
- f"pnnxpy={f / 'model_pnnx.py'}",
865
- f"pnnxonnx={f / 'model.pnnx.onnx'}",
866
- ]
867
-
868
- cmd = [
869
- str(pnnx),
870
- str(f_onnx),
871
- *ncnn_args,
872
- *pnnx_args,
873
- f"fp16={int(self.args.half)}",
874
- f"device={self.device.type}",
875
- f'inputshape="{[self.args.batch, 3, *self.imgsz]}"',
876
- ]
829
+ ncnn_args = dict(
830
+ ncnnparam=(f / "model.ncnn.param").as_posix(),
831
+ ncnnbin=(f / "model.ncnn.bin").as_posix(),
832
+ ncnnpy=(f / "model_ncnn.py").as_posix(),
833
+ )
834
+
835
+ pnnx_args = dict(
836
+ ptpath=(f / "model.pt").as_posix(),
837
+ pnnxparam=(f / "model.pnnx.param").as_posix(),
838
+ pnnxbin=(f / "model.pnnx.bin").as_posix(),
839
+ pnnxpy=(f / "model_pnnx.py").as_posix(),
840
+ pnnxonnx=(f / "model.pnnx.onnx").as_posix(),
841
+ )
842
+
877
843
  f.mkdir(exist_ok=True) # make ncnn_model directory
878
- LOGGER.info(f"{prefix} running '{' '.join(cmd)}'")
879
- subprocess.run(cmd, check=True)
844
+ pnnx.export(self.model, inputs=self.im, **ncnn_args, **pnnx_args, fp16=self.args.half, device=self.device.type)
880
845
 
881
- # Remove debug files
882
- pnnx_files = [x.rsplit("=", 1)[-1] for x in pnnx_args]
883
- for f_debug in ("debug.bin", "debug.param", "debug2.bin", "debug2.param", *pnnx_files):
846
+ for f_debug in ("debug.bin", "debug.param", "debug2.bin", "debug2.param", *pnnx_args.values()):
884
847
  Path(f_debug).unlink(missing_ok=True)
885
848
 
886
849
  YAML.save(f / "metadata.yaml", self.metadata) # add metadata.yaml
@@ -1032,7 +995,7 @@ class Exporter:
1032
995
  "sng4onnx>=1.0.1", # required by 'onnx2tf' package
1033
996
  "onnx_graphsurgeon>=0.3.26", # required by 'onnx2tf' package
1034
997
  "ai-edge-litert>=1.2.0" + (",<1.4.0" if MACOS else ""), # required by 'onnx2tf' package
1035
- "onnx>=1.12.0",
998
+ "onnx>=1.12.0,<=1.19.1",
1036
999
  "onnx2tf>=1.26.3",
1037
1000
  "onnxslim>=0.1.71",
1038
1001
  "onnxruntime-gpu" if cuda else "onnxruntime",
@@ -1149,14 +1112,15 @@ class Exporter:
1149
1112
  assert LINUX, f"export only supported on Linux. See {help_url}"
1150
1113
  if subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, shell=True).returncode != 0:
1151
1114
  LOGGER.info(f"\n{prefix} export requires Edge TPU compiler. Attempting install from {help_url}")
1115
+ sudo = "sudo " if is_sudo_available() else ""
1152
1116
  for c in (
1153
- "curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -",
1154
- 'echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | '
1155
- "sudo tee /etc/apt/sources.list.d/coral-edgetpu.list",
1156
- "sudo apt-get update",
1157
- "sudo apt-get install edgetpu-compiler",
1117
+ f"{sudo}mkdir -p /etc/apt/keyrings",
1118
+ f"curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | {sudo}gpg --dearmor -o /etc/apt/keyrings/google.gpg",
1119
+ f'echo "deb [signed-by=/etc/apt/keyrings/google.gpg] https://packages.cloud.google.com/apt coral-edgetpu-stable main" | {sudo}tee /etc/apt/sources.list.d/coral-edgetpu.list',
1120
+ f"{sudo}apt-get update",
1121
+ f"{sudo}apt-get install -y edgetpu-compiler",
1158
1122
  ):
1159
- subprocess.run(c if is_sudo_available() else c.replace("sudo ", ""), shell=True, check=True)
1123
+ subprocess.run(c, shell=True, check=True)
1160
1124
 
1161
1125
  ver = subprocess.run(cmd, shell=True, capture_output=True, check=True).stdout.decode().rsplit(maxsplit=1)[-1]
1162
1126
  LOGGER.info(f"\n{prefix} starting export with Edge TPU compiler {ver}...")
@@ -740,6 +740,7 @@ class Model(torch.nn.Module):
740
740
  - optimizer (str): Optimizer to use for training.
741
741
  - lr0 (float): Initial learning rate.
742
742
  - patience (int): Epochs to wait for no observable improvement for early stopping of training.
743
+ - augmentations (list[Callable]): List of augmentation functions to apply during training.
743
744
 
744
745
  Returns:
745
746
  (dict | None): Training metrics if available and training is successful; otherwise, None.
@@ -260,13 +260,12 @@ class BasePredictor:
260
260
  channels=getattr(self.model, "ch", 3),
261
261
  )
262
262
  self.source_type = self.dataset.source_type
263
- long_sequence = (
263
+ if (
264
264
  self.source_type.stream
265
265
  or self.source_type.screenshot
266
266
  or len(self.dataset) > 1000 # many images
267
267
  or any(getattr(self.dataset, "video_flag", [False]))
268
- )
269
- if long_sequence:
268
+ ): # long sequence
270
269
  import torchvision # noqa (import here triggers torchvision NMS use in nms.py)
271
270
 
272
271
  if not getattr(self, "stream", True): # videos
@@ -138,7 +138,12 @@ class BaseTrainer:
138
138
  if RANK in {-1, 0}:
139
139
  self.wdir.mkdir(parents=True, exist_ok=True) # make dir
140
140
  self.args.save_dir = str(self.save_dir)
141
- YAML.save(self.save_dir / "args.yaml", vars(self.args)) # save run args
141
+ # Save run args, serializing augmentations as reprs for resume compatibility
142
+ args_dict = vars(self.args).copy()
143
+ if args_dict.get("augmentations") is not None:
144
+ # Serialize Albumentations transforms as their repr strings for checkpoint compatibility
145
+ args_dict["augmentations"] = [repr(t) for t in args_dict["augmentations"]]
146
+ YAML.save(self.save_dir / "args.yaml", args_dict) # save run args
142
147
  self.last, self.best = self.wdir / "last.pt", self.wdir / "best.pt" # checkpoint paths
143
148
  self.save_period = self.args.save_period
144
149
 
@@ -464,10 +469,10 @@ class BaseTrainer:
464
469
 
465
470
  self.run_callbacks("on_train_epoch_end")
466
471
  if RANK in {-1, 0}:
467
- final_epoch = epoch + 1 >= self.epochs
468
472
  self.ema.update_attr(self.model, include=["yaml", "nc", "args", "names", "stride", "class_weights"])
469
473
 
470
474
  # Validation
475
+ final_epoch = epoch + 1 >= self.epochs
471
476
  if self.args.val or final_epoch or self.stopper.possible_stop or self.stop:
472
477
  self._clear_memory(threshold=0.5) # prevent VRAM spike
473
478
  self.metrics, self.fitness = self.validate()
@@ -626,7 +631,7 @@ class BaseTrainer:
626
631
  try:
627
632
  if self.args.task == "classify":
628
633
  data = check_cls_dataset(self.args.data)
629
- elif self.args.data.rsplit(".", 1)[-1] == "ndjson":
634
+ elif str(self.args.data).rsplit(".", 1)[-1] == "ndjson":
630
635
  # Convert NDJSON to YOLO format
631
636
  import asyncio
632
637
 
@@ -635,7 +640,7 @@ class BaseTrainer:
635
640
  yaml_path = asyncio.run(convert_ndjson_to_yolo(self.args.data))
636
641
  self.args.data = str(yaml_path)
637
642
  data = check_det_dataset(self.args.data)
638
- elif self.args.data.rsplit(".", 1)[-1] in {"yaml", "yml"} or self.args.task in {
643
+ elif str(self.args.data).rsplit(".", 1)[-1] in {"yaml", "yml"} or self.args.task in {
639
644
  "detect",
640
645
  "segment",
641
646
  "pose",
@@ -755,9 +760,9 @@ class BaseTrainer:
755
760
  n = len(metrics) + 2 # number of cols
756
761
  t = time.time() - self.train_time_start
757
762
  self.csv.parent.mkdir(parents=True, exist_ok=True) # ensure parent directory exists
758
- s = "" if self.csv.exists() else (("%s," * n % tuple(["epoch", "time", *keys])).rstrip(",") + "\n") # header
763
+ s = "" if self.csv.exists() else ("%s," * n % ("epoch", "time", *keys)).rstrip(",") + "\n"
759
764
  with open(self.csv, "a", encoding="utf-8") as f:
760
- f.write(s + ("%.6g," * n % tuple([self.epoch + 1, t, *vals])).rstrip(",") + "\n")
765
+ f.write(s + ("%.6g," * n % (self.epoch + 1, t, *vals)).rstrip(",") + "\n")
761
766
 
762
767
  def plot_metrics(self):
763
768
  """Plot metrics from a CSV file."""
@@ -806,10 +811,21 @@ class BaseTrainer:
806
811
  "batch",
807
812
  "device",
808
813
  "close_mosaic",
814
+ "augmentations",
809
815
  ): # allow arg updates to reduce memory or update device on resume
810
816
  if k in overrides:
811
817
  setattr(self.args, k, overrides[k])
812
818
 
819
+ # Handle augmentations parameter for resume: check if user provided custom augmentations
820
+ if ckpt_args.get("augmentations") is not None:
821
+ # Augmentations were saved in checkpoint as reprs but can't be restored automatically
822
+ LOGGER.warning(
823
+ "Custom Albumentations transforms were used in the original training run but are not "
824
+ "being restored. To preserve custom augmentations when resuming, you need to pass the "
825
+ "'augmentations' parameter again to get expected results. Example: \n"
826
+ f"model.train(resume=True, augmentations={ckpt_args['augmentations']})"
827
+ )
828
+
813
829
  except Exception as e:
814
830
  raise FileNotFoundError(
815
831
  "Resume checkpoint not found. Please pass a valid checkpoint to resume from, "
@@ -295,8 +295,7 @@ class Tuner:
295
295
 
296
296
  # Try MongoDB first if available
297
297
  if self.mongodb:
298
- results = self._get_mongodb_results(n)
299
- if results:
298
+ if results := self._get_mongodb_results(n):
300
299
  # MongoDB already sorted by fitness DESC, so results[0] is best
301
300
  x = np.array([[r["fitness"]] + [r["hyperparameters"][k] for k in self.space.keys()] for r in results])
302
301
  elif self.collection.name in self.collection.database.list_collection_names(): # Tuner started elsewhere