ultralytics 8.3.115__tar.gz → 8.3.117__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 (271) hide show
  1. {ultralytics-8.3.115/ultralytics.egg-info → ultralytics-8.3.117}/PKG-INFO +3 -4
  2. {ultralytics-8.3.115 → ultralytics-8.3.117}/pyproject.toml +2 -3
  3. {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_python.py +1 -1
  4. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/__init__.py +1 -1
  5. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/__init__.py +1 -1
  6. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/augment.py +5 -7
  7. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/base.py +5 -4
  8. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/build.py +6 -7
  9. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/dataset.py +3 -4
  10. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/loaders.py +2 -1
  11. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/utils.py +1 -0
  12. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/exporter.py +19 -13
  13. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/results.py +5 -5
  14. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/trainer.py +2 -2
  15. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/session.py +3 -2
  16. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/utils.py +1 -1
  17. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/utils.py +4 -6
  18. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/utils/loss.py +14 -3
  19. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/predict.py +1 -1
  20. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/val.py +1 -1
  21. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/model.py +4 -4
  22. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/predict.py +1 -1
  23. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/val.py +1 -1
  24. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/autobackend.py +8 -4
  25. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/conv.py +4 -6
  26. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/head.py +6 -4
  27. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/text_model.py +2 -4
  28. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/ai_gym.py +7 -6
  29. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/distance_calculation.py +2 -2
  30. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/object_blurrer.py +4 -2
  31. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/object_counter.py +2 -2
  32. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/queue_management.py +2 -2
  33. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/region_counter.py +2 -2
  34. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/solutions.py +24 -2
  35. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/speed_estimation.py +6 -3
  36. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/trackzone.py +4 -2
  37. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/vision_eye.py +2 -2
  38. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/__init__.py +1 -1
  39. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/benchmarks.py +3 -4
  40. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/checks.py +5 -3
  41. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/loss.py +23 -11
  42. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/ops.py +1 -1
  43. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/torch_utils.py +4 -3
  44. {ultralytics-8.3.115 → ultralytics-8.3.117/ultralytics.egg-info}/PKG-INFO +3 -4
  45. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/requires.txt +4 -3
  46. {ultralytics-8.3.115 → ultralytics-8.3.117}/LICENSE +0 -0
  47. {ultralytics-8.3.115 → ultralytics-8.3.117}/README.md +0 -0
  48. {ultralytics-8.3.115 → ultralytics-8.3.117}/setup.cfg +0 -0
  49. {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_cli.py +0 -0
  50. {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_cuda.py +0 -0
  51. {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_engine.py +0 -0
  52. {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_exports.py +0 -0
  53. {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_integrations.py +0 -0
  54. {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_solutions.py +0 -0
  55. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/assets/bus.jpg +0 -0
  56. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/assets/zidane.jpg +0 -0
  57. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  58. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  59. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  60. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  61. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  62. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  63. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  64. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  65. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  66. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  67. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  68. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  69. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  70. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco.yaml +0 -0
  71. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  72. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  73. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  74. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  75. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  76. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  77. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  78. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  79. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  80. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  81. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  82. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  83. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  84. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  85. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  86. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/signature.yaml +0 -0
  87. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  88. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/xView.yaml +0 -0
  89. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/default.yaml +0 -0
  90. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  91. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  92. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  93. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  94. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  95. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  96. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  97. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  98. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  99. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  100. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  101. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  102. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  103. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  104. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  105. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  106. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  107. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  108. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  109. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  110. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  111. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  112. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  113. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  114. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  115. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  116. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  117. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  118. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  119. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  120. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  121. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  122. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  123. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  124. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  125. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  126. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  127. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  128. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  129. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  130. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  131. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  132. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  133. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  134. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  135. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  136. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  137. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  138. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  139. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  140. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  141. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  142. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  143. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  144. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  145. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/solutions/default.yaml +0 -0
  146. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  147. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  148. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/__init__.py +0 -0
  149. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/annotator.py +0 -0
  150. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/converter.py +0 -0
  151. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/download_weights.sh +0 -0
  152. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/get_coco.sh +0 -0
  153. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/get_coco128.sh +0 -0
  154. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  155. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/split.py +0 -0
  156. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/split_dota.py +0 -0
  157. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/__init__.py +0 -0
  158. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/model.py +0 -0
  159. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/predictor.py +0 -0
  160. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/tuner.py +0 -0
  161. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/validator.py +0 -0
  162. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/__init__.py +0 -0
  163. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/auth.py +0 -0
  164. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/google/__init__.py +0 -0
  165. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/__init__.py +0 -0
  166. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/__init__.py +0 -0
  167. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/model.py +0 -0
  168. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/predict.py +0 -0
  169. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/utils.py +0 -0
  170. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/val.py +0 -0
  171. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/__init__.py +0 -0
  172. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/model.py +0 -0
  173. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/predict.py +0 -0
  174. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/val.py +0 -0
  175. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/__init__.py +0 -0
  176. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/model.py +0 -0
  177. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/predict.py +0 -0
  178. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/train.py +0 -0
  179. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/val.py +0 -0
  180. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/__init__.py +0 -0
  181. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/amg.py +0 -0
  182. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/build.py +0 -0
  183. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/model.py +0 -0
  184. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/__init__.py +0 -0
  185. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/blocks.py +0 -0
  186. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/decoders.py +0 -0
  187. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/encoders.py +0 -0
  188. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  189. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/sam.py +0 -0
  190. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  191. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/transformer.py +0 -0
  192. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/predict.py +0 -0
  193. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/utils/__init__.py +0 -0
  194. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/utils/ops.py +0 -0
  195. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/__init__.py +0 -0
  196. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/__init__.py +0 -0
  197. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/predict.py +0 -0
  198. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/train.py +0 -0
  199. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/val.py +0 -0
  200. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/__init__.py +0 -0
  201. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/train.py +0 -0
  202. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/__init__.py +0 -0
  203. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/predict.py +0 -0
  204. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/train.py +0 -0
  205. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/val.py +0 -0
  206. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/__init__.py +0 -0
  207. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/predict.py +0 -0
  208. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/train.py +0 -0
  209. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/val.py +0 -0
  210. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/__init__.py +0 -0
  211. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/train.py +0 -0
  212. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/val.py +0 -0
  213. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/world/__init__.py +0 -0
  214. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/world/train.py +0 -0
  215. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/world/train_world.py +0 -0
  216. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  217. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  218. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/train.py +0 -0
  219. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  220. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/__init__.py +0 -0
  221. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/__init__.py +0 -0
  222. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/activation.py +0 -0
  223. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/block.py +0 -0
  224. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/transformer.py +0 -0
  225. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/utils.py +0 -0
  226. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/tasks.py +0 -0
  227. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/__init__.py +0 -0
  228. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/analytics.py +0 -0
  229. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/heatmap.py +0 -0
  230. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/instance_segmentation.py +0 -0
  231. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/object_cropper.py +0 -0
  232. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/parking_management.py +0 -0
  233. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/security_alarm.py +0 -0
  234. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/streamlit_inference.py +0 -0
  235. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/__init__.py +0 -0
  236. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/basetrack.py +0 -0
  237. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/bot_sort.py +0 -0
  238. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/byte_tracker.py +0 -0
  239. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/track.py +0 -0
  240. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/__init__.py +0 -0
  241. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/gmc.py +0 -0
  242. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  243. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/matching.py +0 -0
  244. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/autobatch.py +0 -0
  245. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/__init__.py +0 -0
  246. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/base.py +0 -0
  247. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/clearml.py +0 -0
  248. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/comet.py +0 -0
  249. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/dvc.py +0 -0
  250. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/hub.py +0 -0
  251. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/mlflow.py +0 -0
  252. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/neptune.py +0 -0
  253. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/raytune.py +0 -0
  254. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  255. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/wb.py +0 -0
  256. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/dist.py +0 -0
  257. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/downloads.py +0 -0
  258. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/errors.py +0 -0
  259. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/export.py +0 -0
  260. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/files.py +0 -0
  261. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/instance.py +0 -0
  262. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/metrics.py +0 -0
  263. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/patches.py +0 -0
  264. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/plotting.py +0 -0
  265. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/tal.py +0 -0
  266. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/triton.py +0 -0
  267. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/tuner.py +0 -0
  268. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/SOURCES.txt +0 -0
  269. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/dependency_links.txt +0 -0
  270. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/entry_points.txt +0 -0
  271. {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.115
3
+ Version: 8.3.117
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -60,14 +60,13 @@ Requires-Dist: mkdocs-ultralytics-plugin>=0.1.17; extra == "dev"
60
60
  Requires-Dist: mkdocs-macros-plugin>=1.0.5; extra == "dev"
61
61
  Provides-Extra: export
62
62
  Requires-Dist: onnx>=1.12.0; extra == "export"
63
- Requires-Dist: coremltools>=8.0; (platform_system != "Windows" and python_version <= "3.12") and extra == "export"
63
+ Requires-Dist: coremltools>=8.0; (platform_system != "Windows" and python_version <= "3.13") and extra == "export"
64
64
  Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.12") and extra == "export"
65
65
  Requires-Dist: openvino>=2024.0.0; extra == "export"
66
66
  Requires-Dist: tensorflow>=2.0.0; extra == "export"
67
- Requires-Dist: tensorflowjs>=4.0.0; extra == "export"
67
+ Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
68
68
  Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
69
69
  Requires-Dist: keras; extra == "export"
70
- Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
71
70
  Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
72
71
  Provides-Extra: solutions
73
72
  Requires-Dist: shapely<2.1.0,>=2.0.0; extra == "solutions"
@@ -94,14 +94,13 @@ dev = [
94
94
  ]
95
95
  export = [
96
96
  "onnx>=1.12.0", # ONNX export
97
- "coremltools>=8.0; platform_system != 'Windows' and python_version <= '3.12'", # CoreML supported on macOS and Linux
97
+ "coremltools>=8.0; platform_system != 'Windows' and python_version <= '3.13'", # CoreML supported on macOS and Linux
98
98
  "scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.12'", # CoreML k-means quantization
99
99
  "openvino>=2024.0.0", # OpenVINO export
100
100
  "tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
101
- "tensorflowjs>=4.0.0", # TF.js export, automatically installs tensorflow
101
+ "tensorflowjs>=2.0.0", # TF.js export, automatically installs tensorflow
102
102
  "tensorstore>=0.1.63; platform_machine == 'aarch64' and python_version >= '3.9'", # for TF Raspberry Pi exports
103
103
  "keras", # not installed automatically by tensorflow>=2.16
104
- "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'", # update old 'flatbuffers' included inside tensorflow package
105
104
  "h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
106
105
  ]
107
106
  solutions = [
@@ -128,7 +128,7 @@ def test_predict_img(model_name):
128
128
  Image.open(SOURCE), # PIL
129
129
  np.zeros((320, 640, 3), dtype=np.uint8), # numpy
130
130
  ]
131
- assert len(model(batch, imgsz=32)) == len(batch) # multiple sources in a batch
131
+ assert len(model(batch, imgsz=32, classes=0)) == len(batch) # multiple sources in a batch
132
132
 
133
133
 
134
134
  @pytest.mark.parametrize("model", MODELS)
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.115"
3
+ __version__ = "8.3.117"
4
4
 
5
5
  import os
6
6
 
@@ -9,6 +9,7 @@ from typing import Any, Dict, List, Union
9
9
 
10
10
  import cv2
11
11
 
12
+ from ultralytics import __version__
12
13
  from ultralytics.utils import (
13
14
  ASSETS,
14
15
  DEFAULT_CFG,
@@ -24,7 +25,6 @@ from ultralytics.utils import (
24
25
  SETTINGS_FILE,
25
26
  TESTS_RUNNING,
26
27
  IterableSimpleNamespace,
27
- __version__,
28
28
  checks,
29
29
  colorstr,
30
30
  deprecation_warn,
@@ -1027,10 +1027,9 @@ class RandomPerspective:
1027
1027
  border (Tuple[int, int]): Border dimensions for the transformed image.
1028
1028
 
1029
1029
  Returns:
1030
- (Tuple[np.ndarray, np.ndarray, float]): A tuple containing:
1031
- - np.ndarray: Transformed image.
1032
- - np.ndarray: 3x3 transformation matrix.
1033
- - float: Scale factor applied during the transformation.
1030
+ img (np.ndarray): Transformed image.
1031
+ M (np.ndarray): 3x3 transformation matrix.
1032
+ s (float): Scale factor applied during the transformation.
1034
1033
 
1035
1034
  Examples:
1036
1035
  >>> import numpy as np
@@ -1124,9 +1123,8 @@ class RandomPerspective:
1124
1123
  M (np.ndarray): Affine transformation matrix with shape (3, 3).
1125
1124
 
1126
1125
  Returns:
1127
- (Tuple[np.ndarray, np.ndarray]): A tuple containing:
1128
- - New bounding boxes with shape (N, 4) in xyxy format.
1129
- - Transformed and clipped segments with shape (N, M, 2).
1126
+ bboxes (np.ndarray): New bounding boxes with shape (N, 4) in xyxy format.
1127
+ segments (np.ndarray): Transformed and clipped segments with shape (N, M, 2).
1130
1128
 
1131
1129
  Examples:
1132
1130
  >>> segments = np.random.rand(10, 500, 2) # 10 segments with 500 points each
@@ -15,7 +15,8 @@ import psutil
15
15
  from torch.utils.data import Dataset
16
16
 
17
17
  from ultralytics.data.utils import FORMATS_HELP_MSG, HELP_URL, IMG_FORMATS, check_file_speeds
18
- from ultralytics.utils import DEFAULT_CFG, LOCAL_RANK, LOGGER, NUM_THREADS, TQDM, imread
18
+ from ultralytics.utils import DEFAULT_CFG, LOCAL_RANK, LOGGER, NUM_THREADS, TQDM
19
+ from ultralytics.utils.patches import imread
19
20
 
20
21
 
21
22
  class BaseDataset(Dataset):
@@ -208,9 +209,9 @@ class BaseDataset(Dataset):
208
209
  rect_mode (bool, optional): Whether to use rectangular resizing.
209
210
 
210
211
  Returns:
211
- (np.ndarray): Loaded image.
212
- (tuple): Original image dimensions (h, w).
213
- (tuple): Resized image dimensions (h, w).
212
+ (np.ndarray): Loaded image as a NumPy array.
213
+ (Tuple[int, int]): Original image dimensions in (height, width) format.
214
+ (Tuple[int, int]): Resized image dimensions in (height, width) format.
214
215
 
215
216
  Raises:
216
217
  FileNotFoundError: If the image file is not found.
@@ -187,13 +187,12 @@ def check_source(source):
187
187
  source (str | int | Path | List | Tuple | np.ndarray | PIL.Image | torch.Tensor): The input source to check.
188
188
 
189
189
  Returns:
190
- (tuple): A tuple containing:
191
- - source: The processed source.
192
- - webcam (bool): Whether the source is a webcam.
193
- - screenshot (bool): Whether the source is a screenshot.
194
- - from_img (bool): Whether the source is an image or list of images.
195
- - in_memory (bool): Whether the source is an in-memory object.
196
- - tensor (bool): Whether the source is a torch.Tensor.
190
+ source (str | int | Path | List | Tuple | np.ndarray | PIL.Image | torch.Tensor): The processed source.
191
+ webcam (bool): Whether the source is a webcam.
192
+ screenshot (bool): Whether the source is a screenshot.
193
+ from_img (bool): Whether the source is an image or list of images.
194
+ in_memory (bool): Whether the source is an in-memory object.
195
+ tensor (bool): Whether the source is a torch.Tensor.
197
196
 
198
197
  Raises:
199
198
  TypeError: If the source type is unsupported.
@@ -12,14 +12,14 @@ import torch
12
12
  from PIL import Image
13
13
  from torch.utils.data import ConcatDataset
14
14
 
15
- from ultralytics.utils import LOCAL_RANK, NUM_THREADS, TQDM, colorstr
15
+ from ultralytics.utils import LOCAL_RANK, LOGGER, NUM_THREADS, TQDM, colorstr
16
+ from ultralytics.utils.instance import Instances
16
17
  from ultralytics.utils.ops import resample_segments, segments2boxes
17
18
  from ultralytics.utils.torch_utils import TORCHVISION_0_18
18
19
 
19
20
  from .augment import (
20
21
  Compose,
21
22
  Format,
22
- Instances,
23
23
  LetterBox,
24
24
  RandomLoadText,
25
25
  classify_augmentations,
@@ -30,7 +30,6 @@ from .base import BaseDataset
30
30
  from .converter import merge_multi_segment
31
31
  from .utils import (
32
32
  HELP_URL,
33
- LOGGER,
34
33
  check_file_speeds,
35
34
  get_hash,
36
35
  img2label_paths,
@@ -386,7 +385,7 @@ class YOLOMultiModalDataset(YOLODataset):
386
385
  Return category names for the dataset.
387
386
 
388
387
  Returns:
389
- (Tuple[str]): List of class names.
388
+ (Set[str]): List of class names.
390
389
  """
391
390
  names = self.data["names"].values()
392
391
  return {n.strip() for name in names for n in name.split("/")} # category names
@@ -16,8 +16,9 @@ import torch
16
16
  from PIL import Image
17
17
 
18
18
  from ultralytics.data.utils import FORMATS_HELP_MSG, IMG_FORMATS, VID_FORMATS
19
- from ultralytics.utils import IS_COLAB, IS_KAGGLE, LOGGER, imread, ops
19
+ from ultralytics.utils import IS_COLAB, IS_KAGGLE, LOGGER, ops
20
20
  from ultralytics.utils.checks import check_requirements
21
+ from ultralytics.utils.patches import imread
21
22
 
22
23
 
23
24
  @dataclass
@@ -483,6 +483,7 @@ def check_cls_dataset(dataset, split=""):
483
483
 
484
484
  Returns:
485
485
  (dict): A dictionary containing the following keys:
486
+
486
487
  - 'train' (Path): The directory path containing the training set of the dataset.
487
488
  - 'val' (Path): The directory path containing the validation set of the dataset.
488
489
  - 'test' (Path): The directory path containing the test set of the dataset.
@@ -70,6 +70,7 @@ from pathlib import Path
70
70
  import numpy as np
71
71
  import torch
72
72
 
73
+ from ultralytics import __version__
73
74
  from ultralytics.cfg import TASK2DATA, get_cfg
74
75
  from ultralytics.data import build_dataloader
75
76
  from ultralytics.data.dataset import YOLODataset
@@ -81,7 +82,6 @@ from ultralytics.utils import (
81
82
  ARM64,
82
83
  DEFAULT_CFG,
83
84
  IS_COLAB,
84
- IS_JETSON,
85
85
  LINUX,
86
86
  LOGGER,
87
87
  MACOS,
@@ -89,13 +89,13 @@ from ultralytics.utils import (
89
89
  RKNN_CHIPS,
90
90
  ROOT,
91
91
  WINDOWS,
92
- __version__,
93
92
  callbacks,
94
93
  colorstr,
95
94
  get_default_args,
96
95
  yaml_save,
97
96
  )
98
97
  from ultralytics.utils.checks import (
98
+ IS_PYTHON_MINIMUM_3_12,
99
99
  check_imgsz,
100
100
  check_is_path_safe,
101
101
  check_requirements,
@@ -105,7 +105,7 @@ from ultralytics.utils.checks import (
105
105
  from ultralytics.utils.downloads import attempt_download_asset, get_github_assets, safe_download
106
106
  from ultralytics.utils.export import export_engine, export_onnx
107
107
  from ultralytics.utils.files import file_size, spaces_in_path
108
- from ultralytics.utils.ops import Profile, nms_rotated, xywh2xyxy
108
+ from ultralytics.utils.ops import Profile, nms_rotated
109
109
  from ultralytics.utils.torch_utils import TORCH_1_13, get_latest_opset, select_device
110
110
 
111
111
 
@@ -113,7 +113,7 @@ def export_formats():
113
113
  """Return a dictionary of Ultralytics YOLO export formats."""
114
114
  x = [
115
115
  ["PyTorch", "-", ".pt", True, True, []],
116
- ["TorchScript", "torchscript", ".torchscript", True, True, ["batch", "optimize", "nms"]],
116
+ ["TorchScript", "torchscript", ".torchscript", True, True, ["batch", "optimize", "half", "nms"]],
117
117
  ["ONNX", "onnx", ".onnx", True, True, ["batch", "dynamic", "half", "opset", "simplify", "nms"]],
118
118
  [
119
119
  "OpenVINO",
@@ -384,6 +384,7 @@ class Exporter:
384
384
  m.export = True
385
385
  m.format = self.args.format
386
386
  m.max_det = self.args.max_det
387
+ m.xyxy = self.args.nms and not coreml
387
388
  elif isinstance(m, C2f) and not is_tf_format:
388
389
  # EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
389
390
  m.forward = m.forward_split
@@ -924,10 +925,8 @@ class Exporter:
924
925
  "onnx>=1.12.0",
925
926
  "onnx2tf>=1.26.3",
926
927
  "onnxslim>=0.1.31",
927
- "tflite_support<=0.4.3" if IS_JETSON else "tflite_support", # fix ImportError 'GLIBCXX_3.4.29'
928
- "flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
929
928
  "onnxruntime-gpu" if cuda else "onnxruntime",
930
- "protobuf>=5", # tflite_support pins <=4 but >=5 works
929
+ "protobuf>=5",
931
930
  ),
932
931
  cmds="--extra-index-url https://pypi.ngc.nvidia.com", # onnx_graphsurgeon only on NVIDIA
933
932
  )
@@ -1278,8 +1277,20 @@ class Exporter:
1278
1277
 
1279
1278
  return f, None
1280
1279
 
1281
- def _add_tflite_metadata(self, file):
1280
+ def _add_tflite_metadata(self, file, use_flatbuffers=False):
1282
1281
  """Add metadata to *.tflite models per https://ai.google.dev/edge/litert/models/metadata."""
1282
+ if not use_flatbuffers:
1283
+ import zipfile
1284
+
1285
+ with zipfile.ZipFile(file, "a", zipfile.ZIP_DEFLATED) as zf:
1286
+ zf.writestr("metadata.json", json.dumps(self.metadata, indent=2))
1287
+ return
1288
+
1289
+ if IS_PYTHON_MINIMUM_3_12:
1290
+ LOGGER.warning(f"TFLite Support package may not be compatible with Python>=3.12 environments for {file}")
1291
+
1292
+ # Update old 'flatbuffers' included inside tensorflow package
1293
+ check_requirements(("tflite_support", "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'"))
1283
1294
  import flatbuffers
1284
1295
 
1285
1296
  try:
@@ -1532,11 +1543,6 @@ class NMSModel(torch.nn.Module):
1532
1543
  # Explicit length otherwise reshape error, hardcoded to `self.args.max_det * 5`
1533
1544
  mask = score.topk(min(self.args.max_det * 5, score.shape[0])).indices
1534
1545
  box, score, cls, extra = box[mask], score[mask], cls[mask], extra[mask]
1535
- if not self.obb:
1536
- box = xywh2xyxy(box)
1537
- if self.is_tf:
1538
- # TFlite bug returns less boxes
1539
- box = torch.nn.functional.pad(box, (0, 0, 0, mask.shape[0] - box.shape[0]))
1540
1546
  nmsbox = box.clone()
1541
1547
  # `8` is the minimum value experimented to get correct NMS results for obb
1542
1548
  multiplier = 8 if self.obb else 1
@@ -299,8 +299,8 @@ class Results(SimpleClass):
299
299
  Return the number of detections in the Results object.
300
300
 
301
301
  Returns:
302
- (int): The number of detections, determined by the length of the first non-empty attribute
303
- (boxes, masks, probs, keypoints, or obb).
302
+ (int): The number of detections, determined by the length of the first non-empty
303
+ attribute in (masks, probs, keypoints, or obb).
304
304
 
305
305
  Examples:
306
306
  >>> results = Results(orig_img, path, names, boxes=torch.rand(5, 4))
@@ -779,9 +779,9 @@ class Results(SimpleClass):
779
779
  decimals (int): Number of decimal places to round the output values to.
780
780
 
781
781
  Returns:
782
- (List[Dict]): A list of dictionaries, each containing summarized information for a single
783
- detection or classification result. The structure of each dictionary varies based on the
784
- task type (classification or detection) and available information (boxes, masks, keypoints).
782
+ (List[Dict]): A list of dictionaries, each containing summarized information for a single detection
783
+ or classification result. The structure of each dictionary varies based on the task type
784
+ (classification or detection) and available information (boxes, masks, keypoints).
785
785
 
786
786
  Examples:
787
787
  >>> results = model("image.jpg")
@@ -21,6 +21,7 @@ import torch
21
21
  from torch import distributed as dist
22
22
  from torch import nn, optim
23
23
 
24
+ from ultralytics import __version__
24
25
  from ultralytics.cfg import get_cfg, get_save_dir
25
26
  from ultralytics.data.utils import check_cls_dataset, check_det_dataset
26
27
  from ultralytics.nn.tasks import attempt_load_one_weight, attempt_load_weights
@@ -30,7 +31,6 @@ from ultralytics.utils import (
30
31
  LOGGER,
31
32
  RANK,
32
33
  TQDM,
33
- __version__,
34
34
  callbacks,
35
35
  clean_url,
36
36
  colorstr,
@@ -268,7 +268,7 @@ class BaseTrainer:
268
268
  self.amp = torch.tensor(check_amp(self.model), device=self.device)
269
269
  callbacks.default_callbacks = callbacks_backup # restore callbacks
270
270
  if RANK > -1 and world_size > 1: # DDP
271
- dist.broadcast(self.amp, src=0) # broadcast the tensor from rank 0 to all other ranks (returns None)
271
+ dist.broadcast(self.amp.int(), src=0) # broadcast from rank 0 to all other ranks; gloo errors with boolean
272
272
  self.amp = bool(self.amp) # as boolean
273
273
  self.scaler = (
274
274
  torch.amp.GradScaler("cuda", enabled=self.amp) if TORCH_2_4 else torch.cuda.amp.GradScaler(enabled=self.amp)
@@ -9,8 +9,9 @@ from urllib.parse import parse_qs, urlparse
9
9
 
10
10
  import requests
11
11
 
12
- from ultralytics.hub.utils import HELP_MSG, HUB_WEB_ROOT, PREFIX, TQDM
13
- from ultralytics.utils import IS_COLAB, LOGGER, SETTINGS, __version__, checks, emojis
12
+ from ultralytics import __version__
13
+ from ultralytics.hub.utils import HELP_MSG, HUB_WEB_ROOT, PREFIX
14
+ from ultralytics.utils import IS_COLAB, LOGGER, SETTINGS, TQDM, checks, emojis
14
15
  from ultralytics.utils.errors import HUBModelError
15
16
 
16
17
  AGENT_NAME = f"python-{__version__}-colab" if IS_COLAB else f"python-{__version__}-local"
@@ -9,6 +9,7 @@ from pathlib import Path
9
9
 
10
10
  import requests
11
11
 
12
+ from ultralytics import __version__
12
13
  from ultralytics.utils import (
13
14
  ARGV,
14
15
  ENVIRONMENT,
@@ -22,7 +23,6 @@ from ultralytics.utils import (
22
23
  TESTS_RUNNING,
23
24
  TQDM,
24
25
  TryExcept,
25
- __version__,
26
26
  colorstr,
27
27
  get_git_origin_url,
28
28
  )
@@ -16,9 +16,8 @@ def select_closest_cond_frames(frame_idx, cond_frame_outputs, max_cond_frame_num
16
16
  max_cond_frame_num (int): Maximum number of conditioning frames to select.
17
17
 
18
18
  Returns:
19
- (Tuple[Dict[int, Any], Dict[int, Any]]): A tuple containing two dictionaries:
20
- - selected_outputs: Selected items from cond_frame_outputs.
21
- - unselected_outputs: Items not selected from cond_frame_outputs.
19
+ selected_outputs (Dict[int, Any]): Selected items from cond_frame_outputs.
20
+ unselected_outputs (Dict[int, Any]): Items not selected from cond_frame_outputs.
22
21
 
23
22
  Examples:
24
23
  >>> frame_idx = 5
@@ -235,9 +234,8 @@ def window_partition(x, window_size):
235
234
  window_size (int): Size of each window.
236
235
 
237
236
  Returns:
238
- (Tuple[torch.Tensor, Tuple[int, int]]): A tuple containing:
239
- - windows (torch.Tensor): Partitioned windows with shape (B * num_windows, window_size, window_size, C).
240
- - (Hp, Wp) (Tuple[int, int]): Padded height and width before partition.
237
+ windows (torch.Tensor): Partitioned windows with shape (B * num_windows, window_size, window_size, C).
238
+ padded_h_w (Tuple[int, int]): Padded height and width before partition.
241
239
 
242
240
  Examples:
243
241
  >>> x = torch.randn(1, 16, 16, 3)
@@ -32,7 +32,16 @@ class DETRLoss(nn.Module):
32
32
  """
33
33
 
34
34
  def __init__(
35
- self, nc=80, loss_gain=None, aux_loss=True, use_fl=True, use_vfl=False, use_uni_match=False, uni_match_ind=0
35
+ self,
36
+ nc=80,
37
+ loss_gain=None,
38
+ aux_loss=True,
39
+ use_fl=True,
40
+ use_vfl=False,
41
+ use_uni_match=False,
42
+ uni_match_ind=0,
43
+ gamma=1.5,
44
+ alpha=0.25,
36
45
  ):
37
46
  """
38
47
  Initialize DETR loss function with customizable components and gains.
@@ -48,6 +57,8 @@ class DETRLoss(nn.Module):
48
57
  use_vfl (bool): Whether to use VarifocalLoss.
49
58
  use_uni_match (bool): Whether to use fixed layer for auxiliary branch label assignment.
50
59
  uni_match_ind (int): Index of fixed layer for uni_match.
60
+ gamma (float): The focusing parameter that controls how much the loss focuses on hard-to-classify examples.
61
+ alpha (float): The balancing factor used to address class imbalance.
51
62
  """
52
63
  super().__init__()
53
64
 
@@ -57,8 +68,8 @@ class DETRLoss(nn.Module):
57
68
  self.matcher = HungarianMatcher(cost_gain={"class": 2, "bbox": 5, "giou": 2})
58
69
  self.loss_gain = loss_gain
59
70
  self.aux_loss = aux_loss
60
- self.fl = FocalLoss() if use_fl else None
61
- self.vfl = VarifocalLoss() if use_vfl else None
71
+ self.fl = FocalLoss(gamma, alpha) if use_fl else None
72
+ self.vfl = VarifocalLoss(gamma, alpha) if use_vfl else None
62
73
 
63
74
  self.use_uni_match = use_uni_match
64
75
  self.uni_match_ind = uni_match_ind
@@ -59,7 +59,7 @@ class DetectionPredictor(BasePredictor):
59
59
  self.args.classes,
60
60
  self.args.agnostic_nms,
61
61
  max_det=self.args.max_det,
62
- nc=len(self.model.names),
62
+ nc=0 if self.args.task == "detect" else len(self.model.names),
63
63
  end2end=getattr(self.model, "end2end", False),
64
64
  rotated=self.args.task == "obb",
65
65
  return_idxs=save_feats,
@@ -124,7 +124,7 @@ class DetectionValidator(BaseValidator):
124
124
  preds,
125
125
  self.args.conf,
126
126
  self.args.iou,
127
- nc=self.nc,
127
+ nc=0 if self.args.task == "detect" else self.nc,
128
128
  multi_label=True,
129
129
  agnostic=self.args.single_cls or self.args.agnostic_nms,
130
130
  max_det=self.args.max_det,
@@ -144,7 +144,7 @@ class YOLOWorld(Model):
144
144
  class YOLOE(Model):
145
145
  """YOLOE object detection and segmentation model."""
146
146
 
147
- def __init__(self, model="yoloe-v8s-seg.pt", task=None, verbose=False) -> None:
147
+ def __init__(self, model="yoloe-11s-seg.pt", task=None, verbose=False) -> None:
148
148
  """
149
149
  Initialize YOLOE model with a pre-trained model file.
150
150
 
@@ -197,7 +197,7 @@ class YOLOE(Model):
197
197
  (torch.Tensor): Visual positional embeddings.
198
198
 
199
199
  Examples:
200
- >>> model = YOLOE("yoloe-v8s.pt")
200
+ >>> model = YOLOE("yoloe-11s-seg.pt")
201
201
  >>> img = torch.rand(1, 3, 640, 640)
202
202
  >>> visual_features = model.model.backbone(img)
203
203
  >>> pe = model.get_visual_pe(img, visual_features)
@@ -220,7 +220,7 @@ class YOLOE(Model):
220
220
  AssertionError: If the model is not an instance of YOLOEModel.
221
221
 
222
222
  Examples:
223
- >>> model = YOLOE("yoloe-v8s.pt")
223
+ >>> model = YOLOE("yoloe-11s-seg.pt")
224
224
  >>> model.set_vocab(["person", "car", "dog"], ["person", "car", "dog"])
225
225
  """
226
226
  assert isinstance(self.model, YOLOEModel)
@@ -304,7 +304,7 @@ class YOLOE(Model):
304
304
  (List | generator): List of Results objects or generator of Results objects if stream=True.
305
305
 
306
306
  Examples:
307
- >>> model = YOLOE("yoloe-v8s-seg.pt")
307
+ >>> model = YOLOE("yoloe-11s-seg.pt")
308
308
  >>> results = model.predict("path/to/image.jpg")
309
309
  >>> # With visual prompts
310
310
  >>> prompts = {"bboxes": [[10, 20, 100, 200]], "cls": ["person"]}
@@ -59,7 +59,7 @@ class SegmentationPredictor(DetectionPredictor):
59
59
  Each Results object includes both bounding boxes and segmentation masks.
60
60
 
61
61
  Examples:
62
- >>> predictor = SegmentationPredictor(overrides=dict(model="yolov8n-seg.pt"))
62
+ >>> predictor = SegmentationPredictor(overrides=dict(model="yolo11n-seg.pt"))
63
63
  >>> results = predictor.postprocess(preds, img, orig_img)
64
64
  """
65
65
  # Extract protos - tuple if PyTorch model or array if exported
@@ -9,9 +9,9 @@ from ultralytics.data import YOLOConcatDataset, build_dataloader, build_yolo_dat
9
9
  from ultralytics.data.augment import LoadVisualPrompt
10
10
  from ultralytics.data.utils import check_det_dataset
11
11
  from ultralytics.models.yolo.detect import DetectionValidator
12
- from ultralytics.models.yolo.model import YOLOEModel
13
12
  from ultralytics.models.yolo.segment import SegmentationValidator
14
13
  from ultralytics.nn.modules.head import YOLOEDetect
14
+ from ultralytics.nn.tasks import YOLOEModel
15
15
  from ultralytics.utils import LOGGER, TQDM
16
16
  from ultralytics.utils.torch_utils import select_device, smart_inference_mode
17
17
 
@@ -432,10 +432,14 @@ class AutoBackend(nn.Module):
432
432
  output_details = interpreter.get_output_details() # outputs
433
433
  # Load metadata
434
434
  try:
435
- with zipfile.ZipFile(w, "r") as model:
436
- meta_file = model.namelist()[0]
437
- metadata = ast.literal_eval(model.read(meta_file).decode("utf-8"))
438
- except zipfile.BadZipFile:
435
+ with zipfile.ZipFile(w, "r") as zf:
436
+ name = zf.namelist()[0]
437
+ contents = zf.read(name).decode("utf-8")
438
+ if name == "metadata.json": # Custom Ultralytics metadata dict for Python>=3.12
439
+ metadata = json.loads(contents)
440
+ else:
441
+ metadata = ast.literal_eval(contents) # Default tflite-support metadata for Python<=3.11
442
+ except (zipfile.BadZipFile, SyntaxError, ValueError, json.JSONDecodeError):
439
443
  pass
440
444
 
441
445
  # TF.js
@@ -447,9 +447,8 @@ class RepConv(nn.Module):
447
447
  Calculate equivalent kernel and bias by fusing convolutions.
448
448
 
449
449
  Returns:
450
- (tuple): Tuple containing:
451
- - Equivalent kernel (torch.Tensor)
452
- - Equivalent bias (torch.Tensor)
450
+ (torch.Tensor): Equivalent kernel
451
+ (torch.Tensor): Equivalent bias
453
452
  """
454
453
  kernel3x3, bias3x3 = self._fuse_bn_tensor(self.conv1)
455
454
  kernel1x1, bias1x1 = self._fuse_bn_tensor(self.conv2)
@@ -480,9 +479,8 @@ class RepConv(nn.Module):
480
479
  branch (Conv | nn.BatchNorm2d | None): Branch to fuse.
481
480
 
482
481
  Returns:
483
- (tuple): Tuple containing:
484
- - Fused kernel (torch.Tensor)
485
- - Fused bias (torch.Tensor)
482
+ (torch.Tensor): Fused kernel
483
+ (torch.Tensor): Fused bias
486
484
  """
487
485
  if branch is None:
488
486
  return 0, 0
@@ -32,6 +32,7 @@ class Detect(nn.Module):
32
32
  anchors = torch.empty(0) # init
33
33
  strides = torch.empty(0) # init
34
34
  legacy = False # backward compatibility for v3/v5/v8/v9 models
35
+ xyxy = False # xyxy or xywh output
35
36
 
36
37
  def __init__(self, nc=80, ch=()):
37
38
  """Initialize the YOLO detection layer with specified number of classes and channels."""
@@ -83,9 +84,10 @@ class Detect(nn.Module):
83
84
  x (List[torch.Tensor]): Input feature maps from different levels.
84
85
 
85
86
  Returns:
86
- (dict | tuple): If in training mode, returns a dictionary containing the outputs of both one2many and
87
- one2one detections. If not in training mode, returns processed detections or a tuple with
88
- processed detections and raw outputs.
87
+ (dict | tuple):
88
+
89
+ - If in training mode, returns a dictionary containing outputs of both one2many and one2one detections.
90
+ - If not in training mode, returns processed detections or a tuple with processed detections and raw outputs.
89
91
  """
90
92
  x_detach = [xi.detach() for xi in x]
91
93
  one2one = [
@@ -156,7 +158,7 @@ class Detect(nn.Module):
156
158
 
157
159
  def decode_bboxes(self, bboxes, anchors, xywh=True):
158
160
  """Decode bounding boxes."""
159
- return dist2bbox(bboxes, anchors, xywh=xywh and (not self.end2end), dim=1)
161
+ return dist2bbox(bboxes, anchors, xywh=xywh and not (self.end2end or self.xyxy), dim=1)
160
162
 
161
163
  @staticmethod
162
164
  def postprocess(preds: torch.Tensor, max_det: int, nc: int = 80):
@@ -23,10 +23,8 @@ try:
23
23
  warnings.filterwarnings("ignore", category=FutureWarning)
24
24
  import mobileclip
25
25
  except ImportError:
26
- # MobileCLIP repo has an incorrect version of torchvision as dependency
27
- # Manually install other dependencies first and install mobileclip with "--no-deps" flag
28
- checks.check_requirements(["open-clip-torch>=2.20.0", "timm>=0.9.5"])
29
- checks.check_requirements("git+https://github.com/apple/ml-mobileclip.git", cmds="--no-deps")
26
+ # Ultralytics fork preferred since Apple MobileCLIP repo has incorrect version of torchvision
27
+ checks.check_requirements("git+https://github.com/ultralytics/mobileclip.git")
30
28
  import mobileclip
31
29
 
32
30
 
@@ -103,12 +103,13 @@ class AIGym(BaseSolution):
103
103
  self.stage[ind] = "up"
104
104
 
105
105
  # Display angle, count, and stage text
106
- annotator.plot_angle_and_count_and_stage(
107
- angle_text=self.angle[ind], # angle text for display
108
- count_text=self.count[ind], # count text for workouts
109
- stage_text=self.stage[ind], # stage position text
110
- center_kpt=k[int(self.kpts[1])], # center keypoint for display
111
- )
106
+ if self.show_labels:
107
+ annotator.plot_angle_and_count_and_stage(
108
+ angle_text=self.angle[ind], # angle text for display
109
+ count_text=self.count[ind], # count text for workouts
110
+ stage_text=self.stage[ind], # stage position text
111
+ center_kpt=k[int(self.kpts[1])], # center keypoint for display
112
+ )
112
113
  plot_im = annotator.result()
113
114
  self.display_output(plot_im) # Display output image, if environment support display
114
115