ultralytics 8.2.84__tar.gz → 8.2.86__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.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

Files changed (238) hide show
  1. {ultralytics-8.2.84/ultralytics.egg-info → ultralytics-8.2.86}/PKG-INFO +3 -2
  2. {ultralytics-8.2.84 → ultralytics-8.2.86}/pyproject.toml +2 -1
  3. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_explorer.py +5 -0
  4. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_python.py +2 -0
  5. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/converter.py +1 -1
  7. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/dataset.py +1 -1
  8. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/split_dota.py +1 -1
  9. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/exporter.py +10 -44
  10. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/predictor.py +1 -1
  11. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/validator.py +3 -2
  12. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/hub/utils.py +8 -9
  13. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/fastsam/predict.py +1 -1
  14. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/blocks.py +1 -1
  15. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/modules/block.py +2 -2
  16. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/modules/head.py +2 -2
  17. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/parking_management.py +1 -1
  18. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/benchmarks.py +3 -3
  19. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/checks.py +11 -0
  20. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/metrics.py +1 -1
  21. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/ops.py +1 -1
  22. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/torch_utils.py +7 -0
  23. {ultralytics-8.2.84 → ultralytics-8.2.86/ultralytics.egg-info}/PKG-INFO +3 -2
  24. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics.egg-info/requires.txt +4 -1
  25. {ultralytics-8.2.84 → ultralytics-8.2.86}/LICENSE +0 -0
  26. {ultralytics-8.2.84 → ultralytics-8.2.86}/README.md +0 -0
  27. {ultralytics-8.2.84 → ultralytics-8.2.86}/setup.cfg +0 -0
  28. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/__init__.py +0 -0
  29. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/conftest.py +0 -0
  30. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_cli.py +0 -0
  31. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_cuda.py +0 -0
  32. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_engine.py +0 -0
  33. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_exports.py +0 -0
  34. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_integrations.py +0 -0
  35. {ultralytics-8.2.84 → ultralytics-8.2.86}/tests/test_solutions.py +0 -0
  36. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/assets/bus.jpg +0 -0
  37. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/assets/zidane.jpg +0 -0
  38. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/__init__.py +0 -0
  39. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  40. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  41. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  42. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  43. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  44. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  45. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  46. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  47. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  48. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  49. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  50. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  51. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  52. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/coco.yaml +0 -0
  53. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  54. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  55. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  56. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  57. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  58. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  59. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  60. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  61. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  62. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  63. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/signature.yaml +0 -0
  64. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  65. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/datasets/xView.yaml +0 -0
  66. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/default.yaml +0 -0
  67. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  68. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  69. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  70. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  71. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  72. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  73. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  74. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  75. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  76. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  77. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  78. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  79. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  80. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  81. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  82. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  83. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  84. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  85. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  86. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  87. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  88. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  89. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  90. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  91. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  92. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  93. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  94. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  95. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  96. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  97. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  98. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  99. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  100. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  101. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  102. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  103. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  104. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  105. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  106. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  107. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  108. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  109. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/__init__.py +0 -0
  110. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/annotator.py +0 -0
  111. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/augment.py +0 -0
  112. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/base.py +0 -0
  113. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/build.py +0 -0
  114. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/explorer/__init__.py +0 -0
  115. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/explorer/explorer.py +0 -0
  116. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/explorer/gui/__init__.py +0 -0
  117. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/explorer/gui/dash.py +0 -0
  118. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/explorer/utils.py +0 -0
  119. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/loaders.py +0 -0
  120. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/data/utils.py +0 -0
  121. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/__init__.py +0 -0
  122. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/model.py +0 -0
  123. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/results.py +0 -0
  124. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/trainer.py +0 -0
  125. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/engine/tuner.py +0 -0
  126. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/hub/__init__.py +0 -0
  127. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/hub/auth.py +0 -0
  128. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/hub/google/__init__.py +0 -0
  129. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/hub/session.py +0 -0
  130. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/__init__.py +0 -0
  131. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/fastsam/__init__.py +0 -0
  132. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/fastsam/model.py +0 -0
  133. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/fastsam/utils.py +0 -0
  134. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/fastsam/val.py +0 -0
  135. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/nas/__init__.py +0 -0
  136. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/nas/model.py +0 -0
  137. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/nas/predict.py +0 -0
  138. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/nas/val.py +0 -0
  139. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/rtdetr/__init__.py +0 -0
  140. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/rtdetr/model.py +0 -0
  141. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/rtdetr/predict.py +0 -0
  142. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/rtdetr/train.py +0 -0
  143. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/rtdetr/val.py +0 -0
  144. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/__init__.py +0 -0
  145. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/amg.py +0 -0
  146. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/build.py +0 -0
  147. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/model.py +0 -0
  148. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/__init__.py +0 -0
  149. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/decoders.py +0 -0
  150. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/encoders.py +0 -0
  151. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  152. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/sam.py +0 -0
  153. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  154. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/transformer.py +0 -0
  155. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/modules/utils.py +0 -0
  156. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/sam/predict.py +0 -0
  157. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/utils/__init__.py +0 -0
  158. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/utils/loss.py +0 -0
  159. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/utils/ops.py +0 -0
  160. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/__init__.py +0 -0
  161. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/classify/__init__.py +0 -0
  162. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/classify/predict.py +0 -0
  163. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/classify/train.py +0 -0
  164. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/classify/val.py +0 -0
  165. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/detect/__init__.py +0 -0
  166. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/detect/predict.py +0 -0
  167. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/detect/train.py +0 -0
  168. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/detect/val.py +0 -0
  169. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/model.py +0 -0
  170. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/obb/__init__.py +0 -0
  171. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/obb/predict.py +0 -0
  172. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/obb/train.py +0 -0
  173. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/obb/val.py +0 -0
  174. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/pose/__init__.py +0 -0
  175. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/pose/predict.py +0 -0
  176. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/pose/train.py +0 -0
  177. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/pose/val.py +0 -0
  178. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/segment/__init__.py +0 -0
  179. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/segment/predict.py +0 -0
  180. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/segment/train.py +0 -0
  181. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/segment/val.py +0 -0
  182. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/world/__init__.py +0 -0
  183. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/world/train.py +0 -0
  184. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/models/yolo/world/train_world.py +0 -0
  185. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/__init__.py +0 -0
  186. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/autobackend.py +0 -0
  187. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/modules/__init__.py +0 -0
  188. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/modules/activation.py +0 -0
  189. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/modules/conv.py +0 -0
  190. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/modules/transformer.py +0 -0
  191. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/modules/utils.py +0 -0
  192. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/nn/tasks.py +0 -0
  193. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/__init__.py +0 -0
  194. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/ai_gym.py +0 -0
  195. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/analytics.py +0 -0
  196. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/distance_calculation.py +0 -0
  197. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/heatmap.py +0 -0
  198. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/object_counter.py +0 -0
  199. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/queue_management.py +0 -0
  200. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/speed_estimation.py +0 -0
  201. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/solutions/streamlit_inference.py +0 -0
  202. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/__init__.py +0 -0
  203. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/basetrack.py +0 -0
  204. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/bot_sort.py +0 -0
  205. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/byte_tracker.py +0 -0
  206. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/track.py +0 -0
  207. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/utils/__init__.py +0 -0
  208. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/utils/gmc.py +0 -0
  209. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  210. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/trackers/utils/matching.py +0 -0
  211. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/__init__.py +0 -0
  212. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/autobatch.py +0 -0
  213. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/__init__.py +0 -0
  214. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/base.py +0 -0
  215. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/clearml.py +0 -0
  216. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/comet.py +0 -0
  217. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/dvc.py +0 -0
  218. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/hub.py +0 -0
  219. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/mlflow.py +0 -0
  220. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/neptune.py +0 -0
  221. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/raytune.py +0 -0
  222. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  223. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/callbacks/wb.py +0 -0
  224. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/dist.py +0 -0
  225. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/downloads.py +0 -0
  226. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/errors.py +0 -0
  227. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/files.py +0 -0
  228. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/instance.py +0 -0
  229. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/loss.py +0 -0
  230. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/patches.py +0 -0
  231. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/plotting.py +0 -0
  232. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/tal.py +0 -0
  233. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/triton.py +0 -0
  234. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics/utils/tuner.py +0 -0
  235. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics.egg-info/SOURCES.txt +0 -0
  236. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics.egg-info/dependency_links.txt +0 -0
  237. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics.egg-info/entry_points.txt +0 -0
  238. {ultralytics-8.2.84 → ultralytics-8.2.86}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.84
3
+ Version: 8.2.86
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -37,6 +37,7 @@ Requires-Dist: pillow>=7.1.2
37
37
  Requires-Dist: pyyaml>=5.3.1
38
38
  Requires-Dist: requests>=2.23.0
39
39
  Requires-Dist: scipy>=1.4.1
40
+ Requires-Dist: torch<2.4.0,>=1.8.0; sys_platform == "win32"
40
41
  Requires-Dist: torch>=1.8.0
41
42
  Requires-Dist: torchvision>=0.9.0
42
43
  Requires-Dist: tqdm>=4.64.0
@@ -55,7 +56,7 @@ Requires-Dist: mkdocs-material>=9.5.9; extra == "dev"
55
56
  Requires-Dist: mkdocstrings[python]; extra == "dev"
56
57
  Requires-Dist: mkdocs-jupyter; extra == "dev"
57
58
  Requires-Dist: mkdocs-redirects; extra == "dev"
58
- Requires-Dist: mkdocs-ultralytics-plugin>=0.1.2; extra == "dev"
59
+ Requires-Dist: mkdocs-ultralytics-plugin>=0.1.6; extra == "dev"
59
60
  Requires-Dist: mkdocs-macros-plugin>=1.0.5; extra == "dev"
60
61
  Provides-Extra: export
61
62
  Requires-Dist: onnx>=1.12.0; extra == "export"
@@ -71,6 +71,7 @@ dependencies = [
71
71
  "pyyaml>=5.3.1",
72
72
  "requests>=2.23.0",
73
73
  "scipy>=1.4.1",
74
+ "torch>=1.8.0,<2.4.0; sys_platform == 'win32'", # Windows CPU errors https://github.com/ultralytics/ultralytics/issues/15049
74
75
  "torch>=1.8.0",
75
76
  "torchvision>=0.9.0",
76
77
  "tqdm>=4.64.0", # progress bars
@@ -93,7 +94,7 @@ dev = [
93
94
  "mkdocstrings[python]",
94
95
  "mkdocs-jupyter", # notebooks
95
96
  "mkdocs-redirects", # 301 redirects
96
- "mkdocs-ultralytics-plugin>=0.1.2", # for meta descriptions and images, dates and authors
97
+ "mkdocs-ultralytics-plugin>=0.1.6", # for meta descriptions and images, dates and authors
97
98
  "mkdocs-macros-plugin>=1.0.5" # duplicating content (i.e. export tables) in multiple places
98
99
  ]
99
100
  export = [
@@ -5,9 +5,11 @@ import pytest
5
5
 
6
6
  from ultralytics import Explorer
7
7
  from ultralytics.utils import ASSETS
8
+ from ultralytics.utils.torch_utils import TORCH_1_13
8
9
 
9
10
 
10
11
  @pytest.mark.slow
12
+ @pytest.mark.skipif(not TORCH_1_13, reason="Explorer requires torch>=1.13")
11
13
  def test_similarity():
12
14
  """Test the correctness and response length of similarity calculations and SQL queries in the Explorer."""
13
15
  exp = Explorer(data="coco8.yaml")
@@ -25,6 +27,7 @@ def test_similarity():
25
27
 
26
28
 
27
29
  @pytest.mark.slow
30
+ @pytest.mark.skipif(not TORCH_1_13, reason="Explorer requires torch>=1.13")
28
31
  def test_det():
29
32
  """Test detection functionalities and verify embedding table includes bounding boxes."""
30
33
  exp = Explorer(data="coco8.yaml", model="yolov8n.pt")
@@ -38,6 +41,7 @@ def test_det():
38
41
 
39
42
 
40
43
  @pytest.mark.slow
44
+ @pytest.mark.skipif(not TORCH_1_13, reason="Explorer requires torch>=1.13")
41
45
  def test_seg():
42
46
  """Test segmentation functionalities and ensure the embedding table includes segmentation masks."""
43
47
  exp = Explorer(data="coco8-seg.yaml", model="yolov8n-seg.pt")
@@ -50,6 +54,7 @@ def test_seg():
50
54
 
51
55
 
52
56
  @pytest.mark.slow
57
+ @pytest.mark.skipif(not TORCH_1_13, reason="Explorer requires torch>=1.13")
53
58
  def test_pose():
54
59
  """Test pose estimation functionality and verify the embedding table includes keypoints."""
55
60
  exp = Explorer(data="coco8-pose.yaml", model="yolov8n-pose.pt")
@@ -252,6 +252,8 @@ def test_labels_and_crops():
252
252
  for r in results:
253
253
  im_name = Path(r.path).stem
254
254
  cls_idxs = r.boxes.cls.int().tolist()
255
+ # Check correct detections
256
+ assert cls_idxs == ([0, 0, 5, 0, 7] if r.path.endswith("bus.jpg") else [0, 0]) # bus.jpg and zidane.jpg classes
255
257
  # Check label path
256
258
  labels = save_path / f"labels/{im_name}.txt"
257
259
  assert labels.exists()
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.84"
3
+ __version__ = "8.2.86"
4
4
 
5
5
  import os
6
6
 
@@ -490,7 +490,7 @@ def convert_dota_to_yolo_obb(dota_root_path: str):
490
490
  normalized_coords = [
491
491
  coords[i] / image_width if i % 2 == 0 else coords[i] / image_height for i in range(8)
492
492
  ]
493
- formatted_coords = ["{:.6g}".format(coord) for coord in normalized_coords]
493
+ formatted_coords = [f"{coord:.6g}" for coord in normalized_coords]
494
494
  g.write(f"{class_idx} {' '.join(formatted_coords)}\n")
495
495
 
496
496
  for phase in ["train", "val"]:
@@ -296,7 +296,7 @@ class GroundingDataset(YOLODataset):
296
296
  """Loads annotations from a JSON file, filters, and normalizes bounding boxes for each image."""
297
297
  labels = []
298
298
  LOGGER.info("Loading annotation file...")
299
- with open(self.json_file, "r") as f:
299
+ with open(self.json_file) as f:
300
300
  annotations = json.load(f)
301
301
  images = {f'{x["id"]:d}': x for x in annotations["images"]}
302
302
  img_to_anns = defaultdict(list)
@@ -193,7 +193,7 @@ def crop_and_save(anno, windows, window_objs, im_dir, lb_dir, allow_background_i
193
193
 
194
194
  with open(Path(lb_dir) / f"{new_name}.txt", "w") as f:
195
195
  for lb in label:
196
- formatted_coords = ["{:.6g}".format(coord) for coord in lb[1:]]
196
+ formatted_coords = [f"{coord:.6g}" for coord in lb[1:]]
197
197
  f.write(f"{int(lb[0])} {' '.join(formatted_coords)}\n")
198
198
 
199
199
 
@@ -138,7 +138,7 @@ def try_export(inner_func):
138
138
  LOGGER.info(f"{prefix} export success ✅ {dt.t:.1f}s, saved as '{f}' ({file_size(f):.1f} MB)")
139
139
  return f, model
140
140
  except Exception as e:
141
- LOGGER.info(f"{prefix} export failure ❌ {dt.t:.1f}s: {e}")
141
+ LOGGER.error(f"{prefix} export failure ❌ {dt.t:.1f}s: {e}")
142
142
  raise e
143
143
 
144
144
  return outer_func
@@ -204,8 +204,8 @@ class Exporter:
204
204
  self.args.half = False
205
205
  assert not self.args.dynamic, "half=True not compatible with dynamic=True, i.e. use only one."
206
206
  self.imgsz = check_imgsz(self.args.imgsz, stride=model.stride, min_dim=2) # check image size
207
- if self.args.int8 and (engine or xml):
208
- self.args.dynamic = True # enforce dynamic to export TensorRT INT8; ensures ONNX is dynamic
207
+ if self.args.int8 and engine:
208
+ self.args.dynamic = True # enforce dynamic to export TensorRT INT8
209
209
  if self.args.optimize:
210
210
  assert not ncnn, "optimize=True not compatible with format='ncnn', i.e. use optimize=False"
211
211
  assert self.device.type == "cpu", "optimize=True not compatible with cuda devices, i.e. use device='cpu'"
@@ -248,6 +248,7 @@ class Exporter:
248
248
  m.dynamic = self.args.dynamic
249
249
  m.export = True
250
250
  m.format = self.args.format
251
+ m.max_det = self.args.max_det
251
252
  elif isinstance(m, C2f) and not is_tf_format:
252
253
  # EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
253
254
  m.forward = m.forward_split
@@ -353,18 +354,20 @@ class Exporter:
353
354
  """Build and return a dataloader suitable for calibration of INT8 models."""
354
355
  LOGGER.info(f"{prefix} collecting INT8 calibration images from 'data={self.args.data}'")
355
356
  data = (check_cls_dataset if self.model.task == "classify" else check_det_dataset)(self.args.data)
357
+ # TensorRT INT8 calibration should use 2x batch size
358
+ batch = self.args.batch * (2 if self.args.format == "engine" else 1)
356
359
  dataset = YOLODataset(
357
360
  data[self.args.split or "val"],
358
361
  data=data,
359
362
  task=self.model.task,
360
363
  imgsz=self.imgsz[0],
361
364
  augment=False,
362
- batch_size=self.args.batch * 2, # NOTE TensorRT INT8 calibration should use 2x batch size
365
+ batch_size=batch,
363
366
  )
364
367
  n = len(dataset)
365
368
  if n < 300:
366
369
  LOGGER.warning(f"{prefix} WARNING ⚠️ >300 images recommended for INT8 calibration, found {n} images.")
367
- return build_dataloader(dataset, batch=self.args.batch * 2, workers=0) # required for batch loading
370
+ return build_dataloader(dataset, batch=batch, workers=0) # required for batch loading
368
371
 
369
372
  @try_export
370
373
  def export_torchscript(self, prefix=colorstr("TorchScript:")):
@@ -420,7 +423,6 @@ class Exporter:
420
423
 
421
424
  # Checks
422
425
  model_onnx = onnx.load(f) # load onnx model
423
- # onnx.checker.check_model(model_onnx) # check onnx model
424
426
 
425
427
  # Simplify
426
428
  if self.args.simplify:
@@ -430,10 +432,6 @@ class Exporter:
430
432
  LOGGER.info(f"{prefix} slimming with onnxslim {onnxslim.__version__}...")
431
433
  model_onnx = onnxslim.slim(model_onnx)
432
434
 
433
- # ONNX Simplifier (deprecated as must be compiled with 'cmake' in aarch64 and Conda CI environments)
434
- # import onnxsim
435
- # model_onnx, check = onnxsim.simplify(model_onnx)
436
- # assert check, "Simplified ONNX model could not be validated"
437
435
  except Exception as e:
438
436
  LOGGER.warning(f"{prefix} simplifier failure: {e}")
439
437
 
@@ -677,7 +675,6 @@ class Exporter:
677
675
  def export_engine(self, prefix=colorstr("TensorRT:")):
678
676
  """YOLOv8 TensorRT export https://developer.nvidia.com/tensorrt."""
679
677
  assert self.im.device.type != "cpu", "export running on CPU but must be on GPU, i.e. use 'device=0'"
680
- # self.args.simplify = True
681
678
  f_onnx, _ = self.export_onnx() # run before TRT import https://github.com/ultralytics/ultralytics/issues/7016
682
679
 
683
680
  try:
@@ -784,7 +781,7 @@ class Exporter:
784
781
  # Load dataset w/ builder (for batching) and calibrate
785
782
  config.int8_calibrator = EngineCalibrator(
786
783
  dataset=self.get_int8_calibration_dataloader(prefix),
787
- batch=2 * self.args.batch,
784
+ batch=2 * self.args.batch, # TensorRT INT8 calibration should use 2x batch size
788
785
  cache=str(self.file.with_suffix(".cache")),
789
786
  )
790
787
 
@@ -867,8 +864,6 @@ class Exporter:
867
864
  f.mkdir()
868
865
  images = [batch["img"].permute(0, 2, 3, 1) for batch in self.get_int8_calibration_dataloader(prefix)]
869
866
  images = torch.cat(images, 0).float()
870
- # mean = images.view(-1, 3).mean(0) # imagenet mean [123.675, 116.28, 103.53]
871
- # std = images.view(-1, 3).std(0) # imagenet std [58.395, 57.12, 57.375]
872
867
  np.save(str(tmp_file), images.numpy().astype(np.float32)) # BHWC
873
868
  np_data = [["images", tmp_file, [[[[0, 0, 0]]]], [[[[255, 255, 255]]]]]]
874
869
  else:
@@ -996,20 +991,7 @@ class Exporter:
996
991
  if " " in f:
997
992
  LOGGER.warning(f"{prefix} WARNING ⚠️ your model may not work correctly with spaces in path '{f}'.")
998
993
 
999
- # f_json = Path(f) / 'model.json' # *.json path
1000
- # with open(f_json, 'w') as j: # sort JSON Identity_* in ascending order
1001
- # subst = re.sub(
1002
- # r'{"outputs": {"Identity.?.?": {"name": "Identity.?.?"}, '
1003
- # r'"Identity.?.?": {"name": "Identity.?.?"}, '
1004
- # r'"Identity.?.?": {"name": "Identity.?.?"}, '
1005
- # r'"Identity.?.?": {"name": "Identity.?.?"}}}',
1006
- # r'{"outputs": {"Identity": {"name": "Identity"}, '
1007
- # r'"Identity_1": {"name": "Identity_1"}, '
1008
- # r'"Identity_2": {"name": "Identity_2"}, '
1009
- # r'"Identity_3": {"name": "Identity_3"}}}',
1010
- # f_json.read_text(),
1011
- # )
1012
- # j.write(subst)
994
+ # Add metadata
1013
995
  yaml_save(Path(f) / "metadata.yaml", self.metadata) # add metadata.yaml
1014
996
  return f, None
1015
997
 
@@ -1102,27 +1084,11 @@ class Exporter:
1102
1084
  names = self.metadata["names"]
1103
1085
  nx, ny = spec.description.input[0].type.imageType.width, spec.description.input[0].type.imageType.height
1104
1086
  _, nc = out0_shape # number of anchors, number of classes
1105
- # _, nc = out0.type.multiArrayType.shape
1106
1087
  assert len(names) == nc, f"{len(names)} names found for nc={nc}" # check
1107
1088
 
1108
1089
  # Define output shapes (missing)
1109
1090
  out0.type.multiArrayType.shape[:] = out0_shape # (3780, 80)
1110
1091
  out1.type.multiArrayType.shape[:] = out1_shape # (3780, 4)
1111
- # spec.neuralNetwork.preprocessing[0].featureName = '0'
1112
-
1113
- # Flexible input shapes
1114
- # from coremltools.models.neural_network import flexible_shape_utils
1115
- # s = [] # shapes
1116
- # s.append(flexible_shape_utils.NeuralNetworkImageSize(320, 192))
1117
- # s.append(flexible_shape_utils.NeuralNetworkImageSize(640, 384)) # (height, width)
1118
- # flexible_shape_utils.add_enumerated_image_sizes(spec, feature_name='image', sizes=s)
1119
- # r = flexible_shape_utils.NeuralNetworkImageSizeRange() # shape ranges
1120
- # r.add_height_range((192, 640))
1121
- # r.add_width_range((192, 640))
1122
- # flexible_shape_utils.update_image_size_range(spec, feature_name='image', size_range=r)
1123
-
1124
- # Print
1125
- # print(spec.description)
1126
1092
 
1127
1093
  # Model from spec
1128
1094
  model = ct.models.MLModel(spec, weights_dir=weights_dir)
@@ -328,7 +328,7 @@ class BasePredictor:
328
328
  frame = int(match[1]) if match else None # 0 if frame undetermined
329
329
 
330
330
  self.txt_path = self.save_dir / "labels" / (p.stem + ("" if self.dataset.mode == "image" else f"_{frame}"))
331
- string += "%gx%g " % im.shape[2:]
331
+ string += "{:g}x{:g} ".format(*im.shape[2:])
332
332
  result = self.results[i]
333
333
  result.save_dir = self.save_dir.__str__() # used in other locations
334
334
  string += f"{result.verbose()}{result.speed['inference']:.1f}ms"
@@ -202,8 +202,9 @@ class BaseValidator:
202
202
  return {k: round(float(v), 5) for k, v in results.items()} # return results as 5 decimal place floats
203
203
  else:
204
204
  LOGGER.info(
205
- "Speed: %.1fms preprocess, %.1fms inference, %.1fms loss, %.1fms postprocess per image"
206
- % tuple(self.speed.values())
205
+ "Speed: {:.1f}ms preprocess, {:.1f}ms inference, {:.1f}ms loss, {:.1f}ms postprocess per image".format(
206
+ *tuple(self.speed.values())
207
+ )
207
208
  )
208
209
  if self.args.save_json and self.jdict:
209
210
  with open(str(self.save_dir / "predictions.json"), "w") as f:
@@ -55,23 +55,22 @@ def request_with_credentials(url: str) -> any:
55
55
 
56
56
  display.display(
57
57
  display.Javascript(
58
- """
59
- window._hub_tmp = new Promise((resolve, reject) => {
58
+ f"""
59
+ window._hub_tmp = new Promise((resolve, reject) => {{
60
60
  const timeout = setTimeout(() => reject("Failed authenticating existing browser session"), 5000)
61
- fetch("%s", {
61
+ fetch("{url}", {{
62
62
  method: 'POST',
63
63
  credentials: 'include'
64
- })
64
+ }})
65
65
  .then((response) => resolve(response.json()))
66
- .then((json) => {
66
+ .then((json) => {{
67
67
  clearTimeout(timeout);
68
- }).catch((err) => {
68
+ }}).catch((err) => {{
69
69
  clearTimeout(timeout);
70
70
  reject(err);
71
- });
72
- });
71
+ }});
72
+ }});
73
73
  """
74
- % url
75
74
  )
76
75
  )
77
76
  return output.eval_js("_hub_tmp")
@@ -100,7 +100,7 @@ class FastSAMPredictor(SegmentationPredictor):
100
100
  texts = [texts]
101
101
  crop_ims, filter_idx = [], []
102
102
  for i, b in enumerate(result.boxes.xyxy.tolist()):
103
- x1, y1, x2, y2 = [int(x) for x in b]
103
+ x1, y1, x2, y2 = (int(x) for x in b)
104
104
  if masks[i].sum() <= 100:
105
105
  filter_idx.append(i)
106
106
  continue
@@ -35,7 +35,7 @@ class DropPath(nn.Module):
35
35
 
36
36
  def __init__(self, drop_prob=0.0, scale_by_keep=True):
37
37
  """Initialize DropPath module for stochastic depth regularization during training."""
38
- super(DropPath, self).__init__()
38
+ super().__init__()
39
39
  self.drop_prob = drop_prob
40
40
  self.scale_by_keep = scale_by_keep
41
41
 
@@ -672,7 +672,7 @@ class CBLinear(nn.Module):
672
672
 
673
673
  def __init__(self, c1, c2s, k=1, s=1, p=None, g=1):
674
674
  """Initializes the CBLinear module, passing inputs unchanged."""
675
- super(CBLinear, self).__init__()
675
+ super().__init__()
676
676
  self.c2s = c2s
677
677
  self.conv = nn.Conv2d(c1, sum(c2s), k, s, autopad(k, p), groups=g, bias=True)
678
678
 
@@ -686,7 +686,7 @@ class CBFuse(nn.Module):
686
686
 
687
687
  def __init__(self, idx):
688
688
  """Initializes CBFuse module with layer index for selective feature fusion."""
689
- super(CBFuse, self).__init__()
689
+ super().__init__()
690
690
  self.idx = idx
691
691
 
692
692
  def forward(self, xs):
@@ -144,12 +144,12 @@ class Detect(nn.Module):
144
144
  (torch.Tensor): Processed predictions with shape (batch_size, min(max_det, num_anchors), 6) and last
145
145
  dimension format [x, y, w, h, max_class_prob, class_index].
146
146
  """
147
- batch_size, anchors, predictions = preds.shape # i.e. shape(16,8400,84)
147
+ batch_size, anchors, _ = preds.shape # i.e. shape(16,8400,84)
148
148
  boxes, scores = preds.split([4, nc], dim=-1)
149
149
  index = scores.amax(dim=-1).topk(min(max_det, anchors))[1].unsqueeze(-1)
150
150
  boxes = boxes.gather(dim=1, index=index.repeat(1, 1, 4))
151
151
  scores = scores.gather(dim=1, index=index.repeat(1, 1, nc))
152
- scores, index = scores.flatten(1).topk(max_det)
152
+ scores, index = scores.flatten(1).topk(min(max_det, anchors))
153
153
  i = torch.arange(batch_size)[..., None] # batch indices
154
154
  return torch.cat([boxes[i, index // nc], scores[..., None], (index % nc)[..., None].float()], dim=-1)
155
155
 
@@ -210,7 +210,7 @@ class ParkingManagement:
210
210
  Args:
211
211
  json_file (str): file that have all parking slot points
212
212
  """
213
- with open(json_file, "r") as f:
213
+ with open(json_file) as f:
214
214
  return json.load(f)
215
215
 
216
216
  def process_data(self, json_data, im0, boxes, clss):
@@ -198,7 +198,7 @@ class RF100Benchmark:
198
198
  os.mkdir("ultralytics-benchmarks")
199
199
  safe_download("https://github.com/ultralytics/assets/releases/download/v0.0.0/datasets_links.txt")
200
200
 
201
- with open(ds_link_txt, "r") as file:
201
+ with open(ds_link_txt) as file:
202
202
  for line in file:
203
203
  try:
204
204
  _, url, workspace, project, version = re.split("/+", line.strip())
@@ -222,7 +222,7 @@ class RF100Benchmark:
222
222
  Args:
223
223
  path (str): YAML file path.
224
224
  """
225
- with open(path, "r") as file:
225
+ with open(path) as file:
226
226
  yaml_data = yaml.safe_load(file)
227
227
  yaml_data["train"] = "train/images"
228
228
  yaml_data["val"] = "valid/images"
@@ -242,7 +242,7 @@ class RF100Benchmark:
242
242
  skip_symbols = ["🚀", "⚠️", "💡", "❌"]
243
243
  with open(yaml_path) as stream:
244
244
  class_names = yaml.safe_load(stream)["names"]
245
- with open(val_log_file, "r", encoding="utf-8") as f:
245
+ with open(val_log_file, encoding="utf-8") as f:
246
246
  lines = f.readlines()
247
247
  eval_lines = []
248
248
  for line in lines:
@@ -29,11 +29,13 @@ from ultralytics.utils import (
29
29
  IS_PIP_PACKAGE,
30
30
  LINUX,
31
31
  LOGGER,
32
+ MACOS,
32
33
  ONLINE,
33
34
  PYTHON_VERSION,
34
35
  ROOT,
35
36
  TORCHVISION_VERSION,
36
37
  USER_CONFIG_DIR,
38
+ WINDOWS,
37
39
  Retry,
38
40
  SimpleNamespace,
39
41
  ThreadingLocked,
@@ -224,6 +226,14 @@ def check_version(
224
226
  if not required: # if required is '' or None
225
227
  return True
226
228
 
229
+ if "sys_platform" in required: # i.e. required='<2.4.0,>=1.8.0; sys_platform == "win32"'
230
+ if (
231
+ (WINDOWS and "win32" not in required)
232
+ or (LINUX and "linux" not in required)
233
+ or (MACOS and "macos" not in required and "darwin" not in required)
234
+ ):
235
+ return True
236
+
227
237
  op = ""
228
238
  version = ""
229
239
  result = True
@@ -422,6 +432,7 @@ def check_torchvision():
422
432
  """
423
433
  # Compatibility table
424
434
  compatibility_table = {
435
+ "2.4": ["0.19"],
425
436
  "2.3": ["0.18"],
426
437
  "2.2": ["0.17"],
427
438
  "2.1": ["0.16"],
@@ -460,7 +460,7 @@ def plot_pr_curve(px, py, ap, save_dir=Path("pr_curve.png"), names={}, on_plot=N
460
460
  else:
461
461
  ax.plot(px, py, linewidth=1, color="grey") # plot(recall, precision)
462
462
 
463
- ax.plot(px, py.mean(1), linewidth=3, color="blue", label="all classes %.3f mAP@0.5" % ap[:, 0].mean())
463
+ ax.plot(px, py.mean(1), linewidth=3, color="blue", label=f"all classes {ap[:, 0].mean():.3f} mAP@0.5")
464
464
  ax.set_xlabel("Recall")
465
465
  ax.set_ylabel("Precision")
466
466
  ax.set_xlim(0, 1)
@@ -218,7 +218,7 @@ def non_max_suppression(
218
218
  classes = torch.tensor(classes, device=prediction.device)
219
219
 
220
220
  if prediction.shape[-1] == 6: # end-to-end model (BNC, i.e. 1,300,6)
221
- output = [pred[pred[:, 4] > conf_thres] for pred in prediction]
221
+ output = [pred[pred[:, 4] > conf_thres][:max_det] for pred in prediction]
222
222
  if classes is not None:
223
223
  output = [pred[(pred[:, 5:6] == classes).any(1)] for pred in output]
224
224
  return output
@@ -1,4 +1,5 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
2
3
  import contextlib
3
4
  import gc
4
5
  import math
@@ -24,6 +25,7 @@ from ultralytics.utils import (
24
25
  NUM_THREADS,
25
26
  PYTHON_VERSION,
26
27
  TORCHVISION_VERSION,
28
+ WINDOWS,
27
29
  __version__,
28
30
  colorstr,
29
31
  )
@@ -42,6 +44,11 @@ TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
42
44
  TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
43
45
  TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
44
46
  TORCHVISION_0_18 = check_version(TORCHVISION_VERSION, "0.18.0")
47
+ if WINDOWS and torch.__version__[:3] == "2.4": # reject all versions of 2.4 on Windows
48
+ LOGGER.warning(
49
+ "WARNING ⚠️ Known issue with torch>=2.4.0 on Windows with CPU, recommend downgrading to torch<=2.3.1 to resolve "
50
+ "https://github.com/ultralytics/ultralytics/issues/15049"
51
+ )
45
52
 
46
53
 
47
54
  @contextmanager
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.84
3
+ Version: 8.2.86
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -37,6 +37,7 @@ Requires-Dist: pillow>=7.1.2
37
37
  Requires-Dist: pyyaml>=5.3.1
38
38
  Requires-Dist: requests>=2.23.0
39
39
  Requires-Dist: scipy>=1.4.1
40
+ Requires-Dist: torch<2.4.0,>=1.8.0; sys_platform == "win32"
40
41
  Requires-Dist: torch>=1.8.0
41
42
  Requires-Dist: torchvision>=0.9.0
42
43
  Requires-Dist: tqdm>=4.64.0
@@ -55,7 +56,7 @@ Requires-Dist: mkdocs-material>=9.5.9; extra == "dev"
55
56
  Requires-Dist: mkdocstrings[python]; extra == "dev"
56
57
  Requires-Dist: mkdocs-jupyter; extra == "dev"
57
58
  Requires-Dist: mkdocs-redirects; extra == "dev"
58
- Requires-Dist: mkdocs-ultralytics-plugin>=0.1.2; extra == "dev"
59
+ Requires-Dist: mkdocs-ultralytics-plugin>=0.1.6; extra == "dev"
59
60
  Requires-Dist: mkdocs-macros-plugin>=1.0.5; extra == "dev"
60
61
  Provides-Extra: export
61
62
  Requires-Dist: onnx>=1.12.0; extra == "export"
@@ -14,6 +14,9 @@ pandas>=1.1.4
14
14
  seaborn>=0.11.0
15
15
  ultralytics-thop>=2.0.0
16
16
 
17
+ [:sys_platform == "win32"]
18
+ torch<2.4.0,>=1.8.0
19
+
17
20
  [dev]
18
21
  ipython
19
22
  pytest
@@ -24,7 +27,7 @@ mkdocs-material>=9.5.9
24
27
  mkdocstrings[python]
25
28
  mkdocs-jupyter
26
29
  mkdocs-redirects
27
- mkdocs-ultralytics-plugin>=0.1.2
30
+ mkdocs-ultralytics-plugin>=0.1.6
28
31
  mkdocs-macros-plugin>=1.0.5
29
32
 
30
33
  [explorer]
File without changes
File without changes
File without changes