ultralytics 8.3.102__py3-none-any.whl → 8.3.103__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_exports.py CHANGED
@@ -1,7 +1,9 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ import io
3
4
  import shutil
4
5
  import uuid
6
+ from contextlib import redirect_stderr, redirect_stdout
5
7
  from itertools import product
6
8
  from pathlib import Path
7
9
 
@@ -167,12 +169,19 @@ def test_export_tflite_matrix(task, dynamic, int8, half, batch, nms):
167
169
  @pytest.mark.skipif(LINUX and ARM64, reason="CoreML not supported on aarch64 Linux")
168
170
  @pytest.mark.skipif(checks.IS_PYTHON_3_13, reason="CoreML not supported in Python 3.13")
169
171
  def test_export_coreml():
170
- """Test YOLO exports to CoreML format, optimized for macOS only."""
171
- if MACOS:
172
- file = YOLO(MODEL).export(format="coreml", imgsz=32)
173
- YOLO(file)(SOURCE, imgsz=32) # model prediction only supported on macOS for nms=False models
174
- else:
172
+ """Test YOLO exports to CoreML format and check for errors."""
173
+ # Capture stdout and stderr
174
+ stdout, stderr = io.StringIO(), io.StringIO()
175
+ with redirect_stdout(stdout), redirect_stderr(stderr):
175
176
  YOLO(MODEL).export(format="coreml", nms=True, imgsz=32)
177
+ if MACOS:
178
+ file = YOLO(MODEL).export(format="coreml", imgsz=32)
179
+ YOLO(file)(SOURCE, imgsz=32) # model prediction only supported on macOS for nms=False models
180
+
181
+ # Check captured output for errors
182
+ output = stdout.getvalue() + stderr.getvalue()
183
+ assert "Error" not in output, f"CoreML export produced errors: {output}"
184
+ assert "You will not be able to run predict()" not in output, "CoreML export has predict() error"
176
185
 
177
186
 
178
187
  @pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10, reason="TFLite export requires Python>=3.10")
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.102"
3
+ __version__ = "8.3.103"
4
4
 
5
5
  import os
6
6
 
@@ -700,7 +700,7 @@ def handle_yolo_solutions(args: List[str]) -> None:
700
700
  solution_name = "count" # Default for invalid solution
701
701
 
702
702
  if solution_name == "inference":
703
- checks.check_requirements("streamlit>=1.29.0")
703
+ checks.check_requirements("streamlit>=1.29.0,<1.44.0")
704
704
  LOGGER.info("💡 Loading Ultralytics live inference app...")
705
705
  subprocess.run(
706
706
  [ # Run subprocess with Streamlit custom argument
@@ -818,7 +818,7 @@ class Exporter:
818
818
  ts,
819
819
  inputs=[ct.ImageType("image", shape=self.im.shape, scale=scale, bias=bias)], # expects ct.TensorType
820
820
  classifier_config=classifier_config,
821
- minimum_deployment_target=ct.target.iOS16,
821
+ minimum_deployment_target=ct.target.iOS15, # warning: >=16 causes pipeline errors
822
822
  convert_to="neuralnetwork" if mlmodel else "mlprogram",
823
823
  )
824
824
  bits, mode = (8, "kmeans") if self.args.int8 else (16, "linear") if self.args.half else (32, None)
@@ -1464,7 +1464,7 @@ class Exporter:
1464
1464
 
1465
1465
  # 3. Create NMS protobuf
1466
1466
  nms_spec = ct.proto.Model_pb2.Model()
1467
- nms_spec.specificationVersion = 5
1467
+ nms_spec.specificationVersion = 9
1468
1468
  for i in range(2):
1469
1469
  decoder_output = model._spec.description.output[i].SerializeToString()
1470
1470
  nms_spec.description.input.add()
@@ -1517,7 +1517,7 @@ class Exporter:
1517
1517
  pipeline.spec.description.output[1].ParseFromString(nms_model._spec.description.output[1].SerializeToString())
1518
1518
 
1519
1519
  # Update metadata
1520
- pipeline.spec.specificationVersion = 5
1520
+ pipeline.spec.specificationVersion = 9
1521
1521
  pipeline.spec.description.metadata.userDefined.update(
1522
1522
  {"IoU threshold": str(nms.iouThreshold), "Confidence threshold": str(nms.confidenceThreshold)}
1523
1523
  )
@@ -93,8 +93,9 @@ class Tuner:
93
93
  "copy_paste": (0.0, 1.0), # segment copy-paste (probability)
94
94
  }
95
95
  self.args = get_cfg(overrides=args)
96
+ self.args.exist_ok = self.args.resume # resume w/ same tune_dir
96
97
  self.tune_dir = get_save_dir(self.args, name=self.args.name or "tune")
97
- self.args.name = None # reset to not affect training directory
98
+ self.args.name, self.args.exist_ok, self.args.resume = (None, False, False) # reset to not affect training
98
99
  self.tune_csv = self.tune_dir / "tune_results.csv"
99
100
  self.callbacks = _callbacks or callbacks.get_default_callbacks()
100
101
  self.prefix = colorstr("Tuner: ")
@@ -173,7 +174,12 @@ class Tuner:
173
174
  t0 = time.time()
174
175
  best_save_dir, best_metrics = None, None
175
176
  (self.tune_dir / "weights").mkdir(parents=True, exist_ok=True)
176
- for i in range(iterations):
177
+ start = 0
178
+ if self.tune_csv.exists():
179
+ x = np.loadtxt(self.tune_csv, ndmin=2, delimiter=",", skiprows=1)
180
+ start = x.shape[0]
181
+ LOGGER.info(f"{self.prefix}Resuming tuning run {self.tune_dir} from iteration {start + 1}...")
182
+ for i in range(start, iterations):
177
183
  # Mutate hyperparameters
178
184
  mutated_hyp = self._mutate()
179
185
  LOGGER.info(f"{self.prefix}Starting iteration {i + 1}/{iterations} with hyperparameters: {mutated_hyp}")
@@ -6,6 +6,7 @@ import platform
6
6
  import zipfile
7
7
  from collections import OrderedDict, namedtuple
8
8
  from pathlib import Path
9
+ from typing import List, Optional, Union
9
10
 
10
11
  import cv2
11
12
  import numpy as np
@@ -96,14 +97,14 @@ class AutoBackend(nn.Module):
96
97
  @torch.no_grad()
97
98
  def __init__(
98
99
  self,
99
- weights="yolo11n.pt",
100
- device=torch.device("cpu"),
101
- dnn=False,
102
- data=None,
103
- fp16=False,
104
- batch=1,
105
- fuse=True,
106
- verbose=True,
100
+ weights: Union[str, List[str], torch.nn.Module] = "yolo11n.pt",
101
+ device: torch.device = torch.device("cpu"),
102
+ dnn: bool = False,
103
+ data: Optional[Union[str, Path]] = None,
104
+ fp16: bool = False,
105
+ batch: int = 1,
106
+ fuse: bool = True,
107
+ verbose: bool = True,
107
108
  ):
108
109
  """
109
110
  Initialize the AutoBackend for inference.
ultralytics/nn/tasks.py CHANGED
@@ -912,6 +912,9 @@ class YOLOEModel(DetectionModel):
912
912
  names (List[str]): List of class names.
913
913
  embeddings (torch.Tensor): Embeddings tensor.
914
914
  """
915
+ assert not hasattr(self.model[-1], "lrpc"), (
916
+ "Prompt-free model does not support setting classes. Please try with Text/Visual prompt models."
917
+ )
915
918
  assert embeddings.ndim == 3
916
919
  self.pe = embeddings
917
920
  self.model[-1].nc = len(names)
@@ -1,7 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
4
- from ultralytics.utils.plotting import colors
3
+ from ultralytics.engine.results import Results
4
+ from ultralytics.solutions.solutions import BaseSolution, SolutionResults
5
5
 
6
6
 
7
7
  class InstanceSegmentation(BaseSolution):
@@ -41,6 +41,10 @@ class InstanceSegmentation(BaseSolution):
41
41
  kwargs["model"] = kwargs.get("model", "yolo11n-seg.pt")
42
42
  super().__init__(**kwargs)
43
43
 
44
+ self.show_conf = self.CFG.get("show_conf", True)
45
+ self.show_labels = self.CFG.get("show_labels", True)
46
+ self.show_boxes = self.CFG.get("show_boxes", True)
47
+
44
48
  def process(self, im0):
45
49
  """
46
50
  Perform instance segmentation on the input image and annotate the results.
@@ -58,17 +62,21 @@ class InstanceSegmentation(BaseSolution):
58
62
  >>> print(summary)
59
63
  """
60
64
  self.extract_tracks(im0) # Extract tracks (bounding boxes, classes, and masks)
61
- annotator = SolutionAnnotator(im0, self.line_width)
62
65
 
63
66
  # Iterate over detected classes, track IDs, and segmentation masks
64
67
  if self.masks is None:
65
68
  self.LOGGER.warning("⚠️ No masks detected! Ensure you're using a supported Ultralytics segmentation model.")
69
+ plot_im = im0
66
70
  else:
67
- for cls, t_id, mask in zip(self.clss, self.track_ids, self.masks):
68
- # Annotate the image with segmentation mask, mask color, and label
69
- annotator.segmentation_mask(mask=mask, mask_color=colors(t_id, True), label=self.names[cls])
71
+ results = Results(im0, path=None, names=self.names, boxes=self.track_data.data, masks=self.masks.data)
72
+ plot_im = results.plot(
73
+ line_width=self.line_width,
74
+ boxes=self.show_boxes,
75
+ conf=self.show_conf,
76
+ labels=self.show_labels,
77
+ color_mode="instance",
78
+ )
70
79
 
71
- plot_im = annotator.result()
72
80
  self.display_output(plot_im) # Display the annotated output using the base class function
73
81
 
74
82
  # Return SolutionResults
@@ -52,7 +52,7 @@ class BaseSolution:
52
52
  is_cli (bool): Enables CLI mode if set to True.
53
53
  **kwargs (Any): Additional configuration parameters that override defaults.
54
54
  """
55
- check_requirements("shapely>=2.0.0")
55
+ check_requirements("shapely>=2.0.0,<2.1.0")
56
56
  from shapely.geometry import LineString, Point, Polygon
57
57
  from shapely.prepared import prep
58
58
 
@@ -122,7 +122,7 @@ class BaseSolution:
122
122
  self.track_data = self.tracks[0].obb or self.tracks[0].boxes # Extract tracks for OBB or object detection
123
123
 
124
124
  self.masks = (
125
- self.tracks[0].masks.xy if hasattr(self.tracks[0], "masks") and self.tracks[0].masks is not None else None
125
+ self.tracks[0].masks if hasattr(self.tracks[0], "masks") and self.tracks[0].masks is not None else None
126
126
  )
127
127
 
128
128
  if self.track_data and self.track_data.id is not None:
@@ -225,7 +225,6 @@ class SolutionAnnotator(Annotator):
225
225
  plot_angle_and_count_and_stage: Visualizes angle, step count, and stage for workout monitoring.
226
226
  plot_distance_and_line: Displays the distance between centroids and connects them with a line.
227
227
  display_objects_labels: Annotates bounding boxes with object class labels.
228
- segmentation_mask: Draws mask for segmented objects and optionally labels them.
229
228
  sweep_annotator: Visualizes a vertical sweep line and optional label.
230
229
  visioneye: Maps and connects object centroids to a visual "eye" point.
231
230
  circle_label: Draws a circular label within a bounding box.
@@ -519,50 +518,6 @@ class SolutionAnnotator(Annotator):
519
518
  lineType=cv2.LINE_AA,
520
519
  )
521
520
 
522
- def segmentation_mask(self, mask, mask_color=(255, 0, 255), label=None, alpha=0.5):
523
- """
524
- Draw an optimized segmentation mask with smooth corners, highlighted edge, and dynamic text box size.
525
-
526
- Args:
527
- mask (np.ndarray): A 2D array of shape (N, 2) containing the object mask.
528
- mask_color (Tuple[int, int, int]): RGB color for the mask.
529
- label (str, optional): Text label for the object.
530
- alpha (float): Transparency level (0 = fully transparent, 1 = fully opaque).
531
- """
532
- if mask.size == 0:
533
- return
534
-
535
- overlay = self.im.copy()
536
- mask = np.int32([mask])
537
-
538
- # Approximate polygon for smooth corners with epsilon
539
- refined_mask = cv2.approxPolyDP(mask, 0.002 * cv2.arcLength(mask, True), True)
540
-
541
- # Apply a highlighter effect by drawing a thick outer shadow
542
- cv2.polylines(overlay, [refined_mask], isClosed=True, color=mask_color, thickness=self.lw * 3)
543
- cv2.fillPoly(overlay, [refined_mask], mask_color) # draw mask with primary color
544
-
545
- # Apply an inner glow effect for extra clarity
546
- cv2.polylines(overlay, [refined_mask], isClosed=True, color=mask_color, thickness=self.lw)
547
-
548
- self.im = cv2.addWeighted(overlay, alpha, self.im, 1 - alpha, 0) # blend overlay with the original image
549
-
550
- # Draw label if provided
551
- if label:
552
- text_size, _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, self.sf, self.tf)
553
- text_x, text_y = refined_mask[0][0][0], refined_mask[0][0][1]
554
- rect_start, rect_end = (text_x - 5, text_y - text_size[1] - 5), (text_x + text_size[0] + 5, text_y + 5)
555
- cv2.rectangle(self.im, rect_start, rect_end, mask_color, -1)
556
- cv2.putText(
557
- self.im,
558
- label,
559
- (text_x, text_y),
560
- cv2.FONT_HERSHEY_SIMPLEX,
561
- self.sf,
562
- self.get_txt_color(mask_color),
563
- self.tf,
564
- )
565
-
566
521
  def sweep_annotator(self, line_x=0, line_y=0, label=None, color=(221, 0, 186), txt_color=(255, 255, 255)):
567
522
  """
568
523
  Draw a sweep annotation line and an optional label.
@@ -523,7 +523,7 @@ def plot_mc_curve(px, py, save_dir=Path("mc_curve.png"), names={}, xlabel="Confi
523
523
  else:
524
524
  ax.plot(px, py.T, linewidth=1, color="grey") # plot(confidence, metric)
525
525
 
526
- y = smooth(py.mean(0), 0.05)
526
+ y = smooth(py.mean(0), 0.1)
527
527
  ax.plot(px, y, linewidth=3, color="blue", label=f"all classes {y.max():.2f} at {px[y.argmax()]:.3f}")
528
528
  ax.set_xlabel(xlabel)
529
529
  ax.set_ylabel(ylabel)
@@ -386,14 +386,18 @@ def model_info_for_loggers(trainer):
386
386
 
387
387
  def get_flops(model, imgsz=640):
388
388
  """
389
- Return a YOLO model's FLOPs.
389
+ Calculate FLOPs (floating point operations) for a model in billions.
390
+
391
+ Attempts two calculation methods: first with a stride-based tensor for efficiency,
392
+ then falls back to full image size if needed (e.g., for RTDETR models). Returns 0.0
393
+ if thop library is unavailable or calculation fails.
390
394
 
391
395
  Args:
392
396
  model (nn.Module): The model to calculate FLOPs for.
393
397
  imgsz (int | List[int], optional): Input image size. Defaults to 640.
394
398
 
395
399
  Returns:
396
- (float): The model's FLOPs in billions.
400
+ (float): The model FLOPs in billions.
397
401
  """
398
402
  if not thop:
399
403
  return 0.0 # if not installed return 0.0 GFLOPs
@@ -404,13 +408,13 @@ def get_flops(model, imgsz=640):
404
408
  if not isinstance(imgsz, list):
405
409
  imgsz = [imgsz, imgsz] # expand if int/float
406
410
  try:
407
- # Use stride size for input tensor
411
+ # Method 1: Use stride-based input tensor
408
412
  stride = max(int(model.stride.max()), 32) if hasattr(model, "stride") else 32 # max stride
409
413
  im = torch.empty((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format
410
414
  flops = thop.profile(deepcopy(model), inputs=[im], verbose=False)[0] / 1e9 * 2 # stride GFLOPs
411
415
  return flops * imgsz[0] / stride * imgsz[1] / stride # imgsz GFLOPs
412
416
  except Exception:
413
- # Use actual image size for input tensor (i.e. required for RTDETR models)
417
+ # Method 2: Use actual image size (required for RTDETR models)
414
418
  im = torch.empty((1, p.shape[1], *imgsz), device=p.device) # input image in BCHW format
415
419
  return thop.profile(deepcopy(model), inputs=[im], verbose=False)[0] / 1e9 * 2 # imgsz GFLOPs
416
420
  except Exception:
@@ -611,10 +615,10 @@ def unset_deterministic():
611
615
 
612
616
  class ModelEMA:
613
617
  """
614
- Updated Exponential Moving Average (EMA) from https://github.com/rwightman/pytorch-image-models.
618
+ Updated Exponential Moving Average (EMA) implementation.
615
619
 
616
620
  Keeps a moving average of everything in the model state_dict (parameters and buffers).
617
- For EMA details see https://www.tensorflow.org/api_docs/python/tf/train/ExponentialMovingAverage
621
+ For EMA details see References.
618
622
 
619
623
  To disable EMA set the `enabled` attribute to `False`.
620
624
 
@@ -623,6 +627,10 @@ class ModelEMA:
623
627
  updates (int): Number of EMA updates.
624
628
  decay (function): Decay function that determines the EMA weight.
625
629
  enabled (bool): Whether EMA is enabled.
630
+
631
+ References:
632
+ - https://github.com/rwightman/pytorch-image-models
633
+ - https://www.tensorflow.org/api_docs/python/tf/train/ExponentialMovingAverage
626
634
  """
627
635
 
628
636
  def __init__(self, model, decay=0.9999, tau=2000, updates=0):
@@ -1,7 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  from ultralytics.cfg import TASK2DATA, TASK2METRIC, get_cfg, get_save_dir
4
- from ultralytics.utils import DEFAULT_CFG, DEFAULT_CFG_DICT, LOGGER, NUM_THREADS, checks
4
+ from ultralytics.utils import DEFAULT_CFG, DEFAULT_CFG_DICT, LOGGER, NUM_THREADS, checks, colorstr
5
5
 
6
6
 
7
7
  def run_ray_tune(
@@ -95,7 +95,7 @@ def run_ray_tune(
95
95
  return results.results_dict
96
96
 
97
97
  # Get search space
98
- if not space:
98
+ if not space and not train_args.get("resume"):
99
99
  space = default_space
100
100
  LOGGER.warning("WARNING ⚠️ search space not provided, using default search space.")
101
101
 
@@ -123,15 +123,23 @@ def run_ray_tune(
123
123
 
124
124
  # Create the Ray Tune hyperparameter search tuner
125
125
  tune_dir = get_save_dir(
126
- get_cfg(DEFAULT_CFG, train_args), name=train_args.pop("name", "tune")
126
+ get_cfg(
127
+ DEFAULT_CFG,
128
+ {**train_args, **{"exist_ok": train_args.pop("resume", False)}}, # resume w/ same tune_dir
129
+ ),
130
+ name=train_args.pop("name", "tune"), # runs/{task}/{tune_dir}
127
131
  ).resolve() # must be absolute dir
128
132
  tune_dir.mkdir(parents=True, exist_ok=True)
129
- tuner = tune.Tuner(
130
- trainable_with_resources,
131
- param_space=space,
132
- tune_config=tune.TuneConfig(scheduler=asha_scheduler, num_samples=max_samples),
133
- run_config=RunConfig(callbacks=tuner_callbacks, storage_path=tune_dir),
134
- )
133
+ if tune.Tuner.can_restore(tune_dir):
134
+ LOGGER.info(f"{colorstr('Tuner: ')} Resuming tuning run {tune_dir}...")
135
+ tuner = tune.Tuner.restore(str(tune_dir), trainable=trainable_with_resources, resume_errored=True)
136
+ else:
137
+ tuner = tune.Tuner(
138
+ trainable_with_resources,
139
+ param_space=space,
140
+ tune_config=tune.TuneConfig(scheduler=asha_scheduler, num_samples=max_samples),
141
+ run_config=RunConfig(callbacks=tuner_callbacks, storage_path=tune_dir.parent, name=tune_dir.name),
142
+ )
135
143
 
136
144
  # Run the hyperparameter search
137
145
  tuner.fit()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.102
3
+ Version: 8.3.103
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>
@@ -70,8 +70,8 @@ Requires-Dist: keras; extra == "export"
70
70
  Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
71
71
  Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
72
72
  Provides-Extra: solutions
73
- Requires-Dist: shapely>=2.0.0; extra == "solutions"
74
- Requires-Dist: streamlit; extra == "solutions"
73
+ Requires-Dist: shapely<2.1.0,>=2.0.0; extra == "solutions"
74
+ Requires-Dist: streamlit<1.44.0,>=1.29.0; extra == "solutions"
75
75
  Provides-Extra: logging
76
76
  Requires-Dist: comet; extra == "logging"
77
77
  Requires-Dist: tensorboard>=2.13.0; extra == "logging"
@@ -3,14 +3,14 @@ tests/conftest.py,sha256=rsIAipRKfrVNoTaJ1LdpYue8AbcJ_fr3d3WIlM_6uXY,2982
3
3
  tests/test_cli.py,sha256=DPxUjcGAex_cmGMNaRIK7mT7wrILWaPBtlfXuHQpveI,5284
4
4
  tests/test_cuda.py,sha256=0uvTF4bY_Grsd_Xgtp7TdIEgMpUqKv8_kWA82NYDl_g,6260
5
5
  tests/test_engine.py,sha256=aGqZ8P7QO5C_nOa1b4FOyk92Ysdk5WiP-ST310Vyxys,4962
6
- tests/test_exports.py,sha256=ONs5zF9gVOl_sabzLmFyhp5zQ2sv3uSWzXUjoTgJPME,9242
6
+ tests/test_exports.py,sha256=dhZn86LdbapW15RthQF870LGxDjC1MUZhlGdBgPmgIQ,9716
7
7
  tests/test_integrations.py,sha256=ZgpddWHEVqiP4bGhVw8fLc2wdz0rCxuxr0FQ2dTgnIE,6067
8
8
  tests/test_python.py,sha256=Xrxx-Cul4xumA5qDCnduXOA3InfADT3jrtnEh4jpOeY,24638
9
9
  tests/test_solutions.py,sha256=FrQfIjjFeOf3kLU6-1mC7qOhgEkWFuc5Djc2sf2dQHU,5532
10
- ultralytics/__init__.py,sha256=3yAkLuNguZEhOfixmwQReajta2djZXiPOmsc85uslLY,730
10
+ ultralytics/__init__.py,sha256=eLvuHAOilZjuxx9JiZennZVVDKbymiy8fSI1S3uu6lE,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=h-VYq22NA05gVibxa5eVO-pMk9OqlcaUMx2NbgklnXM,39894
13
+ ultralytics/cfg/__init__.py,sha256=fmoJOyFlUaZFR1dso6I0wS6YXUSMFRh_PmC00_9DOiI,39902
14
14
  ultralytics/cfg/default.yaml,sha256=tHE_VB_tzq5K1BntCCukmFIViwiRv0R-H6ZNucCnYsY,8469
15
15
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=_xlEDIJ9XkUo0v_iNL7FW079BoSeZtKSuLteKTtGbA8,3275
16
16
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=SHND_CFkojxw5iQD5Mcgju2kCZIl0gW2ajuzv1cqoL0,1224
@@ -111,12 +111,12 @@ ultralytics/data/loaders.py,sha256=_Gyp_BfGTZwsFdn4UnolXxdU_sAYZLIrv0L2TRI9R5g,2
111
111
  ultralytics/data/split_dota.py,sha256=p8eVGht9tABSVbf9vwvxA_AQYEva3IGHePKlMeNrn64,11872
112
112
  ultralytics/data/utils.py,sha256=aRPwIoLrCML_Kcd0dI9B6c5Ct4dvhdF36rDHtuf7Ww4,33217
113
113
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
114
- ultralytics/engine/exporter.py,sha256=owX5IE9-NOBtNorh_GqbjFkRWpEypSScw4Tw47eKgdE,78012
114
+ ultralytics/engine/exporter.py,sha256=Tt6hfbdyytFVlC5y8lIEdg9UXU3HwIYohsC8vJv8jtw,78052
115
115
  ultralytics/engine/model.py,sha256=YgQKYZrPENSTvLENspg-bXI9FinzzWARfb0U-C9vH-M,52916
116
116
  ultralytics/engine/predictor.py,sha256=fRUh82EJlu_6ZlIy8NFovlCcgX53UbRYSXcLljOs7Sc,21669
117
117
  ultralytics/engine/results.py,sha256=H3pFJhUjYKvVyOUqqZjfIn8vnCpl81aYNOnregMrBoQ,79716
118
118
  ultralytics/engine/trainer.py,sha256=KAeiNoH5NIRhQPIfr5AhVwDerk9dy0-QJu-FlxtG4xA,38904
119
- ultralytics/engine/tuner.py,sha256=GsDhrI3uWm3YYEQHpqxLCehXsUMRWrhmXFW6X4vJB3s,12205
119
+ ultralytics/engine/tuner.py,sha256=CW6Ys4NV6SVScXA5GQO5DeSIJWys9e_mqUg26b6NYu4,12598
120
120
  ultralytics/engine/validator.py,sha256=Xijg74RHn43ANjQJaBJ4zZkWd0MMPUH2TzfmydAMbzk,16974
121
121
  ultralytics/hub/__init__.py,sha256=wDtAUKdfqob95tfFHgDJFXcsNSDSdoIQkJTm-CfIUTI,6616
122
122
  ultralytics/hub/auth.py,sha256=QShM9RGDwaNgZlNLfLg9Ui-awj55fTRRK9yFDGlwwZ8,5556
@@ -186,8 +186,8 @@ ultralytics/models/yolo/yoloe/train.py,sha256=7JxJkMN9bkUGsO-RojFG2Q3yfdKhb-TXlB
186
186
  ultralytics/models/yolo/yoloe/train_seg.py,sha256=JguKB1ez8Rf7XBu_D_mWHMLJto7y7Kr2m0Tq2NwDtwU,5269
187
187
  ultralytics/models/yolo/yoloe/val.py,sha256=n-wDJprRMqqio6Ndsg_OpjNJQCPy_wIMzPMzecESzjs,8244
188
188
  ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
189
- ultralytics/nn/autobackend.py,sha256=jqNBzu9kNHVyZgTky8dhMQLMKo8YWwuaokLCKgp-alw,38703
190
- ultralytics/nn/tasks.py,sha256=IhwALGXXrFeNSJivzY6JT4YDg3k-trtLvR0qrJE5W9U,62818
189
+ ultralytics/nn/autobackend.py,sha256=Y597hrrvhHlRX5SoOiXJZXj_1ND9kHMn94V2m_saRAU,38871
190
+ ultralytics/nn/tasks.py,sha256=r9CoXW9owNK5UWH2ufM5cyG3DB5TEEIX-JmhTSECCN8,62991
191
191
  ultralytics/nn/text_model.py,sha256=H6OiLe0FOyZY4pd7-ixRTxaBgx3lOc2GmGTmrFnoJd0,10136
192
192
  ultralytics/nn/modules/__init__.py,sha256=dXLtIk9rt944WfsTdpgEdWOg3HQEHdwQztuZ6WNJygs,3144
193
193
  ultralytics/nn/modules/activation.py,sha256=PvXZkA9AzEntR575JkFORdmtcRwATyy0lje-uHA5_8w,2210
@@ -201,7 +201,7 @@ ultralytics/solutions/ai_gym.py,sha256=oOexy2cT59u9X6ROCwoaV3Nl2zT2xJ_trShAoSyR8
201
201
  ultralytics/solutions/analytics.py,sha256=O8dXdDTpHPRlz2vAGMvef1NfWUXBvoYt2G_TQI_UjoQ,11983
202
202
  ultralytics/solutions/distance_calculation.py,sha256=n6bPNJ7YbPKAaHWsra6CQQtrDR0SEvSC14BRWTITyBU,5711
203
203
  ultralytics/solutions/heatmap.py,sha256=dagbZ0Vn4UdywNyiAypYW5v1uzOWf521QrkzmqyeCEc,5626
204
- ultralytics/solutions/instance_segmentation.py,sha256=IYIQdlW9A54blg0dp3OvUfhZCaO429a0KrT7fib7clY,3322
204
+ ultralytics/solutions/instance_segmentation.py,sha256=q8vXQmnoqbiExq3CVYMybkdJ7X2AZWsExUA0--3d_5w,3505
205
205
  ultralytics/solutions/object_blurrer.py,sha256=9Qzs8M3YI--FoWvihMytFdtnhin6gQ0l_uy6CsdoF9U,3896
206
206
  ultralytics/solutions/object_counter.py,sha256=_5XsW6TwIh7_PK1d8Ny-Xd1a-pqTAzIDV02bHysnJmY,9881
207
207
  ultralytics/solutions/object_cropper.py,sha256=AlIM-RnqFRogAY8JilE0KnbzFMulaIYJGPpn1nFRL5w,3386
@@ -209,7 +209,7 @@ ultralytics/solutions/parking_management.py,sha256=uojHB17GxzFgzEmCBTEW5XK2h3ONj
209
209
  ultralytics/solutions/queue_management.py,sha256=cUzAMMeWijowkdiuaSUZRr0S3I5MTHkCQOLjOqS0JN0,4299
210
210
  ultralytics/solutions/region_counter.py,sha256=LKZuykgmnevKKzYifyeHQwQroF7tJJIPI6HVXi5mb9M,5299
211
211
  ultralytics/solutions/security_alarm.py,sha256=KLP1R5qAFcmMliHfsuYNS_k-E1vGbOccLrzbmcpp4xQ,6254
212
- ultralytics/solutions/solutions.py,sha256=saP3l-zNFPQk2LGtZ7wBNTb7U5Byg9S8pDSH0Ilseco,33866
212
+ ultralytics/solutions/solutions.py,sha256=LROzwtuNnpktuOmVWw82vItT_5mTaQSS_o7ZSi4zwtI,31771
213
213
  ultralytics/solutions/speed_estimation.py,sha256=Ewx389Z8sVL7NTEV7Hc9JbRBR0NMthGiIJk7-gyzD2Q,5149
214
214
  ultralytics/solutions/streamlit_inference.py,sha256=M0ppTFInqSPrdytZBLH8x-XoA7zFc7PaRQ51wHG9ppU,9846
215
215
  ultralytics/solutions/trackzone.py,sha256=05XVTQVCGHFAuFNPzyv0VXKQSJKiyWkU6zkXVo4_dxw,3792
@@ -233,14 +233,14 @@ ultralytics/utils/errors.py,sha256=vY9h2evFSrHnZdHJVVrmm8Zzw4qVDLyo9DeYW5g0dFk,1
233
233
  ultralytics/utils/files.py,sha256=0K4O1cgqRiXaDw7EQK13TqA5SME_RrvfDVQSPetNr5w,8042
234
234
  ultralytics/utils/instance.py,sha256=UOEsXR9V-bXNRk6BTonASBEgeMqvzzAk4S7VdXZJUAM,18090
235
235
  ultralytics/utils/loss.py,sha256=us3lwmSlIwEzoMztNjpet7Kb1r1-sMGyESykqgYPDVo,36945
236
- ultralytics/utils/metrics.py,sha256=mCQwIH3am95OR3yvHWTqWAD0Unal7n2MYg4liFFygbA,53669
236
+ ultralytics/utils/metrics.py,sha256=_b9StWmh0QuE4jAeNxhREdUbateJJieM98k1L1BD0Ek,53668
237
237
  ultralytics/utils/ops.py,sha256=Ag69Hvy8HxKLvewrtfQRseveboc_RGzlMYmO1B2U1Lk,34215
238
238
  ultralytics/utils/patches.py,sha256=auTWwYBieowiwH7ww1FgR67JSPkKr_7-PGA1SCYXB4A,4569
239
239
  ultralytics/utils/plotting.py,sha256=wAg_z9ik6Wi3XZCfKO2K6TWV1G0TcLEkjxxz2H42CX8,46703
240
240
  ultralytics/utils/tal.py,sha256=B-NV9qC3WIiKDcRWgJB2RN1r6aA0UUp0lL7RFwYhYK4,20814
241
- ultralytics/utils/torch_utils.py,sha256=NHZ9iHyzfKyMgev4A37ePCjdFLJ7JxdsmPCZnhenyfs,38569
241
+ ultralytics/utils/torch_utils.py,sha256=7O0sJhISx3RzQI6uRtx2ZhJm-qNEYF359qXwQFL99pw,38894
242
242
  ultralytics/utils/triton.py,sha256=xK9Db_ZUVDnIK1u76S2G-6ulIBsLfj9HN_YOaSrnMuU,5304
243
- ultralytics/utils/tuner.py,sha256=mJLrORb67FqnTvKD5Y3dM7LxhkMcJpZwWVYfv9yfQ8w,5994
243
+ ultralytics/utils/tuner.py,sha256=JBarTM7E8AC6ZLfRf8XCE5s_nwzEAp-dU4wM9MKDQ5k,6476
244
244
  ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
245
245
  ultralytics/utils/callbacks/base.py,sha256=p8YCeYDp4GLcyHWFZxC2Wxr2IXLw_MfIE5ef1fOQcWk,6848
246
246
  ultralytics/utils/callbacks/clearml.py,sha256=jxTL2QSt8Cjp_BkK2XUDPg5t2XnykMYXJFRp6B66ulA,6005
@@ -252,9 +252,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=XXnnKQ-MoLIexl8y2Vb0i-cCLyePE0n5BU
252
252
  ultralytics/utils/callbacks/raytune.py,sha256=omVZNNuzYxsZZXrF9xpbFv7R1Wjdx1j-gv0xXuZrQas,1122
253
253
  ultralytics/utils/callbacks/tensorboard.py,sha256=7eUX21_Ym7i6iN4euZzrqglphyl5xak1yl_-wfFshbg,5502
254
254
  ultralytics/utils/callbacks/wb.py,sha256=iDRFXI4IIDm8R5OI89DMTmjs8aHLo1HRCLkOFKdaMG4,7507
255
- ultralytics-8.3.102.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
256
- ultralytics-8.3.102.dist-info/METADATA,sha256=gg1FtyhvIEfAG0BUwcomy5TxL57Un6jLtqA5JSFhvZQ,37332
257
- ultralytics-8.3.102.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
258
- ultralytics-8.3.102.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
259
- ultralytics-8.3.102.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
260
- ultralytics-8.3.102.dist-info/RECORD,,
255
+ ultralytics-8.3.103.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
256
+ ultralytics-8.3.103.dist-info/METADATA,sha256=x_z2b3rRWJiP_P8y0fEjNHXQHwrcDp04hEPb-rxCL8M,37355
257
+ ultralytics-8.3.103.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
258
+ ultralytics-8.3.103.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
259
+ ultralytics-8.3.103.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
260
+ ultralytics-8.3.103.dist-info/RECORD,,