ultralytics 8.0.225__py3-none-any.whl → 8.0.227__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.0.225'
3
+ __version__ = '8.0.227'
4
4
 
5
5
  from ultralytics.models import RTDETR, SAM, YOLO
6
6
  from ultralytics.models.fastsam import FastSAM
@@ -437,7 +437,7 @@ def entrypoint(debug=''):
437
437
  LOGGER.warning(f"WARNING ⚠️ 'source' is missing. Using default 'source={overrides['source']}'.")
438
438
  elif mode in ('train', 'val'):
439
439
  if 'data' not in overrides and 'resume' not in overrides:
440
- overrides['data'] = TASK2DATA.get(task or DEFAULT_CFG.task, DEFAULT_CFG.data)
440
+ overrides['data'] = DEFAULT_CFG.data or TASK2DATA.get(task or DEFAULT_CFG.task, DEFAULT_CFG.data)
441
441
  LOGGER.warning(f"WARNING ⚠️ 'data' is missing. Using default 'data={overrides['data']}'.")
442
442
  elif mode == 'export':
443
443
  if 'format' not in overrides:
@@ -163,7 +163,42 @@ class Mosaic(BaseMixTransform):
163
163
  """Apply mixup transformation to the input image and labels."""
164
164
  assert labels.get('rect_shape', None) is None, 'rect and mosaic are mutually exclusive.'
165
165
  assert len(labels.get('mix_labels', [])), 'There are no other images for mosaic augment.'
166
- return self._mosaic4(labels) if self.n == 4 else self._mosaic9(labels)
166
+ return self._mosaic3(labels) if self.n == 3 else self._mosaic4(labels) if self.n == 4 else self._mosaic9(
167
+ labels) # This code is modified for mosaic3 method.
168
+
169
+ def _mosaic3(self, labels):
170
+ """Create a 1x3 image mosaic."""
171
+ mosaic_labels = []
172
+ s = self.imgsz
173
+ for i in range(3):
174
+ labels_patch = labels if i == 0 else labels['mix_labels'][i - 1]
175
+ # Load image
176
+ img = labels_patch['img']
177
+ h, w = labels_patch.pop('resized_shape')
178
+
179
+ # Place img in img3
180
+ if i == 0: # center
181
+ img3 = np.full((s * 3, s * 3, img.shape[2]), 114, dtype=np.uint8) # base image with 3 tiles
182
+ h0, w0 = h, w
183
+ c = s, s, s + w, s + h # xmin, ymin, xmax, ymax (base) coordinates
184
+ elif i == 1: # right
185
+ c = s + w0, s, s + w0 + w, s + h
186
+ elif i == 2: # left
187
+ c = s - w, s + h0 - h, s, s + h0
188
+
189
+ padw, padh = c[:2]
190
+ x1, y1, x2, y2 = (max(x, 0) for x in c) # allocate coords
191
+
192
+ img3[y1:y2, x1:x2] = img[y1 - padh:, x1 - padw:] # img3[ymin:ymax, xmin:xmax]
193
+ # hp, wp = h, w # height, width previous for next iteration
194
+
195
+ # Labels assuming imgsz*2 mosaic size
196
+ labels_patch = self._update_labels(labels_patch, padw + self.border[0], padh + self.border[1])
197
+ mosaic_labels.append(labels_patch)
198
+ final_labels = self._cat_labels(mosaic_labels)
199
+
200
+ final_labels['img'] = img3[-self.border[0]:self.border[0], -self.border[1]:self.border[1]]
201
+ return final_labels
167
202
 
168
203
  def _mosaic4(self, labels):
169
204
  """Create a 2x2 image mosaic."""
ultralytics/data/utils.py CHANGED
@@ -434,7 +434,7 @@ class HUBDatasetStats:
434
434
  data = check_cls_dataset(unzip_dir)
435
435
  data['path'] = unzip_dir
436
436
  else: # detect, segment, pose
437
- zipped, data_dir, yaml_path = self._unzip(Path(path))
437
+ _, data_dir, yaml_path = self._unzip(Path(path))
438
438
  try:
439
439
  # Load YAML with checks
440
440
  data = yaml_load(yaml_path)
@@ -64,7 +64,7 @@ import torch
64
64
  from ultralytics.cfg import get_cfg
65
65
  from ultralytics.data.dataset import YOLODataset
66
66
  from ultralytics.data.utils import check_det_dataset
67
- from ultralytics.nn.autobackend import check_class_names
67
+ from ultralytics.nn.autobackend import check_class_names, default_class_names
68
68
  from ultralytics.nn.modules import C2f, Detect, RTDETRDecoder
69
69
  from ultralytics.nn.tasks import DetectionModel, SegmentationModel
70
70
  from ultralytics.utils import (ARM64, DEFAULT_CFG, LINUX, LOGGER, MACOS, ROOT, WINDOWS, __version__, callbacks,
@@ -172,6 +172,8 @@ class Exporter:
172
172
  self.device = select_device('cpu' if self.args.device is None else self.args.device)
173
173
 
174
174
  # Checks
175
+ if not hasattr(model, 'names'):
176
+ model.names = default_class_names()
175
177
  model.names = check_class_names(model.names)
176
178
  if self.args.half and onnx and self.device.type == 'cpu':
177
179
  LOGGER.warning('WARNING ⚠️ half=True only compatible with GPU export, i.e. use device=0')
@@ -325,7 +325,7 @@ class Model(nn.Module):
325
325
  checks.check_pip_update_available()
326
326
 
327
327
  overrides = yaml_load(checks.check_yaml(kwargs['cfg'])) if kwargs.get('cfg') else self.overrides
328
- custom = {'data': TASK2DATA[self.task]} # method defaults
328
+ custom = {'data': DEFAULT_CFG_DICT['data'] or TASK2DATA[self.task]} # method defaults
329
329
  args = {**overrides, **custom, **kwargs, 'mode': 'train'} # highest priority args on the right
330
330
  if args.get('resume'):
331
331
  args['resume'] = self.ckpt_path
@@ -56,6 +56,14 @@ class Tuner:
56
56
  model = YOLO('yolov8n.pt')
57
57
  model.tune(data='coco8.yaml', epochs=10, iterations=300, optimizer='AdamW', plots=False, save=False, val=False)
58
58
  ```
59
+
60
+ Tune with custom search space.
61
+ ```python
62
+ from ultralytics import YOLO
63
+
64
+ model = YOLO('yolov8n.pt')
65
+ model.tune(space={key1: val1, key2: val2}) # custom search space dictionary
66
+ ```
59
67
  """
60
68
 
61
69
  def __init__(self, args=DEFAULT_CFG, _callbacks=None):
@@ -65,10 +73,9 @@ class Tuner:
65
73
  Args:
66
74
  args (dict, optional): Configuration for hyperparameter evolution.
67
75
  """
68
- self.args = get_cfg(overrides=args)
69
- self.space = { # key: (min, max, gain(optional))
76
+ self.space = args.pop('space', None) or { # key: (min, max, gain(optional))
70
77
  # 'optimizer': tune.choice(['SGD', 'Adam', 'AdamW', 'NAdam', 'RAdam', 'RMSProp']),
71
- 'lr0': (1e-5, 1e-1),
78
+ 'lr0': (1e-5, 1e-1), # initial learning rate (i.e. SGD=1E-2, Adam=1E-3)
72
79
  'lrf': (0.0001, 0.1), # final OneCycleLR learning rate (lr0 * lrf)
73
80
  'momentum': (0.7, 0.98, 0.3), # SGD momentum/Adam beta1
74
81
  'weight_decay': (0.0, 0.001), # optimizer weight decay 5e-4
@@ -90,6 +97,7 @@ class Tuner:
90
97
  'mosaic': (0.0, 1.0), # image mixup (probability)
91
98
  'mixup': (0.0, 1.0), # image mixup (probability)
92
99
  'copy_paste': (0.0, 1.0)} # segment copy-paste (probability)
100
+ self.args = get_cfg(overrides=args)
93
101
  self.tune_dir = get_save_dir(self.args, name='tune')
94
102
  self.tune_csv = self.tune_dir / 'tune_results.csv'
95
103
  self.callbacks = _callbacks or callbacks.get_default_callbacks()
@@ -135,7 +135,7 @@ class BaseValidator:
135
135
  self.args.batch = 1 # export.py models default to batch-size 1
136
136
  LOGGER.info(f'Forcing batch=1 square inference (1,3,{imgsz},{imgsz}) for non-PyTorch models')
137
137
 
138
- if isinstance(self.args.data, str) and self.args.data.split('.')[-1] in ('yaml', 'yml'):
138
+ if str(self.args.data).split('.')[-1] in ('yaml', 'yml'):
139
139
  self.data = check_det_dataset(self.args.data)
140
140
  elif self.args.task == 'classify':
141
141
  self.data = check_cls_dataset(self.args.data, split=self.args.split)
@@ -40,6 +40,14 @@ def check_class_names(names):
40
40
  return names
41
41
 
42
42
 
43
+ def default_class_names(data=None):
44
+ """Applies default class names to an input YAML file or returns numerical class names."""
45
+ if data:
46
+ with contextlib.suppress(Exception):
47
+ return yaml_load(check_yaml(data))['names']
48
+ return {i: f'class{i}' for i in range(999)} # return default if above errors
49
+
50
+
43
51
  class AutoBackend(nn.Module):
44
52
  """
45
53
  Handles dynamic backend selection for running inference using Ultralytics YOLO models.
@@ -315,7 +323,7 @@ class AutoBackend(nn.Module):
315
323
 
316
324
  # Check names
317
325
  if 'names' not in locals(): # names missing
318
- names = self._apply_default_class_names(data)
326
+ names = default_class_names(data)
319
327
  names = check_class_names(names)
320
328
 
321
329
  # Disable gradients
@@ -479,13 +487,6 @@ class AutoBackend(nn.Module):
479
487
  for _ in range(2 if self.jit else 1):
480
488
  self.forward(im) # warmup
481
489
 
482
- @staticmethod
483
- def _apply_default_class_names(data):
484
- """Applies default class names to an input YAML file or returns numerical class names."""
485
- with contextlib.suppress(Exception):
486
- return yaml_load(check_yaml(data))['names']
487
- return {i: f'class{i}' for i in range(999)} # return default if above errors
488
-
489
490
  @staticmethod
490
491
  def _model_type(p='path/to/model.pt'):
491
492
  """
@@ -2,6 +2,7 @@
2
2
 
3
3
  import cv2
4
4
 
5
+ from ultralytics.utils.checks import check_imshow
5
6
  from ultralytics.utils.plotting import Annotator
6
7
 
7
8
 
@@ -32,6 +33,9 @@ class AIGym:
32
33
  self.view_img = False
33
34
  self.annotator = None
34
35
 
36
+ # Check if environment support imshow
37
+ self.env_check = check_imshow(warn=True)
38
+
35
39
  def set_args(self,
36
40
  kpts_to_check,
37
41
  line_thickness=2,
@@ -120,7 +124,7 @@ class AIGym:
120
124
 
121
125
  self.annotator.kpts(k, shape=(640, 640), radius=1, kpt_line=True)
122
126
 
123
- if self.view_img:
127
+ if self.env_check and self.view_img:
124
128
  cv2.imshow('Ultralytics YOLOv8 AI GYM', self.im0)
125
129
  if cv2.waitKey(1) & 0xFF == ord('q'):
126
130
  return
@@ -5,7 +5,7 @@ from collections import defaultdict
5
5
  import cv2
6
6
  import numpy as np
7
7
 
8
- from ultralytics.utils.checks import check_requirements
8
+ from ultralytics.utils.checks import check_imshow, check_requirements
9
9
  from ultralytics.utils.plotting import Annotator
10
10
 
11
11
  check_requirements('shapely>=2.0.0')
@@ -50,6 +50,9 @@ class Heatmap:
50
50
  self.count_reg_color = (0, 255, 0)
51
51
  self.region_thickness = 5
52
52
 
53
+ # Check if environment support imshow
54
+ self.env_check = check_imshow(warn=True)
55
+
53
56
  def set_args(self,
54
57
  imw,
55
58
  imh,
@@ -155,7 +158,7 @@ class Heatmap:
155
158
 
156
159
  im0_with_heatmap = cv2.addWeighted(self.im0, 1 - self.heatmap_alpha, heatmap_colored, self.heatmap_alpha, 0)
157
160
 
158
- if self.view_img:
161
+ if self.env_check and self.view_img:
159
162
  self.display_frames(im0_with_heatmap)
160
163
 
161
164
  return im0_with_heatmap
@@ -4,7 +4,7 @@ from collections import defaultdict
4
4
 
5
5
  import cv2
6
6
 
7
- from ultralytics.utils.checks import check_requirements
7
+ from ultralytics.utils.checks import check_imshow, check_requirements
8
8
  from ultralytics.utils.plotting import Annotator, colors
9
9
 
10
10
  check_requirements('shapely>=2.0.0')
@@ -46,6 +46,9 @@ class ObjectCounter:
46
46
  self.track_thickness = 2
47
47
  self.draw_tracks = False
48
48
 
49
+ # Check if environment support imshow
50
+ self.env_check = check_imshow(warn=True)
51
+
49
52
  def set_args(self,
50
53
  classes_names,
51
54
  reg_pts,
@@ -136,7 +139,7 @@ class ObjectCounter:
136
139
  else:
137
140
  self.in_counts += 1
138
141
 
139
- if self.view_img:
142
+ if self.env_check and self.view_img:
140
143
  incount_label = 'InCount : ' + f'{self.in_counts}'
141
144
  outcount_label = 'OutCount : ' + f'{self.out_counts}'
142
145
  self.annotator.count_labels(in_count=incount_label, out_count=outcount_label)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.0.225
3
+ Version: 8.0.227
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Home-page: https://github.com/ultralytics/ultralytics
6
6
  Author: Ultralytics
@@ -1,7 +1,7 @@
1
- ultralytics/__init__.py,sha256=kywT1OcR6SCj_ohFsgfvxqAdq2EGx_qLCNcDLy7GGVM,463
1
+ ultralytics/__init__.py,sha256=QzCgepGoTUoeYPBmIF3x8iTZ4L5fCkbplNSn2zxuH5s,463
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=WNxAAv7dhYR_HGFg4hlTUqZHbWDvAc--nj6niTB-wVM,19831
4
+ ultralytics/cfg/__init__.py,sha256=kuLZLdP7SKcvBYEvtKZPtXXqCEhkQyEZysYGH_jMx6E,19851
5
5
  ultralytics/cfg/default.yaml,sha256=CdgfcU2VAFjJXuCUrghQcupOlgqZQ08vSuTFmNSLY8A,7652
6
6
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=TJhOiAm1QOsQnDkg1eEGYlaylgkvKLzBUdQ5gzyi_pY,2856
7
7
  ultralytics/cfg/datasets/DOTAv2.yaml,sha256=SmSpmbz_wRT8HMmPqsHpjep_b-nvckTutoEwVpGaUZM,1149
@@ -47,21 +47,21 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=N3ddRUl2uOvJI_Q7TBIw88MyaeV240X_wlx
47
47
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=FFpmCj7E0xpOde7R-W3zUVcy6hKCHAij9qwp9SAp-pI,694
48
48
  ultralytics/data/__init__.py,sha256=TWN-3tE7pPBkGkvAFZoSexBkCw24Fp49swcKeIylHlE,389
49
49
  ultralytics/data/annotator.py,sha256=8Ui_4H4dAU09BQ-gDwW4uqDVMxiKZzNIfF1s5ZvhGk0,2122
50
- ultralytics/data/augment.py,sha256=hAvtYyFLIey7nDGHk39zltpT4Xld2vdIg8kFWhn960s,46710
50
+ ultralytics/data/augment.py,sha256=T5CXNeO8o5q9dbskyYFeFZtmNcN2nV2qhRqpniptT6M,48264
51
51
  ultralytics/data/base.py,sha256=ltqBt-UFnnPlK_2E4nVvYjIAUkR9PAgW1kNdGN101m4,13309
52
52
  ultralytics/data/build.py,sha256=5CwYQ5qXcvtyMGEAZatP0m8BHWiEv1fyIo51U-p6w9o,6691
53
53
  ultralytics/data/converter.py,sha256=tbV_LVvkr4gkLTuNM2v0dQPBuOBH2pknKlB3ivagzQU,12505
54
54
  ultralytics/data/dataset.py,sha256=IZyVml86cLF2t8Y8rToEN-H-OSdt5QQgXAFHo6YAJ_U,16019
55
55
  ultralytics/data/loaders.py,sha256=yDI0Xtb6IxpkU-fxdlPiBOY1FYDPEPDahre0rcgy2T8,22200
56
- ultralytics/data/utils.py,sha256=fF9g4ul_1RN7iFZ4o2E0tOS_kL_hkIYaiFLY1lQnH_4,29704
56
+ ultralytics/data/utils.py,sha256=1vKuCYOA_haro4tjzVSgOgwvdyEXw4UKmfYyPtfwXis,29699
57
57
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
58
- ultralytics/engine/exporter.py,sha256=3RKUHC_DMAiNHA9guFrkGDmn6ILEUA3tkTPQhg-5j3Y,50678
59
- ultralytics/engine/model.py,sha256=5ZeKRqH49Rl4nfg2AdNxfrw9WtTYiIC3gXfNXrBekSI,19208
58
+ ultralytics/engine/exporter.py,sha256=_l4IPGRvaTtVjgiuCtVKrJnJDzJlJCiwNXtdfo7Hulo,50787
59
+ ultralytics/engine/model.py,sha256=1cmagS8BskMzOay9uDlFIvS5m58GB2kxZoYnUfxIAbU,19236
60
60
  ultralytics/engine/predictor.py,sha256=tgwQ58bziem5rZXucVyK0LP5fzvAgJtICBaN7kLUM9s,17548
61
61
  ultralytics/engine/results.py,sha256=2GND_qGa8W8qJTyaSSt3qoPBqAS2JA5CDAB4y6wwdh8,23417
62
62
  ultralytics/engine/trainer.py,sha256=9IxGS3K3QE3pGhEd0JWBijIpHj1MSvRI38KtvyfS2Ck,32553
63
- ultralytics/engine/tuner.py,sha256=osll-o661DiiZI5NjzcU5rjax-ush0ykBQn6YBsvgTw,11408
64
- ultralytics/engine/validator.py,sha256=l6vb_-dLfurOFIyM0pO8p3nKrLc8kxfyDrSfk9i7fBw,14484
63
+ ultralytics/engine/tuner.py,sha256=_9MAsXQwDtmDznqb6_cgk1DIo8FTwLgM3OTEifCxRp0,11715
64
+ ultralytics/engine/validator.py,sha256=1-N1Fh563A4sD-sB1c3MiYX9PtJliZ-ta0c-sObUDfc,14453
65
65
  ultralytics/hub/__init__.py,sha256=iZzEg98gDEr2bfPZopHwnFIfDVDZ9a-yuAAkPKnn2hw,3685
66
66
  ultralytics/hub/auth.py,sha256=D_ffQgmWNfp-ccJ2guc76UgOcMRPEKzcOJI8AALZesk,5364
67
67
  ultralytics/hub/session.py,sha256=tnUz6R2JHxTBSSBMwCoEDteMNGARDay1Ecp6FN1ieEc,8423
@@ -115,7 +115,7 @@ ultralytics/models/yolo/segment/predict.py,sha256=yUs60HFBn7PZ3mErtUAnT69ijPBzFd
115
115
  ultralytics/models/yolo/segment/train.py,sha256=o1q4ZTmZlSwUbFIFaT_T7LvYaKOLq_QXxB-z61YwHx8,2276
116
116
  ultralytics/models/yolo/segment/val.py,sha256=DT-z-XnxP77nTIu2VfmGlpUyeBnDmIszT4vpP7mkGNA,11956
117
117
  ultralytics/nn/__init__.py,sha256=7T_GW3YsPg1kA-74UklF2UcabcRyttRZYrCOXiNnJqU,555
118
- ultralytics/nn/autobackend.py,sha256=yzB515Xi2-GV_IaWhS8EmA2wya2hRB3frtBvw-TEwaY,26987
118
+ ultralytics/nn/autobackend.py,sha256=eFn23VKky5qEwXpAcK3VXJwC_kiXsFKVQcbO2C38v60,26957
119
119
  ultralytics/nn/tasks.py,sha256=wiT7k194SU8Ckb3hICaOwyQ5tdSyT5qbug0VlnW5kyA,36609
120
120
  ultralytics/nn/modules/__init__.py,sha256=vrndehuJuLdA3UMHgByPUSR8rz32naUN0LIZoPzF7YQ,1698
121
121
  ultralytics/nn/modules/block.py,sha256=_A24bZ1xSWvrvqk5RODeobBZL6ReI6ICk-vwilERTZs,14475
@@ -124,9 +124,9 @@ ultralytics/nn/modules/head.py,sha256=GVory97vQms41CRExgEhMd5dJZTwleJVL5dWyU6pU2
124
124
  ultralytics/nn/modules/transformer.py,sha256=R7K_3r4aTlvghiTTRzh69NmNzlO_1SiiifbevHGllEE,17895
125
125
  ultralytics/nn/modules/utils.py,sha256=q-qfebnMD2iqZyTslZTHsZYW7hyrX62VRgUmHX683-U,3436
126
126
  ultralytics/solutions/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
127
- ultralytics/solutions/ai_gym.py,sha256=JqYz6E2-7hlQpWkPqj-etuvj9SSSy2hyOUHJwwRAJho,6070
128
- ultralytics/solutions/heatmap.py,sha256=gvUJiNe1Xjn-w6_6MT9Od1eMGAs7s3Qj3JzD1h16DRY,6262
129
- ultralytics/solutions/object_counter.py,sha256=GM79d18cU4IIGR8E4g_IOTxz6iSjH4JI71qKuhfJdbo,6458
127
+ ultralytics/solutions/ai_gym.py,sha256=AkD2stdBQXETbXftZVCTmwHgZ6X_Ok5nS4wFazfJuDA,6235
128
+ ultralytics/solutions/heatmap.py,sha256=3wjg31Mgt6fmDt-rXpx53v4XGsgMBjdaWHi7ENbpBnc,6391
129
+ ultralytics/solutions/object_counter.py,sha256=tRl2G94v7qbQkJSBbl9vR95jMLKTKIMMMJp2t40Xp9s,6587
130
130
  ultralytics/trackers/__init__.py,sha256=dR9unDaRBd6MgMnTKxqJZ0KsJ8BeFGg-LTYQvC7BnIY,227
131
131
  ultralytics/trackers/basetrack.py,sha256=Vbs76Zue_jYdJFudztTJaUnGgMMUwVqoa0BSOhyBh0o,3580
132
132
  ultralytics/trackers/bot_sort.py,sha256=orTkrMj2yHfEQVKaQVWbguTx98S2gvLnaOB0D2JN1Gc,8602
@@ -165,9 +165,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=qIN0gJipB1f3Di7bw0Rb28jLYoCzJSWSqF
165
165
  ultralytics/utils/callbacks/raytune.py,sha256=PGZvW_haVq8Cqha3GgvL7iBMAaxfn8_3u_IIdYCNMPo,608
166
166
  ultralytics/utils/callbacks/tensorboard.py,sha256=XXnpkIJrI_A_68JLRvYvRMHzekn-US1uIcru7vRs_e0,2896
167
167
  ultralytics/utils/callbacks/wb.py,sha256=x_j4ZH4Klp0_Ld13f0UezFluUTS5Ovfgk9hcjwqeruU,6762
168
- ultralytics-8.0.225.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
169
- ultralytics-8.0.225.dist-info/METADATA,sha256=BAEFQE4ncdPMZHxRI_AOSvRNzaYviMXTt6qmhFvfIFQ,32172
170
- ultralytics-8.0.225.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
171
- ultralytics-8.0.225.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
172
- ultralytics-8.0.225.dist-info/top_level.txt,sha256=aNSJehhoYKycM3X4Tj38Q-BrmWFFm3hFuEXfPIR89eI,784
173
- ultralytics-8.0.225.dist-info/RECORD,,
168
+ ultralytics-8.0.227.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
169
+ ultralytics-8.0.227.dist-info/METADATA,sha256=rIyhvhn4oc_R1dkikm65MTVK1paFKoxmhQlEg1pNJc8,32172
170
+ ultralytics-8.0.227.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
171
+ ultralytics-8.0.227.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
172
+ ultralytics-8.0.227.dist-info/top_level.txt,sha256=aNSJehhoYKycM3X4Tj38Q-BrmWFFm3hFuEXfPIR89eI,784
173
+ ultralytics-8.0.227.dist-info/RECORD,,