ultralytics 8.3.145__py3-none-any.whl → 8.3.147__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 (32) hide show
  1. tests/__init__.py +3 -0
  2. tests/test_cli.py +2 -7
  3. tests/test_python.py +55 -18
  4. ultralytics/__init__.py +1 -1
  5. ultralytics/cfg/__init__.py +0 -1
  6. ultralytics/cfg/datasets/coco8-grayscale.yaml +103 -0
  7. ultralytics/data/augment.py +2 -2
  8. ultralytics/engine/model.py +4 -4
  9. ultralytics/engine/validator.py +1 -1
  10. ultralytics/models/nas/model.py +0 -8
  11. ultralytics/models/yolo/classify/val.py +5 -9
  12. ultralytics/models/yolo/detect/val.py +8 -17
  13. ultralytics/models/yolo/obb/val.py +24 -17
  14. ultralytics/models/yolo/pose/val.py +19 -14
  15. ultralytics/models/yolo/segment/val.py +52 -44
  16. ultralytics/nn/tasks.py +3 -0
  17. ultralytics/solutions/analytics.py +17 -9
  18. ultralytics/solutions/object_counter.py +2 -4
  19. ultralytics/trackers/bot_sort.py +4 -2
  20. ultralytics/utils/__init__.py +2 -3
  21. ultralytics/utils/benchmarks.py +15 -15
  22. ultralytics/utils/checks.py +10 -5
  23. ultralytics/utils/downloads.py +1 -0
  24. ultralytics/utils/metrics.py +52 -33
  25. ultralytics/utils/plotting.py +10 -7
  26. ultralytics/utils/torch_utils.py +2 -2
  27. {ultralytics-8.3.145.dist-info → ultralytics-8.3.147.dist-info}/METADATA +1 -1
  28. {ultralytics-8.3.145.dist-info → ultralytics-8.3.147.dist-info}/RECORD +32 -31
  29. {ultralytics-8.3.145.dist-info → ultralytics-8.3.147.dist-info}/WHEEL +1 -1
  30. {ultralytics-8.3.145.dist-info → ultralytics-8.3.147.dist-info}/entry_points.txt +0 -0
  31. {ultralytics-8.3.145.dist-info → ultralytics-8.3.147.dist-info}/licenses/LICENSE +0 -0
  32. {ultralytics-8.3.145.dist-info → ultralytics-8.3.147.dist-info}/top_level.txt +0 -0
@@ -309,7 +309,7 @@ def smooth_bce(eps: float = 0.1) -> Tuple[float, float]:
309
309
  return 1.0 - 0.5 * eps, 0.5 * eps
310
310
 
311
311
 
312
- class ConfusionMatrix:
312
+ class ConfusionMatrix(DataExportMixin):
313
313
  """
314
314
  A class for calculating and updating a confusion matrix for object detection and classification tasks.
315
315
 
@@ -321,7 +321,7 @@ class ConfusionMatrix:
321
321
  iou_thres (float): The Intersection over Union threshold.
322
322
  """
323
323
 
324
- def __init__(self, nc: int, conf: float = 0.25, iou_thres: float = 0.45, task: str = "detect"):
324
+ def __init__(self, nc: int, conf: float = 0.25, iou_thres: float = 0.45, names: tuple = (), task: str = "detect"):
325
325
  """
326
326
  Initialize a ConfusionMatrix instance.
327
327
 
@@ -329,11 +329,13 @@ class ConfusionMatrix:
329
329
  nc (int): Number of classes.
330
330
  conf (float, optional): Confidence threshold for detections.
331
331
  iou_thres (float, optional): IoU threshold for matching detections to ground truth.
332
+ names (tuple, optional): Names of classes, used as labels on the plot.
332
333
  task (str, optional): Type of task, either 'detect' or 'classify'.
333
334
  """
334
335
  self.task = task
335
336
  self.matrix = np.zeros((nc + 1, nc + 1)) if self.task == "detect" else np.zeros((nc, nc))
336
337
  self.nc = nc # number of classes
338
+ self.names = list(names) # name of classes
337
339
  self.conf = 0.25 if conf in {None, 0.001} else conf # apply 0.25 if default val conf is passed
338
340
  self.iou_thres = iou_thres
339
341
 
@@ -426,14 +428,13 @@ class ConfusionMatrix:
426
428
 
427
429
  @TryExcept(msg="ConfusionMatrix plot failure")
428
430
  @plt_settings()
429
- def plot(self, normalize: bool = True, save_dir: str = "", names: tuple = (), on_plot=None):
431
+ def plot(self, normalize: bool = True, save_dir: str = "", on_plot=None):
430
432
  """
431
433
  Plot the confusion matrix using matplotlib and save it to a file.
432
434
 
433
435
  Args:
434
436
  normalize (bool, optional): Whether to normalize the confusion matrix.
435
437
  save_dir (str, optional): Directory where the plot will be saved.
436
- names (tuple, optional): Names of classes, used as labels on the plot.
437
438
  on_plot (callable, optional): An optional callback to pass plots path and data when they are rendered.
438
439
  """
439
440
  import matplotlib.pyplot as plt # scope for faster 'import ultralytics'
@@ -441,18 +442,17 @@ class ConfusionMatrix:
441
442
  array = self.matrix / ((self.matrix.sum(0).reshape(1, -1) + 1e-9) if normalize else 1) # normalize columns
442
443
  array[array < 0.005] = np.nan # don't annotate (would appear as 0.00)
443
444
 
444
- names = list(names)
445
445
  fig, ax = plt.subplots(1, 1, figsize=(12, 9))
446
446
  if self.nc >= 100: # downsample for large class count
447
447
  k = max(2, self.nc // 60) # step size for downsampling, always > 1
448
448
  keep_idx = slice(None, None, k) # create slice instead of array
449
- names = names[keep_idx] # slice class names
449
+ self.names = self.names[keep_idx] # slice class names
450
450
  array = array[keep_idx, :][:, keep_idx] # slice matrix rows and cols
451
451
  n = (self.nc + k - 1) // k # number of retained classes
452
452
  nc = nn = n if self.task == "classify" else n + 1 # adjust for background if needed
453
453
  else:
454
454
  nc = nn = self.nc if self.task == "classify" else self.nc + 1
455
- ticklabels = (names + ["background"]) if (0 < nn < 99) and (nn == nc) else "auto"
455
+ ticklabels = (self.names + ["background"]) if (0 < nn < 99) and (nn == nc) else "auto"
456
456
  xy_ticks = np.arange(len(ticklabels))
457
457
  tick_fontsize = max(6, 15 - 0.1 * nc) # Minimum size is 6
458
458
  label_fontsize = max(6, 12 - 0.1 * nc)
@@ -505,6 +505,26 @@ class ConfusionMatrix:
505
505
  for i in range(self.matrix.shape[0]):
506
506
  LOGGER.info(" ".join(map(str, self.matrix[i])))
507
507
 
508
+ def summary(self, **kwargs):
509
+ """Returns summary of the confusion matrix for export in different formats CSV, XML, HTML."""
510
+ import re
511
+
512
+ names = self.names if self.task == "classify" else self.names + ["background"]
513
+ clean_names, seen = [], set()
514
+ for name in names:
515
+ clean_name = re.sub(r"[^a-zA-Z0-9_]", "_", name)
516
+ original_clean = clean_name
517
+ counter = 1
518
+ while clean_name.lower() in seen:
519
+ clean_name = f"{original_clean}_{counter}"
520
+ counter += 1
521
+ seen.add(clean_name.lower())
522
+ clean_names.append(clean_name)
523
+ return [
524
+ dict({"Predicted": clean_names[i]}, **{clean_names[j]: self.matrix[i, j] for j in range(len(clean_names))})
525
+ for i in range(len(clean_names))
526
+ ]
527
+
508
528
 
509
529
  def smooth(y: np.ndarray, f: float = 0.05) -> np.ndarray:
510
530
  """Box filter of fraction f."""
@@ -520,7 +540,7 @@ def plot_pr_curve(
520
540
  py: np.ndarray,
521
541
  ap: np.ndarray,
522
542
  save_dir: Path = Path("pr_curve.png"),
523
- names: dict = {},
543
+ names: Dict[int, str] = {},
524
544
  on_plot=None,
525
545
  ):
526
546
  """
@@ -531,7 +551,7 @@ def plot_pr_curve(
531
551
  py (np.ndarray): Y values for the PR curve.
532
552
  ap (np.ndarray): Average precision values.
533
553
  save_dir (Path, optional): Path to save the plot.
534
- names (dict, optional): Dictionary mapping class indices to class names.
554
+ names (Dict[int, str], optional): Dictionary mapping class indices to class names.
535
555
  on_plot (callable, optional): Function to call after plot is saved.
536
556
  """
537
557
  import matplotlib.pyplot as plt # scope for faster 'import ultralytics'
@@ -563,7 +583,7 @@ def plot_mc_curve(
563
583
  px: np.ndarray,
564
584
  py: np.ndarray,
565
585
  save_dir: Path = Path("mc_curve.png"),
566
- names: dict = {},
586
+ names: Dict[int, str] = {},
567
587
  xlabel: str = "Confidence",
568
588
  ylabel: str = "Metric",
569
589
  on_plot=None,
@@ -575,7 +595,7 @@ def plot_mc_curve(
575
595
  px (np.ndarray): X values for the metric-confidence curve.
576
596
  py (np.ndarray): Y values for the metric-confidence curve.
577
597
  save_dir (Path, optional): Path to save the plot.
578
- names (dict, optional): Dictionary mapping class indices to class names.
598
+ names (Dict[int, str], optional): Dictionary mapping class indices to class names.
579
599
  xlabel (str, optional): X-axis label.
580
600
  ylabel (str, optional): Y-axis label.
581
601
  on_plot (callable, optional): Function to call after plot is saved.
@@ -645,7 +665,7 @@ def ap_per_class(
645
665
  plot: bool = False,
646
666
  on_plot=None,
647
667
  save_dir: Path = Path(),
648
- names: dict = {},
668
+ names: Dict[int, str] = {},
649
669
  eps: float = 1e-16,
650
670
  prefix: str = "",
651
671
  ) -> Tuple:
@@ -660,7 +680,7 @@ def ap_per_class(
660
680
  plot (bool, optional): Whether to plot PR curves or not.
661
681
  on_plot (callable, optional): A callback to pass plots path and data when they are rendered.
662
682
  save_dir (Path, optional): Directory to save the PR curves.
663
- names (dict, optional): Dict of class names to plot PR curves.
683
+ names (Dict[int, str], optional): Dictionary of class names to plot PR curves.
664
684
  eps (float, optional): A small value to avoid division by zero.
665
685
  prefix (str, optional): A prefix string for saving the plot files.
666
686
 
@@ -720,8 +740,7 @@ def ap_per_class(
720
740
 
721
741
  # Compute F1 (harmonic mean of precision and recall)
722
742
  f1_curve = 2 * p_curve * r_curve / (p_curve + r_curve + eps)
723
- names = [v for k, v in names.items() if k in unique_classes] # list: only classes that have data
724
- names = dict(enumerate(names)) # to dict
743
+ names = {i: names[k] for i, k in enumerate(unique_classes) if k in names} # dict: only classes that have data
725
744
  if plot:
726
745
  plot_pr_curve(x, prec_values, ap, save_dir / f"{prefix}PR_curve.png", names, on_plot=on_plot)
727
746
  plot_mc_curve(x, f1_curve, save_dir / f"{prefix}F1_curve.png", names, ylabel="F1", on_plot=on_plot)
@@ -915,20 +934,20 @@ class DetMetrics(SimpleClass, DataExportMixin):
915
934
  Attributes:
916
935
  save_dir (Path): A path to the directory where the output plots will be saved.
917
936
  plot (bool): A flag that indicates whether to plot precision-recall curves for each class.
918
- names (dict): A dictionary of class names.
937
+ names (Dict[int, str]): A dictionary of class names.
919
938
  box (Metric): An instance of the Metric class for storing detection results.
920
- speed (dict): A dictionary for storing execution times of different parts of the detection process.
939
+ speed (Dict[str, float]): A dictionary for storing execution times of different parts of the detection process.
921
940
  task (str): The task type, set to 'detect'.
922
941
  """
923
942
 
924
- def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: dict = {}) -> None:
943
+ def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: Dict[int, str] = {}) -> None:
925
944
  """
926
945
  Initialize a DetMetrics instance with a save directory, plot flag, and class names.
927
946
 
928
947
  Args:
929
948
  save_dir (Path, optional): Directory to save plots.
930
949
  plot (bool, optional): Whether to plot precision-recall curves.
931
- names (dict, optional): Dictionary mapping class indices to names.
950
+ names (Dict[int, str], optional): Dictionary of class names.
932
951
  """
933
952
  self.save_dir = save_dir
934
953
  self.plot = plot
@@ -1033,21 +1052,21 @@ class SegmentMetrics(SimpleClass, DataExportMixin):
1033
1052
  Attributes:
1034
1053
  save_dir (Path): Path to the directory where the output plots should be saved.
1035
1054
  plot (bool): Whether to save the detection and segmentation plots.
1036
- names (dict): Dictionary of class names.
1037
- box (Metric): An instance of the Metric class to calculate box detection metrics.
1055
+ names (Dict[int, str]): Dictionary of class names.
1056
+ box (Metric): An instance of the Metric class for storing detection results.
1038
1057
  seg (Metric): An instance of the Metric class to calculate mask segmentation metrics.
1039
- speed (dict): Dictionary to store the time taken in different phases of inference.
1058
+ speed (Dict[str, float]): A dictionary for storing execution times of different parts of the detection process.
1040
1059
  task (str): The task type, set to 'segment'.
1041
1060
  """
1042
1061
 
1043
- def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: tuple = ()) -> None:
1062
+ def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: Dict[int, str] = {}) -> None:
1044
1063
  """
1045
1064
  Initialize a SegmentMetrics instance with a save directory, plot flag, and class names.
1046
1065
 
1047
1066
  Args:
1048
1067
  save_dir (Path, optional): Directory to save plots.
1049
1068
  plot (bool, optional): Whether to plot precision-recall curves.
1050
- names (tuple, optional): Tuple mapping class indices to names.
1069
+ names (Dict[int, str], optional): Dictionary of class names.
1051
1070
  """
1052
1071
  self.save_dir = save_dir
1053
1072
  self.plot = plot
@@ -1196,10 +1215,10 @@ class PoseMetrics(SegmentMetrics):
1196
1215
  Attributes:
1197
1216
  save_dir (Path): Path to the directory where the output plots should be saved.
1198
1217
  plot (bool): Whether to save the detection and pose plots.
1199
- names (dict): Dictionary of class names.
1200
- box (Metric): An instance of the Metric class to calculate box detection metrics.
1218
+ names (Dict[int, str]): Dictionary of class names.
1201
1219
  pose (Metric): An instance of the Metric class to calculate pose metrics.
1202
- speed (dict): Dictionary to store the time taken in different phases of inference.
1220
+ box (Metric): An instance of the Metric class for storing detection results.
1221
+ speed (Dict[str, float]): A dictionary for storing execution times of different parts of the detection process.
1203
1222
  task (str): The task type, set to 'pose'.
1204
1223
 
1205
1224
  Methods:
@@ -1212,14 +1231,14 @@ class PoseMetrics(SegmentMetrics):
1212
1231
  results_dict: Return the dictionary containing all the detection and segmentation metrics and fitness score.
1213
1232
  """
1214
1233
 
1215
- def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: tuple = ()) -> None:
1234
+ def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: Dict[int, str] = {}) -> None:
1216
1235
  """
1217
1236
  Initialize the PoseMetrics class with directory path, class names, and plotting options.
1218
1237
 
1219
1238
  Args:
1220
1239
  save_dir (Path, optional): Directory to save plots.
1221
1240
  plot (bool, optional): Whether to plot precision-recall curves.
1222
- names (tuple, optional): Tuple mapping class indices to names.
1241
+ names (Dict[int, str], optional): Dictionary of class names.
1223
1242
  """
1224
1243
  super().__init__(save_dir, plot, names)
1225
1244
  self.save_dir = save_dir
@@ -1420,23 +1439,23 @@ class OBBMetrics(SimpleClass, DataExportMixin):
1420
1439
  Attributes:
1421
1440
  save_dir (Path): Path to the directory where the output plots should be saved.
1422
1441
  plot (bool): Whether to save the detection plots.
1423
- names (dict): Dictionary of class names.
1442
+ names (Dict[int, str]): Dictionary of class names.
1424
1443
  box (Metric): An instance of the Metric class for storing detection results.
1425
- speed (dict): A dictionary for storing execution times of different parts of the detection process.
1444
+ speed (Dict[str, float]): A dictionary for storing execution times of different parts of the detection process.
1426
1445
  task (str): The task type, set to 'obb'.
1427
1446
 
1428
1447
  References:
1429
1448
  https://arxiv.org/pdf/2106.06072.pdf
1430
1449
  """
1431
1450
 
1432
- def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: tuple = ()) -> None:
1451
+ def __init__(self, save_dir: Path = Path("."), plot: bool = False, names: Dict[int, str] = {}) -> None:
1433
1452
  """
1434
1453
  Initialize an OBBMetrics instance with directory, plotting, and class names.
1435
1454
 
1436
1455
  Args:
1437
1456
  save_dir (Path, optional): Directory to save plots.
1438
1457
  plot (bool, optional): Whether to plot precision-recall curves.
1439
- names (tuple, optional): Tuple mapping class indices to names.
1458
+ names (Dict[int, str], optional): Dictionary of class names.
1440
1459
  """
1441
1460
  self.save_dir = save_dir
1442
1461
  self.plot = plot
@@ -201,6 +201,11 @@ class Annotator:
201
201
  input_is_pil = isinstance(im, Image.Image)
202
202
  self.pil = pil or non_ascii or input_is_pil
203
203
  self.lw = line_width or max(round(sum(im.size if input_is_pil else im.shape) / 2 * 0.003), 2)
204
+ if not input_is_pil:
205
+ if im.shape[2] == 1: # handle grayscale
206
+ im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
207
+ elif im.shape[2] > 3: # multispectral
208
+ im = np.ascontiguousarray(im[..., :3])
204
209
  if self.pil: # use PIL
205
210
  self.im = im if input_is_pil else Image.fromarray(im)
206
211
  if self.im.mode not in {"RGB", "RGBA"}: # multispectral
@@ -216,10 +221,6 @@ class Annotator:
216
221
  if check_version(pil_version, "9.2.0"):
217
222
  self.font.getsize = lambda x: self.font.getbbox(x)[2:4] # text width, height
218
223
  else: # use cv2
219
- if im.shape[2] == 1: # handle grayscale
220
- im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
221
- elif im.shape[2] > 3: # multispectral
222
- im = np.ascontiguousarray(im[..., :3])
223
224
  assert im.data.contiguous, "Image not contiguous. Apply np.ascontiguousarray(im) to Annotator input images."
224
225
  self.im = im if im.flags.writeable else im.copy()
225
226
  self.tf = max(self.lw - 1, 1) # font thickness
@@ -644,7 +645,7 @@ def save_one_box(
644
645
  gain (float, optional): A multiplicative factor to increase the size of the bounding box.
645
646
  pad (int, optional): The number of pixels to add to the width and height of the bounding box.
646
647
  square (bool, optional): If True, the bounding box will be transformed into a square.
647
- BGR (bool, optional): If True, the image will be saved in BGR format, otherwise in RGB.
648
+ BGR (bool, optional): If True, the image will be returned in BGR format, otherwise in RGB.
648
649
  save (bool, optional): If True, the cropped image will be saved to disk.
649
650
 
650
651
  Returns:
@@ -664,12 +665,14 @@ def save_one_box(
664
665
  b[:, 2:] = b[:, 2:] * gain + pad # box wh * gain + pad
665
666
  xyxy = ops.xywh2xyxy(b).long()
666
667
  xyxy = ops.clip_boxes(xyxy, im.shape)
667
- crop = im[int(xyxy[0, 1]) : int(xyxy[0, 3]), int(xyxy[0, 0]) : int(xyxy[0, 2]), :: (1 if BGR else -1)]
668
+ grayscale = im.shape[2] == 1 # grayscale image
669
+ crop = im[int(xyxy[0, 1]) : int(xyxy[0, 3]), int(xyxy[0, 0]) : int(xyxy[0, 2]), :: (1 if BGR or grayscale else -1)]
668
670
  if save:
669
671
  file.parent.mkdir(parents=True, exist_ok=True) # make directory
670
672
  f = str(increment_path(file).with_suffix(".jpg"))
671
673
  # cv2.imwrite(f, crop) # save BGR, https://github.com/ultralytics/yolov5/issues/7007 chroma subsampling issue
672
- Image.fromarray(crop[..., ::-1]).save(f, quality=95, subsampling=0) # save RGB
674
+ crop = crop.squeeze(-1) if grayscale else crop[..., ::-1] if BGR else crop
675
+ Image.fromarray(crop).save(f, quality=95, subsampling=0) # save RGB
673
676
  return crop
674
677
 
675
678
 
@@ -10,7 +10,7 @@ from contextlib import contextmanager
10
10
  from copy import deepcopy
11
11
  from datetime import datetime
12
12
  from pathlib import Path
13
- from typing import Union
13
+ from typing import Any, Dict, Union
14
14
 
15
15
  import numpy as np
16
16
  import torch
@@ -704,7 +704,7 @@ class ModelEMA:
704
704
  copy_attr(self.ema, model, include, exclude)
705
705
 
706
706
 
707
- def strip_optimizer(f: Union[str, Path] = "best.pt", s: str = "", updates: dict = None) -> dict:
707
+ def strip_optimizer(f: Union[str, Path] = "best.pt", s: str = "", updates: Dict[str, Any] = None) -> Dict[str, Any]:
708
708
  """
709
709
  Strip optimizer from 'f' to finalize training, optionally save as 's'.
710
710
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.145
3
+ Version: 8.3.147
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,16 +1,16 @@
1
- tests/__init__.py,sha256=xnMhv3O_DF1YrW4zk__ZywQzAaoTDjPKPoiI1Ktss1w,670
1
+ tests/__init__.py,sha256=b4KP5_q-2IO8Br8YHOSLYnn7IwZS81l_vfEF2YPa2lM,894
2
2
  tests/conftest.py,sha256=JjgKSs36ZaGmmtqGmAapmFSoFF1YwyV3IZsOgqt2IVM,2593
3
- tests/test_cli.py,sha256=T0HWw0aws8WFlrdVl1NnUnQKROQCRGbjR010iYUN1Sw,5852
3
+ tests/test_cli.py,sha256=Kpfxq_RlbKK1Z8xNScDUbre6GB7neZhXZAYGI1tiDS8,5660
4
4
  tests/test_cuda.py,sha256=-nQsfF3lGfqLm6cIeu_BCiXqLj7HzpL7R1GzPEc6z2I,8128
5
5
  tests/test_engine.py,sha256=Jpt2KVrltrEgh2-3Ykouz-2Z_2fza0eymL5ectRXadM,4922
6
6
  tests/test_exports.py,sha256=HmMKOTCia9ZDC0VYc_EPmvBTM5LM5eeI1NF_pKjLpd8,9677
7
7
  tests/test_integrations.py,sha256=cQfgueFhEZ8Xs-tF0uiIEhvn0DlhOH-Wqrx96LXp3D0,6303
8
- tests/test_python.py,sha256=Zx9OlPN11_D1WSLpi9nPFqORNHNz0lEn6mxVNL2ZHjE,25852
8
+ tests/test_python.py,sha256=_7xc7mqQxw3OsLhAdx-P85u9sqkfIXVhIloxmhBXph4,27800
9
9
  tests/test_solutions.py,sha256=tuf6n_fsI8KvSdJrnc-cqP2qYdiYqCWuVrx0z9dOz3Q,13213
10
- ultralytics/__init__.py,sha256=u3QffN3nHEJosKs8D2yFToSRrI9sa77PqqJoQ1T2Fms,730
10
+ ultralytics/__init__.py,sha256=W3mbuR6Ig3pjncyYQLi3jsgDcXLijQ3MQEDEvaRagQ8,730
11
11
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
12
12
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
13
- ultralytics/cfg/__init__.py,sha256=a2jQYIUoTwYRNUddLWE_TWxD7LQOczveM_BV7qVbork,39655
13
+ ultralytics/cfg/__init__.py,sha256=H19EalaxuIa44J_nVBrNxMj8EAPmlZl3ecbX0-xK8y8,39600
14
14
  ultralytics/cfg/default.yaml,sha256=oFG6llJO-Py5H-cR9qs-7FieJamroDLwpbrkhmfROOM,8307
15
15
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=_xlEDIJ9XkUo0v_iNL7FW079BoSeZtKSuLteKTtGbA8,3275
16
16
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=SHND_CFkojxw5iQD5Mcgju2kCZIl0gW2ajuzv1cqoL0,1224
@@ -29,6 +29,7 @@ ultralytics/cfg/datasets/coco-pose.yaml,sha256=NHdgSsGkHS0-X636p2-hExTJGdoWUSP1T
29
29
  ultralytics/cfg/datasets/coco.yaml,sha256=chdzyIHLfekjOcng-G2_bpC57VUcHPjVvW8ENJfiQao,2619
30
30
  ultralytics/cfg/datasets/coco128-seg.yaml,sha256=ifDPbVuuN7N2_3e8e_YBdTVcANYIOKORQMgXlsPS6D4,1995
31
31
  ultralytics/cfg/datasets/coco128.yaml,sha256=udymG6qzF9Bvh_JYC7BOSXOUeA1Ia8ZmR2EzNGsY6YY,1978
32
+ ultralytics/cfg/datasets/coco8-grayscale.yaml,sha256=U3jjPUoFahLch4N11qjG1myhE5wsy2tFeC23I9w_nr0,1974
32
33
  ultralytics/cfg/datasets/coco8-multispectral.yaml,sha256=h5Kbx9y3wjWUw6p8jeQVUaIs07VoQS7ZY0vMau5WGAg,2076
33
34
  ultralytics/cfg/datasets/coco8-pose.yaml,sha256=yfw2_SkCZO3ttPLiI0mfjxv5gr4-CA3i0elYP5PY71k,1022
34
35
  ultralytics/cfg/datasets/coco8-seg.yaml,sha256=wpfFI-GfL5asbLtFyaHLE6593jdka7waE07Am3_eg8w,1926
@@ -104,7 +105,7 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=TpRaK5kH_-QbjCQ7ekM4s_7j8I8ti3q8Hs7
104
105
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypgv26LGCtPDg,886
105
106
  ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
106
107
  ultralytics/data/annotator.py,sha256=uAgd7K-yudxiwdNqHz0ubfFg5JsfNlae4cgxdvCMyuY,3030
107
- ultralytics/data/augment.py,sha256=ekdWksi157TlYh1D27axnEPRqFYonQ11TpJmCv0fbZQ,128933
108
+ ultralytics/data/augment.py,sha256=fvYug6B0qrSSS8IYpvdju9uENnEJWCf-GNG5WqIayng,128964
108
109
  ultralytics/data/base.py,sha256=mRcuehK1thNuuzQGL6D1AaZkod71oHRdYTod_zdQZQg,19688
109
110
  ultralytics/data/build.py,sha256=Djz6stD1FXmFhnoUJp-MKp7geu-k3xhnvt9kfXFKGhI,11020
110
111
  ultralytics/data/converter.py,sha256=oKW8ODtvFOKBx9Un8n87xUUm3b5GStU4ViIBH5UDylM,27200
@@ -119,12 +120,12 @@ ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz
119
120
  ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
120
121
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
121
122
  ultralytics/engine/exporter.py,sha256=Ug0HvQSseQA9k4jb_CUGXKPg9w082W1cocwPxxtXgkM,73902
122
- ultralytics/engine/model.py,sha256=hJNeSemchlecsyxd_Fuj-351z0AJIhOE4GN3W0tJGU8,53300
123
+ ultralytics/engine/model.py,sha256=0Yslj0TPWi25CELtVQs1dRzJyJAw9-tWTlDbC6kJ0pA,53310
123
124
  ultralytics/engine/predictor.py,sha256=30fBpuwOuNT3hr8bju4coeOr-jqU_8hDYESugmowLBE,22151
124
125
  ultralytics/engine/results.py,sha256=Mb8pBTOrBtQh0PQtGVbhRZ_C1VyqYFumjLggiKCRIJs,72295
125
126
  ultralytics/engine/trainer.py,sha256=zZ2Lm7VJOlBX-Ya52ec3n3IlSn9_yM5fbsRIWGeGOyo,39556
126
127
  ultralytics/engine/tuner.py,sha256=4ue7JbMFQp7JcWhhwCAY-b-xZsjm5VKVlPFDUTyxt_8,12789
127
- ultralytics/engine/validator.py,sha256=MMxH1TMKN32Y8MHaN4XOofQ1RkXNm867oM63eVtOtZA,16970
128
+ ultralytics/engine/validator.py,sha256=2YEdIn2DpPdUPjwDJDR0d0DU8BiwFmh2_502xDPGwMo,16953
128
129
  ultralytics/hub/__init__.py,sha256=ulPtceI3hqud03mvqoXccBaa1e4nveYwC9cddyuBUlo,6599
129
130
  ultralytics/hub/auth.py,sha256=5uMPzZt8aO-YsnEWADzc1qBUt9c30RTIfrGo5SWTrv4,6271
130
131
  ultralytics/hub/session.py,sha256=UeUSRbdclSBPJQfpSNGeY13gb1O2Bhzh0Aj7cXum6P4,18518
@@ -137,7 +138,7 @@ ultralytics/models/fastsam/predict.py,sha256=G-o8hs8W5XmqSN5G37zi6q9FglFnZSbD6qH
137
138
  ultralytics/models/fastsam/utils.py,sha256=yuCXB4CVjRx8lDf61DP8B6qMx7TVf7AynQvdWREeFco,884
138
139
  ultralytics/models/fastsam/val.py,sha256=hDGCcQl04GA8ldDlRHUN3fri_N2Aev3Vu7-r3BftmvE,2335
139
140
  ultralytics/models/nas/__init__.py,sha256=wybeHZuAXMNeXMjKTbK55FZmXJkA4K9IozDeFM9OB-s,207
140
- ultralytics/models/nas/model.py,sha256=519WcZr3Ac9syWIEKJFwvmGdSktpTUsakMX6MSkJBG4,4001
141
+ ultralytics/models/nas/model.py,sha256=kQeF3mkVHLLsoTL9F32CrYITNsdbTrYF6lEgHclhKN0,3824
141
142
  ultralytics/models/nas/predict.py,sha256=J4UT7nwi_h63lJ3a_gYac-Ws8wFYingZINxMqSoaX5E,2706
142
143
  ultralytics/models/nas/val.py,sha256=QUTE3zuhJLVqmDGd2n7iSSk7X6jKZCRxufFkBbyxYYo,1548
143
144
  ultralytics/models/rtdetr/__init__.py,sha256=_jEHmOjI_QP_nT3XJXLgYHQ6bXG4EL8Gnvn1y_eev1g,225
@@ -167,23 +168,23 @@ ultralytics/models/yolo/model.py,sha256=C0wInQC6rFuFOGpdAen1s2e5LIFDmqevto8uPbpm
167
168
  ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
168
169
  ultralytics/models/yolo/classify/predict.py,sha256=_GiN6muuZOBrMS1KER85FE4ktcw_Onn1bZdGvpbsGCE,4618
169
170
  ultralytics/models/yolo/classify/train.py,sha256=jXErkxnsC3pBFQBrFxObF8BJyqkckcw3C_qHMSWZrsY,10312
170
- ultralytics/models/yolo/classify/val.py,sha256=Oj-ZbEfxyWK7QXvndouLLR3bMwXPKXLB6rA9hAMztsM,9858
171
+ ultralytics/models/yolo/classify/val.py,sha256=6YbsbqJA2J6Aw1kyOWj4eGGD0_--23G1Cz5p8lmYFLo,9705
171
172
  ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
172
173
  ultralytics/models/yolo/detect/predict.py,sha256=ySUsdIf8dw00bzWhcxN1jZwLWKPRT2M7-N7TNL3o4zo,5387
173
174
  ultralytics/models/yolo/detect/train.py,sha256=qCWz0nvU-pQofa-_F7UhUoLQe-U1ExW0mvE5ZHnav4o,9818
174
- ultralytics/models/yolo/detect/val.py,sha256=Gt4St8giPAA-UkIf9THwRowS1yGgvBUgrCURBZ9jvkI,19302
175
+ ultralytics/models/yolo/detect/val.py,sha256=pb9CzA8qGWGjQnp4EsoK0rlQq0rmIBppCuobNJL7QSc,19126
175
176
  ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
176
177
  ultralytics/models/yolo/obb/predict.py,sha256=4r1eSld6TNJlk9JG56e-DX6oPL8uBBqiuztyBpxWlHE,2888
177
178
  ultralytics/models/yolo/obb/train.py,sha256=bnYFAMur7Uvbw5Dc09-S2ge7B05iGX-t37Ksgc0ef6g,3921
178
- ultralytics/models/yolo/obb/val.py,sha256=se796OoYtIdlrlnnEoqE266D0_WvMPjZiXwvMU8MwQ4,14090
179
+ ultralytics/models/yolo/obb/val.py,sha256=pizYmRUkSlglQnNjZi0DeZehCJE9y5CmYjs_tGLDta4,14394
179
180
  ultralytics/models/yolo/pose/__init__.py,sha256=63xmuHZLNzV8I76HhVXAq4f2W0KTk8Oi9eL-Y204LyQ,227
180
181
  ultralytics/models/yolo/pose/predict.py,sha256=oePbV_IVRt0xPcTiycFAIixiX7bScth0d1uOOtdeErU,3773
181
182
  ultralytics/models/yolo/pose/train.py,sha256=6i1EQx-f112skBBBhCk6JIRKLjCoTEqw2ECJrc53Ku8,6862
182
- ultralytics/models/yolo/pose/val.py,sha256=27NZr_Pe4eq2N1-JYe7n33q3AU31XvIOddQQrD4D3cg,19371
183
+ ultralytics/models/yolo/pose/val.py,sha256=2QPhqVr90Aww2RKxuK36kGh_m3vbvWdMDhBDCb8Ho6M,19598
183
184
  ultralytics/models/yolo/segment/__init__.py,sha256=3IThhZ1wlkY9FvmWm9cE-5-ZyE6F1FgzAtQ6jOOFzzw,275
184
185
  ultralytics/models/yolo/segment/predict.py,sha256=qlprQCZn4_bpjpI08U0MU9Q9_1gpHrw_7MXwtXE1l1Y,5377
185
186
  ultralytics/models/yolo/segment/train.py,sha256=026mRDOIjJ0ctMQQ2N9hRP6E5oLj2meGKO46u_MzrDk,5523
186
- ultralytics/models/yolo/segment/val.py,sha256=t9S5daw9DvRIEDoLL35EsWCoEnCj8_1i6G4Pai1GjgQ,18416
187
+ ultralytics/models/yolo/segment/val.py,sha256=KMB63KwqWF06mEwBgB7PqNdDy0qSzc0tYKPEvC1ykCg,19020
187
188
  ultralytics/models/yolo/world/__init__.py,sha256=nlh8I6t8hMGz_vZg8QSlsUW1R-2eKvn9CGUoPPQEGhA,131
188
189
  ultralytics/models/yolo/world/train.py,sha256=94_hgCluzsv39JkBVDmR2gjuycYjeJC8wVrCfrjpENk,7806
189
190
  ultralytics/models/yolo/world/train_world.py,sha256=YJm37ZTgr0CoE_sYrjxN45w9mICr2RMWfWZrriiHqbM,9022
@@ -194,7 +195,7 @@ ultralytics/models/yolo/yoloe/train_seg.py,sha256=aCV7M8oQOvODFnU4piZdJh3tIrBJYA
194
195
  ultralytics/models/yolo/yoloe/val.py,sha256=Y0oCiqGvj8LHLrvnfPPUADSj_zNp68BVdpgcER4999E,9736
195
196
  ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
196
197
  ultralytics/nn/autobackend.py,sha256=uTOQyQ4v0_IZvvqAHnDsAxJv3QKe9-L2ozsZWSlZpPU,41287
197
- ultralytics/nn/tasks.py,sha256=lpFTLOd5EWII9m9v0QkNQx_73JIl0ge9nquvOMaCu4g,71923
198
+ ultralytics/nn/tasks.py,sha256=an91NTeEDnO1JKVcAYnN-xNpfYsUsAZncUVrFG6jLJg,72164
198
199
  ultralytics/nn/text_model.py,sha256=m4jDB5bzOLOS8XNmFi9oQk-skzRHiIpJy4K-_SIARR0,13498
199
200
  ultralytics/nn/modules/__init__.py,sha256=2nY0X69Z5DD5SWt6v3CUTZa5gXSzC9TQr3VTVqhyGho,3158
200
201
  ultralytics/nn/modules/activation.py,sha256=75JcIMH2Cu9GTC2Uf55r_5YLpxcrXQDaVoeGQ0hlUAU,2233
@@ -205,13 +206,13 @@ ultralytics/nn/modules/transformer.py,sha256=PW5-6gzOP3_rZ_uAkmxvI42nU5bkrgbgLKC
205
206
  ultralytics/nn/modules/utils.py,sha256=rn8yTObZGkQoqVzjbZWLaHiytppG4ffjMME4Lw60glM,6092
206
207
  ultralytics/solutions/__init__.py,sha256=ZoeAQavTLp8aClnhZ9tbl6lxy86GxofyGvZWTx2aWkI,1209
207
208
  ultralytics/solutions/ai_gym.py,sha256=A8vzdjTqOF2mFAiiy7zu3f8lzwqLJ07dk5aqZ8p-x_w,5256
208
- ultralytics/solutions/analytics.py,sha256=e_uD6lVFdpVrpxSZzAt_zLh5GnoKpSDDZF16uz3nS0U,12252
209
+ ultralytics/solutions/analytics.py,sha256=IfYlXV4vufpaOZz9h8cT1Vx9RjsqQYTCB7SbDlR0zv0,12784
209
210
  ultralytics/solutions/config.py,sha256=1HZvgWPt7duDxqAaOTyu4-TOBeRJeWx5EQgUwnyyO50,5394
210
211
  ultralytics/solutions/distance_calculation.py,sha256=e2Xa7dVOqiuk43JNakoxQlX48evEgZiEtxdtHTdlAsk,5931
211
212
  ultralytics/solutions/heatmap.py,sha256=IVnTOyIbxKrhmnzGbkncIqPakPHeJe4nrwQkOPJ00wY,5421
212
213
  ultralytics/solutions/instance_segmentation.py,sha256=HBWkCwmRa0jk84q4fhANzGpyirAtiCkAKRt0j9ED_Cw,3739
213
214
  ultralytics/solutions/object_blurrer.py,sha256=UVd9EGpyb_fJXFnPg3lbnhWxY1ntHVWmIJ2ragbZ6eY,3942
214
- ultralytics/solutions/object_counter.py,sha256=8wLAGv3DYFHvVgGGaEVaYj2WtdCSspuxInX-T78rwLs,9505
215
+ ultralytics/solutions/object_counter.py,sha256=1iPJW_59iIw8DZedYdjw7HIQINpQtEBCd190g6TosNA,9353
215
216
  ultralytics/solutions/object_cropper.py,sha256=SVB9fflB7-juZWUARpi-kndSZDVI-oXjHg4WUnOuA9A,3470
216
217
  ultralytics/solutions/parking_management.py,sha256=IHWK48DZa6PwaOKUu3XTJAZCxF6WtTlCno7N8W6VR4k,13481
217
218
  ultralytics/solutions/queue_management.py,sha256=_K6ugLMDfpp37S-LFV36K3QXf3vqjfxji8BPP_-6iqc,4337
@@ -226,31 +227,31 @@ ultralytics/solutions/vision_eye.py,sha256=LCb-2YPVvEks9e7xqZtNGftpAXNaZhEUb5yb3
226
227
  ultralytics/solutions/templates/similarity-search.html,sha256=DPoAO-1H-KXNt_T8mGtSCsYUEi_5Nrx01p0cZfX-E8Q,3790
227
228
  ultralytics/trackers/__init__.py,sha256=Zlu_Ig5osn7hqch_g5Be_e4pwZUkeeTQiesJCi0pFGI,255
228
229
  ultralytics/trackers/basetrack.py,sha256=-skBFFatzgJFAPN9Frm1u1h_RDUg3WOlxG6eHQxp2Gw,4384
229
- ultralytics/trackers/bot_sort.py,sha256=Nkf4LVaCr7qaTQUOBwv9XEmKz8xenkGMuuKFD9mJQBE,12096
230
+ ultralytics/trackers/bot_sort.py,sha256=knP5oo1LC45Lrato8LpcY_j4KBojQFP1lxT_NJxhEUo,12134
230
231
  ultralytics/trackers/byte_tracker.py,sha256=CNS10VOGPtXXEimi0TaO88TAIcOBgo8ALF9H79iK_uQ,21633
231
232
  ultralytics/trackers/track.py,sha256=EmYi42ujLP3_CKuS6CmO_9dw8Ekg7-0WWJQeYfQucv0,4804
232
233
  ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
233
234
  ultralytics/trackers/utils/gmc.py,sha256=9IvCf5MhBYY9ppVHykN02_oBWHmE98R8EaYFKaykdV0,14032
234
235
  ultralytics/trackers/utils/kalman_filter.py,sha256=PPmM0lwBMdT_hGojvfLoUsBUFMBBMNRAxKbMcQa3wJ0,21619
235
236
  ultralytics/trackers/utils/matching.py,sha256=uSYtywqi1lE_uNN1FwuBFPyISfDQXHMu8K5KH69nrRI,7160
236
- ultralytics/utils/__init__.py,sha256=Z2-2V5jKe4psJ1IH8FwPK2U-2f40m4iKa3YJN7kBqx8,59563
237
+ ultralytics/utils/__init__.py,sha256=GYsojWuYvvSCKhUtQhzv-HmLjfUJrqZXqvu8bw7HbeU,59523
237
238
  ultralytics/utils/autobatch.py,sha256=33m8YgggLIhltDqMXZ5OE-FGs2QiHrl2-LfgY1mI4cw,5119
238
239
  ultralytics/utils/autodevice.py,sha256=AvgXFt8c1Cg4icKh0Hbhhz8UmVQ2Wjyfdfkeb2C8zck,8855
239
- ultralytics/utils/benchmarks.py,sha256=YYsSSQfoe1HzHLEz-OR2z3XcrcMlFG_hef6kvaS3fwQ,30886
240
- ultralytics/utils/checks.py,sha256=qykHykHYl5ceWX3EYW06qRpIQw1HB2JgIvbFBFrXWns,33762
240
+ ultralytics/utils/benchmarks.py,sha256=14jidnH74g_ZCChuJF5qUnQ2YugX5amGTjea9__RlJ4,30836
241
+ ultralytics/utils/checks.py,sha256=PPVmxfxoHuC4YR7i56uklCKXFAPnltzbHHCxUwERjUQ,34100
241
242
  ultralytics/utils/dist.py,sha256=A9lDGtGefTjSVvVS38w86GOdbtLzNBDZuDGK0MT4PRI,4170
242
- ultralytics/utils/downloads.py,sha256=aKbQJVJqRFSpLXPWW8bZXNmAA19naa-SMGH8hiSA_38,22048
243
+ ultralytics/utils/downloads.py,sha256=YB6rJkcRGQfklUjZqi9dOkTiZaDSqbkGyZEFcZLQkgc,22080
243
244
  ultralytics/utils/errors.py,sha256=XT9Ru7ivoBgofK6PlnyigGoa7Fmf5nEhyHtnD-8TRXI,1584
244
245
  ultralytics/utils/export.py,sha256=ZmxiY5Y2MuL4iBFsLr8ykbUsnvT01DCs0Kg1w3_Ikac,9789
245
246
  ultralytics/utils/files.py,sha256=ZCbLGleiF0f-PqYfaxMFAWop88w7U1hpreHXl8b2ko0,8238
246
247
  ultralytics/utils/instance.py,sha256=vhqaZRGT_4K9Q3oQH5KNNK4ISOzxlf1_JjauwhuFhu0,18408
247
248
  ultralytics/utils/loss.py,sha256=fbOWc3Iu0QOJiWbi-mXWA9-1otTYlehtmUsI7os7ydM,39799
248
- ultralytics/utils/metrics.py,sha256=xSrBkLC5aJznAsWpTnFHTgSIXxWLQL949OaKTq9hMxQ,61952
249
+ ultralytics/utils/metrics.py,sha256=N-QwG-a3ox2cUYdS7-q-cOxLdwlkkZvhA2mF5UdO3jU,63020
249
250
  ultralytics/utils/ops.py,sha256=Yjm397sirPt9wNlgHU2SeVEApeEeYX1msSg5cTBGN8g,34381
250
251
  ultralytics/utils/patches.py,sha256=GI7NXCJ5H22FGp3sIvj5rrGfwdYNRWlxFcW-Jhjgius,5181
251
- ultralytics/utils/plotting.py,sha256=Njai4h7a1KEOqtOfWQ5gxdWi923rHaegkhj28tAhFmM,48108
252
+ ultralytics/utils/plotting.py,sha256=QMwedj19XNHus5NbUY3cQI1PGDgriPhHOzGirBsxdK8,48277
252
253
  ultralytics/utils/tal.py,sha256=aXawOnhn8ni65tJWIW-PYqWr_TRvltbHBjrTo7o6lDQ,20924
253
- ultralytics/utils/torch_utils.py,sha256=JDqCT6JAQOqV4riWPJHhblWas71-UZQBj-u0BFEwkjQ,39153
254
+ ultralytics/utils/torch_utils.py,sha256=iIAjf2g4hikzBeHvKN-EQK8QFlC_QtWWRuYQuBF2zIk,39184
254
255
  ultralytics/utils/triton.py,sha256=M7qe4RztiADBJQEWQKaIQsp94ERFJ_8_DUHDR6TXEOM,5410
255
256
  ultralytics/utils/tuner.py,sha256=bHr09Fz-0-t0ei55gX5wJh-obyiAQoicP7HUVM2I8qA,6826
256
257
  ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
@@ -264,9 +265,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=j8pecmlcsM8FGzLKWoBw5xUsi5t8E5HuxY
264
265
  ultralytics/utils/callbacks/raytune.py,sha256=S6Bq16oQDQ8BQgnZzA0zJHGN_BBr8iAM_WtGoLiEcwg,1283
265
266
  ultralytics/utils/callbacks/tensorboard.py,sha256=MDPBW7aDes-66OE6YqKXXvqA_EocjzEMHWGM-8z9vUQ,5281
266
267
  ultralytics/utils/callbacks/wb.py,sha256=Tm_-aRr2CN32MJkY9tylpMBJkb007-MSRNSQ7rDJ5QU,7521
267
- ultralytics-8.3.145.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
268
- ultralytics-8.3.145.dist-info/METADATA,sha256=FgXekJXZrrgIpL91ohK8GSKACSKwgBOezGaVt_BbiIE,37200
269
- ultralytics-8.3.145.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
270
- ultralytics-8.3.145.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
271
- ultralytics-8.3.145.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
272
- ultralytics-8.3.145.dist-info/RECORD,,
268
+ ultralytics-8.3.147.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
269
+ ultralytics-8.3.147.dist-info/METADATA,sha256=tgOxTCFjKc-iYOS27UzAQ-yAPXPotF9usVDa8Gd01ok,37200
270
+ ultralytics-8.3.147.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
271
+ ultralytics-8.3.147.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
272
+ ultralytics-8.3.147.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
273
+ ultralytics-8.3.147.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5