ultralytics 8.3.104__tar.gz → 8.3.106__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 (265) hide show
  1. {ultralytics-8.3.104/ultralytics.egg-info → ultralytics-8.3.106}/PKG-INFO +1 -1
  2. {ultralytics-8.3.104 → ultralytics-8.3.106}/pyproject.toml +1 -1
  3. {ultralytics-8.3.104 → ultralytics-8.3.106}/tests/test_python.py +1 -1
  4. {ultralytics-8.3.104 → ultralytics-8.3.106}/tests/test_solutions.py +1 -1
  5. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/__init__.py +19 -17
  7. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/default.yaml +0 -1
  8. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/exporter.py +8 -7
  9. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/detect/val.py +0 -16
  10. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/modules/head.py +7 -5
  11. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/object_counter.py +2 -1
  12. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/solutions.py +1 -3
  13. {ultralytics-8.3.104 → ultralytics-8.3.106/ultralytics.egg-info}/PKG-INFO +1 -1
  14. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics.egg-info/SOURCES.txt +0 -9
  15. ultralytics-8.3.104/tests/__init__.py +0 -22
  16. ultralytics-8.3.104/tests/conftest.py +0 -83
  17. {ultralytics-8.3.104 → ultralytics-8.3.106}/LICENSE +0 -0
  18. {ultralytics-8.3.104 → ultralytics-8.3.106}/README.md +0 -0
  19. {ultralytics-8.3.104 → ultralytics-8.3.106}/setup.cfg +0 -0
  20. {ultralytics-8.3.104 → ultralytics-8.3.106}/tests/test_cli.py +0 -0
  21. {ultralytics-8.3.104 → ultralytics-8.3.106}/tests/test_cuda.py +0 -0
  22. {ultralytics-8.3.104 → ultralytics-8.3.106}/tests/test_engine.py +0 -0
  23. {ultralytics-8.3.104 → ultralytics-8.3.106}/tests/test_exports.py +0 -0
  24. {ultralytics-8.3.104 → ultralytics-8.3.106}/tests/test_integrations.py +0 -0
  25. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/assets/bus.jpg +0 -0
  26. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/assets/zidane.jpg +0 -0
  27. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  28. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  29. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  30. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  31. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  32. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  33. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  34. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  35. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  36. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  37. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  38. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  39. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  40. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/coco.yaml +0 -0
  41. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  42. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  43. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  44. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  45. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  46. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  47. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  48. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  49. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  50. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  51. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  52. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  53. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  54. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/signature.yaml +0 -0
  55. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  56. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/datasets/xView.yaml +0 -0
  57. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  58. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  59. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  60. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  61. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  62. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  63. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  64. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  65. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  66. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  67. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  68. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  69. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  70. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  71. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  72. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  73. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  74. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  75. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  76. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  77. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  78. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  79. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  80. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  81. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  82. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  83. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  84. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  85. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  86. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  87. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  88. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  89. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  90. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  91. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  92. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  93. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  94. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  95. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  96. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  97. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  98. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  99. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  100. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  101. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  102. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  103. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  104. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  105. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  106. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  107. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  108. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  109. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  110. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  111. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  112. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/solutions/default.yaml +0 -0
  113. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  114. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  115. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/__init__.py +0 -0
  116. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/annotator.py +0 -0
  117. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/augment.py +0 -0
  118. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/base.py +0 -0
  119. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/build.py +0 -0
  120. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/converter.py +0 -0
  121. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/dataset.py +0 -0
  122. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/loaders.py +0 -0
  123. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/split_dota.py +0 -0
  124. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/data/utils.py +0 -0
  125. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/__init__.py +0 -0
  126. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/model.py +0 -0
  127. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/predictor.py +0 -0
  128. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/results.py +0 -0
  129. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/trainer.py +0 -0
  130. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/tuner.py +0 -0
  131. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/engine/validator.py +0 -0
  132. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/hub/__init__.py +0 -0
  133. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/hub/auth.py +0 -0
  134. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/hub/google/__init__.py +0 -0
  135. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/hub/session.py +0 -0
  136. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/hub/utils.py +0 -0
  137. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/__init__.py +0 -0
  138. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/fastsam/__init__.py +0 -0
  139. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/fastsam/model.py +0 -0
  140. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/fastsam/predict.py +0 -0
  141. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/fastsam/utils.py +0 -0
  142. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/fastsam/val.py +0 -0
  143. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/nas/__init__.py +0 -0
  144. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/nas/model.py +0 -0
  145. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/nas/predict.py +0 -0
  146. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/nas/val.py +0 -0
  147. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/rtdetr/__init__.py +0 -0
  148. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/rtdetr/model.py +0 -0
  149. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/rtdetr/predict.py +0 -0
  150. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/rtdetr/train.py +0 -0
  151. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/rtdetr/val.py +0 -0
  152. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/__init__.py +0 -0
  153. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/amg.py +0 -0
  154. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/build.py +0 -0
  155. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/model.py +0 -0
  156. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/__init__.py +0 -0
  157. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/blocks.py +0 -0
  158. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/decoders.py +0 -0
  159. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/encoders.py +0 -0
  160. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  161. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/sam.py +0 -0
  162. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  163. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/transformer.py +0 -0
  164. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/modules/utils.py +0 -0
  165. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/sam/predict.py +0 -0
  166. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/utils/__init__.py +0 -0
  167. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/utils/loss.py +0 -0
  168. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/utils/ops.py +0 -0
  169. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/__init__.py +0 -0
  170. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/classify/__init__.py +0 -0
  171. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/classify/predict.py +0 -0
  172. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/classify/train.py +0 -0
  173. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/classify/val.py +0 -0
  174. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/detect/__init__.py +0 -0
  175. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/detect/predict.py +0 -0
  176. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/detect/train.py +0 -0
  177. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/model.py +0 -0
  178. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/obb/__init__.py +0 -0
  179. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/obb/predict.py +0 -0
  180. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/obb/train.py +0 -0
  181. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/obb/val.py +0 -0
  182. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/pose/__init__.py +0 -0
  183. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/pose/predict.py +0 -0
  184. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/pose/train.py +0 -0
  185. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/pose/val.py +0 -0
  186. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/segment/__init__.py +0 -0
  187. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/segment/predict.py +0 -0
  188. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/segment/train.py +0 -0
  189. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/segment/val.py +0 -0
  190. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/world/__init__.py +0 -0
  191. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/world/train.py +0 -0
  192. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/world/train_world.py +0 -0
  193. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  194. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  195. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/yoloe/train.py +0 -0
  196. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  197. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/models/yolo/yoloe/val.py +0 -0
  198. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/__init__.py +0 -0
  199. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/autobackend.py +0 -0
  200. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/modules/__init__.py +0 -0
  201. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/modules/activation.py +0 -0
  202. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/modules/block.py +0 -0
  203. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/modules/conv.py +0 -0
  204. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/modules/transformer.py +0 -0
  205. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/modules/utils.py +0 -0
  206. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/tasks.py +0 -0
  207. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/nn/text_model.py +0 -0
  208. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/__init__.py +0 -0
  209. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/ai_gym.py +0 -0
  210. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/analytics.py +0 -0
  211. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/distance_calculation.py +0 -0
  212. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/heatmap.py +0 -0
  213. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/instance_segmentation.py +0 -0
  214. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/object_blurrer.py +0 -0
  215. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/object_cropper.py +0 -0
  216. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/parking_management.py +0 -0
  217. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/queue_management.py +0 -0
  218. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/region_counter.py +0 -0
  219. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/security_alarm.py +0 -0
  220. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/speed_estimation.py +0 -0
  221. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/streamlit_inference.py +0 -0
  222. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/trackzone.py +0 -0
  223. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/solutions/vision_eye.py +0 -0
  224. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/__init__.py +0 -0
  225. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/basetrack.py +0 -0
  226. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/bot_sort.py +0 -0
  227. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/byte_tracker.py +0 -0
  228. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/track.py +0 -0
  229. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/utils/__init__.py +0 -0
  230. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/utils/gmc.py +0 -0
  231. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  232. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/trackers/utils/matching.py +0 -0
  233. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/__init__.py +0 -0
  234. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/autobatch.py +0 -0
  235. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/benchmarks.py +0 -0
  236. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/__init__.py +0 -0
  237. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/base.py +0 -0
  238. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/clearml.py +0 -0
  239. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/comet.py +0 -0
  240. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/dvc.py +0 -0
  241. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/hub.py +0 -0
  242. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/mlflow.py +0 -0
  243. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/neptune.py +0 -0
  244. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/raytune.py +0 -0
  245. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  246. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/callbacks/wb.py +0 -0
  247. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/checks.py +0 -0
  248. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/dist.py +0 -0
  249. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/downloads.py +0 -0
  250. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/errors.py +0 -0
  251. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/files.py +0 -0
  252. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/instance.py +0 -0
  253. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/loss.py +0 -0
  254. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/metrics.py +0 -0
  255. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/ops.py +0 -0
  256. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/patches.py +0 -0
  257. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/plotting.py +0 -0
  258. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/tal.py +0 -0
  259. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/torch_utils.py +0 -0
  260. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/triton.py +0 -0
  261. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics/utils/tuner.py +0 -0
  262. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics.egg-info/dependency_links.txt +0 -0
  263. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics.egg-info/entry_points.txt +0 -0
  264. {ultralytics-8.3.104 → ultralytics-8.3.106}/ultralytics.egg-info/requires.txt +0 -0
  265. {ultralytics-8.3.104 → ultralytics-8.3.106}/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.104
3
+ Version: 8.3.106
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>
@@ -134,7 +134,7 @@ ultralytics = "ultralytics.cfg:entrypoint"
134
134
  # Tools settings -------------------------------------------------------------------------------------------------------
135
135
  [tool.setuptools] # configuration specific to the `setuptools` build backend.
136
136
  packages = { find = { where = ["."], include = ["ultralytics", "ultralytics.*"] } }
137
- package-data = { "ultralytics" = ["**/*.yaml", "../tests/*.py"], "ultralytics.assets" = ["*.jpg"] }
137
+ package-data = { "ultralytics" = ["**/*.yaml"], "ultralytics.assets" = ["*.jpg"] }
138
138
 
139
139
  [tool.setuptools.dynamic]
140
140
  version = { attr = "ultralytics.__version__" }
@@ -199,7 +199,7 @@ def test_track_stream():
199
199
 
200
200
  def test_val():
201
201
  """Test the validation mode of the YOLO model."""
202
- YOLO(MODEL).val(data="coco8.yaml", imgsz=32, save_hybrid=True)
202
+ YOLO(MODEL).val(data="coco8.yaml", imgsz=32)
203
203
 
204
204
 
205
205
  def test_train_scratch():
@@ -20,7 +20,7 @@ PARKING_VIDEO = "solution_ci_parking_demo.mp4" # only for parking management so
20
20
  PARKING_AREAS_JSON = "solution_ci_parking_areas.json" # only for parking management solution
21
21
  PARKING_MODEL = "solutions_ci_parking_model.pt" # only for parking management solution
22
22
  MODEL_FILE = "yolo11n.pt" # model file used for solutions, except parking management and instance segmentation
23
- REGION = [(20, 400), (1080, 400), (1080, 360), (20, 360)] # for object counting, speed estimation and queue management
23
+ REGION = [(10, 200), (540, 200), (540, 180), (10, 180)] # for object counting, speed estimation and queue management
24
24
 
25
25
  # Test configs for each solution : (name, class, needs_frame_count, video, kwargs)
26
26
  SOLUTIONS = [
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.104"
3
+ __version__ = "8.3.106"
4
4
 
5
5
  import os
6
6
 
@@ -214,7 +214,6 @@ CFG_BOOL_KEYS = frozenset(
214
214
  "overlap_mask",
215
215
  "val",
216
216
  "save_json",
217
- "save_hybrid",
218
217
  "half",
219
218
  "dnn",
220
219
  "plots",
@@ -437,22 +436,25 @@ def _handle_deprecation(custom: Dict) -> Dict:
437
436
  equivalents. It also handles value conversions where necessary, such as inverting boolean values for
438
437
  'hide_labels' and 'hide_conf'.
439
438
  """
440
- for key in custom.copy().keys():
441
- if key == "boxes":
442
- deprecation_warn(key, "show_boxes")
443
- custom["show_boxes"] = custom.pop("boxes")
444
- if key == "hide_labels":
445
- deprecation_warn(key, "show_labels")
446
- custom["show_labels"] = custom.pop("hide_labels") == "False"
447
- if key == "hide_conf":
448
- deprecation_warn(key, "show_conf")
449
- custom["show_conf"] = custom.pop("hide_conf") == "False"
450
- if key == "line_thickness":
451
- deprecation_warn(key, "line_width")
452
- custom["line_width"] = custom.pop("line_thickness")
453
- if key == "label_smoothing":
454
- deprecation_warn(key)
455
- custom.pop("label_smoothing")
439
+ deprecated_mappings = {
440
+ "boxes": ("show_boxes", lambda v: v),
441
+ "hide_labels": ("show_labels", lambda v: not bool(v)),
442
+ "hide_conf": ("show_conf", lambda v: not bool(v)),
443
+ "line_thickness": ("line_width", lambda v: v),
444
+ }
445
+ removed_keys = {"label_smoothing", "save_hybrid"}
446
+
447
+ for old_key, (new_key, transform) in deprecated_mappings.items():
448
+ if old_key not in custom:
449
+ continue
450
+ deprecation_warn(old_key, new_key)
451
+ custom[new_key] = transform(custom.pop(old_key))
452
+
453
+ for key in removed_keys:
454
+ if key not in custom:
455
+ continue
456
+ deprecation_warn(key)
457
+ custom.pop(key)
456
458
 
457
459
  return custom
458
460
 
@@ -47,7 +47,6 @@ dropout: 0.0 # (float) use dropout regularization (classify train only)
47
47
  val: True # (bool) validate/test during training
48
48
  split: val # (str) dataset split to use for validation, i.e. 'val', 'test' or 'train'
49
49
  save_json: False # (bool) save results to JSON file
50
- save_hybrid: False # (bool) save hybrid version of labels (labels + additional predictions)
51
50
  conf: # (float, optional) object confidence threshold for detection (default 0.25 predict, 0.001 val)
52
51
  iou: 0.7 # (float) intersection over union (IoU) threshold for NMS
53
52
  max_det: 300 # (int) maximum number of detections per image
@@ -86,7 +86,6 @@ from ultralytics.utils import (
86
86
  LINUX,
87
87
  LOGGER,
88
88
  MACOS,
89
- PYTHON_VERSION,
90
89
  RKNN_CHIPS,
91
90
  ROOT,
92
91
  WINDOWS,
@@ -795,7 +794,7 @@ class Exporter:
795
794
  def export_coreml(self, prefix=colorstr("CoreML:")):
796
795
  """YOLO CoreML export."""
797
796
  mlmodel = self.args.format.lower() == "mlmodel" # legacy *.mlmodel export format requested
798
- check_requirements("coremltools>=6.0,<=6.2" if mlmodel else "coremltools>=8.0")
797
+ check_requirements("coremltools>=8.0")
799
798
  import coremltools as ct # noqa
800
799
 
801
800
  LOGGER.info(f"\n{prefix} starting export with coremltools {ct.__version__}...")
@@ -819,11 +818,15 @@ class Exporter:
819
818
  # TODO CoreML Segment and Pose model pipelining
820
819
  model = self.model
821
820
  ts = torch.jit.trace(model.eval(), self.im, strict=False) # TorchScript model
821
+
822
+ # Based on apple's documentation it is better to leave out the minimum_deployment target and let that get set
823
+ # Internally based on the model conversion and output type.
824
+ # Setting minimum_depoloyment_target >= iOS16 will require setting compute_precision=ct.precision.FLOAT32.
825
+ # iOS16 adds in better support for FP16, but none of the CoreML NMS specifications handle FP16 as input.
822
826
  ct_model = ct.convert(
823
827
  ts,
824
828
  inputs=[ct.ImageType("image", shape=self.im.shape, scale=scale, bias=bias)], # expects ct.TensorType
825
829
  classifier_config=classifier_config,
826
- minimum_deployment_target=ct.target.iOS15, # warning: >=16 causes pipeline errors
827
830
  convert_to="neuralnetwork" if mlmodel else "mlprogram",
828
831
  )
829
832
  bits, mode = (8, "kmeans") if self.args.int8 else (16, "linear") if self.args.half else (32, None)
@@ -840,8 +843,6 @@ class Exporter:
840
843
  ct_model = cto.palettize_weights(ct_model, config=config)
841
844
  if self.args.nms and self.model.task == "detect":
842
845
  if mlmodel:
843
- # coremltools<=6.2 NMS export requires Python<3.11
844
- check_version(PYTHON_VERSION, "<3.11", name="Python ", hard=True)
845
846
  weights_dir = None
846
847
  else:
847
848
  ct_model.save(str(f)) # save otherwise weights_dir does not exist
@@ -1469,7 +1470,7 @@ class Exporter:
1469
1470
 
1470
1471
  # 3. Create NMS protobuf
1471
1472
  nms_spec = ct.proto.Model_pb2.Model()
1472
- nms_spec.specificationVersion = 9
1473
+ nms_spec.specificationVersion = spec.specificationVersion
1473
1474
  for i in range(2):
1474
1475
  decoder_output = model._spec.description.output[i].SerializeToString()
1475
1476
  nms_spec.description.input.add()
@@ -1522,7 +1523,7 @@ class Exporter:
1522
1523
  pipeline.spec.description.output[1].ParseFromString(nms_model._spec.description.output[1].SerializeToString())
1523
1524
 
1524
1525
  # Update metadata
1525
- pipeline.spec.specificationVersion = 9
1526
+ pipeline.spec.specificationVersion = spec.specificationVersion
1526
1527
  pipeline.spec.description.metadata.userDefined.update(
1527
1528
  {"IoU threshold": str(nms.iouThreshold), "Confidence threshold": str(nms.confidenceThreshold)}
1528
1529
  )
@@ -62,12 +62,6 @@ class DetectionValidator(BaseValidator):
62
62
  self.metrics = DetMetrics(save_dir=self.save_dir)
63
63
  self.iouv = torch.linspace(0.5, 0.95, 10) # IoU vector for mAP@0.5:0.95
64
64
  self.niou = self.iouv.numel()
65
- self.lb = [] # for autolabelling
66
- if self.args.save_hybrid and self.args.task == "detect":
67
- LOGGER.warning(
68
- "WARNING ⚠️ 'save_hybrid=True' will append ground truth to predictions for autolabelling.\n"
69
- "WARNING ⚠️ 'save_hybrid=True' will cause incorrect mAP.\n"
70
- )
71
65
 
72
66
  def preprocess(self, batch):
73
67
  """
@@ -84,15 +78,6 @@ class DetectionValidator(BaseValidator):
84
78
  for k in ["batch_idx", "cls", "bboxes"]:
85
79
  batch[k] = batch[k].to(self.device)
86
80
 
87
- if self.args.save_hybrid and self.args.task == "detect":
88
- height, width = batch["img"].shape[2:]
89
- nb = len(batch["img"])
90
- bboxes = batch["bboxes"] * torch.tensor((width, height, width, height), device=self.device)
91
- self.lb = [
92
- torch.cat([batch["cls"][batch["batch_idx"] == i], bboxes[batch["batch_idx"] == i]], dim=-1)
93
- for i in range(nb)
94
- ]
95
-
96
81
  return batch
97
82
 
98
83
  def init_metrics(self, model):
@@ -139,7 +124,6 @@ class DetectionValidator(BaseValidator):
139
124
  preds,
140
125
  self.args.conf,
141
126
  self.args.iou,
142
- labels=self.lb,
143
127
  nc=self.nc,
144
128
  multi_label=True,
145
129
  agnostic=self.args.single_cls or self.args.agnostic_nms,
@@ -369,8 +369,8 @@ class LRPCHead(nn.Module):
369
369
  if self.enabled:
370
370
  pf_score = self.pf(cls_feat)[0, 0].flatten(0)
371
371
  mask = pf_score.sigmoid() > conf
372
-
373
- cls_feat = self.vocab(cls_feat.flatten(2).transpose(-1, -2)[:, mask])
372
+ cls_feat = cls_feat.flatten(2).transpose(-1, -2)
373
+ cls_feat = self.vocab(cls_feat * mask.unsqueeze(-1).int() if not conf else cls_feat[:, mask])
374
374
  return (self.loc(loc_feat), cls_feat.transpose(-1, -2)), mask
375
375
  else:
376
376
  cls_feat = self.vocab(cls_feat)
@@ -478,7 +478,9 @@ class YOLOEDetect(Detect):
478
478
  cls_feat = self.cv3[i](x[i])
479
479
  loc_feat = self.cv2[i](x[i])
480
480
  assert isinstance(self.lrpc[i], LRPCHead)
481
- x[i], mask = self.lrpc[i](cls_feat, loc_feat, getattr(self, "conf", 0.001))
481
+ x[i], mask = self.lrpc[i](
482
+ cls_feat, loc_feat, 0 if self.export and not self.dynamic else getattr(self, "conf", 0.001)
483
+ )
482
484
  masks.append(mask)
483
485
  shape = x[0][0].shape
484
486
  if self.dynamic or self.shape != shape:
@@ -499,7 +501,7 @@ class YOLOEDetect(Detect):
499
501
  dbox = self.decode_bboxes(self.dfl(box), self.anchors.unsqueeze(0)) * self.strides
500
502
 
501
503
  mask = torch.cat(masks)
502
- y = torch.cat((dbox[:, :, mask], cls.sigmoid()), 1)
504
+ y = torch.cat((dbox if self.export and not self.dynamic else dbox[..., mask], cls.sigmoid()), 1)
503
505
 
504
506
  if return_mask:
505
507
  return (y, mask) if self.export else ((y, x), mask)
@@ -560,7 +562,7 @@ class YOLOESegment(YOLOEDetect):
560
562
  return x, mc, p
561
563
 
562
564
  if has_lrpc:
563
- mc = mc[:, :, mask]
565
+ mc = (mc * mask.int()) if self.export and not self.dynamic else mc[..., mask]
564
566
 
565
567
  return (torch.cat([x, mc], 1), p) if self.export else (torch.cat([x[0], mc], 1), (x[1], mc, p))
566
568
 
@@ -45,6 +45,7 @@ class ObjectCounter(BaseSolution):
45
45
 
46
46
  self.show_in = self.CFG["show_in"]
47
47
  self.show_out = self.CFG["show_out"]
48
+ self.margin = self.line_width * 2 # Scales the background rectangle size to display counts properly
48
49
 
49
50
  def count_objects(self, current_centroid, track_id, prev_position, cls):
50
51
  """
@@ -144,7 +145,7 @@ class ObjectCounter(BaseSolution):
144
145
  if value["IN"] != 0 or value["OUT"] != 0
145
146
  }
146
147
  if labels_dict:
147
- self.annotator.display_analytics(plot_im, labels_dict, (104, 31, 17), (255, 255, 255), 10)
148
+ self.annotator.display_analytics(plot_im, labels_dict, (104, 31, 17), (255, 255, 255), self.margin)
148
149
 
149
150
  def process(self, im0):
150
151
  """
@@ -79,9 +79,7 @@ class BaseSolution:
79
79
  self.LOGGER.info(f"Ultralytics Solutions: ✅ {DEFAULT_SOL_DICT}")
80
80
 
81
81
  self.region = self.CFG["region"] # Store region data for other classes usage
82
- self.line_width = (
83
- self.CFG["line_width"] if self.CFG["line_width"] is not None else 2
84
- ) # Store line_width for usage
82
+ self.line_width = self.CFG["line_width"] if self.CFG["line_width"] not in (None, 0) else 2 # Store line_width
85
83
 
86
84
  # Load Model and store classes names
87
85
  if self.CFG["model"] is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.104
3
+ Version: 8.3.106
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>
@@ -15,15 +15,6 @@ ultralytics.egg-info/dependency_links.txt
15
15
  ultralytics.egg-info/entry_points.txt
16
16
  ultralytics.egg-info/requires.txt
17
17
  ultralytics.egg-info/top_level.txt
18
- ultralytics/../tests/__init__.py
19
- ultralytics/../tests/conftest.py
20
- ultralytics/../tests/test_cli.py
21
- ultralytics/../tests/test_cuda.py
22
- ultralytics/../tests/test_engine.py
23
- ultralytics/../tests/test_exports.py
24
- ultralytics/../tests/test_integrations.py
25
- ultralytics/../tests/test_python.py
26
- ultralytics/../tests/test_solutions.py
27
18
  ultralytics/assets/bus.jpg
28
19
  ultralytics/assets/zidane.jpg
29
20
  ultralytics/cfg/__init__.py
@@ -1,22 +0,0 @@
1
- # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
-
3
- from ultralytics.utils import ASSETS, ROOT, WEIGHTS_DIR, checks
4
-
5
- # Constants used in tests
6
- MODEL = WEIGHTS_DIR / "path with spaces" / "yolo11n.pt" # test spaces in path
7
- CFG = "yolo11n.yaml"
8
- SOURCE = ASSETS / "bus.jpg"
9
- SOURCES_LIST = [ASSETS / "bus.jpg", ASSETS, ASSETS / "*", ASSETS / "**/*.jpg"]
10
- TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
11
- CUDA_IS_AVAILABLE = checks.cuda_is_available()
12
- CUDA_DEVICE_COUNT = checks.cuda_device_count()
13
-
14
- __all__ = (
15
- "MODEL",
16
- "CFG",
17
- "SOURCE",
18
- "SOURCES_LIST",
19
- "TMP",
20
- "CUDA_IS_AVAILABLE",
21
- "CUDA_DEVICE_COUNT",
22
- )
@@ -1,83 +0,0 @@
1
- # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
-
3
- import shutil
4
- from pathlib import Path
5
-
6
- from tests import TMP
7
-
8
-
9
- def pytest_addoption(parser):
10
- """
11
- Add custom command-line options to pytest.
12
-
13
- Args:
14
- parser (pytest.config.Parser): The pytest parser object for adding custom command-line options.
15
-
16
- Returns:
17
- (None)
18
- """
19
- parser.addoption("--slow", action="store_true", default=False, help="Run slow tests")
20
-
21
-
22
- def pytest_collection_modifyitems(config, items):
23
- """
24
- Modify the list of test items to exclude tests marked as slow if the --slow option is not specified.
25
-
26
- Args:
27
- config (pytest.config.Config): The pytest configuration object that provides access to command-line options.
28
- items (list): The list of collected pytest item objects to be modified based on the presence of --slow option.
29
-
30
- Returns:
31
- (None): The function modifies the 'items' list in place.
32
- """
33
- if not config.getoption("--slow"):
34
- # Remove the item entirely from the list of test items if it's marked as 'slow'
35
- items[:] = [item for item in items if "slow" not in item.keywords]
36
-
37
-
38
- def pytest_sessionstart(session):
39
- """
40
- Initialize session configurations for pytest.
41
-
42
- This function is automatically called by pytest after the 'Session' object has been created but before performing
43
- test collection. It sets the initial seeds and prepares the temporary directory for the test session.
44
-
45
- Args:
46
- session (pytest.Session): The pytest session object.
47
-
48
- Returns:
49
- (None)
50
- """
51
- from ultralytics.utils.torch_utils import init_seeds
52
-
53
- init_seeds()
54
- shutil.rmtree(TMP, ignore_errors=True) # delete any existing tests/tmp directory
55
- TMP.mkdir(parents=True, exist_ok=True) # create a new empty directory
56
-
57
-
58
- def pytest_terminal_summary(terminalreporter, exitstatus, config):
59
- """
60
- Cleanup operations after pytest session.
61
-
62
- This function is automatically called by pytest at the end of the entire test session. It removes certain files
63
- and directories used during testing.
64
-
65
- Args:
66
- terminalreporter (pytest.terminal.TerminalReporter): The terminal reporter object used for terminal output.
67
- exitstatus (int): The exit status of the test run.
68
- config (pytest.config.Config): The pytest config object.
69
-
70
- Returns:
71
- (None)
72
- """
73
- from ultralytics.utils import WEIGHTS_DIR
74
-
75
- # Remove files
76
- models = [path for x in ["*.onnx", "*.torchscript"] for path in WEIGHTS_DIR.rglob(x)]
77
- for file in ["decelera_portrait_min.mov", "bus.jpg", "yolo11n.onnx", "yolo11n.torchscript"] + models:
78
- Path(file).unlink(missing_ok=True)
79
-
80
- # Remove directories
81
- models = [path for x in ["*.mlpackage", "*_openvino_model"] for path in WEIGHTS_DIR.rglob(x)]
82
- for directory in [WEIGHTS_DIR / "path with spaces", TMP.parents[1] / ".pytest_cache", TMP] + models:
83
- shutil.rmtree(directory, ignore_errors=True)
File without changes
File without changes
File without changes