ultralytics 8.3.198__tar.gz → 8.3.200__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 (289) hide show
  1. {ultralytics-8.3.198 → ultralytics-8.3.200}/PKG-INFO +1 -1
  2. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/test_cuda.py +2 -3
  3. ultralytics-8.3.200/ultralytics/__init__.py +43 -0
  4. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/default.yaml +1 -1
  5. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/exporter.py +19 -167
  6. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/trainer.py +31 -28
  7. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/tuner.py +2 -1
  8. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/modules/head.py +1 -5
  9. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/tasks.py +1 -1
  10. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/benchmarks.py +1 -1
  11. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/dist.py +11 -3
  12. ultralytics-8.3.198/ultralytics/utils/export.py → ultralytics-8.3.200/ultralytics/utils/export/__init__.py +9 -7
  13. ultralytics-8.3.200/ultralytics/utils/export/imx.py +289 -0
  14. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/plotting.py +5 -1
  15. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/torch_utils.py +5 -49
  16. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics.egg-info/PKG-INFO +1 -1
  17. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics.egg-info/SOURCES.txt +3 -2
  18. ultralytics-8.3.198/ultralytics/__init__.py +0 -30
  19. {ultralytics-8.3.198 → ultralytics-8.3.200}/LICENSE +0 -0
  20. {ultralytics-8.3.198 → ultralytics-8.3.200}/README.md +0 -0
  21. {ultralytics-8.3.198 → ultralytics-8.3.200}/pyproject.toml +0 -0
  22. {ultralytics-8.3.198 → ultralytics-8.3.200}/setup.cfg +0 -0
  23. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/__init__.py +0 -0
  24. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/conftest.py +0 -0
  25. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/test_cli.py +0 -0
  26. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/test_engine.py +0 -0
  27. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/test_exports.py +0 -0
  28. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/test_integrations.py +0 -0
  29. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/test_python.py +0 -0
  30. {ultralytics-8.3.198 → ultralytics-8.3.200}/tests/test_solutions.py +0 -0
  31. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/assets/bus.jpg +0 -0
  32. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/assets/zidane.jpg +0 -0
  33. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/__init__.py +0 -0
  34. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  35. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  36. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  37. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  38. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  39. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  40. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  41. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  42. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  43. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  44. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  45. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  46. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  47. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  48. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco.yaml +0 -0
  49. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  50. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  51. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  52. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  53. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  54. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  55. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  56. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  57. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  58. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  59. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  60. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  61. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  62. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  63. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  64. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  65. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  66. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/signature.yaml +0 -0
  67. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  68. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/datasets/xView.yaml +0 -0
  69. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  70. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  71. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  72. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  73. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  74. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  75. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  76. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  77. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  78. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  79. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  80. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  81. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  82. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  83. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  84. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  85. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  86. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  87. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  88. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  89. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  90. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  91. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  92. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  93. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  94. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  95. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  96. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  97. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  98. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  99. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  100. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  101. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  102. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  103. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  104. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  105. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  106. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  107. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  108. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  109. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  110. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  111. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  112. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  113. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  114. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  115. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  116. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  117. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  118. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  119. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  120. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  121. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  122. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  123. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  124. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  125. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  126. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/__init__.py +0 -0
  127. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/annotator.py +0 -0
  128. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/augment.py +0 -0
  129. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/base.py +0 -0
  130. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/build.py +0 -0
  131. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/converter.py +0 -0
  132. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/dataset.py +0 -0
  133. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/loaders.py +0 -0
  134. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/scripts/download_weights.sh +0 -0
  135. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/scripts/get_coco.sh +0 -0
  136. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/scripts/get_coco128.sh +0 -0
  137. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  138. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/split.py +0 -0
  139. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/split_dota.py +0 -0
  140. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/data/utils.py +0 -0
  141. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/__init__.py +0 -0
  142. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/model.py +0 -0
  143. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/predictor.py +0 -0
  144. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/results.py +0 -0
  145. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/engine/validator.py +0 -0
  146. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/hub/__init__.py +0 -0
  147. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/hub/auth.py +0 -0
  148. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/hub/google/__init__.py +0 -0
  149. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/hub/session.py +0 -0
  150. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/hub/utils.py +0 -0
  151. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/__init__.py +0 -0
  152. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/fastsam/__init__.py +0 -0
  153. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/fastsam/model.py +0 -0
  154. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/fastsam/predict.py +0 -0
  155. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/fastsam/utils.py +0 -0
  156. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/fastsam/val.py +0 -0
  157. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/nas/__init__.py +0 -0
  158. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/nas/model.py +0 -0
  159. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/nas/predict.py +0 -0
  160. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/nas/val.py +0 -0
  161. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/rtdetr/__init__.py +0 -0
  162. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/rtdetr/model.py +0 -0
  163. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/rtdetr/predict.py +0 -0
  164. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/rtdetr/train.py +0 -0
  165. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/rtdetr/val.py +0 -0
  166. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/__init__.py +0 -0
  167. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/amg.py +0 -0
  168. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/build.py +0 -0
  169. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/model.py +0 -0
  170. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/__init__.py +0 -0
  171. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/blocks.py +0 -0
  172. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/decoders.py +0 -0
  173. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/encoders.py +0 -0
  174. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  175. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/sam.py +0 -0
  176. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  177. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/transformer.py +0 -0
  178. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/modules/utils.py +0 -0
  179. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/sam/predict.py +0 -0
  180. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/utils/__init__.py +0 -0
  181. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/utils/loss.py +0 -0
  182. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/utils/ops.py +0 -0
  183. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/__init__.py +0 -0
  184. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/classify/__init__.py +0 -0
  185. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/classify/predict.py +0 -0
  186. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/classify/train.py +0 -0
  187. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/classify/val.py +0 -0
  188. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/detect/__init__.py +0 -0
  189. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/detect/predict.py +0 -0
  190. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/detect/train.py +0 -0
  191. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/detect/val.py +0 -0
  192. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/model.py +0 -0
  193. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/obb/__init__.py +0 -0
  194. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/obb/predict.py +0 -0
  195. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/obb/train.py +0 -0
  196. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/obb/val.py +0 -0
  197. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/pose/__init__.py +0 -0
  198. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/pose/predict.py +0 -0
  199. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/pose/train.py +0 -0
  200. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/pose/val.py +0 -0
  201. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/segment/__init__.py +0 -0
  202. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/segment/predict.py +0 -0
  203. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/segment/train.py +0 -0
  204. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/segment/val.py +0 -0
  205. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/world/__init__.py +0 -0
  206. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/world/train.py +0 -0
  207. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/world/train_world.py +0 -0
  208. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  209. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  210. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/yoloe/train.py +0 -0
  211. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  212. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/models/yolo/yoloe/val.py +0 -0
  213. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/__init__.py +0 -0
  214. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/autobackend.py +0 -0
  215. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/modules/__init__.py +0 -0
  216. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/modules/activation.py +0 -0
  217. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/modules/block.py +0 -0
  218. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/modules/conv.py +0 -0
  219. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/modules/transformer.py +0 -0
  220. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/modules/utils.py +0 -0
  221. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/nn/text_model.py +0 -0
  222. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/py.typed +0 -0
  223. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/__init__.py +0 -0
  224. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/ai_gym.py +0 -0
  225. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/analytics.py +0 -0
  226. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/config.py +0 -0
  227. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/distance_calculation.py +0 -0
  228. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/heatmap.py +0 -0
  229. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/instance_segmentation.py +0 -0
  230. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/object_blurrer.py +0 -0
  231. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/object_counter.py +0 -0
  232. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/object_cropper.py +0 -0
  233. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/parking_management.py +0 -0
  234. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/queue_management.py +0 -0
  235. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/region_counter.py +0 -0
  236. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/security_alarm.py +0 -0
  237. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/similarity_search.py +0 -0
  238. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/solutions.py +0 -0
  239. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/speed_estimation.py +0 -0
  240. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/streamlit_inference.py +0 -0
  241. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/templates/similarity-search.html +0 -0
  242. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/trackzone.py +0 -0
  243. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/solutions/vision_eye.py +0 -0
  244. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/__init__.py +0 -0
  245. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/basetrack.py +0 -0
  246. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/bot_sort.py +0 -0
  247. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/byte_tracker.py +0 -0
  248. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/track.py +0 -0
  249. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/utils/__init__.py +0 -0
  250. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/utils/gmc.py +0 -0
  251. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  252. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/trackers/utils/matching.py +0 -0
  253. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/__init__.py +0 -0
  254. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/autobatch.py +0 -0
  255. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/autodevice.py +0 -0
  256. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/__init__.py +0 -0
  257. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/base.py +0 -0
  258. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/clearml.py +0 -0
  259. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/comet.py +0 -0
  260. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/dvc.py +0 -0
  261. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/hub.py +0 -0
  262. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/mlflow.py +0 -0
  263. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/neptune.py +0 -0
  264. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/platform.py +0 -0
  265. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/raytune.py +0 -0
  266. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  267. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/callbacks/wb.py +0 -0
  268. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/checks.py +0 -0
  269. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/cpu.py +0 -0
  270. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/downloads.py +0 -0
  271. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/errors.py +0 -0
  272. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/events.py +0 -0
  273. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/files.py +0 -0
  274. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/git.py +0 -0
  275. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/instance.py +0 -0
  276. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/logger.py +0 -0
  277. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/loss.py +0 -0
  278. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/metrics.py +0 -0
  279. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/nms.py +0 -0
  280. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/ops.py +0 -0
  281. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/patches.py +0 -0
  282. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/tal.py +0 -0
  283. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/tqdm.py +0 -0
  284. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/triton.py +0 -0
  285. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics/utils/tuner.py +0 -0
  286. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics.egg-info/dependency_links.txt +0 -0
  287. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics.egg-info/entry_points.txt +0 -0
  288. {ultralytics-8.3.198 → ultralytics-8.3.200}/ultralytics.egg-info/requires.txt +0 -0
  289. {ultralytics-8.3.198 → ultralytics-8.3.200}/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.198
3
+ Version: 8.3.200
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>
@@ -68,7 +68,7 @@ def test_export_onnx_matrix(task, dynamic, int8, half, batch, simplify, nms):
68
68
  half=half,
69
69
  batch=batch,
70
70
  simplify=simplify,
71
- nms=nms and task != "obb", # disable NMS for OBB task for now on T4 instance
71
+ nms=nms,
72
72
  device=DEVICES[0],
73
73
  )
74
74
  YOLO(file)([SOURCE] * batch, imgsz=64 if dynamic else 32, device=DEVICES[0]) # exported model inference
@@ -76,7 +76,6 @@ def test_export_onnx_matrix(task, dynamic, int8, half, batch, simplify, nms):
76
76
 
77
77
 
78
78
  @pytest.mark.slow
79
- @pytest.mark.skipif(True, reason="CUDA export tests disabled pending additional Ultralytics GPU server availability")
80
79
  @pytest.mark.skipif(not DEVICES, reason="No CUDA devices available")
81
80
  @pytest.mark.parametrize(
82
81
  "task, dynamic, int8, half, batch",
@@ -164,7 +163,7 @@ def test_autobatch():
164
163
 
165
164
 
166
165
  @pytest.mark.slow
167
- @pytest.mark.skipif(True, reason="Skip for now since T4 instance does not support TensorRT > 10.0")
166
+ @pytest.mark.skipif(not DEVICES, reason="No CUDA devices available")
168
167
  def test_utils_benchmarks():
169
168
  """Profile YOLO models for performance benchmarks."""
170
169
  from ultralytics.utils.benchmarks import ProfileModels
@@ -0,0 +1,43 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ __version__ = "8.3.200"
4
+
5
+ import importlib
6
+ import os
7
+
8
+ # Set ENV variables (place before imports)
9
+ if not os.environ.get("OMP_NUM_THREADS"):
10
+ os.environ["OMP_NUM_THREADS"] = "1" # default for reduced CPU utilization during training
11
+
12
+ from ultralytics.utils import ASSETS, SETTINGS
13
+ from ultralytics.utils.checks import check_yolo as checks
14
+ from ultralytics.utils.downloads import download
15
+
16
+ settings = SETTINGS
17
+
18
+ MODELS = ("YOLO", "YOLOWorld", "YOLOE", "NAS", "SAM", "FastSAM", "RTDETR")
19
+
20
+ __all__ = (
21
+ "__version__",
22
+ "ASSETS",
23
+ *MODELS,
24
+ "checks",
25
+ "download",
26
+ "settings",
27
+ )
28
+
29
+
30
+ def __getattr__(name: str):
31
+ """Lazy-import model classes on first access."""
32
+ if name in MODELS:
33
+ return getattr(importlib.import_module("ultralytics.models"), name)
34
+ raise AttributeError(f"module {__name__} has no attribute {name}")
35
+
36
+
37
+ def __dir__():
38
+ """Extend dir() to include lazily available model names for IDE autocompletion."""
39
+ return sorted(set(globals()) | set(MODELS))
40
+
41
+
42
+ if __name__ == "__main__":
43
+ print(__version__)
@@ -37,7 +37,7 @@ fraction: 1.0 # (float) fraction of training dataset to use (1.0 = all)
37
37
  profile: False # (bool) profile ONNX/TensorRT speeds during training for loggers
38
38
  freeze: # (int | list, optional) freeze first N layers (int) or specific layer indices (list)
39
39
  multi_scale: False # (bool) multiscale training by varying image size
40
- compile: False # (bool | str) enable torch.compile() backend='inductor'; True="default", False=off, or "default|reduce-overhead|max-autotune"
40
+ compile: False # (bool | str) enable torch.compile() backend='inductor'; True="default", False=off, or "default|reduce-overhead|max-autotune-no-cudagraphs"
41
41
 
42
42
  # Segmentation
43
43
  overlap_mask: True # (bool) merge instance masks into one mask during training (segment only)
@@ -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
@@ -284,7 +284,8 @@ class Exporter:
284
284
  # Get the closest match if format is invalid
285
285
  matches = difflib.get_close_matches(fmt, fmts, n=1, cutoff=0.6) # 60% similarity required to match
286
286
  if not matches:
287
- raise ValueError(f"Invalid export format='{fmt}'. Valid formats are {fmts}")
287
+ msg = "Model is already in PyTorch format." if fmt == "pt" else f"Invalid export format='{fmt}'."
288
+ raise ValueError(f"{msg} Valid formats are {fmts}")
288
289
  LOGGER.warning(f"Invalid export format='{fmt}', updating to format='{matches[0]}'")
289
290
  fmt = matches[0]
290
291
  flags = [x == fmt for x in fmts]
@@ -408,9 +409,9 @@ class Exporter:
408
409
  model = model.fuse()
409
410
 
410
411
  if imx:
411
- from ultralytics.utils.torch_utils import FXModel
412
+ from ultralytics.utils.export.imx import FXModel
412
413
 
413
- model = FXModel(model)
414
+ model = FXModel(model, self.imgsz)
414
415
  for m in model.modules():
415
416
  if isinstance(m, Classify):
416
417
  m.export = True
@@ -425,15 +426,6 @@ class Exporter:
425
426
  elif isinstance(m, C2f) and not is_tf_format:
426
427
  # EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
427
428
  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
429
 
438
430
  y = None
439
431
  for _ in range(2): # dry runs
@@ -609,7 +601,7 @@ class Exporter:
609
601
  self.args.opset = opset_version # for NMSModel
610
602
 
611
603
  with arange_patch(self.args):
612
- export_onnx(
604
+ torch2onnx(
613
605
  NMSModel(self.model, self.args) if self.args.nms else self.model,
614
606
  self.im,
615
607
  f,
@@ -922,7 +914,8 @@ class Exporter:
922
914
  import tensorrt as trt # noqa
923
915
  except ImportError:
924
916
  if LINUX:
925
- check_requirements("tensorrt>7.0.0,!=10.1.0")
917
+ cuda_version = torch.version.cuda.split(".")[0]
918
+ check_requirements(f"tensorrt-cu{cuda_version}>7.0.0,!=10.1.0")
926
919
  import tensorrt as trt # noqa
927
920
  check_version(trt.__version__, ">=7.0.0", hard=True)
928
921
  check_version(trt.__version__, "!=10.1.0", msg="https://github.com/ultralytics/ultralytics/pull/14239")
@@ -931,7 +924,7 @@ class Exporter:
931
924
  LOGGER.info(f"\n{prefix} starting export with TensorRT {trt.__version__}...")
932
925
  assert Path(f_onnx).exists(), f"failed to export ONNX file: {f_onnx}"
933
926
  f = self.file.with_suffix(".engine") # TensorRT engine file
934
- export_engine(
927
+ onnx2engine(
935
928
  f_onnx,
936
929
  f,
937
930
  self.args.workspace,
@@ -1167,7 +1160,6 @@ class Exporter:
1167
1160
  @try_export
1168
1161
  def export_imx(self, prefix=colorstr("IMX:")):
1169
1162
  """Export YOLO model to IMX format."""
1170
- gptq = False
1171
1163
  assert LINUX, (
1172
1164
  "export only supported on Linux. "
1173
1165
  "See https://developer.aitrios.sony-semicon.com/en/raspberrypi-ai-camera/documentation/imx500-converter"
@@ -1180,13 +1172,6 @@ class Exporter:
1180
1172
  check_requirements("imx500-converter[pt]>=3.16.1") # Separate requirements for imx500-converter
1181
1173
  check_requirements("mct-quantizers>=1.6.0") # Separate for compatibility with model-compression-toolkit
1182
1174
 
1183
- import model_compression_toolkit as mct
1184
- import onnx
1185
- from edgemdt_tpc import get_target_platform_capabilities
1186
- from sony_custom_layers.pytorch import multiclass_nms_with_indices
1187
-
1188
- LOGGER.info(f"\n{prefix} starting export with model_compression_toolkit {mct.__version__}...")
1189
-
1190
1175
  # Install Java>=17
1191
1176
  try:
1192
1177
  java_output = subprocess.run(["java", "--version"], check=True, capture_output=True).stdout.decode()
@@ -1197,150 +1182,17 @@ class Exporter:
1197
1182
  cmd = (["sudo"] if is_sudo_available() else []) + ["apt", "install", "-y", "openjdk-21-jre"]
1198
1183
  subprocess.run(cmd, check=True)
1199
1184
 
1200
- def representative_dataset_gen(dataloader=self.get_int8_calibration_dataloader(prefix)):
1201
- for batch in dataloader:
1202
- img = batch["img"]
1203
- img = img / 255.0
1204
- yield [img]
1205
-
1206
- tpc = get_target_platform_capabilities(tpc_version="4.0", device_type="imx500")
1207
-
1208
- bit_cfg = mct.core.BitWidthConfig()
1209
- if "C2PSA" in self.model.__str__(): # YOLO11
1210
- if self.model.task == "detect":
1211
- layer_names = ["sub", "mul_2", "add_14", "cat_21"]
1212
- weights_memory = 2585350.2439
1213
- n_layers = 238 # 238 layers for fused YOLO11n
1214
- elif self.model.task == "pose":
1215
- layer_names = ["sub", "mul_2", "add_14", "cat_22", "cat_23", "mul_4", "add_15"]
1216
- weights_memory = 2437771.67
1217
- n_layers = 257 # 257 layers for fused YOLO11n-pose
1218
- else: # YOLOv8
1219
- if self.model.task == "detect":
1220
- layer_names = ["sub", "mul", "add_6", "cat_17"]
1221
- weights_memory = 2550540.8
1222
- n_layers = 168 # 168 layers for fused YOLOv8n
1223
- elif self.model.task == "pose":
1224
- layer_names = ["add_7", "mul_2", "cat_19", "mul", "sub", "add_6", "cat_18"]
1225
- weights_memory = 2482451.85
1226
- n_layers = 187 # 187 layers for fused YOLO11n-pose
1227
-
1228
- # Check if the model has the expected number of layers
1229
- if len(list(self.model.modules())) != n_layers:
1230
- raise ValueError("IMX export only supported for YOLOv8n and YOLO11n models.")
1231
-
1232
- for layer_name in layer_names:
1233
- bit_cfg.set_manual_activation_bit_width([mct.core.common.network_editors.NodeNameFilter(layer_name)], 16)
1234
-
1235
- config = mct.core.CoreConfig(
1236
- mixed_precision_config=mct.core.MixedPrecisionQuantizationConfig(num_of_images=10),
1237
- quantization_config=mct.core.QuantizationConfig(concat_threshold_update=True),
1238
- bit_width_config=bit_cfg,
1239
- )
1240
-
1241
- resource_utilization = mct.core.ResourceUtilization(weights_memory=weights_memory)
1242
-
1243
- quant_model = (
1244
- mct.gptq.pytorch_gradient_post_training_quantization( # Perform Gradient-Based Post Training Quantization
1245
- model=self.model,
1246
- representative_data_gen=representative_dataset_gen,
1247
- target_resource_utilization=resource_utilization,
1248
- gptq_config=mct.gptq.get_pytorch_gptq_config(
1249
- n_epochs=1000, use_hessian_based_weights=False, use_hessian_sample_attention=False
1250
- ),
1251
- core_config=config,
1252
- target_platform_capabilities=tpc,
1253
- )[0]
1254
- if gptq
1255
- else mct.ptq.pytorch_post_training_quantization( # Perform post training quantization
1256
- in_module=self.model,
1257
- representative_data_gen=representative_dataset_gen,
1258
- target_resource_utilization=resource_utilization,
1259
- core_config=config,
1260
- target_platform_capabilities=tpc,
1261
- )[0]
1262
- )
1263
-
1264
- class NMSWrapper(torch.nn.Module):
1265
- """Wrap PyTorch Module with multiclass_nms layer from sony_custom_layers."""
1266
-
1267
- def __init__(
1268
- self,
1269
- model: torch.nn.Module,
1270
- score_threshold: float = 0.001,
1271
- iou_threshold: float = 0.7,
1272
- max_detections: int = 300,
1273
- task: str = "detect",
1274
- ):
1275
- """
1276
- Initialize NMSWrapper with PyTorch Module and NMS parameters.
1277
-
1278
- Args:
1279
- model (torch.nn.Module): Model instance.
1280
- score_threshold (float): Score threshold for non-maximum suppression.
1281
- iou_threshold (float): Intersection over union threshold for non-maximum suppression.
1282
- max_detections (int): The number of detections to return.
1283
- task (str): Task type, either 'detect' or 'pose'.
1284
- """
1285
- super().__init__()
1286
- self.model = model
1287
- self.score_threshold = score_threshold
1288
- self.iou_threshold = iou_threshold
1289
- self.max_detections = max_detections
1290
- self.task = task
1291
-
1292
- def forward(self, images):
1293
- """Forward pass with model inference and NMS post-processing."""
1294
- # model inference
1295
- outputs = self.model(images)
1296
-
1297
- boxes, scores = outputs[0], outputs[1]
1298
- nms_outputs = multiclass_nms_with_indices(
1299
- boxes=boxes,
1300
- scores=scores,
1301
- score_threshold=self.score_threshold,
1302
- iou_threshold=self.iou_threshold,
1303
- max_detections=self.max_detections,
1304
- )
1305
- if self.task == "pose":
1306
- kpts = outputs[2] # (bs, max_detections, kpts 17*3)
1307
- out_kpts = torch.gather(kpts, 1, nms_outputs.indices.unsqueeze(-1).expand(-1, -1, kpts.size(-1)))
1308
- return nms_outputs.boxes, nms_outputs.scores, nms_outputs.labels, out_kpts
1309
- return nms_outputs
1310
-
1311
- quant_model = NMSWrapper(
1312
- model=quant_model,
1313
- score_threshold=self.args.conf or 0.001,
1314
- iou_threshold=self.args.iou,
1315
- max_detections=self.args.max_det,
1316
- task=self.model.task,
1317
- ).to(self.device)
1318
-
1319
- f = Path(str(self.file).replace(self.file.suffix, "_imx_model"))
1320
- f.mkdir(exist_ok=True)
1321
- onnx_model = f / Path(str(self.file.name).replace(self.file.suffix, "_imx.onnx")) # js dir
1322
- mct.exporter.pytorch_export_model(
1323
- model=quant_model, save_model_path=onnx_model, repr_dataset=representative_dataset_gen
1324
- )
1325
-
1326
- model_onnx = onnx.load(onnx_model) # load onnx model
1327
- for k, v in self.metadata.items():
1328
- meta = model_onnx.metadata_props.add()
1329
- meta.key, meta.value = k, str(v)
1330
-
1331
- onnx.save(model_onnx, onnx_model)
1332
-
1333
- subprocess.run(
1334
- ["imxconv-pt", "-i", str(onnx_model), "-o", str(f), "--no-input-persistency", "--overwrite-output"],
1335
- check=True,
1185
+ return torch2imx(
1186
+ self.model,
1187
+ self.file,
1188
+ self.args.conf,
1189
+ self.args.iou,
1190
+ self.args.max_det,
1191
+ metadata=self.metadata,
1192
+ dataset=self.get_int8_calibration_dataloader(prefix),
1193
+ prefix=prefix,
1336
1194
  )
1337
1195
 
1338
- # Needed for imx models.
1339
- with open(f / "labels.txt", "w", encoding="utf-8") as file:
1340
- file.writelines([f"{name}\n" for _, name in self.model.names.items()])
1341
-
1342
- return f
1343
-
1344
1196
  def _add_tflite_metadata(self, file):
1345
1197
  """Add metadata to *.tflite models per https://ai.google.dev/edge/litert/models/metadata."""
1346
1198
  import zipfile
@@ -1530,7 +1382,7 @@ class NMSModel(torch.nn.Module):
1530
1382
  for i in range(bs):
1531
1383
  box, cls, score, extra = boxes[i], classes[i], scores[i], extras[i]
1532
1384
  mask = score > self.args.conf
1533
- if self.is_tf:
1385
+ if self.is_tf or (self.args.format == "onnx" and self.obb):
1534
1386
  # TFLite GatherND error if mask is empty
1535
1387
  score *= mask
1536
1388
  # 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:
@@ -1543,8 +1543,8 @@ def parse_model(d, ch, verbose=True):
1543
1543
  max_channels = float("inf")
1544
1544
  nc, act, scales = (d.get(x) for x in ("nc", "activation", "scales"))
1545
1545
  depth, width, kpt_shape = (d.get(x, 1.0) for x in ("depth_multiple", "width_multiple", "kpt_shape"))
1546
+ scale = d.get("scale")
1546
1547
  if scales:
1547
- scale = d.get("scale")
1548
1548
  if not scale:
1549
1549
  scale = tuple(scales.keys())[0]
1550
1550
  LOGGER.warning(f"no model scale passed. Assuming scale='{scale}'.")
@@ -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"
@@ -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