ultralytics 8.3.202__py3-none-any.whl → 8.3.204__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.
Files changed (38) hide show
  1. tests/test_cli.py +7 -9
  2. tests/test_cuda.py +4 -1
  3. tests/test_exports.py +7 -7
  4. tests/test_python.py +18 -10
  5. tests/test_solutions.py +13 -11
  6. ultralytics/__init__.py +1 -1
  7. ultralytics/data/build.py +4 -1
  8. ultralytics/data/utils.py +5 -0
  9. ultralytics/engine/exporter.py +45 -6
  10. ultralytics/engine/trainer.py +14 -12
  11. ultralytics/engine/tuner.py +1 -1
  12. ultralytics/engine/validator.py +1 -1
  13. ultralytics/models/fastsam/predict.py +2 -1
  14. ultralytics/models/rtdetr/model.py +2 -0
  15. ultralytics/models/sam/modules/sam.py +1 -1
  16. ultralytics/models/sam/predict.py +9 -5
  17. ultralytics/models/yolo/classify/train.py +2 -2
  18. ultralytics/models/yolo/classify/val.py +2 -2
  19. ultralytics/models/yolo/detect/train.py +1 -1
  20. ultralytics/models/yolo/detect/val.py +1 -1
  21. ultralytics/models/yolo/model.py +1 -0
  22. ultralytics/models/yolo/world/train.py +4 -2
  23. ultralytics/models/yolo/yoloe/train.py +1 -13
  24. ultralytics/nn/autobackend.py +1 -1
  25. ultralytics/nn/modules/head.py +3 -3
  26. ultralytics/nn/modules/transformer.py +3 -1
  27. ultralytics/solutions/similarity_search.py +3 -2
  28. ultralytics/solutions/streamlit_inference.py +2 -3
  29. ultralytics/utils/checks.py +27 -0
  30. ultralytics/utils/metrics.py +3 -3
  31. ultralytics/utils/tal.py +3 -5
  32. ultralytics/utils/torch_utils.py +5 -34
  33. {ultralytics-8.3.202.dist-info → ultralytics-8.3.204.dist-info}/METADATA +21 -21
  34. {ultralytics-8.3.202.dist-info → ultralytics-8.3.204.dist-info}/RECORD +38 -38
  35. {ultralytics-8.3.202.dist-info → ultralytics-8.3.204.dist-info}/WHEEL +0 -0
  36. {ultralytics-8.3.202.dist-info → ultralytics-8.3.204.dist-info}/entry_points.txt +0 -0
  37. {ultralytics-8.3.202.dist-info → ultralytics-8.3.204.dist-info}/licenses/LICENSE +0 -0
  38. {ultralytics-8.3.202.dist-info → ultralytics-8.3.204.dist-info}/top_level.txt +0 -0
@@ -416,6 +416,7 @@ class YOLOE(Model):
416
416
  "batch": 1,
417
417
  "device": kwargs.get("device", None),
418
418
  "half": kwargs.get("half", False),
419
+ "imgsz": kwargs.get("imgsz", self.overrides["imgsz"]),
419
420
  },
420
421
  _callbacks=self.callbacks,
421
422
  )
@@ -64,6 +64,7 @@ class WorldTrainer(DetectionTrainer):
64
64
  """
65
65
  if overrides is None:
66
66
  overrides = {}
67
+ assert not overrides.get("compile"), f"Training with 'model={overrides['model']}' requires 'compile=False'"
67
68
  super().__init__(cfg, overrides, _callbacks)
68
69
  self.text_embeddings = None
69
70
 
@@ -171,7 +172,8 @@ class WorldTrainer(DetectionTrainer):
171
172
 
172
173
  # Add text features
173
174
  texts = list(itertools.chain(*batch["texts"]))
174
- txt_feats = torch.stack([self.text_embeddings[text] for text in texts]).to(self.device, non_blocking=True)
175
- txt_feats = txt_feats / txt_feats.norm(p=2, dim=-1, keepdim=True)
175
+ txt_feats = torch.stack([self.text_embeddings[text] for text in texts]).to(
176
+ self.device, non_blocking=self.device.type == "cuda"
177
+ )
176
178
  batch["txt_feats"] = txt_feats.reshape(len(batch["texts"]), -1, txt_feats.shape[-1])
177
179
  return batch
@@ -2,7 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import itertools
6
5
  from copy import copy, deepcopy
7
6
  from pathlib import Path
8
7
 
@@ -46,6 +45,7 @@ class YOLOETrainer(DetectionTrainer):
46
45
  """
47
46
  if overrides is None:
48
47
  overrides = {}
48
+ assert not overrides.get("compile"), f"Training with 'model={overrides['model']}' requires 'compile=False'"
49
49
  overrides["overlap_mask"] = False
50
50
  super().__init__(cfg, overrides, _callbacks)
51
51
 
@@ -168,7 +168,6 @@ class YOLOETrainerFromScratch(YOLOETrainer, WorldTrainerFromScratch):
168
168
 
169
169
  Methods:
170
170
  build_dataset: Build datasets for training with grounding support.
171
- preprocess_batch: Process batches with text features.
172
171
  generate_text_embeddings: Generate and cache text embeddings for training.
173
172
  """
174
173
 
@@ -189,16 +188,6 @@ class YOLOETrainerFromScratch(YOLOETrainer, WorldTrainerFromScratch):
189
188
  """
190
189
  return WorldTrainerFromScratch.build_dataset(self, img_path, mode, batch)
191
190
 
192
- def preprocess_batch(self, batch):
193
- """Process batch for training, moving text features to the appropriate device."""
194
- batch = DetectionTrainer.preprocess_batch(self, batch)
195
-
196
- texts = list(itertools.chain(*batch["texts"]))
197
- txt_feats = torch.stack([self.text_embeddings[text] for text in texts]).to(self.device, non_blocking=True)
198
- txt_feats = txt_feats.reshape(len(batch["texts"]), -1, txt_feats.shape[-1])
199
- batch["txt_feats"] = txt_feats
200
- return batch
201
-
202
191
  def generate_text_embeddings(self, texts: list[str], batch: int, cache_dir: Path):
203
192
  """
204
193
  Generate text embeddings for a list of text samples.
@@ -279,7 +268,6 @@ class YOLOEVPTrainer(YOLOETrainerFromScratch):
279
268
 
280
269
  Methods:
281
270
  build_dataset: Build dataset with visual prompt loading transforms.
282
- preprocess_batch: Preprocess batches with visual prompts.
283
271
  """
284
272
 
285
273
  def build_dataset(self, img_path: list[str] | str, mode: str = "train", batch: int | None = None):
@@ -249,7 +249,7 @@ class AutoBackend(nn.Module):
249
249
  LOGGER.warning("Failed to start ONNX Runtime with CUDA. Using CPU...")
250
250
  device = torch.device("cpu")
251
251
  cuda = False
252
- LOGGER.info(f"Using ONNX Runtime {providers[0]}")
252
+ LOGGER.info(f"Using ONNX Runtime {onnxruntime.__version__} {providers[0]}")
253
253
  if onnx:
254
254
  session = onnxruntime.InferenceSession(w, providers=providers)
255
255
  else:
@@ -12,8 +12,8 @@ import torch.nn.functional as F
12
12
  from torch.nn.init import constant_, xavier_uniform_
13
13
 
14
14
  from ultralytics.utils import NOT_MACOS14
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
15
+ from ultralytics.utils.tal import dist2bbox, dist2rbox, make_anchors
16
+ from ultralytics.utils.torch_utils import TORCH_1_11, 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
@@ -1052,7 +1052,7 @@ class RTDETRDecoder(nn.Module):
1052
1052
  for i, (h, w) in enumerate(shapes):
1053
1053
  sy = torch.arange(end=h, dtype=dtype, device=device)
1054
1054
  sx = torch.arange(end=w, dtype=dtype, device=device)
1055
- grid_y, grid_x = torch.meshgrid(sy, sx, indexing="ij") if TORCH_1_10 else torch.meshgrid(sy, sx)
1055
+ grid_y, grid_x = torch.meshgrid(sy, sx, indexing="ij") if TORCH_1_11 else torch.meshgrid(sy, sx)
1056
1056
  grid_xy = torch.stack([grid_x, grid_y], -1) # (h, w, 2)
1057
1057
 
1058
1058
  valid_WH = torch.tensor([w, h], dtype=dtype, device=device)
@@ -10,6 +10,8 @@ import torch.nn as nn
10
10
  import torch.nn.functional as F
11
11
  from torch.nn.init import constant_, xavier_uniform_
12
12
 
13
+ from ultralytics.utils.torch_utils import TORCH_1_11
14
+
13
15
  from .conv import Conv
14
16
  from .utils import _get_clones, inverse_sigmoid, multi_scale_deformable_attn_pytorch
15
17
 
@@ -236,7 +238,7 @@ class AIFI(TransformerEncoderLayer):
236
238
  assert embed_dim % 4 == 0, "Embed dimension must be divisible by 4 for 2D sin-cos position embedding"
237
239
  grid_w = torch.arange(w, dtype=torch.float32)
238
240
  grid_h = torch.arange(h, dtype=torch.float32)
239
- grid_w, grid_h = torch.meshgrid(grid_w, grid_h, indexing="ij")
241
+ grid_w, grid_h = torch.meshgrid(grid_w, grid_h, indexing="ij") if TORCH_1_11 else torch.meshgrid(grid_w, grid_h)
240
242
  pos_dim = embed_dim // 4
241
243
  omega = torch.arange(pos_dim, dtype=torch.float32) / pos_dim
242
244
  omega = 1.0 / (temperature**omega)
@@ -10,9 +10,9 @@ import numpy as np
10
10
  from PIL import Image
11
11
 
12
12
  from ultralytics.data.utils import IMG_FORMATS
13
- from ultralytics.utils import LOGGER
13
+ from ultralytics.utils import LOGGER, TORCH_VERSION
14
14
  from ultralytics.utils.checks import check_requirements
15
- from ultralytics.utils.torch_utils import select_device
15
+ from ultralytics.utils.torch_utils import TORCH_2_4, select_device
16
16
 
17
17
  os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" # Avoid OpenMP conflict on some systems
18
18
 
@@ -49,6 +49,7 @@ class VisualAISearch:
49
49
 
50
50
  def __init__(self, **kwargs: Any) -> None:
51
51
  """Initialize the VisualAISearch class with FAISS index and CLIP model."""
52
+ assert TORCH_2_4, f"VisualAISearch requires torch>=2.4 (found torch=={TORCH_VERSION})"
52
53
  from ultralytics.nn.text_model import build_text_model
53
54
 
54
55
  check_requirements("faiss-cpu")
@@ -166,9 +166,8 @@ class Inference:
166
166
  selected_model = self.st.sidebar.selectbox("Model", available_models)
167
167
 
168
168
  with self.st.spinner("Model is downloading..."):
169
- if (
170
- selected_model.endswith((".pt", ".onnx", ".torchscript", ".mlpackage", ".engine"))
171
- or "openvino_model" in selected_model
169
+ if selected_model.endswith((".pt", ".onnx", ".torchscript", ".mlpackage", ".engine")) or any(
170
+ fmt in selected_model for fmt in ("openvino_model", "rknn_model")
172
171
  ):
173
172
  model_path = selected_model
174
173
  else:
@@ -669,6 +669,9 @@ def check_yolo(verbose=True, device=""):
669
669
  else:
670
670
  s = ""
671
671
 
672
+ if GIT.is_repo:
673
+ check_multiple_install() # check conflicting installation if using local clone
674
+
672
675
  select_device(device=device, newline=False)
673
676
  LOGGER.info(f"Setup complete ✅ {s}")
674
677
 
@@ -807,6 +810,30 @@ def check_amp(model):
807
810
  return True
808
811
 
809
812
 
813
+ def check_multiple_install():
814
+ """Check if there are multiple Ultralytics installations."""
815
+ import sys
816
+
817
+ try:
818
+ result = subprocess.run([sys.executable, "-m", "pip", "show", "ultralytics"], capture_output=True, text=True)
819
+ install_msg = (
820
+ f"Install your local copy in editable mode with 'pip install -e {ROOT.parent}' to avoid "
821
+ "issues. See https://docs.ultralytics.com/quickstart/"
822
+ )
823
+ if result.returncode != 0:
824
+ if "not found" in result.stderr.lower(): # Package not pip-installed but locally imported
825
+ LOGGER.warning(f"Ultralytics not found via pip but importing from: {ROOT}. {install_msg}")
826
+ return
827
+ yolo_path = (Path(re.findall(r"location:\s+(.+)", result.stdout, flags=re.I)[-1]) / "ultralytics").resolve()
828
+ if not yolo_path.samefile(ROOT.resolve()):
829
+ LOGGER.warning(
830
+ f"Multiple Ultralytics installations detected. The `yolo` command uses: {yolo_path}, "
831
+ f"but current session imports from: {ROOT}. This may cause version conflicts. {install_msg}"
832
+ )
833
+ except Exception:
834
+ return
835
+
836
+
810
837
  def print_args(args: dict | None = None, show_file=True, show_func=False):
811
838
  """
812
839
  Print function arguments (optional args dict).
@@ -491,12 +491,12 @@ class ConfusionMatrix(DataExportMixin):
491
491
  for i, mtype in enumerate(["GT", "FP", "TP", "FN"]):
492
492
  mbatch = self.matches[mtype]
493
493
  if "conf" not in mbatch:
494
- mbatch["conf"] = torch.tensor([1.0] * mbatch["bboxes"].shape[0], device=img.device)
495
- mbatch["batch_idx"] = torch.ones(mbatch["bboxes"].shape[0], device=img.device) * i
494
+ mbatch["conf"] = torch.tensor([1.0] * len(mbatch["bboxes"]), device=img.device)
495
+ mbatch["batch_idx"] = torch.ones(len(mbatch["bboxes"]), device=img.device) * i
496
496
  for k in mbatch.keys():
497
497
  labels[k] += mbatch[k]
498
498
 
499
- labels = {k: torch.stack(v, 0) if len(v) else v for k, v in labels.items()}
499
+ labels = {k: torch.stack(v, 0) if len(v) else torch.empty(0) for k, v in labels.items()}
500
500
  if self.task != "obb" and labels["bboxes"].shape[0]:
501
501
  labels["bboxes"] = xyxy2xywh(labels["bboxes"])
502
502
  (save_dir / "visualizations").mkdir(parents=True, exist_ok=True)
ultralytics/utils/tal.py CHANGED
@@ -3,12 +3,10 @@
3
3
  import torch
4
4
  import torch.nn as nn
5
5
 
6
- from . import LOGGER, TORCH_VERSION
7
- from .checks import check_version
6
+ from . import LOGGER
8
7
  from .metrics import bbox_iou, probiou
9
8
  from .ops import xywhr2xyxyxyxy
10
-
11
- TORCH_1_10 = check_version(TORCH_VERSION, "1.10.0")
9
+ from .torch_utils import TORCH_1_11
12
10
 
13
11
 
14
12
  class TaskAlignedAssigner(nn.Module):
@@ -373,7 +371,7 @@ def make_anchors(feats, strides, grid_cell_offset=0.5):
373
371
  h, w = feats[i].shape[2:] if isinstance(feats, list) else (int(feats[i][0]), int(feats[i][1]))
374
372
  sx = torch.arange(end=w, device=device, dtype=dtype) + grid_cell_offset # shift x
375
373
  sy = torch.arange(end=h, device=device, dtype=dtype) + grid_cell_offset # shift y
376
- sy, sx = torch.meshgrid(sy, sx, indexing="ij") if TORCH_1_10 else torch.meshgrid(sy, sx)
374
+ sy, sx = torch.meshgrid(sy, sx, indexing="ij") if TORCH_1_11 else torch.meshgrid(sy, sx)
377
375
  anchor_points.append(torch.stack((sx, sy), -1).view(-1, 2))
378
376
  stride_tensor.append(torch.full((h * w, 1), stride, dtype=dtype, device=device))
379
377
  return torch.cat(anchor_points), torch.cat(stride_tensor)
@@ -38,8 +38,11 @@ from ultralytics.utils.patches import torch_load
38
38
 
39
39
  # Version checks (all default to version>=min_version)
40
40
  TORCH_1_9 = check_version(TORCH_VERSION, "1.9.0")
41
+ TORCH_1_10 = check_version(TORCH_VERSION, "1.10.0")
42
+ TORCH_1_11 = check_version(TORCH_VERSION, "1.11.0")
41
43
  TORCH_1_13 = check_version(TORCH_VERSION, "1.13.0")
42
44
  TORCH_2_0 = check_version(TORCH_VERSION, "2.0.0")
45
+ TORCH_2_1 = check_version(TORCH_VERSION, "2.1.0")
43
46
  TORCH_2_4 = check_version(TORCH_VERSION, "2.4.0")
44
47
  TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
45
48
  TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
@@ -127,7 +130,7 @@ def get_gpu_info(index):
127
130
  return f"{properties.name}, {properties.total_memory / (1 << 20):.0f}MiB"
128
131
 
129
132
 
130
- def select_device(device="", batch=0, newline=False, verbose=True):
133
+ def select_device(device="", newline=False, verbose=True):
131
134
  """
132
135
  Select the appropriate PyTorch device based on the provided arguments.
133
136
 
@@ -138,17 +141,12 @@ def select_device(device="", batch=0, newline=False, verbose=True):
138
141
  Args:
139
142
  device (str | torch.device, optional): Device string or torch.device object. Options are 'None', 'cpu', or
140
143
  'cuda', or '0' or '0,1,2,3'. Auto-selects the first available GPU, or CPU if no GPU is available.
141
- batch (int, optional): Batch size being used in your model.
142
144
  newline (bool, optional): If True, adds a newline at the end of the log string.
143
145
  verbose (bool, optional): If True, logs the device information.
144
146
 
145
147
  Returns:
146
148
  (torch.device): Selected device.
147
149
 
148
- Raises:
149
- ValueError: If the specified device is not available or if the batch size is not a multiple of the number of
150
- devices when using multiple GPUs.
151
-
152
150
  Examples:
153
151
  >>> select_device("cuda:0")
154
152
  device(type='cuda', index=0)
@@ -210,18 +208,6 @@ def select_device(device="", batch=0, newline=False, verbose=True):
210
208
 
211
209
  if not cpu and not mps and torch.cuda.is_available(): # prefer GPU if available
212
210
  devices = device.split(",") if device else "0" # i.e. "0,1" -> ["0", "1"]
213
- n = len(devices) # device count
214
- if n > 1: # multi-GPU
215
- if batch < 1:
216
- raise ValueError(
217
- "AutoBatch with batch<1 not supported for Multi-GPU training, "
218
- f"please specify a valid batch size multiple of GPU count {n}, i.e. batch={n * 8}."
219
- )
220
- if batch >= 0 and batch % n != 0: # check batch_size is divisible by device_count
221
- raise ValueError(
222
- f"'batch={batch}' must be a multiple of GPU count {n}. Try 'batch={batch // n * n}' or "
223
- f"'batch={batch // n * n + n}', the nearest batch sizes evenly divisible by {n}."
224
- )
225
211
  space = " " * len(s)
226
212
  for i, d in enumerate(devices):
227
213
  s += f"{'' if i == 0 else space}CUDA:{d} ({get_gpu_info(i)})\n" # bytes to MB
@@ -534,21 +520,6 @@ def copy_attr(a, b, include=(), exclude=()):
534
520
  setattr(a, k, v)
535
521
 
536
522
 
537
- def get_latest_opset():
538
- """
539
- Return the second-most recent ONNX opset version supported by this version of PyTorch, adjusted for maturity.
540
-
541
- Returns:
542
- (int): The ONNX opset version.
543
- """
544
- if TORCH_1_13:
545
- # If the PyTorch>=1.13, dynamically compute the latest opset minus one using 'symbolic_opset'
546
- return max(int(k[14:]) for k in vars(torch.onnx) if "symbolic_opset" in k) - 1
547
- # Otherwise for PyTorch<=1.12 return the corresponding predefined opset
548
- version = torch.onnx.producer_version.rsplit(".", 1)[0] # i.e. '2.3'
549
- return {"1.12": 15, "1.11": 14, "1.10": 13, "1.9": 12, "1.8": 12}.get(version, 12)
550
-
551
-
552
523
  def intersect_dicts(da, db, exclude=()):
553
524
  """
554
525
  Return a dictionary of intersecting keys with matching shapes, excluding 'exclude' keys, using da values.
@@ -761,7 +732,7 @@ def strip_optimizer(f: str | Path = "best.pt", s: str = "", updates: dict[str, A
761
732
 
762
733
  # Update other keys
763
734
  args = {**DEFAULT_CFG_DICT, **x.get("train_args", {})} # combine args
764
- for k in "optimizer", "best_fitness", "ema", "updates": # keys
735
+ for k in "optimizer", "best_fitness", "ema", "updates", "scaler": # keys
765
736
  x[k] = None
766
737
  x["epoch"] = -1
767
738
  x["train_args"] = {k: v for k, v in args.items() if k in DEFAULT_CFG_KEYS} # strip non-default keys
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.202
3
+ Version: 8.3.204
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>
@@ -239,11 +239,11 @@ Refer to the [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) fo
239
239
 
240
240
  | Model | size<br><sup>(pixels) | mAP<sup>box<br>50-95 | mAP<sup>mask<br>50-95 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
241
241
  | -------------------------------------------------------------------------------------------- | --------------------- | -------------------- | --------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
242
- | [YOLO11n-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-seg.pt) | 640 | 38.9 | 32.0 | 65.9 ± 1.1 | 1.8 ± 0.0 | 2.9 | 10.4 |
243
- | [YOLO11s-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-seg.pt) | 640 | 46.6 | 37.8 | 117.6 ± 4.9 | 2.9 ± 0.0 | 10.1 | 35.5 |
244
- | [YOLO11m-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-seg.pt) | 640 | 51.5 | 41.5 | 281.6 ± 1.2 | 6.3 ± 0.1 | 22.4 | 123.3 |
245
- | [YOLO11l-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-seg.pt) | 640 | 53.4 | 42.9 | 344.2 ± 3.2 | 7.8 ± 0.2 | 27.6 | 142.2 |
246
- | [YOLO11x-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-seg.pt) | 640 | 54.7 | 43.8 | 664.5 ± 3.2 | 15.8 ± 0.7 | 62.1 | 319.0 |
242
+ | [YOLO11n-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-seg.pt) | 640 | 38.9 | 32.0 | 65.9 ± 1.1 | 1.8 ± 0.0 | 2.9 | 9.7 |
243
+ | [YOLO11s-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-seg.pt) | 640 | 46.6 | 37.8 | 117.6 ± 4.9 | 2.9 ± 0.0 | 10.1 | 33.0 |
244
+ | [YOLO11m-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-seg.pt) | 640 | 51.5 | 41.5 | 281.6 ± 1.2 | 6.3 ± 0.1 | 22.4 | 113.2 |
245
+ | [YOLO11l-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-seg.pt) | 640 | 53.4 | 42.9 | 344.2 ± 3.2 | 7.8 ± 0.2 | 27.6 | 132.2 |
246
+ | [YOLO11x-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-seg.pt) | 640 | 54.7 | 43.8 | 664.5 ± 3.2 | 15.8 ± 0.7 | 62.1 | 296.4 |
247
247
 
248
248
  - **mAP<sup>val</sup>** values are for single-model single-scale on the [COCO val2017](https://cocodataset.org/) dataset. See [YOLO Performance Metrics](https://docs.ultralytics.com/guides/yolo-performance-metrics/) for details. <br>Reproduce with `yolo val segment data=coco.yaml device=0`
249
249
  - **Speed** metrics are averaged over COCO val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. CPU speeds measured with [ONNX](https://onnx.ai/) export. GPU speeds measured with [TensorRT](https://developer.nvidia.com/tensorrt) export. <br>Reproduce with `yolo val segment data=coco.yaml batch=1 device=0|cpu`
@@ -256,11 +256,11 @@ Consult the [Classification Docs](https://docs.ultralytics.com/tasks/classify/)
256
256
 
257
257
  | Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at 224 |
258
258
  | -------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | ------------------------------ | ----------------------------------- | ------------------ | ------------------------ |
259
- | [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 0.5 |
260
- | [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 1.6 |
261
- | [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 5.0 |
262
- | [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 6.2 |
263
- | [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 13.7 |
259
+ | [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 2.8 | 0.5 |
260
+ | [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 6.7 | 1.6 |
261
+ | [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 11.6 | 4.9 |
262
+ | [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 14.1 | 6.2 |
263
+ | [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 29.6 | 13.6 |
264
264
 
265
265
  - **acc** values represent model accuracy on the [ImageNet](https://www.image-net.org/) dataset validation set. <br>Reproduce with `yolo val classify data=path/to/ImageNet device=0`
266
266
  - **Speed** metrics are averaged over ImageNet val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. CPU speeds measured with [ONNX](https://onnx.ai/) export. GPU speeds measured with [TensorRT](https://developer.nvidia.com/tensorrt) export. <br>Reproduce with `yolo val classify data=path/to/ImageNet batch=1 device=0|cpu`
@@ -273,11 +273,11 @@ See the [Pose Estimation Docs](https://docs.ultralytics.com/tasks/pose/) for usa
273
273
 
274
274
  | Model | size<br><sup>(pixels) | mAP<sup>pose<br>50-95 | mAP<sup>pose<br>50 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
275
275
  | ---------------------------------------------------------------------------------------------- | --------------------- | --------------------- | ------------------ | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
276
- | [YOLO11n-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-pose.pt) | 640 | 50.0 | 81.0 | 52.4 ± 0.5 | 1.7 ± 0.0 | 2.9 | 7.6 |
277
- | [YOLO11s-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-pose.pt) | 640 | 58.9 | 86.3 | 90.5 ± 0.6 | 2.6 ± 0.0 | 9.9 | 23.2 |
278
- | [YOLO11m-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-pose.pt) | 640 | 64.9 | 89.4 | 187.3 ± 0.8 | 4.9 ± 0.1 | 20.9 | 71.7 |
279
- | [YOLO11l-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-pose.pt) | 640 | 66.1 | 89.9 | 247.7 ± 1.1 | 6.4 ± 0.1 | 26.2 | 90.7 |
280
- | [YOLO11x-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-pose.pt) | 640 | 69.5 | 91.1 | 488.0 ± 13.9 | 12.1 ± 0.2 | 58.8 | 203.3 |
276
+ | [YOLO11n-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-pose.pt) | 640 | 50.0 | 81.0 | 52.4 ± 0.5 | 1.7 ± 0.0 | 2.9 | 7.4 |
277
+ | [YOLO11s-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-pose.pt) | 640 | 58.9 | 86.3 | 90.5 ± 0.6 | 2.6 ± 0.0 | 9.9 | 23.1 |
278
+ | [YOLO11m-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-pose.pt) | 640 | 64.9 | 89.4 | 187.3 ± 0.8 | 4.9 ± 0.1 | 20.9 | 71.4 |
279
+ | [YOLO11l-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-pose.pt) | 640 | 66.1 | 89.9 | 247.7 ± 1.1 | 6.4 ± 0.1 | 26.1 | 90.3 |
280
+ | [YOLO11x-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-pose.pt) | 640 | 69.5 | 91.1 | 488.0 ± 13.9 | 12.1 ± 0.2 | 58.8 | 202.8 |
281
281
 
282
282
  - **mAP<sup>val</sup>** values are for single-model single-scale on the [COCO Keypoints val2017](https://docs.ultralytics.com/datasets/pose/coco/) dataset. See [YOLO Performance Metrics](https://docs.ultralytics.com/guides/yolo-performance-metrics/) for details. <br>Reproduce with `yolo val pose data=coco-pose.yaml device=0`
283
283
  - **Speed** metrics are averaged over COCO val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. CPU speeds measured with [ONNX](https://onnx.ai/) export. GPU speeds measured with [TensorRT](https://developer.nvidia.com/tensorrt) export. <br>Reproduce with `yolo val pose data=coco-pose.yaml batch=1 device=0|cpu`
@@ -290,11 +290,11 @@ Check the [OBB Docs](https://docs.ultralytics.com/tasks/obb/) for usage examples
290
290
 
291
291
  | Model | size<br><sup>(pixels) | mAP<sup>test<br>50 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
292
292
  | -------------------------------------------------------------------------------------------- | --------------------- | ------------------ | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
293
- | [YOLO11n-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-obb.pt) | 1024 | 78.4 | 117.6 ± 0.8 | 4.4 ± 0.0 | 2.7 | 17.2 |
294
- | [YOLO11s-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-obb.pt) | 1024 | 79.5 | 219.4 ± 4.0 | 5.1 ± 0.0 | 9.7 | 57.5 |
295
- | [YOLO11m-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-obb.pt) | 1024 | 80.9 | 562.8 ± 2.9 | 10.1 ± 0.4 | 20.9 | 183.5 |
296
- | [YOLO11l-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-obb.pt) | 1024 | 81.0 | 712.5 ± 5.0 | 13.5 ± 0.6 | 26.2 | 232.0 |
297
- | [YOLO11x-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-obb.pt) | 1024 | 81.3 | 1408.6 ± 7.7 | 28.6 ± 1.0 | 58.8 | 520.2 |
293
+ | [YOLO11n-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-obb.pt) | 1024 | 78.4 | 117.6 ± 0.8 | 4.4 ± 0.0 | 2.7 | 16.8 |
294
+ | [YOLO11s-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-obb.pt) | 1024 | 79.5 | 219.4 ± 4.0 | 5.1 ± 0.0 | 9.7 | 57.1 |
295
+ | [YOLO11m-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-obb.pt) | 1024 | 80.9 | 562.8 ± 2.9 | 10.1 ± 0.4 | 20.9 | 182.8 |
296
+ | [YOLO11l-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-obb.pt) | 1024 | 81.0 | 712.5 ± 5.0 | 13.5 ± 0.6 | 26.1 | 231.2 |
297
+ | [YOLO11x-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-obb.pt) | 1024 | 81.3 | 1408.6 ± 7.7 | 28.6 ± 1.0 | 58.8 | 519.1 |
298
298
 
299
299
  - **mAP<sup>test</sup>** values are for single-model multiscale performance on the [DOTAv1 test set](https://captain-whu.github.io/DOTA/dataset.html). <br>Reproduce by `yolo val obb data=DOTAv1.yaml device=0 split=test` and submit merged results to the [DOTA evaluation server](https://captain-whu.github.io/DOTA/evaluation.html).
300
300
  - **Speed** metrics are averaged over [DOTAv1 val images](https://docs.ultralytics.com/datasets/obb/dota-v2/#dota-v10) using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. CPU speeds measured with [ONNX](https://onnx.ai/) export. GPU speeds measured with [TensorRT](https://developer.nvidia.com/tensorrt) export. <br>Reproduce by `yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu`