ultralytics 8.3.116__tar.gz → 8.3.118__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 (273) hide show
  1. {ultralytics-8.3.116/ultralytics.egg-info → ultralytics-8.3.118}/PKG-INFO +3 -4
  2. {ultralytics-8.3.116 → ultralytics-8.3.118}/pyproject.toml +4 -4
  3. ultralytics-8.3.118/tests/__init__.py +22 -0
  4. ultralytics-8.3.118/tests/conftest.py +83 -0
  5. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/__init__.py +1 -1
  7. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/augment.py +3 -0
  8. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/base.py +11 -3
  9. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/dataset.py +3 -4
  10. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/loaders.py +2 -1
  11. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/exporter.py +18 -11
  12. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/trainer.py +2 -2
  13. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/session.py +3 -2
  14. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/utils.py +1 -1
  15. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/predict.py +2 -2
  16. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/val.py +1 -1
  17. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/model.py +2 -3
  18. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/train.py +1 -1
  19. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/predict.py +1 -1
  20. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/train.py +1 -1
  21. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/val.py +1 -1
  22. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/train.py +3 -3
  23. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/val.py +1 -1
  24. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/autobackend.py +10 -9
  25. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/text_model.py +97 -15
  26. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/__init__.py +1 -1
  27. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/benchmarks.py +4 -5
  28. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/checks.py +4 -2
  29. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/downloads.py +1 -0
  30. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/torch_utils.py +4 -3
  31. {ultralytics-8.3.116 → ultralytics-8.3.118/ultralytics.egg-info}/PKG-INFO +3 -4
  32. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/SOURCES.txt +9 -0
  33. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/requires.txt +4 -3
  34. {ultralytics-8.3.116 → ultralytics-8.3.118}/LICENSE +0 -0
  35. {ultralytics-8.3.116 → ultralytics-8.3.118}/README.md +0 -0
  36. {ultralytics-8.3.116 → ultralytics-8.3.118}/setup.cfg +0 -0
  37. {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_cli.py +0 -0
  38. {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_cuda.py +0 -0
  39. {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_engine.py +0 -0
  40. {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_exports.py +0 -0
  41. {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_integrations.py +0 -0
  42. {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_python.py +0 -0
  43. {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_solutions.py +0 -0
  44. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/assets/bus.jpg +0 -0
  45. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/assets/zidane.jpg +0 -0
  46. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  47. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  48. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  49. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  50. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  51. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  52. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  53. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  54. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  55. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  56. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  57. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  58. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  59. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco.yaml +0 -0
  60. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  61. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  62. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  63. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  64. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  65. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  66. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  67. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  68. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  69. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  70. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  71. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  72. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  73. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  74. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  75. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/signature.yaml +0 -0
  76. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  77. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/xView.yaml +0 -0
  78. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/default.yaml +0 -0
  79. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  80. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  81. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  82. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  83. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  84. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  85. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  86. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  87. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  88. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  89. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  90. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  91. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  92. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  93. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  94. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  95. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  96. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  97. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  98. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  99. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  100. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  101. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  102. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  103. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  104. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  105. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  106. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  107. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  108. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  109. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  110. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  111. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  112. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  113. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  114. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  115. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  116. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  117. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  118. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  119. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  120. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  121. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  122. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  123. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  124. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  125. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  126. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  127. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  128. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  129. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  130. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  131. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  132. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  133. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  134. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/solutions/default.yaml +0 -0
  135. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  136. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  137. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/__init__.py +0 -0
  138. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/annotator.py +0 -0
  139. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/build.py +0 -0
  140. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/converter.py +0 -0
  141. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/download_weights.sh +0 -0
  142. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/get_coco.sh +0 -0
  143. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/get_coco128.sh +0 -0
  144. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  145. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/split.py +0 -0
  146. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/split_dota.py +0 -0
  147. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/utils.py +0 -0
  148. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/__init__.py +0 -0
  149. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/model.py +0 -0
  150. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/predictor.py +0 -0
  151. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/results.py +0 -0
  152. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/tuner.py +0 -0
  153. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/validator.py +0 -0
  154. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/__init__.py +0 -0
  155. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/auth.py +0 -0
  156. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/google/__init__.py +0 -0
  157. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/__init__.py +0 -0
  158. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/__init__.py +0 -0
  159. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/model.py +0 -0
  160. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/predict.py +0 -0
  161. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/utils.py +0 -0
  162. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/val.py +0 -0
  163. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/__init__.py +0 -0
  164. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/model.py +0 -0
  165. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/predict.py +0 -0
  166. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/val.py +0 -0
  167. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/__init__.py +0 -0
  168. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/model.py +0 -0
  169. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/predict.py +0 -0
  170. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/train.py +0 -0
  171. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/val.py +0 -0
  172. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/__init__.py +0 -0
  173. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/amg.py +0 -0
  174. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/build.py +0 -0
  175. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/model.py +0 -0
  176. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/__init__.py +0 -0
  177. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/blocks.py +0 -0
  178. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/decoders.py +0 -0
  179. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/encoders.py +0 -0
  180. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  181. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/sam.py +0 -0
  182. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  183. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/transformer.py +0 -0
  184. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/utils.py +0 -0
  185. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/predict.py +0 -0
  186. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/utils/__init__.py +0 -0
  187. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/utils/loss.py +0 -0
  188. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/utils/ops.py +0 -0
  189. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/__init__.py +0 -0
  190. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/__init__.py +0 -0
  191. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/predict.py +0 -0
  192. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/train.py +0 -0
  193. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/val.py +0 -0
  194. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/__init__.py +0 -0
  195. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/train.py +0 -0
  196. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/__init__.py +0 -0
  197. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/predict.py +0 -0
  198. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/val.py +0 -0
  199. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/__init__.py +0 -0
  200. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/__init__.py +0 -0
  201. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/predict.py +0 -0
  202. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/val.py +0 -0
  203. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/world/__init__.py +0 -0
  204. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/world/train.py +0 -0
  205. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/world/train_world.py +0 -0
  206. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  207. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  208. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/train.py +0 -0
  209. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  210. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/__init__.py +0 -0
  211. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/__init__.py +0 -0
  212. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/activation.py +0 -0
  213. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/block.py +0 -0
  214. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/conv.py +0 -0
  215. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/head.py +0 -0
  216. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/transformer.py +0 -0
  217. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/utils.py +0 -0
  218. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/tasks.py +0 -0
  219. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/__init__.py +0 -0
  220. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/ai_gym.py +0 -0
  221. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/analytics.py +0 -0
  222. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/distance_calculation.py +0 -0
  223. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/heatmap.py +0 -0
  224. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/instance_segmentation.py +0 -0
  225. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/object_blurrer.py +0 -0
  226. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/object_counter.py +0 -0
  227. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/object_cropper.py +0 -0
  228. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/parking_management.py +0 -0
  229. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/queue_management.py +0 -0
  230. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/region_counter.py +0 -0
  231. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/security_alarm.py +0 -0
  232. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/solutions.py +0 -0
  233. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/speed_estimation.py +0 -0
  234. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/streamlit_inference.py +0 -0
  235. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/trackzone.py +0 -0
  236. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/vision_eye.py +0 -0
  237. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/__init__.py +0 -0
  238. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/basetrack.py +0 -0
  239. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/bot_sort.py +0 -0
  240. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/byte_tracker.py +0 -0
  241. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/track.py +0 -0
  242. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/__init__.py +0 -0
  243. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/gmc.py +0 -0
  244. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  245. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/matching.py +0 -0
  246. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/autobatch.py +0 -0
  247. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/__init__.py +0 -0
  248. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/base.py +0 -0
  249. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/clearml.py +0 -0
  250. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/comet.py +0 -0
  251. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/dvc.py +0 -0
  252. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/hub.py +0 -0
  253. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/mlflow.py +0 -0
  254. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/neptune.py +0 -0
  255. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/raytune.py +0 -0
  256. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  257. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/wb.py +0 -0
  258. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/dist.py +0 -0
  259. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/errors.py +0 -0
  260. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/export.py +0 -0
  261. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/files.py +0 -0
  262. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/instance.py +0 -0
  263. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/loss.py +0 -0
  264. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/metrics.py +0 -0
  265. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/ops.py +0 -0
  266. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/patches.py +0 -0
  267. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/plotting.py +0 -0
  268. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/tal.py +0 -0
  269. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/triton.py +0 -0
  270. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/tuner.py +0 -0
  271. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/dependency_links.txt +0 -0
  272. {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/entry_points.txt +0 -0
  273. {ultralytics-8.3.116 → ultralytics-8.3.118}/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.116
3
+ Version: 8.3.118
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 = [
@@ -134,7 +133,8 @@ ultralytics = "ultralytics.cfg:entrypoint"
134
133
  # Tools settings -------------------------------------------------------------------------------------------------------
135
134
  [tool.setuptools] # configuration specific to the `setuptools` build backend.
136
135
  packages = { find = { where = ["."], include = ["ultralytics", "ultralytics.*"] } }
137
- package-data = { "ultralytics" = ["**/*.yaml", "**/*.sh"], "ultralytics.assets" = ["*.jpg"] }
136
+ # Tests included below for checking Conda builds in https://github.com/conda-forge/ultralytics-feedstock
137
+ package-data = { "ultralytics" = ["**/*.yaml", "**/*.sh", "../tests/*.py"], "ultralytics.assets" = ["*.jpg"] }
138
138
 
139
139
  [tool.setuptools.dynamic]
140
140
  version = { attr = "ultralytics.__version__" }
@@ -0,0 +1,22 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ from ultralytics.utils import ASSETS, ROOT, WEIGHTS_DIR, checks
4
+
5
+ # Constants used in tests
6
+ MODEL = WEIGHTS_DIR / "path with spaces" / "yolo11n.pt" # test spaces in path
7
+ CFG = "yolo11n.yaml"
8
+ SOURCE = ASSETS / "bus.jpg"
9
+ SOURCES_LIST = [ASSETS / "bus.jpg", ASSETS, ASSETS / "*", ASSETS / "**/*.jpg"]
10
+ TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
11
+ CUDA_IS_AVAILABLE = checks.cuda_is_available()
12
+ CUDA_DEVICE_COUNT = checks.cuda_device_count()
13
+
14
+ __all__ = (
15
+ "MODEL",
16
+ "CFG",
17
+ "SOURCE",
18
+ "SOURCES_LIST",
19
+ "TMP",
20
+ "CUDA_IS_AVAILABLE",
21
+ "CUDA_DEVICE_COUNT",
22
+ )
@@ -0,0 +1,83 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ import shutil
4
+ from pathlib import Path
5
+
6
+ from tests import TMP
7
+
8
+
9
+ def pytest_addoption(parser):
10
+ """
11
+ Add custom command-line options to pytest.
12
+
13
+ Args:
14
+ parser (pytest.config.Parser): The pytest parser object for adding custom command-line options.
15
+
16
+ Returns:
17
+ (None)
18
+ """
19
+ parser.addoption("--slow", action="store_true", default=False, help="Run slow tests")
20
+
21
+
22
+ def pytest_collection_modifyitems(config, items):
23
+ """
24
+ Modify the list of test items to exclude tests marked as slow if the --slow option is not specified.
25
+
26
+ Args:
27
+ config (pytest.config.Config): The pytest configuration object that provides access to command-line options.
28
+ items (list): The list of collected pytest item objects to be modified based on the presence of --slow option.
29
+
30
+ Returns:
31
+ (None): The function modifies the 'items' list in place.
32
+ """
33
+ if not config.getoption("--slow"):
34
+ # Remove the item entirely from the list of test items if it's marked as 'slow'
35
+ items[:] = [item for item in items if "slow" not in item.keywords]
36
+
37
+
38
+ def pytest_sessionstart(session):
39
+ """
40
+ Initialize session configurations for pytest.
41
+
42
+ This function is automatically called by pytest after the 'Session' object has been created but before performing
43
+ test collection. It sets the initial seeds and prepares the temporary directory for the test session.
44
+
45
+ Args:
46
+ session (pytest.Session): The pytest session object.
47
+
48
+ Returns:
49
+ (None)
50
+ """
51
+ from ultralytics.utils.torch_utils import init_seeds
52
+
53
+ init_seeds()
54
+ shutil.rmtree(TMP, ignore_errors=True) # delete any existing tests/tmp directory
55
+ TMP.mkdir(parents=True, exist_ok=True) # create a new empty directory
56
+
57
+
58
+ def pytest_terminal_summary(terminalreporter, exitstatus, config):
59
+ """
60
+ Cleanup operations after pytest session.
61
+
62
+ This function is automatically called by pytest at the end of the entire test session. It removes certain files
63
+ and directories used during testing.
64
+
65
+ Args:
66
+ terminalreporter (pytest.terminal.TerminalReporter): The terminal reporter object used for terminal output.
67
+ exitstatus (int): The exit status of the test run.
68
+ config (pytest.config.Config): The pytest config object.
69
+
70
+ Returns:
71
+ (None)
72
+ """
73
+ from ultralytics.utils import WEIGHTS_DIR
74
+
75
+ # Remove files
76
+ models = [path for x in ["*.onnx", "*.torchscript"] for path in WEIGHTS_DIR.rglob(x)]
77
+ for file in ["decelera_portrait_min.mov", "bus.jpg", "yolo11n.onnx", "yolo11n.torchscript"] + models:
78
+ Path(file).unlink(missing_ok=True)
79
+
80
+ # Remove directories
81
+ models = [path for x in ["*.mlpackage", "*_openvino_model"] for path in WEIGHTS_DIR.rglob(x)]
82
+ for directory in [WEIGHTS_DIR / "path with spaces", TMP.parents[1] / ".pytest_cache", TMP] + models:
83
+ shutil.rmtree(directory, ignore_errors=True)
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.116"
3
+ __version__ = "8.3.118"
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,
@@ -1586,6 +1586,9 @@ class LetterBox:
1586
1586
 
1587
1587
  if shape[::-1] != new_unpad: # resize
1588
1588
  img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR)
1589
+ if img.ndim == 2:
1590
+ img = img[..., None]
1591
+
1589
1592
  top, bottom = int(round(dh - 0.1)) if self.center else 0, int(round(dh + 0.1))
1590
1593
  left, right = int(round(dw - 0.1)) if self.center else 0, int(round(dw + 0.1))
1591
1594
  h, w, c = img.shape
@@ -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):
@@ -32,6 +33,7 @@ class BaseDataset(Dataset):
32
33
  single_cls (bool): Whether to treat all objects as a single class.
33
34
  prefix (str): Prefix to print in log messages.
34
35
  fraction (float): Fraction of dataset to utilize.
36
+ cv2_flag (int): OpenCV flag for reading images.
35
37
  im_files (List[str]): List of image file paths.
36
38
  labels (List[Dict]): List of label data dictionaries.
37
39
  ni (int): Number of images in the dataset.
@@ -78,6 +80,7 @@ class BaseDataset(Dataset):
78
80
  single_cls=False,
79
81
  classes=None,
80
82
  fraction=1.0,
83
+ channels=3,
81
84
  ):
82
85
  """
83
86
  Initialize BaseDataset with given configuration and options.
@@ -96,6 +99,7 @@ class BaseDataset(Dataset):
96
99
  single_cls (bool, optional): If True, single class training is used.
97
100
  classes (list, optional): List of included classes.
98
101
  fraction (float, optional): Fraction of dataset to utilize.
102
+ channels (int, optional): Number of channels in the images (1 for grayscale, 3 for RGB).
99
103
  """
100
104
  super().__init__()
101
105
  self.img_path = img_path
@@ -104,6 +108,8 @@ class BaseDataset(Dataset):
104
108
  self.single_cls = single_cls
105
109
  self.prefix = prefix
106
110
  self.fraction = fraction
111
+ self.channels = channels
112
+ self.cv2_flag = cv2.IMREAD_GRAYSCALE if channels == 1 else cv2.IMREAD_COLOR
107
113
  self.im_files = self.get_img_files(self.img_path)
108
114
  self.labels = self.get_labels()
109
115
  self.update_labels(include_class=classes) # single_cls and include_class
@@ -223,9 +229,9 @@ class BaseDataset(Dataset):
223
229
  except Exception as e:
224
230
  LOGGER.warning(f"{self.prefix}Removing corrupt *.npy image file {fn} due to: {e}")
225
231
  Path(fn).unlink(missing_ok=True)
226
- im = imread(f) # BGR
232
+ im = imread(f, flags=self.cv2_flag) # BGR
227
233
  else: # read image
228
- im = imread(f) # BGR
234
+ im = imread(f, flags=self.cv2_flag) # BGR
229
235
  if im is None:
230
236
  raise FileNotFoundError(f"Image Not Found {f}")
231
237
 
@@ -237,6 +243,8 @@ class BaseDataset(Dataset):
237
243
  im = cv2.resize(im, (w, h), interpolation=cv2.INTER_LINEAR)
238
244
  elif not (h0 == w0 == self.imgsz): # resize by stretching image to square imgsz
239
245
  im = cv2.resize(im, (self.imgsz, self.imgsz), interpolation=cv2.INTER_LINEAR)
246
+ if im.ndim == 2:
247
+ im = im[..., None]
240
248
 
241
249
  # Add to buffer if training with augmentations
242
250
  if self.augment:
@@ -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,
@@ -85,7 +84,7 @@ class YOLODataset(BaseDataset):
85
84
  self.use_obb = task == "obb"
86
85
  self.data = data
87
86
  assert not (self.use_segments and self.use_keypoints), "Can not use both segments and keypoints."
88
- super().__init__(*args, **kwargs)
87
+ super().__init__(*args, channels=self.data["channels"], **kwargs)
89
88
 
90
89
  def cache_labels(self, path=Path("./labels.cache")):
91
90
  """
@@ -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
@@ -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,
@@ -238,9 +238,6 @@ class Exporter:
238
238
  _callbacks (dict, optional): Dictionary of callback functions.
239
239
  """
240
240
  self.args = get_cfg(cfg, overrides)
241
- if self.args.format.lower() in {"coreml", "mlmodel"}: # fix attempt for protobuf<3.20.x errors
242
- os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python" # must run before TensorBoard callback
243
-
244
241
  self.callbacks = _callbacks or callbacks.get_default_callbacks()
245
242
  callbacks.add_integration_callbacks(self)
246
243
 
@@ -384,7 +381,7 @@ class Exporter:
384
381
  m.export = True
385
382
  m.format = self.args.format
386
383
  m.max_det = self.args.max_det
387
- m.xyxy = self.args.nms
384
+ m.xyxy = self.args.nms and not coreml
388
385
  elif isinstance(m, C2f) and not is_tf_format:
389
386
  # EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
390
387
  m.forward = m.forward_split
@@ -703,7 +700,7 @@ class Exporter:
703
700
 
704
701
  @try_export
705
702
  def export_mnn(self, prefix=colorstr("MNN:")):
706
- """YOLOv8 MNN export using MNN https://github.com/alibaba/MNN."""
703
+ """YOLO MNN export using MNN https://github.com/alibaba/MNN."""
707
704
  f_onnx, _ = self.export_onnx() # get onnx model first
708
705
 
709
706
  check_requirements("MNN>=2.9.6")
@@ -925,10 +922,8 @@ class Exporter:
925
922
  "onnx>=1.12.0",
926
923
  "onnx2tf>=1.26.3",
927
924
  "onnxslim>=0.1.31",
928
- "tflite_support<=0.4.3" if IS_JETSON else "tflite_support", # fix ImportError 'GLIBCXX_3.4.29'
929
- "flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
930
925
  "onnxruntime-gpu" if cuda else "onnxruntime",
931
- "protobuf>=5", # tflite_support pins <=4 but >=5 works
926
+ "protobuf>=5",
932
927
  ),
933
928
  cmds="--extra-index-url https://pypi.ngc.nvidia.com", # onnx_graphsurgeon only on NVIDIA
934
929
  )
@@ -1279,8 +1274,20 @@ class Exporter:
1279
1274
 
1280
1275
  return f, None
1281
1276
 
1282
- def _add_tflite_metadata(self, file):
1277
+ def _add_tflite_metadata(self, file, use_flatbuffers=False):
1283
1278
  """Add metadata to *.tflite models per https://ai.google.dev/edge/litert/models/metadata."""
1279
+ if not use_flatbuffers:
1280
+ import zipfile
1281
+
1282
+ with zipfile.ZipFile(file, "a", zipfile.ZIP_DEFLATED) as zf:
1283
+ zf.writestr("metadata.json", json.dumps(self.metadata, indent=2))
1284
+ return
1285
+
1286
+ if IS_PYTHON_MINIMUM_3_12:
1287
+ LOGGER.warning(f"TFLite Support package may not be compatible with Python>=3.12 environments for {file}")
1288
+
1289
+ # Update old 'flatbuffers' included inside tensorflow package
1290
+ check_requirements(("tflite_support", "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'"))
1284
1291
  import flatbuffers
1285
1292
 
1286
1293
  try:
@@ -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
  )
@@ -47,7 +47,7 @@ class DetectionPredictor(BasePredictor):
47
47
  (list): List of Results objects containing the post-processed predictions.
48
48
 
49
49
  Examples:
50
- >>> predictor = DetectionPredictor(overrides=dict(model="yolov8n.pt"))
50
+ >>> predictor = DetectionPredictor(overrides=dict(model="yolo11n.pt"))
51
51
  >>> results = predictor.predict("path/to/image.jpg")
52
52
  >>> processed_results = predictor.postprocess(preds, img, orig_imgs)
53
53
  """
@@ -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,
@@ -29,16 +29,15 @@ class YOLO(Model):
29
29
  (YOLOWorld or YOLOE) based on the model filename.
30
30
 
31
31
  Args:
32
- model (str | Path): Model name or path to model file, i.e. 'yolo11n.pt', 'yolov8n.yaml'.
32
+ model (str | Path): Model name or path to model file, i.e. 'yolo11n.pt', 'yolo11n.yaml'.
33
33
  task (str | None): YOLO task specification, i.e. 'detect', 'segment', 'classify', 'pose', 'obb'.
34
34
  Defaults to auto-detection based on model.
35
35
  verbose (bool): Display model info on load.
36
36
 
37
37
  Examples:
38
38
  >>> from ultralytics import YOLO
39
- >>> model = YOLO("yolov8n.pt") # load a pretrained YOLOv8n detection model
40
- >>> model = YOLO("yolov8n-seg.pt") # load a pretrained YOLOv8n segmentation model
41
39
  >>> model = YOLO("yolo11n.pt") # load a pretrained YOLOv11n detection model
40
+ >>> model = YOLO("yolo11n-seg.pt") # load a pretrained YOLO11n segmentation model
42
41
  """
43
42
  path = Path(model)
44
43
  if "-world" in path.stem and path.suffix in {".pt", ".yaml", ".yml"}: # if YOLOWorld PyTorch model
@@ -65,7 +65,7 @@ class OBBTrainer(yolo.detect.DetectionTrainer):
65
65
 
66
66
  Examples:
67
67
  >>> trainer = OBBTrainer()
68
- >>> model = trainer.get_model(cfg="yolov8n-obb.yaml", weights="yolov8n-obb.pt")
68
+ >>> model = trainer.get_model(cfg="yolo11n-obb.yaml", weights="yolo11n-obb.pt")
69
69
  """
70
70
  model = OBBModel(cfg, nc=self.data["nc"], ch=self.data["channels"], verbose=verbose and RANK == -1)
71
71
  if weights:
@@ -41,7 +41,7 @@ class PosePredictor(DetectionPredictor):
41
41
  Examples:
42
42
  >>> from ultralytics.utils import ASSETS
43
43
  >>> from ultralytics.models.yolo.pose import PosePredictor
44
- >>> args = dict(model="yolov8n-pose.pt", source=ASSETS)
44
+ >>> args = dict(model="yolo11n-pose.pt", source=ASSETS)
45
45
  >>> predictor = PosePredictor(overrides=args)
46
46
  >>> predictor.predict_cli()
47
47
  """
@@ -53,7 +53,7 @@ class PoseTrainer(yolo.detect.DetectionTrainer):
53
53
 
54
54
  Examples:
55
55
  >>> from ultralytics.models.yolo.pose import PoseTrainer
56
- >>> args = dict(model="yolov8n-pose.pt", data="coco8-pose.yaml", epochs=3)
56
+ >>> args = dict(model="yolo11n-pose.pt", data="coco8-pose.yaml", epochs=3)
57
57
  >>> trainer = PoseTrainer(overrides=args)
58
58
  >>> trainer.train()
59
59
  """
@@ -62,7 +62,7 @@ class PoseValidator(DetectionValidator):
62
62
 
63
63
  Examples:
64
64
  >>> from ultralytics.models.yolo.pose import PoseValidator
65
- >>> args = dict(model="yolov8n-pose.pt", data="coco8-pose.yaml")
65
+ >>> args = dict(model="yolo11n-pose.pt", data="coco8-pose.yaml")
66
66
  >>> validator = PoseValidator(args=args)
67
67
  >>> validator()
68
68
 
@@ -39,7 +39,7 @@ class SegmentationTrainer(yolo.detect.DetectionTrainer):
39
39
 
40
40
  Examples:
41
41
  >>> from ultralytics.models.yolo.segment import SegmentationTrainer
42
- >>> args = dict(model="yolov8n-seg.pt", data="coco8-seg.yaml", epochs=3)
42
+ >>> args = dict(model="yolo11n-seg.pt", data="coco8-seg.yaml", epochs=3)
43
43
  >>> trainer = SegmentationTrainer(overrides=args)
44
44
  >>> trainer.train()
45
45
  """
@@ -62,8 +62,8 @@ class SegmentationTrainer(yolo.detect.DetectionTrainer):
62
62
 
63
63
  Examples:
64
64
  >>> trainer = SegmentationTrainer()
65
- >>> model = trainer.get_model(cfg="yolov8n-seg.yaml")
66
- >>> model = trainer.get_model(weights="yolov8n-seg.pt", verbose=False)
65
+ >>> model = trainer.get_model(cfg="yolo11n-seg.yaml")
66
+ >>> model = trainer.get_model(weights="yolo11n-seg.pt", verbose=False)
67
67
  """
68
68
  model = SegmentationModel(cfg, nc=self.data["nc"], ch=self.data["channels"], verbose=verbose and RANK == -1)
69
69
  if weights:
@@ -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
 
@@ -14,7 +14,7 @@ import torch
14
14
  import torch.nn as nn
15
15
  from PIL import Image
16
16
 
17
- from ultralytics.utils import ARM64, IS_JETSON, IS_RASPBERRYPI, LINUX, LOGGER, PYTHON_VERSION, ROOT, yaml_load
17
+ from ultralytics.utils import ARM64, IS_JETSON, LINUX, LOGGER, PYTHON_VERSION, ROOT, yaml_load
18
18
  from ultralytics.utils.checks import check_requirements, check_suffix, check_version, check_yaml, is_rockchip
19
19
  from ultralytics.utils.downloads import attempt_download_asset, is_url
20
20
 
@@ -90,7 +90,7 @@ class AutoBackend(nn.Module):
90
90
  _model_type: Determine the model type from file path.
91
91
 
92
92
  Examples:
93
- >>> model = AutoBackend(weights="yolov8n.pt", device="cuda")
93
+ >>> model = AutoBackend(weights="yolo11n.pt", device="cuda")
94
94
  >>> results = model(img)
95
95
  """
96
96
 
@@ -207,9 +207,6 @@ class AutoBackend(nn.Module):
207
207
  elif onnx or imx:
208
208
  LOGGER.info(f"Loading {w} for ONNX Runtime inference...")
209
209
  check_requirements(("onnx", "onnxruntime-gpu" if cuda else "onnxruntime"))
210
- if IS_RASPBERRYPI or IS_JETSON:
211
- # Fix 'numpy.linalg._umath_linalg' has no attribute '_ilp64' for TF SavedModel on RPi and Jetson
212
- check_requirements("numpy==1.23.5")
213
210
  import onnxruntime
214
211
 
215
212
  providers = ["CPUExecutionProvider"]
@@ -432,10 +429,14 @@ class AutoBackend(nn.Module):
432
429
  output_details = interpreter.get_output_details() # outputs
433
430
  # Load metadata
434
431
  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:
432
+ with zipfile.ZipFile(w, "r") as zf:
433
+ name = zf.namelist()[0]
434
+ contents = zf.read(name).decode("utf-8")
435
+ if name == "metadata.json": # Custom Ultralytics metadata dict for Python>=3.12
436
+ metadata = json.loads(contents)
437
+ else:
438
+ metadata = ast.literal_eval(contents) # Default tflite-support metadata for Python<=3.11
439
+ except (zipfile.BadZipFile, SyntaxError, ValueError, json.JSONDecodeError):
439
440
  pass
440
441
 
441
442
  # TF.js