ultralytics 8.3.197__py3-none-any.whl → 8.3.198__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.
Files changed (42) hide show
  1. tests/test_engine.py +9 -1
  2. ultralytics/__init__.py +1 -1
  3. ultralytics/cfg/__init__.py +0 -1
  4. ultralytics/cfg/default.yaml +96 -94
  5. ultralytics/cfg/trackers/botsort.yaml +16 -17
  6. ultralytics/cfg/trackers/bytetrack.yaml +9 -11
  7. ultralytics/data/augment.py +1 -1
  8. ultralytics/data/dataset.py +1 -1
  9. ultralytics/engine/exporter.py +35 -35
  10. ultralytics/engine/predictor.py +1 -2
  11. ultralytics/engine/results.py +1 -1
  12. ultralytics/engine/trainer.py +5 -5
  13. ultralytics/engine/tuner.py +54 -32
  14. ultralytics/models/sam/modules/decoders.py +3 -3
  15. ultralytics/models/sam/modules/sam.py +5 -5
  16. ultralytics/models/sam/predict.py +11 -11
  17. ultralytics/models/yolo/classify/train.py +2 -7
  18. ultralytics/models/yolo/classify/val.py +2 -2
  19. ultralytics/models/yolo/detect/predict.py +1 -1
  20. ultralytics/models/yolo/detect/train.py +1 -6
  21. ultralytics/models/yolo/detect/val.py +4 -4
  22. ultralytics/models/yolo/obb/val.py +3 -3
  23. ultralytics/models/yolo/pose/predict.py +1 -1
  24. ultralytics/models/yolo/pose/train.py +0 -6
  25. ultralytics/models/yolo/pose/val.py +2 -2
  26. ultralytics/models/yolo/segment/predict.py +2 -2
  27. ultralytics/models/yolo/segment/train.py +0 -5
  28. ultralytics/models/yolo/segment/val.py +9 -7
  29. ultralytics/models/yolo/yoloe/val.py +1 -1
  30. ultralytics/nn/modules/block.py +1 -1
  31. ultralytics/nn/tasks.py +2 -2
  32. ultralytics/utils/checks.py +1 -1
  33. ultralytics/utils/metrics.py +6 -6
  34. ultralytics/utils/nms.py +5 -13
  35. ultralytics/utils/plotting.py +22 -36
  36. ultralytics/utils/torch_utils.py +9 -5
  37. {ultralytics-8.3.197.dist-info → ultralytics-8.3.198.dist-info}/METADATA +1 -1
  38. {ultralytics-8.3.197.dist-info → ultralytics-8.3.198.dist-info}/RECORD +42 -42
  39. {ultralytics-8.3.197.dist-info → ultralytics-8.3.198.dist-info}/WHEEL +0 -0
  40. {ultralytics-8.3.197.dist-info → ultralytics-8.3.198.dist-info}/entry_points.txt +0 -0
  41. {ultralytics-8.3.197.dist-info → ultralytics-8.3.198.dist-info}/licenses/LICENSE +0 -0
  42. {ultralytics-8.3.197.dist-info → ultralytics-8.3.198.dist-info}/top_level.txt +0 -0
ultralytics/nn/tasks.py CHANGED
@@ -766,7 +766,7 @@ class RTDETRDetectionModel(DetectionModel):
766
766
 
767
767
  img = batch["img"]
768
768
  # NOTE: preprocess gt_bbox and gt_labels to list.
769
- bs = len(img)
769
+ bs = img.shape[0]
770
770
  batch_idx = batch["batch_idx"]
771
771
  gt_groups = [(batch_idx == i).sum().item() for i in range(bs)]
772
772
  targets = {
@@ -923,7 +923,7 @@ class WorldModel(DetectionModel):
923
923
  (torch.Tensor): Model's output tensor.
924
924
  """
925
925
  txt_feats = (self.txt_feats if txt_feats is None else txt_feats).to(device=x.device, dtype=x.dtype)
926
- if len(txt_feats) != len(x) or self.model[-1].export:
926
+ if txt_feats.shape[0] != x.shape[0] or self.model[-1].export:
927
927
  txt_feats = txt_feats.expand(x.shape[0], -1, -1)
928
928
  ori_txt_feats = txt_feats.clone()
929
929
  y, dt, embeddings = [], [], [] # outputs
@@ -907,7 +907,7 @@ def is_intel():
907
907
  try:
908
908
  result = subprocess.run(["xpu-smi", "discovery"], capture_output=True, text=True, timeout=5)
909
909
  return "intel" in result.stdout.lower()
910
- except (subprocess.TimeoutExpired, FileNotFoundError, subprocess.SubprocessError):
910
+ except Exception: # broad clause to capture all Intel GPU exception types
911
911
  return False
912
912
 
913
913
 
@@ -397,11 +397,11 @@ class ConfusionMatrix(DataExportMixin):
397
397
  gt_cls, gt_bboxes = batch["cls"], batch["bboxes"]
398
398
  if self.matches is not None: # only if visualization is enabled
399
399
  self.matches = {k: defaultdict(list) for k in {"TP", "FP", "FN", "GT"}}
400
- for i in range(len(gt_cls)):
400
+ for i in range(gt_cls.shape[0]):
401
401
  self._append_matches("GT", batch, i) # store GT
402
402
  is_obb = gt_bboxes.shape[1] == 5 # check if boxes contains angle for OBB
403
403
  conf = 0.25 if conf in {None, 0.01 if is_obb else 0.001} else conf # apply 0.25 if default val conf is passed
404
- no_pred = len(detections["cls"]) == 0
404
+ no_pred = detections["cls"].shape[0] == 0
405
405
  if gt_cls.shape[0] == 0: # Check if labels is empty
406
406
  if not no_pred:
407
407
  detections = {k: detections[k][detections["conf"] > conf] for k in detections}
@@ -491,13 +491,13 @@ class ConfusionMatrix(DataExportMixin):
491
491
  for i, mtype in enumerate(["GT", "FP", "TP", "FN"]):
492
492
  mbatch = self.matches[mtype]
493
493
  if "conf" not in mbatch:
494
- mbatch["conf"] = torch.tensor([1.0] * len(mbatch["bboxes"]), device=img.device)
495
- mbatch["batch_idx"] = torch.ones(len(mbatch["bboxes"]), device=img.device) * i
494
+ mbatch["conf"] = torch.tensor([1.0] * mbatch["bboxes"].shape[0], device=img.device)
495
+ mbatch["batch_idx"] = torch.ones(mbatch["bboxes"].shape[0], device=img.device) * i
496
496
  for k in mbatch.keys():
497
497
  labels[k] += mbatch[k]
498
498
 
499
499
  labels = {k: torch.stack(v, 0) if len(v) else v for k, v in labels.items()}
500
- if self.task != "obb" and len(labels["bboxes"]):
500
+ if self.task != "obb" and labels["bboxes"].shape[0]:
501
501
  labels["bboxes"] = xyxy2xywh(labels["bboxes"])
502
502
  (save_dir / "visualizations").mkdir(parents=True, exist_ok=True)
503
503
  plot_images(
@@ -980,7 +980,7 @@ class Metric(SimpleClass):
980
980
 
981
981
  def fitness(self) -> float:
982
982
  """Return model fitness as a weighted combination of metrics."""
983
- w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
983
+ w = [0.0, 0.0, 0.0, 1.0] # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
984
984
  return (np.nan_to_num(np.array(self.mean_results())) * w).sum()
985
985
 
986
986
  def update(self, results: tuple):
ultralytics/utils/nms.py CHANGED
@@ -263,12 +263,11 @@ class TorchNMS:
263
263
  areas = (x2 - x1) * (y2 - y1)
264
264
 
265
265
  # Sort by scores descending
266
- _, order = scores.sort(0, descending=True)
266
+ order = scores.argsort(0, descending=True)
267
267
 
268
268
  # Pre-allocate keep list with maximum possible size
269
269
  keep = torch.zeros(order.numel(), dtype=torch.int64, device=boxes.device)
270
270
  keep_idx = 0
271
-
272
271
  while order.numel() > 0:
273
272
  i = order[0]
274
273
  keep[keep_idx] = i
@@ -276,7 +275,6 @@ class TorchNMS:
276
275
 
277
276
  if order.numel() == 1:
278
277
  break
279
-
280
278
  # Vectorized IoU calculation for remaining boxes
281
279
  rest = order[1:]
282
280
  xx1 = torch.maximum(x1[i], x1[rest])
@@ -288,20 +286,14 @@ class TorchNMS:
288
286
  w = (xx2 - xx1).clamp_(min=0)
289
287
  h = (yy2 - yy1).clamp_(min=0)
290
288
  inter = w * h
291
-
292
- # Early termination: skip IoU calculation if no intersection
289
+ # Early exit: skip IoU calculation if no intersection
293
290
  if inter.sum() == 0:
294
291
  # No overlaps with current box, keep all remaining boxes
295
- remaining_count = rest.numel()
296
- keep[keep_idx : keep_idx + remaining_count] = rest
297
- keep_idx += remaining_count
298
- break
299
-
292
+ order = rest
293
+ continue
300
294
  iou = inter / (areas[i] + areas[rest] - inter)
301
-
302
295
  # Keep boxes with IoU <= threshold
303
- mask = iou <= iou_threshold
304
- order = rest[mask]
296
+ order = rest[iou <= iou_threshold]
305
297
 
306
298
  return keep[:keep_idx]
307
299
 
@@ -812,14 +812,13 @@ def plot_images(
812
812
 
813
813
  # Plot masks
814
814
  if len(masks):
815
- if idx.shape[0] == masks.shape[0]: # overlap_mask=False
815
+ if idx.shape[0] == masks.shape[0] and masks.max() <= 1: # overlap_mask=False
816
816
  image_masks = masks[idx]
817
817
  else: # overlap_mask=True
818
818
  image_masks = masks[[i]] # (1, 640, 640)
819
819
  nl = idx.sum()
820
- index = np.arange(nl).reshape((nl, 1, 1)) + 1
821
- image_masks = np.repeat(image_masks, nl, axis=0)
822
- image_masks = np.where(image_masks == index, 1.0, 0.0)
820
+ index = np.arange(1, nl + 1).reshape((nl, 1, 1))
821
+ image_masks = (image_masks == index).astype(np.float32)
823
822
 
824
823
  im = np.asarray(annotator.im).copy()
825
824
  for j in range(len(image_masks)):
@@ -847,14 +846,7 @@ def plot_images(
847
846
 
848
847
 
849
848
  @plt_settings()
850
- def plot_results(
851
- file: str = "path/to/results.csv",
852
- dir: str = "",
853
- segment: bool = False,
854
- pose: bool = False,
855
- classify: bool = False,
856
- on_plot: Callable | None = None,
857
- ):
849
+ def plot_results(file: str = "path/to/results.csv", dir: str = "", on_plot: Callable | None = None):
858
850
  """
859
851
  Plot training results from a results CSV file. The function supports various types of data including segmentation,
860
852
  pose estimation, and classification. Plots are saved as 'results.png' in the directory where the CSV is located.
@@ -862,9 +854,6 @@ def plot_results(
862
854
  Args:
863
855
  file (str, optional): Path to the CSV file containing the training results.
864
856
  dir (str, optional): Directory where the CSV file is located if 'file' is not provided.
865
- segment (bool, optional): Flag to indicate if the data is for segmentation.
866
- pose (bool, optional): Flag to indicate if the data is for pose estimation.
867
- classify (bool, optional): Flag to indicate if the data is for classification.
868
857
  on_plot (callable, optional): Callback function to be executed after plotting. Takes filename as an argument.
869
858
 
870
859
  Examples:
@@ -876,34 +865,31 @@ def plot_results(
876
865
  from scipy.ndimage import gaussian_filter1d
877
866
 
878
867
  save_dir = Path(file).parent if file else Path(dir)
879
- if classify:
880
- fig, ax = plt.subplots(2, 2, figsize=(6, 6), tight_layout=True)
881
- index = [2, 5, 3, 4]
882
- elif segment:
883
- fig, ax = plt.subplots(2, 8, figsize=(18, 6), tight_layout=True)
884
- index = [2, 3, 4, 5, 6, 7, 10, 11, 14, 15, 16, 17, 8, 9, 12, 13]
885
- elif pose:
886
- fig, ax = plt.subplots(2, 9, figsize=(21, 6), tight_layout=True)
887
- index = [2, 3, 4, 5, 6, 7, 8, 11, 12, 15, 16, 17, 18, 19, 9, 10, 13, 14]
888
- else:
889
- fig, ax = plt.subplots(2, 5, figsize=(12, 6), tight_layout=True)
890
- index = [2, 3, 4, 5, 6, 9, 10, 11, 7, 8]
891
- ax = ax.ravel()
892
868
  files = list(save_dir.glob("results*.csv"))
893
869
  assert len(files), f"No results.csv files found in {save_dir.resolve()}, nothing to plot."
894
- for f in files:
870
+
871
+ loss_keys, metric_keys = [], []
872
+ for i, f in enumerate(files):
895
873
  try:
896
874
  data = pl.read_csv(f, infer_schema_length=None)
897
- s = [x.strip() for x in data.columns]
875
+ if i == 0:
876
+ for c in data.columns:
877
+ if "loss" in c:
878
+ loss_keys.append(c)
879
+ elif "metric" in c:
880
+ metric_keys.append(c)
881
+ loss_mid, metric_mid = len(loss_keys) // 2, len(metric_keys) // 2
882
+ columns = (
883
+ loss_keys[:loss_mid] + metric_keys[:metric_mid] + loss_keys[loss_mid:] + metric_keys[metric_mid:]
884
+ )
885
+ fig, ax = plt.subplots(2, len(columns) // 2, figsize=(len(columns) + 2, 6), tight_layout=True)
886
+ ax = ax.ravel()
898
887
  x = data.select(data.columns[0]).to_numpy().flatten()
899
- for i, j in enumerate(index):
900
- y = data.select(data.columns[j]).to_numpy().flatten().astype("float")
901
- # y[y == 0] = np.nan # don't show zero values
888
+ for i, j in enumerate(columns):
889
+ y = data.select(j).to_numpy().flatten().astype("float")
902
890
  ax[i].plot(x, y, marker=".", label=f.stem, linewidth=2, markersize=8) # actual results
903
891
  ax[i].plot(x, gaussian_filter1d(y, sigma=3), ":", label="smooth", linewidth=2) # smoothing line
904
- ax[i].set_title(s[j], fontsize=12)
905
- # if j in {8, 9, 10}: # share train and val loss y axes
906
- # ax[i].get_shared_y_axes().join(ax[i], ax[i - 5])
892
+ ax[i].set_title(j, fontsize=12)
907
893
  except Exception as e:
908
894
  LOGGER.error(f"Plotting error for {f}: {e}")
909
895
  ax[1].legend()
@@ -1012,7 +1012,7 @@ def attempt_compile(
1012
1012
  imgsz: int = 640,
1013
1013
  use_autocast: bool = False,
1014
1014
  warmup: bool = False,
1015
- prefix: str = colorstr("compile:"),
1015
+ mode: bool | str = "default",
1016
1016
  ) -> torch.nn.Module:
1017
1017
  """
1018
1018
  Compile a model with torch.compile and optionally warm up the graph to reduce first-iteration latency.
@@ -1027,7 +1027,8 @@ def attempt_compile(
1027
1027
  imgsz (int, optional): Square input size to create a dummy tensor with shape (1, 3, imgsz, imgsz) for warmup.
1028
1028
  use_autocast (bool, optional): Whether to run warmup under autocast on CUDA or MPS devices.
1029
1029
  warmup (bool, optional): Whether to execute a single dummy forward pass to warm up the compiled model.
1030
- prefix (str, optional): Message prefix for logger output.
1030
+ mode (bool | str, optional): torch.compile mode. True "default", False → no compile, or a string like
1031
+ "default", "reduce-overhead", "max-autotune".
1031
1032
 
1032
1033
  Returns:
1033
1034
  model (torch.nn.Module): Compiled model if compilation succeeds, otherwise the original unmodified model.
@@ -1042,13 +1043,16 @@ def attempt_compile(
1042
1043
  >>> # Try to compile and warm up a model with a 640x640 input
1043
1044
  >>> model = attempt_compile(model, device=device, imgsz=640, use_autocast=True, warmup=True)
1044
1045
  """
1045
- if not hasattr(torch, "compile"):
1046
+ if not hasattr(torch, "compile") or not mode:
1046
1047
  return model
1047
1048
 
1048
- LOGGER.info(f"{prefix} starting torch.compile...")
1049
+ if mode is True:
1050
+ mode = "default"
1051
+ prefix = colorstr("compile:")
1052
+ LOGGER.info(f"{prefix} starting torch.compile with '{mode}' mode...")
1049
1053
  t0 = time.perf_counter()
1050
1054
  try:
1051
- model = torch.compile(model, mode="max-autotune", backend="inductor")
1055
+ model = torch.compile(model, mode=mode, backend="inductor")
1052
1056
  except Exception as e:
1053
1057
  LOGGER.warning(f"{prefix} torch.compile failed, continuing uncompiled: {e}")
1054
1058
  return model
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.197
3
+ Version: 8.3.198
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>
@@ -2,17 +2,17 @@ tests/__init__.py,sha256=b4KP5_q-2IO8Br8YHOSLYnn7IwZS81l_vfEF2YPa2lM,894
2
2
  tests/conftest.py,sha256=LXtQJcFNWPGuzauTGkiXgsvVC3llJKfg22WcmhRzuQc,2593
3
3
  tests/test_cli.py,sha256=EMf5gTAopOnIz8VvzaM-Qb044o7D0flnUHYQ-2ffOM4,5670
4
4
  tests/test_cuda.py,sha256=Z-MX1aIBQyt_fAAgKxBEznE0Mj7caSwrctW9z__NGzU,8240
5
- tests/test_engine.py,sha256=Jpt2KVrltrEgh2-3Ykouz-2Z_2fza0eymL5ectRXadM,4922
5
+ tests/test_engine.py,sha256=8W4_D48ZBUp-DsUlRYxHTXzougycY8yggvpbVwQDLPg,5025
6
6
  tests/test_exports.py,sha256=dWuroSyqXnrc0lE-RNTf7pZoXXXEkOs31u7nhOiEHS0,10994
7
7
  tests/test_integrations.py,sha256=kl_AKmE_Qs1GB0_91iVwbzNxofm_hFTt0zzU6JF-pg4,6323
8
8
  tests/test_python.py,sha256=2V23f2-JQsO-K4p1kj0IkCRxHykGwgd0edKJzRsBgdI,27911
9
9
  tests/test_solutions.py,sha256=6wJ9-lhyWSAm7zaR4D9L_DrUA3iJU1NgqmbQO6PIuvo,13211
10
- ultralytics/__init__.py,sha256=z_P4EQKfcjM3hGCrxHHRLjWiIR1SU0oCaCjU9htTGDE,730
10
+ ultralytics/__init__.py,sha256=CJCtY5CCo6PMK1UGpJetRmcryk-2hqIbQI0Qy7O723Q,730
11
11
  ultralytics/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
12
12
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
13
13
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
14
- ultralytics/cfg/__init__.py,sha256=oR-uubaBOEIetwoKr9C9WeXP7fLwVygDE_Cppoe2ho0,39974
15
- ultralytics/cfg/default.yaml,sha256=jnt-5OmGalqd_SSEa1cf4HkBaJy0IswpoW5gdkoF5Vc,8429
14
+ ultralytics/cfg/__init__.py,sha256=xX7qUxdcDgcjCKoQFEVQgzrwZodeKTF88CTKZe05d0Y,39955
15
+ ultralytics/cfg/default.yaml,sha256=awOQl-PS3Rb6prD0IjbFh0lOhKSjqEvroOmJB3W0AS0,8887
16
16
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=J4ItoUlE_EiYTmp1DFKYHfbqHkj8j4wUtRJQhaMIlBM,3275
17
17
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=VZ_KKFX0H2YvlFVJ8JHcLWYBZ2xiQ6Z-ROSTiKWpS7c,1211
18
18
  ultralytics/cfg/datasets/DOTAv1.yaml,sha256=JrDuYcQ0JU9lJlCA-dCkMNko_jaj6MAVGHjsfjeZ_u0,1181
@@ -103,15 +103,15 @@ ultralytics/cfg/models/v9/yolov9e.yaml,sha256=Olr2PlADpkD6N1TiVyAJEMzkrA7SbNul1n
103
103
  ultralytics/cfg/models/v9/yolov9m.yaml,sha256=WcKQ3xRsC1JMgA42Hx4xzr4FZmtE6B3wKvqhlQxkqw8,1411
104
104
  ultralytics/cfg/models/v9/yolov9s.yaml,sha256=j_v3JWaPtiuM8aKJt15Z_4HPRCoHWn_G6Z07t8CZyjk,1391
105
105
  ultralytics/cfg/models/v9/yolov9t.yaml,sha256=Q8GpSXE7fumhuJiQg4a2SkuS_UmnXqp-eoZxW_C0vEo,1375
106
- ultralytics/cfg/trackers/botsort.yaml,sha256=TpRaK5kH_-QbjCQ7ekM4s_7j8I8ti3q8Hs7WDz4rEwA,1215
107
- ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypgv26LGCtPDg,886
106
+ ultralytics/cfg/trackers/botsort.yaml,sha256=tRxC-qT4Wz0mLn5x7ZEwrqgGKrmTDVY7gMge-mhpe7U,1431
107
+ ultralytics/cfg/trackers/bytetrack.yaml,sha256=7LS1ObP5u7BUFcmeY6L2m3bRuPUktnpJspFKd_ElVWc,908
108
108
  ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
109
109
  ultralytics/data/annotator.py,sha256=f15TCDEM8SuuzHiFB8oyhTy9vfywKmPTLSPAgsZQP9I,2990
110
- ultralytics/data/augment.py,sha256=3ArOOP1dSnCfQRHIQ6og-XFsaLnSqrXYtx-tpbE4Kag,132893
110
+ ultralytics/data/augment.py,sha256=7NsRCYu_uM6KkpU0F03NC9Ra_GQVGp2dRO1RksrrU38,132897
111
111
  ultralytics/data/base.py,sha256=gWoGFifyNe1TCwtGdGp5jzKOQ9sh4b-XrfyN0PPvRaY,19661
112
112
  ultralytics/data/build.py,sha256=Bhu8E-FNSkTbz6YpNXeUBmQtN91ZtZxOCUiKYXgzV-c,11778
113
113
  ultralytics/data/converter.py,sha256=N1YFD0mG7uwL12wMcuVtF2zbISBIzTsGiy1QioDTDGs,32049
114
- ultralytics/data/dataset.py,sha256=AfWOLsLKjTDHRtSqODKk5OsD3ViETZTKxY4PKP2Jo5Q,36751
114
+ ultralytics/data/dataset.py,sha256=GL6J_fvluaF2Ck1in3W5q3Xm7lRcUd6Amgd_uu6r_FM,36772
115
115
  ultralytics/data/loaders.py,sha256=sfQ0C86uBg9QQbN3aU0W8FIjGQmMdJTQAMK4DA1bjk8,31748
116
116
  ultralytics/data/split.py,sha256=5ubnL_wsEutFQOj4I4K01L9UpZrrO_vO3HrydSLJyIY,5107
117
117
  ultralytics/data/split_dota.py,sha256=Lz04qVufTvHn4cTyo3VkqoIM93rb-Ymr8uOIXeSsaJI,12910
@@ -121,12 +121,12 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
121
121
  ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
122
122
  ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
123
123
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
124
- ultralytics/engine/exporter.py,sha256=K4Ga3CSt7mFEgbnOAIe0fvztfJDkDOFrROC21WqMGN8,75004
124
+ ultralytics/engine/exporter.py,sha256=rz0CAzezUXdQuL1UUhgSIl4-TUu5eVuB6CBA4wh7HTc,74836
125
125
  ultralytics/engine/model.py,sha256=iwwaL2NR5NSwQ7R3juHzS3ds9W-CfhC_CjUcwMvcgsk,53426
126
- ultralytics/engine/predictor.py,sha256=510VPYcYmEYPJmBiApQLGaFFAL4gd79rVzPCwisH7LE,22745
127
- ultralytics/engine/results.py,sha256=BmhePCaaTBfYrJT12t6bywZuZ_7h3tIc4IsRFuyNTdk,71499
128
- ultralytics/engine/trainer.py,sha256=4DFtGOS6II6vD7tUPNgSK45DgzFjUSkPRvpnXijs4Ew,40914
129
- ultralytics/engine/tuner.py,sha256=XuqcjyGpD79pUVn-PXlJJGKXgH1yblPdYBH_R2kHWSU,20586
126
+ ultralytics/engine/predictor.py,sha256=4lfw2RbBDE7939011FcSCuznscrcnMuabZtc8GXaKO4,22735
127
+ ultralytics/engine/results.py,sha256=uQ_tgvdxKAg28pRgb5WCHiqx9Ktu7wYiVbwZy_IJ5bo,71499
128
+ ultralytics/engine/trainer.py,sha256=aFGnBYH9xgS2qgZc-QdgRaiMxGOeeu27dWc31hsOAvo,41030
129
+ ultralytics/engine/tuner.py,sha256=__OaI1oS3J37iqwruojxcnCYi6L7bgXmZ3bzNvinZk4,21409
130
130
  ultralytics/engine/validator.py,sha256=7tADPOXRZz0Yi7F-Z5SxcUnwytaa2MfbtuSdO8pp_l4,16966
131
131
  ultralytics/hub/__init__.py,sha256=xCF02lzlPKbdmGfO3NxLuXl5Kb0MaBZp_-fAWDHZ8zw,6698
132
132
  ultralytics/hub/auth.py,sha256=RIwZDWfW6vS2yGpZKR0xVl0-38itJYEFtmqY_M70bl8,6304
@@ -152,13 +152,13 @@ ultralytics/models/sam/__init__.py,sha256=4VtjxrbrSsqBvteaD_CwA4Nj3DdSUG1MknymtW
152
152
  ultralytics/models/sam/amg.py,sha256=sNSBMacS5VKx4NnzdYwBPKJniMNuhpi8VzOMjitGwvo,11821
153
153
  ultralytics/models/sam/build.py,sha256=JEGNXDtBtzp7VIcaYyup7Rwqf1ETSEcX1E1mqBmbMgU,12629
154
154
  ultralytics/models/sam/model.py,sha256=qV8tlHQA1AHUqGkWbwtI7cLw0Rgy3a4X9S2c_wu5fh4,7237
155
- ultralytics/models/sam/predict.py,sha256=6jIgK__mXpBW_wvdVZYNqpjQTbYZeXVCq0KQ4aBGpoE,104963
155
+ ultralytics/models/sam/predict.py,sha256=jjAIrwEUsNZoQyZwDCRcCwNoPTbfi1FXEkw7HP-eK40,105001
156
156
  ultralytics/models/sam/modules/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
157
157
  ultralytics/models/sam/modules/blocks.py,sha256=KATWIut_HO4E_8dGdvv5gt1_r8yUVXw1jkyN_bvRAYQ,46055
158
- ultralytics/models/sam/modules/decoders.py,sha256=jFw8iZ-esHWvgAzTaBwG9MJabi6qX5gUeBUI9kftm64,25620
158
+ ultralytics/models/sam/modules/decoders.py,sha256=PGNNpy1ttAy6xV_ERW1Ld3Kf9LGDG3mibOss0SeHAis,25623
159
159
  ultralytics/models/sam/modules/encoders.py,sha256=VOgwSDFep_zqssESz8mNDPDdJfQmP97kHVN-MrExGnk,37326
160
160
  ultralytics/models/sam/modules/memory_attention.py,sha256=BOkV6ULHc0Iiw_tHcNYosYrZ1tAXyC0DG46ktQzR91E,13638
161
- ultralytics/models/sam/modules/sam.py,sha256=wkVmAGyopIYKKMEEr4vGWKWxokVH1cY8Teifmhpjh0A,55618
161
+ ultralytics/models/sam/modules/sam.py,sha256=Ys9sSfRIhP3sxgZolGynpJQhJQgU6ydEW8Wb07HneYg,55624
162
162
  ultralytics/models/sam/modules/tiny_encoder.py,sha256=fSxTByC7OSmHYg93KylsFayh6nPdlidRk1BORh6X-p0,42199
163
163
  ultralytics/models/sam/modules/transformer.py,sha256=UdZdhGQYYPTU6R4A4Yyy-hElQLCG7nX726iTKaV977A,14958
164
164
  ultralytics/models/sam/modules/utils.py,sha256=XReheR5K0jbTKYy5k_iSC1vocUndi8aBkesz-n6Pl9g,16045
@@ -169,24 +169,24 @@ ultralytics/models/yolo/__init__.py,sha256=or0j5xvcM0usMlsFTYhNAOcQUri7reD0cD9JR
169
169
  ultralytics/models/yolo/model.py,sha256=b_F1AeBUgiSssRxZ-rGQVdB0a37rDG92h_03o0N29B8,18761
170
170
  ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
171
171
  ultralytics/models/yolo/classify/predict.py,sha256=o7pDE8xwjkHUUIIOph7ZVQZyGZyob24dYDQ460v_7R0,4149
172
- ultralytics/models/yolo/classify/train.py,sha256=CXi8ZrVqYtqlzRbg3UP5kOyMYXAM4Wex8Ii0fDyv-iA,9840
173
- ultralytics/models/yolo/classify/val.py,sha256=6_-pbnb0skASJCqsar6_i3FyvfKNJwZ7Y8AK7wzySIU,10039
172
+ ultralytics/models/yolo/classify/train.py,sha256=BpzPNBJ3F_cg4VqnIiDZVwdUslTTZB9FoDAywhGqbXg,9612
173
+ ultralytics/models/yolo/classify/val.py,sha256=SslmUSnOAgw1vvFQ4hFbdxuOq8dgfAgGd4D6mpZphZA,10047
174
174
  ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
175
- ultralytics/models/yolo/detect/predict.py,sha256=v4u3azp2zQxJKJ4L198gGIgkL7CN-6qGg1B7ypBxxbM,5390
176
- ultralytics/models/yolo/detect/train.py,sha256=8t_dou6LKE_Td71cDdRUzEVaXMipOYUv1mcnfspDqyI,10749
177
- ultralytics/models/yolo/detect/val.py,sha256=OG38-x3LyCAeH3UY9jOG4axK7mfnVnTwaKpjMzQi07I,21309
175
+ ultralytics/models/yolo/detect/predict.py,sha256=Vtpqb2gHI7hv9TaBBXsnoScQ8HrSnj0PPOkEu07MwLc,5394
176
+ ultralytics/models/yolo/detect/train.py,sha256=QT_ItVx1ss6Iui8LIV4n0rY9QZKIKYTnQnFkTRo5cLo,10532
177
+ ultralytics/models/yolo/detect/val.py,sha256=xjfkgeiTRG_m-0hlAZrIyklxB6-ApCBLaC-R_Te8fP8,21329
178
178
  ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
179
179
  ultralytics/models/yolo/obb/predict.py,sha256=4r1eSld6TNJlk9JG56e-DX6oPL8uBBqiuztyBpxWlHE,2888
180
180
  ultralytics/models/yolo/obb/train.py,sha256=BbehrsKP0lHRV3v7rrw8wAeiDdc-szbhHAmDy0OdhoM,3461
181
- ultralytics/models/yolo/obb/val.py,sha256=ZNjdI5dF-igZCqJadAUb5VPTevI5i47G-bPTG8wV-CY,14171
181
+ ultralytics/models/yolo/obb/val.py,sha256=9jMnBRIqPkCzY21CSiuP3LL4qpBEY-pnEgKQSi4bEJ0,14187
182
182
  ultralytics/models/yolo/pose/__init__.py,sha256=63xmuHZLNzV8I76HhVXAq4f2W0KTk8Oi9eL-Y204LyQ,227
183
- ultralytics/models/yolo/pose/predict.py,sha256=M0C7ZfVXx4QXgv-szjnaXYEPas76ZLGAgDNNh1GG0vI,3743
184
- ultralytics/models/yolo/pose/train.py,sha256=WdCEgbdxKvPEH-81tF-pNjrXHck7uTlqUONyKVxq_n4,5004
185
- ultralytics/models/yolo/pose/val.py,sha256=U4tMWbHpCjspJ6i5DbNUav05RFCvwvfD1mjejqJIJ1c,12638
183
+ ultralytics/models/yolo/pose/predict.py,sha256=3fgu4EKcVRKlP7fySDVsngl4ufk2f71P8SLbfRU2KgE,3747
184
+ ultralytics/models/yolo/pose/train.py,sha256=AstxnvJcoF5qnDEZSs45U2cGdMdSltX1HuSVwCZqMHQ,4712
185
+ ultralytics/models/yolo/pose/val.py,sha256=MK-GueXmXrl7eZ5WHYjJMghE4AYJTEut7AuS-G5D1gw,12650
186
186
  ultralytics/models/yolo/segment/__init__.py,sha256=3IThhZ1wlkY9FvmWm9cE-5-ZyE6F1FgzAtQ6jOOFzzw,275
187
- ultralytics/models/yolo/segment/predict.py,sha256=zxMc1QvsQoJxm6VSbbZQ3pChvq1VbYSf7p8RX3RbPNg,5377
188
- ultralytics/models/yolo/segment/train.py,sha256=Om8snA0fOvddFVZNHrUYfu4admJXxmsVlMQAKOnkwpk,3253
189
- ultralytics/models/yolo/segment/val.py,sha256=oyiscSgMWdfmbdNJrumnPoSX6-gZXMx4XnfbX5Hc-RY,11158
187
+ ultralytics/models/yolo/segment/predict.py,sha256=HePes5rQ9v3iTCpn3vrIee0SsAsJuJm-X7tHA8Tixc8,5384
188
+ ultralytics/models/yolo/segment/train.py,sha256=5aPK5FDHLzbXb3R5TCpsAr1O6-8rtupOIoDokY8bSDs,3032
189
+ ultralytics/models/yolo/segment/val.py,sha256=fJLDJpK1RZgeMvmtf47BjHhZ9lzX_4QfUuBzGXZqIhA,11289
190
190
  ultralytics/models/yolo/world/__init__.py,sha256=nlh8I6t8hMGz_vZg8QSlsUW1R-2eKvn9CGUoPPQEGhA,131
191
191
  ultralytics/models/yolo/world/train.py,sha256=zVPtVoBedberGkth3tPuIH665HjGNJvTMLw_wLZQM84,7870
192
192
  ultralytics/models/yolo/world/train_world.py,sha256=9p9YIckrATaJjGOrpmuC8MbZX9qdoCPCEV9EGZ0sExg,9553
@@ -194,14 +194,14 @@ ultralytics/models/yolo/yoloe/__init__.py,sha256=6SLytdJtwu37qewf7CobG7C7Wl1m-xt
194
194
  ultralytics/models/yolo/yoloe/predict.py,sha256=pcbAUbosr1Xc436MfQi6ah3MQ6kkPzjOcltmdA3VMDE,7124
195
195
  ultralytics/models/yolo/yoloe/train.py,sha256=jcXqGm8CReOCVMFLk-1bNe0Aw5PWaaQa8xBWxtrt5TY,13571
196
196
  ultralytics/models/yolo/yoloe/train_seg.py,sha256=aCV7M8oQOvODFnU4piZdJh3tIrBJYAzZfRVRx1vRgxo,4956
197
- ultralytics/models/yolo/yoloe/val.py,sha256=Dn6CKpfcopDVxr-WY13ATDVb_RIzQ-wsXSxxy_mpndA,9454
197
+ ultralytics/models/yolo/yoloe/val.py,sha256=5Gd9EoFH0FmKKvWXBl4J7gBe9DVxIczN-s3ceHwdUDo,9458
198
198
  ultralytics/nn/__init__.py,sha256=PJgOn2phQTTBR2P3s_JWvGeGXQpvw1znsumKow4tCuE,545
199
199
  ultralytics/nn/autobackend.py,sha256=WWHIFvCI47Wpe3NCDkoUg3esjOTJ0XGEzG3luA_uG-8,41063
200
- ultralytics/nn/tasks.py,sha256=2MnuL8plr4oE_gpSIeSbCYrbkdMXdludQWWj_liWsv8,70404
200
+ ultralytics/nn/tasks.py,sha256=M8l92qxDEi_-PqX2xbIrvMBi_5cSwr8wPod0BxJIZ4I,70416
201
201
  ultralytics/nn/text_model.py,sha256=pHqnKe8UueR1MuwJcIE_IvrnYIlt68QL796xjcRJs2A,15275
202
202
  ultralytics/nn/modules/__init__.py,sha256=BPMbEm1daI7Tuds3zph2_afAX7Gq1uAqK8BfiCfKTZs,3198
203
203
  ultralytics/nn/modules/activation.py,sha256=75JcIMH2Cu9GTC2Uf55r_5YLpxcrXQDaVoeGQ0hlUAU,2233
204
- ultralytics/nn/modules/block.py,sha256=nIIOTEuikiVWELuOt2VyfXPpvof9p4qNSdaQzq5WlCg,70618
204
+ ultralytics/nn/modules/block.py,sha256=-5RfsA_ljekL8_bQPGupSn9dVcZ8V_lVsOGlhzIW1kg,70622
205
205
  ultralytics/nn/modules/conv.py,sha256=U6P1ZuzQmIf09noKwp7syuWn-M98Tly2wMWOsDT3kOI,21457
206
206
  ultralytics/nn/modules/head.py,sha256=7-WuatR32jpuqR5IhwHuheAwAn_izX7e7cPOHEg7MmI,53556
207
207
  ultralytics/nn/modules/transformer.py,sha256=l6NuuFF7j_bogcNULHBBdj5l6sf7MwiVEGz8XcRyTUM,31366
@@ -240,7 +240,7 @@ ultralytics/utils/__init__.py,sha256=whSIuj-0lV0SAp4YjOeBJZ2emP1Qa8pqLnrhRiwl2Qs
240
240
  ultralytics/utils/autobatch.py,sha256=i6KYLLSItKP1Q2IUlTPHrZhjcxl7UOjs0Seb8bF8pvM,5124
241
241
  ultralytics/utils/autodevice.py,sha256=d9yq6eEn05fdfzfpxeSECd0YEO61er5f7T-0kjLdofg,8843
242
242
  ultralytics/utils/benchmarks.py,sha256=lcIr--oKK0TCjUVbvrm-NtYrnszrEMuHJC9__ziM7y8,31458
243
- ultralytics/utils/checks.py,sha256=Jw5pwREBnlyrq3zbiHEwiQXir2-f7dGpXeqY_PgoNpw,34518
243
+ ultralytics/utils/checks.py,sha256=Uigc10tev2z9pLjjdYwCYkQ4BrjKmurOX2nYd6liqvU,34510
244
244
  ultralytics/utils/cpu.py,sha256=OPlVxROWhQp-kEa9EkeNRKRQ-jz0KwySu5a-h91JZjk,3634
245
245
  ultralytics/utils/dist.py,sha256=g7OKPrSgjIB2wgcncSFYtFuR-uW6J0-Y1z76k4gDSz0,4170
246
246
  ultralytics/utils/downloads.py,sha256=JIlHfUg-qna5aOHRJupH7d5zob2qGZtRrs86Cp3zOJs,23029
@@ -252,13 +252,13 @@ ultralytics/utils/git.py,sha256=DcaxKNQfCiG3cxdzuw7M6l_VXgaSVqkERQt_vl8UyXM,5512
252
252
  ultralytics/utils/instance.py,sha256=_b_jMTECWJGzncCiTg7FtTDSSeXGnbiAhaJhIsqbn9k,19043
253
253
  ultralytics/utils/logger.py,sha256=o_vH4CCgQat6_Sbmwm1sUAJ4muAgVcsUed-WqpGNQZw,15129
254
254
  ultralytics/utils/loss.py,sha256=wJ0F2DpRTI9-e9adxIm2io0zcXRa0RTWFTOc7WmS1-A,39827
255
- ultralytics/utils/metrics.py,sha256=xFlSqx_su96LAUpxfGP7ShEG50Qo5p5OtwR3hx4_Llc,68809
256
- ultralytics/utils/nms.py,sha256=4EdGNSkl8-AjMkghnuPQZR0lsZOW416bYfVsA9ZUOeU,14323
255
+ ultralytics/utils/metrics.py,sha256=42zu-qeSvtL4JtvFDQy-7_5OJLwU4M8b5V8uRHBPFUQ,68829
256
+ ultralytics/utils/nms.py,sha256=AVOmPuUTEJqmq2J6rvjq-nHNxYIyabgzHdc41siyA0w,14161
257
257
  ultralytics/utils/ops.py,sha256=PW3fgw1d18CA2ZNQZVJqUy054cJ_9tIcxd1XnA0FPgU,26905
258
258
  ultralytics/utils/patches.py,sha256=0-2G4jXCIPnMonlft-cPcjfFcOXQS6ODwUDNUwanfg4,6541
259
- ultralytics/utils/plotting.py,sha256=rumZLvfLX1bE9xQS7Gk13kVM7AmIxQOmQ5CAmhsdxCE,47531
259
+ ultralytics/utils/plotting.py,sha256=7nnd6Idd8h5c-IUYBQkd-ESy0v_MEME5-s_nom60geU,46931
260
260
  ultralytics/utils/tal.py,sha256=LrziY_ZHz4wln3oOnqAzgyPaXKoup17Sa103BpuaQFU,20935
261
- ultralytics/utils/torch_utils.py,sha256=tEhRGVPaKKtVeDpN1K171up585DNe19un8y1ri70Zn8,42869
261
+ ultralytics/utils/torch_utils.py,sha256=sJe55d23vjnqte9nRipaJu6I9hdWRHdQqoUz8axEWOA,43072
262
262
  ultralytics/utils/tqdm.py,sha256=ny5RIg2OTkWQ7gdaXfYaoIgR0Xn2_hNGB6tUpO2Unns,16137
263
263
  ultralytics/utils/triton.py,sha256=fbMfTAUyoGiyslWtySzLZw53XmZJa7rF31CYFot0Wjs,5422
264
264
  ultralytics/utils/tuner.py,sha256=9D4dSIvwwxcNSJcH2QJ92qiIVi9zu-1L7_PBZ8okDyE,6816
@@ -274,9 +274,9 @@ ultralytics/utils/callbacks/platform.py,sha256=a7T_8htoBB0uX1WIc392UJnhDjxkRyQMv
274
274
  ultralytics/utils/callbacks/raytune.py,sha256=S6Bq16oQDQ8BQgnZzA0zJHGN_BBr8iAM_WtGoLiEcwg,1283
275
275
  ultralytics/utils/callbacks/tensorboard.py,sha256=_4nfGK1dDLn6ijpvphBDhc-AS8qhS3jjY2CAWB7SNF0,5283
276
276
  ultralytics/utils/callbacks/wb.py,sha256=ngQO8EJ1kxJDF1YajScVtzBbm26jGuejA0uWeOyvf5A,7685
277
- ultralytics-8.3.197.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
278
- ultralytics-8.3.197.dist-info/METADATA,sha256=UBxGQHTpx_vAFHAuScNN-uFzFLJdy1GSXOQV6wvLGjM,37667
279
- ultralytics-8.3.197.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
280
- ultralytics-8.3.197.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
281
- ultralytics-8.3.197.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
282
- ultralytics-8.3.197.dist-info/RECORD,,
277
+ ultralytics-8.3.198.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
278
+ ultralytics-8.3.198.dist-info/METADATA,sha256=JQoaMCWAlO3R5TSwu5c8r9ajR_TrH_vDhuxV6XMSR9c,37667
279
+ ultralytics-8.3.198.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
280
+ ultralytics-8.3.198.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
281
+ ultralytics-8.3.198.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
282
+ ultralytics-8.3.198.dist-info/RECORD,,