ultralytics 8.2.85__tar.gz → 8.2.87__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.85/ultralytics.egg-info → ultralytics-8.2.87}/PKG-INFO +2 -1
  2. {ultralytics-8.2.85 → ultralytics-8.2.87}/pyproject.toml +1 -0
  3. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_python.py +2 -0
  4. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/__init__.py +1 -1
  5. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/converter.py +1 -1
  6. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/dataset.py +1 -1
  7. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/split_dota.py +1 -1
  8. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/exporter.py +9 -45
  9. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/predictor.py +1 -1
  10. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/trainer.py +4 -1
  11. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/validator.py +3 -2
  12. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/hub/utils.py +8 -9
  13. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/fastsam/predict.py +1 -1
  14. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/blocks.py +1 -1
  15. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/modules/block.py +2 -2
  16. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/parking_management.py +1 -1
  17. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/queue_management.py +1 -2
  18. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/benchmarks.py +3 -3
  19. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/checks.py +11 -0
  20. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/metrics.py +1 -1
  21. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/torch_utils.py +8 -0
  22. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/tuner.py +7 -2
  23. {ultralytics-8.2.85 → ultralytics-8.2.87/ultralytics.egg-info}/PKG-INFO +2 -1
  24. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics.egg-info/requires.txt +3 -0
  25. {ultralytics-8.2.85 → ultralytics-8.2.87}/LICENSE +0 -0
  26. {ultralytics-8.2.85 → ultralytics-8.2.87}/README.md +0 -0
  27. {ultralytics-8.2.85 → ultralytics-8.2.87}/setup.cfg +0 -0
  28. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/__init__.py +0 -0
  29. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/conftest.py +0 -0
  30. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_cli.py +0 -0
  31. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_cuda.py +0 -0
  32. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_engine.py +0 -0
  33. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_explorer.py +0 -0
  34. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_exports.py +0 -0
  35. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_integrations.py +0 -0
  36. {ultralytics-8.2.85 → ultralytics-8.2.87}/tests/test_solutions.py +0 -0
  37. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/assets/bus.jpg +0 -0
  38. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/assets/zidane.jpg +0 -0
  39. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/__init__.py +0 -0
  40. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  41. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  42. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  43. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  44. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  45. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  46. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  47. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  48. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  49. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  50. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  51. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  52. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  53. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/coco.yaml +0 -0
  54. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  55. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  56. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  57. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  58. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  59. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  60. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  61. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  62. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  63. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  64. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/signature.yaml +0 -0
  65. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  66. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/datasets/xView.yaml +0 -0
  67. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/default.yaml +0 -0
  68. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  69. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  70. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  71. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  72. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  73. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  74. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  75. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  76. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  77. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  78. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  79. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  80. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  81. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  82. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  83. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  84. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  85. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  86. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  87. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  88. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  89. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  90. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  91. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  92. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  93. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  94. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  95. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  96. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  97. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  98. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  99. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  100. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  101. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  102. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  103. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  104. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  105. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  106. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  107. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  108. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  109. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  110. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/__init__.py +0 -0
  111. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/annotator.py +0 -0
  112. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/augment.py +0 -0
  113. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/base.py +0 -0
  114. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/build.py +0 -0
  115. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/explorer/__init__.py +0 -0
  116. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/explorer/explorer.py +0 -0
  117. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/explorer/gui/__init__.py +0 -0
  118. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/explorer/gui/dash.py +0 -0
  119. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/explorer/utils.py +0 -0
  120. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/loaders.py +0 -0
  121. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/data/utils.py +0 -0
  122. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/__init__.py +0 -0
  123. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/model.py +0 -0
  124. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/results.py +0 -0
  125. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/engine/tuner.py +0 -0
  126. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/hub/__init__.py +0 -0
  127. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/hub/auth.py +0 -0
  128. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/hub/google/__init__.py +0 -0
  129. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/hub/session.py +0 -0
  130. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/__init__.py +0 -0
  131. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/fastsam/__init__.py +0 -0
  132. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/fastsam/model.py +0 -0
  133. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/fastsam/utils.py +0 -0
  134. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/fastsam/val.py +0 -0
  135. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/nas/__init__.py +0 -0
  136. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/nas/model.py +0 -0
  137. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/nas/predict.py +0 -0
  138. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/nas/val.py +0 -0
  139. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/rtdetr/__init__.py +0 -0
  140. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/rtdetr/model.py +0 -0
  141. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/rtdetr/predict.py +0 -0
  142. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/rtdetr/train.py +0 -0
  143. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/rtdetr/val.py +0 -0
  144. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/__init__.py +0 -0
  145. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/amg.py +0 -0
  146. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/build.py +0 -0
  147. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/model.py +0 -0
  148. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/__init__.py +0 -0
  149. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/decoders.py +0 -0
  150. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/encoders.py +0 -0
  151. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  152. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/sam.py +0 -0
  153. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  154. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/transformer.py +0 -0
  155. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/modules/utils.py +0 -0
  156. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/sam/predict.py +0 -0
  157. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/utils/__init__.py +0 -0
  158. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/utils/loss.py +0 -0
  159. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/utils/ops.py +0 -0
  160. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/__init__.py +0 -0
  161. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/classify/__init__.py +0 -0
  162. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/classify/predict.py +0 -0
  163. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/classify/train.py +0 -0
  164. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/classify/val.py +0 -0
  165. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/detect/__init__.py +0 -0
  166. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/detect/predict.py +0 -0
  167. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/detect/train.py +0 -0
  168. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/detect/val.py +0 -0
  169. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/model.py +0 -0
  170. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/obb/__init__.py +0 -0
  171. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/obb/predict.py +0 -0
  172. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/obb/train.py +0 -0
  173. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/obb/val.py +0 -0
  174. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/pose/__init__.py +0 -0
  175. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/pose/predict.py +0 -0
  176. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/pose/train.py +0 -0
  177. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/pose/val.py +0 -0
  178. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/segment/__init__.py +0 -0
  179. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/segment/predict.py +0 -0
  180. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/segment/train.py +0 -0
  181. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/segment/val.py +0 -0
  182. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/world/__init__.py +0 -0
  183. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/world/train.py +0 -0
  184. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/models/yolo/world/train_world.py +0 -0
  185. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/__init__.py +0 -0
  186. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/autobackend.py +0 -0
  187. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/modules/__init__.py +0 -0
  188. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/modules/activation.py +0 -0
  189. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/modules/conv.py +0 -0
  190. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/modules/head.py +0 -0
  191. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/modules/transformer.py +0 -0
  192. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/modules/utils.py +0 -0
  193. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/nn/tasks.py +0 -0
  194. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/__init__.py +0 -0
  195. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/ai_gym.py +0 -0
  196. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/analytics.py +0 -0
  197. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/distance_calculation.py +0 -0
  198. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/heatmap.py +0 -0
  199. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/object_counter.py +0 -0
  200. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/speed_estimation.py +0 -0
  201. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/solutions/streamlit_inference.py +0 -0
  202. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/__init__.py +0 -0
  203. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/basetrack.py +0 -0
  204. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/bot_sort.py +0 -0
  205. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/byte_tracker.py +0 -0
  206. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/track.py +0 -0
  207. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/utils/__init__.py +0 -0
  208. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/utils/gmc.py +0 -0
  209. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  210. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/trackers/utils/matching.py +0 -0
  211. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/__init__.py +0 -0
  212. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/autobatch.py +0 -0
  213. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/__init__.py +0 -0
  214. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/base.py +0 -0
  215. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/clearml.py +0 -0
  216. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/comet.py +0 -0
  217. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/dvc.py +0 -0
  218. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/hub.py +0 -0
  219. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/mlflow.py +0 -0
  220. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/neptune.py +0 -0
  221. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/raytune.py +0 -0
  222. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  223. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/callbacks/wb.py +0 -0
  224. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/dist.py +0 -0
  225. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/downloads.py +0 -0
  226. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/errors.py +0 -0
  227. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/files.py +0 -0
  228. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/instance.py +0 -0
  229. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/loss.py +0 -0
  230. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/ops.py +0 -0
  231. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/patches.py +0 -0
  232. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/plotting.py +0 -0
  233. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/tal.py +0 -0
  234. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics/utils/triton.py +0 -0
  235. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics.egg-info/SOURCES.txt +0 -0
  236. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics.egg-info/dependency_links.txt +0 -0
  237. {ultralytics-8.2.85 → ultralytics-8.2.87}/ultralytics.egg-info/entry_points.txt +0 -0
  238. {ultralytics-8.2.85 → ultralytics-8.2.87}/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.85
3
+ Version: 8.2.87
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
@@ -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
@@ -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.85"
3
+ __version__ = "8.2.87"
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,9 +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 not self.args.dynamic and (engine or xml):
208
- self.args.dynamic = True # enforce dynamic to export TensorRT INT8; ensures ONNX is dynamic
209
- LOGGER.warning("WARNING ⚠️ INT8 export requires dynamic image sizes, setting dynamic=True.")
207
+ if self.args.int8 and engine:
208
+ self.args.dynamic = True # enforce dynamic to export TensorRT INT8
210
209
  if self.args.optimize:
211
210
  assert not ncnn, "optimize=True not compatible with format='ncnn', i.e. use optimize=False"
212
211
  assert self.device.type == "cpu", "optimize=True not compatible with cuda devices, i.e. use device='cpu'"
@@ -355,18 +354,20 @@ class Exporter:
355
354
  """Build and return a dataloader suitable for calibration of INT8 models."""
356
355
  LOGGER.info(f"{prefix} collecting INT8 calibration images from 'data={self.args.data}'")
357
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)
358
359
  dataset = YOLODataset(
359
360
  data[self.args.split or "val"],
360
361
  data=data,
361
362
  task=self.model.task,
362
363
  imgsz=self.imgsz[0],
363
364
  augment=False,
364
- batch_size=self.args.batch * 2, # NOTE TensorRT INT8 calibration should use 2x batch size
365
+ batch_size=batch,
365
366
  )
366
367
  n = len(dataset)
367
368
  if n < 300:
368
369
  LOGGER.warning(f"{prefix} WARNING ⚠️ >300 images recommended for INT8 calibration, found {n} images.")
369
- 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
370
371
 
371
372
  @try_export
372
373
  def export_torchscript(self, prefix=colorstr("TorchScript:")):
@@ -422,7 +423,6 @@ class Exporter:
422
423
 
423
424
  # Checks
424
425
  model_onnx = onnx.load(f) # load onnx model
425
- # onnx.checker.check_model(model_onnx) # check onnx model
426
426
 
427
427
  # Simplify
428
428
  if self.args.simplify:
@@ -432,10 +432,6 @@ class Exporter:
432
432
  LOGGER.info(f"{prefix} slimming with onnxslim {onnxslim.__version__}...")
433
433
  model_onnx = onnxslim.slim(model_onnx)
434
434
 
435
- # ONNX Simplifier (deprecated as must be compiled with 'cmake' in aarch64 and Conda CI environments)
436
- # import onnxsim
437
- # model_onnx, check = onnxsim.simplify(model_onnx)
438
- # assert check, "Simplified ONNX model could not be validated"
439
435
  except Exception as e:
440
436
  LOGGER.warning(f"{prefix} simplifier failure: {e}")
441
437
 
@@ -679,7 +675,6 @@ class Exporter:
679
675
  def export_engine(self, prefix=colorstr("TensorRT:")):
680
676
  """YOLOv8 TensorRT export https://developer.nvidia.com/tensorrt."""
681
677
  assert self.im.device.type != "cpu", "export running on CPU but must be on GPU, i.e. use 'device=0'"
682
- # self.args.simplify = True
683
678
  f_onnx, _ = self.export_onnx() # run before TRT import https://github.com/ultralytics/ultralytics/issues/7016
684
679
 
685
680
  try:
@@ -786,7 +781,7 @@ class Exporter:
786
781
  # Load dataset w/ builder (for batching) and calibrate
787
782
  config.int8_calibrator = EngineCalibrator(
788
783
  dataset=self.get_int8_calibration_dataloader(prefix),
789
- batch=2 * self.args.batch,
784
+ batch=2 * self.args.batch, # TensorRT INT8 calibration should use 2x batch size
790
785
  cache=str(self.file.with_suffix(".cache")),
791
786
  )
792
787
 
@@ -869,8 +864,6 @@ class Exporter:
869
864
  f.mkdir()
870
865
  images = [batch["img"].permute(0, 2, 3, 1) for batch in self.get_int8_calibration_dataloader(prefix)]
871
866
  images = torch.cat(images, 0).float()
872
- # mean = images.view(-1, 3).mean(0) # imagenet mean [123.675, 116.28, 103.53]
873
- # std = images.view(-1, 3).std(0) # imagenet std [58.395, 57.12, 57.375]
874
867
  np.save(str(tmp_file), images.numpy().astype(np.float32)) # BHWC
875
868
  np_data = [["images", tmp_file, [[[[0, 0, 0]]]], [[[[255, 255, 255]]]]]]
876
869
  else:
@@ -998,20 +991,7 @@ class Exporter:
998
991
  if " " in f:
999
992
  LOGGER.warning(f"{prefix} WARNING ⚠️ your model may not work correctly with spaces in path '{f}'.")
1000
993
 
1001
- # f_json = Path(f) / 'model.json' # *.json path
1002
- # with open(f_json, 'w') as j: # sort JSON Identity_* in ascending order
1003
- # subst = re.sub(
1004
- # r'{"outputs": {"Identity.?.?": {"name": "Identity.?.?"}, '
1005
- # r'"Identity.?.?": {"name": "Identity.?.?"}, '
1006
- # r'"Identity.?.?": {"name": "Identity.?.?"}, '
1007
- # r'"Identity.?.?": {"name": "Identity.?.?"}}}',
1008
- # r'{"outputs": {"Identity": {"name": "Identity"}, '
1009
- # r'"Identity_1": {"name": "Identity_1"}, '
1010
- # r'"Identity_2": {"name": "Identity_2"}, '
1011
- # r'"Identity_3": {"name": "Identity_3"}}}',
1012
- # f_json.read_text(),
1013
- # )
1014
- # j.write(subst)
994
+ # Add metadata
1015
995
  yaml_save(Path(f) / "metadata.yaml", self.metadata) # add metadata.yaml
1016
996
  return f, None
1017
997
 
@@ -1104,27 +1084,11 @@ class Exporter:
1104
1084
  names = self.metadata["names"]
1105
1085
  nx, ny = spec.description.input[0].type.imageType.width, spec.description.input[0].type.imageType.height
1106
1086
  _, nc = out0_shape # number of anchors, number of classes
1107
- # _, nc = out0.type.multiArrayType.shape
1108
1087
  assert len(names) == nc, f"{len(names)} names found for nc={nc}" # check
1109
1088
 
1110
1089
  # Define output shapes (missing)
1111
1090
  out0.type.multiArrayType.shape[:] = out0_shape # (3780, 80)
1112
1091
  out1.type.multiArrayType.shape[:] = out1_shape # (3780, 4)
1113
- # spec.neuralNetwork.preprocessing[0].featureName = '0'
1114
-
1115
- # Flexible input shapes
1116
- # from coremltools.models.neural_network import flexible_shape_utils
1117
- # s = [] # shapes
1118
- # s.append(flexible_shape_utils.NeuralNetworkImageSize(320, 192))
1119
- # s.append(flexible_shape_utils.NeuralNetworkImageSize(640, 384)) # (height, width)
1120
- # flexible_shape_utils.add_enumerated_image_sizes(spec, feature_name='image', sizes=s)
1121
- # r = flexible_shape_utils.NeuralNetworkImageSizeRange() # shape ranges
1122
- # r.add_height_range((192, 640))
1123
- # r.add_width_range((192, 640))
1124
- # flexible_shape_utils.update_image_size_range(spec, feature_name='image', size_range=r)
1125
-
1126
- # Print
1127
- # print(spec.description)
1128
1092
 
1129
1093
  # Model from spec
1130
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"
@@ -42,6 +42,7 @@ from ultralytics.utils.checks import check_amp, check_file, check_imgsz, check_m
42
42
  from ultralytics.utils.dist import ddp_cleanup, generate_ddp_command
43
43
  from ultralytics.utils.files import get_latest_run
44
44
  from ultralytics.utils.torch_utils import (
45
+ TORCH_2_4,
45
46
  EarlyStopping,
46
47
  ModelEMA,
47
48
  autocast,
@@ -265,7 +266,9 @@ class BaseTrainer:
265
266
  if RANK > -1 and world_size > 1: # DDP
266
267
  dist.broadcast(self.amp, src=0) # broadcast the tensor from rank 0 to all other ranks (returns None)
267
268
  self.amp = bool(self.amp) # as boolean
268
- self.scaler = torch.cuda.amp.GradScaler(enabled=self.amp)
269
+ self.scaler = (
270
+ torch.amp.GradScaler("cuda", enabled=self.amp) if TORCH_2_4 else torch.cuda.amp.GradScaler(enabled=self.amp)
271
+ )
269
272
  if world_size > 1:
270
273
  self.model = nn.parallel.DistributedDataParallel(self.model, device_ids=[RANK], find_unused_parameters=True)
271
274
 
@@ -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):
@@ -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):
@@ -89,7 +89,7 @@ class QueueManager:
89
89
  """Extracts and processes tracks for queue management in a video stream."""
90
90
  # Initialize annotator and draw the queue region
91
91
  self.annotator = Annotator(self.im0, self.tf, self.names)
92
-
92
+ self.counts = 0 # Reset counts every frame
93
93
  if tracks[0].boxes.id is not None:
94
94
  boxes = tracks[0].boxes.xyxy.cpu()
95
95
  clss = tracks[0].boxes.cls.cpu().tolist()
@@ -132,7 +132,6 @@ class QueueManager:
132
132
  txt_color=self.count_txt_color,
133
133
  )
134
134
 
135
- self.counts = 0 # Reset counts after displaying
136
135
  self.display_frames()
137
136
 
138
137
  def display_frames(self):
@@ -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)
@@ -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
  )
@@ -38,10 +40,16 @@ except ImportError:
38
40
  TORCH_1_9 = check_version(torch.__version__, "1.9.0")
39
41
  TORCH_1_13 = check_version(torch.__version__, "1.13.0")
40
42
  TORCH_2_0 = check_version(torch.__version__, "2.0.0")
43
+ TORCH_2_4 = check_version(torch.__version__, "2.4.0")
41
44
  TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
42
45
  TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
43
46
  TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
44
47
  TORCHVISION_0_18 = check_version(TORCHVISION_VERSION, "0.18.0")
48
+ if WINDOWS and torch.__version__[:3] == "2.4": # reject all versions of 2.4 on Windows
49
+ LOGGER.warning(
50
+ "WARNING ⚠️ Known issue with torch>=2.4.0 on Windows with CPU, recommend downgrading to torch<=2.3.1 to resolve "
51
+ "https://github.com/ultralytics/ultralytics/issues/15049"
52
+ )
45
53
 
46
54
 
47
55
  @contextmanager
@@ -143,5 +143,10 @@ def run_ray_tune(
143
143
  # Run the hyperparameter search
144
144
  tuner.fit()
145
145
 
146
- # Return the results of the hyperparameter search
147
- return tuner.get_results()
146
+ # Get the results of the hyperparameter search
147
+ results = tuner.get_results()
148
+
149
+ # Shut down Ray to clean up workers
150
+ ray.shutdown()
151
+
152
+ return results
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.85
3
+ Version: 8.2.87
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
@@ -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
File without changes
File without changes
File without changes