ultralytics 8.3.120__tar.gz → 8.3.122__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. {ultralytics-8.3.120/ultralytics.egg-info → ultralytics-8.3.122}/PKG-INFO +3 -3
  2. {ultralytics-8.3.120 → ultralytics-8.3.122}/pyproject.toml +2 -2
  3. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/__init__.py +1 -1
  5. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/trackers/botsort.yaml +1 -1
  6. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/augment.py +3 -1
  7. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/split_dota.py +1 -1
  8. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/exporter.py +5 -0
  9. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/utils/loss.py +1 -1
  10. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/solutions.py +1 -1
  11. ultralytics-8.3.122/ultralytics/solutions/speed_estimation.py +110 -0
  12. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/bot_sort.py +2 -0
  13. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/downloads.py +2 -1
  14. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/export.py +1 -1
  15. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/loss.py +4 -3
  16. {ultralytics-8.3.120 → ultralytics-8.3.122/ultralytics.egg-info}/PKG-INFO +3 -3
  17. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/requires.txt +2 -2
  18. ultralytics-8.3.120/ultralytics/solutions/speed_estimation.py +0 -114
  19. {ultralytics-8.3.120 → ultralytics-8.3.122}/LICENSE +0 -0
  20. {ultralytics-8.3.120 → ultralytics-8.3.122}/README.md +0 -0
  21. {ultralytics-8.3.120 → ultralytics-8.3.122}/setup.cfg +0 -0
  22. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/__init__.py +0 -0
  23. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/conftest.py +0 -0
  24. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_cli.py +0 -0
  25. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_cuda.py +0 -0
  26. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_engine.py +0 -0
  27. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_exports.py +0 -0
  28. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_integrations.py +0 -0
  29. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_python.py +0 -0
  30. {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_solutions.py +0 -0
  31. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/assets/bus.jpg +0 -0
  32. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/assets/zidane.jpg +0 -0
  33. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  34. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  35. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  36. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  37. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  38. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  39. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  40. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  41. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  42. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  43. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  44. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  45. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  46. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco.yaml +0 -0
  47. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  48. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  49. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  50. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  51. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  52. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  53. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  54. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  55. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  56. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  57. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  58. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  59. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  60. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  61. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  62. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/signature.yaml +0 -0
  63. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  64. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/xView.yaml +0 -0
  65. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/default.yaml +0 -0
  66. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  67. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  68. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  69. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  70. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  71. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  72. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  73. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  74. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  75. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  76. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  77. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  78. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  79. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  80. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  81. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  82. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  83. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  84. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  85. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  86. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  87. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  88. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  89. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  90. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  91. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  92. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  93. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  94. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  95. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  96. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  97. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  98. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  99. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  100. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  101. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  102. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  103. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  104. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  105. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  106. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  107. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  108. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  109. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  110. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  111. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  112. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  113. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  114. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  115. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  116. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  117. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  118. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  119. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  120. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  121. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/solutions/default.yaml +0 -0
  122. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  123. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/__init__.py +0 -0
  124. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/annotator.py +0 -0
  125. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/base.py +0 -0
  126. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/build.py +0 -0
  127. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/converter.py +0 -0
  128. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/dataset.py +0 -0
  129. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/loaders.py +0 -0
  130. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/download_weights.sh +0 -0
  131. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/get_coco.sh +0 -0
  132. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/get_coco128.sh +0 -0
  133. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  134. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/split.py +0 -0
  135. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/utils.py +0 -0
  136. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/__init__.py +0 -0
  137. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/model.py +0 -0
  138. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/predictor.py +0 -0
  139. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/results.py +0 -0
  140. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/trainer.py +0 -0
  141. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/tuner.py +0 -0
  142. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/validator.py +0 -0
  143. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/__init__.py +0 -0
  144. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/auth.py +0 -0
  145. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/google/__init__.py +0 -0
  146. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/session.py +0 -0
  147. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/utils.py +0 -0
  148. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/__init__.py +0 -0
  149. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/__init__.py +0 -0
  150. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/model.py +0 -0
  151. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/predict.py +0 -0
  152. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/utils.py +0 -0
  153. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/val.py +0 -0
  154. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/__init__.py +0 -0
  155. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/model.py +0 -0
  156. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/predict.py +0 -0
  157. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/val.py +0 -0
  158. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/__init__.py +0 -0
  159. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/model.py +0 -0
  160. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/predict.py +0 -0
  161. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/train.py +0 -0
  162. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/val.py +0 -0
  163. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/__init__.py +0 -0
  164. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/amg.py +0 -0
  165. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/build.py +0 -0
  166. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/model.py +0 -0
  167. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/__init__.py +0 -0
  168. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/blocks.py +0 -0
  169. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/decoders.py +0 -0
  170. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/encoders.py +0 -0
  171. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  172. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/sam.py +0 -0
  173. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  174. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/transformer.py +0 -0
  175. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/utils.py +0 -0
  176. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/predict.py +0 -0
  177. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/utils/__init__.py +0 -0
  178. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/utils/ops.py +0 -0
  179. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/__init__.py +0 -0
  180. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/__init__.py +0 -0
  181. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/predict.py +0 -0
  182. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/train.py +0 -0
  183. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/val.py +0 -0
  184. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/__init__.py +0 -0
  185. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/predict.py +0 -0
  186. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/train.py +0 -0
  187. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/val.py +0 -0
  188. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/model.py +0 -0
  189. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/__init__.py +0 -0
  190. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/predict.py +0 -0
  191. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/train.py +0 -0
  192. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/val.py +0 -0
  193. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/__init__.py +0 -0
  194. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/predict.py +0 -0
  195. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/train.py +0 -0
  196. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/val.py +0 -0
  197. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/__init__.py +0 -0
  198. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/predict.py +0 -0
  199. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/train.py +0 -0
  200. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/val.py +0 -0
  201. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/world/__init__.py +0 -0
  202. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/world/train.py +0 -0
  203. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/world/train_world.py +0 -0
  204. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  205. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  206. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/train.py +0 -0
  207. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  208. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/val.py +0 -0
  209. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/__init__.py +0 -0
  210. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/autobackend.py +0 -0
  211. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/__init__.py +0 -0
  212. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/activation.py +0 -0
  213. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/block.py +0 -0
  214. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/conv.py +0 -0
  215. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/head.py +0 -0
  216. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/transformer.py +0 -0
  217. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/utils.py +0 -0
  218. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/tasks.py +0 -0
  219. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/text_model.py +0 -0
  220. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/__init__.py +0 -0
  221. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/ai_gym.py +0 -0
  222. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/analytics.py +0 -0
  223. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/distance_calculation.py +0 -0
  224. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/heatmap.py +0 -0
  225. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/instance_segmentation.py +0 -0
  226. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/object_blurrer.py +0 -0
  227. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/object_counter.py +0 -0
  228. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/object_cropper.py +0 -0
  229. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/parking_management.py +0 -0
  230. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/queue_management.py +0 -0
  231. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/region_counter.py +0 -0
  232. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/security_alarm.py +0 -0
  233. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/streamlit_inference.py +0 -0
  234. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/trackzone.py +0 -0
  235. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/vision_eye.py +0 -0
  236. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/__init__.py +0 -0
  237. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/basetrack.py +0 -0
  238. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/byte_tracker.py +0 -0
  239. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/track.py +0 -0
  240. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/__init__.py +0 -0
  241. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/gmc.py +0 -0
  242. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  243. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/matching.py +0 -0
  244. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/__init__.py +0 -0
  245. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/autobatch.py +0 -0
  246. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/benchmarks.py +0 -0
  247. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/__init__.py +0 -0
  248. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/base.py +0 -0
  249. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/clearml.py +0 -0
  250. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/comet.py +0 -0
  251. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/dvc.py +0 -0
  252. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/hub.py +0 -0
  253. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/mlflow.py +0 -0
  254. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/neptune.py +0 -0
  255. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/raytune.py +0 -0
  256. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  257. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/wb.py +0 -0
  258. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/checks.py +0 -0
  259. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/dist.py +0 -0
  260. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/errors.py +0 -0
  261. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/files.py +0 -0
  262. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/instance.py +0 -0
  263. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/metrics.py +0 -0
  264. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/ops.py +0 -0
  265. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/patches.py +0 -0
  266. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/plotting.py +0 -0
  267. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/tal.py +0 -0
  268. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/torch_utils.py +0 -0
  269. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/triton.py +0 -0
  270. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/tuner.py +0 -0
  271. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/SOURCES.txt +0 -0
  272. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/dependency_links.txt +0 -0
  273. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/entry_points.txt +0 -0
  274. {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.120
3
+ Version: 8.3.122
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -68,8 +68,8 @@ Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
68
68
  Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
69
69
  Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
70
70
  Provides-Extra: solutions
71
- Requires-Dist: shapely<2.1.0,>=2.0.0; extra == "solutions"
72
- Requires-Dist: streamlit<1.44.0,>=1.29.0; extra == "solutions"
71
+ Requires-Dist: shapely>=2.0.0; extra == "solutions"
72
+ Requires-Dist: streamlit>=1.29.0; extra == "solutions"
73
73
  Provides-Extra: logging
74
74
  Requires-Dist: wandb; extra == "logging"
75
75
  Requires-Dist: tensorboard; extra == "logging"
@@ -103,8 +103,8 @@ export = [
103
103
  "h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
104
104
  ]
105
105
  solutions = [
106
- "shapely>=2.0.0,<2.1.0", # shapely for point and polygon data matching
107
- "streamlit>=1.29.0,<1.44.0", # for live inference on web browser, i.e `yolo streamlit-predict`
106
+ "shapely>=2.0.0", # shapely for point and polygon data matching
107
+ "streamlit>=1.29.0", # for live inference on web browser, i.e `yolo streamlit-predict`
108
108
  ]
109
109
  logging = [
110
110
  "wandb", # https://docs.ultralytics.com/integrations/weights-biases/
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.120"
3
+ __version__ = "8.3.122"
4
4
 
5
5
  import os
6
6
 
@@ -701,7 +701,7 @@ def handle_yolo_solutions(args: List[str]) -> None:
701
701
  solution_name = "count" # Default for invalid solution
702
702
 
703
703
  if solution_name == "inference":
704
- checks.check_requirements("streamlit>=1.29.0,<1.44.0")
704
+ checks.check_requirements("streamlit>=1.29.0")
705
705
  LOGGER.info("💡 Loading Ultralytics live inference app...")
706
706
  subprocess.run(
707
707
  [ # Run subprocess with Streamlit custom argument
@@ -17,6 +17,6 @@ fuse_score: True # Whether to fuse confidence scores with the iou distances befo
17
17
  gmc_method: sparseOptFlow # method of global motion compensation
18
18
  # ReID model related thresh
19
19
  proximity_thresh: 0.5 # minimum IoU for valid match with ReID
20
- appearance_thresh: 0.25 # minimum appearance similarity for ReID
20
+ appearance_thresh: 0.8 # minimum appearance similarity for ReID
21
21
  with_reid: False
22
22
  model: auto # uses native features if detector is YOLO else yolo11n-cls.pt
@@ -1026,7 +1026,9 @@ class CutMix(BaseMixTransform):
1026
1026
  labels2 = labels.pop("mix_labels")[0]
1027
1027
  area = cut_areas[np.random.choice(idx)] # randomle select one
1028
1028
  ioa2 = bbox_ioa(area[None], labels2["instances"].bboxes).squeeze(0)
1029
- indexes2 = np.nonzero(ioa2 >= 0.01 if len(labels["instances"].segments) else 0.1)[0]
1029
+ indexes2 = np.nonzero(ioa2 >= (0.01 if len(labels["instances"].segments) else 0.1))[0]
1030
+ if len(indexes2) == 0:
1031
+ return labels
1030
1032
 
1031
1033
  instances2 = labels2["instances"][indexes2]
1032
1034
  instances2.convert_bbox("xyxy")
@@ -30,7 +30,7 @@ def bbox_iof(polygon1, bbox2, eps=1e-6):
30
30
  Polygon format: [x1, y1, x2, y2, x3, y3, x4, y4].
31
31
  Bounding box format: [x_min, y_min, x_max, y_max].
32
32
  """
33
- check_requirements("shapely")
33
+ check_requirements("shapely>=2.0.0")
34
34
  from shapely.geometry import Polygon
35
35
 
36
36
  polygon1 = polygon1.reshape(-1, 4, 2)
@@ -636,6 +636,8 @@ class Exporter:
636
636
  if self.args.int8:
637
637
  fq = str(self.file).replace(self.file.suffix, f"_int8_openvino_model{os.sep}")
638
638
  fq_ov = str(Path(fq) / self.file.with_suffix(".xml").name)
639
+ # INT8 requires nncf, nncf requires packaging>=23.2 https://github.com/openvinotoolkit/nncf/issues/3463
640
+ check_requirements("packaging>=23.2") # must be installed first to build nncf wheel
639
641
  check_requirements("nncf>=2.14.0")
640
642
  import nncf
641
643
 
@@ -849,6 +851,9 @@ class Exporter:
849
851
  ct_model.license = m.pop("license")
850
852
  ct_model.version = m.pop("version")
851
853
  ct_model.user_defined_metadata.update({k: str(v) for k, v in m.items()})
854
+ if self.model.task == "classify":
855
+ ct_model.user_defined_metadata.update({"com.apple.coreml.model.preview.type": "imageClassifier"})
856
+
852
857
  try:
853
858
  ct_model.save(str(f)) # save *.mlpackage
854
859
  except Exception as e:
@@ -58,7 +58,7 @@ class DETRLoss(nn.Module):
58
58
  use_uni_match (bool): Whether to use fixed layer for auxiliary branch label assignment.
59
59
  uni_match_ind (int): Index of fixed layer for uni_match.
60
60
  gamma (float): The focusing parameter that controls how much the loss focuses on hard-to-classify examples.
61
- alpha (float): The balancing factor used to address class imbalance.
61
+ alpha (float | list): The balancing factor used to address class imbalance.
62
62
  """
63
63
  super().__init__()
64
64
 
@@ -53,7 +53,7 @@ class BaseSolution:
53
53
  is_cli (bool): Enables CLI mode if set to True.
54
54
  **kwargs (Any): Additional configuration parameters that override defaults.
55
55
  """
56
- check_requirements("shapely>=2.0.0,<2.1.0")
56
+ check_requirements("shapely>=2.0.0")
57
57
  from shapely.geometry import LineString, Point, Polygon
58
58
  from shapely.prepared import prep
59
59
 
@@ -0,0 +1,110 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ from collections import deque
4
+ from math import sqrt
5
+
6
+ from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
7
+ from ultralytics.utils.plotting import colors
8
+
9
+
10
+ class SpeedEstimator(BaseSolution):
11
+ """
12
+ A class to estimate the speed of objects in a real-time video stream based on their tracks.
13
+
14
+ This class extends the BaseSolution class and provides functionality for estimating object speeds using
15
+ tracking data in video streams.
16
+
17
+ Attributes:
18
+ spd (Dict[int, float]): Dictionary storing speed data for tracked objects.
19
+ trk_hist (Dict[int, float]): Dictionary storing the object tracking data.
20
+ max_hist (int): maximum track history before computing speed
21
+ meters_per_pixel (float): Real-world meters represented by one pixel (e.g., 0.04 for 4m over 100px).
22
+ max_speed (int): Maximum allowed object speed; values above this will be capped at 120 km/h.
23
+
24
+ Methods:
25
+ initialize_region: Initializes the speed estimation region.
26
+ process: Processes input frames to estimate object speeds.
27
+ store_tracking_history: Stores the tracking history for an object.
28
+ extract_tracks: Extracts tracks from the current frame.
29
+ display_output: Displays the output with annotations.
30
+
31
+ Examples:
32
+ >>> estimator = SpeedEstimator()
33
+ >>> frame = cv2.imread("frame.jpg")
34
+ >>> results = estimator.process(frame)
35
+ >>> cv2.imshow("Speed Estimation", results.plot_im)
36
+ """
37
+
38
+ def __init__(self, **kwargs):
39
+ """
40
+ Initialize the SpeedEstimator object with speed estimation parameters and data structures.
41
+
42
+ Args:
43
+ **kwargs (Any): Additional keyword arguments passed to the parent class.
44
+ """
45
+ super().__init__(**kwargs)
46
+
47
+ self.fps = kwargs.get("fps", 30) # assumed video FPS
48
+ self.frame_count = 0 # global frame count
49
+ self.trk_frame_ids = {} # Track ID → first frame index
50
+ self.spd = {} # Final speed per object (km/h), once locked
51
+ self.trk_hist = {} # Track ID → deque of (time, position)
52
+ self.locked_ids = set() # Track IDs whose speed has been finalized
53
+ self.max_hist = kwargs.get("max_hist", 5) # Required frame history before computing speed
54
+ self.meter_per_pixel = kwargs.get("meter_per_pixel", 0.05) # Scene scale, depends on camera details
55
+ self.max_speed = kwargs.get("max_speed", 120) # max_speed adjustment
56
+
57
+ def process(self, im0):
58
+ """
59
+ Process an input frame to estimate object speeds based on tracking data.
60
+
61
+ Args:
62
+ im0 (np.ndarray): Input image for processing with shape (H, W, C) for RGB images.
63
+
64
+ Returns:
65
+ (SolutionResults): Contains processed image `plot_im` and `total_tracks` (number of tracked objects).
66
+
67
+ Examples:
68
+ >>> estimator = SpeedEstimator()
69
+ >>> image = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
70
+ >>> results = estimator.process(image)
71
+ """
72
+ self.frame_count += 1
73
+ self.extract_tracks(im0)
74
+ annotator = SolutionAnnotator(im0, line_width=self.line_width)
75
+
76
+ for box, track_id, _, _ in zip(self.boxes, self.track_ids, self.clss, self.confs):
77
+ self.store_tracking_history(track_id, box)
78
+
79
+ if track_id not in self.trk_hist: # Initialize history if new track found
80
+ self.trk_hist[track_id] = deque(maxlen=self.max_hist)
81
+ self.trk_frame_ids[track_id] = self.frame_count
82
+
83
+ if track_id not in self.locked_ids: # Update history until speed is locked
84
+ trk_hist = self.trk_hist[track_id]
85
+ trk_hist.append(self.track_line[-1])
86
+
87
+ # Compute and lock speed once enough history is collected
88
+ if len(trk_hist) == self.max_hist:
89
+ p0, p1 = trk_hist[0], trk_hist[-1] # First and last points of track
90
+ dt = (self.frame_count - self.trk_frame_ids[track_id]) / self.fps # Time in seconds
91
+ if dt > 0:
92
+ dx, dy = p1[0] - p0[0], p1[1] - p0[1] # pixel displacement
93
+ pixel_distance = sqrt(dx * dx + dy * dy) # get pixel distance
94
+ meters = pixel_distance * self.meter_per_pixel # convert to meters
95
+ self.spd[track_id] = int(
96
+ min((meters / dt) * 3.6, self.max_speed)
97
+ ) # convert to km/h and store final speed
98
+ self.locked_ids.add(track_id) # prevent further updates
99
+ self.trk_hist.pop(track_id, None) # free memory
100
+ self.trk_frame_ids.pop(track_id, None) # optional: remove frame start too
101
+
102
+ if track_id in self.spd:
103
+ speed_label = f"{self.spd[track_id]} km/h"
104
+ annotator.box_label(box, label=speed_label, color=colors(track_id, True)) # Draw bounding box
105
+
106
+ plot_im = annotator.result()
107
+ self.display_output(plot_im) # Display output with base class function
108
+
109
+ # Return results with processed image and tracking summary
110
+ return SolutionResults(plot_im=plot_im, total_tracks=len(self.track_ids))
@@ -255,4 +255,6 @@ class ReID:
255
255
  def __call__(self, img, dets):
256
256
  """Extract embeddings for detected objects."""
257
257
  feats = self.model([save_one_box(det, img, save=False) for det in xywh2xyxy(torch.from_numpy(dets[:, :4]))])
258
+ if feats.shape[0] != dets.shape[0] and feats[0].shape[0] == dets.shape[0]:
259
+ feats = feats[0] # batched prediction with non-PyTorch backend
258
260
  return [f.cpu().numpy() for f in feats]
@@ -320,9 +320,10 @@ def safe_download(
320
320
  LOGGER.info(f"{desc}...")
321
321
  f.parent.mkdir(parents=True, exist_ok=True) # make directory if missing
322
322
  check_disk_space(url, path=f.parent)
323
+ curl_installed = shutil.which("curl")
323
324
  for i in range(retry + 1):
324
325
  try:
325
- if curl or i > 0: # curl download with retry, continue
326
+ if (curl or i > 0) and curl_installed: # curl download with retry, continue
326
327
  s = "sS" * (not progress) # silent
327
328
  r = subprocess.run(["curl", "-#", f"-{s}L", url, "-o", f, "--retry", "3", "-C", "-"]).returncode
328
329
  assert r == 0, f"Curl return value {r}"
@@ -167,7 +167,7 @@ def export_engine(
167
167
  trt.IInt8Calibrator.__init__(self)
168
168
  self.dataset = dataset
169
169
  self.data_iter = iter(dataset)
170
- self.algo = trt.CalibrationAlgoType.ENTROPY_CALIBRATION_2
170
+ self.algo = trt.CalibrationAlgoType.MINMAX_CALIBRATION
171
171
  self.batch = dataset.batch_size
172
172
  self.cache = Path(cache)
173
173
 
@@ -48,14 +48,14 @@ class FocalLoss(nn.Module):
48
48
 
49
49
  Args:
50
50
  gamma (float): The focusing parameter that controls how much the loss focuses on hard-to-classify examples.
51
- alpha (float): The balancing factor used to address class imbalance.
51
+ alpha (float | list): The balancing factor used to address class imbalance.
52
52
  """
53
53
 
54
54
  def __init__(self, gamma=1.5, alpha=0.25):
55
55
  """Initialize FocalLoss class with no parameters."""
56
56
  super().__init__()
57
57
  self.gamma = gamma
58
- self.alpha = alpha
58
+ self.alpha = torch.tensor(alpha)
59
59
 
60
60
  def forward(self, pred, label):
61
61
  """Calculate focal loss with modulating factors for class imbalance."""
@@ -68,7 +68,8 @@ class FocalLoss(nn.Module):
68
68
  p_t = label * pred_prob + (1 - label) * (1 - pred_prob)
69
69
  modulating_factor = (1.0 - p_t) ** self.gamma
70
70
  loss *= modulating_factor
71
- if self.alpha > 0:
71
+ if (self.alpha > 0).any():
72
+ self.alpha = self.alpha.to(device=pred.device, dtype=pred.dtype)
72
73
  alpha_factor = label * self.alpha + (1 - label) * (1 - self.alpha)
73
74
  loss *= alpha_factor
74
75
  return loss.mean(1).sum()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.120
3
+ Version: 8.3.122
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -68,8 +68,8 @@ Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
68
68
  Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
69
69
  Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
70
70
  Provides-Extra: solutions
71
- Requires-Dist: shapely<2.1.0,>=2.0.0; extra == "solutions"
72
- Requires-Dist: streamlit<1.44.0,>=1.29.0; extra == "solutions"
71
+ Requires-Dist: shapely>=2.0.0; extra == "solutions"
72
+ Requires-Dist: streamlit>=1.29.0; extra == "solutions"
73
73
  Provides-Extra: logging
74
74
  Requires-Dist: wandb; extra == "logging"
75
75
  Requires-Dist: tensorboard; extra == "logging"
@@ -56,5 +56,5 @@ tensorboard
56
56
  mlflow
57
57
 
58
58
  [solutions]
59
- shapely<2.1.0,>=2.0.0
60
- streamlit<1.44.0,>=1.29.0
59
+ shapely>=2.0.0
60
+ streamlit>=1.29.0
@@ -1,114 +0,0 @@
1
- # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
-
3
- from time import time
4
-
5
- from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
6
- from ultralytics.utils.plotting import colors
7
-
8
-
9
- class SpeedEstimator(BaseSolution):
10
- """
11
- A class to estimate the speed of objects in a real-time video stream based on their tracks.
12
-
13
- This class extends the BaseSolution class and provides functionality for estimating object speeds using
14
- tracking data in video streams.
15
-
16
- Attributes:
17
- spd (Dict[int, float]): Dictionary storing speed data for tracked objects.
18
- trkd_ids (List[int]): List of tracked object IDs that have already been speed-estimated.
19
- trk_pt (Dict[int, float]): Dictionary storing previous timestamps for tracked objects.
20
- trk_pp (Dict[int, Tuple[float, float]]): Dictionary storing previous positions for tracked objects.
21
- region (List[Tuple[int, int]]): List of points defining the speed estimation region.
22
- track_line (List[Tuple[float, float]]): List of points representing the object's track.
23
- r_s (LineString): LineString object representing the speed estimation region.
24
-
25
- Methods:
26
- initialize_region: Initializes the speed estimation region.
27
- process: Processes input frames to estimate object speeds.
28
- store_tracking_history: Stores the tracking history for an object.
29
- extract_tracks: Extracts tracks from the current frame.
30
- display_output: Displays the output with annotations.
31
-
32
- Examples:
33
- >>> estimator = SpeedEstimator()
34
- >>> frame = cv2.imread("frame.jpg")
35
- >>> results = estimator.process(frame)
36
- >>> cv2.imshow("Speed Estimation", results.plot_im)
37
- """
38
-
39
- def __init__(self, **kwargs):
40
- """
41
- Initialize the SpeedEstimator object with speed estimation parameters and data structures.
42
-
43
- Args:
44
- **kwargs (Any): Additional keyword arguments passed to the parent class.
45
- """
46
- super().__init__(**kwargs)
47
-
48
- self.initialize_region() # Initialize speed region
49
-
50
- self.spd = {} # Dictionary for speed data
51
- self.trkd_ids = [] # List for already speed-estimated and tracked IDs
52
- self.trk_pt = {} # Dictionary for tracks' previous timestamps
53
- self.trk_pp = {} # Dictionary for tracks' previous positions
54
-
55
- def process(self, im0):
56
- """
57
- Process an input frame to estimate object speeds based on tracking data.
58
-
59
- Args:
60
- im0 (np.ndarray): Input image for processing with shape (H, W, C) for RGB images.
61
-
62
- Returns:
63
- (SolutionResults): Contains processed image `plot_im` and `total_tracks` (number of tracked objects).
64
-
65
- Examples:
66
- >>> estimator = SpeedEstimator()
67
- >>> image = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
68
- >>> results = estimator.process(image)
69
- """
70
- self.extract_tracks(im0) # Extract tracks
71
- annotator = SolutionAnnotator(im0, line_width=self.line_width) # Initialize annotator
72
-
73
- # Draw speed estimation region
74
- annotator.draw_region(reg_pts=self.region, color=(104, 0, 123), thickness=self.line_width * 2)
75
-
76
- for box, track_id, cls, conf in zip(self.boxes, self.track_ids, self.clss, self.confs):
77
- self.store_tracking_history(track_id, box) # Store track history
78
-
79
- # Initialize tracking data for new objects
80
- if track_id not in self.trk_pt:
81
- self.trk_pt[track_id] = 0
82
- if track_id not in self.trk_pp:
83
- self.trk_pp[track_id] = self.track_line[-1]
84
-
85
- speed_label = (
86
- f"{int(self.spd[track_id])} km/h"
87
- if track_id in self.spd and self.show_labels
88
- else self.adjust_box_label(cls, conf, track_id)
89
- )
90
- annotator.box_label(box, label=speed_label, color=colors(track_id, True)) # Draw bounding box
91
-
92
- # Determine if object is crossing the speed estimation region
93
- if self.LineString([self.trk_pp[track_id], self.track_line[-1]]).intersects(self.r_s):
94
- direction = "known"
95
- else:
96
- direction = "unknown"
97
-
98
- # Calculate speed for objects crossing the region for the first time
99
- if direction == "known" and track_id not in self.trkd_ids:
100
- self.trkd_ids.append(track_id)
101
- time_difference = time() - self.trk_pt[track_id]
102
- if time_difference > 0:
103
- # Calculate speed based on vertical displacement and time
104
- self.spd[track_id] = abs(self.track_line[-1][1] - self.trk_pp[track_id][1]) / time_difference
105
-
106
- # Update tracking data for next frame
107
- self.trk_pt[track_id] = time()
108
- self.trk_pp[track_id] = self.track_line[-1]
109
-
110
- plot_im = annotator.result()
111
- self.display_output(plot_im) # Display output with base class function
112
-
113
- # Return results with processed image and tracking summary
114
- return SolutionResults(plot_im=plot_im, total_tracks=len(self.track_ids))
File without changes
File without changes
File without changes