ultralytics 8.3.130__tar.gz → 8.3.132__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.130/ultralytics.egg-info → ultralytics-8.3.132}/PKG-INFO +1 -1
  2. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/__init__.py +1 -1
  3. ultralytics-8.3.132/ultralytics/cfg/datasets/HomeObjects-3K.yaml +33 -0
  4. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/build.py +4 -3
  5. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/dataset.py +1 -1
  6. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/loaders.py +11 -8
  7. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/utils.py +3 -0
  8. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/predictor.py +1 -0
  9. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/trainer.py +13 -10
  10. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/detect/train.py +1 -1
  11. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/pose/train.py +15 -0
  12. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/world/train_world.py +6 -5
  13. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/yoloe/predict.py +0 -1
  14. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/yoloe/train_seg.py +0 -1
  15. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/modules/block.py +2 -2
  16. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/tasks.py +15 -6
  17. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/heatmap.py +1 -2
  18. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/instance_segmentation.py +1 -0
  19. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/object_blurrer.py +0 -1
  20. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/object_counter.py +9 -4
  21. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/solutions.py +3 -6
  22. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/vision_eye.py +0 -1
  23. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/autodevice.py +0 -1
  24. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/neptune.py +0 -1
  25. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/checks.py +1 -1
  26. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/metrics.py +1 -1
  27. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/patches.py +2 -1
  28. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/plotting.py +3 -1
  29. {ultralytics-8.3.130 → ultralytics-8.3.132/ultralytics.egg-info}/PKG-INFO +1 -1
  30. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics.egg-info/SOURCES.txt +1 -0
  31. {ultralytics-8.3.130 → ultralytics-8.3.132}/LICENSE +0 -0
  32. {ultralytics-8.3.130 → ultralytics-8.3.132}/README.md +0 -0
  33. {ultralytics-8.3.130 → ultralytics-8.3.132}/pyproject.toml +0 -0
  34. {ultralytics-8.3.130 → ultralytics-8.3.132}/setup.cfg +0 -0
  35. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/__init__.py +0 -0
  36. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/conftest.py +0 -0
  37. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/test_cli.py +0 -0
  38. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/test_cuda.py +0 -0
  39. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/test_engine.py +0 -0
  40. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/test_exports.py +0 -0
  41. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/test_integrations.py +0 -0
  42. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/test_python.py +0 -0
  43. {ultralytics-8.3.130 → ultralytics-8.3.132}/tests/test_solutions.py +0 -0
  44. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/assets/bus.jpg +0 -0
  45. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/assets/zidane.jpg +0 -0
  46. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/__init__.py +0 -0
  47. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  48. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  49. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  50. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  51. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  52. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  53. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  54. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  55. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  56. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  57. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  58. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  59. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  60. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco.yaml +0 -0
  61. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  62. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  63. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  64. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  65. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  66. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  67. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  68. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  69. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  70. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  71. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  72. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  73. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  74. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  75. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  76. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/signature.yaml +0 -0
  77. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  78. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/datasets/xView.yaml +0 -0
  79. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/default.yaml +0 -0
  80. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  81. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  82. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  83. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  84. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  85. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  86. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  87. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  88. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  89. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  90. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  91. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  92. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  93. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  94. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  95. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  96. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  97. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  98. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  99. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  100. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  101. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  102. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  103. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  104. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  105. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  106. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  107. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  108. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  109. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  110. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  111. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  112. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  113. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  114. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  115. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  116. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  117. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  118. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  119. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  120. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  121. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  122. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  123. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  124. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  125. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  126. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  127. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  128. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  129. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  130. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  131. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  132. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  133. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  134. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  135. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  136. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  137. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/__init__.py +0 -0
  138. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/annotator.py +0 -0
  139. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/augment.py +0 -0
  140. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/base.py +0 -0
  141. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/converter.py +0 -0
  142. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/scripts/download_weights.sh +0 -0
  143. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/scripts/get_coco.sh +0 -0
  144. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/scripts/get_coco128.sh +0 -0
  145. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  146. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/split.py +0 -0
  147. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/data/split_dota.py +0 -0
  148. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/__init__.py +0 -0
  149. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/exporter.py +0 -0
  150. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/model.py +0 -0
  151. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/results.py +0 -0
  152. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/tuner.py +0 -0
  153. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/engine/validator.py +0 -0
  154. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/hub/__init__.py +0 -0
  155. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/hub/auth.py +0 -0
  156. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/hub/google/__init__.py +0 -0
  157. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/hub/session.py +0 -0
  158. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/hub/utils.py +0 -0
  159. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/__init__.py +0 -0
  160. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/fastsam/__init__.py +0 -0
  161. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/fastsam/model.py +0 -0
  162. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/fastsam/predict.py +0 -0
  163. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/fastsam/utils.py +0 -0
  164. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/fastsam/val.py +0 -0
  165. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/nas/__init__.py +0 -0
  166. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/nas/model.py +0 -0
  167. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/nas/predict.py +0 -0
  168. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/nas/val.py +0 -0
  169. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/rtdetr/__init__.py +0 -0
  170. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/rtdetr/model.py +0 -0
  171. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/rtdetr/predict.py +0 -0
  172. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/rtdetr/train.py +0 -0
  173. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/rtdetr/val.py +0 -0
  174. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/__init__.py +0 -0
  175. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/amg.py +0 -0
  176. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/build.py +0 -0
  177. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/model.py +0 -0
  178. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/__init__.py +0 -0
  179. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/blocks.py +0 -0
  180. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/decoders.py +0 -0
  181. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/encoders.py +0 -0
  182. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  183. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/sam.py +0 -0
  184. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  185. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/transformer.py +0 -0
  186. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/modules/utils.py +0 -0
  187. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/sam/predict.py +0 -0
  188. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/utils/__init__.py +0 -0
  189. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/utils/loss.py +0 -0
  190. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/utils/ops.py +0 -0
  191. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/__init__.py +0 -0
  192. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/classify/__init__.py +0 -0
  193. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/classify/predict.py +0 -0
  194. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/classify/train.py +0 -0
  195. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/classify/val.py +0 -0
  196. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/detect/__init__.py +0 -0
  197. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/detect/predict.py +0 -0
  198. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/detect/val.py +0 -0
  199. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/model.py +0 -0
  200. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/obb/__init__.py +0 -0
  201. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/obb/predict.py +0 -0
  202. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/obb/train.py +0 -0
  203. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/obb/val.py +0 -0
  204. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/pose/__init__.py +0 -0
  205. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/pose/predict.py +0 -0
  206. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/pose/val.py +0 -0
  207. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/segment/__init__.py +0 -0
  208. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/segment/predict.py +0 -0
  209. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/segment/train.py +0 -0
  210. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/segment/val.py +0 -0
  211. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/world/__init__.py +0 -0
  212. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/world/train.py +0 -0
  213. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  214. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/yoloe/train.py +0 -0
  215. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/models/yolo/yoloe/val.py +0 -0
  216. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/__init__.py +0 -0
  217. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/autobackend.py +0 -0
  218. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/modules/__init__.py +0 -0
  219. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/modules/activation.py +0 -0
  220. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/modules/conv.py +0 -0
  221. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/modules/head.py +0 -0
  222. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/modules/transformer.py +0 -0
  223. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/modules/utils.py +0 -0
  224. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/nn/text_model.py +0 -0
  225. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/__init__.py +0 -0
  226. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/ai_gym.py +0 -0
  227. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/analytics.py +0 -0
  228. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/config.py +0 -0
  229. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/distance_calculation.py +0 -0
  230. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/object_cropper.py +0 -0
  231. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/parking_management.py +0 -0
  232. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/queue_management.py +0 -0
  233. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/region_counter.py +0 -0
  234. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/security_alarm.py +0 -0
  235. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/similarity_search.py +0 -0
  236. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/speed_estimation.py +0 -0
  237. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/streamlit_inference.py +0 -0
  238. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/templates/similarity-search.html +0 -0
  239. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/solutions/trackzone.py +0 -0
  240. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/__init__.py +0 -0
  241. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/basetrack.py +0 -0
  242. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/bot_sort.py +0 -0
  243. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/byte_tracker.py +0 -0
  244. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/track.py +0 -0
  245. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/utils/__init__.py +0 -0
  246. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/utils/gmc.py +0 -0
  247. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  248. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/trackers/utils/matching.py +0 -0
  249. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/__init__.py +0 -0
  250. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/autobatch.py +0 -0
  251. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/benchmarks.py +0 -0
  252. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/__init__.py +0 -0
  253. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/base.py +0 -0
  254. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/clearml.py +0 -0
  255. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/comet.py +0 -0
  256. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/dvc.py +0 -0
  257. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/hub.py +0 -0
  258. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/mlflow.py +0 -0
  259. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/raytune.py +0 -0
  260. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  261. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/callbacks/wb.py +0 -0
  262. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/dist.py +0 -0
  263. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/downloads.py +0 -0
  264. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/errors.py +0 -0
  265. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/export.py +0 -0
  266. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/files.py +0 -0
  267. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/instance.py +0 -0
  268. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/loss.py +0 -0
  269. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/ops.py +0 -0
  270. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/tal.py +0 -0
  271. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/torch_utils.py +0 -0
  272. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/triton.py +0 -0
  273. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics/utils/tuner.py +0 -0
  274. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics.egg-info/dependency_links.txt +0 -0
  275. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics.egg-info/entry_points.txt +0 -0
  276. {ultralytics-8.3.130 → ultralytics-8.3.132}/ultralytics.egg-info/requires.txt +0 -0
  277. {ultralytics-8.3.130 → ultralytics-8.3.132}/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.130
3
+ Version: 8.3.132
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>
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.130"
3
+ __version__ = "8.3.132"
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
@@ -221,7 +221,7 @@ def check_source(source):
221
221
  return source, webcam, screenshot, from_img, in_memory, tensor
222
222
 
223
223
 
224
- def load_inference_source(source=None, batch=1, vid_stride=1, buffer=False):
224
+ def load_inference_source(source=None, batch=1, vid_stride=1, buffer=False, channels=3):
225
225
  """
226
226
  Load an inference source for object detection and apply necessary transformations.
227
227
 
@@ -230,6 +230,7 @@ def load_inference_source(source=None, batch=1, vid_stride=1, buffer=False):
230
230
  batch (int, optional): Batch size for dataloaders.
231
231
  vid_stride (int, optional): The frame interval for video sources.
232
232
  buffer (bool, optional): Whether stream frames will be buffered.
233
+ channels (int): The number of input channels for the model.
233
234
 
234
235
  Returns:
235
236
  (Dataset): A dataset object for the specified input source with attached source_type attribute.
@@ -247,9 +248,9 @@ def load_inference_source(source=None, batch=1, vid_stride=1, buffer=False):
247
248
  elif screenshot:
248
249
  dataset = LoadScreenshots(source)
249
250
  elif from_img:
250
- dataset = LoadPilAndNumpy(source)
251
+ dataset = LoadPilAndNumpy(source, channels=channels)
251
252
  else:
252
- dataset = LoadImagesAndVideos(source, batch=batch, vid_stride=vid_stride)
253
+ dataset = LoadImagesAndVideos(source, batch=batch, vid_stride=vid_stride, channels=channels)
253
254
 
254
255
  # Attach source types to the dataset
255
256
  setattr(dataset, "source_type", source_type)
@@ -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
 
@@ -300,6 +300,7 @@ class LoadImagesAndVideos:
300
300
  frames (int): Total number of frames in the video.
301
301
  count (int): Counter for iteration, initialized at 0 during __iter__().
302
302
  ni (int): Number of images.
303
+ cv2_flag (int): OpenCV flag for image reading (grayscale or RGB).
303
304
 
304
305
  Methods:
305
306
  __init__: Initialize the LoadImagesAndVideos object.
@@ -320,7 +321,7 @@ class LoadImagesAndVideos:
320
321
  - Can read from a text file containing paths to images and videos.
321
322
  """
322
323
 
323
- def __init__(self, path, batch=1, vid_stride=1):
324
+ def __init__(self, path, batch=1, vid_stride=1, channels=3):
324
325
  """Initialize dataloader for images and videos, supporting various input formats."""
325
326
  parent = None
326
327
  if isinstance(path, str) and Path(path).suffix == ".txt": # *.txt file with img/vid/dir on each line
@@ -357,6 +358,7 @@ class LoadImagesAndVideos:
357
358
  self.mode = "video" if ni == 0 else "image" # default to video if no images
358
359
  self.vid_stride = vid_stride # video frame-rate stride
359
360
  self.bs = batch
361
+ self.cv2_flag = cv2.IMREAD_GRAYSCALE if channels == 1 else cv2.IMREAD_COLOR # grayscale or RGB
360
362
  if any(videos):
361
363
  self._new_video(videos[0]) # new video
362
364
  else:
@@ -421,7 +423,7 @@ class LoadImagesAndVideos:
421
423
  with Image.open(path) as img:
422
424
  im0 = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) # convert image to BGR nparray
423
425
  else:
424
- im0 = imread(path) # BGR
426
+ im0 = imread(path, flags=self.cv2_flag) # BGR
425
427
  if im0 is None:
426
428
  LOGGER.warning(f"Image Read Error {path}")
427
429
  else:
@@ -475,24 +477,25 @@ class LoadPilAndNumpy:
475
477
  Loaded 2 images
476
478
  """
477
479
 
478
- def __init__(self, im0):
480
+ def __init__(self, im0, channels=3):
479
481
  """Initializes a loader for PIL and Numpy images, converting inputs to a standardized format."""
480
482
  if not isinstance(im0, list):
481
483
  im0 = [im0]
482
484
  # use `image{i}.jpg` when Image.filename returns an empty path.
483
485
  self.paths = [getattr(im, "filename", "") or f"image{i}.jpg" for i, im in enumerate(im0)]
484
- self.im0 = [self._single_check(im) for im in im0]
486
+ pil_flag = "L" if channels == 1 else "RGB" # grayscale or RGB
487
+ self.im0 = [self._single_check(im, pil_flag) for im in im0]
485
488
  self.mode = "image"
486
489
  self.bs = len(self.im0)
487
490
 
488
491
  @staticmethod
489
- def _single_check(im):
492
+ def _single_check(im, flag="RGB"):
490
493
  """Validate and format an image to numpy array, ensuring RGB order and contiguous memory."""
491
494
  assert isinstance(im, (Image.Image, np.ndarray)), f"Expected PIL/np.ndarray image type, but got {type(im)}"
492
495
  if isinstance(im, Image.Image):
493
- if im.mode != "RGB":
494
- im = im.convert("RGB")
495
- im = np.asarray(im)[:, :, ::-1] # RGB to BGR
496
+ im = np.asarray(im.convert(flag))
497
+ # adding new axis if it's grayscale, and converting to BGR if it's RGB
498
+ im = im[..., None] if flag == "L" else im[..., ::-1]
496
499
  im = np.ascontiguousarray(im) # contiguous
497
500
  return im
498
501
 
@@ -736,7 +736,10 @@ def compress_one_image(f, f_new=None, max_dim=1920, quality=50):
736
736
  >>> compress_one_image(f)
737
737
  """
738
738
  try: # use PIL
739
+ Image.MAX_IMAGE_PIXELS = None # Fix DecompressionBombError, allow optimization of image > ~178.9 million pixels
739
740
  im = Image.open(f)
741
+ if im.mode in {"RGBA", "LA"}: # Convert to RGB if needed (for JPEG)
742
+ im = im.convert("RGB")
740
743
  r = max_dim / max(im.height, im.width) # ratio
741
744
  if r < 1.0: # image too large
742
745
  im = im.resize((int(im.width * r), int(im.height * r)))
@@ -261,6 +261,7 @@ class BasePredictor:
261
261
  batch=self.args.batch,
262
262
  vid_stride=self.args.vid_stride,
263
263
  buffer=self.args.stream_buffer,
264
+ channels=getattr(self.model, "ch", 3),
264
265
  )
265
266
  self.source_type = self.dataset.source_type
266
267
  if not getattr(self, "stream", True) and (
@@ -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
 
@@ -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:
@@ -343,7 +343,7 @@ def check_python(minimum: str = "3.8.0", hard: bool = True, verbose: bool = Fals
343
343
  @TryExcept()
344
344
  def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=(), install=True, cmds=""):
345
345
  """
346
- Check if installed dependencies meet YOLOv8 requirements and attempt to auto-update if needed.
346
+ Check if installed dependencies meet Ultralytics YOLO models requirements and attempt to auto-update if needed.
347
347
 
348
348
  Args:
349
349
  requirements (Union[Path, str, List[str]]): Path to a requirements.txt file, a single package requirement as a
@@ -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,).
@@ -35,7 +35,8 @@ def imread(filename: str, flags: int = cv2.IMREAD_COLOR):
35
35
  return frames[0] if len(frames) == 1 and frames[0].ndim == 3 else np.stack(frames, axis=2)
36
36
  return None
37
37
  else:
38
- return cv2.imdecode(file_bytes, flags)
38
+ im = cv2.imdecode(file_bytes, flags)
39
+ return im[..., None] if im.ndim == 2 else im # always make sure there's 3 dimensions
39
40
 
40
41
 
41
42
  def imwrite(filename: str, img: np.ndarray, params=None):
@@ -196,7 +196,9 @@ class Annotator:
196
196
  if check_version(pil_version, "9.2.0"):
197
197
  self.font.getsize = lambda x: self.font.getbbox(x)[2:4] # text width, height
198
198
  else: # use cv2
199
- if im.shape[2] > 3: # multispectral
199
+ if im.shape[2] == 1: # handle grayscale
200
+ im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
201
+ elif im.shape[2] > 3: # multispectral
200
202
  im = np.ascontiguousarray(im[..., :3])
201
203
  assert im.data.contiguous, "Image not contiguous. Apply np.ascontiguousarray(im) to Annotator input images."
202
204
  self.im = im if im.flags.writeable else im.copy()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.130
3
+ Version: 8.3.132
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