ultralytics 8.3.195__py3-none-any.whl → 8.3.197__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/datasets/construction-ppe.yaml +32 -0
- ultralytics/cfg/default.yaml +1 -0
- ultralytics/data/augment.py +1 -1
- ultralytics/data/build.py +5 -1
- ultralytics/engine/exporter.py +20 -31
- ultralytics/engine/model.py +1 -2
- ultralytics/engine/predictor.py +3 -1
- ultralytics/engine/trainer.py +17 -8
- ultralytics/engine/validator.py +6 -2
- ultralytics/models/yolo/classify/train.py +1 -11
- ultralytics/models/yolo/detect/train.py +27 -6
- ultralytics/models/yolo/detect/val.py +6 -5
- ultralytics/models/yolo/obb/train.py +0 -9
- ultralytics/models/yolo/pose/train.py +0 -9
- ultralytics/models/yolo/pose/val.py +1 -1
- ultralytics/models/yolo/segment/train.py +0 -9
- ultralytics/models/yolo/segment/val.py +5 -5
- 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/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 +12 -7
- ultralytics/utils/nms.py +3 -1
- ultralytics/utils/plotting.py +1 -0
- ultralytics/utils/torch_utils.py +89 -9
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.197.dist-info}/METADATA +1 -1
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.197.dist-info}/RECORD +37 -36
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.197.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.197.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.197.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.195.dist-info → ultralytics-8.3.197.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,7 @@ from ultralytics.data import YOLOConcatDataset, build_grounding, build_yolo_data
|
|
6
6
|
from ultralytics.data.utils import check_det_dataset
|
7
7
|
from ultralytics.models.yolo.world import WorldTrainer
|
8
8
|
from ultralytics.utils import DATASETS_DIR, DEFAULT_CFG, LOGGER
|
9
|
-
from ultralytics.utils.torch_utils import
|
9
|
+
from ultralytics.utils.torch_utils import unwrap_model
|
10
10
|
|
11
11
|
|
12
12
|
class WorldTrainerFromScratch(WorldTrainer):
|
@@ -101,7 +101,7 @@ class WorldTrainerFromScratch(WorldTrainer):
|
|
101
101
|
Returns:
|
102
102
|
(YOLOConcatDataset | Dataset): The constructed dataset for training or validation.
|
103
103
|
"""
|
104
|
-
gs = max(int(
|
104
|
+
gs = max(int(unwrap_model(self.model).stride.max() if self.model else 0), 32)
|
105
105
|
if mode != "train":
|
106
106
|
return build_yolo_dataset(self.args, img_path, batch, self.data, mode=mode, rect=False, stride=gs)
|
107
107
|
datasets = [
|
@@ -13,7 +13,7 @@ from ultralytics.data.augment import LoadVisualPrompt
|
|
13
13
|
from ultralytics.models.yolo.detect import DetectionTrainer, DetectionValidator
|
14
14
|
from ultralytics.nn.tasks import YOLOEModel
|
15
15
|
from ultralytics.utils import DEFAULT_CFG, LOGGER, RANK
|
16
|
-
from ultralytics.utils.torch_utils import
|
16
|
+
from ultralytics.utils.torch_utils import unwrap_model
|
17
17
|
|
18
18
|
from ..world.train_world import WorldTrainerFromScratch
|
19
19
|
from .val import YOLOEDetectValidator
|
@@ -39,9 +39,6 @@ class YOLOETrainer(DetectionTrainer):
|
|
39
39
|
"""
|
40
40
|
Initialize the YOLOE Trainer with specified configurations.
|
41
41
|
|
42
|
-
This method sets up the YOLOE trainer with the provided configuration and overrides, initializing
|
43
|
-
the training environment, model, and callbacks for YOLOE object detection training.
|
44
|
-
|
45
42
|
Args:
|
46
43
|
cfg (dict): Configuration dictionary with default training settings from DEFAULT_CFG.
|
47
44
|
overrides (dict, optional): Dictionary of parameter overrides for the default configuration.
|
@@ -102,7 +99,7 @@ class YOLOETrainer(DetectionTrainer):
|
|
102
99
|
Returns:
|
103
100
|
(Dataset): YOLO dataset configured for training or validation.
|
104
101
|
"""
|
105
|
-
gs = max(int(
|
102
|
+
gs = max(int(unwrap_model(self.model).stride.max() if self.model else 0), 32)
|
106
103
|
return build_yolo_dataset(
|
107
104
|
self.args, img_path, batch, self.data, mode=mode, rect=mode == "val", stride=gs, multi_modal=mode == "train"
|
108
105
|
)
|
@@ -223,7 +220,7 @@ class YOLOETrainerFromScratch(YOLOETrainer, WorldTrainerFromScratch):
|
|
223
220
|
return txt_map
|
224
221
|
LOGGER.info(f"Caching text embeddings to '{cache_path}'")
|
225
222
|
assert self.model is not None
|
226
|
-
txt_feats =
|
223
|
+
txt_feats = unwrap_model(self.model).get_text_pe(texts, batch, without_reprta=True, cache_clip_model=False)
|
227
224
|
txt_map = dict(zip(texts, txt_feats.squeeze(0)))
|
228
225
|
torch.save(txt_map, cache_path)
|
229
226
|
return txt_map
|
@@ -313,9 +310,3 @@ class YOLOEVPTrainer(YOLOETrainerFromScratch):
|
|
313
310
|
d.transforms.append(LoadVisualPrompt())
|
314
311
|
else:
|
315
312
|
self.train_loader.dataset.transforms.append(LoadVisualPrompt())
|
316
|
-
|
317
|
-
def preprocess_batch(self, batch):
|
318
|
-
"""Preprocess a batch of images for YOLOE training, moving visual prompts to the appropriate device."""
|
319
|
-
batch = super().preprocess_batch(batch)
|
320
|
-
batch["visuals"] = batch["visuals"].to(self.device, non_blocking=True)
|
321
|
-
return batch
|
@@ -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/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
@@ -260,7 +260,7 @@ class v8DetectionLoss:
|
|
260
260
|
|
261
261
|
# Targets
|
262
262
|
targets = torch.cat((batch["batch_idx"].view(-1, 1), batch["cls"].view(-1, 1), batch["bboxes"]), 1)
|
263
|
-
targets = self.preprocess(targets
|
263
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
264
264
|
gt_labels, gt_bboxes = targets.split((1, 4), 2) # cls, xyxy
|
265
265
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
266
266
|
|
@@ -287,9 +287,14 @@ class v8DetectionLoss:
|
|
287
287
|
|
288
288
|
# Bbox loss
|
289
289
|
if fg_mask.sum():
|
290
|
-
target_bboxes /= stride_tensor
|
291
290
|
loss[0], loss[2] = self.bbox_loss(
|
292
|
-
pred_distri,
|
291
|
+
pred_distri,
|
292
|
+
pred_bboxes,
|
293
|
+
anchor_points,
|
294
|
+
target_bboxes / stride_tensor,
|
295
|
+
target_scores,
|
296
|
+
target_scores_sum,
|
297
|
+
fg_mask,
|
293
298
|
)
|
294
299
|
|
295
300
|
loss[0] *= self.hyp.box # box gain
|
@@ -329,7 +334,7 @@ class v8SegmentationLoss(v8DetectionLoss):
|
|
329
334
|
try:
|
330
335
|
batch_idx = batch["batch_idx"].view(-1, 1)
|
331
336
|
targets = torch.cat((batch_idx, batch["cls"].view(-1, 1), batch["bboxes"]), 1)
|
332
|
-
targets = self.preprocess(targets
|
337
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
333
338
|
gt_labels, gt_bboxes = targets.split((1, 4), 2) # cls, xyxy
|
334
339
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
335
340
|
except RuntimeError as e:
|
@@ -388,7 +393,7 @@ class v8SegmentationLoss(v8DetectionLoss):
|
|
388
393
|
loss[2] *= self.hyp.cls # cls gain
|
389
394
|
loss[3] *= self.hyp.dfl # dfl gain
|
390
395
|
|
391
|
-
return loss * batch_size, loss.detach() # loss(box, cls, dfl)
|
396
|
+
return loss * batch_size, loss.detach() # loss(box, seg, cls, dfl)
|
392
397
|
|
393
398
|
@staticmethod
|
394
399
|
def single_mask_loss(
|
@@ -516,7 +521,7 @@ class v8PoseLoss(v8DetectionLoss):
|
|
516
521
|
batch_size = pred_scores.shape[0]
|
517
522
|
batch_idx = batch["batch_idx"].view(-1, 1)
|
518
523
|
targets = torch.cat((batch_idx, batch["cls"].view(-1, 1), batch["bboxes"]), 1)
|
519
|
-
targets = self.preprocess(targets
|
524
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
520
525
|
gt_labels, gt_bboxes = targets.split((1, 4), 2) # cls, xyxy
|
521
526
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
522
527
|
|
@@ -704,7 +709,7 @@ class v8OBBLoss(v8DetectionLoss):
|
|
704
709
|
targets = torch.cat((batch_idx, batch["cls"].view(-1, 1), batch["bboxes"].view(-1, 5)), 1)
|
705
710
|
rw, rh = targets[:, 4] * imgsz[0].item(), targets[:, 5] * imgsz[1].item()
|
706
711
|
targets = targets[(rw >= 2) & (rh >= 2)] # filter rboxes of tiny size to stabilize training
|
707
|
-
targets = self.preprocess(targets
|
712
|
+
targets = self.preprocess(targets, batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])
|
708
713
|
gt_labels, gt_bboxes = targets.split((1, 5), 2) # cls, xywhr
|
709
714
|
mask_gt = gt_bboxes.sum(2, keepdim=True).gt_(0.0)
|
710
715
|
except RuntimeError as e:
|
ultralytics/utils/nms.py
CHANGED
@@ -192,6 +192,7 @@ class TorchNMS:
|
|
192
192
|
iou_threshold: float,
|
193
193
|
use_triu: bool = True,
|
194
194
|
iou_func=box_iou,
|
195
|
+
exit_early: bool = True,
|
195
196
|
) -> torch.Tensor:
|
196
197
|
"""
|
197
198
|
Fast-NMS implementation from https://arxiv.org/pdf/1904.02689 using upper triangular matrix operations.
|
@@ -202,6 +203,7 @@ class TorchNMS:
|
|
202
203
|
iou_threshold (float): IoU threshold for suppression.
|
203
204
|
use_triu (bool): Whether to use torch.triu operator for upper triangular matrix operations.
|
204
205
|
iou_func (callable): Function to compute IoU between boxes.
|
206
|
+
exit_early (bool): Whether to exit early if there are no boxes.
|
205
207
|
|
206
208
|
Returns:
|
207
209
|
(torch.Tensor): Indices of boxes to keep after NMS.
|
@@ -212,7 +214,7 @@ class TorchNMS:
|
|
212
214
|
>>> scores = torch.tensor([0.9, 0.8])
|
213
215
|
>>> keep = TorchNMS.nms(boxes, scores, 0.5)
|
214
216
|
"""
|
215
|
-
if boxes.numel() == 0:
|
217
|
+
if boxes.numel() == 0 and exit_early:
|
216
218
|
return torch.empty((0,), dtype=torch.int64, device=boxes.device)
|
217
219
|
|
218
220
|
sorted_idx = torch.argsort(scores, descending=True)
|
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,76 @@ 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 attempt_compile(
|
1010
|
+
model: torch.nn.Module,
|
1011
|
+
device: torch.device,
|
1012
|
+
imgsz: int = 640,
|
1013
|
+
use_autocast: bool = False,
|
1014
|
+
warmup: bool = False,
|
1015
|
+
prefix: str = colorstr("compile:"),
|
1016
|
+
) -> torch.nn.Module:
|
1017
|
+
"""
|
1018
|
+
Compile a model with torch.compile and optionally warm up the graph to reduce first-iteration latency.
|
1019
|
+
|
1020
|
+
This utility attempts to compile the provided model using the inductor backend with dynamic shapes enabled and an
|
1021
|
+
autotuning mode. If compilation is unavailable or fails, the original model is returned unchanged. An optional
|
1022
|
+
warmup performs a single forward pass on a dummy input to prime the compiled graph and measure compile/warmup time.
|
1023
|
+
|
1024
|
+
Args:
|
1025
|
+
model (torch.nn.Module): Model to compile.
|
1026
|
+
device (torch.device): Inference device used for warmup and autocast decisions.
|
1027
|
+
imgsz (int, optional): Square input size to create a dummy tensor with shape (1, 3, imgsz, imgsz) for warmup.
|
1028
|
+
use_autocast (bool, optional): Whether to run warmup under autocast on CUDA or MPS devices.
|
1029
|
+
warmup (bool, optional): Whether to execute a single dummy forward pass to warm up the compiled model.
|
1030
|
+
prefix (str, optional): Message prefix for logger output.
|
1031
|
+
|
1032
|
+
Returns:
|
1033
|
+
model (torch.nn.Module): Compiled model if compilation succeeds, otherwise the original unmodified model.
|
1034
|
+
|
1035
|
+
Notes:
|
1036
|
+
- If the current PyTorch build does not provide torch.compile, the function returns the input model immediately.
|
1037
|
+
- Warmup runs under torch.inference_mode and may use torch.autocast for CUDA/MPS to align compute precision.
|
1038
|
+
- CUDA devices are synchronized after warmup to account for asynchronous kernel execution.
|
1039
|
+
|
1040
|
+
Examples:
|
1041
|
+
>>> device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
1042
|
+
>>> # Try to compile and warm up a model with a 640x640 input
|
1043
|
+
>>> model = attempt_compile(model, device=device, imgsz=640, use_autocast=True, warmup=True)
|
1044
|
+
"""
|
1045
|
+
if not hasattr(torch, "compile"):
|
1046
|
+
return model
|
1047
|
+
|
1048
|
+
LOGGER.info(f"{prefix} starting torch.compile...")
|
1049
|
+
t0 = time.perf_counter()
|
1050
|
+
try:
|
1051
|
+
model = torch.compile(model, mode="max-autotune", backend="inductor")
|
1052
|
+
except Exception as e:
|
1053
|
+
LOGGER.warning(f"{prefix} torch.compile failed, continuing uncompiled: {e}")
|
1054
|
+
return model
|
1055
|
+
t_compile = time.perf_counter() - t0
|
1056
|
+
|
1057
|
+
t_warm = 0.0
|
1058
|
+
if warmup:
|
1059
|
+
# Use a single dummy tensor to build the graph shape state and reduce first-iteration latency
|
1060
|
+
dummy = torch.zeros(1, 3, imgsz, imgsz, device=device)
|
1061
|
+
if use_autocast and device.type == "cuda":
|
1062
|
+
dummy = dummy.half()
|
1063
|
+
t1 = time.perf_counter()
|
1064
|
+
with torch.inference_mode():
|
1065
|
+
if use_autocast and device.type in {"cuda", "mps"}:
|
1066
|
+
with torch.autocast(device.type):
|
1067
|
+
_ = model(dummy)
|
1068
|
+
else:
|
1069
|
+
_ = model(dummy)
|
1070
|
+
if device.type == "cuda":
|
1071
|
+
torch.cuda.synchronize(device)
|
1072
|
+
t_warm = time.perf_counter() - t1
|
1073
|
+
|
1074
|
+
total = t_compile + t_warm
|
1075
|
+
if warmup:
|
1076
|
+
LOGGER.info(f"{prefix} complete in {total:.1f}s (compile {t_compile:.1f}s + warmup {t_warm:.1f}s)")
|
1077
|
+
else:
|
1078
|
+
LOGGER.info(f"{prefix} compile complete in {t_compile:.1f}s (no warmup)")
|
1079
|
+
return model
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.197
|
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=z_P4EQKfcjM3hGCrxHHRLjWiIR1SU0oCaCjU9htTGDE,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
|
@@ -35,6 +35,7 @@ ultralytics/cfg/datasets/coco8-multispectral.yaml,sha256=nlU4W0d8rl1cVChthOk0NIm
|
|
35
35
|
ultralytics/cfg/datasets/coco8-pose.yaml,sha256=GfSONSl-Oh4QErto91E_ws3im9ZTEYmDMaPOaSLLdV8,1009
|
36
36
|
ultralytics/cfg/datasets/coco8-seg.yaml,sha256=Ez42ZE6xHlj8lcjtMBJJP2Y460q2BuiwRfk090XnBgE,1913
|
37
37
|
ultralytics/cfg/datasets/coco8.yaml,sha256=tzrDY1KW82AHsgpCxte_yPkgMIIpNY6Pb4F46TDPxkk,1888
|
38
|
+
ultralytics/cfg/datasets/construction-ppe.yaml,sha256=pSU9yaAXV369EYQJymNtFQbS_XH4V369gPKKjDrb4ho,1008
|
38
39
|
ultralytics/cfg/datasets/crack-seg.yaml,sha256=fqvSIq1fRXO55V_g2T92hcYAVoKBHZsSZQR7CokoPUI,837
|
39
40
|
ultralytics/cfg/datasets/dog-pose.yaml,sha256=sRU1JDtEC4nLVf2vkn7lxbp4ILWNcgE-ok96rxZv2lc,908
|
40
41
|
ultralytics/cfg/datasets/dota8-multispectral.yaml,sha256=2lMBi1Q3_pc0auK00yX80oF7oUMo0bUlwjkOrp33hvs,1216
|
@@ -106,9 +107,9 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=TpRaK5kH_-QbjCQ7ekM4s_7j8I8ti3q8Hs7
|
|
106
107
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypgv26LGCtPDg,886
|
107
108
|
ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
|
108
109
|
ultralytics/data/annotator.py,sha256=f15TCDEM8SuuzHiFB8oyhTy9vfywKmPTLSPAgsZQP9I,2990
|
109
|
-
ultralytics/data/augment.py,sha256=
|
110
|
+
ultralytics/data/augment.py,sha256=3ArOOP1dSnCfQRHIQ6og-XFsaLnSqrXYtx-tpbE4Kag,132893
|
110
111
|
ultralytics/data/base.py,sha256=gWoGFifyNe1TCwtGdGp5jzKOQ9sh4b-XrfyN0PPvRaY,19661
|
111
|
-
ultralytics/data/build.py,sha256=
|
112
|
+
ultralytics/data/build.py,sha256=Bhu8E-FNSkTbz6YpNXeUBmQtN91ZtZxOCUiKYXgzV-c,11778
|
112
113
|
ultralytics/data/converter.py,sha256=N1YFD0mG7uwL12wMcuVtF2zbISBIzTsGiy1QioDTDGs,32049
|
113
114
|
ultralytics/data/dataset.py,sha256=AfWOLsLKjTDHRtSqODKk5OsD3ViETZTKxY4PKP2Jo5Q,36751
|
114
115
|
ultralytics/data/loaders.py,sha256=sfQ0C86uBg9QQbN3aU0W8FIjGQmMdJTQAMK4DA1bjk8,31748
|
@@ -120,13 +121,13 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
|
|
120
121
|
ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
|
121
122
|
ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
|
122
123
|
ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
123
|
-
ultralytics/engine/exporter.py,sha256=
|
124
|
-
ultralytics/engine/model.py,sha256=
|
125
|
-
ultralytics/engine/predictor.py,sha256=
|
124
|
+
ultralytics/engine/exporter.py,sha256=K4Ga3CSt7mFEgbnOAIe0fvztfJDkDOFrROC21WqMGN8,75004
|
125
|
+
ultralytics/engine/model.py,sha256=iwwaL2NR5NSwQ7R3juHzS3ds9W-CfhC_CjUcwMvcgsk,53426
|
126
|
+
ultralytics/engine/predictor.py,sha256=510VPYcYmEYPJmBiApQLGaFFAL4gd79rVzPCwisH7LE,22745
|
126
127
|
ultralytics/engine/results.py,sha256=BmhePCaaTBfYrJT12t6bywZuZ_7h3tIc4IsRFuyNTdk,71499
|
127
|
-
ultralytics/engine/trainer.py,sha256=
|
128
|
+
ultralytics/engine/trainer.py,sha256=4DFtGOS6II6vD7tUPNgSK45DgzFjUSkPRvpnXijs4Ew,40914
|
128
129
|
ultralytics/engine/tuner.py,sha256=XuqcjyGpD79pUVn-PXlJJGKXgH1yblPdYBH_R2kHWSU,20586
|
129
|
-
ultralytics/engine/validator.py,sha256=
|
130
|
+
ultralytics/engine/validator.py,sha256=7tADPOXRZz0Yi7F-Z5SxcUnwytaa2MfbtuSdO8pp_l4,16966
|
130
131
|
ultralytics/hub/__init__.py,sha256=xCF02lzlPKbdmGfO3NxLuXl5Kb0MaBZp_-fAWDHZ8zw,6698
|
131
132
|
ultralytics/hub/auth.py,sha256=RIwZDWfW6vS2yGpZKR0xVl0-38itJYEFtmqY_M70bl8,6304
|
132
133
|
ultralytics/hub/session.py,sha256=1o9vdd_fvPUHQ5oZgljtPePuPMUalIoXqOvE7Sdmd2o,18450
|
@@ -168,35 +169,35 @@ ultralytics/models/yolo/__init__.py,sha256=or0j5xvcM0usMlsFTYhNAOcQUri7reD0cD9JR
|
|
168
169
|
ultralytics/models/yolo/model.py,sha256=b_F1AeBUgiSssRxZ-rGQVdB0a37rDG92h_03o0N29B8,18761
|
169
170
|
ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
|
170
171
|
ultralytics/models/yolo/classify/predict.py,sha256=o7pDE8xwjkHUUIIOph7ZVQZyGZyob24dYDQ460v_7R0,4149
|
171
|
-
ultralytics/models/yolo/classify/train.py,sha256=
|
172
|
+
ultralytics/models/yolo/classify/train.py,sha256=CXi8ZrVqYtqlzRbg3UP5kOyMYXAM4Wex8Ii0fDyv-iA,9840
|
172
173
|
ultralytics/models/yolo/classify/val.py,sha256=6_-pbnb0skASJCqsar6_i3FyvfKNJwZ7Y8AK7wzySIU,10039
|
173
174
|
ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
|
174
175
|
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=
|
176
|
+
ultralytics/models/yolo/detect/train.py,sha256=8t_dou6LKE_Td71cDdRUzEVaXMipOYUv1mcnfspDqyI,10749
|
177
|
+
ultralytics/models/yolo/detect/val.py,sha256=OG38-x3LyCAeH3UY9jOG4axK7mfnVnTwaKpjMzQi07I,21309
|
177
178
|
ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
|
178
179
|
ultralytics/models/yolo/obb/predict.py,sha256=4r1eSld6TNJlk9JG56e-DX6oPL8uBBqiuztyBpxWlHE,2888
|
179
|
-
ultralytics/models/yolo/obb/train.py,sha256=
|
180
|
+
ultralytics/models/yolo/obb/train.py,sha256=BbehrsKP0lHRV3v7rrw8wAeiDdc-szbhHAmDy0OdhoM,3461
|
180
181
|
ultralytics/models/yolo/obb/val.py,sha256=ZNjdI5dF-igZCqJadAUb5VPTevI5i47G-bPTG8wV-CY,14171
|
181
182
|
ultralytics/models/yolo/pose/__init__.py,sha256=63xmuHZLNzV8I76HhVXAq4f2W0KTk8Oi9eL-Y204LyQ,227
|
182
183
|
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=
|
184
|
+
ultralytics/models/yolo/pose/train.py,sha256=WdCEgbdxKvPEH-81tF-pNjrXHck7uTlqUONyKVxq_n4,5004
|
185
|
+
ultralytics/models/yolo/pose/val.py,sha256=U4tMWbHpCjspJ6i5DbNUav05RFCvwvfD1mjejqJIJ1c,12638
|
185
186
|
ultralytics/models/yolo/segment/__init__.py,sha256=3IThhZ1wlkY9FvmWm9cE-5-ZyE6F1FgzAtQ6jOOFzzw,275
|
186
187
|
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=
|
188
|
+
ultralytics/models/yolo/segment/train.py,sha256=Om8snA0fOvddFVZNHrUYfu4admJXxmsVlMQAKOnkwpk,3253
|
189
|
+
ultralytics/models/yolo/segment/val.py,sha256=oyiscSgMWdfmbdNJrumnPoSX6-gZXMx4XnfbX5Hc-RY,11158
|
189
190
|
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=
|
191
|
+
ultralytics/models/yolo/world/train.py,sha256=zVPtVoBedberGkth3tPuIH665HjGNJvTMLw_wLZQM84,7870
|
192
|
+
ultralytics/models/yolo/world/train_world.py,sha256=9p9YIckrATaJjGOrpmuC8MbZX9qdoCPCEV9EGZ0sExg,9553
|
192
193
|
ultralytics/models/yolo/yoloe/__init__.py,sha256=6SLytdJtwu37qewf7CobG7C7Wl1m-xtNdvCXEasfPDE,760
|
193
194
|
ultralytics/models/yolo/yoloe/predict.py,sha256=pcbAUbosr1Xc436MfQi6ah3MQ6kkPzjOcltmdA3VMDE,7124
|
194
|
-
ultralytics/models/yolo/yoloe/train.py,sha256=
|
195
|
+
ultralytics/models/yolo/yoloe/train.py,sha256=jcXqGm8CReOCVMFLk-1bNe0Aw5PWaaQa8xBWxtrt5TY,13571
|
195
196
|
ultralytics/models/yolo/yoloe/train_seg.py,sha256=aCV7M8oQOvODFnU4piZdJh3tIrBJYAzZfRVRx1vRgxo,4956
|
196
|
-
ultralytics/models/yolo/yoloe/val.py,sha256=
|
197
|
+
ultralytics/models/yolo/yoloe/val.py,sha256=Dn6CKpfcopDVxr-WY13ATDVb_RIzQ-wsXSxxy_mpndA,9454
|
197
198
|
ultralytics/nn/__init__.py,sha256=PJgOn2phQTTBR2P3s_JWvGeGXQpvw1znsumKow4tCuE,545
|
198
199
|
ultralytics/nn/autobackend.py,sha256=WWHIFvCI47Wpe3NCDkoUg3esjOTJ0XGEzG3luA_uG-8,41063
|
199
|
-
ultralytics/nn/tasks.py,sha256=
|
200
|
+
ultralytics/nn/tasks.py,sha256=2MnuL8plr4oE_gpSIeSbCYrbkdMXdludQWWj_liWsv8,70404
|
200
201
|
ultralytics/nn/text_model.py,sha256=pHqnKe8UueR1MuwJcIE_IvrnYIlt68QL796xjcRJs2A,15275
|
201
202
|
ultralytics/nn/modules/__init__.py,sha256=BPMbEm1daI7Tuds3zph2_afAX7Gq1uAqK8BfiCfKTZs,3198
|
202
203
|
ultralytics/nn/modules/activation.py,sha256=75JcIMH2Cu9GTC2Uf55r_5YLpxcrXQDaVoeGQ0hlUAU,2233
|
@@ -235,11 +236,11 @@ ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6D
|
|
235
236
|
ultralytics/trackers/utils/gmc.py,sha256=1cCmlbk5Z6Pd-rFCaiJML7o_cUm_IktMuCocTDOMGFQ,14028
|
236
237
|
ultralytics/trackers/utils/kalman_filter.py,sha256=PPmM0lwBMdT_hGojvfLoUsBUFMBBMNRAxKbMcQa3wJ0,21619
|
237
238
|
ultralytics/trackers/utils/matching.py,sha256=I8SX0sBaBgr4GBJ9uDGOy5LnotgNZHpB2p5RNF1sy-s,7160
|
238
|
-
ultralytics/utils/__init__.py,sha256=
|
239
|
+
ultralytics/utils/__init__.py,sha256=whSIuj-0lV0SAp4YjOeBJZ2emP1Qa8pqLnrhRiwl2Qs,53503
|
239
240
|
ultralytics/utils/autobatch.py,sha256=i6KYLLSItKP1Q2IUlTPHrZhjcxl7UOjs0Seb8bF8pvM,5124
|
240
241
|
ultralytics/utils/autodevice.py,sha256=d9yq6eEn05fdfzfpxeSECd0YEO61er5f7T-0kjLdofg,8843
|
241
242
|
ultralytics/utils/benchmarks.py,sha256=lcIr--oKK0TCjUVbvrm-NtYrnszrEMuHJC9__ziM7y8,31458
|
242
|
-
ultralytics/utils/checks.py,sha256=
|
243
|
+
ultralytics/utils/checks.py,sha256=Jw5pwREBnlyrq3zbiHEwiQXir2-f7dGpXeqY_PgoNpw,34518
|
243
244
|
ultralytics/utils/cpu.py,sha256=OPlVxROWhQp-kEa9EkeNRKRQ-jz0KwySu5a-h91JZjk,3634
|
244
245
|
ultralytics/utils/dist.py,sha256=g7OKPrSgjIB2wgcncSFYtFuR-uW6J0-Y1z76k4gDSz0,4170
|
245
246
|
ultralytics/utils/downloads.py,sha256=JIlHfUg-qna5aOHRJupH7d5zob2qGZtRrs86Cp3zOJs,23029
|
@@ -250,14 +251,14 @@ ultralytics/utils/files.py,sha256=kxE2rkBuZL288nSN7jxLljmDnBgc16rekEXeRjhbUoo,82
|
|
250
251
|
ultralytics/utils/git.py,sha256=DcaxKNQfCiG3cxdzuw7M6l_VXgaSVqkERQt_vl8UyXM,5512
|
251
252
|
ultralytics/utils/instance.py,sha256=_b_jMTECWJGzncCiTg7FtTDSSeXGnbiAhaJhIsqbn9k,19043
|
252
253
|
ultralytics/utils/logger.py,sha256=o_vH4CCgQat6_Sbmwm1sUAJ4muAgVcsUed-WqpGNQZw,15129
|
253
|
-
ultralytics/utils/loss.py,sha256=
|
254
|
+
ultralytics/utils/loss.py,sha256=wJ0F2DpRTI9-e9adxIm2io0zcXRa0RTWFTOc7WmS1-A,39827
|
254
255
|
ultralytics/utils/metrics.py,sha256=xFlSqx_su96LAUpxfGP7ShEG50Qo5p5OtwR3hx4_Llc,68809
|
255
|
-
ultralytics/utils/nms.py,sha256=
|
256
|
+
ultralytics/utils/nms.py,sha256=4EdGNSkl8-AjMkghnuPQZR0lsZOW416bYfVsA9ZUOeU,14323
|
256
257
|
ultralytics/utils/ops.py,sha256=PW3fgw1d18CA2ZNQZVJqUy054cJ_9tIcxd1XnA0FPgU,26905
|
257
258
|
ultralytics/utils/patches.py,sha256=0-2G4jXCIPnMonlft-cPcjfFcOXQS6ODwUDNUwanfg4,6541
|
258
|
-
ultralytics/utils/plotting.py,sha256=
|
259
|
+
ultralytics/utils/plotting.py,sha256=rumZLvfLX1bE9xQS7Gk13kVM7AmIxQOmQ5CAmhsdxCE,47531
|
259
260
|
ultralytics/utils/tal.py,sha256=LrziY_ZHz4wln3oOnqAzgyPaXKoup17Sa103BpuaQFU,20935
|
260
|
-
ultralytics/utils/torch_utils.py,sha256=
|
261
|
+
ultralytics/utils/torch_utils.py,sha256=tEhRGVPaKKtVeDpN1K171up585DNe19un8y1ri70Zn8,42869
|
261
262
|
ultralytics/utils/tqdm.py,sha256=ny5RIg2OTkWQ7gdaXfYaoIgR0Xn2_hNGB6tUpO2Unns,16137
|
262
263
|
ultralytics/utils/triton.py,sha256=fbMfTAUyoGiyslWtySzLZw53XmZJa7rF31CYFot0Wjs,5422
|
263
264
|
ultralytics/utils/tuner.py,sha256=9D4dSIvwwxcNSJcH2QJ92qiIVi9zu-1L7_PBZ8okDyE,6816
|
@@ -271,11 +272,11 @@ ultralytics/utils/callbacks/mlflow.py,sha256=6K8I5zij1yq3TUW9c5BBQNqdzz3IXugQjwK
|
|
271
272
|
ultralytics/utils/callbacks/neptune.py,sha256=j8pecmlcsM8FGzLKWoBw5xUsi5t8E5HuxY7TR5Um_O8,4612
|
272
273
|
ultralytics/utils/callbacks/platform.py,sha256=a7T_8htoBB0uX1WIc392UJnhDjxkRyQMvhPYKR6wUTU,2008
|
273
274
|
ultralytics/utils/callbacks/raytune.py,sha256=S6Bq16oQDQ8BQgnZzA0zJHGN_BBr8iAM_WtGoLiEcwg,1283
|
274
|
-
ultralytics/utils/callbacks/tensorboard.py,sha256=
|
275
|
+
ultralytics/utils/callbacks/tensorboard.py,sha256=_4nfGK1dDLn6ijpvphBDhc-AS8qhS3jjY2CAWB7SNF0,5283
|
275
276
|
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.
|
277
|
+
ultralytics-8.3.197.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
278
|
+
ultralytics-8.3.197.dist-info/METADATA,sha256=UBxGQHTpx_vAFHAuScNN-uFzFLJdy1GSXOQV6wvLGjM,37667
|
279
|
+
ultralytics-8.3.197.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
280
|
+
ultralytics-8.3.197.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
281
|
+
ultralytics-8.3.197.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
282
|
+
ultralytics-8.3.197.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|