ultralytics 8.3.206__tar.gz → 8.3.208__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 (288) hide show
  1. {ultralytics-8.3.206 → ultralytics-8.3.208}/PKG-INFO +1 -1
  2. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/test_cuda.py +1 -1
  3. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/test_exports.py +1 -1
  4. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/test_python.py +1 -1
  5. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/exporter.py +21 -19
  7. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/autobackend.py +1 -1
  8. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/modules/head.py +10 -4
  9. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/benchmarks.py +1 -1
  10. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/checks.py +24 -11
  11. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/downloads.py +3 -3
  12. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics.egg-info/PKG-INFO +1 -1
  13. {ultralytics-8.3.206 → ultralytics-8.3.208}/LICENSE +0 -0
  14. {ultralytics-8.3.206 → ultralytics-8.3.208}/README.md +0 -0
  15. {ultralytics-8.3.206 → ultralytics-8.3.208}/pyproject.toml +0 -0
  16. {ultralytics-8.3.206 → ultralytics-8.3.208}/setup.cfg +0 -0
  17. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/__init__.py +0 -0
  18. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/conftest.py +0 -0
  19. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/test_cli.py +0 -0
  20. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/test_engine.py +0 -0
  21. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/test_integrations.py +0 -0
  22. {ultralytics-8.3.206 → ultralytics-8.3.208}/tests/test_solutions.py +0 -0
  23. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/assets/bus.jpg +0 -0
  24. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/assets/zidane.jpg +0 -0
  25. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/__init__.py +0 -0
  26. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  27. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  28. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  29. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  30. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  31. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  32. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  33. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  34. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  35. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  36. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  37. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  38. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  39. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  40. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco.yaml +0 -0
  41. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  42. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  43. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  44. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  45. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  46. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  47. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  48. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  49. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  50. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  51. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  52. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  53. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  54. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  55. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  56. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  57. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  58. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/signature.yaml +0 -0
  59. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  60. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/datasets/xView.yaml +0 -0
  61. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/default.yaml +0 -0
  62. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  63. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  64. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  65. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  66. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  67. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  68. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  69. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  70. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  71. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  72. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  73. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  74. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  75. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  76. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  77. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  78. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  79. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  80. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  81. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  82. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  83. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  84. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  85. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  86. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  87. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  88. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  89. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  90. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  91. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  92. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  93. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  94. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  95. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  96. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  97. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  98. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  99. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  100. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  101. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  102. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  103. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  104. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  105. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  106. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  107. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  108. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  109. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  110. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  111. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  112. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  113. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  114. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  115. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  116. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  117. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  118. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  119. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/__init__.py +0 -0
  120. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/annotator.py +0 -0
  121. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/augment.py +0 -0
  122. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/base.py +0 -0
  123. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/build.py +0 -0
  124. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/converter.py +0 -0
  125. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/dataset.py +0 -0
  126. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/loaders.py +0 -0
  127. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/scripts/download_weights.sh +0 -0
  128. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/scripts/get_coco.sh +0 -0
  129. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/scripts/get_coco128.sh +0 -0
  130. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  131. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/split.py +0 -0
  132. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/split_dota.py +0 -0
  133. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/data/utils.py +0 -0
  134. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/__init__.py +0 -0
  135. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/model.py +0 -0
  136. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/predictor.py +0 -0
  137. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/results.py +0 -0
  138. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/trainer.py +0 -0
  139. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/tuner.py +0 -0
  140. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/engine/validator.py +0 -0
  141. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/hub/__init__.py +0 -0
  142. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/hub/auth.py +0 -0
  143. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/hub/google/__init__.py +0 -0
  144. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/hub/session.py +0 -0
  145. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/hub/utils.py +0 -0
  146. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/__init__.py +0 -0
  147. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/fastsam/__init__.py +0 -0
  148. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/fastsam/model.py +0 -0
  149. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/fastsam/predict.py +0 -0
  150. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/fastsam/utils.py +0 -0
  151. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/fastsam/val.py +0 -0
  152. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/nas/__init__.py +0 -0
  153. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/nas/model.py +0 -0
  154. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/nas/predict.py +0 -0
  155. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/nas/val.py +0 -0
  156. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/rtdetr/__init__.py +0 -0
  157. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/rtdetr/model.py +0 -0
  158. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/rtdetr/predict.py +0 -0
  159. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/rtdetr/train.py +0 -0
  160. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/rtdetr/val.py +0 -0
  161. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/__init__.py +0 -0
  162. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/amg.py +0 -0
  163. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/build.py +0 -0
  164. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/model.py +0 -0
  165. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/__init__.py +0 -0
  166. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/blocks.py +0 -0
  167. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/decoders.py +0 -0
  168. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/encoders.py +0 -0
  169. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  170. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/sam.py +0 -0
  171. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  172. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/transformer.py +0 -0
  173. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/modules/utils.py +0 -0
  174. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/sam/predict.py +0 -0
  175. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/utils/__init__.py +0 -0
  176. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/utils/loss.py +0 -0
  177. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/utils/ops.py +0 -0
  178. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/__init__.py +0 -0
  179. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/classify/__init__.py +0 -0
  180. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/classify/predict.py +0 -0
  181. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/classify/train.py +0 -0
  182. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/classify/val.py +0 -0
  183. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/detect/__init__.py +0 -0
  184. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/detect/predict.py +0 -0
  185. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/detect/train.py +0 -0
  186. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/detect/val.py +0 -0
  187. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/model.py +0 -0
  188. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/obb/__init__.py +0 -0
  189. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/obb/predict.py +0 -0
  190. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/obb/train.py +0 -0
  191. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/obb/val.py +0 -0
  192. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/pose/__init__.py +0 -0
  193. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/pose/predict.py +0 -0
  194. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/pose/train.py +0 -0
  195. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/pose/val.py +0 -0
  196. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/segment/__init__.py +0 -0
  197. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/segment/predict.py +0 -0
  198. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/segment/train.py +0 -0
  199. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/segment/val.py +0 -0
  200. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/world/__init__.py +0 -0
  201. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/world/train.py +0 -0
  202. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/world/train_world.py +0 -0
  203. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  204. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  205. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/yoloe/train.py +0 -0
  206. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  207. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/models/yolo/yoloe/val.py +0 -0
  208. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/__init__.py +0 -0
  209. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/modules/__init__.py +0 -0
  210. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/modules/activation.py +0 -0
  211. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/modules/block.py +0 -0
  212. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/modules/conv.py +0 -0
  213. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/modules/transformer.py +0 -0
  214. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/modules/utils.py +0 -0
  215. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/tasks.py +0 -0
  216. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/nn/text_model.py +0 -0
  217. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/py.typed +0 -0
  218. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/__init__.py +0 -0
  219. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/ai_gym.py +0 -0
  220. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/analytics.py +0 -0
  221. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/config.py +0 -0
  222. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/distance_calculation.py +0 -0
  223. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/heatmap.py +0 -0
  224. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/instance_segmentation.py +0 -0
  225. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/object_blurrer.py +0 -0
  226. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/object_counter.py +0 -0
  227. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/object_cropper.py +0 -0
  228. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/parking_management.py +0 -0
  229. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/queue_management.py +0 -0
  230. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/region_counter.py +0 -0
  231. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/security_alarm.py +0 -0
  232. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/similarity_search.py +0 -0
  233. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/solutions.py +0 -0
  234. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/speed_estimation.py +0 -0
  235. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/streamlit_inference.py +0 -0
  236. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/templates/similarity-search.html +0 -0
  237. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/trackzone.py +0 -0
  238. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/solutions/vision_eye.py +0 -0
  239. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/__init__.py +0 -0
  240. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/basetrack.py +0 -0
  241. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/bot_sort.py +0 -0
  242. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/byte_tracker.py +0 -0
  243. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/track.py +0 -0
  244. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/utils/__init__.py +0 -0
  245. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/utils/gmc.py +0 -0
  246. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  247. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/trackers/utils/matching.py +0 -0
  248. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/__init__.py +0 -0
  249. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/autobatch.py +0 -0
  250. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/autodevice.py +0 -0
  251. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/__init__.py +0 -0
  252. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/base.py +0 -0
  253. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/clearml.py +0 -0
  254. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/comet.py +0 -0
  255. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/dvc.py +0 -0
  256. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/hub.py +0 -0
  257. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/mlflow.py +0 -0
  258. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/neptune.py +0 -0
  259. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/platform.py +0 -0
  260. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/raytune.py +0 -0
  261. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  262. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/callbacks/wb.py +0 -0
  263. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/cpu.py +0 -0
  264. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/dist.py +0 -0
  265. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/errors.py +0 -0
  266. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/events.py +0 -0
  267. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/export/__init__.py +0 -0
  268. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/export/imx.py +0 -0
  269. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/files.py +0 -0
  270. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/git.py +0 -0
  271. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/instance.py +0 -0
  272. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/logger.py +0 -0
  273. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/loss.py +0 -0
  274. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/metrics.py +0 -0
  275. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/nms.py +0 -0
  276. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/ops.py +0 -0
  277. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/patches.py +0 -0
  278. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/plotting.py +0 -0
  279. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/tal.py +0 -0
  280. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/torch_utils.py +0 -0
  281. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/tqdm.py +0 -0
  282. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/triton.py +0 -0
  283. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics/utils/tuner.py +0 -0
  284. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics.egg-info/SOURCES.txt +0 -0
  285. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics.egg-info/dependency_links.txt +0 -0
  286. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics.egg-info/entry_points.txt +0 -0
  287. {ultralytics-8.3.206 → ultralytics-8.3.208}/ultralytics.egg-info/requires.txt +0 -0
  288. {ultralytics-8.3.206 → ultralytics-8.3.208}/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.206
3
+ Version: 8.3.208
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>
@@ -104,7 +104,7 @@ def test_export_engine_matrix(task, dynamic, int8, half, batch):
104
104
  )
105
105
  YOLO(file)([SOURCE] * batch, imgsz=64 if dynamic else 32, device=DEVICES[0]) # exported model inference
106
106
  Path(file).unlink() # cleanup
107
- Path(file).with_suffix(".cache").unlink() if int8 else None # cleanup INT8 cache
107
+ Path(file).with_suffix(".cache").unlink(missing_ok=True) if int8 else None # cleanup INT8 cache
108
108
 
109
109
 
110
110
  @pytest.mark.skipif(not DEVICES, reason="No CUDA devices available")
@@ -101,7 +101,7 @@ def test_export_onnx_matrix(task, dynamic, int8, half, batch, simplify, nms):
101
101
  [ # generate all combinations except for exclusion cases
102
102
  (task, dynamic, int8, half, batch, nms)
103
103
  for task, dynamic, int8, half, batch, nms in product(
104
- TASKS, [False, True], [False], [False], [1, 2], [True, False]
104
+ TASKS, [False, True], [False], [False, True], [1, 2], [True, False]
105
105
  )
106
106
  if not (task == "classify" and nms)
107
107
  ],
@@ -408,7 +408,7 @@ def test_utils_init():
408
408
  def test_utils_checks():
409
409
  """Test various utility checks for filenames, git status, requirements, image sizes, and versions."""
410
410
  checks.check_yolov5u_filename("yolov5n.pt")
411
- checks.check_requirements() # check requirements.txt
411
+ checks.check_requirements("numpy") # check requirements.txt
412
412
  checks.check_imgsz([600, 600], max_dim=1)
413
413
  checks.check_imshow(warn=True)
414
414
  checks.check_version("ultralytics", "8.0.0")
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.206"
3
+ __version__ = "8.3.208"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -360,8 +360,8 @@ class Exporter:
360
360
  if self.args.half and self.args.int8:
361
361
  LOGGER.warning("half=True and int8=True are mutually exclusive, setting half=False.")
362
362
  self.args.half = False
363
- if self.args.half and onnx and self.device.type == "cpu":
364
- LOGGER.warning("half=True only compatible with GPU export, i.e. use device=0")
363
+ if self.args.half and (onnx or jit) and self.device.type == "cpu":
364
+ LOGGER.warning("half=True only compatible with GPU export, i.e. use device=0, setting half=False.")
365
365
  self.args.half = False
366
366
  self.imgsz = check_imgsz(self.args.imgsz, stride=model.stride, min_dim=2) # check image size
367
367
  if self.args.optimize:
@@ -463,7 +463,7 @@ class Exporter:
463
463
  y = None
464
464
  for _ in range(2): # dry runs
465
465
  y = NMSModel(model, self.args)(im) if self.args.nms and not coreml and not imx else model(im)
466
- if self.args.half and onnx and self.device.type != "cpu":
466
+ if self.args.half and (onnx or jit) and self.device.type != "cpu":
467
467
  im, model = im.half(), model.half() # to FP16
468
468
 
469
469
  # Filter warnings
@@ -510,11 +510,11 @@ class Exporter:
510
510
  self.run_callbacks("on_export_start")
511
511
  # Exports
512
512
  f = [""] * len(fmts) # exported filenames
513
- if jit or ncnn: # TorchScript
513
+ if jit: # TorchScript
514
514
  f[0] = self.export_torchscript()
515
515
  if engine: # TensorRT required before ONNX
516
516
  f[1] = self.export_engine(dla=dla)
517
- if onnx: # ONNX
517
+ if onnx or ncnn: # ONNX
518
518
  f[2] = self.export_onnx()
519
519
  if xml: # OpenVINO
520
520
  f[3] = self.export_openvino()
@@ -806,7 +806,7 @@ class Exporter:
806
806
 
807
807
  LOGGER.info(f"\n{prefix} starting export with NCNN {ncnn.__version__}...")
808
808
  f = Path(str(self.file).replace(self.file.suffix, f"_ncnn_model{os.sep}"))
809
- f_ts = self.file.with_suffix(".torchscript")
809
+ f_onnx = self.file.with_suffix(".onnx")
810
810
 
811
811
  name = Path("pnnx.exe" if WINDOWS else "pnnx") # PNNX filename
812
812
  pnnx = name if name.is_file() else (ROOT / name)
@@ -820,10 +820,10 @@ class Exporter:
820
820
  try:
821
821
  release, assets = get_github_assets(repo="pnnx/pnnx")
822
822
  asset = [x for x in assets if f"{system}.zip" in x][0]
823
- assert isinstance(asset, str), "Unable to retrieve PNNX repo assets" # i.e. pnnx-20240410-macos.zip
823
+ assert isinstance(asset, str), "Unable to retrieve PNNX repo assets" # i.e. pnnx-20250930-macos.zip
824
824
  LOGGER.info(f"{prefix} successfully found latest PNNX asset file {asset}")
825
825
  except Exception as e:
826
- release = "20240410"
826
+ release = "20250930"
827
827
  asset = f"pnnx-{release}-{system}.zip"
828
828
  LOGGER.warning(f"{prefix} PNNX GitHub assets not found: {e}, using default {asset}")
829
829
  unzip_dir = safe_download(f"https://github.com/pnnx/pnnx/releases/download/{release}/{asset}", delete=True)
@@ -847,7 +847,7 @@ class Exporter:
847
847
 
848
848
  cmd = [
849
849
  str(pnnx),
850
- str(f_ts),
850
+ str(f_onnx),
851
851
  *ncnn_args,
852
852
  *pnnx_args,
853
853
  f"fp16={int(self.args.half)}",
@@ -894,7 +894,7 @@ class Exporter:
894
894
  classifier_config = ct.ClassifierConfig(list(self.model.names.values()))
895
895
  model = self.model
896
896
  elif self.model.task == "detect":
897
- model = IOSDetectModel(self.model, self.im) if self.args.nms else self.model
897
+ model = IOSDetectModel(self.model, self.im, mlprogram=not mlmodel) if self.args.nms else self.model
898
898
  else:
899
899
  if self.args.nms:
900
900
  LOGGER.warning(f"{prefix} 'nms=True' is only available for Detect models like 'yolo11n.pt'.")
@@ -938,12 +938,7 @@ class Exporter:
938
938
  config = cto.OptimizationConfig(global_config=op_config)
939
939
  ct_model = cto.palettize_weights(ct_model, config=config)
940
940
  if self.args.nms and self.model.task == "detect":
941
- if mlmodel:
942
- weights_dir = None
943
- else:
944
- ct_model.save(str(f)) # save otherwise weights_dir does not exist
945
- weights_dir = str(f / "Data/com.apple.CoreML/weights")
946
- ct_model = self._pipeline_coreml(ct_model, weights_dir=weights_dir)
941
+ ct_model = self._pipeline_coreml(ct_model, weights_dir=None if mlmodel else ct_model.weights_dir)
947
942
 
948
943
  m = self.metadata # metadata dict
949
944
  ct_model.short_description = m.pop("description")
@@ -1277,7 +1272,8 @@ class Exporter:
1277
1272
  names = self.metadata["names"]
1278
1273
  nx, ny = spec.description.input[0].type.imageType.width, spec.description.input[0].type.imageType.height
1279
1274
  nc = outs[0].type.multiArrayType.shape[-1]
1280
- assert len(names) == nc, f"{len(names)} names found for nc={nc}" # check
1275
+ if len(names) != nc: # Hack fix for MLProgram NMS bug https://github.com/ultralytics/ultralytics/issues/22309
1276
+ names = {**names, **{i: str(i) for i in range(len(names), nc)}}
1281
1277
 
1282
1278
  # Model from spec
1283
1279
  model = ct.models.MLModel(spec, weights_dir=weights_dir)
@@ -1367,18 +1363,20 @@ class Exporter:
1367
1363
  class IOSDetectModel(torch.nn.Module):
1368
1364
  """Wrap an Ultralytics YOLO model for Apple iOS CoreML export."""
1369
1365
 
1370
- def __init__(self, model, im):
1366
+ def __init__(self, model, im, mlprogram=True):
1371
1367
  """
1372
1368
  Initialize the IOSDetectModel class with a YOLO model and example image.
1373
1369
 
1374
1370
  Args:
1375
1371
  model (torch.nn.Module): The YOLO model to wrap.
1376
1372
  im (torch.Tensor): Example input tensor with shape (B, C, H, W).
1373
+ mlprogram (bool): Whether exporting to MLProgram format to fix NMS bug.
1377
1374
  """
1378
1375
  super().__init__()
1379
1376
  _, _, h, w = im.shape # batch, channel, height, width
1380
1377
  self.model = model
1381
1378
  self.nc = len(model.names) # number of classes
1379
+ self.mlprogram = mlprogram
1382
1380
  if w == h:
1383
1381
  self.normalize = 1.0 / w # scalar
1384
1382
  else:
@@ -1390,7 +1388,11 @@ class IOSDetectModel(torch.nn.Module):
1390
1388
  def forward(self, x):
1391
1389
  """Normalize predictions of object detection model with input size-dependent factors."""
1392
1390
  xywh, cls = self.model(x)[0].transpose(0, 1).split((4, self.nc), 1)
1393
- return cls, xywh * self.normalize # confidence (3780, 80), coordinates (3780, 4)
1391
+ if self.mlprogram and self.nc % 80 != 0: # NMS bug https://github.com/ultralytics/ultralytics/issues/22309
1392
+ pad_length = int(((self.nc + 79) // 80) * 80) - self.nc # pad class length to multiple of 80
1393
+ cls = torch.nn.functional.pad(cls, (0, pad_length, 0, 0), "constant", 0)
1394
+
1395
+ return cls, xywh * self.normalize
1394
1396
 
1395
1397
 
1396
1398
  class NMSModel(torch.nn.Module):
@@ -254,7 +254,7 @@ class AutoBackend(nn.Module):
254
254
  session = onnxruntime.InferenceSession(w, providers=providers)
255
255
  else:
256
256
  check_requirements(
257
- ["model-compression-toolkit>=2.4.1", "sony-custom-layers[torch]>=0.3.0", "onnxruntime-extensions"]
257
+ ("model-compression-toolkit>=2.4.1", "sony-custom-layers[torch]>=0.3.0", "onnxruntime-extensions")
258
258
  )
259
259
  w = next(Path(w).glob("*.onnx"))
260
260
  LOGGER.info(f"Loading {w} for ONNX IMX inference...")
@@ -896,6 +896,10 @@ class RTDETRDecoder(nn.Module):
896
896
  """
897
897
 
898
898
  export = False # export mode
899
+ shapes = []
900
+ anchors = torch.empty(0)
901
+ valid_mask = torch.empty(0)
902
+ dynamic = False
899
903
 
900
904
  def __init__(
901
905
  self,
@@ -1116,10 +1120,12 @@ class RTDETRDecoder(nn.Module):
1116
1120
  enc_scores (torch.Tensor): Encoded scores.
1117
1121
  """
1118
1122
  bs = feats.shape[0]
1119
- # Prepare input for decoder
1120
- anchors, valid_mask = self._generate_anchors(shapes, dtype=feats.dtype, device=feats.device)
1121
- features = self.enc_output(valid_mask * feats) # bs, h*w, 256
1123
+ if self.dynamic or self.shapes != shapes:
1124
+ self.anchors, self.valid_mask = self._generate_anchors(shapes, dtype=feats.dtype, device=feats.device)
1125
+ self.shapes = shapes
1122
1126
 
1127
+ # Prepare input for decoder
1128
+ features = self.enc_output(self.valid_mask * feats) # bs, h*w, 256
1123
1129
  enc_outputs_scores = self.enc_score_head(features) # (bs, h*w, nc)
1124
1130
 
1125
1131
  # Query selection
@@ -1131,7 +1137,7 @@ class RTDETRDecoder(nn.Module):
1131
1137
  # (bs, num_queries, 256)
1132
1138
  top_k_features = features[batch_ind, topk_ind].view(bs, self.num_queries, -1)
1133
1139
  # (bs, num_queries, 4)
1134
- top_k_anchors = anchors[:, topk_ind].view(bs, self.num_queries, -1)
1140
+ top_k_anchors = self.anchors[:, topk_ind].view(bs, self.num_queries, -1)
1135
1141
 
1136
1142
  # Dynamic anchors + static content
1137
1143
  refer_bbox = self.enc_bbox_head(top_k_features) + top_k_anchors
@@ -595,7 +595,7 @@ class ProfileModels:
595
595
  mean_time (float): Mean inference time in milliseconds.
596
596
  std_time (float): Standard deviation of inference time in milliseconds.
597
597
  """
598
- check_requirements("onnxruntime")
598
+ check_requirements([("onnxruntime", "onnxruntime-gpu")]) # either package meets requirements
599
599
  import onnxruntime as ort
600
600
 
601
601
  # Session with either 'TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'
@@ -363,8 +363,9 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
363
363
  Check if installed dependencies meet Ultralytics YOLO models requirements and attempt to auto-update if needed.
364
364
 
365
365
  Args:
366
- requirements (Path | str | list[str] | tuple[str]): Path to a requirements.txt file, a single package
367
- requirement as a string, or a list of package requirements as strings.
366
+ requirements (Path | str | list[str|tuple] | tuple[str]): Path to a requirements.txt file, a single package
367
+ requirement as a string, a list of package requirements as strings, or a list containing strings and
368
+ tuples of interchangeable packages.
368
369
  exclude (tuple): Tuple of package names to exclude from checking.
369
370
  install (bool): If True, attempt to auto-update packages that don't meet requirements.
370
371
  cmds (str): Additional commands to pass to the pip install command when auto-updating.
@@ -376,10 +377,13 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
376
377
  >>> check_requirements("path/to/requirements.txt")
377
378
 
378
379
  Check a single package
379
- >>> check_requirements("ultralytics>=8.0.0")
380
+ >>> check_requirements("ultralytics>=8.3.200", cmds="--index-url https://download.pytorch.org/whl/cpu")
380
381
 
381
382
  Check multiple packages
382
- >>> check_requirements(["numpy", "ultralytics>=8.0.0"])
383
+ >>> check_requirements(["numpy", "ultralytics"])
384
+
385
+ Check with interchangeable packages
386
+ >>> check_requirements([("onnxruntime", "onnxruntime-gpu"), "numpy"])
383
387
  """
384
388
  prefix = colorstr("red", "bold", "requirements:")
385
389
  if isinstance(requirements, Path): # requirements.txt file
@@ -391,13 +395,22 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
391
395
 
392
396
  pkgs = []
393
397
  for r in requirements:
394
- r_stripped = r.rpartition("/")[-1].replace(".git", "") # replace git+https://org/repo.git -> 'repo'
395
- match = re.match(r"([a-zA-Z0-9-_]+)([<>!=~]+.*)?", r_stripped)
396
- name, required = match[1], match[2].strip() if match[2] else ""
397
- try:
398
- assert check_version(metadata.version(name), required) # exception if requirements not met
399
- except (AssertionError, metadata.PackageNotFoundError):
400
- pkgs.append(r)
398
+ candidates = r if isinstance(r, (list, tuple)) else [r]
399
+ satisfied = False
400
+
401
+ for candidate in candidates:
402
+ r_stripped = candidate.rpartition("/")[-1].replace(".git", "") # replace git+https://org/repo.git -> 'repo'
403
+ match = re.match(r"([a-zA-Z0-9-_]+)([<>!=~]+.*)?", r_stripped)
404
+ name, required = match[1], match[2].strip() if match[2] else ""
405
+ try:
406
+ if check_version(metadata.version(name), required):
407
+ satisfied = True
408
+ break
409
+ except (AssertionError, metadata.PackageNotFoundError):
410
+ continue
411
+
412
+ if not satisfied:
413
+ pkgs.append(candidates[0])
401
414
 
402
415
  @Retry(times=2, delay=1)
403
416
  def attempt_install(packages, commands, use_uv):
@@ -374,10 +374,10 @@ def safe_download(
374
374
  raise # Re-raise immediately - no point retrying if insufficient disk space
375
375
  except Exception as e:
376
376
  if i == 0 and not is_online():
377
- raise ConnectionError(emojis(f"❌ Download failure for {uri}. Environment is not online.")) from e
377
+ raise ConnectionError(emojis(f"❌ Download failure for {uri}. Environment may be offline.")) from e
378
378
  elif i >= retry:
379
- raise ConnectionError(emojis(f"❌ Download failure for {uri}. Retry limit reached.")) from e
380
- LOGGER.warning(f"Download failure, retrying {i + 1}/{retry} {uri}...")
379
+ raise ConnectionError(emojis(f"❌ Download failure for {uri}. Retry limit reached. {e}")) from e
380
+ LOGGER.warning(f"Download failure, retrying {i + 1}/{retry} {uri}... {e}")
381
381
 
382
382
  if unzip and f.exists() and f.suffix in {"", ".zip", ".tar", ".gz"}:
383
383
  from zipfile import is_zipfile
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.206
3
+ Version: 8.3.208
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>
File without changes
File without changes
File without changes