ultralytics 8.1.32__py3-none-any.whl → 8.1.34__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.1.32"
3
+ __version__ = "8.1.34"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -112,6 +112,7 @@ CFG_FRACTION_KEYS = {
112
112
  "perspective",
113
113
  "flipud",
114
114
  "fliplr",
115
+ "bgr",
115
116
  "mosaic",
116
117
  "mixup",
117
118
  "copy_paste",
@@ -111,6 +111,7 @@ shear: 0.0 # (float) image shear (+/- deg)
111
111
  perspective: 0.0 # (float) image perspective (+/- fraction), range 0-0.001
112
112
  flipud: 0.0 # (float) image flip up-down (probability)
113
113
  fliplr: 0.5 # (float) image flip left-right (probability)
114
+ bgr: 0.0 # (float) image channel BGR (probability)
114
115
  mosaic: 1.0 # (float) image mosaic (probability)
115
116
  mixup: 0.0 # (float) image mixup (probability)
116
117
  copy_paste: 0.0 # (float) segment copy-paste (probability)
@@ -886,6 +886,7 @@ class Format:
886
886
  mask_ratio (int): Downsample ratio for masks. Default is 4.
887
887
  mask_overlap (bool): Whether to overlap masks. Default is True.
888
888
  batch_idx (bool): Keep batch indexes. Default is True.
889
+ bgr (float): The probability to return BGR images. Default is 0.0.
889
890
  """
890
891
 
891
892
  def __init__(
@@ -898,6 +899,7 @@ class Format:
898
899
  mask_ratio=4,
899
900
  mask_overlap=True,
900
901
  batch_idx=True,
902
+ bgr=0.0,
901
903
  ):
902
904
  """Initializes the Format class with given parameters."""
903
905
  self.bbox_format = bbox_format
@@ -908,6 +910,7 @@ class Format:
908
910
  self.mask_ratio = mask_ratio
909
911
  self.mask_overlap = mask_overlap
910
912
  self.batch_idx = batch_idx # keep the batch indexes
913
+ self.bgr = bgr
911
914
 
912
915
  def __call__(self, labels):
913
916
  """Return formatted image, classes, bounding boxes & keypoints to be used by 'collate_fn'."""
@@ -948,7 +951,8 @@ class Format:
948
951
  """Format the image for YOLO from Numpy array to PyTorch tensor."""
949
952
  if len(img.shape) < 3:
950
953
  img = np.expand_dims(img, -1)
951
- img = np.ascontiguousarray(img.transpose(2, 0, 1)[::-1])
954
+ img = img.transpose(2, 0, 1)
955
+ img = np.ascontiguousarray(img[::-1] if random.uniform(0, 1) > self.bgr else img)
952
956
  img = torch.from_numpy(img)
953
957
  return img
954
958
 
@@ -167,6 +167,7 @@ class YOLODataset(BaseDataset):
167
167
  batch_idx=True,
168
168
  mask_ratio=hyp.mask_ratio,
169
169
  mask_overlap=hyp.overlap_mask,
170
+ bgr=hyp.bgr if self.augment else 0.0, # only affect training.
170
171
  )
171
172
  )
172
173
  return transforms
@@ -119,30 +119,27 @@ class Model(nn.Module):
119
119
  self.metrics = None # validation/training metrics
120
120
  self.session = None # HUB session
121
121
  self.task = task # task type
122
- self.model_name = model = str(model).strip() # strip spaces
122
+ model = str(model).strip()
123
123
 
124
124
  # Check if Ultralytics HUB model from https://hub.ultralytics.com
125
125
  if self.is_hub_model(model):
126
126
  # Fetch model from HUB
127
- checks.check_requirements("hub-sdk>=0.0.5")
127
+ checks.check_requirements("hub-sdk>=0.0.6")
128
128
  self.session = self._get_hub_session(model)
129
129
  model = self.session.model_file
130
130
 
131
131
  # Check if Triton Server model
132
132
  elif self.is_triton_model(model):
133
- self.model = model
133
+ self.model_name = self.model = model
134
134
  self.task = task
135
135
  return
136
136
 
137
137
  # Load or create new YOLO model
138
- model = checks.check_model_file_from_stem(model) # add suffix, i.e. yolov8n -> yolov8n.pt
139
138
  if Path(model).suffix in (".yaml", ".yml"):
140
139
  self._new(model, task=task, verbose=verbose)
141
140
  else:
142
141
  self._load(model, task=task)
143
142
 
144
- self.model_name = model
145
-
146
143
  def __call__(
147
144
  self,
148
145
  source: Union[str, Path, int, list, tuple, np.ndarray, torch.Tensor] = None,
@@ -190,8 +187,8 @@ class Model(nn.Module):
190
187
  return any(
191
188
  (
192
189
  model.startswith(f"{HUB_WEB_ROOT}/models/"), # i.e. https://hub.ultralytics.com/models/MODEL_ID
193
- [len(x) for x in model.split("_")] == [42, 20], # APIKEY_MODELID
194
- len(model) == 20 and not Path(model).exists() and all(x not in model for x in "./\\"), # MODELID
190
+ [len(x) for x in model.split("_")] == [42, 20], # APIKEY_MODEL
191
+ len(model) == 20 and not Path(model).exists() and all(x not in model for x in "./\\"), # MODEL
195
192
  )
196
193
  )
197
194
 
@@ -215,6 +212,7 @@ class Model(nn.Module):
215
212
  # Below added to allow export from YAMLs
216
213
  self.model.args = {**DEFAULT_CFG_DICT, **self.overrides} # combine default and model args (prefer model args)
217
214
  self.model.task = self.task
215
+ self.model_name = cfg
218
216
 
219
217
  def _load(self, weights: str, task=None) -> None:
220
218
  """
@@ -224,19 +222,23 @@ class Model(nn.Module):
224
222
  weights (str): model checkpoint to be loaded
225
223
  task (str | None): model task
226
224
  """
227
- suffix = Path(weights).suffix
228
- if suffix == ".pt":
225
+ if weights.lower().startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://")):
226
+ weights = checks.check_file(weights) # automatically download and return local filename
227
+ weights = checks.check_model_file_from_stem(weights) # add suffix, i.e. yolov8n -> yolov8n.pt
228
+
229
+ if Path(weights).suffix == ".pt":
229
230
  self.model, self.ckpt = attempt_load_one_weight(weights)
230
231
  self.task = self.model.args["task"]
231
232
  self.overrides = self.model.args = self._reset_ckpt_args(self.model.args)
232
233
  self.ckpt_path = self.model.pt_path
233
234
  else:
234
- weights = checks.check_file(weights)
235
+ weights = checks.check_file(weights) # runs in all cases, not redundant with above call
235
236
  self.model, self.ckpt = weights, None
236
237
  self.task = task or guess_model_task(weights)
237
238
  self.ckpt_path = weights
238
239
  self.overrides["model"] = weights
239
240
  self.overrides["task"] = self.task
241
+ self.model_name = weights
240
242
 
241
243
  def _check_is_pytorch_model(self) -> None:
242
244
  """Raises TypeError is model is not a PyTorch model."""
@@ -385,10 +385,10 @@ class Results(SimpleClass):
385
385
  BGR=True,
386
386
  )
387
387
 
388
- def summary(self, normalize=False):
388
+ def summary(self, normalize=False, decimals=5):
389
389
  """Convert the results to a summarized format."""
390
390
  if self.probs is not None:
391
- LOGGER.warning("Warning: Classify task do not support `summary` and `tojson` yet.")
391
+ LOGGER.warning("Warning: Classify results do not support the `summary()` method yet.")
392
392
  return
393
393
 
394
394
  # Create list of detection dictionaries
@@ -396,28 +396,38 @@ class Results(SimpleClass):
396
396
  data = self.boxes.data.cpu().tolist()
397
397
  h, w = self.orig_shape if normalize else (1, 1)
398
398
  for i, row in enumerate(data): # xyxy, track_id if tracking, conf, class_id
399
- box = {"x1": row[0] / w, "y1": row[1] / h, "x2": row[2] / w, "y2": row[3] / h}
400
- conf = row[-2]
399
+ box = {
400
+ "x1": round(row[0] / w, decimals),
401
+ "y1": round(row[1] / h, decimals),
402
+ "x2": round(row[2] / w, decimals),
403
+ "y2": round(row[3] / h, decimals),
404
+ }
405
+ conf = round(row[-2], decimals)
401
406
  class_id = int(row[-1])
402
- name = self.names[class_id]
403
- result = {"name": name, "class": class_id, "confidence": conf, "box": box}
407
+ result = {"name": self.names[class_id], "class": class_id, "confidence": conf, "box": box}
404
408
  if self.boxes.is_track:
405
409
  result["track_id"] = int(row[-3]) # track ID
406
410
  if self.masks:
407
- x, y = self.masks.xy[i][:, 0], self.masks.xy[i][:, 1] # numpy array
408
- result["segments"] = {"x": (x / w).tolist(), "y": (y / h).tolist()}
411
+ result["segments"] = {
412
+ "x": (self.masks.xy[i][:, 0] / w).round(decimals).tolist(),
413
+ "y": (self.masks.xy[i][:, 1] / h).round(decimals).tolist(),
414
+ }
409
415
  if self.keypoints is not None:
410
416
  x, y, visible = self.keypoints[i].data[0].cpu().unbind(dim=1) # torch Tensor
411
- result["keypoints"] = {"x": (x / w).tolist(), "y": (y / h).tolist(), "visible": visible.tolist()}
417
+ result["keypoints"] = {
418
+ "x": (x / w).numpy().round(decimals).tolist(), # decimals named argument required
419
+ "y": (y / h).numpy().round(decimals).tolist(),
420
+ "visible": visible.numpy().round(decimals).tolist(),
421
+ }
412
422
  results.append(result)
413
423
 
414
424
  return results
415
425
 
416
- def tojson(self, normalize=False):
426
+ def tojson(self, normalize=False, decimals=5):
417
427
  """Convert the results to JSON format."""
418
428
  import json
419
429
 
420
- return json.dumps(self.summary(normalize=normalize), indent=2)
430
+ return json.dumps(self.summary(normalize=normalize, decimals=decimals), indent=2)
421
431
 
422
432
 
423
433
  class Boxes(BaseTensor):
@@ -95,6 +95,7 @@ class Tuner:
95
95
  "perspective": (0.0, 0.001), # image perspective (+/- fraction), range 0-0.001
96
96
  "flipud": (0.0, 1.0), # image flip up-down (probability)
97
97
  "fliplr": (0.0, 1.0), # image flip left-right (probability)
98
+ "bgr": (0.0, 1.0), # image channel bgr (probability)
98
99
  "mosaic": (0.0, 1.0), # image mixup (probability)
99
100
  "mixup": (0.0, 1.0), # image mixup (probability)
100
101
  "copy_paste": (0.0, 1.0), # segment copy-paste (probability)
@@ -23,7 +23,7 @@ def login(api_key: str = None, save=True) -> bool:
23
23
  Returns:
24
24
  (bool): True if authentication is successful, False otherwise.
25
25
  """
26
- checks.check_requirements("hub-sdk>=0.0.2")
26
+ checks.check_requirements("hub-sdk>=0.0.6")
27
27
  from hub_sdk import HUBClient
28
28
 
29
29
  api_key_url = f"{HUB_WEB_ROOT}/settings?tab=api+keys" # set the redirect URL
@@ -202,13 +202,10 @@ class AutoBackend(nn.Module):
202
202
  ov_model = core.read_model(model=str(w), weights=w.with_suffix(".bin"))
203
203
  if ov_model.get_parameters()[0].get_layout().empty:
204
204
  ov_model.get_parameters()[0].set_layout(ov.Layout("NCHW"))
205
- batch_dim = ov.get_batch(ov_model)
206
- if batch_dim.is_static:
207
- batch_size = batch_dim.get_length()
208
205
 
209
206
  # OpenVINO inference modes are 'LATENCY', 'THROUGHPUT' (not recommended), or 'CUMULATIVE_THROUGHPUT'
210
207
  inference_mode = "CUMULATIVE_THROUGHPUT" if batch > 1 else "LATENCY"
211
- LOGGER.info(f"Using OpenVINO {inference_mode} mode for batch-size={batch_size} inference...")
208
+ LOGGER.info(f"Using OpenVINO {inference_mode} mode for batch={batch} inference...")
212
209
  ov_compiled_model = core.compile_model(
213
210
  ov_model,
214
211
  device_name="AUTO", # AUTO selects best available device, do not modify
@@ -606,7 +603,7 @@ class AutoBackend(nn.Module):
606
603
  from ultralytics.engine.exporter import export_formats
607
604
 
608
605
  sf = list(export_formats().Suffix) # export suffixes
609
- if not is_url(p, check=False) and not isinstance(p, str):
606
+ if not is_url(p) and not isinstance(p, str):
610
607
  check_suffix(p, sf) # checks
611
608
  name = Path(p).name
612
609
  types = [s in name for s in sf]
@@ -80,14 +80,6 @@ class AIGym:
80
80
  self.keypoints = results[0].keypoints.data
81
81
  self.annotator = Annotator(im0, line_width=2)
82
82
 
83
- num_keypoints = len(results[0])
84
-
85
- # Resize self.angle, self.count, and self.stage if the number of keypoints has changed
86
- if len(self.angle) != num_keypoints:
87
- self.angle = [0] * num_keypoints
88
- self.count = [0] * num_keypoints
89
- self.stage = ["-" for _ in range(num_keypoints)]
90
-
91
83
  for ind, k in enumerate(reversed(self.keypoints)):
92
84
  if self.pose_type in ["pushup", "pullup"]:
93
85
  self.angle[ind] = self.annotator.estimate_pose_angle(
@@ -171,7 +171,7 @@ class ObjectCounter:
171
171
  # Extract tracks
172
172
  for box, track_id, cls in zip(boxes, track_ids, clss):
173
173
  # Draw bounding box
174
- self.annotator.box_label(box, label=f"{track_id}:{self.names[cls]}", color=colors(int(cls), True))
174
+ self.annotator.box_label(box, label=f"{track_id}:{self.names[cls]}", color=colors(int(track_id), True))
175
175
 
176
176
  # Draw Tracks
177
177
  track_line = self.track_history[track_id]
@@ -142,6 +142,8 @@ def check_imgsz(imgsz, stride=32, min_dim=1, max_dim=2, floor=0):
142
142
  imgsz = [imgsz]
143
143
  elif isinstance(imgsz, (list, tuple)):
144
144
  imgsz = list(imgsz)
145
+ elif isinstance(imgsz, str): # i.e. '640' or '[640,640]'
146
+ imgsz = [int(imgsz)] if imgsz.isnumeric() else eval(imgsz)
145
147
  else:
146
148
  raise TypeError(
147
149
  f"'imgsz={imgsz}' is of invalid type {type(imgsz).__name__}. "
@@ -315,7 +317,7 @@ def check_font(font="Arial.ttf"):
315
317
 
316
318
  # Download to USER_CONFIG_DIR if missing
317
319
  url = f"https://ultralytics.com/assets/{name}"
318
- if downloads.is_url(url):
320
+ if downloads.is_url(url, check=True):
319
321
  downloads.safe_download(url=url, file=file)
320
322
  return file
321
323
 
@@ -498,7 +500,7 @@ def check_file(file, suffix="", download=True, hard=True):
498
500
  raise FileNotFoundError(f"'{file}' does not exist")
499
501
  elif len(files) > 1 and hard:
500
502
  raise FileNotFoundError(f"Multiple files match '{file}', specify exact path: {files}")
501
- return files[0] if len(files) else [] # return file
503
+ return files[0] if len(files) else [] if hard else file # return file
502
504
 
503
505
 
504
506
  def check_yaml(file, suffix=(".yaml", ".yml"), hard=True):
@@ -726,4 +728,4 @@ def cuda_is_available() -> bool:
726
728
 
727
729
 
728
730
  # Define constants
729
- IS_PYTHON_3_12 = check_version(PYTHON_VERSION, "==3.12", name="Python ", hard=False)
731
+ IS_PYTHON_3_12 = PYTHON_VERSION.startswith("3.12")
@@ -33,7 +33,7 @@ GITHUB_ASSETS_NAMES = (
33
33
  GITHUB_ASSETS_STEMS = [Path(k).stem for k in GITHUB_ASSETS_NAMES]
34
34
 
35
35
 
36
- def is_url(url, check=True):
36
+ def is_url(url, check=False):
37
37
  """
38
38
  Validates if the given string is a URL and optionally checks if the URL exists online.
39
39
 
@@ -24,6 +24,7 @@ try:
24
24
  except ImportError:
25
25
  thop = None
26
26
 
27
+ # Version checks (all default to version>=min_version)
27
28
  TORCH_1_9 = check_version(torch.__version__, "1.9.0")
28
29
  TORCH_1_13 = check_version(torch.__version__, "1.13.0")
29
30
  TORCH_2_0 = check_version(torch.__version__, "2.0.0")
@@ -78,6 +78,7 @@ def run_ray_tune(
78
78
  "perspective": tune.uniform(0.0, 0.001), # image perspective (+/- fraction), range 0-0.001
79
79
  "flipud": tune.uniform(0.0, 1.0), # image flip up-down (probability)
80
80
  "fliplr": tune.uniform(0.0, 1.0), # image flip left-right (probability)
81
+ "bgr": tune.uniform(0.0, 1.0), # image channel BGR (probability)
81
82
  "mosaic": tune.uniform(0.0, 1.0), # image mixup (probability)
82
83
  "mixup": tune.uniform(0.0, 1.0), # image mixup (probability)
83
84
  "copy_paste": tune.uniform(0.0, 1.0), # segment copy-paste (probability)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.1.32
3
+ Version: 8.1.34
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -67,7 +67,7 @@ Requires-Dist: coremltools >=7.0 ; (platform_system != "Windows" and python_vers
67
67
  Requires-Dist: tensorflow <=2.13.1 ; (python_version <= "3.11") and extra == 'export'
68
68
  Requires-Dist: tensorflowjs >=3.9.0 ; (python_version <= "3.11") and extra == 'export'
69
69
  Provides-Extra: extra
70
- Requires-Dist: hub-sdk >=0.0.2 ; extra == 'extra'
70
+ Requires-Dist: hub-sdk >=0.0.5 ; extra == 'extra'
71
71
  Requires-Dist: ipython ; extra == 'extra'
72
72
  Requires-Dist: albumentations >=1.0.3 ; extra == 'extra'
73
73
  Requires-Dist: pycocotools >=2.0.7 ; extra == 'extra'
@@ -1,8 +1,8 @@
1
- ultralytics/__init__.py,sha256=olAbfZvhpDNTg98r-aFv6S42b7g-APSxekGTY6Cmayc,625
1
+ ultralytics/__init__.py,sha256=IMD6-azLvBn3uZcJVCpVQ8HmUsqkOnmY-Ih5trpM16M,625
2
2
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
3
3
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
4
- ultralytics/cfg/__init__.py,sha256=DGqNA0FT2zZnkI09S0ttagkKopP97dQ3TVHo2nA8yFQ,21262
5
- ultralytics/cfg/default.yaml,sha256=jc6iBzaQIg_uohd5hHPBtYp6gJIRtYqsChwYVTRjIkI,8091
4
+ ultralytics/cfg/__init__.py,sha256=4DFeQcRmsOUUJtP49MezHhWKlE52mUSHI7bKFglOq4k,21273
5
+ ultralytics/cfg/default.yaml,sha256=zHRtcoaFUp6LSHRFtOzaj1GCLmVHLS1ymNhnIffcWGM,8142
6
6
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=FyeuJT5CHq_9d4hlfAf0kpZlnbUMO0S--UJ1yIqcdKk,3134
7
7
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=YDsyFPI6F6-OQXLBM3hOXo3vADYREwZzmMQfJNdpWyM,1193
8
8
  ultralytics/cfg/datasets/DOTAv1.yaml,sha256=dxLUliHvJOW4q4vJRu5qIYVvNfjvXWB7GVh_Fhk--dM,1163
@@ -61,11 +61,11 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q
61
61
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
62
62
  ultralytics/data/__init__.py,sha256=A3i0n-2MnNzSdYqhM8xynBO2HJNKGSXWhPvRyO0_u1I,409
63
63
  ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
64
- ultralytics/data/augment.py,sha256=ORotqUN-qulkHxzoW5hFF_CZDlBhuaqGgAsiPUVIf4I,52000
64
+ ultralytics/data/augment.py,sha256=fKqaWKk-EEy-imtMD8fIzmPvH4gt4X7oEGDBWU5ocpQ,52177
65
65
  ultralytics/data/base.py,sha256=_rbKt666SKVUqQtoMyzmYMCEE4rDNryPM_uweRqE4hA,13363
66
66
  ultralytics/data/build.py,sha256=ktZEi8RJ93kYdLWBlX7R4Hx1M2XrpHl833CdC6Hav9I,6406
67
67
  ultralytics/data/converter.py,sha256=DJ5aSk7w-RBKqrrABUoOahP_Lgccn7ujJSmVufOkBps,16503
68
- ultralytics/data/dataset.py,sha256=aBia_ZUUqynstW2BRS1sGp2ggnhUkeUSZ_QC2nyJmvo,17616
68
+ ultralytics/data/dataset.py,sha256=0d0Q8ORYkDOQyaemsJAq_jvZckK_QLpky_K52KIkrCo,17695
69
69
  ultralytics/data/loaders.py,sha256=zrfxXQ5CMFXKTR_FUPk3oKHwXruKmoXfuJq4B0vcSyA,23045
70
70
  ultralytics/data/split_dota.py,sha256=1q2FZC0SE4deRpXUSbKTbUAjX9VeejUIFM2DBLF8Cco,9961
71
71
  ultralytics/data/utils.py,sha256=5R-GRSvyyrZ2yOnTZ4utuek3NSHYAsjW_4aURgMkeG8,29782
@@ -76,13 +76,13 @@ ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2
76
76
  ultralytics/data/explorer/gui/dash.py,sha256=a2s8oJKI8kqnWEcIyqCCzvIyvM_uZmfMaxrOdwmiq7k,10044
77
77
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
78
78
  ultralytics/engine/exporter.py,sha256=pwTQCo88Sd41NqYKx5Jp15fSqhFgaY3Z5gfLm8uzLR0,53882
79
- ultralytics/engine/model.py,sha256=SD9bLH30PGqnIxXT1uxgHu5xlrgca8jV2luErK9Fh8w,39194
79
+ ultralytics/engine/model.py,sha256=uemH3-CTwKTMbbiJnIqtReCNy-5TEK9VD737v3VIqxg,39435
80
80
  ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
81
- ultralytics/engine/results.py,sha256=njylLUuhZQE0ry9IPH0uN8zXV_q89ZfRqghNEF5PQw0,30246
81
+ ultralytics/engine/results.py,sha256=D4wZ9OsmBrEQWCkfOeUn_oagXLqu3SxRZYlpYkDDLH8,30667
82
82
  ultralytics/engine/trainer.py,sha256=C04cEN9v-kvR2dIIjgAN8dBAx8XSTChlQkDxAxfwTlU,34527
83
- ultralytics/engine/tuner.py,sha256=DzgTH3uk-VUUVoJ0K3tM4N5TJ6A3fMNlcDYr5g2I9lA,11763
83
+ ultralytics/engine/tuner.py,sha256=zttHrQkvXuUVTB7jmM4Z85GgIsQ2hjpW9YrMccrQ4wo,11829
84
84
  ultralytics/engine/validator.py,sha256=rcmJSGrsAfj-ryQktv6-fe0hAT7Z8CLNhUUUf0VsPYI,14645
85
- ultralytics/hub/__init__.py,sha256=hNKAjBFZAi8_ZYasurDpDMlEOmFw0GrXCV7kLb2A-zE,5068
85
+ ultralytics/hub/__init__.py,sha256=U4j-2QPdwSDlxw6RgFYnnJXOoIzLtwke4TkY2A8q4ws,5068
86
86
  ultralytics/hub/auth.py,sha256=hc97pJ01OfI8oQ7uw3ubKbiVCDSGxSGJHoo9W6hrrNw,5403
87
87
  ultralytics/hub/session.py,sha256=kFwufDIY7TeV79DdEQBKYrU5883WxgCrpJoTr1S5QuE,14649
88
88
  ultralytics/hub/utils.py,sha256=BoqNvi7yLUGrTNVEugFALhJkmpobW87gMVZ2dzDckRk,9734
@@ -139,7 +139,7 @@ ultralytics/models/yolo/segment/predict.py,sha256=xtA0ZZyuh9WVpX7zZFdAeCkWnxhQ30
139
139
  ultralytics/models/yolo/segment/train.py,sha256=aOQpDIptZfKSl9mFa6B-3W3QccMRlmBINBkI9K8-3sQ,2298
140
140
  ultralytics/models/yolo/segment/val.py,sha256=njiF6RWddS-HOWxVvlk5PXRw6UOgEt_HEOZVPF7rruQ,11745
141
141
  ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
142
- ultralytics/nn/autobackend.py,sha256=ldDepfx4mfQVgk4w6lAqhLtxng3kchJRNSb35qMrpUg,28836
142
+ ultralytics/nn/autobackend.py,sha256=Z9sDchChAqJ-sSQlUNwoGHTFxFRay1-i76MNUz0qZU8,28678
143
143
  ultralytics/nn/tasks.py,sha256=k6cl1H1hWtQXLxO_s5D6fa_DYyFzIekAMigh3lD36_A,42894
144
144
  ultralytics/nn/modules/__init__.py,sha256=Ga3MDpwX6DeI7VSH8joti5uleP4mgkQGolbe8RLZ2T8,2326
145
145
  ultralytics/nn/modules/block.py,sha256=n0ilrK3Vjdoc9-OwvY_Bp8Hw5N2BMHwgt-jfH4CzxFQ,25589
@@ -148,10 +148,10 @@ ultralytics/nn/modules/head.py,sha256=LonV2b7TrLx-zKhHQ2fCpKg7BfC-tUBtPlS5NNcfT_
148
148
  ultralytics/nn/modules/transformer.py,sha256=AxD9uURpCl-EqvXe3DiG6JW-pBzB16G-AahLdZ7yayo,17909
149
149
  ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQjhU,3196
150
150
  ultralytics/solutions/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
151
- ultralytics/solutions/ai_gym.py,sha256=AZruOCqBEuAZLG1Mg-OelbD_HgJIAmBkPGwHKs-DqwE,6029
151
+ ultralytics/solutions/ai_gym.py,sha256=LqOg7XKxuDlBAXFhSLQAIVTMxsQxoj7BumiHeVrjLMc,5696
152
152
  ultralytics/solutions/distance_calculation.py,sha256=N1QB5uDG_6sp8jD5uSwp_NTPmyP4UCqJm9G2lNrgpr8,6334
153
153
  ultralytics/solutions/heatmap.py,sha256=nOoAcXkJd1bhw8SNbqVTweVwIKrgdrZeUhMrvkNPhes,10928
154
- ultralytics/solutions/object_counter.py,sha256=yJzdLarrdnTMSJdpBf8mCVOJUvN-C_zzvkgTH23Fi3o,11262
154
+ ultralytics/solutions/object_counter.py,sha256=GGerPvjZ3Bzd53rUTWKwZ-GB8UX9DlW_Rki1PMUwVEc,11267
155
155
  ultralytics/solutions/speed_estimation.py,sha256=lvaU-F8f3V4KFVKFaNS7isIdYtMSFjh_zF9gl0Mals8,6714
156
156
  ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
157
157
  ultralytics/trackers/basetrack.py,sha256=-vBDD-Q9lsxfTMK2w9kuqWGrYbRMmaBCCEbGGyR53gE,3675
@@ -165,9 +165,9 @@ ultralytics/trackers/utils/matching.py,sha256=c_pthBfu9sWeMVYe-dSecdWcQxUey-mQT2
165
165
  ultralytics/utils/__init__.py,sha256=SN7wyoJP8zaDzqUoDIHTyV3tqprIgCTfT738kge0EPI,37500
166
166
  ultralytics/utils/autobatch.py,sha256=ygZ3f2ByIkcujB89ENcTnGWWnAQw5Pbg6nBuShg-5t4,3863
167
167
  ultralytics/utils/benchmarks.py,sha256=cj_sztcI-hzfvRX8vzfXo4wmQe2CuQUcDHBO9THBbco,18285
168
- ultralytics/utils/checks.py,sha256=eTgj9HBxo677iehOrkIaiCRfeERRJhWAHHGmIPYntvQ,27815
168
+ ultralytics/utils/checks.py,sha256=nzWNEfNci6rKC9x9ZYXRPJtK2vvvI7YKKZHROMUSsb0,27940
169
169
  ultralytics/utils/dist.py,sha256=3HeNbY2gp7vYhcvVhsrvTrQXpQmgT8tpmnzApf3eQRA,2267
170
- ultralytics/utils/downloads.py,sha256=KfGCmL1lwetMOZTYqvz-NkIdIA8fxFYxBGxF3-leZQ0,21495
170
+ ultralytics/utils/downloads.py,sha256=IVuwBodagj7GOGnzy868TBq4TC8O2d9TlV94_Uzi_KA,21496
171
171
  ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,816
172
172
  ultralytics/utils/files.py,sha256=TVfY0Wi5IsUc4YdsDzC0dAg-jAP5exYvwqB3VmXhDLY,6761
173
173
  ultralytics/utils/instance.py,sha256=fPClvPPtTk8VeXWiRv90DrFk1j1lTUKdYJtpZKUDDtA,15575
@@ -177,9 +177,9 @@ ultralytics/utils/ops.py,sha256=GFe_tx8MVKT56xelbAuQjiJ28ohpzARpD6BzGyJ1yMk,3326
177
177
  ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
178
178
  ultralytics/utils/plotting.py,sha256=YVJvEDozm1vm_Yf39jLPQ24Qst_f_lzEm-NeDjMElfQ,44705
179
179
  ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
180
- ultralytics/utils/torch_utils.py,sha256=LgArI6s5wUhoDR0RBe3CoUkAkq3WpAg0YQPcL__rr_o,25182
180
+ ultralytics/utils/torch_utils.py,sha256=0Uuv7xERiwZWBwD89L3MzGaqNAlxoW27bGLS5ymqVME,25237
181
181
  ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
182
- ultralytics/utils/tuner.py,sha256=DTgMvg4kxCos-du5mqTGW5lPSXs-NF3YuAL0qpI5nQc,6111
182
+ ultralytics/utils/tuner.py,sha256=bQE80f4p6PKb0iuSu4rSrXkS6LDGGUvGbyKB52nyVIA,6185
183
183
  ultralytics/utils/callbacks/__init__.py,sha256=YrWqC3BVVaTLob4iCPR6I36mUxIUOpPJW7B_LjT78Qw,214
184
184
  ultralytics/utils/callbacks/base.py,sha256=sOe3JvyBFmRwVZ8_Q03u7JwTeOOm9CI4s9-UEhnG0xA,5777
185
185
  ultralytics/utils/callbacks/clearml.py,sha256=K7bDf5tS8xL4KeFMkoVDL2kKkil3f4qoKy8KfZkD854,5897
@@ -191,9 +191,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
191
191
  ultralytics/utils/callbacks/raytune.py,sha256=6OgGNuC35F29lw8Dl_d0lue4-iBR6dqrBVQnIRQDx4E,632
192
192
  ultralytics/utils/callbacks/tensorboard.py,sha256=hRmWjbqdA4RNaLuSZznuDcpOBW-_-_Ga0u-B8UU-7ZI,4134
193
193
  ultralytics/utils/callbacks/wb.py,sha256=4QI81nHdzgwhXHlmTiRxLqunvkKakLXYUhHTUY1ZeHA,6635
194
- ultralytics-8.1.32.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
195
- ultralytics-8.1.32.dist-info/METADATA,sha256=jQD4IWf9SXoTyZXKMyjFuNp8SrMPGdITqqNoQkRG-QI,40330
196
- ultralytics-8.1.32.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
197
- ultralytics-8.1.32.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
198
- ultralytics-8.1.32.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
199
- ultralytics-8.1.32.dist-info/RECORD,,
194
+ ultralytics-8.1.34.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
195
+ ultralytics-8.1.34.dist-info/METADATA,sha256=6o1wyHfX25Agzzj4ZWF9xQaYX8aPleKXhw6pNgufjZ0,40330
196
+ ultralytics-8.1.34.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
197
+ ultralytics-8.1.34.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
198
+ ultralytics-8.1.34.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
199
+ ultralytics-8.1.34.dist-info/RECORD,,