ultralytics 8.3.195__py3-none-any.whl → 8.3.196__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.
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/__init__.py +1 -0
- ultralytics/cfg/default.yaml +1 -0
- ultralytics/data/augment.py +1 -1
- ultralytics/data/build.py +5 -1
- ultralytics/engine/exporter.py +19 -31
- ultralytics/engine/predictor.py +3 -1
- ultralytics/engine/trainer.py +15 -4
- ultralytics/engine/validator.py +6 -2
- ultralytics/models/yolo/classify/train.py +1 -11
- ultralytics/models/yolo/detect/train.py +32 -6
- ultralytics/models/yolo/detect/val.py +6 -5
- ultralytics/models/yolo/obb/train.py +0 -9
- ultralytics/models/yolo/pose/train.py +1 -9
- ultralytics/models/yolo/pose/val.py +1 -1
- ultralytics/models/yolo/segment/train.py +1 -9
- ultralytics/models/yolo/segment/val.py +1 -1
- ultralytics/models/yolo/world/train.py +4 -4
- ultralytics/models/yolo/world/train_world.py +2 -2
- ultralytics/models/yolo/yoloe/train.py +3 -12
- ultralytics/models/yolo/yoloe/val.py +0 -7
- ultralytics/nn/modules/head.py +2 -1
- ultralytics/nn/tasks.py +4 -2
- ultralytics/utils/__init__.py +30 -19
- ultralytics/utils/callbacks/tensorboard.py +2 -2
- ultralytics/utils/checks.py +2 -0
- ultralytics/utils/loss.py +14 -8
- ultralytics/utils/plotting.py +1 -0
- ultralytics/utils/torch_utils.py +111 -9
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.196.dist-info}/METADATA +1 -1
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.196.dist-info}/RECORD +35 -35
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.196.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.196.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.196.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.196.dist-info}/top_level.txt +0 -0
@@ -98,13 +98,6 @@ class YOLOEDetectValidator(DetectionValidator):
|
|
98
98
|
visual_pe[cls_visual_num == 0] = 0
|
99
99
|
return visual_pe.unsqueeze(0)
|
100
100
|
|
101
|
-
def preprocess(self, batch: dict[str, Any]) -> dict[str, Any]:
|
102
|
-
"""Preprocess batch data, ensuring visuals are on the same device as images."""
|
103
|
-
batch = super().preprocess(batch)
|
104
|
-
if "visuals" in batch:
|
105
|
-
batch["visuals"] = batch["visuals"].to(batch["img"].device, non_blocking=True)
|
106
|
-
return batch
|
107
|
-
|
108
101
|
def get_vpe_dataloader(self, data: dict[str, Any]) -> torch.utils.data.DataLoader:
|
109
102
|
"""
|
110
103
|
Create a dataloader for LVIS training visual prompt samples.
|
ultralytics/nn/modules/head.py
CHANGED
@@ -13,7 +13,7 @@ from torch.nn.init import constant_, xavier_uniform_
|
|
13
13
|
|
14
14
|
from ultralytics.utils import NOT_MACOS14
|
15
15
|
from ultralytics.utils.tal import TORCH_1_10, dist2bbox, dist2rbox, make_anchors
|
16
|
-
from ultralytics.utils.torch_utils import fuse_conv_and_bn, smart_inference_mode
|
16
|
+
from ultralytics.utils.torch_utils import disable_dynamo, fuse_conv_and_bn, smart_inference_mode
|
17
17
|
|
18
18
|
from .block import DFL, SAVPE, BNContrastiveHead, ContrastiveHead, Proto, Residual, SwiGLUFFN
|
19
19
|
from .conv import Conv, DWConv
|
@@ -149,6 +149,7 @@ class Detect(nn.Module):
|
|
149
149
|
y = self.postprocess(y.permute(0, 2, 1), self.max_det, self.nc)
|
150
150
|
return y if self.export else (y, {"one2many": x, "one2one": one2one})
|
151
151
|
|
152
|
+
@disable_dynamo
|
152
153
|
def _inference(self, x: list[torch.Tensor]) -> torch.Tensor:
|
153
154
|
"""
|
154
155
|
Decode predicted bounding boxes and class probabilities based on multiple-level feature maps.
|
ultralytics/nn/tasks.py
CHANGED
@@ -334,7 +334,8 @@ class BaseModel(torch.nn.Module):
|
|
334
334
|
if getattr(self, "criterion", None) is None:
|
335
335
|
self.criterion = self.init_criterion()
|
336
336
|
|
337
|
-
|
337
|
+
if preds is None:
|
338
|
+
preds = self.forward(batch["img"])
|
338
339
|
return self.criterion(preds, batch)
|
339
340
|
|
340
341
|
def init_criterion(self):
|
@@ -775,7 +776,8 @@ class RTDETRDetectionModel(DetectionModel):
|
|
775
776
|
"gt_groups": gt_groups,
|
776
777
|
}
|
777
778
|
|
778
|
-
|
779
|
+
if preds is None:
|
780
|
+
preds = self.predict(img, batch=targets)
|
779
781
|
dec_bboxes, dec_scores, enc_bboxes, enc_scores, dn_meta = preds if self.training else preds[1]
|
780
782
|
if dn_meta is None:
|
781
783
|
dn_bboxes, dn_scores = None, None
|
ultralytics/utils/__init__.py
CHANGED
@@ -857,7 +857,7 @@ def get_ubuntu_version():
|
|
857
857
|
|
858
858
|
def get_user_config_dir(sub_dir="Ultralytics"):
|
859
859
|
"""
|
860
|
-
Return
|
860
|
+
Return a writable config dir, preferring YOLO_CONFIG_DIR and being OS-aware.
|
861
861
|
|
862
862
|
Args:
|
863
863
|
sub_dir (str): The name of the subdirectory to create.
|
@@ -865,27 +865,38 @@ def get_user_config_dir(sub_dir="Ultralytics"):
|
|
865
865
|
Returns:
|
866
866
|
(Path): The path to the user config directory.
|
867
867
|
"""
|
868
|
-
if
|
869
|
-
|
870
|
-
elif MACOS: # macOS
|
871
|
-
path = Path.home() / "Library" / "Application Support" / sub_dir
|
868
|
+
if env_dir := os.getenv("YOLO_CONFIG_DIR"):
|
869
|
+
p = Path(env_dir).expanduser() / sub_dir
|
872
870
|
elif LINUX:
|
873
|
-
|
871
|
+
p = Path(os.getenv("XDG_CONFIG_HOME", Path.home() / ".config")) / sub_dir
|
872
|
+
elif WINDOWS:
|
873
|
+
p = Path.home() / "AppData" / "Roaming" / sub_dir
|
874
|
+
elif MACOS:
|
875
|
+
p = Path.home() / "Library" / "Application Support" / sub_dir
|
874
876
|
else:
|
875
877
|
raise ValueError(f"Unsupported operating system: {platform.system()}")
|
876
878
|
|
877
|
-
#
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
879
|
+
if p.exists(): # already created → trust it
|
880
|
+
return p
|
881
|
+
if is_dir_writeable(p.parent): # create if possible
|
882
|
+
p.mkdir(parents=True, exist_ok=True)
|
883
|
+
return p
|
884
|
+
|
885
|
+
# Fallbacks for Docker, GCP/AWS functions where only /tmp is writeable
|
886
|
+
for alt in [Path("/tmp") / sub_dir, Path.cwd() / sub_dir]:
|
887
|
+
if alt.exists():
|
888
|
+
return alt
|
889
|
+
if is_dir_writeable(alt.parent):
|
890
|
+
alt.mkdir(parents=True, exist_ok=True)
|
891
|
+
LOGGER.warning(
|
892
|
+
f"user config directory '{p}' is not writeable, using '{alt}'. Set YOLO_CONFIG_DIR to override."
|
893
|
+
)
|
894
|
+
return alt
|
887
895
|
|
888
|
-
|
896
|
+
# Last fallback → CWD
|
897
|
+
p = Path.cwd() / sub_dir
|
898
|
+
p.mkdir(parents=True, exist_ok=True)
|
899
|
+
return p
|
889
900
|
|
890
901
|
|
891
902
|
# Define constants (required below)
|
@@ -899,7 +910,7 @@ IS_JUPYTER = is_jupyter()
|
|
899
910
|
IS_PIP_PACKAGE = is_pip_package()
|
900
911
|
IS_RASPBERRYPI = is_raspberrypi()
|
901
912
|
GIT = GitRepo()
|
902
|
-
USER_CONFIG_DIR =
|
913
|
+
USER_CONFIG_DIR = get_user_config_dir() # Ultralytics settings dir
|
903
914
|
SETTINGS_FILE = USER_CONFIG_DIR / "settings.json"
|
904
915
|
|
905
916
|
|
@@ -1383,7 +1394,7 @@ class SettingsManager(JSONDict):
|
|
1383
1394
|
|
1384
1395
|
def deprecation_warn(arg, new_arg=None):
|
1385
1396
|
"""Issue a deprecation warning when a deprecated argument is used, suggesting an updated argument."""
|
1386
|
-
msg = f"'{arg}' is deprecated and will be removed in
|
1397
|
+
msg = f"'{arg}' is deprecated and will be removed in the future."
|
1387
1398
|
if new_arg is not None:
|
1388
1399
|
msg += f" Use '{new_arg}' instead."
|
1389
1400
|
LOGGER.warning(msg)
|
@@ -70,14 +70,14 @@ def _log_tensorboard_graph(trainer) -> None:
|
|
70
70
|
# Try simple method first (YOLO)
|
71
71
|
try:
|
72
72
|
trainer.model.eval() # place in .eval() mode to avoid BatchNorm statistics changes
|
73
|
-
WRITER.add_graph(torch.jit.trace(torch_utils.
|
73
|
+
WRITER.add_graph(torch.jit.trace(torch_utils.unwrap_model(trainer.model), im, strict=False), [])
|
74
74
|
LOGGER.info(f"{PREFIX}model graph visualization added ✅")
|
75
75
|
return
|
76
76
|
|
77
77
|
except Exception:
|
78
78
|
# Fallback to TorchScript export steps (RTDETR)
|
79
79
|
try:
|
80
|
-
model = deepcopy(torch_utils.
|
80
|
+
model = deepcopy(torch_utils.unwrap_model(trainer.model))
|
81
81
|
model.eval()
|
82
82
|
model = model.fuse(verbose=False)
|
83
83
|
for m in model.modules():
|
ultralytics/utils/checks.py
CHANGED
@@ -452,6 +452,8 @@ def check_torchvision():
|
|
452
452
|
to the compatibility table based on: https://github.com/pytorch/vision#installation.
|
453
453
|
"""
|
454
454
|
compatibility_table = {
|
455
|
+
"2.9": ["0.24"],
|
456
|
+
"2.8": ["0.23"],
|
455
457
|
"2.7": ["0.22"],
|
456
458
|
"2.6": ["0.21"],
|
457
459
|
"2.5": ["0.20"],
|
ultralytics/utils/loss.py
CHANGED
@@ -11,7 +11,7 @@ import torch.nn.functional as F
|
|
11
11
|
from ultralytics.utils.metrics import OKS_SIGMA
|
12
12
|
from ultralytics.utils.ops import crop_mask, xywh2xyxy, xyxy2xywh
|
13
13
|
from ultralytics.utils.tal import RotatedTaskAlignedAssigner, TaskAlignedAssigner, dist2bbox, dist2rbox, make_anchors
|
14
|
-
from ultralytics.utils.torch_utils import autocast
|
14
|
+
from ultralytics.utils.torch_utils import autocast, disable_dynamo
|
15
15
|
|
16
16
|
from .metrics import bbox_iou, probiou
|
17
17
|
from .tal import bbox2dist
|
@@ -215,6 +215,7 @@ class v8DetectionLoss:
|
|
215
215
|
self.assigner = TaskAlignedAssigner(topk=tal_topk, num_classes=self.nc, alpha=0.5, beta=6.0)
|
216
216
|
self.bbox_loss = BboxLoss(m.reg_max).to(device)
|
217
217
|
self.proj = torch.arange(m.reg_max, dtype=torch.float, device=device)
|
218
|
+
disable_dynamo(self.__class__) # exclude from compile
|
218
219
|
|
219
220
|
def preprocess(self, targets: torch.Tensor, batch_size: int, scale_tensor: torch.Tensor) -> torch.Tensor:
|
220
221
|
"""Preprocess targets by converting to tensor format and scaling coordinates."""
|
@@ -260,7 +261,7 @@ class v8DetectionLoss:
|
|
260
261
|
|
261
262
|
# Targets
|
262
263
|
targets = torch.cat((batch["batch_idx"].view(-1, 1), batch["cls"].view(-1, 1), batch["bboxes"]), 1)
|
263
|
-
targets = self.preprocess(targets
|
264
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
264
265
|
gt_labels, gt_bboxes = targets.split((1, 4), 2) # cls, xyxy
|
265
266
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
266
267
|
|
@@ -287,9 +288,14 @@ class v8DetectionLoss:
|
|
287
288
|
|
288
289
|
# Bbox loss
|
289
290
|
if fg_mask.sum():
|
290
|
-
target_bboxes /= stride_tensor
|
291
291
|
loss[0], loss[2] = self.bbox_loss(
|
292
|
-
pred_distri,
|
292
|
+
pred_distri,
|
293
|
+
pred_bboxes,
|
294
|
+
anchor_points,
|
295
|
+
target_bboxes / stride_tensor,
|
296
|
+
target_scores,
|
297
|
+
target_scores_sum,
|
298
|
+
fg_mask,
|
293
299
|
)
|
294
300
|
|
295
301
|
loss[0] *= self.hyp.box # box gain
|
@@ -329,7 +335,7 @@ class v8SegmentationLoss(v8DetectionLoss):
|
|
329
335
|
try:
|
330
336
|
batch_idx = batch["batch_idx"].view(-1, 1)
|
331
337
|
targets = torch.cat((batch_idx, batch["cls"].view(-1, 1), batch["bboxes"]), 1)
|
332
|
-
targets = self.preprocess(targets
|
338
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
333
339
|
gt_labels, gt_bboxes = targets.split((1, 4), 2) # cls, xyxy
|
334
340
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
335
341
|
except RuntimeError as e:
|
@@ -388,7 +394,7 @@ class v8SegmentationLoss(v8DetectionLoss):
|
|
388
394
|
loss[2] *= self.hyp.cls # cls gain
|
389
395
|
loss[3] *= self.hyp.dfl # dfl gain
|
390
396
|
|
391
|
-
return loss * batch_size, loss.detach() # loss(box, cls, dfl)
|
397
|
+
return loss * batch_size, loss.detach() # loss(box, seg, cls, dfl)
|
392
398
|
|
393
399
|
@staticmethod
|
394
400
|
def single_mask_loss(
|
@@ -516,7 +522,7 @@ class v8PoseLoss(v8DetectionLoss):
|
|
516
522
|
batch_size = pred_scores.shape[0]
|
517
523
|
batch_idx = batch["batch_idx"].view(-1, 1)
|
518
524
|
targets = torch.cat((batch_idx, batch["cls"].view(-1, 1), batch["bboxes"]), 1)
|
519
|
-
targets = self.preprocess(targets
|
525
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
520
526
|
gt_labels, gt_bboxes = targets.split((1, 4), 2) # cls, xyxy
|
521
527
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
522
528
|
|
@@ -704,7 +710,7 @@ class v8OBBLoss(v8DetectionLoss):
|
|
704
710
|
targets = torch.cat((batch_idx, batch["cls"].view(-1, 1), batch["bboxes"].view(-1, 5)), 1)
|
705
711
|
rw, rh = targets[:, 4] * imgsz[0].item(), targets[:, 5] * imgsz[1].item()
|
706
712
|
targets = targets[(rw >= 2) & (rh >= 2)] # filter rboxes of tiny size to stabilize training
|
707
|
-
targets = self.preprocess(targets
|
713
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
708
714
|
gt_labels, gt_bboxes = targets.split((1, 5), 2) # cls, xywhr
|
709
715
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
710
716
|
except RuntimeError as e:
|
ultralytics/utils/plotting.py
CHANGED
@@ -1004,6 +1004,7 @@ def plot_tune_results(csv_file: str = "tune_results.csv"):
|
|
1004
1004
|
_save_one_file(csv_file.with_name("tune_fitness.png"))
|
1005
1005
|
|
1006
1006
|
|
1007
|
+
@plt_settings()
|
1007
1008
|
def feature_visualization(x, module_type: str, stage: int, n: int = 32, save_dir: Path = Path("runs/detect/exp")):
|
1008
1009
|
"""
|
1009
1010
|
Visualize feature maps of a given model module during inference.
|
ultralytics/utils/torch_utils.py
CHANGED
@@ -429,7 +429,7 @@ def get_flops(model, imgsz=640):
|
|
429
429
|
return 0.0 # if not installed return 0.0 GFLOPs
|
430
430
|
|
431
431
|
try:
|
432
|
-
model =
|
432
|
+
model = unwrap_model(model)
|
433
433
|
p = next(model.parameters())
|
434
434
|
if not isinstance(imgsz, list):
|
435
435
|
imgsz = [imgsz, imgsz] # expand if int/float
|
@@ -460,7 +460,7 @@ def get_flops_with_torch_profiler(model, imgsz=640):
|
|
460
460
|
"""
|
461
461
|
if not TORCH_2_0: # torch profiler implemented in torch>=2.0
|
462
462
|
return 0.0
|
463
|
-
model =
|
463
|
+
model = unwrap_model(model)
|
464
464
|
p = next(model.parameters())
|
465
465
|
if not isinstance(imgsz, list):
|
466
466
|
imgsz = [imgsz, imgsz] # expand if int/float
|
@@ -577,17 +577,24 @@ def is_parallel(model):
|
|
577
577
|
return isinstance(model, (nn.parallel.DataParallel, nn.parallel.DistributedDataParallel))
|
578
578
|
|
579
579
|
|
580
|
-
def
|
580
|
+
def unwrap_model(m: nn.Module) -> nn.Module:
|
581
581
|
"""
|
582
|
-
|
582
|
+
Unwrap compiled and parallel models to get the base model.
|
583
583
|
|
584
584
|
Args:
|
585
|
-
|
585
|
+
m (nn.Module): A model that may be wrapped by torch.compile (._orig_mod) or parallel wrappers such as
|
586
|
+
DataParallel/DistributedDataParallel (.module).
|
586
587
|
|
587
588
|
Returns:
|
588
|
-
(nn.Module):
|
589
|
+
m (nn.Module): The unwrapped base model without compile or parallel wrappers.
|
589
590
|
"""
|
590
|
-
|
591
|
+
while True:
|
592
|
+
if hasattr(m, "_orig_mod") and isinstance(m._orig_mod, nn.Module):
|
593
|
+
m = m._orig_mod
|
594
|
+
elif hasattr(m, "module") and isinstance(m.module, nn.Module):
|
595
|
+
m = m.module
|
596
|
+
else:
|
597
|
+
return m
|
591
598
|
|
592
599
|
|
593
600
|
def one_cycle(y1=0.0, y2=1.0, steps=100):
|
@@ -669,7 +676,7 @@ class ModelEMA:
|
|
669
676
|
tau (int, optional): EMA decay time constant.
|
670
677
|
updates (int, optional): Initial number of updates.
|
671
678
|
"""
|
672
|
-
self.ema = deepcopy(
|
679
|
+
self.ema = deepcopy(unwrap_model(model)).eval() # FP32 EMA
|
673
680
|
self.updates = updates # number of EMA updates
|
674
681
|
self.decay = lambda x: decay * (1 - math.exp(-x / tau)) # decay exponential ramp (to help early epochs)
|
675
682
|
for p in self.ema.parameters():
|
@@ -687,7 +694,7 @@ class ModelEMA:
|
|
687
694
|
self.updates += 1
|
688
695
|
d = self.decay(self.updates)
|
689
696
|
|
690
|
-
msd =
|
697
|
+
msd = unwrap_model(model).state_dict() # model state_dict
|
691
698
|
for k, v in self.ema.state_dict().items():
|
692
699
|
if v.dtype.is_floating_point: # true for FP16 and FP32
|
693
700
|
v *= d
|
@@ -997,3 +1004,98 @@ class FXModel(nn.Module):
|
|
997
1004
|
x = m(x) # run
|
998
1005
|
y.append(x) # save output
|
999
1006
|
return x
|
1007
|
+
|
1008
|
+
|
1009
|
+
def disable_dynamo(func: Any) -> Any:
|
1010
|
+
"""
|
1011
|
+
Disable torch.compile/dynamo for a callable when available.
|
1012
|
+
|
1013
|
+
Args:
|
1014
|
+
func (Any): Callable object to wrap. Could be a function, method, or class.
|
1015
|
+
|
1016
|
+
Returns:
|
1017
|
+
func (Any): Same callable, wrapped by torch._dynamo.disable when available, otherwise unchanged.
|
1018
|
+
|
1019
|
+
Examples:
|
1020
|
+
>>> @disable_dynamo
|
1021
|
+
... def fn(x):
|
1022
|
+
... return x + 1
|
1023
|
+
>>> # Works even if torch._dynamo is not available
|
1024
|
+
>>> _ = fn(1)
|
1025
|
+
"""
|
1026
|
+
if hasattr(torch, "_dynamo"):
|
1027
|
+
return torch._dynamo.disable(func)
|
1028
|
+
return func
|
1029
|
+
|
1030
|
+
|
1031
|
+
def attempt_compile(
|
1032
|
+
model: torch.nn.Module,
|
1033
|
+
device: torch.device,
|
1034
|
+
imgsz: int = 640,
|
1035
|
+
use_autocast: bool = False,
|
1036
|
+
warmup: bool = False,
|
1037
|
+
prefix: str = colorstr("compile:"),
|
1038
|
+
) -> torch.nn.Module:
|
1039
|
+
"""
|
1040
|
+
Compile a model with torch.compile and optionally warm up the graph to reduce first-iteration latency.
|
1041
|
+
|
1042
|
+
This utility attempts to compile the provided model using the inductor backend with dynamic shapes enabled and an
|
1043
|
+
autotuning mode. If compilation is unavailable or fails, the original model is returned unchanged. An optional
|
1044
|
+
warmup performs a single forward pass on a dummy input to prime the compiled graph and measure compile/warmup time.
|
1045
|
+
|
1046
|
+
Args:
|
1047
|
+
model (torch.nn.Module): Model to compile.
|
1048
|
+
device (torch.device): Inference device used for warmup and autocast decisions.
|
1049
|
+
imgsz (int, optional): Square input size to create a dummy tensor with shape (1, 3, imgsz, imgsz) for warmup.
|
1050
|
+
use_autocast (bool, optional): Whether to run warmup under autocast on CUDA or MPS devices.
|
1051
|
+
warmup (bool, optional): Whether to execute a single dummy forward pass to warm up the compiled model.
|
1052
|
+
prefix (str, optional): Message prefix for logger output.
|
1053
|
+
|
1054
|
+
Returns:
|
1055
|
+
model (torch.nn.Module): Compiled model if compilation succeeds, otherwise the original unmodified model.
|
1056
|
+
|
1057
|
+
Notes:
|
1058
|
+
- If the current PyTorch build does not provide torch.compile, the function returns the input model immediately.
|
1059
|
+
- Warmup runs under torch.inference_mode and may use torch.autocast for CUDA/MPS to align compute precision.
|
1060
|
+
- CUDA devices are synchronized after warmup to account for asynchronous kernel execution.
|
1061
|
+
|
1062
|
+
Examples:
|
1063
|
+
>>> device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
1064
|
+
>>> # Try to compile and warm up a model with a 640x640 input
|
1065
|
+
>>> model = attempt_compile(model, device=device, imgsz=640, use_autocast=True, warmup=True)
|
1066
|
+
"""
|
1067
|
+
if not hasattr(torch, "compile"):
|
1068
|
+
return model
|
1069
|
+
|
1070
|
+
LOGGER.info(f"{prefix} starting torch.compile...")
|
1071
|
+
t0 = time.perf_counter()
|
1072
|
+
try:
|
1073
|
+
model = torch.compile(model, mode="max-autotune", backend="inductor")
|
1074
|
+
except Exception as e:
|
1075
|
+
LOGGER.warning(f"{prefix} torch.compile failed, continuing uncompiled: {e}")
|
1076
|
+
return model
|
1077
|
+
t_compile = time.perf_counter() - t0
|
1078
|
+
|
1079
|
+
t_warm = 0.0
|
1080
|
+
if warmup:
|
1081
|
+
# Use a single dummy tensor to build the graph shape state and reduce first-iteration latency
|
1082
|
+
dummy = torch.zeros(1, 3, imgsz, imgsz, device=device)
|
1083
|
+
if use_autocast and device.type == "cuda":
|
1084
|
+
dummy = dummy.half()
|
1085
|
+
t1 = time.perf_counter()
|
1086
|
+
with torch.inference_mode():
|
1087
|
+
if use_autocast and device.type in {"cuda", "mps"}:
|
1088
|
+
with torch.autocast(device.type):
|
1089
|
+
_ = model(dummy)
|
1090
|
+
else:
|
1091
|
+
_ = model(dummy)
|
1092
|
+
if device.type == "cuda":
|
1093
|
+
torch.cuda.synchronize(device)
|
1094
|
+
t_warm = time.perf_counter() - t1
|
1095
|
+
|
1096
|
+
total = t_compile + t_warm
|
1097
|
+
if warmup:
|
1098
|
+
LOGGER.info(f"{prefix} complete in {total:.1f}s (compile {t_compile:.1f}s + warmup {t_warm:.1f}s)")
|
1099
|
+
else:
|
1100
|
+
LOGGER.info(f"{prefix} compile complete in {t_compile:.1f}s (no warmup)")
|
1101
|
+
return model
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.196
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -7,12 +7,12 @@ tests/test_exports.py,sha256=dWuroSyqXnrc0lE-RNTf7pZoXXXEkOs31u7nhOiEHS0,10994
|
|
7
7
|
tests/test_integrations.py,sha256=kl_AKmE_Qs1GB0_91iVwbzNxofm_hFTt0zzU6JF-pg4,6323
|
8
8
|
tests/test_python.py,sha256=2V23f2-JQsO-K4p1kj0IkCRxHykGwgd0edKJzRsBgdI,27911
|
9
9
|
tests/test_solutions.py,sha256=6wJ9-lhyWSAm7zaR4D9L_DrUA3iJU1NgqmbQO6PIuvo,13211
|
10
|
-
ultralytics/__init__.py,sha256=
|
10
|
+
ultralytics/__init__.py,sha256=APj9NfEx0ZIorMTCYwzpAWb-sLPKJBI99dE1cPUC-ms,730
|
11
11
|
ultralytics/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
12
12
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
13
13
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
14
|
-
ultralytics/cfg/__init__.py,sha256=
|
15
|
-
ultralytics/cfg/default.yaml,sha256=
|
14
|
+
ultralytics/cfg/__init__.py,sha256=oR-uubaBOEIetwoKr9C9WeXP7fLwVygDE_Cppoe2ho0,39974
|
15
|
+
ultralytics/cfg/default.yaml,sha256=jnt-5OmGalqd_SSEa1cf4HkBaJy0IswpoW5gdkoF5Vc,8429
|
16
16
|
ultralytics/cfg/datasets/Argoverse.yaml,sha256=J4ItoUlE_EiYTmp1DFKYHfbqHkj8j4wUtRJQhaMIlBM,3275
|
17
17
|
ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=VZ_KKFX0H2YvlFVJ8JHcLWYBZ2xiQ6Z-ROSTiKWpS7c,1211
|
18
18
|
ultralytics/cfg/datasets/DOTAv1.yaml,sha256=JrDuYcQ0JU9lJlCA-dCkMNko_jaj6MAVGHjsfjeZ_u0,1181
|
@@ -106,9 +106,9 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=TpRaK5kH_-QbjCQ7ekM4s_7j8I8ti3q8Hs7
|
|
106
106
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypgv26LGCtPDg,886
|
107
107
|
ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
|
108
108
|
ultralytics/data/annotator.py,sha256=f15TCDEM8SuuzHiFB8oyhTy9vfywKmPTLSPAgsZQP9I,2990
|
109
|
-
ultralytics/data/augment.py,sha256=
|
109
|
+
ultralytics/data/augment.py,sha256=3ArOOP1dSnCfQRHIQ6og-XFsaLnSqrXYtx-tpbE4Kag,132893
|
110
110
|
ultralytics/data/base.py,sha256=gWoGFifyNe1TCwtGdGp5jzKOQ9sh4b-XrfyN0PPvRaY,19661
|
111
|
-
ultralytics/data/build.py,sha256=
|
111
|
+
ultralytics/data/build.py,sha256=Bhu8E-FNSkTbz6YpNXeUBmQtN91ZtZxOCUiKYXgzV-c,11778
|
112
112
|
ultralytics/data/converter.py,sha256=N1YFD0mG7uwL12wMcuVtF2zbISBIzTsGiy1QioDTDGs,32049
|
113
113
|
ultralytics/data/dataset.py,sha256=AfWOLsLKjTDHRtSqODKk5OsD3ViETZTKxY4PKP2Jo5Q,36751
|
114
114
|
ultralytics/data/loaders.py,sha256=sfQ0C86uBg9QQbN3aU0W8FIjGQmMdJTQAMK4DA1bjk8,31748
|
@@ -120,13 +120,13 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
|
|
120
120
|
ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
|
121
121
|
ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
|
122
122
|
ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
123
|
-
ultralytics/engine/exporter.py,sha256=
|
123
|
+
ultralytics/engine/exporter.py,sha256=d_2ADzklNXhVpwfAmJlp6PVuT0sLXf7O2SP486jpBy4,74966
|
124
124
|
ultralytics/engine/model.py,sha256=1n5oqCDJYzRWPU0-79hc6txCIGpXmZVTnB-ae9nahRc,53488
|
125
|
-
ultralytics/engine/predictor.py,sha256=
|
125
|
+
ultralytics/engine/predictor.py,sha256=510VPYcYmEYPJmBiApQLGaFFAL4gd79rVzPCwisH7LE,22745
|
126
126
|
ultralytics/engine/results.py,sha256=BmhePCaaTBfYrJT12t6bywZuZ_7h3tIc4IsRFuyNTdk,71499
|
127
|
-
ultralytics/engine/trainer.py,sha256=
|
127
|
+
ultralytics/engine/trainer.py,sha256=XeXZ8BAvH5ZtU7zW44Jsf7SOxtkAG8RL9NO_nhpfkZo,40898
|
128
128
|
ultralytics/engine/tuner.py,sha256=XuqcjyGpD79pUVn-PXlJJGKXgH1yblPdYBH_R2kHWSU,20586
|
129
|
-
ultralytics/engine/validator.py,sha256=
|
129
|
+
ultralytics/engine/validator.py,sha256=7tADPOXRZz0Yi7F-Z5SxcUnwytaa2MfbtuSdO8pp_l4,16966
|
130
130
|
ultralytics/hub/__init__.py,sha256=xCF02lzlPKbdmGfO3NxLuXl5Kb0MaBZp_-fAWDHZ8zw,6698
|
131
131
|
ultralytics/hub/auth.py,sha256=RIwZDWfW6vS2yGpZKR0xVl0-38itJYEFtmqY_M70bl8,6304
|
132
132
|
ultralytics/hub/session.py,sha256=1o9vdd_fvPUHQ5oZgljtPePuPMUalIoXqOvE7Sdmd2o,18450
|
@@ -168,41 +168,41 @@ ultralytics/models/yolo/__init__.py,sha256=or0j5xvcM0usMlsFTYhNAOcQUri7reD0cD9JR
|
|
168
168
|
ultralytics/models/yolo/model.py,sha256=b_F1AeBUgiSssRxZ-rGQVdB0a37rDG92h_03o0N29B8,18761
|
169
169
|
ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
|
170
170
|
ultralytics/models/yolo/classify/predict.py,sha256=o7pDE8xwjkHUUIIOph7ZVQZyGZyob24dYDQ460v_7R0,4149
|
171
|
-
ultralytics/models/yolo/classify/train.py,sha256=
|
171
|
+
ultralytics/models/yolo/classify/train.py,sha256=CXi8ZrVqYtqlzRbg3UP5kOyMYXAM4Wex8Ii0fDyv-iA,9840
|
172
172
|
ultralytics/models/yolo/classify/val.py,sha256=6_-pbnb0skASJCqsar6_i3FyvfKNJwZ7Y8AK7wzySIU,10039
|
173
173
|
ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
|
174
174
|
ultralytics/models/yolo/detect/predict.py,sha256=v4u3azp2zQxJKJ4L198gGIgkL7CN-6qGg1B7ypBxxbM,5390
|
175
|
-
ultralytics/models/yolo/detect/train.py,sha256=
|
176
|
-
ultralytics/models/yolo/detect/val.py,sha256=
|
175
|
+
ultralytics/models/yolo/detect/train.py,sha256=y6qVw9az7hOMo5eXQ4a9i29wIvvwnpVfzZJJC7V7YC8,10947
|
176
|
+
ultralytics/models/yolo/detect/val.py,sha256=OG38-x3LyCAeH3UY9jOG4axK7mfnVnTwaKpjMzQi07I,21309
|
177
177
|
ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
|
178
178
|
ultralytics/models/yolo/obb/predict.py,sha256=4r1eSld6TNJlk9JG56e-DX6oPL8uBBqiuztyBpxWlHE,2888
|
179
|
-
ultralytics/models/yolo/obb/train.py,sha256=
|
179
|
+
ultralytics/models/yolo/obb/train.py,sha256=BbehrsKP0lHRV3v7rrw8wAeiDdc-szbhHAmDy0OdhoM,3461
|
180
180
|
ultralytics/models/yolo/obb/val.py,sha256=ZNjdI5dF-igZCqJadAUb5VPTevI5i47G-bPTG8wV-CY,14171
|
181
181
|
ultralytics/models/yolo/pose/__init__.py,sha256=63xmuHZLNzV8I76HhVXAq4f2W0KTk8Oi9eL-Y204LyQ,227
|
182
182
|
ultralytics/models/yolo/pose/predict.py,sha256=M0C7ZfVXx4QXgv-szjnaXYEPas76ZLGAgDNNh1GG0vI,3743
|
183
|
-
ultralytics/models/yolo/pose/train.py,sha256=
|
184
|
-
ultralytics/models/yolo/pose/val.py,sha256=
|
183
|
+
ultralytics/models/yolo/pose/train.py,sha256=laAn8ej3nihl119agEr0P8TxP8c8itI8E0I0lov4VE0,5079
|
184
|
+
ultralytics/models/yolo/pose/val.py,sha256=U4tMWbHpCjspJ6i5DbNUav05RFCvwvfD1mjejqJIJ1c,12638
|
185
185
|
ultralytics/models/yolo/segment/__init__.py,sha256=3IThhZ1wlkY9FvmWm9cE-5-ZyE6F1FgzAtQ6jOOFzzw,275
|
186
186
|
ultralytics/models/yolo/segment/predict.py,sha256=zxMc1QvsQoJxm6VSbbZQ3pChvq1VbYSf7p8RX3RbPNg,5377
|
187
|
-
ultralytics/models/yolo/segment/train.py,sha256=
|
188
|
-
ultralytics/models/yolo/segment/val.py,sha256=
|
187
|
+
ultralytics/models/yolo/segment/train.py,sha256=MWnJ593xaEhlV0EirEMZtlz0Zj6wz6EGUFfH2dHcBIA,3324
|
188
|
+
ultralytics/models/yolo/segment/val.py,sha256=LnRCVa1uQTmDN5qLWHpVwBL2ieF_d7ly9hSkQ7k3GwE,11112
|
189
189
|
ultralytics/models/yolo/world/__init__.py,sha256=nlh8I6t8hMGz_vZg8QSlsUW1R-2eKvn9CGUoPPQEGhA,131
|
190
|
-
ultralytics/models/yolo/world/train.py,sha256=
|
191
|
-
ultralytics/models/yolo/world/train_world.py,sha256=
|
190
|
+
ultralytics/models/yolo/world/train.py,sha256=zVPtVoBedberGkth3tPuIH665HjGNJvTMLw_wLZQM84,7870
|
191
|
+
ultralytics/models/yolo/world/train_world.py,sha256=9p9YIckrATaJjGOrpmuC8MbZX9qdoCPCEV9EGZ0sExg,9553
|
192
192
|
ultralytics/models/yolo/yoloe/__init__.py,sha256=6SLytdJtwu37qewf7CobG7C7Wl1m-xtNdvCXEasfPDE,760
|
193
193
|
ultralytics/models/yolo/yoloe/predict.py,sha256=pcbAUbosr1Xc436MfQi6ah3MQ6kkPzjOcltmdA3VMDE,7124
|
194
|
-
ultralytics/models/yolo/yoloe/train.py,sha256=
|
194
|
+
ultralytics/models/yolo/yoloe/train.py,sha256=jcXqGm8CReOCVMFLk-1bNe0Aw5PWaaQa8xBWxtrt5TY,13571
|
195
195
|
ultralytics/models/yolo/yoloe/train_seg.py,sha256=aCV7M8oQOvODFnU4piZdJh3tIrBJYAzZfRVRx1vRgxo,4956
|
196
|
-
ultralytics/models/yolo/yoloe/val.py,sha256=
|
196
|
+
ultralytics/models/yolo/yoloe/val.py,sha256=Dn6CKpfcopDVxr-WY13ATDVb_RIzQ-wsXSxxy_mpndA,9454
|
197
197
|
ultralytics/nn/__init__.py,sha256=PJgOn2phQTTBR2P3s_JWvGeGXQpvw1znsumKow4tCuE,545
|
198
198
|
ultralytics/nn/autobackend.py,sha256=WWHIFvCI47Wpe3NCDkoUg3esjOTJ0XGEzG3luA_uG-8,41063
|
199
|
-
ultralytics/nn/tasks.py,sha256=
|
199
|
+
ultralytics/nn/tasks.py,sha256=2MnuL8plr4oE_gpSIeSbCYrbkdMXdludQWWj_liWsv8,70404
|
200
200
|
ultralytics/nn/text_model.py,sha256=pHqnKe8UueR1MuwJcIE_IvrnYIlt68QL796xjcRJs2A,15275
|
201
201
|
ultralytics/nn/modules/__init__.py,sha256=BPMbEm1daI7Tuds3zph2_afAX7Gq1uAqK8BfiCfKTZs,3198
|
202
202
|
ultralytics/nn/modules/activation.py,sha256=75JcIMH2Cu9GTC2Uf55r_5YLpxcrXQDaVoeGQ0hlUAU,2233
|
203
203
|
ultralytics/nn/modules/block.py,sha256=nIIOTEuikiVWELuOt2VyfXPpvof9p4qNSdaQzq5WlCg,70618
|
204
204
|
ultralytics/nn/modules/conv.py,sha256=U6P1ZuzQmIf09noKwp7syuWn-M98Tly2wMWOsDT3kOI,21457
|
205
|
-
ultralytics/nn/modules/head.py,sha256=
|
205
|
+
ultralytics/nn/modules/head.py,sha256=NNSrnYBDMlKssyePyK5T-WWaadfELCD_Fdn_IIbtIXs,53592
|
206
206
|
ultralytics/nn/modules/transformer.py,sha256=l6NuuFF7j_bogcNULHBBdj5l6sf7MwiVEGz8XcRyTUM,31366
|
207
207
|
ultralytics/nn/modules/utils.py,sha256=rn8yTObZGkQoqVzjbZWLaHiytppG4ffjMME4Lw60glM,6092
|
208
208
|
ultralytics/solutions/__init__.py,sha256=ZoeAQavTLp8aClnhZ9tbl6lxy86GxofyGvZWTx2aWkI,1209
|
@@ -235,11 +235,11 @@ ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6D
|
|
235
235
|
ultralytics/trackers/utils/gmc.py,sha256=1cCmlbk5Z6Pd-rFCaiJML7o_cUm_IktMuCocTDOMGFQ,14028
|
236
236
|
ultralytics/trackers/utils/kalman_filter.py,sha256=PPmM0lwBMdT_hGojvfLoUsBUFMBBMNRAxKbMcQa3wJ0,21619
|
237
237
|
ultralytics/trackers/utils/matching.py,sha256=I8SX0sBaBgr4GBJ9uDGOy5LnotgNZHpB2p5RNF1sy-s,7160
|
238
|
-
ultralytics/utils/__init__.py,sha256=
|
238
|
+
ultralytics/utils/__init__.py,sha256=whSIuj-0lV0SAp4YjOeBJZ2emP1Qa8pqLnrhRiwl2Qs,53503
|
239
239
|
ultralytics/utils/autobatch.py,sha256=i6KYLLSItKP1Q2IUlTPHrZhjcxl7UOjs0Seb8bF8pvM,5124
|
240
240
|
ultralytics/utils/autodevice.py,sha256=d9yq6eEn05fdfzfpxeSECd0YEO61er5f7T-0kjLdofg,8843
|
241
241
|
ultralytics/utils/benchmarks.py,sha256=lcIr--oKK0TCjUVbvrm-NtYrnszrEMuHJC9__ziM7y8,31458
|
242
|
-
ultralytics/utils/checks.py,sha256=
|
242
|
+
ultralytics/utils/checks.py,sha256=Jw5pwREBnlyrq3zbiHEwiQXir2-f7dGpXeqY_PgoNpw,34518
|
243
243
|
ultralytics/utils/cpu.py,sha256=OPlVxROWhQp-kEa9EkeNRKRQ-jz0KwySu5a-h91JZjk,3634
|
244
244
|
ultralytics/utils/dist.py,sha256=g7OKPrSgjIB2wgcncSFYtFuR-uW6J0-Y1z76k4gDSz0,4170
|
245
245
|
ultralytics/utils/downloads.py,sha256=JIlHfUg-qna5aOHRJupH7d5zob2qGZtRrs86Cp3zOJs,23029
|
@@ -250,14 +250,14 @@ ultralytics/utils/files.py,sha256=kxE2rkBuZL288nSN7jxLljmDnBgc16rekEXeRjhbUoo,82
|
|
250
250
|
ultralytics/utils/git.py,sha256=DcaxKNQfCiG3cxdzuw7M6l_VXgaSVqkERQt_vl8UyXM,5512
|
251
251
|
ultralytics/utils/instance.py,sha256=_b_jMTECWJGzncCiTg7FtTDSSeXGnbiAhaJhIsqbn9k,19043
|
252
252
|
ultralytics/utils/logger.py,sha256=o_vH4CCgQat6_Sbmwm1sUAJ4muAgVcsUed-WqpGNQZw,15129
|
253
|
-
ultralytics/utils/loss.py,sha256=
|
253
|
+
ultralytics/utils/loss.py,sha256=S1mzVkIPjoNUxSQjZHfTdzuMEuYvdRmwfZoMg_fMMeE,39906
|
254
254
|
ultralytics/utils/metrics.py,sha256=xFlSqx_su96LAUpxfGP7ShEG50Qo5p5OtwR3hx4_Llc,68809
|
255
255
|
ultralytics/utils/nms.py,sha256=pcAaKIMssVGX3jlFmEEm6P_SL9PrXsTgu0rpx-_TDi8,14199
|
256
256
|
ultralytics/utils/ops.py,sha256=PW3fgw1d18CA2ZNQZVJqUy054cJ_9tIcxd1XnA0FPgU,26905
|
257
257
|
ultralytics/utils/patches.py,sha256=0-2G4jXCIPnMonlft-cPcjfFcOXQS6ODwUDNUwanfg4,6541
|
258
|
-
ultralytics/utils/plotting.py,sha256=
|
258
|
+
ultralytics/utils/plotting.py,sha256=rumZLvfLX1bE9xQS7Gk13kVM7AmIxQOmQ5CAmhsdxCE,47531
|
259
259
|
ultralytics/utils/tal.py,sha256=LrziY_ZHz4wln3oOnqAzgyPaXKoup17Sa103BpuaQFU,20935
|
260
|
-
ultralytics/utils/torch_utils.py,sha256=
|
260
|
+
ultralytics/utils/torch_utils.py,sha256=i_IgmGhb5UuNlFgg4TZJrm2NSjAe_YfhGIY7Sn7cSSk,43472
|
261
261
|
ultralytics/utils/tqdm.py,sha256=ny5RIg2OTkWQ7gdaXfYaoIgR0Xn2_hNGB6tUpO2Unns,16137
|
262
262
|
ultralytics/utils/triton.py,sha256=fbMfTAUyoGiyslWtySzLZw53XmZJa7rF31CYFot0Wjs,5422
|
263
263
|
ultralytics/utils/tuner.py,sha256=9D4dSIvwwxcNSJcH2QJ92qiIVi9zu-1L7_PBZ8okDyE,6816
|
@@ -271,11 +271,11 @@ ultralytics/utils/callbacks/mlflow.py,sha256=6K8I5zij1yq3TUW9c5BBQNqdzz3IXugQjwK
|
|
271
271
|
ultralytics/utils/callbacks/neptune.py,sha256=j8pecmlcsM8FGzLKWoBw5xUsi5t8E5HuxY7TR5Um_O8,4612
|
272
272
|
ultralytics/utils/callbacks/platform.py,sha256=a7T_8htoBB0uX1WIc392UJnhDjxkRyQMvhPYKR6wUTU,2008
|
273
273
|
ultralytics/utils/callbacks/raytune.py,sha256=S6Bq16oQDQ8BQgnZzA0zJHGN_BBr8iAM_WtGoLiEcwg,1283
|
274
|
-
ultralytics/utils/callbacks/tensorboard.py,sha256=
|
274
|
+
ultralytics/utils/callbacks/tensorboard.py,sha256=_4nfGK1dDLn6ijpvphBDhc-AS8qhS3jjY2CAWB7SNF0,5283
|
275
275
|
ultralytics/utils/callbacks/wb.py,sha256=ngQO8EJ1kxJDF1YajScVtzBbm26jGuejA0uWeOyvf5A,7685
|
276
|
-
ultralytics-8.3.
|
277
|
-
ultralytics-8.3.
|
278
|
-
ultralytics-8.3.
|
279
|
-
ultralytics-8.3.
|
280
|
-
ultralytics-8.3.
|
281
|
-
ultralytics-8.3.
|
276
|
+
ultralytics-8.3.196.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
277
|
+
ultralytics-8.3.196.dist-info/METADATA,sha256=3pZe7aM3MEicB69j31gpgBhB6rVtF7-_zwaPKINQ7us,37667
|
278
|
+
ultralytics-8.3.196.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
279
|
+
ultralytics-8.3.196.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
280
|
+
ultralytics-8.3.196.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
281
|
+
ultralytics-8.3.196.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|