ultralytics 8.2.13__py3-none-any.whl → 8.2.14__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.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.13"
3
+ __version__ = "8.2.14"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
ultralytics/data/utils.py CHANGED
@@ -441,6 +441,7 @@ class HUBDatasetStats:
441
441
  stats = HUBDatasetStats('path/to/coco8.zip', task='detect') # detect dataset
442
442
  stats = HUBDatasetStats('path/to/coco8-seg.zip', task='segment') # segment dataset
443
443
  stats = HUBDatasetStats('path/to/coco8-pose.zip', task='pose') # pose dataset
444
+ stats = HUBDatasetStats('path/to/dota8.zip', task='obb') # OBB dataset
444
445
  stats = HUBDatasetStats('path/to/imagenet10.zip', task='classify') # classification dataset
445
446
 
446
447
  stats.get_json(save=True)
@@ -497,13 +498,13 @@ class HUBDatasetStats:
497
498
  """Update labels to integer class and 4 decimal place floats."""
498
499
  if self.task == "detect":
499
500
  coordinates = labels["bboxes"]
500
- elif self.task == "segment":
501
+ elif self.task in {"segment", "obb"}: # Segment and OBB use segments. OBB segments are normalized xyxyxyxy
501
502
  coordinates = [x.flatten() for x in labels["segments"]]
502
503
  elif self.task == "pose":
503
504
  n, nk, nd = labels["keypoints"].shape
504
505
  coordinates = np.concatenate((labels["bboxes"], labels["keypoints"].reshape(n, nk * nd)), 1)
505
506
  else:
506
- raise ValueError("Undefined dataset task.")
507
+ raise ValueError(f"Undefined dataset task={self.task}.")
507
508
  zipped = zip(labels["cls"], coordinates)
508
509
  return [[int(c[0]), *(round(float(x), 4) for x in points)] for c, points in zipped]
509
510
 
@@ -407,9 +407,9 @@ class Results(SimpleClass):
407
407
  class_id, conf = int(row.cls), round(row.conf.item(), decimals)
408
408
  box = (row.xyxyxyxy if is_obb else row.xyxy).squeeze().reshape(-1, 2).tolist()
409
409
  xy = {}
410
- for i, b in enumerate(box):
411
- xy[f"x{i + 1}"] = round(b[0] / w, decimals)
412
- xy[f"y{i + 1}"] = round(b[1] / h, decimals)
410
+ for j, b in enumerate(box):
411
+ xy[f"x{j + 1}"] = round(b[0] / w, decimals)
412
+ xy[f"y{j + 1}"] = round(b[1] / h, decimals)
413
413
  result = {"name": self.names[class_id], "class": class_id, "confidence": conf, "box": xy}
414
414
  if data.is_track:
415
415
  result["track_id"] = int(row.id.item()) # track ID
@@ -106,22 +106,26 @@ def get_export(model_id="", format="torchscript"):
106
106
  return r.json()
107
107
 
108
108
 
109
- def check_dataset(path="", task="detect"):
109
+ def check_dataset(path: str, task: str) -> None:
110
110
  """
111
111
  Function for error-checking HUB dataset Zip file before upload. It checks a dataset for errors before it is uploaded
112
112
  to the HUB. Usage examples are given below.
113
113
 
114
114
  Args:
115
- path (str, optional): Path to data.zip (with data.yaml inside data.zip). Defaults to ''.
116
- task (str, optional): Dataset task. Options are 'detect', 'segment', 'pose', 'classify'. Defaults to 'detect'.
115
+ path (str): Path to data.zip (with data.yaml inside data.zip).
116
+ task (str): Dataset task. Options are 'detect', 'segment', 'pose', 'classify', 'obb'.
117
117
 
118
118
  Example:
119
+ Download *.zip files from https://github.com/ultralytics/hub/tree/main/example_datasets
120
+ i.e. https://github.com/ultralytics/hub/raw/main/example_datasets/coco8.zip for coco8.zip.
119
121
  ```python
120
122
  from ultralytics.hub import check_dataset
121
123
 
122
124
  check_dataset('path/to/coco8.zip', task='detect') # detect dataset
123
125
  check_dataset('path/to/coco8-seg.zip', task='segment') # segment dataset
124
126
  check_dataset('path/to/coco8-pose.zip', task='pose') # pose dataset
127
+ check_dataset('path/to/dota8.zip', task='obb') # OBB dataset
128
+ check_dataset('path/to/imagenet10.zip', task='classify') # classification dataset
125
129
  ```
126
130
  """
127
131
  HUBDatasetStats(path=path, task=task).get_json()
@@ -1105,23 +1105,24 @@ def feature_visualization(x, module_type, stage, n=32, save_dir=Path("runs/detec
1105
1105
  n (int, optional): Maximum number of feature maps to plot. Defaults to 32.
1106
1106
  save_dir (Path, optional): Directory to save results. Defaults to Path('runs/detect/exp').
1107
1107
  """
1108
- for m in ["Detect", "Pose", "Segment"]:
1108
+ for m in {"Detect", "Segment", "Pose", "Classify", "OBB", "RTDETRDecoder"}: # all model heads
1109
1109
  if m in module_type:
1110
1110
  return
1111
- _, channels, height, width = x.shape # batch, channels, height, width
1112
- if height > 1 and width > 1:
1113
- f = save_dir / f"stage{stage}_{module_type.split('.')[-1]}_features.png" # filename
1114
-
1115
- blocks = torch.chunk(x[0].cpu(), channels, dim=0) # select batch index 0, block by channels
1116
- n = min(n, channels) # number of plots
1117
- _, ax = plt.subplots(math.ceil(n / 8), 8, tight_layout=True) # 8 rows x n/8 cols
1118
- ax = ax.ravel()
1119
- plt.subplots_adjust(wspace=0.05, hspace=0.05)
1120
- for i in range(n):
1121
- ax[i].imshow(blocks[i].squeeze()) # cmap='gray'
1122
- ax[i].axis("off")
1123
-
1124
- LOGGER.info(f"Saving {f}... ({n}/{channels})")
1125
- plt.savefig(f, dpi=300, bbox_inches="tight")
1126
- plt.close()
1127
- np.save(str(f.with_suffix(".npy")), x[0].cpu().numpy()) # npy save
1111
+ if isinstance(x, torch.Tensor):
1112
+ _, channels, height, width = x.shape # batch, channels, height, width
1113
+ if height > 1 and width > 1:
1114
+ f = save_dir / f"stage{stage}_{module_type.split('.')[-1]}_features.png" # filename
1115
+
1116
+ blocks = torch.chunk(x[0].cpu(), channels, dim=0) # select batch index 0, block by channels
1117
+ n = min(n, channels) # number of plots
1118
+ _, ax = plt.subplots(math.ceil(n / 8), 8, tight_layout=True) # 8 rows x n/8 cols
1119
+ ax = ax.ravel()
1120
+ plt.subplots_adjust(wspace=0.05, hspace=0.05)
1121
+ for i in range(n):
1122
+ ax[i].imshow(blocks[i].squeeze()) # cmap='gray'
1123
+ ax[i].axis("off")
1124
+
1125
+ LOGGER.info(f"Saving {f}... ({n}/{channels})")
1126
+ plt.savefig(f, dpi=300, bbox_inches="tight")
1127
+ plt.close()
1128
+ np.save(str(f.with_suffix(".npy")), x[0].cpu().numpy()) # npy save
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.13
3
+ Version: 8.2.14
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -1,4 +1,4 @@
1
- ultralytics/__init__.py,sha256=kePfzU_fmaqWqYo1vAvErpT-_rI_HNFNHYEm0JPlr9I,633
1
+ ultralytics/__init__.py,sha256=8EzNpeOWBuxDV22YG7ft8mxB2hmiXrnzG1V2wyP5yic,633
2
2
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
3
3
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
4
4
  ultralytics/cfg/__init__.py,sha256=lR6jykSO_0cigsjrqSyFj_8JG_LvYi796viasyWhcfs,21358
@@ -71,7 +71,7 @@ ultralytics/data/converter.py,sha256=NLDiV67RshbKQnMJUiQQF11boVzEqgi2Hz39nKVAI4U
71
71
  ultralytics/data/dataset.py,sha256=NFaXyHRn64TyTEbtSkr7SkqWXK8bEJl6lZ6M1JwO3MY,22201
72
72
  ultralytics/data/loaders.py,sha256=UxNLLV6rwUDog9MSOkHpDn52TO-X2g2P4a5ZwvB7Ii8,23142
73
73
  ultralytics/data/split_dota.py,sha256=PQdkwwlFtLKhWIrbToshSekXGdgbrbYMN6hM4ujfa7o,10010
74
- ultralytics/data/utils.py,sha256=eFqNmkHLhMHTOIUyburGrKz9DwjebdjIjqY4kIZX0Pg,30879
74
+ ultralytics/data/utils.py,sha256=MaZSd6kBL9scQF7a0PQX6UMiKJ_8vjGlUjggzZ_9aJg,31051
75
75
  ultralytics/data/explorer/__init__.py,sha256=-Y3m1ZedepOQUv_KW82zaGxvU_PSHcuwUTFqG9BhAr4,113
76
76
  ultralytics/data/explorer/explorer.py,sha256=0psbV96Qjbo2l_jGyM8WWnHq2gJREp_qq9YWPoxVxXE,18711
77
77
  ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yfi8NIA,7085
@@ -81,11 +81,11 @@ ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDT
81
81
  ultralytics/engine/exporter.py,sha256=2troO7ah3gAhHyQ2VCjFvaK9NBc6uleIVft5IRBjeFM,58122
82
82
  ultralytics/engine/model.py,sha256=IE6HE9VIzqO3DscxSLexub0LUR673eiPFrCPCt6ozEE,40103
83
83
  ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
84
- ultralytics/engine/results.py,sha256=r5dxL5of8TAf7GQECPehbvfz3KiYi4gUQHRqgPLBe3w,30919
84
+ ultralytics/engine/results.py,sha256=tVcViFF2pT1THaNaM6LIDxzhIQQ7SZf2NN-vKjLlN6Y,30919
85
85
  ultralytics/engine/trainer.py,sha256=GpseAovVKLRgAoqG4bEVtQqemWdDcxrY7gE3vGRU9gs,35048
86
86
  ultralytics/engine/tuner.py,sha256=iZrgMmXSDpfuDu4bdFRflmAsscys2-8W8qAGxSyOVJE,11844
87
87
  ultralytics/engine/validator.py,sha256=Y21Uo8_Zto4qjk_YqQk6k7tyfpq_Qk9cfjeXeyDRxs8,14643
88
- ultralytics/hub/__init__.py,sha256=U4j-2QPdwSDlxw6RgFYnnJXOoIzLtwke4TkY2A8q4ws,5068
88
+ ultralytics/hub/__init__.py,sha256=zXam81eSJ2IkH0CwPy_VhG1XHZem9vs9jR4uG7s-uAY,5383
89
89
  ultralytics/hub/auth.py,sha256=FID58NE6fh7Op_B45QOpWBw1qoBN0ponL16uvyb2dZ8,5399
90
90
  ultralytics/hub/session.py,sha256=Oly3bKjLkW08iOm3QoSr6Yy57aLZ4AmAmF6Pp9Y_q5g,15197
91
91
  ultralytics/hub/utils.py,sha256=RpFDFp9biUK70Mswzz2o3uEu4xwQxRaStPS19U2gu0g,9721
@@ -183,7 +183,7 @@ ultralytics/utils/loss.py,sha256=ejXnPEIAzNEoNz2UjW0_fcdeUs9Hy-jPzUrJ3FiIIwE,327
183
183
  ultralytics/utils/metrics.py,sha256=XPD-xP0fchR8KgCuTcihV2-n0EK1cWi3-53BWN_pLuA,53518
184
184
  ultralytics/utils/ops.py,sha256=wZCWx7dm5GJNIJHyZaFJRetGcQ7prdv-anplqq9figQ,33309
185
185
  ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
186
- ultralytics/utils/plotting.py,sha256=8Bts0M758PxAdOywsn8xv4ULBG7DuCGMhYWBVH5BrOM,48315
186
+ ultralytics/utils/plotting.py,sha256=ihlGqsBjL23p9ngI0rbjV1Mk10y4p6Z62SlxRORzDaU,48466
187
187
  ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
188
188
  ultralytics/utils/torch_utils.py,sha256=y1qJniyii0sJFg8dpP-yjYh8AMOoFok9NEZcRi669Jo,25916
189
189
  ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
@@ -199,9 +199,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
199
199
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
200
200
  ultralytics/utils/callbacks/tensorboard.py,sha256=Z1veCVcn9THPhdplWuIzwlsW2yF7y-On9IZIk3khM0Y,4135
201
201
  ultralytics/utils/callbacks/wb.py,sha256=woCQVuZzqtM5KnwxIibcfM3sFBYojeMPnv11jrRaIQA,6674
202
- ultralytics-8.2.13.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
203
- ultralytics-8.2.13.dist-info/METADATA,sha256=jmWVJ8vHk58k8PuO846jetpsl0IqNXGHnq7IjtWHz9A,40694
204
- ultralytics-8.2.13.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
205
- ultralytics-8.2.13.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
206
- ultralytics-8.2.13.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
207
- ultralytics-8.2.13.dist-info/RECORD,,
202
+ ultralytics-8.2.14.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
203
+ ultralytics-8.2.14.dist-info/METADATA,sha256=KBP6_nUk1bxKFb07J2lsiPfSH2-znVkSjgEwdWqMIyA,40694
204
+ ultralytics-8.2.14.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
205
+ ultralytics-8.2.14.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
206
+ ultralytics-8.2.14.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
207
+ ultralytics-8.2.14.dist-info/RECORD,,