ultralytics 8.1.30__py3-none-any.whl → 8.1.31__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.30"
3
+ __version__ = "8.1.31"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -30,8 +30,8 @@ from ultralytics.utils import (
30
30
  )
31
31
 
32
32
  # Define valid tasks and modes
33
- MODES = "train", "val", "predict", "export", "track", "benchmark"
34
- TASKS = "detect", "segment", "classify", "pose", "obb"
33
+ MODES = {"train", "val", "predict", "export", "track", "benchmark"}
34
+ TASKS = {"detect", "segment", "classify", "pose", "obb"}
35
35
  TASK2DATA = {
36
36
  "detect": "coco8.yaml",
37
37
  "segment": "coco8-seg.yaml",
@@ -93,8 +93,8 @@ CLI_HELP_MSG = f"""
93
93
  """
94
94
 
95
95
  # Define keys for arg type checks
96
- CFG_FLOAT_KEYS = "warmup_epochs", "box", "cls", "dfl", "degrees", "shear", "time"
97
- CFG_FRACTION_KEYS = (
96
+ CFG_FLOAT_KEYS = {"warmup_epochs", "box", "cls", "dfl", "degrees", "shear", "time"}
97
+ CFG_FRACTION_KEYS = {
98
98
  "dropout",
99
99
  "iou",
100
100
  "lr0",
@@ -118,8 +118,8 @@ CFG_FRACTION_KEYS = (
118
118
  "conf",
119
119
  "iou",
120
120
  "fraction",
121
- ) # fraction floats 0.0 - 1.0
122
- CFG_INT_KEYS = (
121
+ } # fraction floats 0.0 - 1.0
122
+ CFG_INT_KEYS = {
123
123
  "epochs",
124
124
  "patience",
125
125
  "batch",
@@ -133,8 +133,8 @@ CFG_INT_KEYS = (
133
133
  "workspace",
134
134
  "nbs",
135
135
  "save_period",
136
- )
137
- CFG_BOOL_KEYS = (
136
+ }
137
+ CFG_BOOL_KEYS = {
138
138
  "save",
139
139
  "exist_ok",
140
140
  "verbose",
@@ -169,7 +169,7 @@ CFG_BOOL_KEYS = (
169
169
  "nms",
170
170
  "profile",
171
171
  "multi_scale",
172
- )
172
+ }
173
173
 
174
174
 
175
175
  def cfg2dict(cfg):
@@ -219,33 +219,46 @@ def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, ove
219
219
  LOGGER.warning(f"WARNING ⚠️ 'name=model' automatically updated to 'name={cfg['name']}'.")
220
220
 
221
221
  # Type and Value checks
222
+ check_cfg(cfg)
223
+
224
+ # Return instance
225
+ return IterableSimpleNamespace(**cfg)
226
+
227
+
228
+ def check_cfg(cfg, hard=True):
229
+ """Check Ultralytics configuration argument types and values."""
222
230
  for k, v in cfg.items():
223
231
  if v is not None: # None values may be from optional args
224
232
  if k in CFG_FLOAT_KEYS and not isinstance(v, (int, float)):
225
- raise TypeError(
226
- f"'{k}={v}' is of invalid type {type(v).__name__}. "
227
- f"Valid '{k}' types are int (i.e. '{k}=0') or float (i.e. '{k}=0.5')"
228
- )
229
- elif k in CFG_FRACTION_KEYS:
230
- if not isinstance(v, (int, float)):
233
+ if hard:
231
234
  raise TypeError(
232
235
  f"'{k}={v}' is of invalid type {type(v).__name__}. "
233
236
  f"Valid '{k}' types are int (i.e. '{k}=0') or float (i.e. '{k}=0.5')"
234
237
  )
238
+ cfg[k] = float(v)
239
+ elif k in CFG_FRACTION_KEYS:
240
+ if not isinstance(v, (int, float)):
241
+ if hard:
242
+ raise TypeError(
243
+ f"'{k}={v}' is of invalid type {type(v).__name__}. "
244
+ f"Valid '{k}' types are int (i.e. '{k}=0') or float (i.e. '{k}=0.5')"
245
+ )
246
+ cfg[k] = float(v)
235
247
  if not (0.0 <= v <= 1.0):
236
248
  raise ValueError(f"'{k}={v}' is an invalid value. " f"Valid '{k}' values are between 0.0 and 1.0.")
237
249
  elif k in CFG_INT_KEYS and not isinstance(v, int):
238
- raise TypeError(
239
- f"'{k}={v}' is of invalid type {type(v).__name__}. " f"'{k}' must be an int (i.e. '{k}=8')"
240
- )
250
+ if hard:
251
+ raise TypeError(
252
+ f"'{k}={v}' is of invalid type {type(v).__name__}. " f"'{k}' must be an int (i.e. '{k}=8')"
253
+ )
254
+ cfg[k] = int(v)
241
255
  elif k in CFG_BOOL_KEYS and not isinstance(v, bool):
242
- raise TypeError(
243
- f"'{k}={v}' is of invalid type {type(v).__name__}. "
244
- f"'{k}' must be a bool (i.e. '{k}=True' or '{k}=False')"
245
- )
246
-
247
- # Return instance
248
- return IterableSimpleNamespace(**cfg)
256
+ if hard:
257
+ raise TypeError(
258
+ f"'{k}={v}' is of invalid type {type(v).__name__}. "
259
+ f"'{k}' must be a bool (i.e. '{k}=True' or '{k}=False')"
260
+ )
261
+ cfg[k] = bool(v)
249
262
 
250
263
 
251
264
  def get_save_dir(args, name=None):
@@ -464,10 +477,10 @@ def entrypoint(debug=""):
464
477
  overrides = {} # basic overrides, i.e. imgsz=320
465
478
  for a in merge_equals_args(args): # merge spaces around '=' sign
466
479
  if a.startswith("--"):
467
- LOGGER.warning(f"WARNING ⚠️ '{a}' does not require leading dashes '--', updating to '{a[2:]}'.")
480
+ LOGGER.warning(f"WARNING ⚠️ argument '{a}' does not require leading dashes '--', updating to '{a[2:]}'.")
468
481
  a = a[2:]
469
482
  if a.endswith(","):
470
- LOGGER.warning(f"WARNING ⚠️ '{a}' does not require trailing comma ',', updating to '{a[:-1]}'.")
483
+ LOGGER.warning(f"WARNING ⚠️ argument '{a}' does not require trailing comma ',', updating to '{a[:-1]}'.")
471
484
  a = a[:-1]
472
485
  if "=" in a:
473
486
  try:
@@ -504,7 +517,7 @@ def entrypoint(debug=""):
504
517
  mode = overrides.get("mode")
505
518
  if mode is None:
506
519
  mode = DEFAULT_CFG.mode or "predict"
507
- LOGGER.warning(f"WARNING ⚠️ 'mode' is missing. Valid modes are {MODES}. Using default 'mode={mode}'.")
520
+ LOGGER.warning(f"WARNING ⚠️ 'mode' argument is missing. Valid modes are {MODES}. Using default 'mode={mode}'.")
508
521
  elif mode not in MODES:
509
522
  raise ValueError(f"Invalid 'mode={mode}'. Valid modes are {MODES}.\n{CLI_HELP_MSG}")
510
523
 
@@ -520,7 +533,7 @@ def entrypoint(debug=""):
520
533
  model = overrides.pop("model", DEFAULT_CFG.model)
521
534
  if model is None:
522
535
  model = "yolov8n.pt"
523
- LOGGER.warning(f"WARNING ⚠️ 'model' is missing. Using default 'model={model}'.")
536
+ LOGGER.warning(f"WARNING ⚠️ 'model' argument is missing. Using default 'model={model}'.")
524
537
  overrides["model"] = model
525
538
  stem = Path(model).stem.lower()
526
539
  if "rtdetr" in stem: # guess architecture
@@ -554,15 +567,15 @@ def entrypoint(debug=""):
554
567
  # Mode
555
568
  if mode in ("predict", "track") and "source" not in overrides:
556
569
  overrides["source"] = DEFAULT_CFG.source or ASSETS
557
- LOGGER.warning(f"WARNING ⚠️ 'source' is missing. Using default 'source={overrides['source']}'.")
570
+ LOGGER.warning(f"WARNING ⚠️ 'source' argument is missing. Using default 'source={overrides['source']}'.")
558
571
  elif mode in ("train", "val"):
559
572
  if "data" not in overrides and "resume" not in overrides:
560
573
  overrides["data"] = DEFAULT_CFG.data or TASK2DATA.get(task or DEFAULT_CFG.task, DEFAULT_CFG.data)
561
- LOGGER.warning(f"WARNING ⚠️ 'data' is missing. Using default 'data={overrides['data']}'.")
574
+ LOGGER.warning(f"WARNING ⚠️ 'data' argument is missing. Using default 'data={overrides['data']}'.")
562
575
  elif mode == "export":
563
576
  if "format" not in overrides:
564
577
  overrides["format"] = DEFAULT_CFG.format or "torchscript"
565
- LOGGER.warning(f"WARNING ⚠️ 'format' is missing. Using default 'format={overrides['format']}'.")
578
+ LOGGER.warning(f"WARNING ⚠️ 'format' argument is missing. Using default 'format={overrides['format']}'.")
566
579
 
567
580
  # Run command in python
568
581
  getattr(model, mode)(**overrides) # default args from model
ultralytics/data/build.py CHANGED
@@ -129,7 +129,7 @@ def check_source(source):
129
129
  webcam, screenshot, from_img, in_memory, tensor = False, False, False, False, False
130
130
  if isinstance(source, (str, int, Path)): # int for local usb camera
131
131
  source = str(source)
132
- is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS)
132
+ is_file = Path(source).suffix[1:] in (IMG_FORMATS | VID_FORMATS)
133
133
  is_url = source.lower().startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://"))
134
134
  webcam = source.isnumeric() or source.endswith(".streams") or (is_url and not is_file)
135
135
  screenshot = source.lower() == "screen"
ultralytics/data/utils.py CHANGED
@@ -35,8 +35,8 @@ from ultralytics.utils.downloads import download, safe_download, unzip_file
35
35
  from ultralytics.utils.ops import segments2boxes
36
36
 
37
37
  HELP_URL = "See https://docs.ultralytics.com/datasets/detect for dataset formatting guidance."
38
- IMG_FORMATS = "bmp", "dng", "jpeg", "jpg", "mpo", "png", "tif", "tiff", "webp", "pfm" # image suffixes
39
- VID_FORMATS = "asf", "avi", "gif", "m4v", "mkv", "mov", "mp4", "mpeg", "mpg", "ts", "wmv", "webm" # video suffixes
38
+ IMG_FORMATS = {"bmp", "dng", "jpeg", "jpg", "mpo", "png", "tif", "tiff", "webp", "pfm"} # image suffixes
39
+ VID_FORMATS = {"asf", "avi", "gif", "m4v", "mkv", "mov", "mp4", "mpeg", "mpg", "ts", "wmv", "webm"} # video suffixes
40
40
  PIN_MEMORY = str(os.getenv("PIN_MEMORY", True)).lower() == "true" # global pin_memory for dataloaders
41
41
 
42
42
 
@@ -385,14 +385,12 @@ class Results(SimpleClass):
385
385
  BGR=True,
386
386
  )
387
387
 
388
- def tojson(self, normalize=False):
389
- """Convert the object to JSON format."""
388
+ def summary(self, normalize=False):
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 `tojson` yet.")
391
+ LOGGER.warning("Warning: Classify task do not support `summary` and `tojson` yet.")
392
392
  return
393
393
 
394
- import json
395
-
396
394
  # Create list of detection dictionaries
397
395
  results = []
398
396
  data = self.boxes.data.cpu().tolist()
@@ -413,8 +411,13 @@ class Results(SimpleClass):
413
411
  result["keypoints"] = {"x": (x / w).tolist(), "y": (y / h).tolist(), "visible": visible.tolist()}
414
412
  results.append(result)
415
413
 
416
- # Convert detections to JSON
417
- return json.dumps(results, indent=2)
414
+ return results
415
+
416
+ def tojson(self, normalize=False):
417
+ """Convert the results to JSON format."""
418
+ import json
419
+
420
+ return json.dumps(self.summary(normalize=normalize), indent=2)
418
421
 
419
422
 
420
423
  class Boxes(BaseTensor):
@@ -73,7 +73,7 @@ class ClassificationTrainer(BaseTrainer):
73
73
  elif model in torchvision.models.__dict__:
74
74
  self.model = torchvision.models.__dict__[model](weights="IMAGENET1K_V1" if self.args.pretrained else None)
75
75
  else:
76
- FileNotFoundError(f"ERROR: model={model} not found locally or online. Please check model name.")
76
+ raise FileNotFoundError(f"ERROR: model={model} not found locally or online. Please check model name.")
77
77
  ClassificationModel.reshape_outputs(self.model, self.data["nc"])
78
78
 
79
79
  return ckpt
@@ -509,14 +509,9 @@ class AutoBackend(nn.Module):
509
509
  # NCNN
510
510
  elif self.ncnn:
511
511
  mat_in = self.pyncnn.Mat(im[0].cpu().numpy())
512
- ex = self.net.create_extractor()
513
- input_names, output_names = self.net.input_names(), self.net.output_names()
514
- ex.input(input_names[0], mat_in)
515
- y = []
516
- for output_name in output_names:
517
- mat_out = self.pyncnn.Mat()
518
- ex.extract(output_name, mat_out)
519
- y.append(np.array(mat_out)[None])
512
+ with self.net.create_extractor() as ex:
513
+ ex.input(self.net.input_names()[0], mat_in)
514
+ y = [np.array(ex.extract(x)[1])[None] for x in self.net.output_names()]
520
515
 
521
516
  # NVIDIA Triton Inference Server
522
517
  elif self.triton:
ultralytics/nn/tasks.py CHANGED
@@ -560,7 +560,8 @@ class WorldModel(DetectionModel):
560
560
 
561
561
  def __init__(self, cfg="yolov8s-world.yaml", ch=3, nc=None, verbose=True):
562
562
  """Initialize YOLOv8 world model with given config and parameters."""
563
- self.txt_feats = torch.randn(1, nc or 80, 512) # placeholder
563
+ self.txt_feats = torch.randn(1, nc or 80, 512) # features placeholder
564
+ self.clip_model = None # CLIP model placeholder
564
565
  super().__init__(cfg=cfg, ch=ch, nc=nc, verbose=verbose)
565
566
 
566
567
  def set_classes(self, text):
@@ -571,10 +572,11 @@ class WorldModel(DetectionModel):
571
572
  check_requirements("git+https://github.com/openai/CLIP.git")
572
573
  import clip
573
574
 
574
- model, _ = clip.load("ViT-B/32")
575
- device = next(model.parameters()).device
575
+ if not self.clip_model:
576
+ self.clip_model = clip.load("ViT-B/32")[0]
577
+ device = next(self.clip_model.parameters()).device
576
578
  text_token = clip.tokenize(text).to(device)
577
- txt_feats = model.encode_text(text_token).to(dtype=torch.float32)
579
+ txt_feats = self.clip_model.encode_text(text_token).to(dtype=torch.float32)
578
580
  txt_feats = txt_feats / txt_feats.norm(p=2, dim=-1, keepdim=True)
579
581
  self.txt_feats = txt_feats.reshape(-1, len(text), txt_feats.shape[-1]).detach()
580
582
  self.model[-1].nc = len(text)
@@ -841,7 +843,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
841
843
  args[j] = locals()[a] if a in locals() else ast.literal_eval(a)
842
844
 
843
845
  n = n_ = max(round(n * depth), 1) if n > 1 else n # depth gain
844
- if m in (
846
+ if m in {
845
847
  Classify,
846
848
  Conv,
847
849
  ConvTranspose,
@@ -867,7 +869,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
867
869
  DWConvTranspose2d,
868
870
  C3x,
869
871
  RepC3,
870
- ):
872
+ }:
871
873
  c1, c2 = ch[f], args[0]
872
874
  if c2 != nc: # if c2 not equal to number of classes (i.e. for Classify() output)
873
875
  c2 = make_divisible(min(c2, max_channels) * width, 8)
@@ -883,7 +885,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
883
885
  n = 1
884
886
  elif m is AIFI:
885
887
  args = [ch[f], *args]
886
- elif m in (HGStem, HGBlock):
888
+ elif m in {HGStem, HGBlock}:
887
889
  c1, cm, c2 = ch[f], args[0], args[1]
888
890
  args = [c1, cm, c2, *args[2:]]
889
891
  if m is HGBlock:
@@ -895,7 +897,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
895
897
  args = [ch[f]]
896
898
  elif m is Concat:
897
899
  c2 = sum(ch[x] for x in f)
898
- elif m in (Detect, WorldDetect, Segment, Pose, OBB, ImagePoolingAttn):
900
+ elif m in {Detect, WorldDetect, Segment, Pose, OBB, ImagePoolingAttn}:
899
901
  args.append([ch[x] for x in f])
900
902
  if m is Segment:
901
903
  args[2] = make_divisible(min(args[2], max_channels) * width, 8)
@@ -978,7 +980,7 @@ def guess_model_task(model):
978
980
  def cfg2task(cfg):
979
981
  """Guess from YAML dictionary."""
980
982
  m = cfg["head"][-1][-2].lower() # output module name
981
- if m in ("classify", "classifier", "cls", "fc"):
983
+ if m in {"classify", "classifier", "cls", "fc"}:
982
984
  return "classify"
983
985
  if m == "detect":
984
986
  return "detect"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.1.30
3
+ Version: 8.1.31
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -1,7 +1,7 @@
1
- ultralytics/__init__.py,sha256=y3rrZQyZ7nf8yoKZN7enFZlfdqblvoOfLg-fRMhep5Q,625
1
+ ultralytics/__init__.py,sha256=rDgevqxLqhO8NJR6otxXOqpbVQbtuhyXvkKoXK1rhL8,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=Dk0UPabXlPX5iCDzqf8MIxCNtY7HMhVRcd_B2tZw9_w,20767
4
+ ultralytics/cfg/__init__.py,sha256=rNlOdOpORYyqCj97ePycRxGr-gVvmmr2KOVFdXE262Y,21258
5
5
  ultralytics/cfg/default.yaml,sha256=jc6iBzaQIg_uohd5hHPBtYp6gJIRtYqsChwYVTRjIkI,8091
6
6
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=FyeuJT5CHq_9d4hlfAf0kpZlnbUMO0S--UJ1yIqcdKk,3134
7
7
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=YDsyFPI6F6-OQXLBM3hOXo3vADYREwZzmMQfJNdpWyM,1193
@@ -62,12 +62,12 @@ ultralytics/data/__init__.py,sha256=A3i0n-2MnNzSdYqhM8xynBO2HJNKGSXWhPvRyO0_u1I,
62
62
  ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
63
63
  ultralytics/data/augment.py,sha256=ORotqUN-qulkHxzoW5hFF_CZDlBhuaqGgAsiPUVIf4I,52000
64
64
  ultralytics/data/base.py,sha256=_rbKt666SKVUqQtoMyzmYMCEE4rDNryPM_uweRqE4hA,13363
65
- ultralytics/data/build.py,sha256=z3hirjrw5BeLhqz3fRWQvPAS-alaJKY5KdfVnmTuiug,6406
65
+ ultralytics/data/build.py,sha256=ktZEi8RJ93kYdLWBlX7R4Hx1M2XrpHl833CdC6Hav9I,6406
66
66
  ultralytics/data/converter.py,sha256=DJ5aSk7w-RBKqrrABUoOahP_Lgccn7ujJSmVufOkBps,16503
67
67
  ultralytics/data/dataset.py,sha256=aBia_ZUUqynstW2BRS1sGp2ggnhUkeUSZ_QC2nyJmvo,17616
68
68
  ultralytics/data/loaders.py,sha256=zrfxXQ5CMFXKTR_FUPk3oKHwXruKmoXfuJq4B0vcSyA,23045
69
69
  ultralytics/data/split_dota.py,sha256=1q2FZC0SE4deRpXUSbKTbUAjX9VeejUIFM2DBLF8Cco,9961
70
- ultralytics/data/utils.py,sha256=VBmVJFUyR9M8Wu7FQ0QCLS8bIFk0KHT2IH8oqePZOhs,29778
70
+ ultralytics/data/utils.py,sha256=5R-GRSvyyrZ2yOnTZ4utuek3NSHYAsjW_4aURgMkeG8,29782
71
71
  ultralytics/data/explorer/__init__.py,sha256=-Y3m1ZedepOQUv_KW82zaGxvU_PSHcuwUTFqG9BhAr4,113
72
72
  ultralytics/data/explorer/explorer.py,sha256=9i_TlOfC87m2_tL4UR6ZjRb_T_mZNCMLIYMVWtD4pkY,18782
73
73
  ultralytics/data/explorer/utils.py,sha256=a6ugY8rKpFM8dIRcUwRyjRkRJ-zXEwe-NiJr6CLVlus,7041
@@ -77,7 +77,7 @@ ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDT
77
77
  ultralytics/engine/exporter.py,sha256=pwTQCo88Sd41NqYKx5Jp15fSqhFgaY3Z5gfLm8uzLR0,53882
78
78
  ultralytics/engine/model.py,sha256=SD9bLH30PGqnIxXT1uxgHu5xlrgca8jV2luErK9Fh8w,39194
79
79
  ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
80
- ultralytics/engine/results.py,sha256=SY3sn2OBMfAFaPoaDKo0Wu-jSi7avISYohjtR_bur9M,30120
80
+ ultralytics/engine/results.py,sha256=njylLUuhZQE0ry9IPH0uN8zXV_q89ZfRqghNEF5PQw0,30246
81
81
  ultralytics/engine/trainer.py,sha256=C04cEN9v-kvR2dIIjgAN8dBAx8XSTChlQkDxAxfwTlU,34527
82
82
  ultralytics/engine/tuner.py,sha256=DzgTH3uk-VUUVoJ0K3tM4N5TJ6A3fMNlcDYr5g2I9lA,11763
83
83
  ultralytics/engine/validator.py,sha256=rcmJSGrsAfj-ryQktv6-fe0hAT7Z8CLNhUUUf0VsPYI,14645
@@ -119,7 +119,7 @@ ultralytics/models/yolo/__init__.py,sha256=2mwHIBLgpsrrVgXPJiAWGQ1vIUIEdUT_fygac
119
119
  ultralytics/models/yolo/model.py,sha256=88d-Jf2MBb8daLawuMtViegljifIwb4C0z20dFvbUVQ,3939
120
120
  ultralytics/models/yolo/classify/__init__.py,sha256=t-4pUHmgI2gjhc-l3bqNEcEtKD1dO40nD4Vc6Y2xD6o,355
121
121
  ultralytics/models/yolo/classify/predict.py,sha256=wFY4GIlWxe7idMndEw1RnDI63o53MTfiHKz0s2fOjAY,2513
122
- ultralytics/models/yolo/classify/train.py,sha256=-DOLOM7OCN3RvH6iv8k7mMh7BDehsfJCO2LiwXMM0vU,6832
122
+ ultralytics/models/yolo/classify/train.py,sha256=BY_tGilj0w0OEgdvA9FTa-_lIcdt1w9lOGVFEai9yzg,6838
123
123
  ultralytics/models/yolo/classify/val.py,sha256=EP_hjRExXgdI4xojTKvj_YeNdaz_i2CoUzorl55r0OA,4861
124
124
  ultralytics/models/yolo/detect/__init__.py,sha256=JR8gZJWn7wMBbh-0j_073nxJVZTMFZVWTOG5Wnvk6w0,229
125
125
  ultralytics/models/yolo/detect/predict.py,sha256=_a9vH3DmKFY6eeztFTdj3nkfu_MKG6n7zb5rRKGjs9I,1510
@@ -138,8 +138,8 @@ ultralytics/models/yolo/segment/predict.py,sha256=xtA0ZZyuh9WVpX7zZFdAeCkWnxhQ30
138
138
  ultralytics/models/yolo/segment/train.py,sha256=aOQpDIptZfKSl9mFa6B-3W3QccMRlmBINBkI9K8-3sQ,2298
139
139
  ultralytics/models/yolo/segment/val.py,sha256=njiF6RWddS-HOWxVvlk5PXRw6UOgEt_HEOZVPF7rruQ,11745
140
140
  ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
141
- ultralytics/nn/autobackend.py,sha256=guDUpClKObK2Bwl4NH0C3EDVl3UEOvqRn1mr3c3j9Gs,29021
142
- ultralytics/nn/tasks.py,sha256=JuXiYgnZBDC51MNTsaeSjz8H1ohio1Mx58l0EjdTm8c,42674
141
+ ultralytics/nn/autobackend.py,sha256=ldDepfx4mfQVgk4w6lAqhLtxng3kchJRNSb35qMrpUg,28836
142
+ ultralytics/nn/tasks.py,sha256=G0OrHmSN4QW2SlkmGSfjXzXmOWZUiCQ4QKPHb0_9SwM,42806
143
143
  ultralytics/nn/modules/__init__.py,sha256=Ga3MDpwX6DeI7VSH8joti5uleP4mgkQGolbe8RLZ2T8,2326
144
144
  ultralytics/nn/modules/block.py,sha256=n0ilrK3Vjdoc9-OwvY_Bp8Hw5N2BMHwgt-jfH4CzxFQ,25589
145
145
  ultralytics/nn/modules/conv.py,sha256=ndUYNL2f9DK41y1vVbtEusMByXy-LMMsBKlcWjRQ9Z8,12722
@@ -190,9 +190,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
190
190
  ultralytics/utils/callbacks/raytune.py,sha256=6OgGNuC35F29lw8Dl_d0lue4-iBR6dqrBVQnIRQDx4E,632
191
191
  ultralytics/utils/callbacks/tensorboard.py,sha256=hRmWjbqdA4RNaLuSZznuDcpOBW-_-_Ga0u-B8UU-7ZI,4134
192
192
  ultralytics/utils/callbacks/wb.py,sha256=4QI81nHdzgwhXHlmTiRxLqunvkKakLXYUhHTUY1ZeHA,6635
193
- ultralytics-8.1.30.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
194
- ultralytics-8.1.30.dist-info/METADATA,sha256=jcr1FoTfvyZJje_RUgRa9cLOykDJET_PeiwWrYg70Ys,40330
195
- ultralytics-8.1.30.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
196
- ultralytics-8.1.30.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
197
- ultralytics-8.1.30.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
198
- ultralytics-8.1.30.dist-info/RECORD,,
193
+ ultralytics-8.1.31.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
194
+ ultralytics-8.1.31.dist-info/METADATA,sha256=e4f4Z8r6jRG5M_RoEfX0BDtwKwAx5S0HJEOLZDgZDZM,40330
195
+ ultralytics-8.1.31.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
196
+ ultralytics-8.1.31.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
197
+ ultralytics-8.1.31.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
198
+ ultralytics-8.1.31.dist-info/RECORD,,