ultralytics 8.2.92__tar.gz → 8.2.94__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 (239) hide show
  1. {ultralytics-8.2.92/ultralytics.egg-info → ultralytics-8.2.94}/PKG-INFO +10 -10
  2. {ultralytics-8.2.92 → ultralytics-8.2.94}/README.md +7 -7
  3. {ultralytics-8.2.92 → ultralytics-8.2.94}/pyproject.toml +2 -2
  4. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_cli.py +1 -1
  5. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/exporter.py +1 -1
  7. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/trainer.py +28 -14
  8. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/val.py +1 -1
  9. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/predict.py +7 -5
  10. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/val.py +1 -1
  11. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/val.py +1 -1
  12. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/val.py +1 -1
  13. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/tasks.py +51 -4
  14. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/queue_management.py +14 -52
  15. ultralytics-8.2.94/ultralytics/solutions/speed_estimation.py +116 -0
  16. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/plotting.py +55 -1
  17. {ultralytics-8.2.92 → ultralytics-8.2.94/ultralytics.egg-info}/PKG-INFO +10 -10
  18. ultralytics-8.2.92/ultralytics/solutions/speed_estimation.py +0 -180
  19. {ultralytics-8.2.92 → ultralytics-8.2.94}/LICENSE +0 -0
  20. {ultralytics-8.2.92 → ultralytics-8.2.94}/setup.cfg +0 -0
  21. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/__init__.py +0 -0
  22. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/conftest.py +0 -0
  23. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_cuda.py +0 -0
  24. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_engine.py +0 -0
  25. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_explorer.py +0 -0
  26. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_exports.py +0 -0
  27. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_integrations.py +0 -0
  28. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_python.py +0 -0
  29. {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_solutions.py +0 -0
  30. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/assets/bus.jpg +0 -0
  31. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/assets/zidane.jpg +0 -0
  32. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/__init__.py +0 -0
  33. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  34. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  35. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  36. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  37. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  38. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  39. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  40. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  41. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  42. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  43. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  44. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  45. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  46. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco.yaml +0 -0
  47. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  48. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  49. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  50. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  51. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  52. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  53. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  54. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  55. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  56. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  57. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/signature.yaml +0 -0
  58. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  59. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/xView.yaml +0 -0
  60. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/default.yaml +0 -0
  61. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  62. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  63. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  64. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  65. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  66. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  67. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  68. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  69. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  70. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  71. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  72. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  73. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  74. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  75. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  76. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  77. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  78. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  79. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  80. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  81. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  82. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  83. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  84. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  85. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  86. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  87. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  88. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  89. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  90. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  91. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  92. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  93. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  94. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  95. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  96. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  97. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  98. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  99. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  100. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  101. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  102. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  103. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/__init__.py +0 -0
  104. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/annotator.py +0 -0
  105. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/augment.py +0 -0
  106. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/base.py +0 -0
  107. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/build.py +0 -0
  108. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/converter.py +0 -0
  109. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/dataset.py +0 -0
  110. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/__init__.py +0 -0
  111. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/explorer.py +0 -0
  112. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/gui/__init__.py +0 -0
  113. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/gui/dash.py +0 -0
  114. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/utils.py +0 -0
  115. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/loaders.py +0 -0
  116. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/split_dota.py +0 -0
  117. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/utils.py +0 -0
  118. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/__init__.py +0 -0
  119. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/model.py +0 -0
  120. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/predictor.py +0 -0
  121. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/results.py +0 -0
  122. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/tuner.py +0 -0
  123. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/validator.py +0 -0
  124. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/__init__.py +0 -0
  125. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/auth.py +0 -0
  126. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/google/__init__.py +0 -0
  127. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/session.py +0 -0
  128. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/utils.py +0 -0
  129. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/__init__.py +0 -0
  130. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/__init__.py +0 -0
  131. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/model.py +0 -0
  132. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/predict.py +0 -0
  133. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/utils.py +0 -0
  134. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/val.py +0 -0
  135. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/__init__.py +0 -0
  136. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/model.py +0 -0
  137. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/predict.py +0 -0
  138. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/__init__.py +0 -0
  139. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/model.py +0 -0
  140. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/predict.py +0 -0
  141. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/train.py +0 -0
  142. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/val.py +0 -0
  143. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/__init__.py +0 -0
  144. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/amg.py +0 -0
  145. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/build.py +0 -0
  146. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/model.py +0 -0
  147. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/__init__.py +0 -0
  148. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/blocks.py +0 -0
  149. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/decoders.py +0 -0
  150. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/encoders.py +0 -0
  151. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  152. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/sam.py +0 -0
  153. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  154. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/transformer.py +0 -0
  155. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/utils.py +0 -0
  156. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/utils/__init__.py +0 -0
  157. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/utils/loss.py +0 -0
  158. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/utils/ops.py +0 -0
  159. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/__init__.py +0 -0
  160. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/__init__.py +0 -0
  161. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/predict.py +0 -0
  162. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/train.py +0 -0
  163. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/val.py +0 -0
  164. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/__init__.py +0 -0
  165. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/predict.py +0 -0
  166. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/train.py +0 -0
  167. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/val.py +0 -0
  168. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/model.py +0 -0
  169. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/__init__.py +0 -0
  170. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/predict.py +0 -0
  171. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/train.py +0 -0
  172. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/__init__.py +0 -0
  173. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/predict.py +0 -0
  174. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/train.py +0 -0
  175. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/__init__.py +0 -0
  176. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/predict.py +0 -0
  177. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/train.py +0 -0
  178. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/world/__init__.py +0 -0
  179. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/world/train.py +0 -0
  180. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/world/train_world.py +0 -0
  181. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/__init__.py +0 -0
  182. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/autobackend.py +0 -0
  183. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/__init__.py +0 -0
  184. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/activation.py +0 -0
  185. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/block.py +0 -0
  186. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/conv.py +0 -0
  187. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/head.py +0 -0
  188. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/transformer.py +0 -0
  189. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/utils.py +0 -0
  190. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/__init__.py +0 -0
  191. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/ai_gym.py +0 -0
  192. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/analytics.py +0 -0
  193. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/distance_calculation.py +0 -0
  194. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/heatmap.py +0 -0
  195. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/object_counter.py +0 -0
  196. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/parking_management.py +0 -0
  197. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/streamlit_inference.py +0 -0
  198. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/__init__.py +0 -0
  199. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/basetrack.py +0 -0
  200. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/bot_sort.py +0 -0
  201. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/byte_tracker.py +0 -0
  202. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/track.py +0 -0
  203. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/__init__.py +0 -0
  204. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/gmc.py +0 -0
  205. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  206. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/matching.py +0 -0
  207. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/__init__.py +0 -0
  208. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/autobatch.py +0 -0
  209. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/benchmarks.py +0 -0
  210. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/__init__.py +0 -0
  211. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/base.py +0 -0
  212. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/clearml.py +0 -0
  213. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/comet.py +0 -0
  214. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/dvc.py +0 -0
  215. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/hub.py +0 -0
  216. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/mlflow.py +0 -0
  217. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/neptune.py +0 -0
  218. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/raytune.py +0 -0
  219. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  220. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/wb.py +0 -0
  221. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/checks.py +0 -0
  222. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/dist.py +0 -0
  223. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/downloads.py +0 -0
  224. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/errors.py +0 -0
  225. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/files.py +0 -0
  226. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/instance.py +0 -0
  227. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/loss.py +0 -0
  228. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/metrics.py +0 -0
  229. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/ops.py +0 -0
  230. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/patches.py +0 -0
  231. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/tal.py +0 -0
  232. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/torch_utils.py +0 -0
  233. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/triton.py +0 -0
  234. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/tuner.py +0 -0
  235. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/SOURCES.txt +0 -0
  236. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/dependency_links.txt +0 -0
  237. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/entry_points.txt +0 -0
  238. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/requires.txt +0 -0
  239. {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.92
4
- Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
3
+ Version: 8.2.94
4
+ Summary: Ultralytics YOLO 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
7
7
  License: AGPL-3.0
8
8
  Project-URL: Bug Reports, https://github.com/ultralytics/ultralytics/issues
9
9
  Project-URL: Funding, https://ultralytics.com
10
10
  Project-URL: Source, https://github.com/ultralytics/ultralytics/
11
- Keywords: machine-learning,deep-learning,computer-vision,ML,DL,AI,YOLO,YOLOv3,YOLOv5,YOLOv8,HUB,Ultralytics
11
+ Keywords: machine-learning,deep-learning,computer-vision,ML,DL,AI,YOLO,YOLOv3,YOLOv5,YOLOv8,YOLOv9,YOLOv10,HUB,Ultralytics
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Intended Audience :: Developers
14
14
  Classifier: Intended Audience :: Education
@@ -132,7 +132,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
132
132
 
133
133
  ## <div align="center">Documentation</div>
134
134
 
135
- See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com) for full documentation on training, validation, prediction and deployment.
135
+ See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com/) for full documentation on training, validation, prediction and deployment.
136
136
 
137
137
  <details open>
138
138
  <summary>Install</summary>
@@ -145,7 +145,7 @@ Pip install the ultralytics package including all [requirements](https://github.
145
145
  pip install ultralytics
146
146
  ```
147
147
 
148
- For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart).
148
+ For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/).
149
149
 
150
150
  [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
151
151
 
@@ -162,7 +162,7 @@ YOLOv8 may be used directly in the Command Line Interface (CLI) with a `yolo` co
162
162
  yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
163
163
  ```
164
164
 
165
- `yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli) for examples.
165
+ `yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli/) for examples.
166
166
 
167
167
  ### Python
168
168
 
@@ -182,7 +182,7 @@ results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
182
182
  path = model.export(format="onnx") # export the model to ONNX format
183
183
  ```
184
184
 
185
- See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more examples.
185
+ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python/) for more examples.
186
186
 
187
187
  </details>
188
188
 
@@ -201,7 +201,7 @@ Ultralytics provides interactive notebooks for YOLOv8, covering training, valida
201
201
 
202
202
  ## <div align="center">Models</div>
203
203
 
204
- YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect), [Segment](https://docs.ultralytics.com/tasks/segment) and [Pose](https://docs.ultralytics.com/tasks/pose) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet) dataset. [Track](https://docs.ultralytics.com/modes/track) mode is available for all Detect, Segment and Pose models.
204
+ YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect/), [Segment](https://docs.ultralytics.com/tasks/segment/) and [Pose](https://docs.ultralytics.com/tasks/pose/) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco/) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify/) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/) dataset. [Track](https://docs.ultralytics.com/modes/track/) mode is available for all Detect, Segment and Pose models.
205
205
 
206
206
  <img width="1024" src="https://raw.githubusercontent.com/ultralytics/assets/main/im/banner-tasks.png" alt="Ultralytics YOLO supported tasks">
207
207
 
@@ -312,7 +312,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
312
312
 
313
313
  ## <div align="center">Integrations</div>
314
314
 
315
- Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino), can optimize your AI workflow.
315
+ Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI workflow.
316
316
 
317
317
  <br>
318
318
  <a href="https://ultralytics.com/hub" target="_blank">
@@ -347,7 +347,7 @@ Experience seamless AI with [Ultralytics HUB](https://www.ultralytics.com/hub)
347
347
 
348
348
  ## <div align="center">Contribute</div>
349
349
 
350
- We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
350
+ We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
351
351
 
352
352
  <!-- SVG image from https://opencollective.com/ultralytics/contributors.svg?width=990 -->
353
353
 
@@ -47,7 +47,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
47
47
 
48
48
  ## <div align="center">Documentation</div>
49
49
 
50
- See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com) for full documentation on training, validation, prediction and deployment.
50
+ See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com/) for full documentation on training, validation, prediction and deployment.
51
51
 
52
52
  <details open>
53
53
  <summary>Install</summary>
@@ -60,7 +60,7 @@ Pip install the ultralytics package including all [requirements](https://github.
60
60
  pip install ultralytics
61
61
  ```
62
62
 
63
- For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart).
63
+ For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/).
64
64
 
65
65
  [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
66
66
 
@@ -77,7 +77,7 @@ YOLOv8 may be used directly in the Command Line Interface (CLI) with a `yolo` co
77
77
  yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
78
78
  ```
79
79
 
80
- `yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli) for examples.
80
+ `yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli/) for examples.
81
81
 
82
82
  ### Python
83
83
 
@@ -97,7 +97,7 @@ results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
97
97
  path = model.export(format="onnx") # export the model to ONNX format
98
98
  ```
99
99
 
100
- See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more examples.
100
+ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python/) for more examples.
101
101
 
102
102
  </details>
103
103
 
@@ -116,7 +116,7 @@ Ultralytics provides interactive notebooks for YOLOv8, covering training, valida
116
116
 
117
117
  ## <div align="center">Models</div>
118
118
 
119
- YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect), [Segment](https://docs.ultralytics.com/tasks/segment) and [Pose](https://docs.ultralytics.com/tasks/pose) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet) dataset. [Track](https://docs.ultralytics.com/modes/track) mode is available for all Detect, Segment and Pose models.
119
+ YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect/), [Segment](https://docs.ultralytics.com/tasks/segment/) and [Pose](https://docs.ultralytics.com/tasks/pose/) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco/) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify/) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/) dataset. [Track](https://docs.ultralytics.com/modes/track/) mode is available for all Detect, Segment and Pose models.
120
120
 
121
121
  <img width="1024" src="https://raw.githubusercontent.com/ultralytics/assets/main/im/banner-tasks.png" alt="Ultralytics YOLO supported tasks">
122
122
 
@@ -227,7 +227,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
227
227
 
228
228
  ## <div align="center">Integrations</div>
229
229
 
230
- Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino), can optimize your AI workflow.
230
+ Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI workflow.
231
231
 
232
232
  <br>
233
233
  <a href="https://ultralytics.com/hub" target="_blank">
@@ -262,7 +262,7 @@ Experience seamless AI with [Ultralytics HUB](https://www.ultralytics.com/hub)
262
262
 
263
263
  ## <div align="center">Contribute</div>
264
264
 
265
- We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
265
+ We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
266
266
 
267
267
  <!-- SVG image from https://opencollective.com/ultralytics/contributors.svg?width=990 -->
268
268
 
@@ -26,11 +26,11 @@ build-backend = "setuptools.build_meta"
26
26
  [project]
27
27
  name = "ultralytics"
28
28
  dynamic = ["version"]
29
- description = "Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification."
29
+ description = "Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification."
30
30
  readme = "README.md"
31
31
  requires-python = ">=3.8"
32
32
  license = { "text" = "AGPL-3.0" }
33
- keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "HUB", "Ultralytics"]
33
+ keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "YOLOv9", "YOLOv10", "HUB", "Ultralytics"]
34
34
  authors = [
35
35
  { name = "Glenn Jocher" },
36
36
  { name = "Ayush Chaurasia" },
@@ -101,7 +101,7 @@ def test_mobilesam():
101
101
  model.predict(source, points=[900, 370], labels=[1])
102
102
 
103
103
  # Predict a segment based on a box prompt
104
- model.predict(source, bboxes=[439, 437, 524, 709])
104
+ model.predict(source, bboxes=[439, 437, 524, 709], save=True)
105
105
 
106
106
  # Predict all
107
107
  # model(source)
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.92"
3
+ __version__ = "8.2.94"
4
4
 
5
5
 
6
6
  import os
@@ -391,7 +391,7 @@ class Exporter:
391
391
  """YOLOv8 ONNX export."""
392
392
  requirements = ["onnx>=1.12.0"]
393
393
  if self.args.simplify:
394
- requirements += ["onnxslim==0.1.32", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
394
+ requirements += ["onnxslim==0.1.34", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
395
395
  check_requirements(requirements)
396
396
  import onnx # noqa
397
397
 
@@ -28,7 +28,6 @@ from ultralytics.utils import (
28
28
  DEFAULT_CFG,
29
29
  LOCAL_RANK,
30
30
  LOGGER,
31
- MACOS,
32
31
  RANK,
33
32
  TQDM,
34
33
  __version__,
@@ -409,13 +408,17 @@ class BaseTrainer:
409
408
  break
410
409
 
411
410
  # Log
412
- mem = f"{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G" # (GB)
413
- loss_len = self.tloss.shape[0] if len(self.tloss.shape) else 1
414
- losses = self.tloss if loss_len > 1 else torch.unsqueeze(self.tloss, 0)
415
411
  if RANK in {-1, 0}:
412
+ loss_length = self.tloss.shape[0] if len(self.tloss.shape) else 1
416
413
  pbar.set_description(
417
- ("%11s" * 2 + "%11.4g" * (2 + loss_len))
418
- % (f"{epoch + 1}/{self.epochs}", mem, *losses, batch["cls"].shape[0], batch["img"].shape[-1])
414
+ ("%11s" * 2 + "%11.4g" * (2 + loss_length))
415
+ % (
416
+ f"{epoch + 1}/{self.epochs}",
417
+ f"{self._get_memory():.3g}G", # (GB) GPU memory util
418
+ *(self.tloss if loss_length > 1 else torch.unsqueeze(self.tloss, 0)), # losses
419
+ batch["cls"].shape[0], # batch size, i.e. 8
420
+ batch["img"].shape[-1], # imgsz, i.e 640
421
+ )
419
422
  )
420
423
  self.run_callbacks("on_batch_end")
421
424
  if self.args.plots and ni in self.plot_idx:
@@ -453,11 +456,7 @@ class BaseTrainer:
453
456
  self.scheduler.last_epoch = self.epoch # do not move
454
457
  self.stop |= epoch >= self.epochs # stop if exceeded epochs
455
458
  self.run_callbacks("on_fit_epoch_end")
456
- gc.collect()
457
- if MACOS:
458
- torch.mps.empty_cache() # clear unified memory at end of epoch, may help MPS' management of 'unlimited' virtual memoy
459
- else:
460
- torch.cuda.empty_cache() # clear GPU memory at end of epoch, may help reduce CUDA out of memory errors
459
+ self._clear_memory()
461
460
 
462
461
  # Early Stopping
463
462
  if RANK != -1: # if DDP training
@@ -478,14 +477,29 @@ class BaseTrainer:
478
477
  if self.args.plots:
479
478
  self.plot_metrics()
480
479
  self.run_callbacks("on_train_end")
480
+ self._clear_memory()
481
+ self.run_callbacks("teardown")
482
+
483
+ def _get_memory(self):
484
+ """Get accelerator memory utilization in GB."""
485
+ if self.device.type == "mps":
486
+ memory = torch.mps.driver_allocated_memory()
487
+ elif self.device.type == "cpu":
488
+ memory = 0
489
+ else:
490
+ memory = torch.cuda.memory_reserved()
491
+ return memory / 1e9
492
+
493
+ def _clear_memory(self):
494
+ """Clear accelerator memory on different platforms."""
481
495
  gc.collect()
482
- if MACOS:
496
+ if self.device.type == "mps":
483
497
  torch.mps.empty_cache()
498
+ elif self.device.type == "cpu":
499
+ return
484
500
  else:
485
501
  torch.cuda.empty_cache()
486
502
 
487
- self.run_callbacks("teardown")
488
-
489
503
  def read_results_csv(self):
490
504
  """Read results.csv into a dict using pandas."""
491
505
  import pandas as pd # scope for faster 'import ultralytics'
@@ -44,7 +44,7 @@ class NASValidator(DetectionValidator):
44
44
  self.args.iou,
45
45
  labels=self.lb,
46
46
  multi_label=False,
47
- agnostic=self.args.single_cls,
47
+ agnostic=self.args.single_cls or self.args.agnostic_nms,
48
48
  max_det=self.args.max_det,
49
49
  max_time_img=0.5,
50
50
  )
@@ -450,16 +450,18 @@ class Predictor(BasePredictor):
450
450
 
451
451
  results = []
452
452
  for masks, orig_img, img_path in zip([pred_masks], orig_imgs, self.batch[0]):
453
- if pred_bboxes is not None:
454
- pred_bboxes = ops.scale_boxes(img.shape[2:], pred_bboxes.float(), orig_img.shape, padding=False)
455
- cls = torch.arange(len(pred_masks), dtype=torch.int32, device=pred_masks.device)
456
- pred_bboxes = torch.cat([pred_bboxes, pred_scores[:, None], cls[:, None]], dim=-1)
457
-
458
453
  if len(masks) == 0:
459
454
  masks = None
460
455
  else:
461
456
  masks = ops.scale_masks(masks[None].float(), orig_img.shape[:2], padding=False)[0]
462
457
  masks = masks > self.model.mask_threshold # to bool
458
+ if pred_bboxes is not None:
459
+ pred_bboxes = ops.scale_boxes(img.shape[2:], pred_bboxes.float(), orig_img.shape, padding=False)
460
+ else:
461
+ pred_bboxes = batched_mask_to_box(masks)
462
+ # NOTE: SAM models do not return cls info. This `cls` here is just a placeholder for consistency.
463
+ cls = torch.arange(len(pred_masks), dtype=torch.int32, device=pred_masks.device)
464
+ pred_bboxes = torch.cat([pred_bboxes, pred_scores[:, None], cls[:, None]], dim=-1)
463
465
  results.append(Results(orig_img, path=img_path, names=names, masks=masks, boxes=pred_bboxes))
464
466
  # Reset segment-all mode.
465
467
  self.segment_all = False
@@ -45,7 +45,7 @@ class OBBValidator(DetectionValidator):
45
45
  labels=self.lb,
46
46
  nc=self.nc,
47
47
  multi_label=True,
48
- agnostic=self.args.single_cls,
48
+ agnostic=self.args.single_cls or self.args.agnostic_nms,
49
49
  max_det=self.args.max_det,
50
50
  rotated=True,
51
51
  )
@@ -69,7 +69,7 @@ class PoseValidator(DetectionValidator):
69
69
  self.args.iou,
70
70
  labels=self.lb,
71
71
  multi_label=True,
72
- agnostic=self.args.single_cls,
72
+ agnostic=self.args.single_cls or self.args.agnostic_nms,
73
73
  max_det=self.args.max_det,
74
74
  nc=self.nc,
75
75
  )
@@ -76,7 +76,7 @@ class SegmentationValidator(DetectionValidator):
76
76
  self.args.iou,
77
77
  labels=self.lb,
78
78
  multi_label=True,
79
- agnostic=self.args.single_cls,
79
+ agnostic=self.args.single_cls or self.args.agnostic_nms,
80
80
  max_det=self.args.max_det,
81
81
  nc=self.nc,
82
82
  )
@@ -1,6 +1,8 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
3
  import contextlib
4
+ import pickle
5
+ import types
4
6
  from copy import deepcopy
5
7
  from pathlib import Path
6
8
 
@@ -750,7 +752,35 @@ def temporary_modules(modules=None, attributes=None):
750
752
  del sys.modules[old]
751
753
 
752
754
 
753
- def torch_safe_load(weight):
755
+ class SafeClass:
756
+ """A placeholder class to replace unknown classes during unpickling."""
757
+
758
+ def __init__(self, *args, **kwargs):
759
+ """Initialize SafeClass instance, ignoring all arguments."""
760
+ pass
761
+
762
+
763
+ class SafeUnpickler(pickle.Unpickler):
764
+ """Custom Unpickler that replaces unknown classes with SafeClass."""
765
+
766
+ def find_class(self, module, name):
767
+ """Attempt to find a class, returning SafeClass if not among safe modules."""
768
+ safe_modules = (
769
+ "torch",
770
+ "collections",
771
+ "collections.abc",
772
+ "builtins",
773
+ "math",
774
+ "numpy",
775
+ # Add other modules considered safe
776
+ )
777
+ if module in safe_modules:
778
+ return super().find_class(module, name)
779
+ else:
780
+ return SafeClass
781
+
782
+
783
+ def torch_safe_load(weight, safe_only=False):
754
784
  """
755
785
  Attempts to load a PyTorch model with the torch.load() function. If a ModuleNotFoundError is raised, it catches the
756
786
  error, logs a warning message, and attempts to install the missing module via the check_requirements() function.
@@ -758,9 +788,18 @@ def torch_safe_load(weight):
758
788
 
759
789
  Args:
760
790
  weight (str): The file path of the PyTorch model.
791
+ safe_only (bool): If True, replace unknown classes with SafeClass during loading.
792
+
793
+ Example:
794
+ ```python
795
+ from ultralytics.nn.tasks import torch_safe_load
796
+
797
+ ckpt, file = torch_safe_load("path/to/best.pt", safe_only=True)
798
+ ```
761
799
 
762
800
  Returns:
763
- (dict): The loaded PyTorch model.
801
+ ckpt (dict): The loaded model checkpoint.
802
+ file (str): The loaded filename
764
803
  """
765
804
  from ultralytics.utils.downloads import attempt_download_asset
766
805
 
@@ -779,7 +818,15 @@ def torch_safe_load(weight):
779
818
  "ultralytics.utils.loss.v10DetectLoss": "ultralytics.utils.loss.E2EDetectLoss", # YOLOv10
780
819
  },
781
820
  ):
782
- ckpt = torch.load(file, map_location="cpu")
821
+ if safe_only:
822
+ # Load via custom pickle module
823
+ safe_pickle = types.ModuleType("safe_pickle")
824
+ safe_pickle.Unpickler = SafeUnpickler
825
+ safe_pickle.load = lambda file_obj: SafeUnpickler(file_obj).load()
826
+ with open(file, "rb") as f:
827
+ ckpt = torch.load(f, pickle_module=safe_pickle)
828
+ else:
829
+ ckpt = torch.load(file, map_location="cpu")
783
830
 
784
831
  except ModuleNotFoundError as e: # e.name is missing module name
785
832
  if e.name == "models":
@@ -809,7 +856,7 @@ def torch_safe_load(weight):
809
856
  )
810
857
  ckpt = {"model": ckpt.model}
811
858
 
812
- return ckpt, file # load
859
+ return ckpt, file
813
860
 
814
861
 
815
862
  def attempt_load_weights(weights, device=None, inplace=True, fuse=False):
@@ -20,15 +20,8 @@ class QueueManager:
20
20
  names,
21
21
  reg_pts=None,
22
22
  line_thickness=2,
23
- track_thickness=2,
24
23
  view_img=False,
25
- region_color=(255, 0, 255),
26
- view_queue_counts=True,
27
24
  draw_tracks=False,
28
- count_txt_color=(255, 255, 255),
29
- track_color=None,
30
- region_thickness=5,
31
- fontsize=0.7,
32
25
  ):
33
26
  """
34
27
  Initializes the QueueManager with specified parameters for tracking and counting objects.
@@ -38,57 +31,35 @@ class QueueManager:
38
31
  reg_pts (list of tuples, optional): Points defining the counting region polygon. Defaults to a predefined
39
32
  rectangle.
40
33
  line_thickness (int, optional): Thickness of the annotation lines. Defaults to 2.
41
- track_thickness (int, optional): Thickness of the track lines. Defaults to 2.
42
34
  view_img (bool, optional): Whether to display the image frames. Defaults to False.
43
- region_color (tuple, optional): Color of the counting region lines (BGR). Defaults to (255, 0, 255).
44
- view_queue_counts (bool, optional): Whether to display the queue counts. Defaults to True.
45
35
  draw_tracks (bool, optional): Whether to draw tracks of the objects. Defaults to False.
46
- count_txt_color (tuple, optional): Color of the count text (BGR). Defaults to (255, 255, 255).
47
- track_color (tuple, optional): Color of the tracks. If None, different colors will be used for different
48
- tracks. Defaults to None.
49
- region_thickness (int, optional): Thickness of the counting region lines. Defaults to 5.
50
- fontsize (float, optional): Font size for the text annotations. Defaults to 0.7.
51
36
  """
52
- # Mouse events state
53
- self.is_drawing = False
54
- self.selected_point = None
55
-
56
37
  # Region & Line Information
57
38
  self.reg_pts = reg_pts if reg_pts is not None else [(20, 60), (20, 680), (1120, 680), (1120, 60)]
58
39
  self.counting_region = (
59
40
  Polygon(self.reg_pts) if len(self.reg_pts) >= 3 else Polygon([(20, 60), (20, 680), (1120, 680), (1120, 60)])
60
41
  )
61
- self.region_color = region_color
62
- self.region_thickness = region_thickness
63
42
 
64
- # Image and annotation Information
65
- self.im0 = None
43
+ # annotation Information
66
44
  self.tf = line_thickness
67
45
  self.view_img = view_img
68
- self.view_queue_counts = view_queue_counts
69
- self.fontsize = fontsize
70
46
 
71
47
  self.names = names # Class names
72
- self.annotator = None # Annotator
73
- self.window_name = "Ultralytics YOLOv8 Queue Manager"
74
48
 
75
49
  # Object counting Information
76
50
  self.counts = 0
77
- self.count_txt_color = count_txt_color
78
51
 
79
52
  # Tracks info
80
53
  self.track_history = defaultdict(list)
81
- self.track_thickness = track_thickness
82
54
  self.draw_tracks = draw_tracks
83
- self.track_color = track_color
84
55
 
85
56
  # Check if environment supports imshow
86
57
  self.env_check = check_imshow(warn=True)
87
58
 
88
- def extract_and_process_tracks(self, tracks):
59
+ def extract_and_process_tracks(self, tracks, im0):
89
60
  """Extracts and processes tracks for queue management in a video stream."""
90
61
  # Initialize annotator and draw the queue region
91
- self.annotator = Annotator(self.im0, self.tf, self.names)
62
+ annotator = Annotator(im0, self.tf, self.names)
92
63
  self.counts = 0 # Reset counts every frame
93
64
  if tracks[0].boxes.id is not None:
94
65
  boxes = tracks[0].boxes.xyxy.cpu()
@@ -98,7 +69,7 @@ class QueueManager:
98
69
  # Extract tracks
99
70
  for box, track_id, cls in zip(boxes, track_ids, clss):
100
71
  # Draw bounding box
101
- self.annotator.box_label(box, label=f"{self.names[cls]}#{track_id}", color=colors(int(track_id), True))
72
+ annotator.box_label(box, label=self.names[cls], color=colors(int(track_id), True))
102
73
 
103
74
  # Update track history
104
75
  track_line = self.track_history[track_id]
@@ -108,10 +79,10 @@ class QueueManager:
108
79
 
109
80
  # Draw track trails if enabled
110
81
  if self.draw_tracks:
111
- self.annotator.draw_centroid_and_tracks(
82
+ annotator.draw_centroid_and_tracks(
112
83
  track_line,
113
- color=self.track_color or colors(int(track_id), True),
114
- track_thickness=self.track_thickness,
84
+ color=colors(int(track_id), True),
85
+ track_thickness=self.line_thickness,
115
86
  )
116
87
 
117
88
  prev_position = self.track_history[track_id][-2] if len(self.track_history[track_id]) > 1 else None
@@ -125,21 +96,16 @@ class QueueManager:
125
96
  # Display queue counts
126
97
  label = f"Queue Counts : {str(self.counts)}"
127
98
  if label is not None:
128
- self.annotator.queue_counts_display(
99
+ annotator.queue_counts_display(
129
100
  label,
130
101
  points=self.reg_pts,
131
- region_color=self.region_color,
132
- txt_color=self.count_txt_color,
102
+ region_color=(255, 0, 255),
103
+ txt_color=(104, 31, 17),
133
104
  )
134
105
 
135
- self.display_frames()
136
-
137
- def display_frames(self):
138
- """Displays the current frame with annotations."""
139
106
  if self.env_check and self.view_img:
140
- self.annotator.draw_region(reg_pts=self.reg_pts, thickness=self.region_thickness, color=self.region_color)
141
- cv2.namedWindow(self.window_name)
142
- cv2.imshow(self.window_name, self.im0)
107
+ annotator.draw_region(reg_pts=self.reg_pts, thickness=self.tf * 2, color=(255, 0, 255))
108
+ cv2.imshow("Ultralytics YOLOv8 Queue Manager", im0)
143
109
  # Close window on 'q' key press
144
110
  if cv2.waitKey(1) & 0xFF == ord("q"):
145
111
  return
@@ -152,12 +118,8 @@ class QueueManager:
152
118
  im0 (ndarray): Current frame from the video stream.
153
119
  tracks (list): List of tracks obtained from the object tracking process.
154
120
  """
155
- self.im0 = im0 # Store the current frame
156
- self.extract_and_process_tracks(tracks) # Extract and process tracks
157
-
158
- if self.view_img:
159
- self.display_frames() # Display the frame if enabled
160
- return self.im0
121
+ self.extract_and_process_tracks(tracks, im0) # Extract and process tracks
122
+ return im0
161
123
 
162
124
 
163
125
  if __name__ == "__main__":