ultralytics 8.1.41__tar.gz → 8.1.42__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 (217) hide show
  1. {ultralytics-8.1.41/ultralytics.egg-info → ultralytics-8.1.42}/PKG-INFO +2 -1
  2. {ultralytics-8.1.41 → ultralytics-8.1.42}/pyproject.toml +1 -0
  3. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/__init__.py +1 -1
  4. ultralytics-8.1.42/ultralytics/cfg/models/v9/yolov9c-seg.yaml +38 -0
  5. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v9/yolov9c.yaml +3 -1
  6. ultralytics-8.1.42/ultralytics/cfg/models/v9/yolov9e-seg.yaml +62 -0
  7. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v9/yolov9e.yaml +3 -1
  8. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/trainer.py +10 -9
  9. ultralytics-8.1.42/ultralytics/solutions/queue_management.py +187 -0
  10. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/__init__.py +18 -13
  11. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/plotting.py +32 -0
  12. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/torch_utils.py +3 -2
  13. {ultralytics-8.1.41 → ultralytics-8.1.42/ultralytics.egg-info}/PKG-INFO +2 -1
  14. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics.egg-info/SOURCES.txt +3 -0
  15. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics.egg-info/requires.txt +3 -0
  16. {ultralytics-8.1.41 → ultralytics-8.1.42}/LICENSE +0 -0
  17. {ultralytics-8.1.41 → ultralytics-8.1.42}/README.md +0 -0
  18. {ultralytics-8.1.41 → ultralytics-8.1.42}/setup.cfg +0 -0
  19. {ultralytics-8.1.41 → ultralytics-8.1.42}/tests/test_cli.py +0 -0
  20. {ultralytics-8.1.41 → ultralytics-8.1.42}/tests/test_cuda.py +0 -0
  21. {ultralytics-8.1.41 → ultralytics-8.1.42}/tests/test_engine.py +0 -0
  22. {ultralytics-8.1.41 → ultralytics-8.1.42}/tests/test_explorer.py +0 -0
  23. {ultralytics-8.1.41 → ultralytics-8.1.42}/tests/test_integrations.py +0 -0
  24. {ultralytics-8.1.41 → ultralytics-8.1.42}/tests/test_python.py +0 -0
  25. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/assets/bus.jpg +0 -0
  26. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/assets/zidane.jpg +0 -0
  27. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/__init__.py +0 -0
  28. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  29. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  30. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  31. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  32. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  33. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  34. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  35. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  36. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  37. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  38. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  39. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  40. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  41. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/coco.yaml +0 -0
  42. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  43. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  44. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  45. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  46. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  47. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  48. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  49. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  50. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  51. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  52. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  53. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/datasets/xView.yaml +0 -0
  54. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/default.yaml +0 -0
  55. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  56. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  57. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  58. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  59. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  60. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  61. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  62. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  63. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  64. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  65. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  66. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  67. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  68. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  69. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  70. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  71. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  72. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  73. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  74. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  75. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  76. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  77. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  78. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  79. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  80. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  81. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  82. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  83. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  84. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/__init__.py +0 -0
  85. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/annotator.py +0 -0
  86. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/augment.py +0 -0
  87. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/base.py +0 -0
  88. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/build.py +0 -0
  89. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/converter.py +0 -0
  90. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/dataset.py +0 -0
  91. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/explorer/__init__.py +0 -0
  92. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/explorer/explorer.py +0 -0
  93. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/explorer/gui/__init__.py +0 -0
  94. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/explorer/gui/dash.py +0 -0
  95. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/explorer/utils.py +0 -0
  96. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/loaders.py +0 -0
  97. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/split_dota.py +0 -0
  98. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/data/utils.py +0 -0
  99. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/__init__.py +0 -0
  100. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/exporter.py +0 -0
  101. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/model.py +0 -0
  102. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/predictor.py +0 -0
  103. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/results.py +0 -0
  104. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/tuner.py +0 -0
  105. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/engine/validator.py +0 -0
  106. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/hub/__init__.py +0 -0
  107. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/hub/auth.py +0 -0
  108. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/hub/session.py +0 -0
  109. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/hub/utils.py +0 -0
  110. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/__init__.py +0 -0
  111. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/fastsam/__init__.py +0 -0
  112. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/fastsam/model.py +0 -0
  113. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/fastsam/predict.py +0 -0
  114. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/fastsam/prompt.py +0 -0
  115. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/fastsam/utils.py +0 -0
  116. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/fastsam/val.py +0 -0
  117. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/nas/__init__.py +0 -0
  118. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/nas/model.py +0 -0
  119. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/nas/predict.py +0 -0
  120. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/nas/val.py +0 -0
  121. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/rtdetr/__init__.py +0 -0
  122. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/rtdetr/model.py +0 -0
  123. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/rtdetr/predict.py +0 -0
  124. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/rtdetr/train.py +0 -0
  125. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/rtdetr/val.py +0 -0
  126. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/__init__.py +0 -0
  127. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/amg.py +0 -0
  128. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/build.py +0 -0
  129. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/model.py +0 -0
  130. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/modules/__init__.py +0 -0
  131. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/modules/decoders.py +0 -0
  132. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/modules/encoders.py +0 -0
  133. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/modules/sam.py +0 -0
  134. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  135. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/modules/transformer.py +0 -0
  136. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/sam/predict.py +0 -0
  137. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/utils/__init__.py +0 -0
  138. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/utils/loss.py +0 -0
  139. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/utils/ops.py +0 -0
  140. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/__init__.py +0 -0
  141. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/classify/__init__.py +0 -0
  142. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/classify/predict.py +0 -0
  143. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/classify/train.py +0 -0
  144. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/classify/val.py +0 -0
  145. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/detect/__init__.py +0 -0
  146. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/detect/predict.py +0 -0
  147. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/detect/train.py +0 -0
  148. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/detect/val.py +0 -0
  149. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/model.py +0 -0
  150. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/obb/__init__.py +0 -0
  151. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/obb/predict.py +0 -0
  152. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/obb/train.py +0 -0
  153. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/obb/val.py +0 -0
  154. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/pose/__init__.py +0 -0
  155. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/pose/predict.py +0 -0
  156. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/pose/train.py +0 -0
  157. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/pose/val.py +0 -0
  158. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/segment/__init__.py +0 -0
  159. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/segment/predict.py +0 -0
  160. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/segment/train.py +0 -0
  161. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/segment/val.py +0 -0
  162. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/world/__init__.py +0 -0
  163. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/world/train.py +0 -0
  164. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/models/yolo/world/train_world.py +0 -0
  165. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/__init__.py +0 -0
  166. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/autobackend.py +0 -0
  167. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/modules/__init__.py +0 -0
  168. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/modules/block.py +0 -0
  169. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/modules/conv.py +0 -0
  170. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/modules/head.py +0 -0
  171. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/modules/transformer.py +0 -0
  172. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/modules/utils.py +0 -0
  173. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/nn/tasks.py +0 -0
  174. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/solutions/__init__.py +0 -0
  175. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/solutions/ai_gym.py +0 -0
  176. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/solutions/distance_calculation.py +0 -0
  177. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/solutions/heatmap.py +0 -0
  178. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/solutions/object_counter.py +0 -0
  179. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/solutions/speed_estimation.py +0 -0
  180. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/__init__.py +0 -0
  181. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/basetrack.py +0 -0
  182. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/bot_sort.py +0 -0
  183. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/byte_tracker.py +0 -0
  184. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/track.py +0 -0
  185. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/utils/__init__.py +0 -0
  186. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/utils/gmc.py +0 -0
  187. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  188. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/trackers/utils/matching.py +0 -0
  189. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/autobatch.py +0 -0
  190. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/benchmarks.py +0 -0
  191. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/__init__.py +0 -0
  192. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/base.py +0 -0
  193. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/clearml.py +0 -0
  194. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/comet.py +0 -0
  195. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/dvc.py +0 -0
  196. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/hub.py +0 -0
  197. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/mlflow.py +0 -0
  198. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/neptune.py +0 -0
  199. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/raytune.py +0 -0
  200. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  201. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/callbacks/wb.py +0 -0
  202. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/checks.py +0 -0
  203. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/dist.py +0 -0
  204. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/downloads.py +0 -0
  205. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/errors.py +0 -0
  206. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/files.py +0 -0
  207. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/instance.py +0 -0
  208. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/loss.py +0 -0
  209. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/metrics.py +0 -0
  210. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/ops.py +0 -0
  211. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/patches.py +0 -0
  212. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/tal.py +0 -0
  213. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/triton.py +0 -0
  214. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics/utils/tuner.py +0 -0
  215. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics.egg-info/dependency_links.txt +0 -0
  216. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics.egg-info/entry_points.txt +0 -0
  217. {ultralytics-8.1.41 → ultralytics-8.1.42}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.1.41
3
+ Version: 8.1.42
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -62,6 +62,7 @@ Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_versio
62
62
  Requires-Dist: openvino>=2024.0.0; extra == "export"
63
63
  Requires-Dist: tensorflow<=2.13.1; python_version <= "3.11" and extra == "export"
64
64
  Requires-Dist: tensorflowjs>=3.9.0; python_version <= "3.11" and extra == "export"
65
+ Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
65
66
  Provides-Extra: explorer
66
67
  Requires-Dist: lancedb; extra == "explorer"
67
68
  Requires-Dist: duckdb<=0.9.2; extra == "explorer"
@@ -101,6 +101,7 @@ export = [
101
101
  "openvino>=2024.0.0", # OpenVINO export
102
102
  "tensorflow<=2.13.1; python_version <= '3.11'", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
103
103
  "tensorflowjs>=3.9.0; python_version <= '3.11'", # TF.js export, automatically installs tensorflow
104
+ "numpy==1.23.5; platform_machine == 'aarch64'", # Fix error: `np.bool` was a deprecated alias for the builtin `bool` when using TensorRT models on NVIDIA Jetson
104
105
  ]
105
106
  explorer = [
106
107
  "lancedb", # vector search
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.1.41"
3
+ __version__ = "8.1.42"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -0,0 +1,38 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9c-seg
3
+ # 654 layers, 27897120 parameters, 159.4 GFLOPs
4
+
5
+ # parameters
6
+ nc: 80 # number of classes
7
+
8
+ # gelan backbone
9
+ backbone:
10
+ - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
11
+ - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
12
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]] # 2
13
+ - [-1, 1, ADown, [256]] # 3-P3/8
14
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]] # 4
15
+ - [-1, 1, ADown, [512]] # 5-P4/16
16
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 6
17
+ - [-1, 1, ADown, [512]] # 7-P5/32
18
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 8
19
+ - [-1, 1, SPPELAN, [512, 256]] # 9
20
+
21
+ head:
22
+ - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
23
+ - [[-1, 6], 1, Concat, [1]] # cat backbone P4
24
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 12
25
+
26
+ - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
27
+ - [[-1, 4], 1, Concat, [1]] # cat backbone P3
28
+ - [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]] # 15 (P3/8-small)
29
+
30
+ - [-1, 1, ADown, [256]]
31
+ - [[-1, 12], 1, Concat, [1]] # cat head P4
32
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 18 (P4/16-medium)
33
+
34
+ - [-1, 1, ADown, [512]]
35
+ - [[-1, 9], 1, Concat, [1]] # cat head P5
36
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 21 (P5/32-large)
37
+
38
+ - [[15, 18, 21], 1, Segment, [nc, 32, 256]] # Segment(P3, P4, P5)
@@ -1,4 +1,6 @@
1
- # YOLOv9
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9c
3
+ # 618 layers, 25590912 parameters, 104.0 GFLOPs
2
4
 
3
5
  # parameters
4
6
  nc: 80 # number of classes
@@ -0,0 +1,62 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9c-seg
3
+ # 1261 layers, 60512800 parameters, 248.4 GFLOPs
4
+
5
+ # parameters
6
+ nc: 80 # number of classes
7
+
8
+ # gelan backbone
9
+ backbone:
10
+ - [-1, 1, Silence, []]
11
+ - [-1, 1, Conv, [64, 3, 2]] # 1-P1/2
12
+ - [-1, 1, Conv, [128, 3, 2]] # 2-P2/4
13
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 3
14
+ - [-1, 1, ADown, [256]] # 4-P3/8
15
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 5
16
+ - [-1, 1, ADown, [512]] # 6-P4/16
17
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 7
18
+ - [-1, 1, ADown, [1024]] # 8-P5/32
19
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 9
20
+
21
+ - [1, 1, CBLinear, [[64]]] # 10
22
+ - [3, 1, CBLinear, [[64, 128]]] # 11
23
+ - [5, 1, CBLinear, [[64, 128, 256]]] # 12
24
+ - [7, 1, CBLinear, [[64, 128, 256, 512]]] # 13
25
+ - [9, 1, CBLinear, [[64, 128, 256, 512, 1024]]] # 14
26
+
27
+ - [0, 1, Conv, [64, 3, 2]] # 15-P1/2
28
+ - [[10, 11, 12, 13, 14, -1], 1, CBFuse, [[0, 0, 0, 0, 0]]] # 16
29
+ - [-1, 1, Conv, [128, 3, 2]] # 17-P2/4
30
+ - [[11, 12, 13, 14, -1], 1, CBFuse, [[1, 1, 1, 1]]] # 18
31
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 19
32
+ - [-1, 1, ADown, [256]] # 20-P3/8
33
+ - [[12, 13, 14, -1], 1, CBFuse, [[2, 2, 2]]] # 21
34
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 22
35
+ - [-1, 1, ADown, [512]] # 23-P4/16
36
+ - [[13, 14, -1], 1, CBFuse, [[3, 3]]] # 24
37
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 25
38
+ - [-1, 1, ADown, [1024]] # 26-P5/32
39
+ - [[14, -1], 1, CBFuse, [[4]]] # 27
40
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 28
41
+ - [-1, 1, SPPELAN, [512, 256]] # 29
42
+
43
+ # gelan head
44
+ head:
45
+ - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
46
+ - [[-1, 25], 1, Concat, [1]] # cat backbone P4
47
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 32
48
+
49
+ - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
50
+ - [[-1, 22], 1, Concat, [1]] # cat backbone P3
51
+ - [-1, 1, RepNCSPELAN4, [256, 256, 128, 2]] # 35 (P3/8-small)
52
+
53
+ - [-1, 1, ADown, [256]]
54
+ - [[-1, 32], 1, Concat, [1]] # cat head P4
55
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 38 (P4/16-medium)
56
+
57
+ - [-1, 1, ADown, [512]]
58
+ - [[-1, 29], 1, Concat, [1]] # cat head P5
59
+ - [-1, 1, RepNCSPELAN4, [512, 1024, 512, 2]] # 41 (P5/32-large)
60
+
61
+ # segment
62
+ - [[35, 38, 41], 1, Segment, [nc, 32, 256]] # Segment (P3, P4, P5)
@@ -1,4 +1,6 @@
1
- # YOLOv9
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9e
3
+ # 1225 layers, 58206592 parameters, 193.0 GFLOPs
2
4
 
3
5
  # parameters
4
6
  nc: 80 # number of classes
@@ -331,6 +331,10 @@ class BaseTrainer:
331
331
  while True:
332
332
  self.epoch = epoch
333
333
  self.run_callbacks("on_train_epoch_start")
334
+ with warnings.catch_warnings():
335
+ warnings.simplefilter("ignore") # suppress 'Detected lr_scheduler.step() before optimizer.step()'
336
+ self.scheduler.step()
337
+
334
338
  self.model.train()
335
339
  if RANK != -1:
336
340
  self.train_loader.sampler.set_epoch(epoch)
@@ -426,15 +430,12 @@ class BaseTrainer:
426
430
  t = time.time()
427
431
  self.epoch_time = t - self.epoch_time_start
428
432
  self.epoch_time_start = t
429
- with warnings.catch_warnings():
430
- warnings.simplefilter("ignore") # suppress 'Detected lr_scheduler.step() before optimizer.step()'
431
- if self.args.time:
432
- mean_epoch_time = (t - self.train_time_start) / (epoch - self.start_epoch + 1)
433
- self.epochs = self.args.epochs = math.ceil(self.args.time * 3600 / mean_epoch_time)
434
- self._setup_scheduler()
435
- self.scheduler.last_epoch = self.epoch # do not move
436
- self.stop |= epoch >= self.epochs # stop if exceeded epochs
437
- self.scheduler.step()
433
+ if self.args.time:
434
+ mean_epoch_time = (t - self.train_time_start) / (epoch - self.start_epoch + 1)
435
+ self.epochs = self.args.epochs = math.ceil(self.args.time * 3600 / mean_epoch_time)
436
+ self._setup_scheduler()
437
+ self.scheduler.last_epoch = self.epoch # do not move
438
+ self.stop |= epoch >= self.epochs # stop if exceeded epochs
438
439
  self.run_callbacks("on_fit_epoch_end")
439
440
  torch.cuda.empty_cache() # clear GPU memory at end of epoch, may help reduce CUDA out of memory errors
440
441
 
@@ -0,0 +1,187 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ from collections import defaultdict
4
+
5
+ import cv2
6
+
7
+ from ultralytics.utils.checks import check_imshow, check_requirements
8
+ from ultralytics.utils.plotting import Annotator, colors
9
+
10
+ check_requirements("shapely>=2.0.0")
11
+
12
+ from shapely.geometry import Point, Polygon
13
+
14
+
15
+ class QueueManager:
16
+ """A class to manage the queue management in real-time video stream based on their tracks."""
17
+
18
+ def __init__(self):
19
+ """Initializes the queue manager with default values for various tracking and counting parameters."""
20
+
21
+ # Mouse events
22
+ self.is_drawing = False
23
+ self.selected_point = None
24
+
25
+ # Region & Line Information
26
+ self.reg_pts = [(20, 60), (20, 680), (1120, 680), (1120, 60)]
27
+ self.counting_region = None
28
+ self.region_color = (255, 0, 255)
29
+ self.region_thickness = 5
30
+
31
+ # Image and annotation Information
32
+ self.im0 = None
33
+ self.tf = None
34
+ self.view_img = False
35
+ self.view_queue_counts = True
36
+ self.fontsize = 0.6
37
+
38
+ self.names = None # Classes names
39
+ self.annotator = None # Annotator
40
+ self.window_name = "Ultralytics YOLOv8 Queue Manager"
41
+
42
+ # Object counting Information
43
+ self.counts = 0
44
+ self.count_txt_color = (255, 255, 255)
45
+
46
+ # Tracks info
47
+ self.track_history = defaultdict(list)
48
+ self.track_thickness = 2
49
+ self.draw_tracks = False
50
+ self.track_color = None
51
+
52
+ # Check if environment support imshow
53
+ self.env_check = check_imshow(warn=True)
54
+
55
+ def set_args(
56
+ self,
57
+ classes_names,
58
+ reg_pts,
59
+ line_thickness=2,
60
+ track_thickness=2,
61
+ view_img=False,
62
+ region_color=(255, 0, 255),
63
+ view_queue_counts=True,
64
+ draw_tracks=False,
65
+ count_txt_color=(255, 255, 255),
66
+ track_color=None,
67
+ region_thickness=5,
68
+ fontsize=0.7,
69
+ ):
70
+ """
71
+ Configures the Counter's image, bounding box line thickness, and counting region points.
72
+
73
+ Args:
74
+ line_thickness (int): Line thickness for bounding boxes.
75
+ view_img (bool): Flag to control whether to display the video stream.
76
+ view_queue_counts (bool): Flag to control whether to display the counts on video stream.
77
+ reg_pts (list): Initial list of points defining the counting region.
78
+ classes_names (dict): Classes names
79
+ region_color (RGB color): Color of queue region
80
+ track_thickness (int): Track thickness
81
+ draw_tracks (Bool): draw tracks
82
+ count_txt_color (RGB color): count text color value
83
+ track_color (RGB color): color for tracks
84
+ region_thickness (int): Object counting Region thickness
85
+ fontsize (float): Text display font size
86
+ """
87
+ self.tf = line_thickness
88
+ self.view_img = view_img
89
+ self.view_queue_counts = view_queue_counts
90
+ self.track_thickness = track_thickness
91
+ self.draw_tracks = draw_tracks
92
+ self.region_color = region_color
93
+
94
+ if len(reg_pts) >= 3:
95
+ print("Queue region initiated...")
96
+ self.reg_pts = reg_pts
97
+ self.counting_region = Polygon(self.reg_pts)
98
+ else:
99
+ print("Invalid region points provided...")
100
+ print("Using default region now....")
101
+ self.counting_region = Polygon(self.reg_pts)
102
+
103
+ self.names = classes_names
104
+ self.track_color = track_color
105
+ self.count_txt_color = count_txt_color
106
+ self.region_thickness = region_thickness
107
+ self.fontsize = fontsize
108
+
109
+ def extract_and_process_tracks(self, tracks):
110
+ """Extracts and processes tracks for queue management in a video stream."""
111
+
112
+ # Annotator Init and queue region drawing
113
+ self.annotator = Annotator(self.im0, self.tf, self.names)
114
+
115
+ if tracks[0].boxes.id is not None:
116
+ boxes = tracks[0].boxes.xyxy.cpu()
117
+ clss = tracks[0].boxes.cls.cpu().tolist()
118
+ track_ids = tracks[0].boxes.id.int().cpu().tolist()
119
+
120
+ # Extract tracks
121
+ for box, track_id, cls in zip(boxes, track_ids, clss):
122
+ # Draw bounding box
123
+ self.annotator.box_label(box, label=f"{self.names[cls]}#{track_id}", color=colors(int(track_id), True))
124
+
125
+ # Draw Tracks
126
+ track_line = self.track_history[track_id]
127
+ track_line.append((float((box[0] + box[2]) / 2), float((box[1] + box[3]) / 2)))
128
+ if len(track_line) > 30:
129
+ track_line.pop(0)
130
+
131
+ # Draw track trails
132
+ if self.draw_tracks:
133
+ self.annotator.draw_centroid_and_tracks(
134
+ track_line,
135
+ color=self.track_color if self.track_color else colors(int(track_id), True),
136
+ track_thickness=self.track_thickness,
137
+ )
138
+
139
+ prev_position = self.track_history[track_id][-2] if len(self.track_history[track_id]) > 1 else None
140
+
141
+ if len(self.reg_pts) >= 3:
142
+ is_inside = self.counting_region.contains(Point(track_line[-1]))
143
+ if prev_position is not None and is_inside:
144
+ self.counts += 1
145
+
146
+ label = "Queue Counts : " + str(self.counts)
147
+
148
+ if label is not None:
149
+ self.annotator.queue_counts_display(
150
+ label,
151
+ points=self.reg_pts,
152
+ region_color=self.region_color,
153
+ txt_color=self.count_txt_color,
154
+ fontsize=self.fontsize,
155
+ )
156
+
157
+ self.counts = 0
158
+ self.display_frames()
159
+
160
+ def display_frames(self):
161
+ """Display frame."""
162
+ if self.env_check:
163
+ self.annotator.draw_region(reg_pts=self.reg_pts, thickness=self.region_thickness, color=self.region_color)
164
+ cv2.namedWindow(self.window_name)
165
+ cv2.imshow(self.window_name, self.im0)
166
+ # Break Window
167
+ if cv2.waitKey(1) & 0xFF == ord("q"):
168
+ return
169
+
170
+ def process_queue(self, im0, tracks):
171
+ """
172
+ Main function to start the queue management process.
173
+
174
+ Args:
175
+ im0 (ndarray): Current frame from the video stream.
176
+ tracks (list): List of tracks obtained from the object tracking process.
177
+ """
178
+ self.im0 = im0 # store image
179
+ self.extract_and_process_tracks(tracks) # draw region even if no objects
180
+
181
+ if self.view_img:
182
+ self.display_frames()
183
+ return self.im0
184
+
185
+
186
+ if __name__ == "__main__":
187
+ QueueManager()
@@ -230,37 +230,42 @@ def plt_settings(rcparams=None, backend="Agg"):
230
230
  return decorator
231
231
 
232
232
 
233
- def set_logging(name=LOGGING_NAME, verbose=True):
234
- """Sets up logging for the given name with UTF-8 encoding support."""
233
+ def set_logging(name="LOGGING_NAME", verbose=True):
234
+ """Sets up logging for the given name with UTF-8 encoding support, ensuring compatibility across different
235
+ environments.
236
+ """
235
237
  level = logging.INFO if verbose and RANK in {-1, 0} else logging.ERROR # rank in world for Multi-GPU trainings
236
238
 
237
- # Configure the console (stdout) encoding to UTF-8
239
+ # Configure the console (stdout) encoding to UTF-8, with checks for compatibility
238
240
  formatter = logging.Formatter("%(message)s") # Default formatter
239
- if WINDOWS and sys.stdout.encoding != "utf-8":
241
+ if WINDOWS and hasattr(sys.stdout, "encoding") and sys.stdout.encoding != "utf-8":
242
+
243
+ class CustomFormatter(logging.Formatter):
244
+ def format(self, record):
245
+ """Sets up logging with UTF-8 encoding and configurable verbosity."""
246
+ return emojis(super().format(record))
247
+
240
248
  try:
249
+ # Attempt to reconfigure stdout to use UTF-8 encoding if possible
241
250
  if hasattr(sys.stdout, "reconfigure"):
242
251
  sys.stdout.reconfigure(encoding="utf-8")
252
+ # For environments where reconfigure is not available, wrap stdout in a TextIOWrapper
243
253
  elif hasattr(sys.stdout, "buffer"):
244
254
  import io
245
255
 
246
256
  sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
247
257
  else:
248
- sys.stdout.encoding = "utf-8"
258
+ formatter = CustomFormatter("%(message)s")
249
259
  except Exception as e:
250
260
  print(f"Creating custom formatter for non UTF-8 environments due to {e}")
261
+ formatter = CustomFormatter("%(message)s")
251
262
 
252
- class CustomFormatter(logging.Formatter):
253
- def format(self, record):
254
- """Sets up logging with UTF-8 encoding and configurable verbosity."""
255
- return emojis(super().format(record))
256
-
257
- formatter = CustomFormatter("%(message)s") # Use CustomFormatter to eliminate UTF-8 output as last recourse
258
-
259
- # Create and configure the StreamHandler
263
+ # Create and configure the StreamHandler with the appropriate formatter and level
260
264
  stream_handler = logging.StreamHandler(sys.stdout)
261
265
  stream_handler.setFormatter(formatter)
262
266
  stream_handler.setLevel(level)
263
267
 
268
+ # Set up the logger
264
269
  logger = logging.getLogger(name)
265
270
  logger.setLevel(level)
266
271
  logger.addHandler(stream_handler)
@@ -363,6 +363,38 @@ class Annotator:
363
363
  cv2.polylines(self.im, [points], isClosed=False, color=color, thickness=track_thickness)
364
364
  cv2.circle(self.im, (int(track[-1][0]), int(track[-1][1])), track_thickness * 2, color, -1)
365
365
 
366
+ def queue_counts_display(self, label, points=None, region_color=(255, 255, 255), txt_color=(0, 0, 0), fontsize=0.7):
367
+ """Displays queue counts on an image centered at the points with customizable font size and colors."""
368
+ x_values = [point[0] for point in points]
369
+ y_values = [point[1] for point in points]
370
+ center_x = sum(x_values) // len(points)
371
+ center_y = sum(y_values) // len(points)
372
+
373
+ text_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, fontScale=fontsize, thickness=self.tf)[0]
374
+ text_width = text_size[0]
375
+ text_height = text_size[1]
376
+
377
+ rect_width = text_width + 20
378
+ rect_height = text_height + 20
379
+ rect_top_left = (center_x - rect_width // 2, center_y - rect_height // 2)
380
+ rect_bottom_right = (center_x + rect_width // 2, center_y + rect_height // 2)
381
+ cv2.rectangle(self.im, rect_top_left, rect_bottom_right, region_color, -1)
382
+
383
+ text_x = center_x - text_width // 2
384
+ text_y = center_y + text_height // 2
385
+
386
+ # Draw text
387
+ cv2.putText(
388
+ self.im,
389
+ label,
390
+ (text_x, text_y),
391
+ cv2.FONT_HERSHEY_SIMPLEX,
392
+ fontScale=fontsize,
393
+ color=txt_color,
394
+ thickness=self.tf,
395
+ lineType=cv2.LINE_AA,
396
+ )
397
+
366
398
  def display_counts(
367
399
  self, counts=None, tf=2, fontScale=0.6, line_color=(0, 0, 0), txt_color=(255, 255, 255), classwise_txtgap=55
368
400
  ):
@@ -16,7 +16,7 @@ import torch.nn as nn
16
16
  import torch.nn.functional as F
17
17
  import torchvision
18
18
 
19
- from ultralytics.utils import DEFAULT_CFG_DICT, DEFAULT_CFG_KEYS, LOGGER, __version__
19
+ from ultralytics.utils import DEFAULT_CFG_DICT, DEFAULT_CFG_KEYS, LOGGER, colorstr, __version__
20
20
  from ultralytics.utils.checks import PYTHON_VERSION, check_version
21
21
 
22
22
  try:
@@ -614,8 +614,9 @@ class EarlyStopping:
614
614
  self.possible_stop = delta >= (self.patience - 1) # possible stop may occur next epoch
615
615
  stop = delta >= self.patience # stop training if patience exceeded
616
616
  if stop:
617
+ prefix = colorstr("EarlyStopping: ")
617
618
  LOGGER.info(
618
- f"Stopping training early as no improvement observed in last {self.patience} epochs. "
619
+ f"{prefix}Training stopped early as no improvement observed in last {self.patience} epochs. "
619
620
  f"Best results observed at epoch {self.best_epoch}, best model saved as best.pt.\n"
620
621
  f"To update EarlyStopping(patience={self.patience}) pass a new patience value, "
621
622
  f"i.e. `patience=300` or use `patience=0` to disable EarlyStopping."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.1.41
3
+ Version: 8.1.42
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -62,6 +62,7 @@ Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_versio
62
62
  Requires-Dist: openvino>=2024.0.0; extra == "export"
63
63
  Requires-Dist: tensorflow<=2.13.1; python_version <= "3.11" and extra == "export"
64
64
  Requires-Dist: tensorflowjs>=3.9.0; python_version <= "3.11" and extra == "export"
65
+ Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
65
66
  Provides-Extra: explorer
66
67
  Requires-Dist: lancedb; extra == "explorer"
67
68
  Requires-Dist: duckdb<=0.9.2; extra == "explorer"
@@ -71,7 +71,9 @@ ultralytics/cfg/models/v8/yolov8-seg.yaml
71
71
  ultralytics/cfg/models/v8/yolov8-world.yaml
72
72
  ultralytics/cfg/models/v8/yolov8-worldv2.yaml
73
73
  ultralytics/cfg/models/v8/yolov8.yaml
74
+ ultralytics/cfg/models/v9/yolov9c-seg.yaml
74
75
  ultralytics/cfg/models/v9/yolov9c.yaml
76
+ ultralytics/cfg/models/v9/yolov9e-seg.yaml
75
77
  ultralytics/cfg/models/v9/yolov9e.yaml
76
78
  ultralytics/cfg/trackers/botsort.yaml
77
79
  ultralytics/cfg/trackers/bytetrack.yaml
@@ -171,6 +173,7 @@ ultralytics/solutions/ai_gym.py
171
173
  ultralytics/solutions/distance_calculation.py
172
174
  ultralytics/solutions/heatmap.py
173
175
  ultralytics/solutions/object_counter.py
176
+ ultralytics/solutions/queue_management.py
174
177
  ultralytics/solutions/speed_estimation.py
175
178
  ultralytics/trackers/__init__.py
176
179
  ultralytics/trackers/basetrack.py
@@ -35,6 +35,9 @@ streamlit
35
35
  onnx>=1.12.0
36
36
  openvino>=2024.0.0
37
37
 
38
+ [export:platform_machine == "aarch64"]
39
+ numpy==1.23.5
40
+
38
41
  [export:platform_system != "Windows" and python_version <= "3.11"]
39
42
  coremltools>=7.0
40
43
 
File without changes
File without changes
File without changes