ultralytics 8.2.10__py3-none-any.whl → 8.2.12__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.2.10"
3
+ __version__ = "8.2.12"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
ultralytics/data/base.py CHANGED
@@ -170,7 +170,7 @@ class BaseDataset(Dataset):
170
170
  if self.augment:
171
171
  self.ims[i], self.im_hw0[i], self.im_hw[i] = im, (h0, w0), im.shape[:2] # im, hw_original, hw_resized
172
172
  self.buffer.append(i)
173
- if len(self.buffer) >= self.max_buffer_length:
173
+ if 1 < len(self.buffer) >= self.max_buffer_length: # prevent empty buffer
174
174
  j = self.buffer.pop(0)
175
175
  if self.cache != "ram":
176
176
  self.ims[j], self.im_hw0[j], self.im_hw[j] = None, None, None
ultralytics/data/build.py CHANGED
@@ -21,7 +21,7 @@ from ultralytics.data.loaders import (
21
21
  autocast_list,
22
22
  )
23
23
  from ultralytics.data.utils import IMG_FORMATS, PIN_MEMORY, VID_FORMATS
24
- from ultralytics.utils import LINUX, NUM_THREADS, RANK, colorstr
24
+ from ultralytics.utils import LINUX, RANK, colorstr
25
25
  from ultralytics.utils.checks import check_file
26
26
 
27
27
 
@@ -79,8 +79,6 @@ def seed_worker(worker_id): # noqa
79
79
  worker_seed = torch.initial_seed() % 2**32
80
80
  np.random.seed(worker_seed)
81
81
  random.seed(worker_seed)
82
- if LINUX and hasattr(os, "sched_setaffinity"): # unsupported on macOS and Windows
83
- os.sched_setaffinity(0, range(NUM_THREADS)) # fix https://github.com/ultralytics/ultralytics/pull/11195
84
82
 
85
83
 
86
84
  def build_yolo_dataset(cfg, img_path, batch, data, mode="train", rect=False, stride=32, multi_modal=False):
@@ -88,7 +88,7 @@ from ultralytics.utils import (
88
88
  yaml_save,
89
89
  )
90
90
  from ultralytics.utils.checks import check_imgsz, check_is_path_safe, check_requirements, check_version
91
- from ultralytics.utils.downloads import attempt_download_asset, get_github_assets
91
+ from ultralytics.utils.downloads import attempt_download_asset, get_github_assets, safe_download
92
92
  from ultralytics.utils.files import file_size, spaces_in_path
93
93
  from ultralytics.utils.ops import Profile
94
94
  from ultralytics.utils.torch_utils import TORCH_1_13, get_latest_opset, select_device, smart_inference_mode
@@ -200,6 +200,8 @@ class Exporter:
200
200
  self.args.half = False
201
201
  assert not self.args.dynamic, "half=True not compatible with dynamic=True, i.e. use only one."
202
202
  self.imgsz = check_imgsz(self.args.imgsz, stride=model.stride, min_dim=2) # check image size
203
+ if self.args.int8 and (engine or xml):
204
+ self.args.dynamic = True # enforce dynamic to export TensorRT INT8; ensures ONNX is dynamic
203
205
  if self.args.optimize:
204
206
  assert not ncnn, "optimize=True not compatible with format='ncnn', i.e. use optimize=False"
205
207
  assert self.device.type == "cpu", "optimize=True not compatible with cuda devices, i.e. use device='cpu'"
@@ -349,12 +351,12 @@ class Exporter:
349
351
  task=self.model.task,
350
352
  imgsz=self.imgsz[0],
351
353
  augment=False,
352
- batch_size=self.args.batch,
354
+ batch_size=self.args.batch * 2, # NOTE TensorRT INT8 calibration should use 2x batch size
353
355
  )
354
356
  n = len(dataset)
355
357
  if n < 300:
356
358
  LOGGER.warning(f"{prefix} WARNING ⚠️ >300 images recommended for INT8 calibration, found {n} images.")
357
- return build_dataloader(dataset, batch=self.args.batch, workers=0) # required for batch loading
359
+ return build_dataloader(dataset, batch=self.args.batch * 2, workers=0) # required for batch loading
358
360
 
359
361
  @try_export
360
362
  def export_torchscript(self, prefix=colorstr("TorchScript:")):
@@ -533,7 +535,7 @@ class Exporter:
533
535
  f_ts = self.file.with_suffix(".torchscript")
534
536
 
535
537
  name = Path("pnnx.exe" if WINDOWS else "pnnx") # PNNX filename
536
- pnnx = name if name.is_file() else ROOT / name
538
+ pnnx = name if name.is_file() else (ROOT / name)
537
539
  if not pnnx.is_file():
538
540
  LOGGER.warning(
539
541
  f"{prefix} WARNING ⚠️ PNNX not found. Attempting to download binary file from "
@@ -542,19 +544,19 @@ class Exporter:
542
544
  )
543
545
  system = "macos" if MACOS else "windows" if WINDOWS else "linux-aarch64" if ARM64 else "linux"
544
546
  try:
545
- _, assets = get_github_assets(repo="pnnx/pnnx")
546
- url = [x for x in assets if f"{system}.zip" in x][0]
547
- assert url, "Unable to retrieve PNNX repo assets"
547
+ release, assets = get_github_assets(repo="pnnx/pnnx")
548
+ asset = [x for x in assets if f"{system}.zip" in x][0]
549
+ assert isinstance(asset, str), "Unable to retrieve PNNX repo assets" # i.e. pnnx-20240410-macos.zip
550
+ LOGGER.info(f"{prefix} successfully found latest PNNX asset file {asset}")
548
551
  except Exception as e:
549
- url = f"https://github.com/pnnx/pnnx/releases/download/20240410/pnnx-20240410-{system}.zip"
550
- LOGGER.warning(f"{prefix} WARNING ⚠️ PNNX GitHub assets not found: {e}, using default {url}")
551
- asset = attempt_download_asset(url, repo="pnnx/pnnx", release="latest")
552
- if check_is_path_safe(Path.cwd(), asset): # avoid path traversal security vulnerability
553
- unzip_dir = Path(asset).with_suffix("")
552
+ release = "20240410"
553
+ asset = f"pnnx-{release}-{system}.zip"
554
+ LOGGER.warning(f"{prefix} WARNING ⚠️ PNNX GitHub assets not found: {e}, using default {asset}")
555
+ unzip_dir = safe_download(f"https://github.com/pnnx/pnnx/releases/download/{release}/{asset}", delete=True)
556
+ if check_is_path_safe(Path.cwd(), unzip_dir): # avoid path traversal security vulnerability
554
557
  (unzip_dir / name).rename(pnnx) # move binary to ROOT
555
- shutil.rmtree(unzip_dir) # delete unzip dir
556
- Path(asset).unlink() # delete zip
557
558
  pnnx.chmod(0o777) # set read, write, and execute permissions for everyone
559
+ shutil.rmtree(unzip_dir) # delete unzip dir
558
560
 
559
561
  ncnn_args = [
560
562
  f'ncnnparam={f / "model.ncnn.param"}',
@@ -679,6 +681,7 @@ class Exporter:
679
681
  import tensorrt as trt # noqa
680
682
  check_version(trt.__version__, "7.0.0", hard=True) # require tensorrt>=7.0.0
681
683
 
684
+ # Setup and checks
682
685
  LOGGER.info(f"\n{prefix} starting export with TensorRT {trt.__version__}...")
683
686
  is_trt10 = int(trt.__version__.split(".")[0]) >= 10 # is TensorRT >= 10
684
687
  assert Path(f_onnx).exists(), f"failed to export ONNX file: {f_onnx}"
@@ -687,6 +690,7 @@ class Exporter:
687
690
  if self.args.verbose:
688
691
  logger.min_severity = trt.Logger.Severity.VERBOSE
689
692
 
693
+ # Engine builder
690
694
  builder = trt.Builder(logger)
691
695
  config = builder.create_builder_config()
692
696
  workspace = int(self.args.workspace * (1 << 30))
@@ -696,10 +700,14 @@ class Exporter:
696
700
  config.max_workspace_size = workspace
697
701
  flag = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
698
702
  network = builder.create_network(flag)
703
+ half = builder.platform_has_fast_fp16 and self.args.half
704
+ int8 = builder.platform_has_fast_int8 and self.args.int8
705
+ # Read ONNX file
699
706
  parser = trt.OnnxParser(network, logger)
700
707
  if not parser.parse_from_file(f_onnx):
701
708
  raise RuntimeError(f"failed to load ONNX file: {f_onnx}")
702
709
 
710
+ # Network inputs
703
711
  inputs = [network.get_input(i) for i in range(network.num_inputs)]
704
712
  outputs = [network.get_output(i) for i in range(network.num_outputs)]
705
713
  for inp in inputs:
@@ -713,15 +721,67 @@ class Exporter:
713
721
  LOGGER.warning(f"{prefix} WARNING ⚠️ 'dynamic=True' model requires max batch size, i.e. 'batch=16'")
714
722
  profile = builder.create_optimization_profile()
715
723
  min_shape = (1, shape[1], 32, 32) # minimum input shape
716
- opt_shape = (max(1, shape[0] // 2), *shape[1:]) # optimal input shape
717
724
  max_shape = (*shape[:2], *(max(1, self.args.workspace) * d for d in shape[2:])) # max input shape
718
725
  for inp in inputs:
719
- profile.set_shape(inp.name, min_shape, opt_shape, max_shape)
726
+ profile.set_shape(inp.name, min=min_shape, opt=shape, max=max_shape)
720
727
  config.add_optimization_profile(profile)
721
728
 
722
- half = builder.platform_has_fast_fp16 and self.args.half
723
- LOGGER.info(f"{prefix} building FP{16 if half else 32} engine as {f}")
724
- if half:
729
+ LOGGER.info(f"{prefix} building {'INT8' if int8 else 'FP' + ('16' if half else '32')} engine as {f}")
730
+ if int8:
731
+ config.set_flag(trt.BuilderFlag.INT8)
732
+ config.set_calibration_profile(profile)
733
+ config.profiling_verbosity = trt.ProfilingVerbosity.DETAILED
734
+
735
+ class EngineCalibrator(trt.IInt8Calibrator):
736
+ def __init__(
737
+ self,
738
+ dataset, # ultralytics.data.build.InfiniteDataLoader
739
+ batch: int,
740
+ cache: str = "",
741
+ ) -> None:
742
+ trt.IInt8Calibrator.__init__(self)
743
+ self.dataset = dataset
744
+ self.data_iter = iter(dataset)
745
+ self.algo = trt.CalibrationAlgoType.ENTROPY_CALIBRATION_2
746
+ self.batch = batch
747
+ self.cache = Path(cache)
748
+
749
+ def get_algorithm(self) -> trt.CalibrationAlgoType:
750
+ """Get the calibration algorithm to use."""
751
+ return self.algo
752
+
753
+ def get_batch_size(self) -> int:
754
+ """Get the batch size to use for calibration."""
755
+ return self.batch or 1
756
+
757
+ def get_batch(self, names) -> list:
758
+ """Get the next batch to use for calibration, as a list of device memory pointers."""
759
+ try:
760
+ im0s = next(self.data_iter)["img"] / 255.0
761
+ im0s = im0s.to("cuda") if im0s.device.type == "cpu" else im0s
762
+ return [int(im0s.data_ptr())]
763
+ except StopIteration:
764
+ # Return [] or None, signal to TensorRT there is no calibration data remaining
765
+ return None
766
+
767
+ def read_calibration_cache(self) -> bytes:
768
+ """Use existing cache instead of calibrating again, otherwise, implicitly return None."""
769
+ if self.cache.exists() and self.cache.suffix == ".cache":
770
+ return self.cache.read_bytes()
771
+
772
+ def write_calibration_cache(self, cache) -> None:
773
+ """Write calibration cache to disk."""
774
+ _ = self.cache.write_bytes(cache)
775
+
776
+ # Load dataset w/ builder (for batching) and calibrate
777
+ dataset = self.get_int8_calibration_dataloader(prefix)
778
+ config.int8_calibrator = EngineCalibrator(
779
+ dataset=dataset,
780
+ batch=2 * self.args.batch,
781
+ cache=self.file.with_suffix(".cache"),
782
+ )
783
+
784
+ elif half:
725
785
  config.set_flag(trt.BuilderFlag.FP16)
726
786
 
727
787
  # Free CUDA memory
@@ -15,7 +15,7 @@ class YOLO(Model):
15
15
  """Initialize YOLO model, switching to YOLOWorld if model filename contains '-world'."""
16
16
  path = Path(model)
17
17
  if "-world" in path.stem and path.suffix in {".pt", ".yaml", ".yml"}: # if YOLOWorld PyTorch model
18
- new_instance = YOLOWorld(path)
18
+ new_instance = YOLOWorld(path, verbose=verbose)
19
19
  self.__class__ = type(new_instance)
20
20
  self.__dict__ = new_instance.__dict__
21
21
  else:
@@ -62,14 +62,14 @@ class YOLO(Model):
62
62
  class YOLOWorld(Model):
63
63
  """YOLO-World object detection model."""
64
64
 
65
- def __init__(self, model="yolov8s-world.pt") -> None:
65
+ def __init__(self, model="yolov8s-world.pt", verbose=False) -> None:
66
66
  """
67
67
  Initializes the YOLOv8-World model with the given pre-trained model file. Supports *.pt and *.yaml formats.
68
68
 
69
69
  Args:
70
70
  model (str | Path): Path to the pre-trained model. Defaults to 'yolov8s-world.pt'.
71
71
  """
72
- super().__init__(model=model, task="detect")
72
+ super().__init__(model=model, task="detect", verbose=verbose)
73
73
 
74
74
  # Assign default COCO class names when there are no custom names
75
75
  if not hasattr(self.model, "names"):
@@ -528,7 +528,7 @@ def check_is_path_safe(basedir, path):
528
528
  base_dir_resolved = Path(basedir).resolve()
529
529
  path_resolved = Path(path).resolve()
530
530
 
531
- return path_resolved.is_file() and path_resolved.parts[: len(base_dir_resolved.parts)] == base_dir_resolved.parts
531
+ return path_resolved.exists() and path_resolved.parts[: len(base_dir_resolved.parts)] == base_dir_resolved.parts
532
532
 
533
533
 
534
534
  def check_imshow(warn=False):
@@ -418,7 +418,7 @@ def attempt_download_asset(file, repo="ultralytics/assets", release="v8.2.0", **
418
418
 
419
419
  Example:
420
420
  ```python
421
- file_path = attempt_download_asset('yolov5s.pt', repo='ultralytics/assets', release='latest')
421
+ file_path = attempt_download_asset('yolov8n.pt', repo='ultralytics/assets', release='latest')
422
422
  ```
423
423
  """
424
424
  from ultralytics.utils import SETTINGS # scoped for circular import
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.10
3
+ Version: 8.2.12
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
@@ -296,7 +296,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
296
296
  | [YOLOv8n-cls](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-cls.pt) | 224 | 69.0 | 88.3 | 12.9 | 0.31 | 2.7 | 4.3 |
297
297
  | [YOLOv8s-cls](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-cls.pt) | 224 | 73.8 | 91.7 | 23.4 | 0.35 | 6.4 | 13.5 |
298
298
  | [YOLOv8m-cls](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-cls.pt) | 224 | 76.8 | 93.5 | 85.4 | 0.62 | 17.0 | 42.7 |
299
- | [YOLOv8l-cls](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-cls.pt) | 224 | 76.8 | 93.5 | 163.0 | 0.87 | 37.5 | 99.7 |
299
+ | [YOLOv8l-cls](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-cls.pt) | 224 | 78.3 | 94.2 | 163.0 | 0.87 | 37.5 | 99.7 |
300
300
  | [YOLOv8x-cls](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-cls.pt) | 224 | 79.0 | 94.6 | 232.0 | 1.01 | 57.4 | 154.8 |
301
301
 
302
302
  - **acc** values are model accuracies on the [ImageNet](https://www.image-net.org/) dataset validation set. <br>Reproduce by `yolo val classify data=path/to/ImageNet device=0`
@@ -1,4 +1,4 @@
1
- ultralytics/__init__.py,sha256=JRHBL4PFEZmSrqSDusfaD0hEQrOr33jrN49kmwDERZE,633
1
+ ultralytics/__init__.py,sha256=bvtcehsmXcGjOJHlETu5BpIMeTv9Z7uzS3FZDgCFWug,633
2
2
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
3
3
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
4
4
  ultralytics/cfg/__init__.py,sha256=lR6jykSO_0cigsjrqSyFj_8JG_LvYi796viasyWhcfs,21358
@@ -65,8 +65,8 @@ ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmW
65
65
  ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
66
66
  ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
67
67
  ultralytics/data/augment.py,sha256=OyGg5Ltmhi6sH8ImEiolr6KaiJPPB7bPqqcd3OHo_fQ,57665
68
- ultralytics/data/base.py,sha256=rgF28Zn7Xw2jJIai5t8sDdmRNmv0DYhcTz9kevsXFIA,13496
69
- ultralytics/data/build.py,sha256=JqMjNXEzCHKRgsKwaaTrALs3KnoajoaapCJcPP1UxUI,7483
68
+ ultralytics/data/base.py,sha256=C3teLnw97ZTbpJHT9P7yYWosAKocMzgJjRe1rxgfpls,13524
69
+ ultralytics/data/build.py,sha256=D9ov-H1p5Ui72lqWMyLmeD4kN0hIL3LX9t4DoT8tHGY,7270
70
70
  ultralytics/data/converter.py,sha256=NLDiV67RshbKQnMJUiQQF11boVzEqgi2Hz39nKVAI4U,17528
71
71
  ultralytics/data/dataset.py,sha256=NFaXyHRn64TyTEbtSkr7SkqWXK8bEJl6lZ6M1JwO3MY,22201
72
72
  ultralytics/data/loaders.py,sha256=UxNLLV6rwUDog9MSOkHpDn52TO-X2g2P4a5ZwvB7Ii8,23142
@@ -78,7 +78,7 @@ ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yf
78
78
  ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
79
79
  ultralytics/data/explorer/gui/dash.py,sha256=2oAbNroR2lfS45v53M1sRqZklLXbbj6qXqNxvplulC0,10087
80
80
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
81
- ultralytics/engine/exporter.py,sha256=JmROwWm1q_GOC9TGXXKOI67PQYdi4gemen6D72k2bQw,55182
81
+ ultralytics/engine/exporter.py,sha256=2troO7ah3gAhHyQ2VCjFvaK9NBc6uleIVft5IRBjeFM,58122
82
82
  ultralytics/engine/model.py,sha256=EkLTBSm3RT0mWPsZQpVRShihEvI5vx5X_VnkBHc1fxk,40032
83
83
  ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
84
84
  ultralytics/engine/results.py,sha256=r5dxL5of8TAf7GQECPehbvfz3KiYi4gUQHRqgPLBe3w,30919
@@ -120,7 +120,7 @@ ultralytics/models/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8
120
120
  ultralytics/models/utils/loss.py,sha256=PmlKDe4xQTiYkPSCdNUabxJC7bh43zGxiKVIxsXBVGE,15135
121
121
  ultralytics/models/utils/ops.py,sha256=sn1vdwIK2LaCvxvuuP31Yw2HXEMAmQdo7KD9JVh4GM4,13244
122
122
  ultralytics/models/yolo/__init__.py,sha256=e1cZr9pbSbf3Ya2OvkTjGRwD_E2YZpe610xskBM8gEk,247
123
- ultralytics/models/yolo/model.py,sha256=EwjRD9QrLP7qxqqjj-Q1II4RdjTZTyssn_n1iwO68VE,3991
123
+ ultralytics/models/yolo/model.py,sha256=ds9ArYRlA8QSF1cGg87JNavbo4wXpTUCtF6MIA9SkoA,4040
124
124
  ultralytics/models/yolo/classify/__init__.py,sha256=t-4pUHmgI2gjhc-l3bqNEcEtKD1dO40nD4Vc6Y2xD6o,355
125
125
  ultralytics/models/yolo/classify/predict.py,sha256=wFY4GIlWxe7idMndEw1RnDI63o53MTfiHKz0s2fOjAY,2513
126
126
  ultralytics/models/yolo/classify/train.py,sha256=9CRqtLkePo4ZkAzMTxDY4ztrNaWE34qnytYymfCEBzs,6888
@@ -173,9 +173,9 @@ ultralytics/trackers/utils/matching.py,sha256=UxhSGa5pN6WoYwYSBAkkt-O7xMxUR47VuU
173
173
  ultralytics/utils/__init__.py,sha256=zyk1cbMtgG8LB9s1FRKRaN2ffMlkKQcVWnhGj1EPP5Y,39284
174
174
  ultralytics/utils/autobatch.py,sha256=ygZ3f2ByIkcujB89ENcTnGWWnAQw5Pbg6nBuShg-5t4,3863
175
175
  ultralytics/utils/benchmarks.py,sha256=PlnUqhl2Om7jp7bKICDj9a2ABpJSl31VFI3ESnGdme8,23552
176
- ultralytics/utils/checks.py,sha256=kwHcB_o8-bieQV2NNNZe2d37QSXyBdIN6XaMlARTUEE,28077
176
+ ultralytics/utils/checks.py,sha256=wppGRXSjjjCkdGkFUSzICiMpIQyo9kqbVTlwoEXLQcA,28076
177
177
  ultralytics/utils/dist.py,sha256=3HeNbY2gp7vYhcvVhsrvTrQXpQmgT8tpmnzApf3eQRA,2267
178
- ultralytics/utils/downloads.py,sha256=Rx32imHkKyVltEDMiCtCT2N5aA9Cud_0PyIUoTh4ru0,21496
178
+ ultralytics/utils/downloads.py,sha256=cmO2Ev1DV1m_lYgQ2yGDG5xVRIBVS_z9nS_Frec_NeU,21496
179
179
  ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,816
180
180
  ultralytics/utils/files.py,sha256=TVfY0Wi5IsUc4YdsDzC0dAg-jAP5exYvwqB3VmXhDLY,6761
181
181
  ultralytics/utils/instance.py,sha256=5daM5nkxBv9hr5QzyII8zmuFj24hHuNtcr4EMCHAtpY,15654
@@ -199,9 +199,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
199
199
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
200
200
  ultralytics/utils/callbacks/tensorboard.py,sha256=Z1veCVcn9THPhdplWuIzwlsW2yF7y-On9IZIk3khM0Y,4135
201
201
  ultralytics/utils/callbacks/wb.py,sha256=woCQVuZzqtM5KnwxIibcfM3sFBYojeMPnv11jrRaIQA,6674
202
- ultralytics-8.2.10.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
203
- ultralytics-8.2.10.dist-info/METADATA,sha256=9VTYzdpmTqWjX2MFmT2DqzaFGqX1VQiTc1VlzP88O8A,40694
204
- ultralytics-8.2.10.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
205
- ultralytics-8.2.10.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
206
- ultralytics-8.2.10.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
207
- ultralytics-8.2.10.dist-info/RECORD,,
202
+ ultralytics-8.2.12.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
203
+ ultralytics-8.2.12.dist-info/METADATA,sha256=XTQhmjujtxvcOHz0TLMeVd_IfkcaL2zea8dPoj3Upzc,40694
204
+ ultralytics-8.2.12.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
205
+ ultralytics-8.2.12.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
206
+ ultralytics-8.2.12.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
207
+ ultralytics-8.2.12.dist-info/RECORD,,