dgenerate-ultralytics-headless 8.3.225__tar.gz → 8.3.226__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.226}/PKG-INFO +3 -3
  2. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/README.md +2 -2
  3. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +3 -3
  4. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/test_cuda.py +1 -0
  5. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/test_python.py +41 -2
  6. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/__init__.py +1 -1
  7. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/__init__.py +11 -4
  8. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/augment.py +28 -12
  9. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/loaders.py +1 -1
  10. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/exporter.py +21 -58
  11. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/model.py +1 -0
  12. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/predictor.py +2 -3
  13. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/trainer.py +22 -6
  14. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/tuner.py +1 -2
  15. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/fastsam/model.py +1 -1
  16. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/detect/val.py +1 -1
  17. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/analytics.py +2 -0
  18. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/__init__.py +8 -8
  19. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/benchmarks.py +2 -2
  20. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/checks.py +8 -5
  21. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/cpu.py +2 -6
  22. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/git.py +1 -2
  23. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/tqdm.py +3 -5
  24. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/triton.py +2 -1
  25. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/LICENSE +0 -0
  26. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
  27. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
  28. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
  29. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -0
  30. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
  31. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/pyproject.toml +0 -0
  32. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/setup.cfg +0 -0
  33. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/__init__.py +0 -0
  34. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/conftest.py +0 -0
  35. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/test_cli.py +0 -0
  36. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/test_engine.py +0 -0
  37. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/test_exports.py +0 -0
  38. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/test_integrations.py +0 -0
  39. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/tests/test_solutions.py +0 -0
  40. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/assets/bus.jpg +0 -0
  41. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/assets/zidane.jpg +0 -0
  42. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  43. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  44. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  45. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  46. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  47. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  48. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  49. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  50. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  51. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  52. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  53. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  54. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  55. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  56. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco.yaml +0 -0
  57. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  58. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  59. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  60. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  61. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  62. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  63. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  64. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  65. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  66. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  67. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  68. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  69. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  70. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/kitti.yaml +0 -0
  71. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  72. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  73. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  74. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  75. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/signature.yaml +0 -0
  76. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  77. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/datasets/xView.yaml +0 -0
  78. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/default.yaml +0 -0
  79. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  80. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  81. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  82. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  83. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  84. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  85. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  86. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  87. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  88. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  89. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  90. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  91. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  92. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  93. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  94. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  95. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  96. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  97. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  98. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  99. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  100. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  101. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  102. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  103. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  104. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  105. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  106. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  107. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  108. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  109. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  110. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  111. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  112. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  113. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  114. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  115. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  116. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  117. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  118. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  119. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  120. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  121. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  122. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  123. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  124. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  125. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  126. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  127. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  128. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  129. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  130. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  131. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  132. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  133. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  134. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  135. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  136. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/__init__.py +0 -0
  137. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/annotator.py +0 -0
  138. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/base.py +0 -0
  139. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/build.py +0 -0
  140. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/converter.py +0 -0
  141. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/dataset.py +0 -0
  142. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/scripts/download_weights.sh +0 -0
  143. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/scripts/get_coco.sh +0 -0
  144. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/scripts/get_coco128.sh +0 -0
  145. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  146. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/split.py +0 -0
  147. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/split_dota.py +0 -0
  148. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/data/utils.py +0 -0
  149. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/__init__.py +0 -0
  150. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/results.py +0 -0
  151. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/engine/validator.py +0 -0
  152. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/hub/__init__.py +0 -0
  153. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/hub/auth.py +0 -0
  154. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/hub/google/__init__.py +0 -0
  155. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/hub/session.py +0 -0
  156. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/hub/utils.py +0 -0
  157. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/__init__.py +0 -0
  158. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/fastsam/__init__.py +0 -0
  159. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/fastsam/predict.py +0 -0
  160. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/fastsam/utils.py +0 -0
  161. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/fastsam/val.py +0 -0
  162. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/nas/__init__.py +0 -0
  163. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/nas/model.py +0 -0
  164. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/nas/predict.py +0 -0
  165. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/nas/val.py +0 -0
  166. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/rtdetr/__init__.py +0 -0
  167. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/rtdetr/model.py +0 -0
  168. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/rtdetr/predict.py +0 -0
  169. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/rtdetr/train.py +0 -0
  170. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/rtdetr/val.py +0 -0
  171. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/__init__.py +0 -0
  172. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/amg.py +0 -0
  173. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/build.py +0 -0
  174. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/model.py +0 -0
  175. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/__init__.py +0 -0
  176. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/blocks.py +0 -0
  177. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/decoders.py +0 -0
  178. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/encoders.py +0 -0
  179. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  180. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/sam.py +0 -0
  181. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  182. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/transformer.py +0 -0
  183. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/modules/utils.py +0 -0
  184. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/sam/predict.py +0 -0
  185. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/utils/__init__.py +0 -0
  186. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/utils/loss.py +0 -0
  187. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/utils/ops.py +0 -0
  188. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/__init__.py +0 -0
  189. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/classify/__init__.py +0 -0
  190. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/classify/predict.py +0 -0
  191. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/classify/train.py +0 -0
  192. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/classify/val.py +0 -0
  193. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/detect/__init__.py +0 -0
  194. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/detect/predict.py +0 -0
  195. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/detect/train.py +0 -0
  196. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/model.py +0 -0
  197. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/obb/__init__.py +0 -0
  198. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/obb/predict.py +0 -0
  199. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/obb/train.py +0 -0
  200. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/obb/val.py +0 -0
  201. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/pose/__init__.py +0 -0
  202. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/pose/predict.py +0 -0
  203. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/pose/train.py +0 -0
  204. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/pose/val.py +0 -0
  205. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/segment/__init__.py +0 -0
  206. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/segment/predict.py +0 -0
  207. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/segment/train.py +0 -0
  208. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/segment/val.py +0 -0
  209. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/world/__init__.py +0 -0
  210. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/world/train.py +0 -0
  211. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/world/train_world.py +0 -0
  212. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  213. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  214. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/yoloe/train.py +0 -0
  215. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  216. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/models/yolo/yoloe/val.py +0 -0
  217. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/__init__.py +0 -0
  218. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/autobackend.py +0 -0
  219. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/modules/__init__.py +0 -0
  220. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/modules/activation.py +0 -0
  221. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/modules/block.py +0 -0
  222. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/modules/conv.py +0 -0
  223. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/modules/head.py +0 -0
  224. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/modules/transformer.py +0 -0
  225. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/modules/utils.py +0 -0
  226. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/tasks.py +0 -0
  227. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/nn/text_model.py +0 -0
  228. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/py.typed +0 -0
  229. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/__init__.py +0 -0
  230. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/ai_gym.py +0 -0
  231. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/config.py +0 -0
  232. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/distance_calculation.py +0 -0
  233. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/heatmap.py +0 -0
  234. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/instance_segmentation.py +0 -0
  235. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/object_blurrer.py +0 -0
  236. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/object_counter.py +0 -0
  237. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/object_cropper.py +0 -0
  238. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/parking_management.py +0 -0
  239. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/queue_management.py +0 -0
  240. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/region_counter.py +0 -0
  241. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/security_alarm.py +0 -0
  242. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/similarity_search.py +0 -0
  243. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/solutions.py +0 -0
  244. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/speed_estimation.py +0 -0
  245. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/streamlit_inference.py +0 -0
  246. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/templates/similarity-search.html +0 -0
  247. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/trackzone.py +0 -0
  248. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/solutions/vision_eye.py +0 -0
  249. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/__init__.py +0 -0
  250. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/basetrack.py +0 -0
  251. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/bot_sort.py +0 -0
  252. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/byte_tracker.py +0 -0
  253. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/track.py +0 -0
  254. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/utils/__init__.py +0 -0
  255. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/utils/gmc.py +0 -0
  256. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  257. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/trackers/utils/matching.py +0 -0
  258. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/autobatch.py +0 -0
  259. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/autodevice.py +0 -0
  260. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/__init__.py +0 -0
  261. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/base.py +0 -0
  262. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/clearml.py +0 -0
  263. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/comet.py +0 -0
  264. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/dvc.py +0 -0
  265. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/hub.py +0 -0
  266. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/mlflow.py +0 -0
  267. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/neptune.py +0 -0
  268. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/platform.py +0 -0
  269. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/raytune.py +0 -0
  270. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  271. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/callbacks/wb.py +0 -0
  272. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/dist.py +0 -0
  273. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/downloads.py +0 -0
  274. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/errors.py +0 -0
  275. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/events.py +0 -0
  276. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/export/__init__.py +0 -0
  277. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/export/engine.py +0 -0
  278. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/export/imx.py +0 -0
  279. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/export/tensorflow.py +0 -0
  280. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/files.py +0 -0
  281. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/instance.py +0 -0
  282. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/logger.py +0 -0
  283. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/loss.py +0 -0
  284. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/metrics.py +0 -0
  285. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/nms.py +0 -0
  286. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/ops.py +0 -0
  287. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/patches.py +0 -0
  288. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/plotting.py +0 -0
  289. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/tal.py +0 -0
  290. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/ultralytics/utils/torch_utils.py +0 -0
  291. {dgenerate_ultralytics_headless-8.3.225 → dgenerate_ultralytics_headless-8.3.226}/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.226
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>
@@ -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.226
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>
@@ -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">
@@ -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.226"
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()
@@ -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
@@ -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
@@ -35,7 +35,7 @@ class FastSAM(Model):
35
35
  >>> results = model.predict("image.jpg", bboxes=[[100, 100, 200, 200]])
36
36
  """
37
37
 
38
- def __init__(self, model: str = "FastSAM-x.pt"):
38
+ def __init__(self, model: str | Path = "FastSAM-x.pt"):
39
39
  """Initialize the FastSAM model with the specified pre-trained weights."""
40
40
  if str(model) == "FastSAM.pt":
41
41
  model = "FastSAM-x.pt"
@@ -226,7 +226,7 @@ class DetectionValidator(BaseValidator):
226
226
  dist.gather_object(self.metrics.stats, gathered_stats, dst=0)
227
227
  merged_stats = {key: [] for key in self.metrics.stats.keys()}
228
228
  for stats_dict in gathered_stats:
229
- for key in merged_stats.keys():
229
+ for key in merged_stats:
230
230
  merged_stats[key].extend(stats_dict[key])
231
231
  gathered_jdict = [None] * dist.get_world_size()
232
232
  dist.gather_object(self.jdict, gathered_jdict, dst=0)
@@ -9,6 +9,7 @@ import cv2
9
9
  import numpy as np
10
10
 
11
11
  from ultralytics.solutions.solutions import BaseSolution, SolutionResults # Import a parent class
12
+ from ultralytics.utils import plt_settings
12
13
 
13
14
 
14
15
  class Analytics(BaseSolution):
@@ -46,6 +47,7 @@ class Analytics(BaseSolution):
46
47
  >>> cv2.imshow("Analytics", results.plot_im)
47
48
  """
48
49
 
50
+ @plt_settings()
49
51
  def __init__(self, **kwargs: Any) -> None:
50
52
  """Initialize Analytics class with various chart types for visual data representation."""
51
53
  super().__init__(**kwargs)
@@ -722,14 +722,14 @@ def is_jetson(jetpack=None) -> bool:
722
722
  Returns:
723
723
  (bool): True if running on an NVIDIA Jetson device, False otherwise.
724
724
  """
725
- if jetson := ("tegra" in DEVICE_MODEL):
726
- if jetpack:
727
- try:
728
- content = open("/etc/nv_tegra_release").read()
729
- version_map = {4: "R32", 5: "R35", 6: "R36"} # JetPack to L4T major version mapping
730
- return jetpack in version_map and version_map[jetpack] in content
731
- except Exception:
732
- return False
725
+ jetson = "tegra" in DEVICE_MODEL
726
+ if jetson and jetpack:
727
+ try:
728
+ content = open("/etc/nv_tegra_release").read()
729
+ version_map = {4: "R32", 5: "R35", 6: "R36"} # JetPack to L4T major version mapping
730
+ return jetpack in version_map and version_map[jetpack] in content
731
+ except Exception:
732
+ return False
733
733
  return jetson
734
734
 
735
735
 
@@ -604,7 +604,7 @@ class ProfileModels:
604
604
  sess_options.intra_op_num_threads = 8 # Limit the number of threads
605
605
  sess = ort.InferenceSession(onnx_file, sess_options, providers=["CPUExecutionProvider"])
606
606
 
607
- input_data_dict = dict()
607
+ input_data_dict = {}
608
608
  for input_tensor in sess.get_inputs():
609
609
  input_type = input_tensor.type
610
610
  if self.check_dynamic(input_tensor.shape):
@@ -632,7 +632,7 @@ class ProfileModels:
632
632
 
633
633
  input_data = np.random.rand(*input_shape).astype(input_dtype)
634
634
  input_name = input_tensor.name
635
- input_data_dict.update({input_name: input_data})
635
+ input_data_dict[input_name] = input_data
636
636
 
637
637
  output_name = sess.get_outputs()[0].name
638
638