ultralytics 8.0.205__py3-none-any.whl → 8.0.207__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 +1 -1
- ultralytics/engine/exporter.py +10 -13
- ultralytics/engine/model.py +2 -5
- ultralytics/engine/trainer.py +16 -18
- ultralytics/trackers/track.py +3 -3
- ultralytics/utils/__init__.py +2 -4
- ultralytics/utils/checks.py +25 -0
- ultralytics/utils/downloads.py +5 -1
- ultralytics/utils/ops.py +4 -4
- {ultralytics-8.0.205.dist-info → ultralytics-8.0.207.dist-info}/METADATA +1 -1
- {ultralytics-8.0.205.dist-info → ultralytics-8.0.207.dist-info}/RECORD +15 -15
- {ultralytics-8.0.205.dist-info → ultralytics-8.0.207.dist-info}/LICENSE +0 -0
- {ultralytics-8.0.205.dist-info → ultralytics-8.0.207.dist-info}/WHEEL +0 -0
- {ultralytics-8.0.205.dist-info → ultralytics-8.0.207.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.0.205.dist-info → ultralytics-8.0.207.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
ultralytics/engine/exporter.py
CHANGED
|
@@ -69,7 +69,7 @@ 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,
|
|
71
71
|
colorstr, get_default_args, yaml_save)
|
|
72
|
-
from ultralytics.utils.checks import check_imgsz, check_requirements, check_version
|
|
72
|
+
from ultralytics.utils.checks import check_imgsz, check_is_path_safe, check_requirements, check_version
|
|
73
73
|
from ultralytics.utils.downloads import attempt_download_asset, get_github_assets
|
|
74
74
|
from ultralytics.utils.files import file_size, spaces_in_path
|
|
75
75
|
from ultralytics.utils.ops import Profile
|
|
@@ -450,12 +450,9 @@ class Exporter:
|
|
|
450
450
|
f = Path(str(self.file).replace(self.file.suffix, f'_ncnn_model{os.sep}'))
|
|
451
451
|
f_ts = self.file.with_suffix('.torchscript')
|
|
452
452
|
|
|
453
|
-
|
|
454
|
-
if
|
|
455
|
-
|
|
456
|
-
elif (ROOT / pnnx_filename).is_file():
|
|
457
|
-
pnnx = ROOT / pnnx_filename
|
|
458
|
-
else:
|
|
453
|
+
name = Path('pnnx.exe' if WINDOWS else 'pnnx') # PNNX filename
|
|
454
|
+
pnnx = name if name.is_file() else ROOT / name
|
|
455
|
+
if not pnnx.is_file():
|
|
459
456
|
LOGGER.warning(
|
|
460
457
|
f'{prefix} WARNING ⚠️ PNNX not found. Attempting to download binary file from '
|
|
461
458
|
'https://github.com/pnnx/pnnx/.\nNote PNNX Binary file must be placed in current working directory '
|
|
@@ -465,12 +462,12 @@ class Exporter:
|
|
|
465
462
|
asset = [x for x in assets if system in x][0] if assets else \
|
|
466
463
|
f'https://github.com/pnnx/pnnx/releases/download/20230816/pnnx-20230816-{system}.zip' # fallback
|
|
467
464
|
asset = attempt_download_asset(asset, repo='pnnx/pnnx', release='latest')
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
465
|
+
if check_is_path_safe(Path.cwd(), asset): # avoid path traversal security vulnerability
|
|
466
|
+
unzip_dir = Path(asset).with_suffix('')
|
|
467
|
+
(unzip_dir / name).rename(pnnx) # move binary to ROOT
|
|
468
|
+
shutil.rmtree(unzip_dir) # delete unzip dir
|
|
469
|
+
Path(asset).unlink() # delete zip
|
|
470
|
+
pnnx.chmod(0o777) # set read, write, and execute permissions for everyone
|
|
474
471
|
|
|
475
472
|
ncnn_args = [
|
|
476
473
|
f'ncnnparam={f / "model.ncnn.param"}',
|
ultralytics/engine/model.py
CHANGED
|
@@ -9,7 +9,6 @@ from ultralytics.cfg import TASK2DATA, get_cfg, get_save_dir
|
|
|
9
9
|
from ultralytics.hub.utils import HUB_WEB_ROOT
|
|
10
10
|
from ultralytics.nn.tasks import attempt_load_one_weight, guess_model_task, nn, yaml_model_load
|
|
11
11
|
from ultralytics.utils import ASSETS, DEFAULT_CFG_DICT, LOGGER, RANK, callbacks, checks, emojis, yaml_load
|
|
12
|
-
from ultralytics.utils.downloads import GITHUB_ASSETS_STEMS
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
class Model(nn.Module):
|
|
@@ -88,10 +87,8 @@ class Model(nn.Module):
|
|
|
88
87
|
return
|
|
89
88
|
|
|
90
89
|
# Load or create new YOLO model
|
|
91
|
-
|
|
92
|
-
if
|
|
93
|
-
model, suffix = Path(model).with_suffix('.pt'), '.pt' # add suffix, i.e. yolov8n -> yolov8n.pt
|
|
94
|
-
if suffix in ('.yaml', '.yml'):
|
|
90
|
+
model = checks.check_model_file_from_stem(model) # add suffix, i.e. yolov8n -> yolov8n.pt
|
|
91
|
+
if Path(model).suffix in ('.yaml', '.yml'):
|
|
95
92
|
self._new(model, task)
|
|
96
93
|
else:
|
|
97
94
|
self._load(model, task)
|
ultralytics/engine/trainer.py
CHANGED
|
@@ -19,8 +19,6 @@ import numpy as np
|
|
|
19
19
|
import torch
|
|
20
20
|
from torch import distributed as dist
|
|
21
21
|
from torch import nn, optim
|
|
22
|
-
from torch.cuda import amp
|
|
23
|
-
from torch.nn.parallel import DistributedDataParallel as DDP
|
|
24
22
|
|
|
25
23
|
from ultralytics.cfg import get_cfg, get_save_dir
|
|
26
24
|
from ultralytics.data.utils import check_cls_dataset, check_det_dataset
|
|
@@ -28,7 +26,7 @@ from ultralytics.nn.tasks import attempt_load_one_weight, attempt_load_weights
|
|
|
28
26
|
from ultralytics.utils import (DEFAULT_CFG, LOGGER, RANK, TQDM, __version__, callbacks, clean_url, colorstr, emojis,
|
|
29
27
|
yaml_save)
|
|
30
28
|
from ultralytics.utils.autobatch import check_train_batch_size
|
|
31
|
-
from ultralytics.utils.checks import check_amp, check_file, check_imgsz, print_args
|
|
29
|
+
from ultralytics.utils.checks import check_amp, check_file, check_imgsz, check_model_file_from_stem, print_args
|
|
32
30
|
from ultralytics.utils.dist import ddp_cleanup, generate_ddp_command
|
|
33
31
|
from ultralytics.utils.files import get_latest_run
|
|
34
32
|
from ultralytics.utils.torch_utils import (EarlyStopping, ModelEMA, de_parallel, init_seeds, one_cycle, select_device,
|
|
@@ -43,7 +41,6 @@ class BaseTrainer:
|
|
|
43
41
|
|
|
44
42
|
Attributes:
|
|
45
43
|
args (SimpleNamespace): Configuration for the trainer.
|
|
46
|
-
check_resume (method): Method to check if training should be resumed from a saved checkpoint.
|
|
47
44
|
validator (BaseValidator): Validator instance.
|
|
48
45
|
model (nn.Module): Model instance.
|
|
49
46
|
callbacks (defaultdict): Dictionary of callbacks.
|
|
@@ -62,6 +59,7 @@ class BaseTrainer:
|
|
|
62
59
|
trainset (torch.utils.data.Dataset): Training dataset.
|
|
63
60
|
testset (torch.utils.data.Dataset): Testing dataset.
|
|
64
61
|
ema (nn.Module): EMA (Exponential Moving Average) of the model.
|
|
62
|
+
resume (bool): Resume training from a checkpoint.
|
|
65
63
|
lf (nn.Module): Loss function.
|
|
66
64
|
scheduler (torch.optim.lr_scheduler._LRScheduler): Learning rate scheduler.
|
|
67
65
|
best_fitness (float): The best fitness value achieved.
|
|
@@ -84,7 +82,6 @@ class BaseTrainer:
|
|
|
84
82
|
self.check_resume(overrides)
|
|
85
83
|
self.device = select_device(self.args.device, self.args.batch)
|
|
86
84
|
self.validator = None
|
|
87
|
-
self.model = None
|
|
88
85
|
self.metrics = None
|
|
89
86
|
self.plots = {}
|
|
90
87
|
init_seeds(self.args.seed + 1 + RANK, deterministic=self.args.deterministic)
|
|
@@ -111,7 +108,7 @@ class BaseTrainer:
|
|
|
111
108
|
self.args.workers = 0 # faster CPU training as time dominated by inference, not dataloading
|
|
112
109
|
|
|
113
110
|
# Model and Dataset
|
|
114
|
-
self.model = self.args.model
|
|
111
|
+
self.model = check_model_file_from_stem(self.args.model) # add suffix, i.e. yolov8n -> yolov8n.pt
|
|
115
112
|
try:
|
|
116
113
|
if self.args.task == 'classify':
|
|
117
114
|
self.data = check_cls_dataset(self.args.data)
|
|
@@ -124,6 +121,7 @@ class BaseTrainer:
|
|
|
124
121
|
|
|
125
122
|
self.trainset, self.testset = self.get_dataset(self.data)
|
|
126
123
|
self.ema = None
|
|
124
|
+
self.resume = False
|
|
127
125
|
|
|
128
126
|
# Optimization utils init
|
|
129
127
|
self.lf = None
|
|
@@ -236,9 +234,9 @@ class BaseTrainer:
|
|
|
236
234
|
if RANK > -1 and world_size > 1: # DDP
|
|
237
235
|
dist.broadcast(self.amp, src=0) # broadcast the tensor from rank 0 to all other ranks (returns None)
|
|
238
236
|
self.amp = bool(self.amp) # as boolean
|
|
239
|
-
self.scaler = amp.GradScaler(enabled=self.amp)
|
|
237
|
+
self.scaler = torch.cuda.amp.GradScaler(enabled=self.amp)
|
|
240
238
|
if world_size > 1:
|
|
241
|
-
self.model =
|
|
239
|
+
self.model = nn.parallel.DistributedDataParallel(self.model, device_ids=[RANK])
|
|
242
240
|
|
|
243
241
|
# Check imgsz
|
|
244
242
|
gs = max(int(self.model.stride.max() if hasattr(self.model, 'stride') else 32), 32) # grid size (max stride)
|
|
@@ -311,11 +309,7 @@ class BaseTrainer:
|
|
|
311
309
|
pbar = enumerate(self.train_loader)
|
|
312
310
|
# Update dataloader attributes (optional)
|
|
313
311
|
if epoch == (self.epochs - self.args.close_mosaic):
|
|
314
|
-
|
|
315
|
-
if hasattr(self.train_loader.dataset, 'mosaic'):
|
|
316
|
-
self.train_loader.dataset.mosaic = False
|
|
317
|
-
if hasattr(self.train_loader.dataset, 'close_mosaic'):
|
|
318
|
-
self.train_loader.dataset.close_mosaic(hyp=self.args)
|
|
312
|
+
self._close_dataloader_mosaic()
|
|
319
313
|
self.train_loader.reset()
|
|
320
314
|
|
|
321
315
|
if RANK in (-1, 0):
|
|
@@ -395,7 +389,7 @@ class BaseTrainer:
|
|
|
395
389
|
self.epoch_time = tnow - self.epoch_time_start
|
|
396
390
|
self.epoch_time_start = tnow
|
|
397
391
|
self.run_callbacks('on_fit_epoch_end')
|
|
398
|
-
torch.cuda.empty_cache() #
|
|
392
|
+
torch.cuda.empty_cache() # clear GPU memory at end of epoch, may help reduce CUDA out of memory errors
|
|
399
393
|
|
|
400
394
|
# Early Stopping
|
|
401
395
|
if RANK != -1: # if DDP training
|
|
@@ -613,11 +607,15 @@ class BaseTrainer:
|
|
|
613
607
|
self.best_fitness = best_fitness
|
|
614
608
|
self.start_epoch = start_epoch
|
|
615
609
|
if start_epoch > (self.epochs - self.args.close_mosaic):
|
|
610
|
+
self._close_dataloader_mosaic()
|
|
611
|
+
|
|
612
|
+
def _close_dataloader_mosaic(self):
|
|
613
|
+
"""Update dataloaders to stop using mosaic augmentation."""
|
|
614
|
+
if hasattr(self.train_loader.dataset, 'mosaic'):
|
|
615
|
+
self.train_loader.dataset.mosaic = False
|
|
616
|
+
if hasattr(self.train_loader.dataset, 'close_mosaic'):
|
|
616
617
|
LOGGER.info('Closing dataloader mosaic')
|
|
617
|
-
|
|
618
|
-
self.train_loader.dataset.mosaic = False
|
|
619
|
-
if hasattr(self.train_loader.dataset, 'close_mosaic'):
|
|
620
|
-
self.train_loader.dataset.close_mosaic(hyp=self.args)
|
|
618
|
+
self.train_loader.dataset.close_mosaic(hyp=self.args)
|
|
621
619
|
|
|
622
620
|
def build_optimizer(self, model, name='auto', lr=0.001, momentum=0.9, decay=1e-5, iterations=1e5):
|
|
623
621
|
"""
|
ultralytics/trackers/track.py
CHANGED
|
@@ -38,13 +38,13 @@ def on_predict_start(predictor, persist=False):
|
|
|
38
38
|
predictor.trackers = trackers
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
def on_predict_postprocess_end(predictor):
|
|
41
|
+
def on_predict_postprocess_end(predictor, persist=False):
|
|
42
42
|
"""Postprocess detected boxes and update with object tracking."""
|
|
43
43
|
bs = predictor.dataset.bs
|
|
44
44
|
path, im0s = predictor.batch[:2]
|
|
45
45
|
|
|
46
46
|
for i in range(bs):
|
|
47
|
-
if predictor.vid_path[i] != str(predictor.save_dir / Path(path[i]).name): # new video
|
|
47
|
+
if not persist and predictor.vid_path[i] != str(predictor.save_dir / Path(path[i]).name): # new video
|
|
48
48
|
predictor.trackers[i].reset()
|
|
49
49
|
|
|
50
50
|
det = predictor.results[i].boxes.cpu().numpy()
|
|
@@ -67,4 +67,4 @@ def register_tracker(model, persist):
|
|
|
67
67
|
persist (bool): Whether to persist the trackers if they already exist.
|
|
68
68
|
"""
|
|
69
69
|
model.add_callback('on_predict_start', partial(on_predict_start, persist=persist))
|
|
70
|
-
model.add_callback('on_predict_postprocess_end', on_predict_postprocess_end)
|
|
70
|
+
model.add_callback('on_predict_postprocess_end', partial(on_predict_postprocess_end, persist=persist))
|
ultralytics/utils/__init__.py
CHANGED
|
@@ -270,6 +270,8 @@ set_logging(LOGGING_NAME, verbose=VERBOSE) # run before defining LOGGER
|
|
|
270
270
|
LOGGER = logging.getLogger(LOGGING_NAME) # define globally (used in train.py, val.py, detect.py, etc.)
|
|
271
271
|
if WINDOWS: # emoji-safe logging
|
|
272
272
|
LOGGER.addFilter(EmojiFilter())
|
|
273
|
+
for logger in 'sentry_sdk', 'urllib3.connectionpool':
|
|
274
|
+
logging.getLogger(logger).setLevel(logging.CRITICAL)
|
|
273
275
|
|
|
274
276
|
|
|
275
277
|
class ThreadingLocked:
|
|
@@ -819,10 +821,6 @@ def set_sentry():
|
|
|
819
821
|
ignore_errors=[KeyboardInterrupt, FileNotFoundError])
|
|
820
822
|
sentry_sdk.set_user({'id': SETTINGS['uuid']}) # SHA-256 anonymized UUID hash
|
|
821
823
|
|
|
822
|
-
# Disable all sentry logging
|
|
823
|
-
for logger in 'sentry_sdk', 'sentry_sdk.errors':
|
|
824
|
-
logging.getLogger(logger).setLevel(logging.CRITICAL)
|
|
825
|
-
|
|
826
824
|
|
|
827
825
|
class SettingsManager(dict):
|
|
828
826
|
"""
|
ultralytics/utils/checks.py
CHANGED
|
@@ -426,6 +426,14 @@ def check_yolov5u_filename(file: str, verbose: bool = True):
|
|
|
426
426
|
return file
|
|
427
427
|
|
|
428
428
|
|
|
429
|
+
def check_model_file_from_stem(model='yolov8n'):
|
|
430
|
+
"""Return a model filename from a valid model stem."""
|
|
431
|
+
if model and not Path(model).suffix and Path(model).stem in downloads.GITHUB_ASSETS_STEMS:
|
|
432
|
+
return Path(model).with_suffix('.pt') # add suffix, i.e. yolov8n -> yolov8n.pt
|
|
433
|
+
else:
|
|
434
|
+
return model
|
|
435
|
+
|
|
436
|
+
|
|
429
437
|
def check_file(file, suffix='', download=True, hard=True):
|
|
430
438
|
"""Search/download file (if necessary) and return path."""
|
|
431
439
|
check_suffix(file, suffix) # optional
|
|
@@ -455,6 +463,23 @@ def check_yaml(file, suffix=('.yaml', '.yml'), hard=True):
|
|
|
455
463
|
return check_file(file, suffix, hard=hard)
|
|
456
464
|
|
|
457
465
|
|
|
466
|
+
def check_is_path_safe(basedir, path):
|
|
467
|
+
"""
|
|
468
|
+
Check if the resolved path is under the intended directory to prevent path traversal.
|
|
469
|
+
|
|
470
|
+
Args:
|
|
471
|
+
basedir (Path | str): The intended directory.
|
|
472
|
+
path (Path | str): The path to check.
|
|
473
|
+
|
|
474
|
+
Returns:
|
|
475
|
+
(bool): True if the path is safe, False otherwise.
|
|
476
|
+
"""
|
|
477
|
+
base_dir_resolved = Path(basedir).resolve()
|
|
478
|
+
path_resolved = Path(path).resolve()
|
|
479
|
+
|
|
480
|
+
return path_resolved.is_file() and path_resolved.parts[:len(base_dir_resolved.parts)] == base_dir_resolved.parts
|
|
481
|
+
|
|
482
|
+
|
|
458
483
|
def check_imshow(warn=False):
|
|
459
484
|
"""Check if environment supports image displays."""
|
|
460
485
|
try:
|
ultralytics/utils/downloads.py
CHANGED
|
@@ -159,7 +159,11 @@ def unzip_file(file, path=None, exclude=('.DS_Store', '__MACOSX'), exist_ok=Fals
|
|
|
159
159
|
return path
|
|
160
160
|
|
|
161
161
|
for f in TQDM(files, desc=f'Unzipping {file} to {Path(path).resolve()}...', unit='file', disable=not progress):
|
|
162
|
-
|
|
162
|
+
# Ensure the file is within the extract_path to avoid path traversal security vulnerability
|
|
163
|
+
if '..' in Path(f).parts:
|
|
164
|
+
LOGGER.warning(f'Potentially insecure file path: {f}, skipping extraction.')
|
|
165
|
+
continue
|
|
166
|
+
zipObj.extract(f, extract_path)
|
|
163
167
|
|
|
164
168
|
return path # return unzip dir
|
|
165
169
|
|
ultralytics/utils/ops.py
CHANGED
|
@@ -324,8 +324,8 @@ def scale_image(masks, im0_shape, ratio_pad=None):
|
|
|
324
324
|
else:
|
|
325
325
|
gain = ratio_pad[0][0]
|
|
326
326
|
pad = ratio_pad[1]
|
|
327
|
-
top, left = int(pad[1]), int(pad[0]) # y, x
|
|
328
|
-
bottom, right = int(im1_shape[0] - pad[1]), int(im1_shape[1] - pad[0])
|
|
327
|
+
top, left = (int(round(pad[1] - 0.1)), int(round(pad[0] - 0.1))) # y, x
|
|
328
|
+
bottom, right = (int(round(im1_shape[0] - pad[1] + 0.1)), int(round(im1_shape[1] - pad[0] + 0.1)))
|
|
329
329
|
|
|
330
330
|
if len(masks.shape) < 2:
|
|
331
331
|
raise ValueError(f'"len of masks shape" should be 2 or 3, but got {len(masks.shape)}')
|
|
@@ -704,8 +704,8 @@ def scale_masks(masks, shape, padding=True):
|
|
|
704
704
|
if padding:
|
|
705
705
|
pad[0] /= 2
|
|
706
706
|
pad[1] /= 2
|
|
707
|
-
top, left = (int(pad[1]), int(pad[0])) if padding else (0, 0) # y, x
|
|
708
|
-
bottom, right = (int(mh - pad[1]), int(mw - pad[0]))
|
|
707
|
+
top, left = (int(round(pad[1] - 0.1)), int(round(pad[0] - 0.1))) if padding else (0, 0) # y, x
|
|
708
|
+
bottom, right = (int(round(mh - pad[1] + 0.1)), int(round(mw - pad[0] + 0.1)))
|
|
709
709
|
masks = masks[..., top:bottom, left:right]
|
|
710
710
|
|
|
711
711
|
masks = F.interpolate(masks, shape, mode='bilinear', align_corners=False) # NCHW
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.207
|
|
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,4 +1,4 @@
|
|
|
1
|
-
ultralytics/__init__.py,sha256=
|
|
1
|
+
ultralytics/__init__.py,sha256=IHTkAvMFdc8fykdZi4by2TW-zMnNVMgbOHmsRVbTb64,463
|
|
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=0rNpfVEF_zlbp7vjteMEtawvyQJ_X-CXgZI5xCyE4QQ,19672
|
|
@@ -50,11 +50,11 @@ ultralytics/data/dataset.py,sha256=IZyVml86cLF2t8Y8rToEN-H-OSdt5QQgXAFHo6YAJ_U,1
|
|
|
50
50
|
ultralytics/data/loaders.py,sha256=wcxTmUXo-MLzHDgiCPqIz1a5Ab8zxDRCbqTlk4hqDLc,22093
|
|
51
51
|
ultralytics/data/utils.py,sha256=MaTz8IkSrts2RVK3GLS3OHvVCAZmavxmOWKvUgy9tBQ,29632
|
|
52
52
|
ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
53
|
-
ultralytics/engine/exporter.py,sha256=
|
|
54
|
-
ultralytics/engine/model.py,sha256=
|
|
53
|
+
ultralytics/engine/exporter.py,sha256=uts1Y_IwgL7VkGB034dGVqaA2ceTs4XUlJXK7O23wVc,50142
|
|
54
|
+
ultralytics/engine/model.py,sha256=z-K-T1gp4hZbb1Z7MiOiOXYIFZxWeGhiwZMJjNvBbsc,19208
|
|
55
55
|
ultralytics/engine/predictor.py,sha256=onTJdx0dNaHfKIWidLbC4A4o8wMcISOVJxd6_xhe4XI,16672
|
|
56
56
|
ultralytics/engine/results.py,sha256=b98uVX6QHpQjgMxbWiGOwqDBgbfY0AtY1v5DU3-hVBM,23454
|
|
57
|
-
ultralytics/engine/trainer.py,sha256=
|
|
57
|
+
ultralytics/engine/trainer.py,sha256=9IxGS3K3QE3pGhEd0JWBijIpHj1MSvRI38KtvyfS2Ck,32553
|
|
58
58
|
ultralytics/engine/tuner.py,sha256=Xizeaw7vSYqN-0eShxvWXkJAPGuasctPP-3SH0NLpEg,11374
|
|
59
59
|
ultralytics/engine/validator.py,sha256=lJ0JU9X2xpy68w274sjlLvlwuFnhnKIc1osRw0XFjY4,14404
|
|
60
60
|
ultralytics/hub/__init__.py,sha256=iZzEg98gDEr2bfPZopHwnFIfDVDZ9a-yuAAkPKnn2hw,3685
|
|
@@ -122,23 +122,23 @@ ultralytics/trackers/__init__.py,sha256=dR9unDaRBd6MgMnTKxqJZ0KsJ8BeFGg-LTYQvC7B
|
|
|
122
122
|
ultralytics/trackers/basetrack.py,sha256=Jh-1Q418_4CQfhgTjmGt3bQIVQdN5XJ2AiQx2dsPJuI,1609
|
|
123
123
|
ultralytics/trackers/bot_sort.py,sha256=orTkrMj2yHfEQVKaQVWbguTx98S2gvLnaOB0D2JN1Gc,8602
|
|
124
124
|
ultralytics/trackers/byte_tracker.py,sha256=acUkcJTjbjPShyAb59kj_avX0G0KmdBfpYH9maRSOiw,18381
|
|
125
|
-
ultralytics/trackers/track.py,sha256=
|
|
125
|
+
ultralytics/trackers/track.py,sha256=VU2vguyPKAPuaBTNlLa8Soc-2XbR_7IltZfLySe_irw,2551
|
|
126
126
|
ultralytics/trackers/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
127
127
|
ultralytics/trackers/utils/gmc.py,sha256=H9Td7oLj-RKRsVNUETsMqcedJENV-jG03cCmwK-Tpo4,12366
|
|
128
128
|
ultralytics/trackers/utils/kalman_filter.py,sha256=PM3I6DkBlS-cDm3kc7L5XD3XSbcGajgRxiqrvUJAIBY,14850
|
|
129
129
|
ultralytics/trackers/utils/matching.py,sha256=U8tfb8tfOYs_QtHQ-rGT4ZhthUcSAYh6X_LE31olOag,4841
|
|
130
|
-
ultralytics/utils/__init__.py,sha256=
|
|
130
|
+
ultralytics/utils/__init__.py,sha256=tIeKKWxmSBl6PRpAH2fnCSluXXa7AvEtbbl_WEOjSA0,33649
|
|
131
131
|
ultralytics/utils/autobatch.py,sha256=mZjJerTi6WTzGq1_0JiU8XNHi70b1psCOAE-feZROgs,3862
|
|
132
132
|
ultralytics/utils/benchmarks.py,sha256=ct6g9UyfHPi6a7_EuppbTrVeu_ePiCLF7Kib8RZKRgw,18217
|
|
133
|
-
ultralytics/utils/checks.py,sha256=
|
|
133
|
+
ultralytics/utils/checks.py,sha256=tt-gsMIC0Vpo3TaB8-O83tqe6Q5CWPBXPFjEVwxB0RM,26816
|
|
134
134
|
ultralytics/utils/dist.py,sha256=egR2Z6Xlg75v72hddTut0q0-BIYvF-YCn_HE7PByuK8,2396
|
|
135
|
-
ultralytics/utils/downloads.py,sha256=
|
|
135
|
+
ultralytics/utils/downloads.py,sha256=mrU3KI7oKheRMsWqjQbv-X79Ov4vr7k_H5P3L-mw_IE,18198
|
|
136
136
|
ultralytics/utils/errors.py,sha256=wcNM8Yc0ln4X868kUM6pIsjKT_W67Kez4Vm72Xe-tYo,816
|
|
137
137
|
ultralytics/utils/files.py,sha256=6XTXdBqhz5xpSUYzdicedbiPyV82xwpNsZX5D2_oh9k,5280
|
|
138
138
|
ultralytics/utils/instance.py,sha256=0I1sYrARGrwHr2CtUcT8_D5jteZ4xhi5NsbV-XTaldI,15936
|
|
139
139
|
ultralytics/utils/loss.py,sha256=iD6xmsE07ajei1x37PM-0mU3TPwzMqBPT2qRryJJk0A,25735
|
|
140
140
|
ultralytics/utils/metrics.py,sha256=gp0qUTkqC5qiXgJOo1wUkqFZsy0ozrDqde4VRgivGkk,47077
|
|
141
|
-
ultralytics/utils/ops.py,sha256=
|
|
141
|
+
ultralytics/utils/ops.py,sha256=t9UBLqvGQJLGtqVsCSe_YNyidYjSysGVs5ZncTpls9g,31353
|
|
142
142
|
ultralytics/utils/patches.py,sha256=V3ARuy0sg-_yn6nzL7iOWSzR_RzFOuzsICy4P6qUegc,2233
|
|
143
143
|
ultralytics/utils/plotting.py,sha256=GyuZzzQJy3frFJC1m1TjcPE1QrtUQlibIsQ--rhVY54,31687
|
|
144
144
|
ultralytics/utils/tal.py,sha256=WxW_J5QC8oYAXKDy_huJC3mijBtpWG7UR145IAXO5_I,13675
|
|
@@ -156,9 +156,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=qIN0gJipB1f3Di7bw0Rb28jLYoCzJSWSqF
|
|
|
156
156
|
ultralytics/utils/callbacks/raytune.py,sha256=PGZvW_haVq8Cqha3GgvL7iBMAaxfn8_3u_IIdYCNMPo,608
|
|
157
157
|
ultralytics/utils/callbacks/tensorboard.py,sha256=AL8geYjG2NBBn4U1iHbmwF1rHDsNhVBeAmXo1tSLVgM,2830
|
|
158
158
|
ultralytics/utils/callbacks/wb.py,sha256=x_j4ZH4Klp0_Ld13f0UezFluUTS5Ovfgk9hcjwqeruU,6762
|
|
159
|
-
ultralytics-8.0.
|
|
160
|
-
ultralytics-8.0.
|
|
161
|
-
ultralytics-8.0.
|
|
162
|
-
ultralytics-8.0.
|
|
163
|
-
ultralytics-8.0.
|
|
164
|
-
ultralytics-8.0.
|
|
159
|
+
ultralytics-8.0.207.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
160
|
+
ultralytics-8.0.207.dist-info/METADATA,sha256=mtDGleHWG9622HQHPAe5y65Csa04QzIMA907jtOOvI8,31381
|
|
161
|
+
ultralytics-8.0.207.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
|
|
162
|
+
ultralytics-8.0.207.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
163
|
+
ultralytics-8.0.207.dist-info/top_level.txt,sha256=iXnUQZuWnkCwh3InMTwthfgww_zJjOjq1Cg9CoWen_0,762
|
|
164
|
+
ultralytics-8.0.207.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|