ultralytics 8.3.199__tar.gz → 8.3.201__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.199 → ultralytics-8.3.201}/PKG-INFO +1 -1
  2. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/__init__.py +1 -1
  3. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/__init__.py +1 -1
  4. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/SKU-110K.yaml +1 -1
  5. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/exporter.py +23 -169
  6. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/trainer.py +31 -28
  7. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/tuner.py +2 -1
  8. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/modules/head.py +1 -5
  9. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/tasks.py +0 -1
  10. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/benchmarks.py +1 -1
  11. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/checks.py +2 -2
  12. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/dist.py +11 -3
  13. ultralytics-8.3.199/ultralytics/utils/export.py → ultralytics-8.3.201/ultralytics/utils/export/__init__.py +9 -7
  14. ultralytics-8.3.201/ultralytics/utils/export/imx.py +289 -0
  15. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/torch_utils.py +1 -48
  16. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics.egg-info/PKG-INFO +1 -1
  17. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics.egg-info/SOURCES.txt +3 -2
  18. {ultralytics-8.3.199 → ultralytics-8.3.201}/LICENSE +0 -0
  19. {ultralytics-8.3.199 → ultralytics-8.3.201}/README.md +0 -0
  20. {ultralytics-8.3.199 → ultralytics-8.3.201}/pyproject.toml +0 -0
  21. {ultralytics-8.3.199 → ultralytics-8.3.201}/setup.cfg +0 -0
  22. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/__init__.py +0 -0
  23. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/conftest.py +0 -0
  24. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/test_cli.py +0 -0
  25. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/test_cuda.py +0 -0
  26. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/test_engine.py +0 -0
  27. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/test_exports.py +0 -0
  28. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/test_integrations.py +0 -0
  29. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/test_python.py +0 -0
  30. {ultralytics-8.3.199 → ultralytics-8.3.201}/tests/test_solutions.py +0 -0
  31. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/assets/bus.jpg +0 -0
  32. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/assets/zidane.jpg +0 -0
  33. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  34. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  35. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  36. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  37. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  38. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  39. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  40. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  41. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  42. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  43. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  44. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  45. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  46. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco.yaml +0 -0
  47. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  48. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  49. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  50. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  51. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  52. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  53. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  54. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  55. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  56. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  57. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  58. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  59. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  60. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  61. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  62. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  63. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  64. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/signature.yaml +0 -0
  65. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  66. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/datasets/xView.yaml +0 -0
  67. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/default.yaml +0 -0
  68. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  69. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  70. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  71. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  72. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  73. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  74. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  75. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  76. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  77. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  78. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  79. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  80. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  81. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  82. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  83. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  84. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  85. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  86. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  87. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  88. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  89. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  90. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  91. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  92. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  93. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  94. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  95. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  96. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  97. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  98. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  99. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  100. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  101. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  102. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  103. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  104. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  105. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  106. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  107. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  108. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  109. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  110. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  111. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  112. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  113. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  114. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  115. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  116. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  117. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  118. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  119. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  120. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  121. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  122. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  123. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  124. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  125. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/__init__.py +0 -0
  126. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/annotator.py +0 -0
  127. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/augment.py +0 -0
  128. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/base.py +0 -0
  129. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/build.py +0 -0
  130. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/converter.py +0 -0
  131. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/dataset.py +0 -0
  132. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/loaders.py +0 -0
  133. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/scripts/download_weights.sh +0 -0
  134. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/scripts/get_coco.sh +0 -0
  135. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/scripts/get_coco128.sh +0 -0
  136. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  137. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/split.py +0 -0
  138. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/split_dota.py +0 -0
  139. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/data/utils.py +0 -0
  140. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/__init__.py +0 -0
  141. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/model.py +0 -0
  142. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/predictor.py +0 -0
  143. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/results.py +0 -0
  144. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/engine/validator.py +0 -0
  145. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/hub/__init__.py +0 -0
  146. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/hub/auth.py +0 -0
  147. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/hub/google/__init__.py +0 -0
  148. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/hub/session.py +0 -0
  149. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/hub/utils.py +0 -0
  150. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/__init__.py +0 -0
  151. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/fastsam/__init__.py +0 -0
  152. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/fastsam/model.py +0 -0
  153. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/fastsam/predict.py +0 -0
  154. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/fastsam/utils.py +0 -0
  155. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/fastsam/val.py +0 -0
  156. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/nas/__init__.py +0 -0
  157. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/nas/model.py +0 -0
  158. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/nas/predict.py +0 -0
  159. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/nas/val.py +0 -0
  160. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/rtdetr/__init__.py +0 -0
  161. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/rtdetr/model.py +0 -0
  162. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/rtdetr/predict.py +0 -0
  163. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/rtdetr/train.py +0 -0
  164. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/rtdetr/val.py +0 -0
  165. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/__init__.py +0 -0
  166. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/amg.py +0 -0
  167. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/build.py +0 -0
  168. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/model.py +0 -0
  169. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/__init__.py +0 -0
  170. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/blocks.py +0 -0
  171. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/decoders.py +0 -0
  172. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/encoders.py +0 -0
  173. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  174. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/sam.py +0 -0
  175. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  176. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/transformer.py +0 -0
  177. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/modules/utils.py +0 -0
  178. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/sam/predict.py +0 -0
  179. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/utils/__init__.py +0 -0
  180. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/utils/loss.py +0 -0
  181. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/utils/ops.py +0 -0
  182. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/__init__.py +0 -0
  183. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/classify/__init__.py +0 -0
  184. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/classify/predict.py +0 -0
  185. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/classify/train.py +0 -0
  186. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/classify/val.py +0 -0
  187. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/detect/__init__.py +0 -0
  188. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/detect/predict.py +0 -0
  189. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/detect/train.py +0 -0
  190. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/detect/val.py +0 -0
  191. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/model.py +0 -0
  192. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/obb/__init__.py +0 -0
  193. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/obb/predict.py +0 -0
  194. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/obb/train.py +0 -0
  195. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/obb/val.py +0 -0
  196. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/pose/__init__.py +0 -0
  197. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/pose/predict.py +0 -0
  198. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/pose/train.py +0 -0
  199. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/pose/val.py +0 -0
  200. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/segment/__init__.py +0 -0
  201. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/segment/predict.py +0 -0
  202. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/segment/train.py +0 -0
  203. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/segment/val.py +0 -0
  204. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/world/__init__.py +0 -0
  205. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/world/train.py +0 -0
  206. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/world/train_world.py +0 -0
  207. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  208. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  209. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/yoloe/train.py +0 -0
  210. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  211. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/models/yolo/yoloe/val.py +0 -0
  212. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/__init__.py +0 -0
  213. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/autobackend.py +0 -0
  214. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/modules/__init__.py +0 -0
  215. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/modules/activation.py +0 -0
  216. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/modules/block.py +0 -0
  217. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/modules/conv.py +0 -0
  218. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/modules/transformer.py +0 -0
  219. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/modules/utils.py +0 -0
  220. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/nn/text_model.py +0 -0
  221. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/py.typed +0 -0
  222. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/__init__.py +0 -0
  223. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/ai_gym.py +0 -0
  224. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/analytics.py +0 -0
  225. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/config.py +0 -0
  226. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/distance_calculation.py +0 -0
  227. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/heatmap.py +0 -0
  228. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/instance_segmentation.py +0 -0
  229. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/object_blurrer.py +0 -0
  230. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/object_counter.py +0 -0
  231. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/object_cropper.py +0 -0
  232. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/parking_management.py +0 -0
  233. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/queue_management.py +0 -0
  234. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/region_counter.py +0 -0
  235. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/security_alarm.py +0 -0
  236. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/similarity_search.py +0 -0
  237. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/solutions.py +0 -0
  238. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/speed_estimation.py +0 -0
  239. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/streamlit_inference.py +0 -0
  240. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/templates/similarity-search.html +0 -0
  241. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/trackzone.py +0 -0
  242. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/solutions/vision_eye.py +0 -0
  243. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/__init__.py +0 -0
  244. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/basetrack.py +0 -0
  245. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/bot_sort.py +0 -0
  246. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/byte_tracker.py +0 -0
  247. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/track.py +0 -0
  248. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/utils/__init__.py +0 -0
  249. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/utils/gmc.py +0 -0
  250. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  251. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/trackers/utils/matching.py +0 -0
  252. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/__init__.py +0 -0
  253. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/autobatch.py +0 -0
  254. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/autodevice.py +0 -0
  255. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/__init__.py +0 -0
  256. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/base.py +0 -0
  257. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/clearml.py +0 -0
  258. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/comet.py +0 -0
  259. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/dvc.py +0 -0
  260. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/hub.py +0 -0
  261. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/mlflow.py +0 -0
  262. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/neptune.py +0 -0
  263. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/platform.py +0 -0
  264. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/raytune.py +0 -0
  265. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  266. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/callbacks/wb.py +0 -0
  267. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/cpu.py +0 -0
  268. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/downloads.py +0 -0
  269. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/errors.py +0 -0
  270. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/events.py +0 -0
  271. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/files.py +0 -0
  272. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/git.py +0 -0
  273. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/instance.py +0 -0
  274. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/logger.py +0 -0
  275. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/loss.py +0 -0
  276. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/metrics.py +0 -0
  277. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/nms.py +0 -0
  278. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/ops.py +0 -0
  279. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/patches.py +0 -0
  280. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/plotting.py +0 -0
  281. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/tal.py +0 -0
  282. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/tqdm.py +0 -0
  283. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/triton.py +0 -0
  284. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics/utils/tuner.py +0 -0
  285. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics.egg-info/dependency_links.txt +0 -0
  286. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics.egg-info/entry_points.txt +0 -0
  287. {ultralytics-8.3.199 → ultralytics-8.3.201}/ultralytics.egg-info/requires.txt +0 -0
  288. {ultralytics-8.3.199 → ultralytics-8.3.201}/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.199
3
+ Version: 8.3.201
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.199"
3
+ __version__ = "8.3.201"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -856,7 +856,6 @@ def entrypoint(debug: str = "") -> None:
856
856
  return
857
857
 
858
858
  special = {
859
- "help": lambda: LOGGER.info(CLI_HELP_MSG),
860
859
  "checks": checks.collect_system_info,
861
860
  "version": lambda: LOGGER.info(__version__),
862
861
  "settings": lambda: handle_yolo_settings(args[1:]),
@@ -866,6 +865,7 @@ def entrypoint(debug: str = "") -> None:
866
865
  "logout": lambda: handle_yolo_hub(args),
867
866
  "copy-cfg": copy_default_cfg,
868
867
  "solutions": lambda: handle_yolo_solutions(args[1:]),
868
+ "help": lambda: LOGGER.info(CLI_HELP_MSG), # help below hub for -h flag precedence
869
869
  }
870
870
  full_args_dict = {**DEFAULT_CFG_DICT, **{k: None for k in TASKS}, **{k: None for k in MODES}, **special}
871
871
 
@@ -45,7 +45,7 @@ download: |
45
45
  # Convert labels
46
46
  names = "image", "x1", "y1", "x2", "y2", "class", "image_width", "image_height" # column names
47
47
  for d in "annotations_train.csv", "annotations_val.csv", "annotations_test.csv":
48
- x = pl.read_csv(dir / "annotations" / d, names=names, infer_schema_length=None).to_numpy() # annotations
48
+ x = pl.read_csv(dir / "annotations" / d, has_header=False, new_columns=names, infer_schema_length=None).to_numpy() # annotations
49
49
  images, unique_images = x[:, 0], np.unique(x[:, 0])
50
50
  with open((dir / d).with_suffix(".txt").__str__().replace("annotations_", ""), "w", encoding="utf-8") as f:
51
51
  f.writelines(f"./images/{s}\n" for s in unique_images)
@@ -106,7 +106,7 @@ from ultralytics.utils.checks import (
106
106
  is_sudo_available,
107
107
  )
108
108
  from ultralytics.utils.downloads import attempt_download_asset, get_github_assets, safe_download
109
- from ultralytics.utils.export import export_engine, export_onnx
109
+ from ultralytics.utils.export import onnx2engine, torch2imx, torch2onnx
110
110
  from ultralytics.utils.files import file_size, spaces_in_path
111
111
  from ultralytics.utils.metrics import batch_probiou
112
112
  from ultralytics.utils.nms import TorchNMS
@@ -194,8 +194,11 @@ def try_export(inner_func):
194
194
  dt = 0.0
195
195
  try:
196
196
  with Profile() as dt:
197
- f = inner_func(*args, **kwargs)
198
- LOGGER.info(f"{prefix} export success {dt.t:.1f}s, saved as '{f}' ({file_size(f):.1f} MB)")
197
+ f = inner_func(*args, **kwargs) # exported file/dir or tuple of (file/dir, *)
198
+ path = f if isinstance(f, (str, Path)) else f[0]
199
+ mb = file_size(path)
200
+ assert mb > 0.0, "0.0 MB output model size"
201
+ LOGGER.info(f"{prefix} export success ✅ {dt.t:.1f}s, saved as '{path}' ({mb:.1f} MB)")
199
202
  return f
200
203
  except Exception as e:
201
204
  LOGGER.error(f"{prefix} export failure {dt.t:.1f}s: {e}")
@@ -284,7 +287,8 @@ class Exporter:
284
287
  # Get the closest match if format is invalid
285
288
  matches = difflib.get_close_matches(fmt, fmts, n=1, cutoff=0.6) # 60% similarity required to match
286
289
  if not matches:
287
- raise ValueError(f"Invalid export format='{fmt}'. Valid formats are {fmts}")
290
+ msg = "Model is already in PyTorch format." if fmt == "pt" else f"Invalid export format='{fmt}'."
291
+ raise ValueError(f"{msg} Valid formats are {fmts}")
288
292
  LOGGER.warning(f"Invalid export format='{fmt}', updating to format='{matches[0]}'")
289
293
  fmt = matches[0]
290
294
  flags = [x == fmt for x in fmts]
@@ -408,9 +412,9 @@ class Exporter:
408
412
  model = model.fuse()
409
413
 
410
414
  if imx:
411
- from ultralytics.utils.torch_utils import FXModel
415
+ from ultralytics.utils.export.imx import FXModel
412
416
 
413
- model = FXModel(model)
417
+ model = FXModel(model, self.imgsz)
414
418
  for m in model.modules():
415
419
  if isinstance(m, Classify):
416
420
  m.export = True
@@ -425,15 +429,6 @@ class Exporter:
425
429
  elif isinstance(m, C2f) and not is_tf_format:
426
430
  # EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
427
431
  m.forward = m.forward_split
428
- if isinstance(m, Detect) and imx:
429
- from ultralytics.utils.tal import make_anchors
430
-
431
- m.anchors, m.strides = (
432
- x.transpose(0, 1)
433
- for x in make_anchors(
434
- torch.cat([s / m.stride.unsqueeze(-1) for s in self.imgsz], dim=1), m.stride, 0.5
435
- )
436
- )
437
432
 
438
433
  y = None
439
434
  for _ in range(2): # dry runs
@@ -609,7 +604,7 @@ class Exporter:
609
604
  self.args.opset = opset_version # for NMSModel
610
605
 
611
606
  with arange_patch(self.args):
612
- export_onnx(
607
+ torch2onnx(
613
608
  NMSModel(self.model, self.args) if self.args.nms else self.model,
614
609
  self.im,
615
610
  f,
@@ -932,7 +927,7 @@ class Exporter:
932
927
  LOGGER.info(f"\n{prefix} starting export with TensorRT {trt.__version__}...")
933
928
  assert Path(f_onnx).exists(), f"failed to export ONNX file: {f_onnx}"
934
929
  f = self.file.with_suffix(".engine") # TensorRT engine file
935
- export_engine(
930
+ onnx2engine(
936
931
  f_onnx,
937
932
  f,
938
933
  self.args.workspace,
@@ -963,7 +958,7 @@ class Exporter:
963
958
  "tf_keras<=2.19.0", # required by 'onnx2tf' package
964
959
  "sng4onnx>=1.0.1", # required by 'onnx2tf' package
965
960
  "onnx_graphsurgeon>=0.3.26", # required by 'onnx2tf' package
966
- "ai-edge-litert>=1.2.0,<1.4.0", # required by 'onnx2tf' package
961
+ "ai-edge-litert>=1.2.0" + (",<1.4.0" if MACOS else ""), # required by 'onnx2tf' package
967
962
  "onnx>=1.12.0",
968
963
  "onnx2tf>=1.26.3",
969
964
  "onnxslim>=0.1.67",
@@ -1168,7 +1163,6 @@ class Exporter:
1168
1163
  @try_export
1169
1164
  def export_imx(self, prefix=colorstr("IMX:")):
1170
1165
  """Export YOLO model to IMX format."""
1171
- gptq = False
1172
1166
  assert LINUX, (
1173
1167
  "export only supported on Linux. "
1174
1168
  "See https://developer.aitrios.sony-semicon.com/en/raspberrypi-ai-camera/documentation/imx500-converter"
@@ -1181,13 +1175,6 @@ class Exporter:
1181
1175
  check_requirements("imx500-converter[pt]>=3.16.1") # Separate requirements for imx500-converter
1182
1176
  check_requirements("mct-quantizers>=1.6.0") # Separate for compatibility with model-compression-toolkit
1183
1177
 
1184
- import model_compression_toolkit as mct
1185
- import onnx
1186
- from edgemdt_tpc import get_target_platform_capabilities
1187
- from sony_custom_layers.pytorch import multiclass_nms_with_indices
1188
-
1189
- LOGGER.info(f"\n{prefix} starting export with model_compression_toolkit {mct.__version__}...")
1190
-
1191
1178
  # Install Java>=17
1192
1179
  try:
1193
1180
  java_output = subprocess.run(["java", "--version"], check=True, capture_output=True).stdout.decode()
@@ -1198,150 +1185,17 @@ class Exporter:
1198
1185
  cmd = (["sudo"] if is_sudo_available() else []) + ["apt", "install", "-y", "openjdk-21-jre"]
1199
1186
  subprocess.run(cmd, check=True)
1200
1187
 
1201
- def representative_dataset_gen(dataloader=self.get_int8_calibration_dataloader(prefix)):
1202
- for batch in dataloader:
1203
- img = batch["img"]
1204
- img = img / 255.0
1205
- yield [img]
1206
-
1207
- tpc = get_target_platform_capabilities(tpc_version="4.0", device_type="imx500")
1208
-
1209
- bit_cfg = mct.core.BitWidthConfig()
1210
- if "C2PSA" in self.model.__str__(): # YOLO11
1211
- if self.model.task == "detect":
1212
- layer_names = ["sub", "mul_2", "add_14", "cat_21"]
1213
- weights_memory = 2585350.2439
1214
- n_layers = 238 # 238 layers for fused YOLO11n
1215
- elif self.model.task == "pose":
1216
- layer_names = ["sub", "mul_2", "add_14", "cat_22", "cat_23", "mul_4", "add_15"]
1217
- weights_memory = 2437771.67
1218
- n_layers = 257 # 257 layers for fused YOLO11n-pose
1219
- else: # YOLOv8
1220
- if self.model.task == "detect":
1221
- layer_names = ["sub", "mul", "add_6", "cat_17"]
1222
- weights_memory = 2550540.8
1223
- n_layers = 168 # 168 layers for fused YOLOv8n
1224
- elif self.model.task == "pose":
1225
- layer_names = ["add_7", "mul_2", "cat_19", "mul", "sub", "add_6", "cat_18"]
1226
- weights_memory = 2482451.85
1227
- n_layers = 187 # 187 layers for fused YOLO11n-pose
1228
-
1229
- # Check if the model has the expected number of layers
1230
- if len(list(self.model.modules())) != n_layers:
1231
- raise ValueError("IMX export only supported for YOLOv8n and YOLO11n models.")
1232
-
1233
- for layer_name in layer_names:
1234
- bit_cfg.set_manual_activation_bit_width([mct.core.common.network_editors.NodeNameFilter(layer_name)], 16)
1235
-
1236
- config = mct.core.CoreConfig(
1237
- mixed_precision_config=mct.core.MixedPrecisionQuantizationConfig(num_of_images=10),
1238
- quantization_config=mct.core.QuantizationConfig(concat_threshold_update=True),
1239
- bit_width_config=bit_cfg,
1240
- )
1241
-
1242
- resource_utilization = mct.core.ResourceUtilization(weights_memory=weights_memory)
1243
-
1244
- quant_model = (
1245
- mct.gptq.pytorch_gradient_post_training_quantization( # Perform Gradient-Based Post Training Quantization
1246
- model=self.model,
1247
- representative_data_gen=representative_dataset_gen,
1248
- target_resource_utilization=resource_utilization,
1249
- gptq_config=mct.gptq.get_pytorch_gptq_config(
1250
- n_epochs=1000, use_hessian_based_weights=False, use_hessian_sample_attention=False
1251
- ),
1252
- core_config=config,
1253
- target_platform_capabilities=tpc,
1254
- )[0]
1255
- if gptq
1256
- else mct.ptq.pytorch_post_training_quantization( # Perform post training quantization
1257
- in_module=self.model,
1258
- representative_data_gen=representative_dataset_gen,
1259
- target_resource_utilization=resource_utilization,
1260
- core_config=config,
1261
- target_platform_capabilities=tpc,
1262
- )[0]
1263
- )
1264
-
1265
- class NMSWrapper(torch.nn.Module):
1266
- """Wrap PyTorch Module with multiclass_nms layer from sony_custom_layers."""
1267
-
1268
- def __init__(
1269
- self,
1270
- model: torch.nn.Module,
1271
- score_threshold: float = 0.001,
1272
- iou_threshold: float = 0.7,
1273
- max_detections: int = 300,
1274
- task: str = "detect",
1275
- ):
1276
- """
1277
- Initialize NMSWrapper with PyTorch Module and NMS parameters.
1278
-
1279
- Args:
1280
- model (torch.nn.Module): Model instance.
1281
- score_threshold (float): Score threshold for non-maximum suppression.
1282
- iou_threshold (float): Intersection over union threshold for non-maximum suppression.
1283
- max_detections (int): The number of detections to return.
1284
- task (str): Task type, either 'detect' or 'pose'.
1285
- """
1286
- super().__init__()
1287
- self.model = model
1288
- self.score_threshold = score_threshold
1289
- self.iou_threshold = iou_threshold
1290
- self.max_detections = max_detections
1291
- self.task = task
1292
-
1293
- def forward(self, images):
1294
- """Forward pass with model inference and NMS post-processing."""
1295
- # model inference
1296
- outputs = self.model(images)
1297
-
1298
- boxes, scores = outputs[0], outputs[1]
1299
- nms_outputs = multiclass_nms_with_indices(
1300
- boxes=boxes,
1301
- scores=scores,
1302
- score_threshold=self.score_threshold,
1303
- iou_threshold=self.iou_threshold,
1304
- max_detections=self.max_detections,
1305
- )
1306
- if self.task == "pose":
1307
- kpts = outputs[2] # (bs, max_detections, kpts 17*3)
1308
- out_kpts = torch.gather(kpts, 1, nms_outputs.indices.unsqueeze(-1).expand(-1, -1, kpts.size(-1)))
1309
- return nms_outputs.boxes, nms_outputs.scores, nms_outputs.labels, out_kpts
1310
- return nms_outputs.boxes, nms_outputs.scores, nms_outputs.labels, nms_outputs.n_valid
1311
-
1312
- quant_model = NMSWrapper(
1313
- model=quant_model,
1314
- score_threshold=self.args.conf or 0.001,
1315
- iou_threshold=self.args.iou,
1316
- max_detections=self.args.max_det,
1317
- task=self.model.task,
1318
- ).to(self.device)
1319
-
1320
- f = Path(str(self.file).replace(self.file.suffix, "_imx_model"))
1321
- f.mkdir(exist_ok=True)
1322
- onnx_model = f / Path(str(self.file.name).replace(self.file.suffix, "_imx.onnx")) # js dir
1323
- mct.exporter.pytorch_export_model(
1324
- model=quant_model, save_model_path=onnx_model, repr_dataset=representative_dataset_gen
1325
- )
1326
-
1327
- model_onnx = onnx.load(onnx_model) # load onnx model
1328
- for k, v in self.metadata.items():
1329
- meta = model_onnx.metadata_props.add()
1330
- meta.key, meta.value = k, str(v)
1331
-
1332
- onnx.save(model_onnx, onnx_model)
1333
-
1334
- subprocess.run(
1335
- ["imxconv-pt", "-i", str(onnx_model), "-o", str(f), "--no-input-persistency", "--overwrite-output"],
1336
- check=True,
1188
+ return torch2imx(
1189
+ self.model,
1190
+ self.file,
1191
+ self.args.conf,
1192
+ self.args.iou,
1193
+ self.args.max_det,
1194
+ metadata=self.metadata,
1195
+ dataset=self.get_int8_calibration_dataloader(prefix),
1196
+ prefix=prefix,
1337
1197
  )
1338
1198
 
1339
- # Needed for imx models.
1340
- with open(f / "labels.txt", "w", encoding="utf-8") as file:
1341
- file.writelines([f"{name}\n" for _, name in self.model.names.items()])
1342
-
1343
- return f
1344
-
1345
1199
  def _add_tflite_metadata(self, file):
1346
1200
  """Add metadata to *.tflite models per https://ai.google.dev/edge/litert/models/metadata."""
1347
1201
  import zipfile
@@ -1531,7 +1385,7 @@ class NMSModel(torch.nn.Module):
1531
1385
  for i in range(bs):
1532
1386
  box, cls, score, extra = boxes[i], classes[i], scores[i], extras[i]
1533
1387
  mask = score > self.args.conf
1534
- if self.is_tf:
1388
+ if self.is_tf or (self.args.format == "onnx" and self.obb):
1535
1389
  # TFLite GatherND error if mask is empty
1536
1390
  score *= mask
1537
1391
  # Explicit length otherwise reshape error, hardcoded to `self.args.max_det * 5`
@@ -174,7 +174,22 @@ class BaseTrainer:
174
174
 
175
175
  # Callbacks
176
176
  self.callbacks = _callbacks or callbacks.get_default_callbacks()
177
- if RANK in {-1, 0}:
177
+
178
+ if isinstance(self.args.device, str) and len(self.args.device): # i.e. device='0' or device='0,1,2,3'
179
+ world_size = len(self.args.device.split(","))
180
+ elif isinstance(self.args.device, (tuple, list)): # i.e. device=[0, 1, 2, 3] (multi-GPU from CLI is list)
181
+ world_size = len(self.args.device)
182
+ elif self.args.device in {"cpu", "mps"}: # i.e. device='cpu' or 'mps'
183
+ world_size = 0
184
+ elif torch.cuda.is_available(): # i.e. device=None or device='' or device=number
185
+ world_size = 1 # default to device 0
186
+ else: # i.e. device=None or device=''
187
+ world_size = 0
188
+
189
+ self.ddp = world_size > 1 and "LOCAL_RANK" not in os.environ
190
+ self.world_size = world_size
191
+ # Run subprocess if DDP training, else train normally
192
+ if RANK in {-1, 0} and not self.ddp:
178
193
  callbacks.add_integration_callbacks(self)
179
194
  # Start console logging immediately at trainer initialization
180
195
  self.run_callbacks("on_pretrain_routine_start")
@@ -194,19 +209,8 @@ class BaseTrainer:
194
209
 
195
210
  def train(self):
196
211
  """Allow device='', device=None on Multi-GPU systems to default to device=0."""
197
- if isinstance(self.args.device, str) and len(self.args.device): # i.e. device='0' or device='0,1,2,3'
198
- world_size = len(self.args.device.split(","))
199
- elif isinstance(self.args.device, (tuple, list)): # i.e. device=[0, 1, 2, 3] (multi-GPU from CLI is list)
200
- world_size = len(self.args.device)
201
- elif self.args.device in {"cpu", "mps"}: # i.e. device='cpu' or 'mps'
202
- world_size = 0
203
- elif torch.cuda.is_available(): # i.e. device=None or device='' or device=number
204
- world_size = 1 # default to device 0
205
- else: # i.e. device=None or device=''
206
- world_size = 0
207
-
208
212
  # Run subprocess if DDP training, else train normally
209
- if world_size > 1 and "LOCAL_RANK" not in os.environ:
213
+ if self.ddp:
210
214
  # Argument checks
211
215
  if self.args.rect:
212
216
  LOGGER.warning("'rect=True' is incompatible with Multi-GPU training, setting 'rect=False'")
@@ -218,7 +222,7 @@ class BaseTrainer:
218
222
  self.args.batch = 16
219
223
 
220
224
  # Command
221
- cmd, file = generate_ddp_command(world_size, self)
225
+ cmd, file = generate_ddp_command(self)
222
226
  try:
223
227
  LOGGER.info(f"{colorstr('DDP:')} debug command {' '.join(cmd)}")
224
228
  subprocess.run(cmd, check=True)
@@ -228,7 +232,7 @@ class BaseTrainer:
228
232
  ddp_cleanup(self, str(file))
229
233
 
230
234
  else:
231
- self._do_train(world_size)
235
+ self._do_train()
232
236
 
233
237
  def _setup_scheduler(self):
234
238
  """Initialize training learning rate scheduler."""
@@ -238,20 +242,19 @@ class BaseTrainer:
238
242
  self.lf = lambda x: max(1 - x / self.epochs, 0) * (1.0 - self.args.lrf) + self.args.lrf # linear
239
243
  self.scheduler = optim.lr_scheduler.LambdaLR(self.optimizer, lr_lambda=self.lf)
240
244
 
241
- def _setup_ddp(self, world_size):
245
+ def _setup_ddp(self):
242
246
  """Initialize and set the DistributedDataParallel parameters for training."""
243
247
  torch.cuda.set_device(RANK)
244
248
  self.device = torch.device("cuda", RANK)
245
- # LOGGER.info(f'DDP info: RANK {RANK}, WORLD_SIZE {world_size}, DEVICE {self.device}')
246
249
  os.environ["TORCH_NCCL_BLOCKING_WAIT"] = "1" # set to enforce timeout
247
250
  dist.init_process_group(
248
251
  backend="nccl" if dist.is_nccl_available() else "gloo",
249
252
  timeout=timedelta(seconds=10800), # 3 hours
250
253
  rank=RANK,
251
- world_size=world_size,
254
+ world_size=self.world_size,
252
255
  )
253
256
 
254
- def _setup_train(self, world_size):
257
+ def _setup_train(self):
255
258
  """Build dataloaders and optimizer on correct rank process."""
256
259
  ckpt = self.setup_model()
257
260
  self.model = self.model.to(self.device)
@@ -293,13 +296,13 @@ class BaseTrainer:
293
296
  callbacks_backup = callbacks.default_callbacks.copy() # backup callbacks as check_amp() resets them
294
297
  self.amp = torch.tensor(check_amp(self.model), device=self.device)
295
298
  callbacks.default_callbacks = callbacks_backup # restore callbacks
296
- if RANK > -1 and world_size > 1: # DDP
299
+ if RANK > -1 and self.world_size > 1: # DDP
297
300
  dist.broadcast(self.amp.int(), src=0) # broadcast from rank 0 to all other ranks; gloo errors with boolean
298
301
  self.amp = bool(self.amp) # as boolean
299
302
  self.scaler = (
300
303
  torch.amp.GradScaler("cuda", enabled=self.amp) if TORCH_2_4 else torch.cuda.amp.GradScaler(enabled=self.amp)
301
304
  )
302
- if world_size > 1:
305
+ if self.world_size > 1:
303
306
  self.model = nn.parallel.DistributedDataParallel(self.model, device_ids=[RANK], find_unused_parameters=True)
304
307
 
305
308
  # Check imgsz
@@ -312,7 +315,7 @@ class BaseTrainer:
312
315
  self.args.batch = self.batch_size = self.auto_batch()
313
316
 
314
317
  # Dataloaders
315
- batch_size = self.batch_size // max(world_size, 1)
318
+ batch_size = self.batch_size // max(self.world_size, 1)
316
319
  self.train_loader = self.get_dataloader(
317
320
  self.data["train"], batch_size=batch_size, rank=LOCAL_RANK, mode="train"
318
321
  )
@@ -350,11 +353,11 @@ class BaseTrainer:
350
353
  self.scheduler.last_epoch = self.start_epoch - 1 # do not move
351
354
  self.run_callbacks("on_pretrain_routine_end")
352
355
 
353
- def _do_train(self, world_size=1):
356
+ def _do_train(self):
354
357
  """Train the model with the specified world size."""
355
- if world_size > 1:
356
- self._setup_ddp(world_size)
357
- self._setup_train(world_size)
358
+ if self.world_size > 1:
359
+ self._setup_ddp()
360
+ self._setup_train()
358
361
 
359
362
  nb = len(self.train_loader) # number of batches
360
363
  nw = max(round(self.args.warmup_epochs * nb), 100) if self.args.warmup_epochs > 0 else -1 # warmup iterations
@@ -365,7 +368,7 @@ class BaseTrainer:
365
368
  self.run_callbacks("on_train_start")
366
369
  LOGGER.info(
367
370
  f"Image sizes {self.args.imgsz} train, {self.args.imgsz} val\n"
368
- f"Using {self.train_loader.num_workers * (world_size or 1)} dataloader workers\n"
371
+ f"Using {self.train_loader.num_workers * (self.world_size or 1)} dataloader workers\n"
369
372
  f"Logging results to {colorstr('bold', self.save_dir)}\n"
370
373
  f"Starting training for " + (f"{self.args.time} hours..." if self.args.time else f"{self.epochs} epochs...")
371
374
  )
@@ -417,7 +420,7 @@ class BaseTrainer:
417
420
  loss, self.loss_items = unwrap_model(self.model).loss(batch, preds)
418
421
  self.loss = loss.sum()
419
422
  if RANK != -1:
420
- self.loss *= world_size
423
+ self.loss *= self.world_size
421
424
  self.tloss = (
422
425
  (self.tloss * i + self.loss_items) / (i + 1) if self.tloss is not None else self.loss_items
423
426
  )
@@ -341,7 +341,8 @@ class Tuner:
341
341
  hyp[k] = round(min(max(hyp[k], bounds[0]), bounds[1]), 5)
342
342
 
343
343
  # Update types
344
- hyp["close_mosaic"] = int(round(hyp["close_mosaic"]))
344
+ if "close_mosaic" in hyp:
345
+ hyp["close_mosaic"] = int(round(hyp["close_mosaic"]))
345
346
 
346
347
  return hyp
347
348
 
@@ -162,7 +162,7 @@ class Detect(nn.Module):
162
162
  # Inference path
163
163
  shape = x[0].shape # BCHW
164
164
  x_cat = torch.cat([xi.view(shape[0], self.no, -1) for xi in x], 2)
165
- if self.format != "imx" and (self.dynamic or self.shape != shape):
165
+ if self.dynamic or self.shape != shape:
166
166
  self.anchors, self.strides = (x.transpose(0, 1) for x in make_anchors(x, self.stride, 0.5))
167
167
  self.shape = shape
168
168
 
@@ -182,8 +182,6 @@ class Detect(nn.Module):
182
182
  dbox = self.decode_bboxes(self.dfl(box) * norm, self.anchors.unsqueeze(0) * norm[:, :2])
183
183
  else:
184
184
  dbox = self.decode_bboxes(self.dfl(box), self.anchors.unsqueeze(0)) * self.strides
185
- if self.export and self.format == "imx":
186
- return dbox.transpose(1, 2), cls.sigmoid().permute(0, 2, 1)
187
185
  return torch.cat((dbox, cls.sigmoid()), 1)
188
186
 
189
187
  def bias_init(self):
@@ -387,8 +385,6 @@ class Pose(Detect):
387
385
  if self.training:
388
386
  return x, kpt
389
387
  pred_kpt = self.kpts_decode(bs, kpt)
390
- if self.export and self.format == "imx":
391
- return (*x, pred_kpt.permute(0, 2, 1))
392
388
  return torch.cat([x, pred_kpt], 1) if self.export else (torch.cat([x[0], pred_kpt], 1), (x[1], kpt))
393
389
 
394
390
  def kpts_decode(self, bs: int, kpts: torch.Tensor) -> torch.Tensor:
@@ -1037,7 +1037,6 @@ class YOLOEModel(DetectionModel):
1037
1037
  if without_reprta:
1038
1038
  return txt_feats
1039
1039
 
1040
- assert not self.training
1041
1040
  head = self.model[-1]
1042
1041
  assert isinstance(head, YOLOEDetect)
1043
1042
  return head.get_tpe(txt_feats) # run auxiliary text head
@@ -145,7 +145,7 @@ def benchmark(
145
145
  assert not is_end2end
146
146
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 IMX exports not supported"
147
147
  assert model.task == "detect", "IMX only supported for detection task"
148
- assert "C2f" in model.__str__(), "IMX only supported for YOLOv8" # TODO: enable for YOLO11
148
+ assert "C2f" in model.__str__(), "IMX only supported for YOLOv8n and YOLO11n"
149
149
  if format == "rknn":
150
150
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 RKNN exports not supported yet"
151
151
  assert not is_end2end, "End-to-end models not supported by RKNN yet"
@@ -363,8 +363,8 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
363
363
  Check if installed dependencies meet Ultralytics YOLO models requirements and attempt to auto-update if needed.
364
364
 
365
365
  Args:
366
- requirements (Path | str | list[str]): Path to a requirements.txt file, a single package requirement as a
367
- string, or a list of package requirements as strings.
366
+ requirements (Path | str | list[str] | tuple[str]): Path to a requirements.txt file, a single package
367
+ requirement as a string, or a list of package requirements as strings.
368
368
  exclude (tuple): Tuple of package names to exclude from checking.
369
369
  install (bool): If True, attempt to auto-update packages that don't meet requirements.
370
370
  cmds (str): Additional commands to pass to the pip install command when auto-updating.
@@ -76,12 +76,11 @@ if __name__ == "__main__":
76
76
  return file.name
77
77
 
78
78
 
79
- def generate_ddp_command(world_size: int, trainer):
79
+ def generate_ddp_command(trainer):
80
80
  """
81
81
  Generate command for distributed training.
82
82
 
83
83
  Args:
84
- world_size (int): Number of processes to spawn for distributed training.
85
84
  trainer (ultralytics.engine.trainer.BaseTrainer): The trainer containing configuration for distributed training.
86
85
 
87
86
  Returns:
@@ -95,7 +94,16 @@ def generate_ddp_command(world_size: int, trainer):
95
94
  file = generate_ddp_file(trainer)
96
95
  dist_cmd = "torch.distributed.run" if TORCH_1_9 else "torch.distributed.launch"
97
96
  port = find_free_network_port()
98
- cmd = [sys.executable, "-m", dist_cmd, "--nproc_per_node", f"{world_size}", "--master_port", f"{port}", file]
97
+ cmd = [
98
+ sys.executable,
99
+ "-m",
100
+ dist_cmd,
101
+ "--nproc_per_node",
102
+ f"{trainer.world_size}",
103
+ "--master_port",
104
+ f"{port}",
105
+ file,
106
+ ]
99
107
  return cmd, file
100
108
 
101
109
 
@@ -9,8 +9,10 @@ import torch
9
9
 
10
10
  from ultralytics.utils import IS_JETSON, LOGGER
11
11
 
12
+ from .imx import torch2imx # noqa
12
13
 
13
- def export_onnx(
14
+
15
+ def torch2onnx(
14
16
  torch_model: torch.nn.Module,
15
17
  im: torch.Tensor,
16
18
  onnx_file: str,
@@ -47,7 +49,7 @@ def export_onnx(
47
49
  )
48
50
 
49
51
 
50
- def export_engine(
52
+ def onnx2engine(
51
53
  onnx_file: str,
52
54
  engine_file: str | None = None,
53
55
  workspace: int | None = None,
@@ -98,12 +100,12 @@ def export_engine(
98
100
  # Engine builder
99
101
  builder = trt.Builder(logger)
100
102
  config = builder.create_builder_config()
101
- workspace = int((workspace or 0) * (1 << 30))
103
+ workspace_bytes = int((workspace or 0) * (1 << 30))
102
104
  is_trt10 = int(trt.__version__.split(".", 1)[0]) >= 10 # is TensorRT >= 10
103
- if is_trt10 and workspace > 0:
104
- config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, workspace)
105
- elif workspace > 0: # TensorRT versions 7, 8
106
- config.max_workspace_size = workspace
105
+ if is_trt10 and workspace_bytes > 0:
106
+ config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, workspace_bytes)
107
+ elif workspace_bytes > 0: # TensorRT versions 7, 8
108
+ config.max_workspace_size = workspace_bytes
107
109
  flag = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
108
110
  network = builder.create_network(flag)
109
111
  half = builder.platform_has_fast_fp16 and half