ultralytics 8.3.132__py3-none-any.whl → 8.3.133__py3-none-any.whl

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.
tests/test_cuda.py CHANGED
@@ -9,7 +9,7 @@ import torch
9
9
  from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE
10
10
  from ultralytics import YOLO
11
11
  from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
12
- from ultralytics.utils import ASSETS, WEIGHTS_DIR
12
+ from ultralytics.utils import ASSETS, IS_JETSON, WEIGHTS_DIR
13
13
  from ultralytics.utils.autodevice import GPUInfo
14
14
  from ultralytics.utils.checks import check_amp
15
15
  from ultralytics.utils.torch_utils import TORCH_1_13
@@ -17,11 +17,14 @@ from ultralytics.utils.torch_utils import TORCH_1_13
17
17
  # Try to find idle devices if CUDA is available
18
18
  DEVICES = []
19
19
  if CUDA_IS_AVAILABLE:
20
- gpu_info = GPUInfo()
21
- gpu_info.print_status()
22
- idle_gpus = gpu_info.select_idle_gpu(count=2, min_memory_mb=2048)
23
- if idle_gpus:
24
- DEVICES = idle_gpus
20
+ if IS_JETSON:
21
+ DEVICES = [0] # NVIDIA Jetson only has one GPU and does not fully support pynvml library
22
+ else:
23
+ gpu_info = GPUInfo()
24
+ gpu_info.print_status()
25
+ idle_gpus = gpu_info.select_idle_gpu(count=2, min_memory_mb=2048)
26
+ if idle_gpus:
27
+ DEVICES = idle_gpus
25
28
 
26
29
 
27
30
  def test_checks():
@@ -38,6 +41,7 @@ def test_amp():
38
41
 
39
42
 
40
43
  @pytest.mark.slow
44
+ # @pytest.mark.skipif(IS_JETSON, reason="Temporary disable ONNX for Jetson")
41
45
  @pytest.mark.skipif(not DEVICES, reason="No CUDA devices available")
42
46
  @pytest.mark.parametrize(
43
47
  "task, dynamic, int8, half, batch, simplify, nms",
@@ -49,7 +53,7 @@ def test_amp():
49
53
  if not (
50
54
  (int8 and half)
51
55
  or (task == "classify" and nms)
52
- or (task == "obb" and nms and not TORCH_1_13)
56
+ or (task == "obb" and nms and (not TORCH_1_13 or IS_JETSON)) # obb nms fails on NVIDIA Jetson
53
57
  or (simplify and dynamic) # onnxslim is slow when dynamic=True
54
58
  )
55
59
  ],
@@ -110,9 +114,11 @@ def test_train():
110
114
 
111
115
  device = tuple(DEVICES) if len(DEVICES) > 1 else DEVICES[0]
112
116
  results = YOLO(MODEL).train(data="coco8.yaml", imgsz=64, epochs=1, device=device) # requires imgsz>=64
113
- visible = eval(os.environ["CUDA_VISIBLE_DEVICES"])
114
- assert visible == device, f"Passed GPUs '{device}', but used GPUs '{visible}'"
115
- assert results is (None if len(DEVICES) > 1 else not None) # DDP returns None, single-GPU returns metrics
117
+ # NVIDIA Jetson only has one GPU and therefore skipping checks
118
+ if not IS_JETSON:
119
+ visible = eval(os.environ["CUDA_VISIBLE_DEVICES"])
120
+ assert visible == device, f"Passed GPUs '{device}', but used GPUs '{visible}'"
121
+ assert results is (None if len(DEVICES) > 1 else not None) # DDP returns None, single-GPU returns metrics
116
122
 
117
123
 
118
124
  @pytest.mark.slow
ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.132"
3
+ __version__ = "8.3.133"
4
4
 
5
5
  import os
6
6
 
@@ -184,7 +184,9 @@ class YOLODataset(BaseDataset):
184
184
  [cache.pop(k) for k in ("hash", "version", "msgs")] # remove items
185
185
  labels = cache["labels"]
186
186
  if not labels:
187
- LOGGER.warning(f"No images found in {cache_path}, training may not work correctly. {HELP_URL}")
187
+ raise RuntimeError(
188
+ f"No valid images found in {cache_path}. Images with incorrectly formatted labels are ignored. {HELP_URL}"
189
+ )
188
190
  self.im_files = [lb["im_file"] for lb in labels] # update im_files
189
191
 
190
192
  # Check if the dataset is all boxes or all segments
@@ -199,7 +201,7 @@ class YOLODataset(BaseDataset):
199
201
  for lb in labels:
200
202
  lb["segments"] = []
201
203
  if len_cls == 0:
202
- LOGGER.warning(f"No labels found in {cache_path}, training may not work correctly. {HELP_URL}")
204
+ LOGGER.warning(f"Labels are missing or empty in {cache_path}, training may not work correctly. {HELP_URL}")
203
205
  return labels
204
206
 
205
207
  def build_transforms(self, hyp=None):
@@ -89,6 +89,7 @@ from ultralytics.utils import (
89
89
  MACOS_VERSION,
90
90
  RKNN_CHIPS,
91
91
  ROOT,
92
+ SETTINGS,
92
93
  WINDOWS,
93
94
  YAML,
94
95
  callbacks,
@@ -106,7 +107,7 @@ from ultralytics.utils.downloads import attempt_download_asset, get_github_asset
106
107
  from ultralytics.utils.export import export_engine, export_onnx
107
108
  from ultralytics.utils.files import file_size, spaces_in_path
108
109
  from ultralytics.utils.ops import Profile, nms_rotated
109
- from ultralytics.utils.torch_utils import TORCH_1_13, get_latest_opset, select_device
110
+ from ultralytics.utils.torch_utils import TORCH_1_13, get_cpu_info, get_latest_opset, select_device
110
111
 
111
112
 
112
113
  def export_formats():
@@ -344,7 +345,6 @@ class Exporter:
344
345
  "See https://docs.ultralytics.com/models/yolo-world for details."
345
346
  )
346
347
  model.clip_model = None # openvino int8 export error: https://github.com/ultralytics/ultralytics/pull/18445
347
-
348
348
  if self.args.int8 and not self.args.data:
349
349
  self.args.data = DEFAULT_CFG.data or TASK2DATA[getattr(model, "task", "detect")] # assign default data
350
350
  LOGGER.warning(
@@ -352,6 +352,14 @@ class Exporter:
352
352
  )
353
353
  if tfjs and (ARM64 and LINUX):
354
354
  raise SystemError("TF.js exports are not currently supported on ARM64 Linux")
355
+ # Recommend OpenVINO if export and Intel CPU
356
+ if SETTINGS.get("openvino_msg"):
357
+ if "intel" in get_cpu_info().lower():
358
+ LOGGER.info(
359
+ "💡 ProTip: Export to OpenVINO format for best performance on Intel CPUs."
360
+ " Learn more at https://docs.ultralytics.com/integrations/openvino/"
361
+ )
362
+ SETTINGS["openvino_msg"] = False
355
363
 
356
364
  # Input
357
365
  im = torch.zeros(self.args.batch, model.yaml.get("channels", 3), *self.imgsz).to(self.device)
@@ -529,7 +529,7 @@ class Model(torch.nn.Module):
529
529
  - For SAM-type models, 'prompts' can be passed as a keyword argument.
530
530
  """
531
531
  if source is None:
532
- source = ASSETS
532
+ source = "https://ultralytics.com/images/boats.jpg" if self.task == "obb" else ASSETS
533
533
  LOGGER.warning(f"'source' is missing. Using 'source={source}'.")
534
534
 
535
535
  is_cli = (ARGV[0].endswith("yolo") or ARGV[0].endswith("ultralytics")) and any(
@@ -1312,7 +1312,8 @@ class SettingsManager(JSONDict):
1312
1312
  "raytune": True, # Ray Tune integration
1313
1313
  "tensorboard": False, # TensorBoard logging
1314
1314
  "wandb": False, # Weights & Biases logging
1315
- "vscode_msg": True, # VSCode messaging
1315
+ "vscode_msg": True, # VSCode message
1316
+ "openvino_msg": True, # OpenVINO export on Intel CPU message
1316
1317
  }
1317
1318
 
1318
1319
  self.help_msg = (
@@ -24,6 +24,7 @@ from ultralytics.utils import (
24
24
  AUTOINSTALL,
25
25
  IS_COLAB,
26
26
  IS_GIT_DIR,
27
+ IS_JETSON,
27
28
  IS_KAGGLE,
28
29
  IS_PIP_PACKAGE,
29
30
  LINUX,
@@ -820,19 +821,23 @@ def cuda_device_count() -> int:
820
821
  Returns:
821
822
  (int): The number of NVIDIA GPUs available.
822
823
  """
823
- try:
824
- # Run the nvidia-smi command and capture its output
825
- output = subprocess.check_output(
826
- ["nvidia-smi", "--query-gpu=count", "--format=csv,noheader,nounits"], encoding="utf-8"
827
- )
824
+ if IS_JETSON:
825
+ # NVIDIA Jetson does not fully support nvidia-smi and therefore use PyTorch instead
826
+ return torch.cuda.device_count()
827
+ else:
828
+ try:
829
+ # Run the nvidia-smi command and capture its output
830
+ output = subprocess.check_output(
831
+ ["nvidia-smi", "--query-gpu=count", "--format=csv,noheader,nounits"], encoding="utf-8"
832
+ )
828
833
 
829
- # Take the first line and strip any leading/trailing white space
830
- first_line = output.strip().split("\n")[0]
834
+ # Take the first line and strip any leading/trailing white space
835
+ first_line = output.strip().split("\n")[0]
831
836
 
832
- return int(first_line)
833
- except (subprocess.CalledProcessError, FileNotFoundError, ValueError):
834
- # If the command fails, nvidia-smi is not found, or output is not an integer, assume no GPUs are available
835
- return 0
837
+ return int(first_line)
838
+ except (subprocess.CalledProcessError, FileNotFoundError, ValueError):
839
+ # If the command fails, nvidia-smi is not found, or output is not an integer, assume no GPUs are available
840
+ return 0
836
841
 
837
842
 
838
843
  def cuda_is_available() -> bool:
ultralytics/utils/loss.py CHANGED
@@ -674,7 +674,7 @@ class v8OBBLoss(v8DetectionLoss):
674
674
  raise TypeError(
675
675
  "ERROR ❌ OBB dataset incorrectly formatted or not a OBB dataset.\n"
676
676
  "This error can occur when incorrectly training a 'OBB' model on a 'detect' dataset, "
677
- "i.e. 'yolo train model=yolo11n-obb.pt data=dota8.yaml'.\nVerify your dataset is a "
677
+ "i.e. 'yolo train model=yolo11n-obb.pt data=coco8.yaml'.\nVerify your dataset is a "
678
678
  "correctly formatted 'OBB' dataset using 'data=dota8.yaml' "
679
679
  "as an example.\nSee https://docs.ultralytics.com/datasets/obb/ for help."
680
680
  ) from e
@@ -788,7 +788,7 @@ class Metric(SimpleClass):
788
788
  def fitness(self):
789
789
  """Return model fitness as a weighted combination of metrics."""
790
790
  w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
791
- return (np.array(self.mean_results()) * w).sum()
791
+ return (np.nan_to_num(np.array(self.mean_results())) * w).sum()
792
792
 
793
793
  def update(self, results):
794
794
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.132
3
+ Version: 8.3.133
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -1,13 +1,13 @@
1
1
  tests/__init__.py,sha256=xnMhv3O_DF1YrW4zk__ZywQzAaoTDjPKPoiI1Ktss1w,670
2
2
  tests/conftest.py,sha256=rsIAipRKfrVNoTaJ1LdpYue8AbcJ_fr3d3WIlM_6uXY,2982
3
3
  tests/test_cli.py,sha256=PtMFl5Lp_6ygBbYDJ1ndofz2k7ZYupMPEAiZw6aZVm8,5450
4
- tests/test_cuda.py,sha256=j07QZ92aeBhpw4s7zyCO18MOXrfEamsee20IWAa31JI,7739
4
+ tests/test_cuda.py,sha256=eKwaqLxWTRRYNROnkH24Ch-HmxTRKQLSIxbMYFYq_p0,8123
5
5
  tests/test_engine.py,sha256=aGqZ8P7QO5C_nOa1b4FOyk92Ysdk5WiP-ST310Vyxys,4962
6
6
  tests/test_exports.py,sha256=UeeBloqYYGZNh520R3CR80XBxA9XFrNmbK9An6V6C4w,9838
7
7
  tests/test_integrations.py,sha256=dQteeRsRVuT_p5-T88-7jqT65Zm9iAXkyKg-KQ1_TQ8,6341
8
8
  tests/test_python.py,sha256=m3tV3atrc3DvXZ5S-_C1ief_pDo4KlLgudjc7rq26l0,25492
9
9
  tests/test_solutions.py,sha256=IFlqyOUCvGbLe_YZqWmNCe_afg4as0p-SfAv3j7VURI,6205
10
- ultralytics/__init__.py,sha256=copYfKBUbk7pERYEZQoBeuFdkDd2uJi6M7xh3Kp-WJw,730
10
+ ultralytics/__init__.py,sha256=5KJcFLzyXLEENlwDYrbaJSUI5eiIL_K54mrNQvfpFhE,730
11
11
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
12
12
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
13
13
  ultralytics/cfg/__init__.py,sha256=We3ti0mvUQrGRmUPcufDGboW0YAO3nSRYuoWxGagk3M,39462
@@ -108,7 +108,7 @@ ultralytics/data/augment.py,sha256=7Md80H36S0X5RiSqCcwynSgGcRwMqnI4YbSw-rkYnlk,1
108
108
  ultralytics/data/base.py,sha256=bsASjxdkvojkFjas-JfFNSpBjo0GRAbYKDh64Y2hCH4,19015
109
109
  ultralytics/data/build.py,sha256=0nW3fjx-DceRIKJX786zP3cMAekUXHkuTGr5eVr9rSU,9769
110
110
  ultralytics/data/converter.py,sha256=znXH2XTdo0Q4NDHMny1ydVBvrxKn2kbbwI-X5bn1MlQ,26890
111
- ultralytics/data/dataset.py,sha256=oRhgLTXZNhXxXE3QJn7mD-v5mHvFGuWwAnrT2plTBgc,34843
111
+ ultralytics/data/dataset.py,sha256=uc5OMkaQtWQHBd_KST_WXO6FEoeF4xUhKDDJBKkQ354,34916
112
112
  ultralytics/data/loaders.py,sha256=q1dlJ9hyLnf-gorutgFZLndP8ZNJDCmCcZzJZRDDLDw,28868
113
113
  ultralytics/data/split.py,sha256=6UFXcbVrzYVAPmFbl4FeZFJOkdbN3jQFepJxi_pD-I0,4748
114
114
  ultralytics/data/split_dota.py,sha256=ihG56YfNFZJDq1r7Zcgk8fKzde3gn21W0f67ub6nT68,11879
@@ -118,8 +118,8 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
118
118
  ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
119
119
  ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
120
120
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
121
- ultralytics/engine/exporter.py,sha256=XDJboUBDGDrFsppwTVujoGilf5vTkO14KYMhMu5YZQ0,70333
122
- ultralytics/engine/model.py,sha256=37qGh6aqqPTUyMfpsvBQMaZ1Av7eJDe6mfRl9GvlfKg,52860
121
+ ultralytics/engine/exporter.py,sha256=QI84hCFHFAbBX2evpPBxtcCLUjJEyEv40ASjqq64du4,70782
122
+ ultralytics/engine/model.py,sha256=fWhPNWUQzjjWfTEXzTaqSSearV4THRkEa_fl4dDvzWw,52930
123
123
  ultralytics/engine/predictor.py,sha256=AwKpOGY2G-thNNiRw4Kf_MBLamq5tbRhXLNSMRArqFo,21803
124
124
  ultralytics/engine/results.py,sha256=-JPBn_YMyZv6HhdlyhjRIZCcMf41LTyWID7JrEP64rc,79632
125
125
  ultralytics/engine/trainer.py,sha256=c_iGyt6bwIf4aRUeVcVEuOKG9ZpixJsZUbI2eMqQXto,38951
@@ -233,19 +233,19 @@ ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6D
233
233
  ultralytics/trackers/utils/gmc.py,sha256=dz3I5LbIv7h1__Xg7rGHecQFE32VFTe54tUnxb8F0Z8,14466
234
234
  ultralytics/trackers/utils/kalman_filter.py,sha256=A0CqOnnaKH6kr0XwuHzyHmIU6aJAjJYxF9jVlNBKZHo,21326
235
235
  ultralytics/trackers/utils/matching.py,sha256=7eIufSdeN7cXuFMjvcfvz0Ldq84m4YKZl5IGxBR8IIo,7169
236
- ultralytics/utils/__init__.py,sha256=YSBOQcgak2v6l03EHPjkpzH-ZtjVXrg2_4o0BF1cqDQ,52807
236
+ ultralytics/utils/__init__.py,sha256=vac0M-Hx55QXl6Vod3QPjnLBlt87Hwxu1784RXPmeQA,52879
237
237
  ultralytics/utils/autobatch.py,sha256=kg05q2qKg74y_Uq2vvr01i3KhLfpVR7sT0IXBt3_kyI,4921
238
238
  ultralytics/utils/autodevice.py,sha256=OKZfTbswg6SlsYGCGMqROkA-451CXGG47oeyC5Q1kFM,7232
239
239
  ultralytics/utils/benchmarks.py,sha256=lDNNnLeLUzmqKrqrqlCOiau-q7A-gcLooZP2dbxCu-U,30214
240
- ultralytics/utils/checks.py,sha256=2No7N_J98juVOeoDy3ZGwxGC2N7LfhpCCje5rCAQR5k,32871
240
+ ultralytics/utils/checks.py,sha256=1wUunWTC9574gi7WWbyDrr_rCrqFJYxTcOCPXQQBhW4,33091
241
241
  ultralytics/utils/dist.py,sha256=aytW0JEkcA5ZTZucV92ot7Bn-apiej8aLk3QNWicjAc,4103
242
242
  ultralytics/utils/downloads.py,sha256=Rn8xDwn2bzgBqiYz3Xn0rm3MWjk4T-QUd2Ajlu1EpQ4,22312
243
243
  ultralytics/utils/errors.py,sha256=vY9h2evFSrHnZdHJVVrmm8Zzw4qVDLyo9DeYW5g0dFk,1573
244
244
  ultralytics/utils/export.py,sha256=XInnl9AQeik7EuR1492nzDvgDqaV43FlnM5CLamrgd4,8814
245
245
  ultralytics/utils/files.py,sha256=0K4O1cgqRiXaDw7EQK13TqA5SME_RrvfDVQSPetNr5w,8042
246
246
  ultralytics/utils/instance.py,sha256=UOEsXR9V-bXNRk6BTonASBEgeMqvzzAk4S7VdXZJUAM,18090
247
- ultralytics/utils/loss.py,sha256=zIDWS_0AOH-yEYLcsfmFRUkApPIZhu2ENsB0UwJYIuw,37607
248
- ultralytics/utils/metrics.py,sha256=j6FS8TNMhuq5-Yyvn1WGJKJwRLagRlpQUeAnQxZWar4,53948
247
+ ultralytics/utils/loss.py,sha256=Woc_rj7ptCyezHdylEygXMeSEgivYu_B9jJHD4UwxWE,37607
248
+ ultralytics/utils/metrics.py,sha256=pWNq-66VqkMjj05Gqkm8ddoElDK72q_U9cl8y-aEN6k,53963
249
249
  ultralytics/utils/ops.py,sha256=YFwPrKlPcgEmgAWqnJVR0Ccx5NQgp5e3P-YYHwVSP0k,34779
250
250
  ultralytics/utils/patches.py,sha256=_dhIU_eDklQE-aWIjpyjPHl_wOwZoGuIUQnXgdSwk_A,5020
251
251
  ultralytics/utils/plotting.py,sha256=m9Hsbt6U073jAiztX6clpd9KzznW62oHxCWlBcm0T-s,46920
@@ -264,9 +264,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=yYUgEgSv6L39sSev6vjwhAWU3DlPDsbSDV
264
264
  ultralytics/utils/callbacks/raytune.py,sha256=A8amUGpux7dYES-L1iSeMoMXBySGWCD1aUqT7vcG-pU,1284
265
265
  ultralytics/utils/callbacks/tensorboard.py,sha256=jgYnym3cUQFAgN1GzTyO7l3jINtfAh8zhrllDvnLuVQ,5339
266
266
  ultralytics/utils/callbacks/wb.py,sha256=iDRFXI4IIDm8R5OI89DMTmjs8aHLo1HRCLkOFKdaMG4,7507
267
- ultralytics-8.3.132.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
268
- ultralytics-8.3.132.dist-info/METADATA,sha256=Cb4YYUd2ruIB8Pv2lPha5fFXuooVlnEp4Av-MCMbxBk,37223
269
- ultralytics-8.3.132.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
270
- ultralytics-8.3.132.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
271
- ultralytics-8.3.132.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
272
- ultralytics-8.3.132.dist-info/RECORD,,
267
+ ultralytics-8.3.133.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
268
+ ultralytics-8.3.133.dist-info/METADATA,sha256=po51EqOXoP7a9l8ZhORSK5BE5RJ3iPeUvxPUqILhT5s,37223
269
+ ultralytics-8.3.133.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
270
+ ultralytics-8.3.133.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
271
+ ultralytics-8.3.133.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
272
+ ultralytics-8.3.133.dist-info/RECORD,,