ultralytics 8.3.131__tar.gz → 8.3.133__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 (277) hide show
  1. {ultralytics-8.3.131/ultralytics.egg-info → ultralytics-8.3.133}/PKG-INFO +1 -1
  2. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/test_cuda.py +16 -10
  3. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/__init__.py +1 -1
  4. ultralytics-8.3.133/ultralytics/cfg/datasets/HomeObjects-3K.yaml +33 -0
  5. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/dataset.py +5 -3
  6. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/exporter.py +10 -2
  7. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/model.py +1 -1
  8. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/trainer.py +13 -10
  9. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/detect/train.py +1 -1
  10. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/pose/train.py +15 -0
  11. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/world/train_world.py +6 -5
  12. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/yoloe/predict.py +0 -1
  13. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/yoloe/train_seg.py +0 -1
  14. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/modules/block.py +2 -2
  15. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/tasks.py +15 -6
  16. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/heatmap.py +1 -2
  17. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/instance_segmentation.py +1 -0
  18. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/object_blurrer.py +0 -1
  19. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/object_counter.py +9 -4
  20. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/solutions.py +3 -6
  21. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/vision_eye.py +0 -1
  22. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/__init__.py +2 -1
  23. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/autodevice.py +0 -1
  24. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/neptune.py +0 -1
  25. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/checks.py +17 -12
  26. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/loss.py +1 -1
  27. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/metrics.py +2 -2
  28. {ultralytics-8.3.131 → ultralytics-8.3.133/ultralytics.egg-info}/PKG-INFO +1 -1
  29. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics.egg-info/SOURCES.txt +1 -0
  30. {ultralytics-8.3.131 → ultralytics-8.3.133}/LICENSE +0 -0
  31. {ultralytics-8.3.131 → ultralytics-8.3.133}/README.md +0 -0
  32. {ultralytics-8.3.131 → ultralytics-8.3.133}/pyproject.toml +0 -0
  33. {ultralytics-8.3.131 → ultralytics-8.3.133}/setup.cfg +0 -0
  34. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/__init__.py +0 -0
  35. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/conftest.py +0 -0
  36. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/test_cli.py +0 -0
  37. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/test_engine.py +0 -0
  38. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/test_exports.py +0 -0
  39. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/test_integrations.py +0 -0
  40. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/test_python.py +0 -0
  41. {ultralytics-8.3.131 → ultralytics-8.3.133}/tests/test_solutions.py +0 -0
  42. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/assets/bus.jpg +0 -0
  43. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/assets/zidane.jpg +0 -0
  44. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/__init__.py +0 -0
  45. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  46. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  47. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  48. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  49. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  50. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  51. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  52. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  53. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  54. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  55. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  56. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  57. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  58. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco.yaml +0 -0
  59. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  60. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  61. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  62. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  63. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  64. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  65. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  66. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  67. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  68. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  69. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  70. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  71. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  72. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  73. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  74. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/signature.yaml +0 -0
  75. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  76. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/datasets/xView.yaml +0 -0
  77. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/default.yaml +0 -0
  78. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  79. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  80. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  81. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  82. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  83. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  84. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  85. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  86. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  87. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  88. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  89. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  90. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  91. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  92. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  93. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  94. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  95. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  96. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  97. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  98. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  99. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  100. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  101. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  102. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  103. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  104. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  105. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  106. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  107. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  108. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  109. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  110. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  111. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  112. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  113. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  114. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  115. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  116. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  117. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  118. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  119. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  120. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  121. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  122. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  123. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  124. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  125. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  126. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  127. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  128. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  129. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  130. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  131. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  132. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  133. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  134. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  135. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/__init__.py +0 -0
  136. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/annotator.py +0 -0
  137. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/augment.py +0 -0
  138. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/base.py +0 -0
  139. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/build.py +0 -0
  140. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/converter.py +0 -0
  141. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/loaders.py +0 -0
  142. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/scripts/download_weights.sh +0 -0
  143. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/scripts/get_coco.sh +0 -0
  144. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/scripts/get_coco128.sh +0 -0
  145. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  146. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/split.py +0 -0
  147. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/split_dota.py +0 -0
  148. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/data/utils.py +0 -0
  149. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/__init__.py +0 -0
  150. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/predictor.py +0 -0
  151. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/results.py +0 -0
  152. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/tuner.py +0 -0
  153. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/engine/validator.py +0 -0
  154. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/hub/__init__.py +0 -0
  155. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/hub/auth.py +0 -0
  156. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/hub/google/__init__.py +0 -0
  157. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/hub/session.py +0 -0
  158. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/hub/utils.py +0 -0
  159. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/__init__.py +0 -0
  160. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/fastsam/__init__.py +0 -0
  161. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/fastsam/model.py +0 -0
  162. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/fastsam/predict.py +0 -0
  163. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/fastsam/utils.py +0 -0
  164. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/fastsam/val.py +0 -0
  165. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/nas/__init__.py +0 -0
  166. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/nas/model.py +0 -0
  167. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/nas/predict.py +0 -0
  168. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/nas/val.py +0 -0
  169. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/rtdetr/__init__.py +0 -0
  170. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/rtdetr/model.py +0 -0
  171. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/rtdetr/predict.py +0 -0
  172. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/rtdetr/train.py +0 -0
  173. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/rtdetr/val.py +0 -0
  174. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/__init__.py +0 -0
  175. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/amg.py +0 -0
  176. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/build.py +0 -0
  177. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/model.py +0 -0
  178. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/__init__.py +0 -0
  179. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/blocks.py +0 -0
  180. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/decoders.py +0 -0
  181. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/encoders.py +0 -0
  182. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  183. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/sam.py +0 -0
  184. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  185. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/transformer.py +0 -0
  186. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/modules/utils.py +0 -0
  187. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/sam/predict.py +0 -0
  188. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/utils/__init__.py +0 -0
  189. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/utils/loss.py +0 -0
  190. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/utils/ops.py +0 -0
  191. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/__init__.py +0 -0
  192. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/classify/__init__.py +0 -0
  193. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/classify/predict.py +0 -0
  194. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/classify/train.py +0 -0
  195. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/classify/val.py +0 -0
  196. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/detect/__init__.py +0 -0
  197. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/detect/predict.py +0 -0
  198. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/detect/val.py +0 -0
  199. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/model.py +0 -0
  200. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/obb/__init__.py +0 -0
  201. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/obb/predict.py +0 -0
  202. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/obb/train.py +0 -0
  203. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/obb/val.py +0 -0
  204. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/pose/__init__.py +0 -0
  205. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/pose/predict.py +0 -0
  206. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/pose/val.py +0 -0
  207. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/segment/__init__.py +0 -0
  208. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/segment/predict.py +0 -0
  209. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/segment/train.py +0 -0
  210. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/segment/val.py +0 -0
  211. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/world/__init__.py +0 -0
  212. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/world/train.py +0 -0
  213. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  214. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/yoloe/train.py +0 -0
  215. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/models/yolo/yoloe/val.py +0 -0
  216. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/__init__.py +0 -0
  217. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/autobackend.py +0 -0
  218. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/modules/__init__.py +0 -0
  219. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/modules/activation.py +0 -0
  220. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/modules/conv.py +0 -0
  221. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/modules/head.py +0 -0
  222. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/modules/transformer.py +0 -0
  223. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/modules/utils.py +0 -0
  224. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/nn/text_model.py +0 -0
  225. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/__init__.py +0 -0
  226. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/ai_gym.py +0 -0
  227. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/analytics.py +0 -0
  228. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/config.py +0 -0
  229. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/distance_calculation.py +0 -0
  230. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/object_cropper.py +0 -0
  231. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/parking_management.py +0 -0
  232. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/queue_management.py +0 -0
  233. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/region_counter.py +0 -0
  234. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/security_alarm.py +0 -0
  235. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/similarity_search.py +0 -0
  236. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/speed_estimation.py +0 -0
  237. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/streamlit_inference.py +0 -0
  238. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/templates/similarity-search.html +0 -0
  239. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/solutions/trackzone.py +0 -0
  240. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/__init__.py +0 -0
  241. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/basetrack.py +0 -0
  242. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/bot_sort.py +0 -0
  243. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/byte_tracker.py +0 -0
  244. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/track.py +0 -0
  245. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/utils/__init__.py +0 -0
  246. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/utils/gmc.py +0 -0
  247. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  248. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/trackers/utils/matching.py +0 -0
  249. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/autobatch.py +0 -0
  250. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/benchmarks.py +0 -0
  251. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/__init__.py +0 -0
  252. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/base.py +0 -0
  253. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/clearml.py +0 -0
  254. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/comet.py +0 -0
  255. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/dvc.py +0 -0
  256. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/hub.py +0 -0
  257. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/mlflow.py +0 -0
  258. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/raytune.py +0 -0
  259. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  260. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/callbacks/wb.py +0 -0
  261. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/dist.py +0 -0
  262. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/downloads.py +0 -0
  263. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/errors.py +0 -0
  264. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/export.py +0 -0
  265. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/files.py +0 -0
  266. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/instance.py +0 -0
  267. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/ops.py +0 -0
  268. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/patches.py +0 -0
  269. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/plotting.py +0 -0
  270. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/tal.py +0 -0
  271. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/torch_utils.py +0 -0
  272. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/triton.py +0 -0
  273. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics/utils/tuner.py +0 -0
  274. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics.egg-info/dependency_links.txt +0 -0
  275. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics.egg-info/entry_points.txt +0 -0
  276. {ultralytics-8.3.131 → ultralytics-8.3.133}/ultralytics.egg-info/requires.txt +0 -0
  277. {ultralytics-8.3.131 → ultralytics-8.3.133}/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.131
3
+ Version: 8.3.133
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>
@@ -9,7 +9,7 @@ import torch
9
9
  from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE
10
10
  from ultralytics import YOLO
11
11
  from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
12
- from ultralytics.utils import ASSETS, WEIGHTS_DIR
12
+ from ultralytics.utils import ASSETS, IS_JETSON, WEIGHTS_DIR
13
13
  from ultralytics.utils.autodevice import GPUInfo
14
14
  from ultralytics.utils.checks import check_amp
15
15
  from ultralytics.utils.torch_utils import TORCH_1_13
@@ -17,11 +17,14 @@ from ultralytics.utils.torch_utils import TORCH_1_13
17
17
  # Try to find idle devices if CUDA is available
18
18
  DEVICES = []
19
19
  if CUDA_IS_AVAILABLE:
20
- gpu_info = GPUInfo()
21
- gpu_info.print_status()
22
- idle_gpus = gpu_info.select_idle_gpu(count=2, min_memory_mb=2048)
23
- if idle_gpus:
24
- DEVICES = idle_gpus
20
+ if IS_JETSON:
21
+ DEVICES = [0] # NVIDIA Jetson only has one GPU and does not fully support pynvml library
22
+ else:
23
+ gpu_info = GPUInfo()
24
+ gpu_info.print_status()
25
+ idle_gpus = gpu_info.select_idle_gpu(count=2, min_memory_mb=2048)
26
+ if idle_gpus:
27
+ DEVICES = idle_gpus
25
28
 
26
29
 
27
30
  def test_checks():
@@ -38,6 +41,7 @@ def test_amp():
38
41
 
39
42
 
40
43
  @pytest.mark.slow
44
+ # @pytest.mark.skipif(IS_JETSON, reason="Temporary disable ONNX for Jetson")
41
45
  @pytest.mark.skipif(not DEVICES, reason="No CUDA devices available")
42
46
  @pytest.mark.parametrize(
43
47
  "task, dynamic, int8, half, batch, simplify, nms",
@@ -49,7 +53,7 @@ def test_amp():
49
53
  if not (
50
54
  (int8 and half)
51
55
  or (task == "classify" and nms)
52
- or (task == "obb" and nms and not TORCH_1_13)
56
+ or (task == "obb" and nms and (not TORCH_1_13 or IS_JETSON)) # obb nms fails on NVIDIA Jetson
53
57
  or (simplify and dynamic) # onnxslim is slow when dynamic=True
54
58
  )
55
59
  ],
@@ -110,9 +114,11 @@ def test_train():
110
114
 
111
115
  device = tuple(DEVICES) if len(DEVICES) > 1 else DEVICES[0]
112
116
  results = YOLO(MODEL).train(data="coco8.yaml", imgsz=64, epochs=1, device=device) # requires imgsz>=64
113
- visible = eval(os.environ["CUDA_VISIBLE_DEVICES"])
114
- assert visible == device, f"Passed GPUs '{device}', but used GPUs '{visible}'"
115
- assert results is (None if len(DEVICES) > 1 else not None) # DDP returns None, single-GPU returns metrics
117
+ # NVIDIA Jetson only has one GPU and therefore skipping checks
118
+ if not IS_JETSON:
119
+ visible = eval(os.environ["CUDA_VISIBLE_DEVICES"])
120
+ assert visible == device, f"Passed GPUs '{device}', but used GPUs '{visible}'"
121
+ assert results is (None if len(DEVICES) > 1 else not None) # DDP returns None, single-GPU returns metrics
116
122
 
117
123
 
118
124
  @pytest.mark.slow
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.131"
3
+ __version__ = "8.3.133"
4
4
 
5
5
  import os
6
6
 
@@ -0,0 +1,33 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ # HomeObjects-3K dataset by Ultralytics
4
+ # Documentation: https://docs.ultralytics.com/datasets/detect/homeobjects-3k/
5
+ # Example usage: yolo train data=HomeObjects-3K.yaml
6
+ # parent
7
+ # ├── ultralytics
8
+ # └── datasets
9
+ # └── homeobjects-3K ← downloads here (390 MB)
10
+
11
+ # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
+ path: ../datasets/homeobjects-3K # dataset root dir
13
+ train: train/images # train images (relative to 'path') 2285 images
14
+ val: valid/images # val images (relative to 'path') 404 images
15
+ test: # test images (relative to 'path')
16
+
17
+ # Classes
18
+ names:
19
+ 0: bed
20
+ 1: sofa
21
+ 2: chair
22
+ 3: table
23
+ 4: lamp
24
+ 5: tv
25
+ 6: laptop
26
+ 7: wardrobe
27
+ 8: window
28
+ 9: door
29
+ 10: potted plant
30
+ 11: photo frame
31
+
32
+ # Download script/URL (optional)
33
+ download: https://github.com/ultralytics/assets/releases/download/v0.0.0/homeobjects-3K.zip
@@ -39,7 +39,7 @@ from .utils import (
39
39
  verify_image_label,
40
40
  )
41
41
 
42
- # Ultralytics dataset *.cache version, >= 1.0.0 for YOLOv8
42
+ # Ultralytics dataset *.cache version, >= 1.0.0 for Ultralytics YOLO models
43
43
  DATASET_CACHE_VERSION = "1.0.3"
44
44
 
45
45
 
@@ -184,7 +184,9 @@ class YOLODataset(BaseDataset):
184
184
  [cache.pop(k) for k in ("hash", "version", "msgs")] # remove items
185
185
  labels = cache["labels"]
186
186
  if not labels:
187
- LOGGER.warning(f"No images found in {cache_path}, training may not work correctly. {HELP_URL}")
187
+ raise RuntimeError(
188
+ f"No valid images found in {cache_path}. Images with incorrectly formatted labels are ignored. {HELP_URL}"
189
+ )
188
190
  self.im_files = [lb["im_file"] for lb in labels] # update im_files
189
191
 
190
192
  # Check if the dataset is all boxes or all segments
@@ -199,7 +201,7 @@ class YOLODataset(BaseDataset):
199
201
  for lb in labels:
200
202
  lb["segments"] = []
201
203
  if len_cls == 0:
202
- LOGGER.warning(f"No labels found in {cache_path}, training may not work correctly. {HELP_URL}")
204
+ LOGGER.warning(f"Labels are missing or empty in {cache_path}, training may not work correctly. {HELP_URL}")
203
205
  return labels
204
206
 
205
207
  def build_transforms(self, hyp=None):
@@ -89,6 +89,7 @@ from ultralytics.utils import (
89
89
  MACOS_VERSION,
90
90
  RKNN_CHIPS,
91
91
  ROOT,
92
+ SETTINGS,
92
93
  WINDOWS,
93
94
  YAML,
94
95
  callbacks,
@@ -106,7 +107,7 @@ from ultralytics.utils.downloads import attempt_download_asset, get_github_asset
106
107
  from ultralytics.utils.export import export_engine, export_onnx
107
108
  from ultralytics.utils.files import file_size, spaces_in_path
108
109
  from ultralytics.utils.ops import Profile, nms_rotated
109
- from ultralytics.utils.torch_utils import TORCH_1_13, get_latest_opset, select_device
110
+ from ultralytics.utils.torch_utils import TORCH_1_13, get_cpu_info, get_latest_opset, select_device
110
111
 
111
112
 
112
113
  def export_formats():
@@ -344,7 +345,6 @@ class Exporter:
344
345
  "See https://docs.ultralytics.com/models/yolo-world for details."
345
346
  )
346
347
  model.clip_model = None # openvino int8 export error: https://github.com/ultralytics/ultralytics/pull/18445
347
-
348
348
  if self.args.int8 and not self.args.data:
349
349
  self.args.data = DEFAULT_CFG.data or TASK2DATA[getattr(model, "task", "detect")] # assign default data
350
350
  LOGGER.warning(
@@ -352,6 +352,14 @@ class Exporter:
352
352
  )
353
353
  if tfjs and (ARM64 and LINUX):
354
354
  raise SystemError("TF.js exports are not currently supported on ARM64 Linux")
355
+ # Recommend OpenVINO if export and Intel CPU
356
+ if SETTINGS.get("openvino_msg"):
357
+ if "intel" in get_cpu_info().lower():
358
+ LOGGER.info(
359
+ "💡 ProTip: Export to OpenVINO format for best performance on Intel CPUs."
360
+ " Learn more at https://docs.ultralytics.com/integrations/openvino/"
361
+ )
362
+ SETTINGS["openvino_msg"] = False
355
363
 
356
364
  # Input
357
365
  im = torch.zeros(self.args.batch, model.yaml.get("channels", 3), *self.imgsz).to(self.device)
@@ -529,7 +529,7 @@ class Model(torch.nn.Module):
529
529
  - For SAM-type models, 'prompts' can be passed as a keyword argument.
530
530
  """
531
531
  if source is None:
532
- source = ASSETS
532
+ source = "https://ultralytics.com/images/boats.jpg" if self.task == "obb" else ASSETS
533
533
  LOGGER.warning(f"'source' is missing. Using 'source={source}'.")
534
534
 
535
535
  is_cli = (ARGV[0].endswith("yolo") or ARGV[0].endswith("ultralytics")) and any(
@@ -77,8 +77,6 @@ class BaseTrainer:
77
77
  amp (bool): Flag to enable AMP (Automatic Mixed Precision).
78
78
  scaler (amp.GradScaler): Gradient scaler for AMP.
79
79
  data (str): Path to data.
80
- trainset (torch.utils.data.Dataset): Training dataset.
81
- testset (torch.utils.data.Dataset): Testing dataset.
82
80
  ema (nn.Module): EMA (Exponential Moving Average) of the model.
83
81
  resume (bool): Resume training from a checkpoint.
84
82
  lf (nn.Module): Loss function.
@@ -136,7 +134,8 @@ class BaseTrainer:
136
134
  # Model and Dataset
137
135
  self.model = check_model_file_from_stem(self.args.model) # add suffix, i.e. yolo11n -> yolo11n.pt
138
136
  with torch_distributed_zero_first(LOCAL_RANK): # avoid auto-downloading dataset multiple times
139
- self.trainset, self.testset = self.get_dataset()
137
+ self.data = self.get_dataset()
138
+
140
139
  self.ema = None
141
140
 
142
141
  # Optimization utils init
@@ -289,11 +288,16 @@ class BaseTrainer:
289
288
 
290
289
  # Dataloaders
291
290
  batch_size = self.batch_size // max(world_size, 1)
292
- self.train_loader = self.get_dataloader(self.trainset, batch_size=batch_size, rank=LOCAL_RANK, mode="train")
291
+ self.train_loader = self.get_dataloader(
292
+ self.data["train"], batch_size=batch_size, rank=LOCAL_RANK, mode="train"
293
+ )
293
294
  if RANK in {-1, 0}:
294
295
  # Note: When training DOTA dataset, double batch size could get OOM on images with >2000 objects.
295
296
  self.test_loader = self.get_dataloader(
296
- self.testset, batch_size=batch_size if self.args.task == "obb" else batch_size * 2, rank=-1, mode="val"
297
+ self.data.get("val") or self.data.get("test"),
298
+ batch_size=batch_size if self.args.task == "obb" else batch_size * 2,
299
+ rank=-1,
300
+ mode="val",
297
301
  )
298
302
  self.validator = self.get_validator()
299
303
  metric_keys = self.validator.metrics.keys + self.label_loss_items(prefix="val")
@@ -569,7 +573,7 @@ class BaseTrainer:
569
573
  Get train and validation datasets from data dictionary.
570
574
 
571
575
  Returns:
572
- (tuple): A tuple containing the training and validation/test datasets.
576
+ (dict): A dictionary containing the training/validation/test dataset and category names.
573
577
  """
574
578
  try:
575
579
  if self.args.task == "classify":
@@ -585,12 +589,11 @@ class BaseTrainer:
585
589
  self.args.data = data["yaml_file"] # for validating 'yolo train data=url.zip' usage
586
590
  except Exception as e:
587
591
  raise RuntimeError(emojis(f"Dataset '{clean_url(self.args.data)}' error ❌ {e}")) from e
588
- self.data = data
589
592
  if self.args.single_cls:
590
593
  LOGGER.info("Overriding class names with single class.")
591
- self.data["names"] = {0: "item"}
592
- self.data["nc"] = 1
593
- return data["train"], data.get("val") or data.get("test")
594
+ data["names"] = {0: "item"}
595
+ data["nc"] = 1
596
+ return data
594
597
 
595
598
  def setup_model(self):
596
599
  """
@@ -212,6 +212,6 @@ class DetectionTrainer(BaseTrainer):
212
212
  Returns:
213
213
  (int): Optimal batch size.
214
214
  """
215
- train_dataset = self.build_dataset(self.trainset, mode="train", batch=16)
215
+ train_dataset = self.build_dataset(self.data["train"], mode="train", batch=16)
216
216
  max_num_obj = max(len(label["cls"]) for label in train_dataset.labels) * 4 # 4 for mosaic augmentation
217
217
  return super().auto_batch(max_num_obj)
@@ -137,3 +137,18 @@ class PoseTrainer(yolo.detect.DetectionTrainer):
137
137
  def plot_metrics(self):
138
138
  """Plots training/val metrics."""
139
139
  plot_results(file=self.csv, pose=True, on_plot=self.on_plot) # save results.png
140
+
141
+ def get_dataset(self):
142
+ """
143
+ Retrieves the dataset and ensures it contains the required `kpt_shape` key.
144
+
145
+ Returns:
146
+ (dict): A dictionary containing the training/validation/test dataset and category names.
147
+
148
+ Raises:
149
+ KeyError: If the `kpt_shape` key is not present in the dataset.
150
+ """
151
+ data = super().get_dataset()
152
+ if "kpt_shape" not in data:
153
+ raise KeyError(f"No `kpt_shape` in the {self.args.data}. See https://docs.ultralytics.com/datasets/pose/")
154
+ return data
@@ -137,12 +137,13 @@ class WorldTrainerFromScratch(WorldTrainer):
137
137
  for g in grounding_data:
138
138
  assert isinstance(g, dict), f"Grounding data should be provided in dict format, but got {type(g)}"
139
139
  final_data[s] += grounding_data
140
+ data["val"] = data["val"][0] # assign the first val dataset as currently only one validation set is supported
140
141
  # NOTE: to make training work properly, set `nc` and `names`
141
- final_data["nc"] = data["val"][0]["nc"]
142
- final_data["names"] = data["val"][0]["names"]
142
+ final_data["nc"] = data["val"]["nc"]
143
+ final_data["names"] = data["val"]["names"]
143
144
  # NOTE: add path with lvis path
144
- final_data["path"] = data["val"][0]["path"]
145
- final_data["channels"] = data["val"][0]["channels"]
145
+ final_data["path"] = data["val"]["path"]
146
+ final_data["channels"] = data["val"]["channels"]
146
147
  self.data = final_data
147
148
  if self.args.single_cls: # consistent with base trainer
148
149
  LOGGER.info("Overriding class names with single class.")
@@ -154,7 +155,7 @@ class WorldTrainerFromScratch(WorldTrainer):
154
155
  d["names"] = {0: "object"}
155
156
  d["nc"] = 1
156
157
  self.training_data[d["train"]] = d
157
- return final_data["train"], final_data["val"][0]
158
+ return final_data
158
159
 
159
160
  def plot_training_labels(self):
160
161
  """Do not plot labels for YOLO-World training."""
@@ -1,6 +1,5 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
-
4
3
  import numpy as np
5
4
  import torch
6
5
 
@@ -1,6 +1,5 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
-
4
3
  from copy import copy, deepcopy
5
4
 
6
5
  from ultralytics.models.yolo.segment import SegmentationTrainer
@@ -76,11 +76,11 @@ class DFL(nn.Module):
76
76
 
77
77
 
78
78
  class Proto(nn.Module):
79
- """YOLOv8 mask Proto module for segmentation models."""
79
+ """Ultralytics YOLO models mask Proto module for segmentation models."""
80
80
 
81
81
  def __init__(self, c1, c_=256, c2=32):
82
82
  """
83
- Initialize the YOLOv8 mask Proto module with specified number of protos and masks.
83
+ Initialize the Ultralytics YOLO models mask Proto module with specified number of protos and masks.
84
84
 
85
85
  Args:
86
86
  c1 (int): Input channels.
@@ -281,10 +281,19 @@ class BaseModel(torch.nn.Module):
281
281
  """
282
282
  model = weights["model"] if isinstance(weights, dict) else weights # torchvision models are not dicts
283
283
  csd = model.float().state_dict() # checkpoint state_dict as FP32
284
- csd = intersect_dicts(csd, self.state_dict()) # intersect
285
- self.load_state_dict(csd, strict=False) # load
284
+ updated_csd = intersect_dicts(csd, self.state_dict()) # intersect
285
+ self.load_state_dict(updated_csd, strict=False) # load
286
+ len_updated_csd = len(updated_csd)
287
+ first_conv = "model.0.conv.weight"
288
+ if first_conv not in updated_csd: # mostly used to boost multi-channel training
289
+ c1, c2, h, w = self.state_dict()[first_conv].shape
290
+ cc1, cc2, ch, cw = csd[first_conv].shape
291
+ if ch == h and cw == w:
292
+ c1, c2 = min(c1, cc1), min(c2, cc2)
293
+ self.state_dict()[first_conv][:c1, :c2] = csd[first_conv][:c1, :c2]
294
+ len_updated_csd += 1
286
295
  if verbose:
287
- LOGGER.info(f"Transferred {len(csd)}/{len(self.model.state_dict())} items from pretrained weights")
296
+ LOGGER.info(f"Transferred {len_updated_csd}/{len(self.model.state_dict())} items from pretrained weights")
288
297
 
289
298
  def loss(self, batch, preds=None):
290
299
  """
@@ -458,7 +467,7 @@ class SegmentationModel(DetectionModel):
458
467
 
459
468
  def __init__(self, cfg="yolo11n-seg.yaml", ch=3, nc=None, verbose=True):
460
469
  """
461
- Initialize YOLOv8 segmentation model with given config and parameters.
470
+ Initialize Ultralytics YOLO segmentation model with given config and parameters.
462
471
 
463
472
  Args:
464
473
  cfg (str | dict): Model configuration file path or dictionary.
@@ -478,7 +487,7 @@ class PoseModel(DetectionModel):
478
487
 
479
488
  def __init__(self, cfg="yolo11n-pose.yaml", ch=3, nc=None, data_kpt_shape=(None, None), verbose=True):
480
489
  """
481
- Initialize YOLOv8 Pose model.
490
+ Initialize Ultralytics YOLO Pose model.
482
491
 
483
492
  Args:
484
493
  cfg (str | dict): Model configuration file path or dictionary.
@@ -517,7 +526,7 @@ class ClassificationModel(BaseModel):
517
526
 
518
527
  def _from_yaml(self, cfg, ch, nc, verbose):
519
528
  """
520
- Set YOLOv8 model configurations and define the model architecture.
529
+ Set Ultralytics YOLO model configurations and define the model architecture.
521
530
 
522
531
  Args:
523
532
  cfg (str | dict): Model configuration file path or dictionary.
@@ -100,12 +100,11 @@ class Heatmap(ObjectCounter):
100
100
  self.annotator.draw_region(reg_pts=self.region, color=(104, 0, 123), thickness=self.line_width * 2)
101
101
  self.store_tracking_history(track_id, box) # Store track history
102
102
  self.store_classwise_counts(cls) # Store classwise counts in dict
103
- current_centroid = ((box[0] + box[2]) / 2, (box[1] + box[3]) / 2)
104
103
  # Get previous position if available
105
104
  prev_position = None
106
105
  if len(self.track_history[track_id]) > 1:
107
106
  prev_position = self.track_history[track_id][-2]
108
- self.count_objects(current_centroid, track_id, prev_position, cls) # Perform object counting
107
+ self.count_objects(self.track_history[track_id][-1], track_id, prev_position, cls) # object counting
109
108
 
110
109
  plot_im = self.annotator.result()
111
110
  if self.region is not None:
@@ -62,6 +62,7 @@ class InstanceSegmentation(BaseSolution):
62
62
  >>> print(summary)
63
63
  """
64
64
  self.extract_tracks(im0) # Extract tracks (bounding boxes, classes, and masks)
65
+ self.masks = getattr(self.tracks[0], "masks", None)
65
66
 
66
67
  # Iterate over detected classes, track IDs, and segmentation masks
67
68
  if self.masks is None:
@@ -1,6 +1,5 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
-
4
3
  import cv2
5
4
 
6
5
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
@@ -174,6 +174,10 @@ class ObjectCounter(BaseSolution):
174
174
  self.extract_tracks(im0) # Extract tracks
175
175
  self.annotator = SolutionAnnotator(im0, line_width=self.line_width) # Initialize annotator
176
176
 
177
+ is_obb = getattr(self.tracks[0], "obb", None) is not None # True if OBB results exist
178
+ if is_obb:
179
+ self.boxes = self.track_data.xyxyxyxy.reshape(-1, 4, 2).cpu()
180
+
177
181
  self.annotator.draw_region(
178
182
  reg_pts=self.region, color=(104, 0, 123), thickness=self.line_width * 2
179
183
  ) # Draw region
@@ -181,16 +185,17 @@ class ObjectCounter(BaseSolution):
181
185
  # Iterate over bounding boxes, track ids and classes index
182
186
  for box, track_id, cls, conf in zip(self.boxes, self.track_ids, self.clss, self.confs):
183
187
  # Draw bounding box and counting region
184
- self.annotator.box_label(box, label=self.adjust_box_label(cls, conf, track_id), color=colors(cls, True))
185
- self.store_tracking_history(track_id, box) # Store track history
188
+ self.annotator.box_label(
189
+ box, label=self.adjust_box_label(cls, conf, track_id), color=colors(cls, True), rotated=is_obb
190
+ )
191
+ self.store_tracking_history(track_id, box, is_obb=is_obb) # Store track history
186
192
  self.store_classwise_counts(cls) # Store classwise counts in dict
187
193
 
188
- current_centroid = ((box[0] + box[2]) / 2, (box[1] + box[3]) / 2)
189
194
  # Store previous position of track for object counting
190
195
  prev_position = None
191
196
  if len(self.track_history[track_id]) > 1:
192
197
  prev_position = self.track_history[track_id][-2]
193
- self.count_objects(current_centroid, track_id, prev_position, cls) # Perform object counting
198
+ self.count_objects(self.track_history[track_id][-1], track_id, prev_position, cls) # object counting
194
199
 
195
200
  plot_im = self.annotator.result()
196
201
  self.display_counts(plot_im) # Display the counts on the frame
@@ -139,10 +139,6 @@ class BaseSolution:
139
139
  self.tracks = self.model.track(source=im0, persist=True, classes=self.classes, **self.track_add_args)
140
140
  self.track_data = self.tracks[0].obb or self.tracks[0].boxes # Extract tracks for OBB or object detection
141
141
 
142
- self.masks = (
143
- self.tracks[0].masks if hasattr(self.tracks[0], "masks") and self.tracks[0].masks is not None else None
144
- )
145
-
146
142
  if self.track_data and self.track_data.id is not None:
147
143
  self.boxes = self.track_data.xyxy.cpu()
148
144
  self.clss = self.track_data.cls.cpu().tolist()
@@ -152,7 +148,7 @@ class BaseSolution:
152
148
  self.LOGGER.warning("no tracks found!")
153
149
  self.boxes, self.clss, self.track_ids, self.confs = [], [], [], []
154
150
 
155
- def store_tracking_history(self, track_id, box):
151
+ def store_tracking_history(self, track_id, box, is_obb=False):
156
152
  """
157
153
  Stores the tracking history of an object.
158
154
 
@@ -162,6 +158,7 @@ class BaseSolution:
162
158
  Args:
163
159
  track_id (int): The unique identifier for the tracked object.
164
160
  box (List[float]): The bounding box coordinates of the object in the format [x1, y1, x2, y2].
161
+ is_obb (bool): True if OBB model is used (applies to object counting only).
165
162
 
166
163
  Examples:
167
164
  >>> solution = BaseSolution()
@@ -169,7 +166,7 @@ class BaseSolution:
169
166
  """
170
167
  # Store tracking history
171
168
  self.track_line = self.track_history[track_id]
172
- self.track_line.append(((box[0] + box[2]) / 2, (box[1] + box[3]) / 2))
169
+ self.track_line.append(tuple(box.mean(dim=0)) if is_obb else (box[:4:2].mean(), box[1:4:2].mean()))
173
170
  if len(self.track_line) > 30:
174
171
  self.track_line.pop(0)
175
172
 
@@ -1,6 +1,5 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
-
4
3
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
5
4
  from ultralytics.utils.plotting import colors
6
5
 
@@ -1312,7 +1312,8 @@ class SettingsManager(JSONDict):
1312
1312
  "raytune": True, # Ray Tune integration
1313
1313
  "tensorboard": False, # TensorBoard logging
1314
1314
  "wandb": False, # Weights & Biases logging
1315
- "vscode_msg": True, # VSCode messaging
1315
+ "vscode_msg": True, # VSCode message
1316
+ "openvino_msg": True, # OpenVINO export on Intel CPU message
1316
1317
  }
1317
1318
 
1318
1319
  self.help_msg = (
@@ -1,6 +1,5 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
-
4
3
  from ultralytics.utils import LOGGER
5
4
  from ultralytics.utils.checks import check_requirements
6
5
 
@@ -1,6 +1,5 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
-
4
3
  from ultralytics.utils import LOGGER, SETTINGS, TESTS_RUNNING
5
4
 
6
5
  try:
@@ -24,6 +24,7 @@ from ultralytics.utils import (
24
24
  AUTOINSTALL,
25
25
  IS_COLAB,
26
26
  IS_GIT_DIR,
27
+ IS_JETSON,
27
28
  IS_KAGGLE,
28
29
  IS_PIP_PACKAGE,
29
30
  LINUX,
@@ -343,7 +344,7 @@ def check_python(minimum: str = "3.8.0", hard: bool = True, verbose: bool = Fals
343
344
  @TryExcept()
344
345
  def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=(), install=True, cmds=""):
345
346
  """
346
- Check if installed dependencies meet YOLOv8 requirements and attempt to auto-update if needed.
347
+ Check if installed dependencies meet Ultralytics YOLO models requirements and attempt to auto-update if needed.
347
348
 
348
349
  Args:
349
350
  requirements (Union[Path, str, List[str]]): Path to a requirements.txt file, a single package requirement as a
@@ -820,19 +821,23 @@ def cuda_device_count() -> int:
820
821
  Returns:
821
822
  (int): The number of NVIDIA GPUs available.
822
823
  """
823
- try:
824
- # Run the nvidia-smi command and capture its output
825
- output = subprocess.check_output(
826
- ["nvidia-smi", "--query-gpu=count", "--format=csv,noheader,nounits"], encoding="utf-8"
827
- )
824
+ if IS_JETSON:
825
+ # NVIDIA Jetson does not fully support nvidia-smi and therefore use PyTorch instead
826
+ return torch.cuda.device_count()
827
+ else:
828
+ try:
829
+ # Run the nvidia-smi command and capture its output
830
+ output = subprocess.check_output(
831
+ ["nvidia-smi", "--query-gpu=count", "--format=csv,noheader,nounits"], encoding="utf-8"
832
+ )
828
833
 
829
- # Take the first line and strip any leading/trailing white space
830
- first_line = output.strip().split("\n")[0]
834
+ # Take the first line and strip any leading/trailing white space
835
+ first_line = output.strip().split("\n")[0]
831
836
 
832
- return int(first_line)
833
- except (subprocess.CalledProcessError, FileNotFoundError, ValueError):
834
- # If the command fails, nvidia-smi is not found, or output is not an integer, assume no GPUs are available
835
- return 0
837
+ return int(first_line)
838
+ except (subprocess.CalledProcessError, FileNotFoundError, ValueError):
839
+ # If the command fails, nvidia-smi is not found, or output is not an integer, assume no GPUs are available
840
+ return 0
836
841
 
837
842
 
838
843
  def cuda_is_available() -> bool:
@@ -674,7 +674,7 @@ class v8OBBLoss(v8DetectionLoss):
674
674
  raise TypeError(
675
675
  "ERROR ❌ OBB dataset incorrectly formatted or not a OBB dataset.\n"
676
676
  "This error can occur when incorrectly training a 'OBB' model on a 'detect' dataset, "
677
- "i.e. 'yolo train model=yolo11n-obb.pt data=dota8.yaml'.\nVerify your dataset is a "
677
+ "i.e. 'yolo train model=yolo11n-obb.pt data=coco8.yaml'.\nVerify your dataset is a "
678
678
  "correctly formatted 'OBB' dataset using 'data=dota8.yaml' "
679
679
  "as an example.\nSee https://docs.ultralytics.com/datasets/obb/ for help."
680
680
  ) from e
@@ -665,7 +665,7 @@ def ap_per_class(
665
665
 
666
666
  class Metric(SimpleClass):
667
667
  """
668
- Class for computing evaluation metrics for YOLOv8 model.
668
+ Class for computing evaluation metrics for Ultralytics YOLO models.
669
669
 
670
670
  Attributes:
671
671
  p (list): Precision for each class. Shape: (nc,).
@@ -788,7 +788,7 @@ class Metric(SimpleClass):
788
788
  def fitness(self):
789
789
  """Return model fitness as a weighted combination of metrics."""
790
790
  w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
791
- return (np.array(self.mean_results()) * w).sum()
791
+ return (np.nan_to_num(np.array(self.mean_results())) * w).sum()
792
792
 
793
793
  def update(self, results):
794
794
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.131
3
+ Version: 8.3.133
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>
@@ -32,6 +32,7 @@ ultralytics/cfg/datasets/Argoverse.yaml
32
32
  ultralytics/cfg/datasets/DOTAv1.5.yaml
33
33
  ultralytics/cfg/datasets/DOTAv1.yaml
34
34
  ultralytics/cfg/datasets/GlobalWheat2020.yaml
35
+ ultralytics/cfg/datasets/HomeObjects-3K.yaml
35
36
  ultralytics/cfg/datasets/ImageNet.yaml
36
37
  ultralytics/cfg/datasets/Objects365.yaml
37
38
  ultralytics/cfg/datasets/SKU-110K.yaml
File without changes
File without changes
File without changes