ultralytics 8.3.221__tar.gz → 8.3.222__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 (288) hide show
  1. {ultralytics-8.3.221 → ultralytics-8.3.222}/PKG-INFO +1 -1
  2. {ultralytics-8.3.221 → ultralytics-8.3.222}/pyproject.toml +2 -2
  3. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/test_python.py +5 -5
  4. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/__init__.py +1 -1
  5. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/base.py +1 -1
  6. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/utils.py +1 -1
  7. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/exporter.py +6 -9
  8. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/model.py +1 -1
  9. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/trainer.py +1 -1
  10. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/train.py +2 -2
  11. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/__init__.py +4 -4
  12. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/benchmarks.py +3 -1
  13. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/export/imx.py +39 -28
  14. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/metrics.py +2 -2
  15. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/plotting.py +1 -1
  16. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics.egg-info/PKG-INFO +1 -1
  17. {ultralytics-8.3.221 → ultralytics-8.3.222}/LICENSE +0 -0
  18. {ultralytics-8.3.221 → ultralytics-8.3.222}/README.md +0 -0
  19. {ultralytics-8.3.221 → ultralytics-8.3.222}/setup.cfg +0 -0
  20. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/__init__.py +0 -0
  21. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/conftest.py +0 -0
  22. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/test_cli.py +0 -0
  23. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/test_cuda.py +0 -0
  24. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/test_engine.py +0 -0
  25. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/test_exports.py +0 -0
  26. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/test_integrations.py +0 -0
  27. {ultralytics-8.3.221 → ultralytics-8.3.222}/tests/test_solutions.py +0 -0
  28. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/assets/bus.jpg +0 -0
  29. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/assets/zidane.jpg +0 -0
  30. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/__init__.py +0 -0
  31. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  32. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  33. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  34. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  35. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  36. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  37. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  38. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  39. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  40. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  41. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  42. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  43. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  44. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  45. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco.yaml +0 -0
  46. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  47. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  48. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  49. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  50. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  51. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  52. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  53. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  54. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  55. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  56. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  57. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  58. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  59. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  60. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  61. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  62. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  63. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/signature.yaml +0 -0
  64. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  65. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/datasets/xView.yaml +0 -0
  66. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/default.yaml +0 -0
  67. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  68. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  69. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  70. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  71. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  72. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  73. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  74. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  75. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  76. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  77. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  78. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  79. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  80. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  81. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  82. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  83. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  84. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  85. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  86. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  87. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  88. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  89. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  90. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  91. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  92. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  93. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  94. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  95. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  96. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  97. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  98. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  99. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  100. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  101. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  102. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  103. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  104. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  105. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  106. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  107. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  108. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  109. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  110. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  111. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  112. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  113. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  114. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  115. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  116. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  117. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  118. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  119. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  120. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  121. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  122. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  123. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  124. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/__init__.py +0 -0
  125. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/annotator.py +0 -0
  126. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/augment.py +0 -0
  127. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/build.py +0 -0
  128. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/converter.py +0 -0
  129. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/dataset.py +0 -0
  130. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/loaders.py +0 -0
  131. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/scripts/download_weights.sh +0 -0
  132. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/scripts/get_coco.sh +0 -0
  133. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/scripts/get_coco128.sh +0 -0
  134. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  135. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/split.py +0 -0
  136. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/data/split_dota.py +0 -0
  137. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/__init__.py +0 -0
  138. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/predictor.py +0 -0
  139. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/results.py +0 -0
  140. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/tuner.py +0 -0
  141. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/engine/validator.py +0 -0
  142. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/hub/__init__.py +0 -0
  143. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/hub/auth.py +0 -0
  144. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/hub/google/__init__.py +0 -0
  145. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/hub/session.py +0 -0
  146. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/hub/utils.py +0 -0
  147. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/__init__.py +0 -0
  148. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/fastsam/__init__.py +0 -0
  149. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/fastsam/model.py +0 -0
  150. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/fastsam/predict.py +0 -0
  151. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/fastsam/utils.py +0 -0
  152. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/fastsam/val.py +0 -0
  153. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/nas/__init__.py +0 -0
  154. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/nas/model.py +0 -0
  155. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/nas/predict.py +0 -0
  156. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/nas/val.py +0 -0
  157. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/rtdetr/__init__.py +0 -0
  158. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/rtdetr/model.py +0 -0
  159. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/rtdetr/predict.py +0 -0
  160. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/rtdetr/train.py +0 -0
  161. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/rtdetr/val.py +0 -0
  162. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/__init__.py +0 -0
  163. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/amg.py +0 -0
  164. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/build.py +0 -0
  165. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/model.py +0 -0
  166. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/__init__.py +0 -0
  167. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/blocks.py +0 -0
  168. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/decoders.py +0 -0
  169. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/encoders.py +0 -0
  170. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  171. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/sam.py +0 -0
  172. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  173. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/transformer.py +0 -0
  174. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/modules/utils.py +0 -0
  175. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/sam/predict.py +0 -0
  176. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/utils/__init__.py +0 -0
  177. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/utils/loss.py +0 -0
  178. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/utils/ops.py +0 -0
  179. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/__init__.py +0 -0
  180. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/__init__.py +0 -0
  181. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/predict.py +0 -0
  182. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/val.py +0 -0
  183. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/__init__.py +0 -0
  184. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/predict.py +0 -0
  185. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/train.py +0 -0
  186. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/val.py +0 -0
  187. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/model.py +0 -0
  188. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/__init__.py +0 -0
  189. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/predict.py +0 -0
  190. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/train.py +0 -0
  191. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/val.py +0 -0
  192. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/__init__.py +0 -0
  193. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/predict.py +0 -0
  194. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/train.py +0 -0
  195. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/val.py +0 -0
  196. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/__init__.py +0 -0
  197. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/predict.py +0 -0
  198. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/train.py +0 -0
  199. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/val.py +0 -0
  200. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/world/__init__.py +0 -0
  201. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/world/train.py +0 -0
  202. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/world/train_world.py +0 -0
  203. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  204. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  205. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/train.py +0 -0
  206. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  207. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/val.py +0 -0
  208. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/__init__.py +0 -0
  209. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/autobackend.py +0 -0
  210. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/modules/__init__.py +0 -0
  211. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/modules/activation.py +0 -0
  212. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/modules/block.py +0 -0
  213. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/modules/conv.py +0 -0
  214. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/modules/head.py +0 -0
  215. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/modules/transformer.py +0 -0
  216. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/modules/utils.py +0 -0
  217. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/tasks.py +0 -0
  218. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/nn/text_model.py +0 -0
  219. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/py.typed +0 -0
  220. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/__init__.py +0 -0
  221. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/ai_gym.py +0 -0
  222. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/analytics.py +0 -0
  223. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/config.py +0 -0
  224. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/distance_calculation.py +0 -0
  225. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/heatmap.py +0 -0
  226. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/instance_segmentation.py +0 -0
  227. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/object_blurrer.py +0 -0
  228. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/object_counter.py +0 -0
  229. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/object_cropper.py +0 -0
  230. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/parking_management.py +0 -0
  231. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/queue_management.py +0 -0
  232. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/region_counter.py +0 -0
  233. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/security_alarm.py +0 -0
  234. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/similarity_search.py +0 -0
  235. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/solutions.py +0 -0
  236. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/speed_estimation.py +0 -0
  237. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/streamlit_inference.py +0 -0
  238. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/templates/similarity-search.html +0 -0
  239. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/trackzone.py +0 -0
  240. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/solutions/vision_eye.py +0 -0
  241. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/__init__.py +0 -0
  242. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/basetrack.py +0 -0
  243. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/bot_sort.py +0 -0
  244. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/byte_tracker.py +0 -0
  245. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/track.py +0 -0
  246. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/utils/__init__.py +0 -0
  247. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/utils/gmc.py +0 -0
  248. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  249. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/trackers/utils/matching.py +0 -0
  250. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/autobatch.py +0 -0
  251. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/autodevice.py +0 -0
  252. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/__init__.py +0 -0
  253. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/base.py +0 -0
  254. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/clearml.py +0 -0
  255. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/comet.py +0 -0
  256. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/dvc.py +0 -0
  257. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/hub.py +0 -0
  258. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/mlflow.py +0 -0
  259. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/neptune.py +0 -0
  260. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/platform.py +0 -0
  261. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/raytune.py +0 -0
  262. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  263. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/callbacks/wb.py +0 -0
  264. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/checks.py +0 -0
  265. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/cpu.py +0 -0
  266. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/dist.py +0 -0
  267. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/downloads.py +0 -0
  268. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/errors.py +0 -0
  269. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/events.py +0 -0
  270. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/export/__init__.py +0 -0
  271. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/files.py +0 -0
  272. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/git.py +0 -0
  273. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/instance.py +0 -0
  274. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/logger.py +0 -0
  275. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/loss.py +0 -0
  276. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/nms.py +0 -0
  277. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/ops.py +0 -0
  278. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/patches.py +0 -0
  279. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/tal.py +0 -0
  280. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/torch_utils.py +0 -0
  281. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/tqdm.py +0 -0
  282. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/triton.py +0 -0
  283. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics/utils/tuner.py +0 -0
  284. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics.egg-info/SOURCES.txt +0 -0
  285. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics.egg-info/dependency_links.txt +0 -0
  286. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics.egg-info/entry_points.txt +0 -0
  287. {ultralytics-8.3.221 → ultralytics-8.3.222}/ultralytics.egg-info/requires.txt +0 -0
  288. {ultralytics-8.3.221 → ultralytics-8.3.222}/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.221
3
+ Version: 8.3.222
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>
@@ -189,5 +189,5 @@ close-quotes-on-newline = true
189
189
  in-place = true
190
190
 
191
191
  [tool.codespell]
192
- ignore-words-list = "crate,nd,ned,strack,dota,ane,segway,fo,gool,winn,commend,bloc,nam,afterall"
193
- skip = '*.pt,*.pth,*.torchscript,*.onnx,*.tflite,*.pb,*.bin,*.param,*.mlmodel,*.engine,*.npy,*.data*,*.csv,*pnnx*,*venv*,*translat*,__pycache__*,*.ico,*.jpg,*.png,*.mp4,*.mov,/runs,/.git,./docs/??/*.md,./docs/mkdocs_??.yml'
192
+ ignore-words-list = "grey,writeable,finalY,RepResNet,Idenfy,WIT,Smoot,EHR,ROUGE,ALS,iTerm,Carmel,FPR,Hach,Calle,ore,COO,MOT,crate,nd,ned,strack,dota,ane,segway,fo,gool,winn,commend,bloc,nam,afterall,skelton,goin"
193
+ skip = "lvis.yaml,open-images-v7.yaml,ImageNet.yaml,*.pt,*.pth,*.torchscript,*.onnx,*.tflite,*.pb,*.bin,*.param,*.mlmodel,*.engine,*.npy,*.data*,*.csv,*pnnx*,*venv*,*translat*,*lock*,__pycache__*,*.ico,*.jpg,*.png,*.webp,*.avif,*.mp4,*.mov,/runs,/.git,./docs/??/*.md,./docs/mkdocs_??.yml"
@@ -136,23 +136,23 @@ def test_predict_visualize(model):
136
136
  YOLO(WEIGHTS_DIR / model)(SOURCE, imgsz=32, visualize=True)
137
137
 
138
138
 
139
- def test_predict_grey_and_4ch(tmp_path):
140
- """Test YOLO prediction on SOURCE converted to greyscale and 4-channel images with various filenames."""
139
+ def test_predict_gray_and_4ch(tmp_path):
140
+ """Test YOLO prediction on SOURCE converted to grayscale and 4-channel images with various filenames."""
141
141
  im = Image.open(SOURCE)
142
142
 
143
- source_greyscale = tmp_path / "greyscale.jpg"
143
+ source_grayscale = tmp_path / "grayscale.jpg"
144
144
  source_rgba = tmp_path / "4ch.png"
145
145
  source_non_utf = tmp_path / "non_UTF_测试文件_tést_image.jpg"
146
146
  source_spaces = tmp_path / "image with spaces.jpg"
147
147
 
148
- im.convert("L").save(source_greyscale) # greyscale
148
+ im.convert("L").save(source_grayscale) # grayscale
149
149
  im.convert("RGBA").save(source_rgba) # 4-ch PNG with alpha
150
150
  im.save(source_non_utf) # non-UTF characters in filename
151
151
  im.save(source_spaces) # spaces in filename
152
152
 
153
153
  # Inference
154
154
  model = YOLO(MODEL)
155
- for f in source_rgba, source_greyscale, source_non_utf, source_spaces:
155
+ for f in source_rgba, source_grayscale, source_non_utf, source_spaces:
156
156
  for source in Image.open(f), cv2.imread(str(f)), f:
157
157
  results = model(source, save=True, verbose=True, imgsz=32)
158
158
  assert len(results) == 1 # verify that an image was run
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.221"
3
+ __version__ = "8.3.222"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -307,7 +307,7 @@ class BaseDataset(Dataset):
307
307
  b += im.nbytes
308
308
  if not os.access(Path(im_file).parent, os.W_OK):
309
309
  self.cache = None
310
- LOGGER.warning(f"{self.prefix}Skipping caching images to disk, directory not writeable")
310
+ LOGGER.warning(f"{self.prefix}Skipping caching images to disk, directory not writable")
311
311
  return False
312
312
  disk_required = b * self.ni / n * (1 + safety_margin) # bytes required to cache dataset to disk
313
313
  total, _used, free = shutil.disk_usage(Path(self.im_files[0]).parent)
@@ -804,4 +804,4 @@ def save_dataset_cache_file(prefix: str, path: Path, x: dict, version: str):
804
804
  np.save(file, x)
805
805
  LOGGER.info(f"{prefix}New cache created: {path}")
806
806
  else:
807
- LOGGER.warning(f"{prefix}Cache directory {path.parent} is not writeable, cache not saved.")
807
+ LOGGER.warning(f"{prefix}Cache directory {path.parent} is not writable, cache not saved.")
@@ -367,10 +367,10 @@ class Exporter:
367
367
  if not self.args.int8:
368
368
  LOGGER.warning("IMX export requires int8=True, setting int8=True.")
369
369
  self.args.int8 = True
370
- if not self.args.nms:
370
+ if not self.args.nms and model.task in {"detect", "pose"}:
371
371
  LOGGER.warning("IMX export requires nms=True, setting nms=True.")
372
372
  self.args.nms = True
373
- if model.task not in {"detect", "pose"}:
373
+ if model.task not in {"detect", "pose", "classify"}:
374
374
  raise ValueError("IMX export only supported for detection and pose estimation models.")
375
375
  if not hasattr(model, "names"):
376
376
  model.names = default_class_names()
@@ -396,8 +396,6 @@ class Exporter:
396
396
  assert self.args.name in RKNN_CHIPS, (
397
397
  f"Invalid processor name '{self.args.name}' for Rockchip RKNN export. Valid names are {RKNN_CHIPS}."
398
398
  )
399
- if self.args.int8 and tflite:
400
- assert not getattr(model, "end2end", False), "TFLite INT8 export not supported for end2end models."
401
399
  if self.args.nms:
402
400
  assert not isinstance(model, ClassificationModel), "'nms=True' is not valid for classification models."
403
401
  assert not tflite or not ARM64 or not LINUX, "TFLite export with NMS unsupported on ARM64 Linux"
@@ -1510,17 +1508,16 @@ class NMSModel(torch.nn.Module):
1510
1508
  box, score, cls, extra = box[mask], score[mask], cls[mask], extra[mask]
1511
1509
  nmsbox = box.clone()
1512
1510
  # `8` is the minimum value experimented to get correct NMS results for obb
1513
- multiplier = 8 if self.obb else 1
1511
+ multiplier = (8 if self.obb else 1) / max(len(self.model.names), 1)
1514
1512
  # Normalize boxes for NMS since large values for class offset causes issue with int8 quantization
1515
1513
  if self.args.format == "tflite": # TFLite is already normalized
1516
1514
  nmsbox *= multiplier
1517
1515
  else:
1518
- nmsbox = multiplier * nmsbox / torch.tensor(x.shape[2:], **kwargs).max()
1519
- if not self.args.agnostic_nms: # class-specific NMS
1516
+ nmsbox = multiplier * (nmsbox / torch.tensor(x.shape[2:], **kwargs).max())
1517
+ if not self.args.agnostic_nms: # class-wise NMS
1520
1518
  end = 2 if self.obb else 4
1521
1519
  # fully explicit expansion otherwise reshape error
1522
- # large max_wh causes issues when quantizing
1523
- cls_offset = cls.reshape(-1, 1).expand(nmsbox.shape[0], end)
1520
+ cls_offset = cls.view(cls.shape[0], 1).expand(cls.shape[0], end)
1524
1521
  offbox = nmsbox[:, :end] + cls_offset * multiplier
1525
1522
  nmsbox = torch.cat((offbox, nmsbox[:, end:]), dim=-1)
1526
1523
  nms_fn = (
@@ -877,7 +877,7 @@ class Model(torch.nn.Module):
877
877
  >>> model = model._apply(lambda t: t.cuda()) # Move model to GPU
878
878
  """
879
879
  self._check_is_pytorch_model()
880
- self = super()._apply(fn) # noqa
880
+ self = super()._apply(fn)
881
881
  self.predictor = None # reset predictor as device may have changed
882
882
  self.overrides["device"] = self.device # was str(self.device) i.e. device(type='cuda', index=0) -> 'cuda:0'
883
883
  return self
@@ -727,7 +727,7 @@ class BaseTrainer:
727
727
 
728
728
  def label_loss_items(self, loss_items=None, prefix="train"):
729
729
  """
730
- Return a loss dict with labelled training loss items tensor.
730
+ Return a loss dict with labeled training loss items tensor.
731
731
 
732
732
  Note:
733
733
  This is not needed for classification but necessary for segmentation & detection
@@ -38,7 +38,7 @@ class ClassificationTrainer(BaseTrainer):
38
38
  preprocess_batch: Preprocess a batch of images and classes.
39
39
  progress_string: Return a formatted string showing training progress.
40
40
  get_validator: Return an instance of ClassificationValidator.
41
- label_loss_items: Return a loss dict with labelled training loss items.
41
+ label_loss_items: Return a loss dict with labeled training loss items.
42
42
  final_eval: Evaluate trained model and save validation results.
43
43
  plot_training_samples: Plot training samples with their annotations.
44
44
 
@@ -178,7 +178,7 @@ class ClassificationTrainer(BaseTrainer):
178
178
 
179
179
  def label_loss_items(self, loss_items: torch.Tensor | None = None, prefix: str = "train"):
180
180
  """
181
- Return a loss dict with labelled training loss items tensor.
181
+ Return a loss dict with labeled training loss items tensor.
182
182
 
183
183
  Args:
184
184
  loss_items (torch.Tensor, optional): Loss tensor items.
@@ -795,13 +795,13 @@ def is_pip_package(filepath: str = __name__) -> bool:
795
795
 
796
796
  def is_dir_writeable(dir_path: str | Path) -> bool:
797
797
  """
798
- Check if a directory is writeable.
798
+ Check if a directory is writable.
799
799
 
800
800
  Args:
801
801
  dir_path (str | Path): The path to the directory.
802
802
 
803
803
  Returns:
804
- (bool): True if the directory is writeable, False otherwise.
804
+ (bool): True if the directory is writable, False otherwise.
805
805
  """
806
806
  return os.access(str(dir_path), os.W_OK)
807
807
 
@@ -882,14 +882,14 @@ def get_user_config_dir(sub_dir="Ultralytics"):
882
882
  p.mkdir(parents=True, exist_ok=True)
883
883
  return p
884
884
 
885
- # Fallbacks for Docker, GCP/AWS functions where only /tmp is writeable
885
+ # Fallbacks for Docker, GCP/AWS functions where only /tmp is writable
886
886
  for alt in [Path("/tmp") / sub_dir, Path.cwd() / sub_dir]:
887
887
  if alt.exists():
888
888
  return alt
889
889
  if is_dir_writeable(alt.parent):
890
890
  alt.mkdir(parents=True, exist_ok=True)
891
891
  LOGGER.warning(
892
- f"user config directory '{p}' is not writeable, using '{alt}'. Set YOLO_CONFIG_DIR to override."
892
+ f"user config directory '{p}' is not writable, using '{alt}'. Set YOLO_CONFIG_DIR to override."
893
893
  )
894
894
  return alt
895
895
 
@@ -144,7 +144,9 @@ def benchmark(
144
144
  if format == "imx":
145
145
  assert not is_end2end
146
146
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 IMX exports not supported"
147
- assert model.task == "detect", "IMX only supported for detection task"
147
+ assert model.task in {"detect", "classify", "pose"}, (
148
+ "IMX export is only supported for detection, classification and pose estimation tasks"
149
+ )
148
150
  assert "C2f" in model.__str__(), "IMX only supported for YOLOv8n and YOLO11n"
149
151
  if format == "rknn":
150
152
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 RKNN exports not supported yet"
@@ -6,6 +6,7 @@ import subprocess
6
6
  import types
7
7
  from pathlib import Path
8
8
 
9
+ import numpy as np
9
10
  import torch
10
11
 
11
12
  from ultralytics.nn.modules import Detect, Pose
@@ -13,6 +14,32 @@ from ultralytics.utils import LOGGER
13
14
  from ultralytics.utils.tal import make_anchors
14
15
  from ultralytics.utils.torch_utils import copy_attr
15
16
 
17
+ # Configuration for Model Compression Toolkit (MCT) quantization
18
+ MCT_CONFIG = {
19
+ "YOLO11": {
20
+ "detect": {
21
+ "layer_names": ["sub", "mul_2", "add_14", "cat_21"],
22
+ "weights_memory": 2585350.2439,
23
+ "n_layers": 238,
24
+ },
25
+ "pose": {
26
+ "layer_names": ["sub", "mul_2", "add_14", "cat_22", "cat_23", "mul_4", "add_15"],
27
+ "weights_memory": 2437771.67,
28
+ "n_layers": 257,
29
+ },
30
+ "classify": {"layer_names": [], "weights_memory": np.inf, "n_layers": 112},
31
+ },
32
+ "YOLOv8": {
33
+ "detect": {"layer_names": ["sub", "mul", "add_6", "cat_17"], "weights_memory": 2550540.8, "n_layers": 168},
34
+ "pose": {
35
+ "layer_names": ["add_7", "mul_2", "cat_19", "mul", "sub", "add_6", "cat_18"],
36
+ "weights_memory": 2482451.85,
37
+ "n_layers": 187,
38
+ },
39
+ "classify": {"layer_names": [], "weights_memory": np.inf, "n_layers": 73},
40
+ },
41
+ }
42
+
16
43
 
17
44
  class FXModel(torch.nn.Module):
18
45
  """
@@ -200,30 +227,13 @@ def torch2imx(
200
227
  tpc = get_target_platform_capabilities(tpc_version="4.0", device_type="imx500")
201
228
 
202
229
  bit_cfg = mct.core.BitWidthConfig()
203
- if "C2PSA" in model.__str__(): # YOLO11
204
- if model.task == "detect":
205
- layer_names = ["sub", "mul_2", "add_14", "cat_21"]
206
- weights_memory = 2585350.2439
207
- n_layers = 238 # 238 layers for fused YOLO11n
208
- elif model.task == "pose":
209
- layer_names = ["sub", "mul_2", "add_14", "cat_22", "cat_23", "mul_4", "add_15"]
210
- weights_memory = 2437771.67
211
- n_layers = 257 # 257 layers for fused YOLO11n-pose
212
- else: # YOLOv8
213
- if model.task == "detect":
214
- layer_names = ["sub", "mul", "add_6", "cat_17"]
215
- weights_memory = 2550540.8
216
- n_layers = 168 # 168 layers for fused YOLOv8n
217
- elif model.task == "pose":
218
- layer_names = ["add_7", "mul_2", "cat_19", "mul", "sub", "add_6", "cat_18"]
219
- weights_memory = 2482451.85
220
- n_layers = 187 # 187 layers for fused YOLO11n-pose
230
+ mct_config = MCT_CONFIG["YOLO11" if "C2PSA" in model.__str__() else "YOLOv8"][model.task]
221
231
 
222
232
  # Check if the model has the expected number of layers
223
- if len(list(model.modules())) != n_layers:
233
+ if len(list(model.modules())) != mct_config["n_layers"]:
224
234
  raise ValueError("IMX export only supported for YOLOv8n and YOLO11n models.")
225
235
 
226
- for layer_name in layer_names:
236
+ for layer_name in mct_config["layer_names"]:
227
237
  bit_cfg.set_manual_activation_bit_width([mct.core.common.network_editors.NodeNameFilter(layer_name)], 16)
228
238
 
229
239
  config = mct.core.CoreConfig(
@@ -232,7 +242,7 @@ def torch2imx(
232
242
  bit_width_config=bit_cfg,
233
243
  )
234
244
 
235
- resource_utilization = mct.core.ResourceUtilization(weights_memory=weights_memory)
245
+ resource_utilization = mct.core.ResourceUtilization(weights_memory=mct_config["weights_memory"])
236
246
 
237
247
  quant_model = (
238
248
  mct.gptq.pytorch_gradient_post_training_quantization( # Perform Gradient-Based Post Training Quantization
@@ -255,13 +265,14 @@ def torch2imx(
255
265
  )[0]
256
266
  )
257
267
 
258
- quant_model = NMSWrapper(
259
- model=quant_model,
260
- score_threshold=conf or 0.001,
261
- iou_threshold=iou,
262
- max_detections=max_det,
263
- task=model.task,
264
- )
268
+ if model.task != "classify":
269
+ quant_model = NMSWrapper(
270
+ model=quant_model,
271
+ score_threshold=conf or 0.001,
272
+ iou_threshold=iou,
273
+ max_detections=max_det,
274
+ task=model.task,
275
+ )
265
276
 
266
277
  f = Path(str(file).replace(file.suffix, "_imx_model"))
267
278
  f.mkdir(exist_ok=True)
@@ -663,7 +663,7 @@ def plot_pr_curve(
663
663
  for i, y in enumerate(py.T):
664
664
  ax.plot(px, y, linewidth=1, label=f"{names[i]} {ap[i, 0]:.3f}") # plot(recall, precision)
665
665
  else:
666
- ax.plot(px, py, linewidth=1, color="grey") # plot(recall, precision)
666
+ ax.plot(px, py, linewidth=1, color="gray") # plot(recall, precision)
667
667
 
668
668
  ax.plot(px, py.mean(1), linewidth=3, color="blue", label=f"all classes {ap[:, 0].mean():.3f} mAP@0.5")
669
669
  ax.set_xlabel("Recall")
@@ -708,7 +708,7 @@ def plot_mc_curve(
708
708
  for i, y in enumerate(py):
709
709
  ax.plot(px, y, linewidth=1, label=f"{names[i]}") # plot(confidence, metric)
710
710
  else:
711
- ax.plot(px, py.T, linewidth=1, color="grey") # plot(confidence, metric)
711
+ ax.plot(px, py.T, linewidth=1, color="gray") # plot(confidence, metric)
712
712
 
713
713
  y = smooth(py.mean(0), 0.1)
714
714
  ax.plot(px, y, linewidth=3, color="blue", label=f"all classes {y.max():.2f} at {px[y.argmax()]:.3f}")
@@ -722,7 +722,7 @@ def plot_images(
722
722
  convert tensor inputs to numpy arrays for processing.
723
723
 
724
724
  Channel Support:
725
- - 1 channel: Greyscale
725
+ - 1 channel: Grayscale
726
726
  - 2 channels: Third channel added as zeros
727
727
  - 3 channels: Used as-is (standard RGB)
728
728
  - 4+ channels: Cropped to first 3 channels
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.221
3
+ Version: 8.3.222
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>
File without changes
File without changes
File without changes